Revision 912:5e80956cc792 .svn/pristine/13
| .svn/pristine/13/130043bdfae755b8a2fcb2b00201feff2d982de9.svn-base | ||
|---|---|---|
| 1 |
default: |
|
| 2 |
somesetting: foo |
|
| 3 |
|
|
| 4 |
production: |
|
| 5 |
|
|
| 6 |
development: |
|
| 7 |
|
|
| 8 |
test: |
|
| 9 |
somesetting: bar |
|
| .svn/pristine/13/134682aa67acff21c24711968698972a9dfb0d8a.svn-base | ||
|---|---|---|
| 1 |
<h2><%= link_to l(:label_role_plural), :controller => 'roles', :action => 'index' %> » <%=l(:label_role_new)%></h2> |
|
| 2 |
|
|
| 3 |
<% labelled_tabular_form_for :role, @role, :url => { :action => 'new' }, :html => {:id => 'role_form'} do |f| %>
|
|
| 4 |
<%= render :partial => 'form', :locals => { :f => f } %>
|
|
| 5 |
<%= submit_tag l(:button_create) %> |
|
| 6 |
<% end %> |
|
| .svn/pristine/13/134abc8208803badec34f77d9e7dc1b2f4a0df2f.svn-base | ||
|---|---|---|
| 1 |
<h2><%=l(:label_settings)%></h2> |
|
| 2 |
|
|
| 3 |
<%= render_tabs project_settings_tabs %> |
|
| 4 |
|
|
| 5 |
<% html_title(l(:label_settings)) -%> |
|
| .svn/pristine/13/1360db03d113fb07eff0808c5131dd75d05da3fd.svn-base | ||
|---|---|---|
| 1 |
// ** I18N |
|
| 2 |
|
|
| 3 |
// Calendar DE language |
|
| 4 |
// Author: Jack (tR), <jack@jtr.de> |
|
| 5 |
// Encoding: any |
|
| 6 |
// Distributed under the same terms as the calendar itself. |
|
| 7 |
|
|
| 8 |
// For translators: please use UTF-8 if possible. We strongly believe that |
|
| 9 |
// Unicode is the answer to a real internationalized world. Also please |
|
| 10 |
// include your contact information in the header, as can be seen above. |
|
| 11 |
|
|
| 12 |
// full day names |
|
| 13 |
Calendar._DN = new Array |
|
| 14 |
("Sonntag",
|
|
| 15 |
"Montag", |
|
| 16 |
"Dienstag", |
|
| 17 |
"Mittwoch", |
|
| 18 |
"Donnerstag", |
|
| 19 |
"Freitag", |
|
| 20 |
"Samstag", |
|
| 21 |
"Sonntag"); |
|
| 22 |
|
|
| 23 |
// Please note that the following array of short day names (and the same goes |
|
| 24 |
// for short month names, _SMN) isn't absolutely necessary. We give it here |
|
| 25 |
// for exemplification on how one can customize the short day names, but if |
|
| 26 |
// they are simply the first N letters of the full name you can simply say: |
|
| 27 |
// |
|
| 28 |
// Calendar._SDN_len = N; // short day name length |
|
| 29 |
// Calendar._SMN_len = N; // short month name length |
|
| 30 |
// |
|
| 31 |
// If N = 3 then this is not needed either since we assume a value of 3 if not |
|
| 32 |
// present, to be compatible with translation files that were written before |
|
| 33 |
// this feature. |
|
| 34 |
|
|
| 35 |
// First day of the week. "0" means display Sunday first, "1" means display |
|
| 36 |
// Monday first, etc. |
|
| 37 |
Calendar._FD = 1; |
|
| 38 |
|
|
| 39 |
// short day names |
|
| 40 |
Calendar._SDN = new Array |
|
| 41 |
("So",
|
|
| 42 |
"Mo", |
|
| 43 |
"Di", |
|
| 44 |
"Mi", |
|
| 45 |
"Do", |
|
| 46 |
"Fr", |
|
| 47 |
"Sa", |
|
| 48 |
"So"); |
|
| 49 |
|
|
| 50 |
// full month names |
|
| 51 |
Calendar._MN = new Array |
|
| 52 |
("Januar",
|
|
| 53 |
"Februar", |
|
| 54 |
"M\u00e4rz", |
|
| 55 |
"April", |
|
| 56 |
"Mai", |
|
| 57 |
"Juni", |
|
| 58 |
"Juli", |
|
| 59 |
"August", |
|
| 60 |
"September", |
|
| 61 |
"Oktober", |
|
| 62 |
"November", |
|
| 63 |
"Dezember"); |
|
| 64 |
|
|
| 65 |
// short month names |
|
| 66 |
Calendar._SMN = new Array |
|
| 67 |
("Jan",
|
|
| 68 |
"Feb", |
|
| 69 |
"M\u00e4r", |
|
| 70 |
"Apr", |
|
| 71 |
"May", |
|
| 72 |
"Jun", |
|
| 73 |
"Jul", |
|
| 74 |
"Aug", |
|
| 75 |
"Sep", |
|
| 76 |
"Okt", |
|
| 77 |
"Nov", |
|
| 78 |
"Dez"); |
|
| 79 |
|
|
| 80 |
// tooltips |
|
| 81 |
Calendar._TT = {};
|
|
| 82 |
Calendar._TT["INFO"] = "\u00DCber dieses Kalendarmodul"; |
|
| 83 |
|
|
| 84 |
Calendar._TT["ABOUT"] = |
|
| 85 |
"DHTML Date/Time Selector\n" + |
|
| 86 |
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this ;-) |
|
| 87 |
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + |
|
| 88 |
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + |
|
| 89 |
"\n\n" + |
|
| 90 |
"Datum ausw\u00e4hlen:\n" + |
|
| 91 |
"- Benutzen Sie die \xab, \xbb Buttons um das Jahr zu w\u00e4hlen\n" + |
|
| 92 |
"- Benutzen Sie die " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " Buttons um den Monat zu w\u00e4hlen\n" + |
|
| 93 |
"- F\u00fcr eine Schnellauswahl halten Sie die Maustaste \u00fcber diesen Buttons fest."; |
|
| 94 |
Calendar._TT["ABOUT_TIME"] = "\n\n" + |
|
| 95 |
"Zeit ausw\u00e4hlen:\n" + |
|
| 96 |
"- Klicken Sie auf die Teile der Uhrzeit, um diese zu erh\u00F6hen\n" + |
|
| 97 |
"- oder klicken Sie mit festgehaltener Shift-Taste um diese zu verringern\n" + |
|
| 98 |
"- oder klicken und festhalten f\u00fcr Schnellauswahl."; |
|
| 99 |
|
|
| 100 |
Calendar._TT["TOGGLE"] = "Ersten Tag der Woche w\u00e4hlen"; |
|
| 101 |
Calendar._TT["PREV_YEAR"] = "Voriges Jahr (Festhalten f\u00fcr Schnellauswahl)"; |
|
| 102 |
Calendar._TT["PREV_MONTH"] = "Voriger Monat (Festhalten f\u00fcr Schnellauswahl)"; |
|
| 103 |
Calendar._TT["GO_TODAY"] = "Heute ausw\u00e4hlen"; |
|
| 104 |
Calendar._TT["NEXT_MONTH"] = "N\u00e4chst. Monat (Festhalten f\u00fcr Schnellauswahl)"; |
|
| 105 |
Calendar._TT["NEXT_YEAR"] = "N\u00e4chst. Jahr (Festhalten f\u00fcr Schnellauswahl)"; |
|
| 106 |
Calendar._TT["SEL_DATE"] = "Datum ausw\u00e4hlen"; |
|
| 107 |
Calendar._TT["DRAG_TO_MOVE"] = "Zum Bewegen festhalten"; |
|
| 108 |
Calendar._TT["PART_TODAY"] = " (Heute)"; |
|
| 109 |
|
|
| 110 |
// the following is to inform that "%s" is to be the first day of week |
|
| 111 |
// %s will be replaced with the day name. |
|
| 112 |
Calendar._TT["DAY_FIRST"] = "Woche beginnt mit %s "; |
|
| 113 |
|
|
| 114 |
// This may be locale-dependent. It specifies the week-end days, as an array |
|
| 115 |
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 |
|
| 116 |
// means Monday, etc. |
|
| 117 |
Calendar._TT["WEEKEND"] = "0,6"; |
|
| 118 |
|
|
| 119 |
Calendar._TT["CLOSE"] = "Schlie\u00dfen"; |
|
| 120 |
Calendar._TT["TODAY"] = "Heute"; |
|
| 121 |
Calendar._TT["TIME_PART"] = "(Shift-)Klick oder Festhalten und Ziehen um den Wert zu \u00e4ndern"; |
|
| 122 |
|
|
| 123 |
// date formats |
|
| 124 |
Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y"; |
|
| 125 |
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; |
|
| 126 |
|
|
| 127 |
Calendar._TT["WK"] = "wk"; |
|
| 128 |
Calendar._TT["TIME"] = "Zeit:"; |
|
| .svn/pristine/13/137331c94a623d300b9797520d5d31b04bbcafd5.svn-base | ||
|---|---|---|
| 1 |
# Redmine - project management software |
|
| 2 |
# Copyright (C) 2006-2011 Jean-Philippe Lang |
|
| 3 |
# |
|
| 4 |
# This program is free software; you can redistribute it and/or |
|
| 5 |
# modify it under the terms of the GNU General Public License |
|
| 6 |
# as published by the Free Software Foundation; either version 2 |
|
| 7 |
# of the License, or (at your option) any later version. |
|
| 8 |
# |
|
| 9 |
# This program is distributed in the hope that it will be useful, |
|
| 10 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 11 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| 12 |
# GNU General Public License for more details. |
|
| 13 |
# |
|
| 14 |
# You should have received a copy of the GNU General Public License |
|
| 15 |
# along with this program; if not, write to the Free Software |
|
| 16 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
| 17 |
|
|
| 18 |
require File.expand_path('../../test_helper', __FILE__)
|
|
| 19 |
|
|
| 20 |
class AdminTest < ActionController::IntegrationTest |
|
| 21 |
fixtures :projects, :trackers, :issue_statuses, :issues, |
|
| 22 |
:enumerations, :users, :issue_categories, |
|
| 23 |
:projects_trackers, |
|
| 24 |
:roles, |
|
| 25 |
:member_roles, |
|
| 26 |
:members, |
|
| 27 |
:enabled_modules, |
|
| 28 |
:workflows |
|
| 29 |
|
|
| 30 |
def test_add_user |
|
| 31 |
log_user("admin", "admin")
|
|
| 32 |
get "/users/new" |
|
| 33 |
assert_response :success |
|
| 34 |
assert_template "users/new" |
|
| 35 |
post "/users/create", |
|
| 36 |
:user => { :login => "psmith", :firstname => "Paul",
|
|
| 37 |
:lastname => "Smith", :mail => "psmith@somenet.foo", |
|
| 38 |
:language => "en", :password => "psmith09", |
|
| 39 |
:password_confirmation => "psmith09" } |
|
| 40 |
|
|
| 41 |
user = User.find_by_login("psmith")
|
|
| 42 |
assert_kind_of User, user |
|
| 43 |
assert_redirected_to "/users/#{ user.id }/edit"
|
|
| 44 |
|
|
| 45 |
logged_user = User.try_to_login("psmith", "psmith09")
|
|
| 46 |
assert_kind_of User, logged_user |
|
| 47 |
assert_equal "Paul", logged_user.firstname |
|
| 48 |
|
|
| 49 |
put "users/#{user.id}", :id => user.id, :user => { :status => User::STATUS_LOCKED }
|
|
| 50 |
assert_redirected_to "/users/#{ user.id }/edit"
|
|
| 51 |
locked_user = User.try_to_login("psmith", "psmith09")
|
|
| 52 |
assert_equal nil, locked_user |
|
| 53 |
end |
|
| 54 |
|
|
| 55 |
test "Add a user as an anonymous user should fail" do |
|
| 56 |
post '/users/create', |
|
| 57 |
:user => { :login => 'psmith', :firstname => 'Paul'},
|
|
| 58 |
:password => "psmith09", :password_confirmation => "psmith09" |
|
| 59 |
assert_response :redirect |
|
| 60 |
assert_redirected_to "/login?back_url=http%3A%2F%2Fwww.example.com%2Fusers" |
|
| 61 |
end |
|
| 62 |
end |
|
| .svn/pristine/13/138f43d777efffd6ecf4f9d5f88f24c526eb7287.svn-base | ||
|---|---|---|
| 1 |
module ActionView |
|
| 2 |
module Helpers |
|
| 3 |
# Provides methods for linking to ActionController::Pagination objects using a simple generator API. You can optionally |
|
| 4 |
# also build your links manually using ActionView::Helpers::AssetHelper#link_to like so: |
|
| 5 |
# |
|
| 6 |
# <%= link_to "Previous page", { :page => paginator.current.previous } if paginator.current.previous %>
|
|
| 7 |
# <%= link_to "Next page", { :page => paginator.current.next } if paginator.current.next %>
|
|
| 8 |
module PaginationHelper |
|
| 9 |
unless const_defined?(:DEFAULT_OPTIONS) |
|
| 10 |
DEFAULT_OPTIONS = {
|
|
| 11 |
:name => :page, |
|
| 12 |
:window_size => 2, |
|
| 13 |
:always_show_anchors => true, |
|
| 14 |
:link_to_current_page => false, |
|
| 15 |
:params => {}
|
|
| 16 |
} |
|
| 17 |
end |
|
| 18 |
|
|
| 19 |
# Creates a basic HTML link bar for the given +paginator+. Links will be created |
|
| 20 |
# for the next and/or previous page and for a number of other pages around the current |
|
| 21 |
# pages position. The +html_options+ hash is passed to +link_to+ when the links are created. |
|
| 22 |
# |
|
| 23 |
# ==== Options |
|
| 24 |
# <tt>:name</tt>:: the routing name for this paginator |
|
| 25 |
# (defaults to +page+) |
|
| 26 |
# <tt>:prefix</tt>:: prefix for pagination links |
|
| 27 |
# (i.e. Older Pages: 1 2 3 4) |
|
| 28 |
# <tt>:suffix</tt>:: suffix for pagination links |
|
| 29 |
# (i.e. 1 2 3 4 <- Older Pages) |
|
| 30 |
# <tt>:window_size</tt>:: the number of pages to show around |
|
| 31 |
# the current page (defaults to <tt>2</tt>) |
|
| 32 |
# <tt>:always_show_anchors</tt>:: whether or not the first and last |
|
| 33 |
# pages should always be shown |
|
| 34 |
# (defaults to +true+) |
|
| 35 |
# <tt>:link_to_current_page</tt>:: whether or not the current page |
|
| 36 |
# should be linked to (defaults to |
|
| 37 |
# +false+) |
|
| 38 |
# <tt>:params</tt>:: any additional routing parameters |
|
| 39 |
# for page URLs |
|
| 40 |
# |
|
| 41 |
# ==== Examples |
|
| 42 |
# # We'll assume we have a paginator setup in @person_pages... |
|
| 43 |
# |
|
| 44 |
# pagination_links(@person_pages) |
|
| 45 |
# # => 1 <a href="/?page=2/">2</a> <a href="/?page=3/">3</a> ... <a href="/?page=10/">10</a> |
|
| 46 |
# |
|
| 47 |
# pagination_links(@person_pages, :link_to_current_page => true) |
|
| 48 |
# # => <a href="/?page=1/">1</a> <a href="/?page=2/">2</a> <a href="/?page=3/">3</a> ... <a href="/?page=10/">10</a> |
|
| 49 |
# |
|
| 50 |
# pagination_links(@person_pages, :always_show_anchors => false) |
|
| 51 |
# # => 1 <a href="/?page=2/">2</a> <a href="/?page=3/">3</a> |
|
| 52 |
# |
|
| 53 |
# pagination_links(@person_pages, :window_size => 1) |
|
| 54 |
# # => 1 <a href="/?page=2/">2</a> ... <a href="/?page=10/">10</a> |
|
| 55 |
# |
|
| 56 |
# pagination_links(@person_pages, :params => { :viewer => "flash" })
|
|
| 57 |
# # => 1 <a href="/?page=2&viewer=flash/">2</a> <a href="/?page=3&viewer=flash/">3</a> ... |
|
| 58 |
# # <a href="/?page=10&viewer=flash/">10</a> |
|
| 59 |
def pagination_links(paginator, options={}, html_options={})
|
|
| 60 |
name = options[:name] || DEFAULT_OPTIONS[:name] |
|
| 61 |
params = (options[:params] || DEFAULT_OPTIONS[:params]).clone |
|
| 62 |
|
|
| 63 |
prefix = options[:prefix] || '' |
|
| 64 |
suffix = options[:suffix] || '' |
|
| 65 |
|
|
| 66 |
pagination_links_each(paginator, options, prefix, suffix) do |n| |
|
| 67 |
params[name] = n |
|
| 68 |
link_to(n.to_s, params, html_options) |
|
| 69 |
end |
|
| 70 |
end |
|
| 71 |
|
|
| 72 |
# Iterate through the pages of a given +paginator+, invoking a |
|
| 73 |
# block for each page number that needs to be rendered as a link. |
|
| 74 |
# |
|
| 75 |
# ==== Options |
|
| 76 |
# <tt>:window_size</tt>:: the number of pages to show around |
|
| 77 |
# the current page (defaults to +2+) |
|
| 78 |
# <tt>:always_show_anchors</tt>:: whether or not the first and last |
|
| 79 |
# pages should always be shown |
|
| 80 |
# (defaults to +true+) |
|
| 81 |
# <tt>:link_to_current_page</tt>:: whether or not the current page |
|
| 82 |
# should be linked to (defaults to |
|
| 83 |
# +false+) |
|
| 84 |
# |
|
| 85 |
# ==== Example |
|
| 86 |
# # Turn paginated links into an Ajax call |
|
| 87 |
# pagination_links_each(paginator, page_options) do |link| |
|
| 88 |
# options = { :url => {:action => 'list'}, :update => 'results' }
|
|
| 89 |
# html_options = { :href => url_for(:action => 'list') }
|
|
| 90 |
# |
|
| 91 |
# link_to_remote(link.to_s, options, html_options) |
|
| 92 |
# end |
|
| 93 |
def pagination_links_each(paginator, options, prefix = nil, suffix = nil) |
|
| 94 |
options = DEFAULT_OPTIONS.merge(options) |
|
| 95 |
link_to_current_page = options[:link_to_current_page] |
|
| 96 |
always_show_anchors = options[:always_show_anchors] |
|
| 97 |
|
|
| 98 |
current_page = paginator.current_page |
|
| 99 |
window_pages = current_page.window(options[:window_size]).pages |
|
| 100 |
return if window_pages.length <= 1 unless link_to_current_page |
|
| 101 |
|
|
| 102 |
first, last = paginator.first, paginator.last |
|
| 103 |
|
|
| 104 |
html = '' |
|
| 105 |
|
|
| 106 |
html << prefix if prefix |
|
| 107 |
|
|
| 108 |
if always_show_anchors and not (wp_first = window_pages[0]).first? |
|
| 109 |
html << yield(first.number) |
|
| 110 |
html << ' ... ' if wp_first.number - first.number > 1 |
|
| 111 |
html << ' ' |
|
| 112 |
end |
|
| 113 |
|
|
| 114 |
window_pages.each do |page| |
|
| 115 |
if current_page == page && !link_to_current_page |
|
| 116 |
html << page.number.to_s |
|
| 117 |
else |
|
| 118 |
html << yield(page.number) |
|
| 119 |
end |
|
| 120 |
html << ' ' |
|
| 121 |
end |
|
| 122 |
|
|
| 123 |
if always_show_anchors and not (wp_last = window_pages[-1]).last? |
|
| 124 |
html << ' ... ' if last.number - wp_last.number > 1 |
|
| 125 |
html << yield(last.number) |
|
| 126 |
end |
|
| 127 |
|
|
| 128 |
html << suffix if suffix |
|
| 129 |
|
|
| 130 |
html |
|
| 131 |
end |
|
| 132 |
|
|
| 133 |
end # PaginationHelper |
|
| 134 |
end # Helpers |
|
| 135 |
end # ActionView |
|
| .svn/pristine/13/13a9de4a4790249b88f8367228e59b3e03f18775.svn-base | ||
|---|---|---|
| 1 |
<div class="contextual"> |
|
| 2 |
<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
|
|
| 3 |
</div> |
|
| 4 |
|
|
| 5 |
<%= render_timelog_breadcrumb %> |
|
| 6 |
|
|
| 7 |
<h2><%= l(:label_spent_time) %></h2> |
|
| 8 |
|
|
| 9 |
<% form_tag({:controller => 'time_entry_reports', :action => 'report', :project_id => @project, :issue_id => @issue}, :method => :get, :id => 'query_form') do %>
|
|
| 10 |
<% @criterias.each do |criteria| %> |
|
| 11 |
<%= hidden_field_tag 'criterias[]', criteria, :id => nil %> |
|
| 12 |
<% end %> |
|
| 13 |
<%= render :partial => 'timelog/date_range' %> |
|
| 14 |
|
|
| 15 |
<p><label for='columns'><%= l(:label_details) %></label>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'], |
|
| 16 |
[l(:label_month), 'month'], |
|
| 17 |
[l(:label_week), 'week'], |
|
| 18 |
[l(:label_day_plural).titleize, 'day']], @columns), |
|
| 19 |
:onchange => "this.form.onsubmit();" %> |
|
| 20 |
|
|
| 21 |
<label for='criterias'><%= l(:button_add) %></label>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}),
|
|
| 22 |
:onchange => "this.form.submit();", |
|
| 23 |
:style => 'width: 200px', |
|
| 24 |
:id => nil, |
|
| 25 |
:disabled => (@criterias.length >= 3), :id => "criterias") %> |
|
| 26 |
<%= link_to l(:button_clear), {:project_id => @project, :issue_id => @issue, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns}, :class => 'icon icon-reload' %></p>
|
|
| 27 |
<% end %> |
|
| 28 |
|
|
| 29 |
<% unless @criterias.empty? %> |
|
| 30 |
<div class="total-hours"> |
|
| 31 |
<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p> |
|
| 32 |
</div> |
|
| 33 |
|
|
| 34 |
<% unless @hours.empty? %> |
|
| 35 |
<div class="autoscroll"> |
|
| 36 |
<table class="list" id="time-report"> |
|
| 37 |
<thead> |
|
| 38 |
<tr> |
|
| 39 |
<% @criterias.each do |criteria| %> |
|
| 40 |
<th><%= l_or_humanize(@available_criterias[criteria][:label]) %></th> |
|
| 41 |
<% end %> |
|
| 42 |
<% columns_width = (40 / (@periods.length+1)).to_i %> |
|
| 43 |
<% @periods.each do |period| %> |
|
| 44 |
<th class="period" width="<%= columns_width %>%"><%= period %></th> |
|
| 45 |
<% end %> |
|
| 46 |
<th class="total" width="<%= columns_width %>%"><%= l(:label_total) %></th> |
|
| 47 |
</tr> |
|
| 48 |
</thead> |
|
| 49 |
<tbody> |
|
| 50 |
<%= render :partial => 'report_criteria', :locals => {:criterias => @criterias, :hours => @hours, :level => 0} %>
|
|
| 51 |
<tr class="total"> |
|
| 52 |
<td><%= l(:label_total) %></td> |
|
| 53 |
<%= '<td></td>' * (@criterias.size - 1) %> |
|
| 54 |
<% total = 0 -%> |
|
| 55 |
<% @periods.each do |period| -%> |
|
| 56 |
<% sum = sum_hours(select_hours(@hours, @columns, period.to_s)); total += sum -%> |
|
| 57 |
<td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td>
|
|
| 58 |
<% end -%> |
|
| 59 |
<td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td>
|
|
| 60 |
</tr> |
|
| 61 |
</tbody> |
|
| 62 |
</table> |
|
| 63 |
</div> |
|
| 64 |
|
|
| 65 |
<% other_formats_links do |f| %> |
|
| 66 |
<%= f.link_to 'CSV', :url => params %> |
|
| 67 |
<% end %> |
|
| 68 |
<% end %> |
|
| 69 |
<% end %> |
|
| 70 |
|
|
| 71 |
<% html_title l(:label_spent_time), l(:label_report) %> |
|
| 72 |
|
|
| .svn/pristine/13/13d58fac9d8f76e7061c50c043e9ceb3e590857c.svn-base | ||
|---|---|---|
| 1 |
class Namespace::SharedPluginController < ApplicationController |
|
| 2 |
def an_action |
|
| 3 |
render_class_and_action 'from beta_plugin' |
|
| 4 |
end |
|
| 5 |
end |
|
Also available in: Unified diff