##// END OF EJS Templates
Added an option to turn user Gravatars on or off...
Eric Davis -
r1970:ba20a678737c
parent child
Show More
@@ -1,571 +1,577
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
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
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.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require 'coderay'
18 require 'coderay'
19 require 'coderay/helpers/file_type'
19 require 'coderay/helpers/file_type'
20 require 'forwardable'
20 require 'forwardable'
21
21
22 module ApplicationHelper
22 module ApplicationHelper
23 include Redmine::WikiFormatting::Macros::Definitions
23 include Redmine::WikiFormatting::Macros::Definitions
24
24
25 extend Forwardable
25 extend Forwardable
26 def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter
26 def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter
27
27
28 def current_role
28 def current_role
29 @current_role ||= User.current.role_for_project(@project)
29 @current_role ||= User.current.role_for_project(@project)
30 end
30 end
31
31
32 # Return true if user is authorized for controller/action, otherwise false
32 # Return true if user is authorized for controller/action, otherwise false
33 def authorize_for(controller, action)
33 def authorize_for(controller, action)
34 User.current.allowed_to?({:controller => controller, :action => action}, @project)
34 User.current.allowed_to?({:controller => controller, :action => action}, @project)
35 end
35 end
36
36
37 # Display a link if user is authorized
37 # Display a link if user is authorized
38 def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference)
38 def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference)
39 link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action])
39 link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action])
40 end
40 end
41
41
42 # Display a link to remote if user is authorized
42 # Display a link to remote if user is authorized
43 def link_to_remote_if_authorized(name, options = {}, html_options = nil)
43 def link_to_remote_if_authorized(name, options = {}, html_options = nil)
44 url = options[:url] || {}
44 url = options[:url] || {}
45 link_to_remote(name, options, html_options) if authorize_for(url[:controller] || params[:controller], url[:action])
45 link_to_remote(name, options, html_options) if authorize_for(url[:controller] || params[:controller], url[:action])
46 end
46 end
47
47
48 # Display a link to user's account page
48 # Display a link to user's account page
49 def link_to_user(user)
49 def link_to_user(user)
50 user ? link_to(user, :controller => 'account', :action => 'show', :id => user) : 'Anonymous'
50 user ? link_to(user, :controller => 'account', :action => 'show', :id => user) : 'Anonymous'
51 end
51 end
52
52
53 def link_to_issue(issue, options={})
53 def link_to_issue(issue, options={})
54 options[:class] ||= ''
54 options[:class] ||= ''
55 options[:class] << ' issue'
55 options[:class] << ' issue'
56 options[:class] << ' closed' if issue.closed?
56 options[:class] << ' closed' if issue.closed?
57 link_to "#{issue.tracker.name} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue}, options
57 link_to "#{issue.tracker.name} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue}, options
58 end
58 end
59
59
60 # Generates a link to an attachment.
60 # Generates a link to an attachment.
61 # Options:
61 # Options:
62 # * :text - Link text (default to attachment filename)
62 # * :text - Link text (default to attachment filename)
63 # * :download - Force download (default: false)
63 # * :download - Force download (default: false)
64 def link_to_attachment(attachment, options={})
64 def link_to_attachment(attachment, options={})
65 text = options.delete(:text) || attachment.filename
65 text = options.delete(:text) || attachment.filename
66 action = options.delete(:download) ? 'download' : 'show'
66 action = options.delete(:download) ? 'download' : 'show'
67
67
68 link_to(h(text), {:controller => 'attachments', :action => action, :id => attachment, :filename => attachment.filename }, options)
68 link_to(h(text), {:controller => 'attachments', :action => action, :id => attachment, :filename => attachment.filename }, options)
69 end
69 end
70
70
71 def toggle_link(name, id, options={})
71 def toggle_link(name, id, options={})
72 onclick = "Element.toggle('#{id}'); "
72 onclick = "Element.toggle('#{id}'); "
73 onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ")
73 onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ")
74 onclick << "return false;"
74 onclick << "return false;"
75 link_to(name, "#", :onclick => onclick)
75 link_to(name, "#", :onclick => onclick)
76 end
76 end
77
77
78 def image_to_function(name, function, html_options = {})
78 def image_to_function(name, function, html_options = {})
79 html_options.symbolize_keys!
79 html_options.symbolize_keys!
80 tag(:input, html_options.merge({
80 tag(:input, html_options.merge({
81 :type => "image", :src => image_path(name),
81 :type => "image", :src => image_path(name),
82 :onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function};"
82 :onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function};"
83 }))
83 }))
84 end
84 end
85
85
86 def prompt_to_remote(name, text, param, url, html_options = {})
86 def prompt_to_remote(name, text, param, url, html_options = {})
87 html_options[:onclick] = "promptToRemote('#{text}', '#{param}', '#{url_for(url)}'); return false;"
87 html_options[:onclick] = "promptToRemote('#{text}', '#{param}', '#{url_for(url)}'); return false;"
88 link_to name, {}, html_options
88 link_to name, {}, html_options
89 end
89 end
90
90
91 def format_date(date)
91 def format_date(date)
92 return nil unless date
92 return nil unless date
93 # "Setting.date_format.size < 2" is a temporary fix (content of date_format setting changed)
93 # "Setting.date_format.size < 2" is a temporary fix (content of date_format setting changed)
94 @date_format ||= (Setting.date_format.blank? || Setting.date_format.size < 2 ? l(:general_fmt_date) : Setting.date_format)
94 @date_format ||= (Setting.date_format.blank? || Setting.date_format.size < 2 ? l(:general_fmt_date) : Setting.date_format)
95 date.strftime(@date_format)
95 date.strftime(@date_format)
96 end
96 end
97
97
98 def format_time(time, include_date = true)
98 def format_time(time, include_date = true)
99 return nil unless time
99 return nil unless time
100 time = time.to_time if time.is_a?(String)
100 time = time.to_time if time.is_a?(String)
101 zone = User.current.time_zone
101 zone = User.current.time_zone
102 local = zone ? time.in_time_zone(zone) : (time.utc? ? time.localtime : time)
102 local = zone ? time.in_time_zone(zone) : (time.utc? ? time.localtime : time)
103 @date_format ||= (Setting.date_format.blank? || Setting.date_format.size < 2 ? l(:general_fmt_date) : Setting.date_format)
103 @date_format ||= (Setting.date_format.blank? || Setting.date_format.size < 2 ? l(:general_fmt_date) : Setting.date_format)
104 @time_format ||= (Setting.time_format.blank? ? l(:general_fmt_time) : Setting.time_format)
104 @time_format ||= (Setting.time_format.blank? ? l(:general_fmt_time) : Setting.time_format)
105 include_date ? local.strftime("#{@date_format} #{@time_format}") : local.strftime(@time_format)
105 include_date ? local.strftime("#{@date_format} #{@time_format}") : local.strftime(@time_format)
106 end
106 end
107
107
108 def distance_of_date_in_words(from_date, to_date = 0)
108 def distance_of_date_in_words(from_date, to_date = 0)
109 from_date = from_date.to_date if from_date.respond_to?(:to_date)
109 from_date = from_date.to_date if from_date.respond_to?(:to_date)
110 to_date = to_date.to_date if to_date.respond_to?(:to_date)
110 to_date = to_date.to_date if to_date.respond_to?(:to_date)
111 distance_in_days = (to_date - from_date).abs
111 distance_in_days = (to_date - from_date).abs
112 lwr(:actionview_datehelper_time_in_words_day, distance_in_days)
112 lwr(:actionview_datehelper_time_in_words_day, distance_in_days)
113 end
113 end
114
114
115 def due_date_distance_in_words(date)
115 def due_date_distance_in_words(date)
116 if date
116 if date
117 l((date < Date.today ? :label_roadmap_overdue : :label_roadmap_due_in), distance_of_date_in_words(Date.today, date))
117 l((date < Date.today ? :label_roadmap_overdue : :label_roadmap_due_in), distance_of_date_in_words(Date.today, date))
118 end
118 end
119 end
119 end
120
120
121 # Truncates and returns the string as a single line
121 # Truncates and returns the string as a single line
122 def truncate_single_line(string, *args)
122 def truncate_single_line(string, *args)
123 truncate(string, *args).gsub(%r{[\r\n]+}m, ' ')
123 truncate(string, *args).gsub(%r{[\r\n]+}m, ' ')
124 end
124 end
125
125
126 def html_hours(text)
126 def html_hours(text)
127 text.gsub(%r{(\d+)\.(\d+)}, '<span class="hours hours-int">\1</span><span class="hours hours-dec">.\2</span>')
127 text.gsub(%r{(\d+)\.(\d+)}, '<span class="hours hours-int">\1</span><span class="hours hours-dec">.\2</span>')
128 end
128 end
129
129
130 def authoring(created, author)
130 def authoring(created, author)
131 time_tag = content_tag('acronym', distance_of_time_in_words(Time.now, created), :title => format_time(created))
131 time_tag = content_tag('acronym', distance_of_time_in_words(Time.now, created), :title => format_time(created))
132 author_tag = (author.is_a?(User) && !author.anonymous?) ? link_to(h(author), :controller => 'account', :action => 'show', :id => author) : h(author || 'Anonymous')
132 author_tag = (author.is_a?(User) && !author.anonymous?) ? link_to(h(author), :controller => 'account', :action => 'show', :id => author) : h(author || 'Anonymous')
133 l(:label_added_time_by, author_tag, time_tag)
133 l(:label_added_time_by, author_tag, time_tag)
134 end
134 end
135
135
136 def l_or_humanize(s, options={})
136 def l_or_humanize(s, options={})
137 k = "#{options[:prefix]}#{s}".to_sym
137 k = "#{options[:prefix]}#{s}".to_sym
138 l_has_string?(k) ? l(k) : s.to_s.humanize
138 l_has_string?(k) ? l(k) : s.to_s.humanize
139 end
139 end
140
140
141 def day_name(day)
141 def day_name(day)
142 l(:general_day_names).split(',')[day-1]
142 l(:general_day_names).split(',')[day-1]
143 end
143 end
144
144
145 def month_name(month)
145 def month_name(month)
146 l(:actionview_datehelper_select_month_names).split(',')[month-1]
146 l(:actionview_datehelper_select_month_names).split(',')[month-1]
147 end
147 end
148
148
149 def syntax_highlight(name, content)
149 def syntax_highlight(name, content)
150 type = CodeRay::FileType[name]
150 type = CodeRay::FileType[name]
151 type ? CodeRay.scan(content, type).html : h(content)
151 type ? CodeRay.scan(content, type).html : h(content)
152 end
152 end
153
153
154 def to_path_param(path)
154 def to_path_param(path)
155 path.to_s.split(%r{[/\\]}).select {|p| !p.blank?}
155 path.to_s.split(%r{[/\\]}).select {|p| !p.blank?}
156 end
156 end
157
157
158 def pagination_links_full(paginator, count=nil, options={})
158 def pagination_links_full(paginator, count=nil, options={})
159 page_param = options.delete(:page_param) || :page
159 page_param = options.delete(:page_param) || :page
160 url_param = params.dup
160 url_param = params.dup
161 # don't reuse params if filters are present
161 # don't reuse params if filters are present
162 url_param.clear if url_param.has_key?(:set_filter)
162 url_param.clear if url_param.has_key?(:set_filter)
163
163
164 html = ''
164 html = ''
165 html << link_to_remote(('&#171; ' + l(:label_previous)),
165 html << link_to_remote(('&#171; ' + l(:label_previous)),
166 {:update => 'content',
166 {:update => 'content',
167 :url => url_param.merge(page_param => paginator.current.previous),
167 :url => url_param.merge(page_param => paginator.current.previous),
168 :complete => 'window.scrollTo(0,0)'},
168 :complete => 'window.scrollTo(0,0)'},
169 {:href => url_for(:params => url_param.merge(page_param => paginator.current.previous))}) + ' ' if paginator.current.previous
169 {:href => url_for(:params => url_param.merge(page_param => paginator.current.previous))}) + ' ' if paginator.current.previous
170
170
171 html << (pagination_links_each(paginator, options) do |n|
171 html << (pagination_links_each(paginator, options) do |n|
172 link_to_remote(n.to_s,
172 link_to_remote(n.to_s,
173 {:url => {:params => url_param.merge(page_param => n)},
173 {:url => {:params => url_param.merge(page_param => n)},
174 :update => 'content',
174 :update => 'content',
175 :complete => 'window.scrollTo(0,0)'},
175 :complete => 'window.scrollTo(0,0)'},
176 {:href => url_for(:params => url_param.merge(page_param => n))})
176 {:href => url_for(:params => url_param.merge(page_param => n))})
177 end || '')
177 end || '')
178
178
179 html << ' ' + link_to_remote((l(:label_next) + ' &#187;'),
179 html << ' ' + link_to_remote((l(:label_next) + ' &#187;'),
180 {:update => 'content',
180 {:update => 'content',
181 :url => url_param.merge(page_param => paginator.current.next),
181 :url => url_param.merge(page_param => paginator.current.next),
182 :complete => 'window.scrollTo(0,0)'},
182 :complete => 'window.scrollTo(0,0)'},
183 {:href => url_for(:params => url_param.merge(page_param => paginator.current.next))}) if paginator.current.next
183 {:href => url_for(:params => url_param.merge(page_param => paginator.current.next))}) if paginator.current.next
184
184
185 unless count.nil?
185 unless count.nil?
186 html << [" (#{paginator.current.first_item}-#{paginator.current.last_item}/#{count})", per_page_links(paginator.items_per_page)].compact.join(' | ')
186 html << [" (#{paginator.current.first_item}-#{paginator.current.last_item}/#{count})", per_page_links(paginator.items_per_page)].compact.join(' | ')
187 end
187 end
188
188
189 html
189 html
190 end
190 end
191
191
192 def per_page_links(selected=nil)
192 def per_page_links(selected=nil)
193 url_param = params.dup
193 url_param = params.dup
194 url_param.clear if url_param.has_key?(:set_filter)
194 url_param.clear if url_param.has_key?(:set_filter)
195
195
196 links = Setting.per_page_options_array.collect do |n|
196 links = Setting.per_page_options_array.collect do |n|
197 n == selected ? n : link_to_remote(n, {:update => "content", :url => params.dup.merge(:per_page => n)},
197 n == selected ? n : link_to_remote(n, {:update => "content", :url => params.dup.merge(:per_page => n)},
198 {:href => url_for(url_param.merge(:per_page => n))})
198 {:href => url_for(url_param.merge(:per_page => n))})
199 end
199 end
200 links.size > 1 ? l(:label_display_per_page, links.join(', ')) : nil
200 links.size > 1 ? l(:label_display_per_page, links.join(', ')) : nil
201 end
201 end
202
202
203 def breadcrumb(*args)
203 def breadcrumb(*args)
204 elements = args.flatten
204 elements = args.flatten
205 elements.any? ? content_tag('p', args.join(' &#187; ') + ' &#187; ', :class => 'breadcrumb') : nil
205 elements.any? ? content_tag('p', args.join(' &#187; ') + ' &#187; ', :class => 'breadcrumb') : nil
206 end
206 end
207
207
208 def html_title(*args)
208 def html_title(*args)
209 if args.empty?
209 if args.empty?
210 title = []
210 title = []
211 title << @project.name if @project
211 title << @project.name if @project
212 title += @html_title if @html_title
212 title += @html_title if @html_title
213 title << Setting.app_title
213 title << Setting.app_title
214 title.compact.join(' - ')
214 title.compact.join(' - ')
215 else
215 else
216 @html_title ||= []
216 @html_title ||= []
217 @html_title += args
217 @html_title += args
218 end
218 end
219 end
219 end
220
220
221 def accesskey(s)
221 def accesskey(s)
222 Redmine::AccessKeys.key_for s
222 Redmine::AccessKeys.key_for s
223 end
223 end
224
224
225 # Formats text according to system settings.
225 # Formats text according to system settings.
226 # 2 ways to call this method:
226 # 2 ways to call this method:
227 # * with a String: textilizable(text, options)
227 # * with a String: textilizable(text, options)
228 # * with an object and one of its attribute: textilizable(issue, :description, options)
228 # * with an object and one of its attribute: textilizable(issue, :description, options)
229 def textilizable(*args)
229 def textilizable(*args)
230 options = args.last.is_a?(Hash) ? args.pop : {}
230 options = args.last.is_a?(Hash) ? args.pop : {}
231 case args.size
231 case args.size
232 when 1
232 when 1
233 obj = options[:object]
233 obj = options[:object]
234 text = args.shift
234 text = args.shift
235 when 2
235 when 2
236 obj = args.shift
236 obj = args.shift
237 text = obj.send(args.shift).to_s
237 text = obj.send(args.shift).to_s
238 else
238 else
239 raise ArgumentError, 'invalid arguments to textilizable'
239 raise ArgumentError, 'invalid arguments to textilizable'
240 end
240 end
241 return '' if text.blank?
241 return '' if text.blank?
242
242
243 only_path = options.delete(:only_path) == false ? false : true
243 only_path = options.delete(:only_path) == false ? false : true
244
244
245 # when using an image link, try to use an attachment, if possible
245 # when using an image link, try to use an attachment, if possible
246 attachments = options[:attachments] || (obj && obj.respond_to?(:attachments) ? obj.attachments : nil)
246 attachments = options[:attachments] || (obj && obj.respond_to?(:attachments) ? obj.attachments : nil)
247
247
248 if attachments
248 if attachments
249 attachments = attachments.sort_by(&:created_on).reverse
249 attachments = attachments.sort_by(&:created_on).reverse
250 text = text.gsub(/!((\<|\=|\>)?(\([^\)]+\))?(\[[^\]]+\])?(\{[^\}]+\})?)(\S+\.(bmp|gif|jpg|jpeg|png))!/i) do |m|
250 text = text.gsub(/!((\<|\=|\>)?(\([^\)]+\))?(\[[^\]]+\])?(\{[^\}]+\})?)(\S+\.(bmp|gif|jpg|jpeg|png))!/i) do |m|
251 style = $1
251 style = $1
252 filename = $6
252 filename = $6
253 rf = Regexp.new(Regexp.escape(filename), Regexp::IGNORECASE)
253 rf = Regexp.new(Regexp.escape(filename), Regexp::IGNORECASE)
254 # search for the picture in attachments
254 # search for the picture in attachments
255 if found = attachments.detect { |att| att.filename =~ rf }
255 if found = attachments.detect { |att| att.filename =~ rf }
256 image_url = url_for :only_path => only_path, :controller => 'attachments', :action => 'download', :id => found
256 image_url = url_for :only_path => only_path, :controller => 'attachments', :action => 'download', :id => found
257 desc = found.description.to_s.gsub(/^([^\(\)]*).*$/, "\\1")
257 desc = found.description.to_s.gsub(/^([^\(\)]*).*$/, "\\1")
258 alt = desc.blank? ? nil : "(#{desc})"
258 alt = desc.blank? ? nil : "(#{desc})"
259 "!#{style}#{image_url}#{alt}!"
259 "!#{style}#{image_url}#{alt}!"
260 else
260 else
261 "!#{style}#{filename}!"
261 "!#{style}#{filename}!"
262 end
262 end
263 end
263 end
264 end
264 end
265
265
266 text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text) { |macro, args| exec_macro(macro, obj, args) }
266 text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text) { |macro, args| exec_macro(macro, obj, args) }
267
267
268 # different methods for formatting wiki links
268 # different methods for formatting wiki links
269 case options[:wiki_links]
269 case options[:wiki_links]
270 when :local
270 when :local
271 # used for local links to html files
271 # used for local links to html files
272 format_wiki_link = Proc.new {|project, title, anchor| "#{title}.html" }
272 format_wiki_link = Proc.new {|project, title, anchor| "#{title}.html" }
273 when :anchor
273 when :anchor
274 # used for single-file wiki export
274 # used for single-file wiki export
275 format_wiki_link = Proc.new {|project, title, anchor| "##{title}" }
275 format_wiki_link = Proc.new {|project, title, anchor| "##{title}" }
276 else
276 else
277 format_wiki_link = Proc.new {|project, title, anchor| url_for(:only_path => only_path, :controller => 'wiki', :action => 'index', :id => project, :page => title, :anchor => anchor) }
277 format_wiki_link = Proc.new {|project, title, anchor| url_for(:only_path => only_path, :controller => 'wiki', :action => 'index', :id => project, :page => title, :anchor => anchor) }
278 end
278 end
279
279
280 project = options[:project] || @project || (obj && obj.respond_to?(:project) ? obj.project : nil)
280 project = options[:project] || @project || (obj && obj.respond_to?(:project) ? obj.project : nil)
281
281
282 # Wiki links
282 # Wiki links
283 #
283 #
284 # Examples:
284 # Examples:
285 # [[mypage]]
285 # [[mypage]]
286 # [[mypage|mytext]]
286 # [[mypage|mytext]]
287 # wiki links can refer other project wikis, using project name or identifier:
287 # wiki links can refer other project wikis, using project name or identifier:
288 # [[project:]] -> wiki starting page
288 # [[project:]] -> wiki starting page
289 # [[project:|mytext]]
289 # [[project:|mytext]]
290 # [[project:mypage]]
290 # [[project:mypage]]
291 # [[project:mypage|mytext]]
291 # [[project:mypage|mytext]]
292 text = text.gsub(/(!)?(\[\[([^\]\n\|]+)(\|([^\]\n\|]+))?\]\])/) do |m|
292 text = text.gsub(/(!)?(\[\[([^\]\n\|]+)(\|([^\]\n\|]+))?\]\])/) do |m|
293 link_project = project
293 link_project = project
294 esc, all, page, title = $1, $2, $3, $5
294 esc, all, page, title = $1, $2, $3, $5
295 if esc.nil?
295 if esc.nil?
296 if page =~ /^([^\:]+)\:(.*)$/
296 if page =~ /^([^\:]+)\:(.*)$/
297 link_project = Project.find_by_name($1) || Project.find_by_identifier($1)
297 link_project = Project.find_by_name($1) || Project.find_by_identifier($1)
298 page = $2
298 page = $2
299 title ||= $1 if page.blank?
299 title ||= $1 if page.blank?
300 end
300 end
301
301
302 if link_project && link_project.wiki
302 if link_project && link_project.wiki
303 # extract anchor
303 # extract anchor
304 anchor = nil
304 anchor = nil
305 if page =~ /^(.+?)\#(.+)$/
305 if page =~ /^(.+?)\#(.+)$/
306 page, anchor = $1, $2
306 page, anchor = $1, $2
307 end
307 end
308 # check if page exists
308 # check if page exists
309 wiki_page = link_project.wiki.find_page(page)
309 wiki_page = link_project.wiki.find_page(page)
310 link_to((title || page), format_wiki_link.call(link_project, Wiki.titleize(page), anchor),
310 link_to((title || page), format_wiki_link.call(link_project, Wiki.titleize(page), anchor),
311 :class => ('wiki-page' + (wiki_page ? '' : ' new')))
311 :class => ('wiki-page' + (wiki_page ? '' : ' new')))
312 else
312 else
313 # project or wiki doesn't exist
313 # project or wiki doesn't exist
314 title || page
314 title || page
315 end
315 end
316 else
316 else
317 all
317 all
318 end
318 end
319 end
319 end
320
320
321 # Redmine links
321 # Redmine links
322 #
322 #
323 # Examples:
323 # Examples:
324 # Issues:
324 # Issues:
325 # #52 -> Link to issue #52
325 # #52 -> Link to issue #52
326 # Changesets:
326 # Changesets:
327 # r52 -> Link to revision 52
327 # r52 -> Link to revision 52
328 # commit:a85130f -> Link to scmid starting with a85130f
328 # commit:a85130f -> Link to scmid starting with a85130f
329 # Documents:
329 # Documents:
330 # document#17 -> Link to document with id 17
330 # document#17 -> Link to document with id 17
331 # document:Greetings -> Link to the document with title "Greetings"
331 # document:Greetings -> Link to the document with title "Greetings"
332 # document:"Some document" -> Link to the document with title "Some document"
332 # document:"Some document" -> Link to the document with title "Some document"
333 # Versions:
333 # Versions:
334 # version#3 -> Link to version with id 3
334 # version#3 -> Link to version with id 3
335 # version:1.0.0 -> Link to version named "1.0.0"
335 # version:1.0.0 -> Link to version named "1.0.0"
336 # version:"1.0 beta 2" -> Link to version named "1.0 beta 2"
336 # version:"1.0 beta 2" -> Link to version named "1.0 beta 2"
337 # Attachments:
337 # Attachments:
338 # attachment:file.zip -> Link to the attachment of the current object named file.zip
338 # attachment:file.zip -> Link to the attachment of the current object named file.zip
339 # Source files:
339 # Source files:
340 # source:some/file -> Link to the file located at /some/file in the project's repository
340 # source:some/file -> Link to the file located at /some/file in the project's repository
341 # source:some/file@52 -> Link to the file's revision 52
341 # source:some/file@52 -> Link to the file's revision 52
342 # source:some/file#L120 -> Link to line 120 of the file
342 # source:some/file#L120 -> Link to line 120 of the file
343 # source:some/file@52#L120 -> Link to line 120 of the file's revision 52
343 # source:some/file@52#L120 -> Link to line 120 of the file's revision 52
344 # export:some/file -> Force the download of the file
344 # export:some/file -> Force the download of the file
345 # Forum messages:
345 # Forum messages:
346 # message#1218 -> Link to message with id 1218
346 # message#1218 -> Link to message with id 1218
347 text = text.gsub(%r{([\s\(,\-\>]|^)(!)?(attachment|document|version|commit|source|export|message)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|\s|<|$)}) do |m|
347 text = text.gsub(%r{([\s\(,\-\>]|^)(!)?(attachment|document|version|commit|source|export|message)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|\s|<|$)}) do |m|
348 leading, esc, prefix, sep, oid = $1, $2, $3, $5 || $7, $6 || $8
348 leading, esc, prefix, sep, oid = $1, $2, $3, $5 || $7, $6 || $8
349 link = nil
349 link = nil
350 if esc.nil?
350 if esc.nil?
351 if prefix.nil? && sep == 'r'
351 if prefix.nil? && sep == 'r'
352 if project && (changeset = project.changesets.find_by_revision(oid))
352 if project && (changeset = project.changesets.find_by_revision(oid))
353 link = link_to("r#{oid}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => oid},
353 link = link_to("r#{oid}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => oid},
354 :class => 'changeset',
354 :class => 'changeset',
355 :title => truncate_single_line(changeset.comments, 100))
355 :title => truncate_single_line(changeset.comments, 100))
356 end
356 end
357 elsif sep == '#'
357 elsif sep == '#'
358 oid = oid.to_i
358 oid = oid.to_i
359 case prefix
359 case prefix
360 when nil
360 when nil
361 if issue = Issue.find_by_id(oid, :include => [:project, :status], :conditions => Project.visible_by(User.current))
361 if issue = Issue.find_by_id(oid, :include => [:project, :status], :conditions => Project.visible_by(User.current))
362 link = link_to("##{oid}", {:only_path => only_path, :controller => 'issues', :action => 'show', :id => oid},
362 link = link_to("##{oid}", {:only_path => only_path, :controller => 'issues', :action => 'show', :id => oid},
363 :class => (issue.closed? ? 'issue closed' : 'issue'),
363 :class => (issue.closed? ? 'issue closed' : 'issue'),
364 :title => "#{truncate(issue.subject, 100)} (#{issue.status.name})")
364 :title => "#{truncate(issue.subject, 100)} (#{issue.status.name})")
365 link = content_tag('del', link) if issue.closed?
365 link = content_tag('del', link) if issue.closed?
366 end
366 end
367 when 'document'
367 when 'document'
368 if document = Document.find_by_id(oid, :include => [:project], :conditions => Project.visible_by(User.current))
368 if document = Document.find_by_id(oid, :include => [:project], :conditions => Project.visible_by(User.current))
369 link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
369 link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
370 :class => 'document'
370 :class => 'document'
371 end
371 end
372 when 'version'
372 when 'version'
373 if version = Version.find_by_id(oid, :include => [:project], :conditions => Project.visible_by(User.current))
373 if version = Version.find_by_id(oid, :include => [:project], :conditions => Project.visible_by(User.current))
374 link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
374 link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
375 :class => 'version'
375 :class => 'version'
376 end
376 end
377 when 'message'
377 when 'message'
378 if message = Message.find_by_id(oid, :include => [:parent, {:board => :project}], :conditions => Project.visible_by(User.current))
378 if message = Message.find_by_id(oid, :include => [:parent, {:board => :project}], :conditions => Project.visible_by(User.current))
379 link = link_to h(truncate(message.subject, 60)), {:only_path => only_path,
379 link = link_to h(truncate(message.subject, 60)), {:only_path => only_path,
380 :controller => 'messages',
380 :controller => 'messages',
381 :action => 'show',
381 :action => 'show',
382 :board_id => message.board,
382 :board_id => message.board,
383 :id => message.root,
383 :id => message.root,
384 :anchor => (message.parent ? "message-#{message.id}" : nil)},
384 :anchor => (message.parent ? "message-#{message.id}" : nil)},
385 :class => 'message'
385 :class => 'message'
386 end
386 end
387 end
387 end
388 elsif sep == ':'
388 elsif sep == ':'
389 # removes the double quotes if any
389 # removes the double quotes if any
390 name = oid.gsub(%r{^"(.*)"$}, "\\1")
390 name = oid.gsub(%r{^"(.*)"$}, "\\1")
391 case prefix
391 case prefix
392 when 'document'
392 when 'document'
393 if project && document = project.documents.find_by_title(name)
393 if project && document = project.documents.find_by_title(name)
394 link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
394 link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
395 :class => 'document'
395 :class => 'document'
396 end
396 end
397 when 'version'
397 when 'version'
398 if project && version = project.versions.find_by_name(name)
398 if project && version = project.versions.find_by_name(name)
399 link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
399 link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
400 :class => 'version'
400 :class => 'version'
401 end
401 end
402 when 'commit'
402 when 'commit'
403 if project && (changeset = project.changesets.find(:first, :conditions => ["scmid LIKE ?", "#{name}%"]))
403 if project && (changeset = project.changesets.find(:first, :conditions => ["scmid LIKE ?", "#{name}%"]))
404 link = link_to h("#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.revision},
404 link = link_to h("#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.revision},
405 :class => 'changeset',
405 :class => 'changeset',
406 :title => truncate_single_line(changeset.comments, 100)
406 :title => truncate_single_line(changeset.comments, 100)
407 end
407 end
408 when 'source', 'export'
408 when 'source', 'export'
409 if project && project.repository
409 if project && project.repository
410 name =~ %r{^[/\\]*(.*?)(@([0-9a-f]+))?(#(L\d+))?$}
410 name =~ %r{^[/\\]*(.*?)(@([0-9a-f]+))?(#(L\d+))?$}
411 path, rev, anchor = $1, $3, $5
411 path, rev, anchor = $1, $3, $5
412 link = link_to h("#{prefix}:#{name}"), {:controller => 'repositories', :action => 'entry', :id => project,
412 link = link_to h("#{prefix}:#{name}"), {:controller => 'repositories', :action => 'entry', :id => project,
413 :path => to_path_param(path),
413 :path => to_path_param(path),
414 :rev => rev,
414 :rev => rev,
415 :anchor => anchor,
415 :anchor => anchor,
416 :format => (prefix == 'export' ? 'raw' : nil)},
416 :format => (prefix == 'export' ? 'raw' : nil)},
417 :class => (prefix == 'export' ? 'source download' : 'source')
417 :class => (prefix == 'export' ? 'source download' : 'source')
418 end
418 end
419 when 'attachment'
419 when 'attachment'
420 if attachments && attachment = attachments.detect {|a| a.filename == name }
420 if attachments && attachment = attachments.detect {|a| a.filename == name }
421 link = link_to h(attachment.filename), {:only_path => only_path, :controller => 'attachments', :action => 'download', :id => attachment},
421 link = link_to h(attachment.filename), {:only_path => only_path, :controller => 'attachments', :action => 'download', :id => attachment},
422 :class => 'attachment'
422 :class => 'attachment'
423 end
423 end
424 end
424 end
425 end
425 end
426 end
426 end
427 leading + (link || "#{prefix}#{sep}#{oid}")
427 leading + (link || "#{prefix}#{sep}#{oid}")
428 end
428 end
429
429
430 text
430 text
431 end
431 end
432
432
433 # Same as Rails' simple_format helper without using paragraphs
433 # Same as Rails' simple_format helper without using paragraphs
434 def simple_format_without_paragraph(text)
434 def simple_format_without_paragraph(text)
435 text.to_s.
435 text.to_s.
436 gsub(/\r\n?/, "\n"). # \r\n and \r -> \n
436 gsub(/\r\n?/, "\n"). # \r\n and \r -> \n
437 gsub(/\n\n+/, "<br /><br />"). # 2+ newline -> 2 br
437 gsub(/\n\n+/, "<br /><br />"). # 2+ newline -> 2 br
438 gsub(/([^\n]\n)(?=[^\n])/, '\1<br />') # 1 newline -> br
438 gsub(/([^\n]\n)(?=[^\n])/, '\1<br />') # 1 newline -> br
439 end
439 end
440
440
441 def error_messages_for(object_name, options = {})
441 def error_messages_for(object_name, options = {})
442 options = options.symbolize_keys
442 options = options.symbolize_keys
443 object = instance_variable_get("@#{object_name}")
443 object = instance_variable_get("@#{object_name}")
444 if object && !object.errors.empty?
444 if object && !object.errors.empty?
445 # build full_messages here with controller current language
445 # build full_messages here with controller current language
446 full_messages = []
446 full_messages = []
447 object.errors.each do |attr, msg|
447 object.errors.each do |attr, msg|
448 next if msg.nil?
448 next if msg.nil?
449 msg = msg.first if msg.is_a? Array
449 msg = msg.first if msg.is_a? Array
450 if attr == "base"
450 if attr == "base"
451 full_messages << l(msg)
451 full_messages << l(msg)
452 else
452 else
453 full_messages << "&#171; " + (l_has_string?("field_" + attr) ? l("field_" + attr) : object.class.human_attribute_name(attr)) + " &#187; " + l(msg) unless attr == "custom_values"
453 full_messages << "&#171; " + (l_has_string?("field_" + attr) ? l("field_" + attr) : object.class.human_attribute_name(attr)) + " &#187; " + l(msg) unless attr == "custom_values"
454 end
454 end
455 end
455 end
456 # retrieve custom values error messages
456 # retrieve custom values error messages
457 if object.errors[:custom_values]
457 if object.errors[:custom_values]
458 object.custom_values.each do |v|
458 object.custom_values.each do |v|
459 v.errors.each do |attr, msg|
459 v.errors.each do |attr, msg|
460 next if msg.nil?
460 next if msg.nil?
461 msg = msg.first if msg.is_a? Array
461 msg = msg.first if msg.is_a? Array
462 full_messages << "&#171; " + v.custom_field.name + " &#187; " + l(msg)
462 full_messages << "&#171; " + v.custom_field.name + " &#187; " + l(msg)
463 end
463 end
464 end
464 end
465 end
465 end
466 content_tag("div",
466 content_tag("div",
467 content_tag(
467 content_tag(
468 options[:header_tag] || "span", lwr(:gui_validation_error, full_messages.length) + ":"
468 options[:header_tag] || "span", lwr(:gui_validation_error, full_messages.length) + ":"
469 ) +
469 ) +
470 content_tag("ul", full_messages.collect { |msg| content_tag("li", msg) }),
470 content_tag("ul", full_messages.collect { |msg| content_tag("li", msg) }),
471 "id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation"
471 "id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation"
472 )
472 )
473 else
473 else
474 ""
474 ""
475 end
475 end
476 end
476 end
477
477
478 def lang_options_for_select(blank=true)
478 def lang_options_for_select(blank=true)
479 (blank ? [["(auto)", ""]] : []) +
479 (blank ? [["(auto)", ""]] : []) +
480 GLoc.valid_languages.collect{|lang| [ ll(lang.to_s, :general_lang_name), lang.to_s]}.sort{|x,y| x.last <=> y.last }
480 GLoc.valid_languages.collect{|lang| [ ll(lang.to_s, :general_lang_name), lang.to_s]}.sort{|x,y| x.last <=> y.last }
481 end
481 end
482
482
483 def label_tag_for(name, option_tags = nil, options = {})
483 def label_tag_for(name, option_tags = nil, options = {})
484 label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")
484 label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")
485 content_tag("label", label_text)
485 content_tag("label", label_text)
486 end
486 end
487
487
488 def labelled_tabular_form_for(name, object, options, &proc)
488 def labelled_tabular_form_for(name, object, options, &proc)
489 options[:html] ||= {}
489 options[:html] ||= {}
490 options[:html][:class] = 'tabular' unless options[:html].has_key?(:class)
490 options[:html][:class] = 'tabular' unless options[:html].has_key?(:class)
491 form_for(name, object, options.merge({ :builder => TabularFormBuilder, :lang => current_language}), &proc)
491 form_for(name, object, options.merge({ :builder => TabularFormBuilder, :lang => current_language}), &proc)
492 end
492 end
493
493
494 def back_url_hidden_field_tag
494 def back_url_hidden_field_tag
495 back_url = params[:back_url] || request.env['HTTP_REFERER']
495 back_url = params[:back_url] || request.env['HTTP_REFERER']
496 hidden_field_tag('back_url', back_url) unless back_url.blank?
496 hidden_field_tag('back_url', back_url) unless back_url.blank?
497 end
497 end
498
498
499 def check_all_links(form_name)
499 def check_all_links(form_name)
500 link_to_function(l(:button_check_all), "checkAll('#{form_name}', true)") +
500 link_to_function(l(:button_check_all), "checkAll('#{form_name}', true)") +
501 " | " +
501 " | " +
502 link_to_function(l(:button_uncheck_all), "checkAll('#{form_name}', false)")
502 link_to_function(l(:button_uncheck_all), "checkAll('#{form_name}', false)")
503 end
503 end
504
504
505 def progress_bar(pcts, options={})
505 def progress_bar(pcts, options={})
506 pcts = [pcts, pcts] unless pcts.is_a?(Array)
506 pcts = [pcts, pcts] unless pcts.is_a?(Array)
507 pcts[1] = pcts[1] - pcts[0]
507 pcts[1] = pcts[1] - pcts[0]
508 pcts << (100 - pcts[1] - pcts[0])
508 pcts << (100 - pcts[1] - pcts[0])
509 width = options[:width] || '100px;'
509 width = options[:width] || '100px;'
510 legend = options[:legend] || ''
510 legend = options[:legend] || ''
511 content_tag('table',
511 content_tag('table',
512 content_tag('tr',
512 content_tag('tr',
513 (pcts[0] > 0 ? content_tag('td', '', :width => "#{pcts[0].floor}%;", :class => 'closed') : '') +
513 (pcts[0] > 0 ? content_tag('td', '', :width => "#{pcts[0].floor}%;", :class => 'closed') : '') +
514 (pcts[1] > 0 ? content_tag('td', '', :width => "#{pcts[1].floor}%;", :class => 'done') : '') +
514 (pcts[1] > 0 ? content_tag('td', '', :width => "#{pcts[1].floor}%;", :class => 'done') : '') +
515 (pcts[2] > 0 ? content_tag('td', '', :width => "#{pcts[2].floor}%;", :class => 'todo') : '')
515 (pcts[2] > 0 ? content_tag('td', '', :width => "#{pcts[2].floor}%;", :class => 'todo') : '')
516 ), :class => 'progress', :style => "width: #{width};") +
516 ), :class => 'progress', :style => "width: #{width};") +
517 content_tag('p', legend, :class => 'pourcent')
517 content_tag('p', legend, :class => 'pourcent')
518 end
518 end
519
519
520 def context_menu_link(name, url, options={})
520 def context_menu_link(name, url, options={})
521 options[:class] ||= ''
521 options[:class] ||= ''
522 if options.delete(:selected)
522 if options.delete(:selected)
523 options[:class] << ' icon-checked disabled'
523 options[:class] << ' icon-checked disabled'
524 options[:disabled] = true
524 options[:disabled] = true
525 end
525 end
526 if options.delete(:disabled)
526 if options.delete(:disabled)
527 options.delete(:method)
527 options.delete(:method)
528 options.delete(:confirm)
528 options.delete(:confirm)
529 options.delete(:onclick)
529 options.delete(:onclick)
530 options[:class] << ' disabled'
530 options[:class] << ' disabled'
531 url = '#'
531 url = '#'
532 end
532 end
533 link_to name, url, options
533 link_to name, url, options
534 end
534 end
535
535
536 def calendar_for(field_id)
536 def calendar_for(field_id)
537 include_calendar_headers_tags
537 include_calendar_headers_tags
538 image_tag("calendar.png", {:id => "#{field_id}_trigger",:class => "calendar-trigger"}) +
538 image_tag("calendar.png", {:id => "#{field_id}_trigger",:class => "calendar-trigger"}) +
539 javascript_tag("Calendar.setup({inputField : '#{field_id}', ifFormat : '%Y-%m-%d', button : '#{field_id}_trigger' });")
539 javascript_tag("Calendar.setup({inputField : '#{field_id}', ifFormat : '%Y-%m-%d', button : '#{field_id}_trigger' });")
540 end
540 end
541
541
542 def include_calendar_headers_tags
542 def include_calendar_headers_tags
543 unless @calendar_headers_tags_included
543 unless @calendar_headers_tags_included
544 @calendar_headers_tags_included = true
544 @calendar_headers_tags_included = true
545 content_for :header_tags do
545 content_for :header_tags do
546 javascript_include_tag('calendar/calendar') +
546 javascript_include_tag('calendar/calendar') +
547 javascript_include_tag("calendar/lang/calendar-#{current_language}.js") +
547 javascript_include_tag("calendar/lang/calendar-#{current_language}.js") +
548 javascript_include_tag('calendar/calendar-setup') +
548 javascript_include_tag('calendar/calendar-setup') +
549 stylesheet_link_tag('calendar')
549 stylesheet_link_tag('calendar')
550 end
550 end
551 end
551 end
552 end
552 end
553
553
554 def content_for(name, content = nil, &block)
554 def content_for(name, content = nil, &block)
555 @has_content ||= {}
555 @has_content ||= {}
556 @has_content[name] = true
556 @has_content[name] = true
557 super(name, content, &block)
557 super(name, content, &block)
558 end
558 end
559
559
560 def has_content?(name)
560 def has_content?(name)
561 (@has_content && @has_content[name]) || false
561 (@has_content && @has_content[name]) || false
562 end
562 end
563
563
564 def gravatar_for_mail(mail, options = { })
565 if Setting.gravatar_enabled?
566 return gravatar(mail, options) rescue nil
567 end
568 end
569
564 private
570 private
565
571
566 def wiki_helper
572 def wiki_helper
567 helper = Redmine::WikiFormatting.helper_for(Setting.text_formatting)
573 helper = Redmine::WikiFormatting.helper_for(Setting.text_formatting)
568 extend helper
574 extend helper
569 return self
575 return self
570 end
576 end
571 end
577 end
@@ -1,32 +1,32
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to(l(:button_edit), {:controller => 'users', :action => 'edit', :id => @user}, :class => 'icon icon-edit') if User.current.admin? %>
2 <%= link_to(l(:button_edit), {:controller => 'users', :action => 'edit', :id => @user}, :class => 'icon icon-edit') if User.current.admin? %>
3 </div>
3 </div>
4
4
5 <h2><%= gravatar @user.mail unless @user.mail.empty? %> <%=h @user.name %></h2>
5 <h2><%= gravatar_for_mail @user.mail unless @user.mail.empty? %> <%=h @user.name %></h2>
6
6
7 <p>
7 <p>
8 <%= mail_to(h(@user.mail)) unless @user.pref.hide_mail %>
8 <%= mail_to(h(@user.mail)) unless @user.pref.hide_mail %>
9 <ul>
9 <ul>
10 <li><%=l(:label_registered_on)%>: <%= format_date(@user.created_on) %></li>
10 <li><%=l(:label_registered_on)%>: <%= format_date(@user.created_on) %></li>
11 <% for custom_value in @custom_values %>
11 <% for custom_value in @custom_values %>
12 <% if !custom_value.value.empty? %>
12 <% if !custom_value.value.empty? %>
13 <li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
13 <li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
14 <% end %>
14 <% end %>
15 <% end %>
15 <% end %>
16 </ul>
16 </ul>
17 </p>
17 </p>
18
18
19 <% unless @memberships.empty? %>
19 <% unless @memberships.empty? %>
20 <h3><%=l(:label_project_plural)%></h3>
20 <h3><%=l(:label_project_plural)%></h3>
21 <ul>
21 <ul>
22 <% for membership in @memberships %>
22 <% for membership in @memberships %>
23 <li><%= link_to(h(membership.project.name), :controller => 'projects', :action => 'show', :id => membership.project) %>
23 <li><%= link_to(h(membership.project.name), :controller => 'projects', :action => 'show', :id => membership.project) %>
24 (<%=h membership.role.name %>, <%= format_date(membership.created_on) %>)</li>
24 (<%=h membership.role.name %>, <%= format_date(membership.created_on) %>)</li>
25 <% end %>
25 <% end %>
26 </ul>
26 </ul>
27 <% end %>
27 <% end %>
28
28
29 <h3><%=l(:label_activity)%></h3>
29 <h3><%=l(:label_activity)%></h3>
30 <p>
30 <p>
31 <%=l(:label_reported_issues)%>: <%= Issue.count(:conditions => ["author_id=?", @user.id]) %>
31 <%=l(:label_reported_issues)%>: <%= Issue.count(:conditions => ["author_id=?", @user.id]) %>
32 </p> No newline at end of file
32 </p>
@@ -1,15 +1,15
1 <% reply_links = authorize_for('issues', 'edit') -%>
1 <% reply_links = authorize_for('issues', 'edit') -%>
2 <% for journal in journals %>
2 <% for journal in journals %>
3 <div id="change-<%= journal.id %>" class="journal">
3 <div id="change-<%= journal.id %>" class="journal">
4 <h4><div style="float:right;"><%= link_to "##{journal.indice}", :anchor => "note-#{journal.indice}" %></div>
4 <h4><div style="float:right;"><%= link_to "##{journal.indice}", :anchor => "note-#{journal.indice}" %></div>
5 <%= content_tag('a', '', :name => "note-#{journal.indice}")%>
5 <%= content_tag('a', '', :name => "note-#{journal.indice}")%>
6 <%= format_time(journal.created_on) %> - <%= journal.user.name %></h4>
6 <%= format_time(journal.created_on) %> - <%= journal.user.name %></h4>
7 <%= gravatar(journal.user.mail.blank? ? "" : journal.user.mail, :size => "32") %>
7 <%= gravatar_for_mail(journal.user.mail.blank? ? "" : journal.user.mail, :size => "32") %>
8 <ul>
8 <ul>
9 <% for detail in journal.details %>
9 <% for detail in journal.details %>
10 <li><%= show_detail(detail) %></li>
10 <li><%= show_detail(detail) %></li>
11 <% end %>
11 <% end %>
12 </ul>
12 </ul>
13 <%= render_notes(journal, :reply_links => reply_links) unless journal.notes.blank? %>
13 <%= render_notes(journal, :reply_links => reply_links) unless journal.notes.blank? %>
14 </div>
14 </div>
15 <% end %>
15 <% end %>
@@ -1,128 +1,128
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %>
2 <%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %>
3 <%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue}, :class => 'icon icon-time' %>
3 <%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue}, :class => 'icon icon-time' %>
4 <%= watcher_tag(@issue, User.current) %>
4 <%= watcher_tag(@issue, User.current) %>
5 <%= link_to_if_authorized l(:button_copy), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-copy' %>
5 <%= link_to_if_authorized l(:button_copy), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-copy' %>
6 <%= link_to_if_authorized l(:button_move), {:controller => 'issues', :action => 'move', :id => @issue }, :class => 'icon icon-move' %>
6 <%= link_to_if_authorized l(:button_move), {:controller => 'issues', :action => 'move', :id => @issue }, :class => 'icon icon-move' %>
7 <%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
7 <%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
8 </div>
8 </div>
9
9
10 <h2><%= @issue.tracker.name %> #<%= @issue.id %></h2>
10 <h2><%= @issue.tracker.name %> #<%= @issue.id %></h2>
11
11
12 <div class="issue <%= "status-#{@issue.status.position} priority-#{@issue.priority.position}" %>">
12 <div class="issue <%= "status-#{@issue.status.position} priority-#{@issue.priority.position}" %>">
13 <%= gravatar(@issue.author.mail, :size => "64") rescue nil %>
13 <%= gravatar_for_mail(@issue.author.mail, :size => "64") %>
14 <h3><%=h @issue.subject %></h3>
14 <h3><%=h @issue.subject %></h3>
15 <p class="author">
15 <p class="author">
16 <%= authoring @issue.created_on, @issue.author %>.
16 <%= authoring @issue.created_on, @issue.author %>.
17 <%= l(:label_updated_time, distance_of_time_in_words(Time.now, @issue.updated_on)) + '.' if @issue.created_on != @issue.updated_on %>
17 <%= l(:label_updated_time, distance_of_time_in_words(Time.now, @issue.updated_on)) + '.' if @issue.created_on != @issue.updated_on %>
18 </p>
18 </p>
19
19
20 <table width="100%">
20 <table width="100%">
21 <tr>
21 <tr>
22 <td style="width:15%" class="status"><b><%=l(:field_status)%>:</b></td><td style="width:35%" class="status status-<%= @issue.status.name %>"><%= @issue.status.name %></td>
22 <td style="width:15%" class="status"><b><%=l(:field_status)%>:</b></td><td style="width:35%" class="status status-<%= @issue.status.name %>"><%= @issue.status.name %></td>
23 <td style="width:15%" class="start-date"><b><%=l(:field_start_date)%>:</b></td><td style="width:35%"><%= format_date(@issue.start_date) %></td>
23 <td style="width:15%" class="start-date"><b><%=l(:field_start_date)%>:</b></td><td style="width:35%"><%= format_date(@issue.start_date) %></td>
24 </tr>
24 </tr>
25 <tr>
25 <tr>
26 <td class="priority"><b><%=l(:field_priority)%>:</b></td><td class="priority priority-<%= @issue.priority.name %>"><%= @issue.priority.name %></td>
26 <td class="priority"><b><%=l(:field_priority)%>:</b></td><td class="priority priority-<%= @issue.priority.name %>"><%= @issue.priority.name %></td>
27 <td class="due-date"><b><%=l(:field_due_date)%>:</b></td><td class="due-date"><%= format_date(@issue.due_date) %></td>
27 <td class="due-date"><b><%=l(:field_due_date)%>:</b></td><td class="due-date"><%= format_date(@issue.due_date) %></td>
28 </tr>
28 </tr>
29 <tr>
29 <tr>
30 <td class="assigned-to"><b><%=l(:field_assigned_to)%>:</b></td><td><%= gravatar(@issue.assigned_to.mail, :size => "14") unless @issue.assigned_to.blank?%><%= @issue.assigned_to ? link_to_user(@issue.assigned_to) : "-" %></td>
30 <td class="assigned-to"><b><%=l(:field_assigned_to)%>:</b></td><td><%= gravatar_for_mail(@issue.assigned_to.mail, :size => "14") unless @issue.assigned_to.blank?%><%= @issue.assigned_to ? link_to_user(@issue.assigned_to) : "-" %></td>
31 <td class="progress"><b><%=l(:field_done_ratio)%>:</b></td><td class="progress"><%= progress_bar @issue.done_ratio, :width => '80px', :legend => "#{@issue.done_ratio}%" %></td>
31 <td class="progress"><b><%=l(:field_done_ratio)%>:</b></td><td class="progress"><%= progress_bar @issue.done_ratio, :width => '80px', :legend => "#{@issue.done_ratio}%" %></td>
32 </tr>
32 </tr>
33 <tr>
33 <tr>
34 <td class="category"><b><%=l(:field_category)%>:</b></td><td><%=h @issue.category ? @issue.category.name : "-" %></td>
34 <td class="category"><b><%=l(:field_category)%>:</b></td><td><%=h @issue.category ? @issue.category.name : "-" %></td>
35 <% if User.current.allowed_to?(:view_time_entries, @project) %>
35 <% if User.current.allowed_to?(:view_time_entries, @project) %>
36 <td class="spent-time"><b><%=l(:label_spent_time)%>:</b></td>
36 <td class="spent-time"><b><%=l(:label_spent_time)%>:</b></td>
37 <td class="spent-hours"><%= @issue.spent_hours > 0 ? (link_to lwr(:label_f_hour, @issue.spent_hours), {:controller => 'timelog', :action => 'details', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time') : "-" %></td>
37 <td class="spent-hours"><%= @issue.spent_hours > 0 ? (link_to lwr(:label_f_hour, @issue.spent_hours), {:controller => 'timelog', :action => 'details', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time') : "-" %></td>
38 <% end %>
38 <% end %>
39 </tr>
39 </tr>
40 <tr>
40 <tr>
41 <td class="fixed-version"><b><%=l(:field_fixed_version)%>:</b></td><td><%= @issue.fixed_version ? link_to_version(@issue.fixed_version) : "-" %></td>
41 <td class="fixed-version"><b><%=l(:field_fixed_version)%>:</b></td><td><%= @issue.fixed_version ? link_to_version(@issue.fixed_version) : "-" %></td>
42 <% if @issue.estimated_hours %>
42 <% if @issue.estimated_hours %>
43 <td class="estimated-hours"><b><%=l(:field_estimated_hours)%>:</b></td><td><%= lwr(:label_f_hour, @issue.estimated_hours) %></td>
43 <td class="estimated-hours"><b><%=l(:field_estimated_hours)%>:</b></td><td><%= lwr(:label_f_hour, @issue.estimated_hours) %></td>
44 <% end %>
44 <% end %>
45 </tr>
45 </tr>
46 <tr>
46 <tr>
47 <% n = 0 -%>
47 <% n = 0 -%>
48 <% @issue.custom_values.each do |value| -%>
48 <% @issue.custom_values.each do |value| -%>
49 <td valign="top"><b><%=h value.custom_field.name %>:</b></td><td valign="top"><%= simple_format(h(show_value(value))) %></td>
49 <td valign="top"><b><%=h value.custom_field.name %>:</b></td><td valign="top"><%= simple_format(h(show_value(value))) %></td>
50 <% n = n + 1
50 <% n = n + 1
51 if (n > 1)
51 if (n > 1)
52 n = 0 %>
52 n = 0 %>
53 </tr><tr>
53 </tr><tr>
54 <%end
54 <%end
55 end %>
55 end %>
56 </tr>
56 </tr>
57 <%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %>
57 <%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %>
58 </table>
58 </table>
59 <hr />
59 <hr />
60
60
61 <div class="contextual">
61 <div class="contextual">
62 <%= link_to_remote_if_authorized l(:button_quote), { :url => {:action => 'reply', :id => @issue} }, :class => 'icon icon-comment' %>
62 <%= link_to_remote_if_authorized l(:button_quote), { :url => {:action => 'reply', :id => @issue} }, :class => 'icon icon-comment' %>
63 </div>
63 </div>
64
64
65 <p><strong><%=l(:field_description)%></strong></p>
65 <p><strong><%=l(:field_description)%></strong></p>
66 <div class="wiki">
66 <div class="wiki">
67 <%= textilizable @issue, :description, :attachments => @issue.attachments %>
67 <%= textilizable @issue, :description, :attachments => @issue.attachments %>
68 </div>
68 </div>
69
69
70 <% if @issue.attachments.any? %>
70 <% if @issue.attachments.any? %>
71 <%= link_to_attachments @issue.attachments, :delete_url => (authorize_for('issues', 'destroy_attachment') ? {:controller => 'issues', :action => 'destroy_attachment', :id => @issue} : nil) %>
71 <%= link_to_attachments @issue.attachments, :delete_url => (authorize_for('issues', 'destroy_attachment') ? {:controller => 'issues', :action => 'destroy_attachment', :id => @issue} : nil) %>
72 <% end %>
72 <% end %>
73
73
74 <% if authorize_for('issue_relations', 'new') || @issue.relations.any? %>
74 <% if authorize_for('issue_relations', 'new') || @issue.relations.any? %>
75 <hr />
75 <hr />
76 <div id="relations">
76 <div id="relations">
77 <%= render :partial => 'relations' %>
77 <%= render :partial => 'relations' %>
78 </div>
78 </div>
79 <% end %>
79 <% end %>
80
80
81 <% if User.current.allowed_to?(:add_issue_watchers, @project) ||
81 <% if User.current.allowed_to?(:add_issue_watchers, @project) ||
82 (@issue.watchers.any? && User.current.allowed_to?(:view_issue_watchers, @project)) %>
82 (@issue.watchers.any? && User.current.allowed_to?(:view_issue_watchers, @project)) %>
83 <hr />
83 <hr />
84 <div id="watchers">
84 <div id="watchers">
85 <%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %>
85 <%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %>
86 </div>
86 </div>
87 <% end %>
87 <% end %>
88
88
89 </div>
89 </div>
90
90
91 <% if @issue.changesets.any? && User.current.allowed_to?(:view_changesets, @project) %>
91 <% if @issue.changesets.any? && User.current.allowed_to?(:view_changesets, @project) %>
92 <div id="issue-changesets">
92 <div id="issue-changesets">
93 <h3><%=l(:label_associated_revisions)%></h3>
93 <h3><%=l(:label_associated_revisions)%></h3>
94 <%= render :partial => 'changesets', :locals => { :changesets => @issue.changesets} %>
94 <%= render :partial => 'changesets', :locals => { :changesets => @issue.changesets} %>
95 </div>
95 </div>
96 <% end %>
96 <% end %>
97
97
98 <% if @journals.any? %>
98 <% if @journals.any? %>
99 <div id="history">
99 <div id="history">
100 <h3><%=l(:label_history)%></h3>
100 <h3><%=l(:label_history)%></h3>
101 <%= render :partial => 'history', :locals => { :journals => @journals } %>
101 <%= render :partial => 'history', :locals => { :journals => @journals } %>
102 </div>
102 </div>
103 <% end %>
103 <% end %>
104 <div style="clear: both;"></div>
104 <div style="clear: both;"></div>
105
105
106 <% if authorize_for('issues', 'edit') %>
106 <% if authorize_for('issues', 'edit') %>
107 <div id="update" style="display:none;">
107 <div id="update" style="display:none;">
108 <h3><%= l(:button_update) %></h3>
108 <h3><%= l(:button_update) %></h3>
109 <%= render :partial => 'edit' %>
109 <%= render :partial => 'edit' %>
110 </div>
110 </div>
111 <% end %>
111 <% end %>
112
112
113 <p class="other-formats">
113 <p class="other-formats">
114 <%= l(:label_export_to) %>
114 <%= l(:label_export_to) %>
115 <span><%= link_to 'Atom', {:format => 'atom', :key => User.current.rss_key}, :class => 'feed' %></span>
115 <span><%= link_to 'Atom', {:format => 'atom', :key => User.current.rss_key}, :class => 'feed' %></span>
116 <span><%= link_to 'PDF', {:format => 'pdf'}, :class => 'pdf' %></span>
116 <span><%= link_to 'PDF', {:format => 'pdf'}, :class => 'pdf' %></span>
117 </p>
117 </p>
118
118
119 <% html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %>
119 <% html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %>
120
120
121 <% content_for :sidebar do %>
121 <% content_for :sidebar do %>
122 <%= render :partial => 'issues/sidebar' %>
122 <%= render :partial => 'issues/sidebar' %>
123 <% end %>
123 <% end %>
124
124
125 <% content_for :header_tags do %>
125 <% content_for :header_tags do %>
126 <%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@issue.project} - #{@issue.tracker} ##{@issue.id}: #{@issue.subject}") %>
126 <%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@issue.project} - #{@issue.tracker} ##{@issue.id}: #{@issue.subject}") %>
127 <%= stylesheet_link_tag 'scm' %>
127 <%= stylesheet_link_tag 'scm' %>
128 <% end %>
128 <% end %>
@@ -1,61 +1,61
1 <h2><%= l(:label_activity) %></h2>
1 <h2><%= l(:label_activity) %></h2>
2 <p class="subtitle"><%= "#{l(:label_date_from)} #{format_date(@date_to - @days)} #{l(:label_date_to).downcase} #{format_date(@date_to-1)}" %></p>
2 <p class="subtitle"><%= "#{l(:label_date_from)} #{format_date(@date_to - @days)} #{l(:label_date_to).downcase} #{format_date(@date_to-1)}" %></p>
3
3
4 <div id="activity">
4 <div id="activity">
5 <% @events_by_day.keys.sort.reverse.each do |day| %>
5 <% @events_by_day.keys.sort.reverse.each do |day| %>
6 <h3><%= format_activity_day(day) %></h3>
6 <h3><%= format_activity_day(day) %></h3>
7 <dl>
7 <dl>
8 <% @events_by_day[day].sort {|x,y| y.event_datetime <=> x.event_datetime }.each do |e| -%>
8 <% @events_by_day[day].sort {|x,y| y.event_datetime <=> x.event_datetime }.each do |e| -%>
9 <dt class="<%= e.event_type %> <%= User.current.logged? && e.respond_to?(:event_author) && User.current == e.event_author ? 'me' : nil %>">
9 <dt class="<%= e.event_type %> <%= User.current.logged? && e.respond_to?(:event_author) && User.current == e.event_author ? 'me' : nil %>">
10 <%= gravatar(e.user.mail, :size => "24") if e.respond_to?(:user) rescue nil%>
10 <%= gravatar_for_mail(e.user.mail, :size => "24") if e.respond_to?(:user) %>
11 <%= gravatar(e.author.mail, :size => "24") if e.respond_to?(:author) rescue nil%>
11 <%= gravatar_for_mail(e.author.mail, :size => "24") if e.respond_to?(:author) %>
12 <%= gravatar(e.committer.match('\\<.+?\\>')[0].gsub(/[<>]/, ''), :size => "24") if e.respond_to?(:committer) rescue nil%>
12 <%= gravatar_for_mail(e.committer.match('\\<.+?\\>')[0].gsub(/[<>]/, ''), :size => "24") if e.respond_to?(:committer) rescue nil %>
13 <span class="time"><%= format_time(e.event_datetime, false) %></span>
13 <span class="time"><%= format_time(e.event_datetime, false) %></span>
14 <%= content_tag('span', h(e.project), :class => 'project') if @project.nil? || @project != e.project %>
14 <%= content_tag('span', h(e.project), :class => 'project') if @project.nil? || @project != e.project %>
15 <%= link_to format_activity_title(e.event_title), e.event_url %></dt>
15 <%= link_to format_activity_title(e.event_title), e.event_url %></dt>
16 <dd><span class="description"><%= format_activity_description(e.event_description) %></span>
16 <dd><span class="description"><%= format_activity_description(e.event_description) %></span>
17 <span class="author"><%= e.event_author if e.respond_to?(:event_author) %></span></dd>
17 <span class="author"><%= e.event_author if e.respond_to?(:event_author) %></span></dd>
18 <% end -%>
18 <% end -%>
19 </dl>
19 </dl>
20 <% end -%>
20 <% end -%>
21 </div>
21 </div>
22
22
23 <%= content_tag('p', l(:label_no_data), :class => 'nodata') if @events_by_day.empty? %>
23 <%= content_tag('p', l(:label_no_data), :class => 'nodata') if @events_by_day.empty? %>
24
24
25 <div style="float:left;">
25 <div style="float:left;">
26 <%= link_to_remote(('&#171; ' + l(:label_previous)),
26 <%= link_to_remote(('&#171; ' + l(:label_previous)),
27 {:update => "content", :url => params.merge(:from => @date_to - @days), :complete => 'window.scrollTo(0,0)'},
27 {:update => "content", :url => params.merge(:from => @date_to - @days), :complete => 'window.scrollTo(0,0)'},
28 {:href => url_for(params.merge(:from => @date_to - @days)),
28 {:href => url_for(params.merge(:from => @date_to - @days)),
29 :title => "#{l(:label_date_from)} #{format_date(@date_to - 2*@days)} #{l(:label_date_to).downcase} #{format_date(@date_to - @days - 1)}"}) %>
29 :title => "#{l(:label_date_from)} #{format_date(@date_to - 2*@days)} #{l(:label_date_to).downcase} #{format_date(@date_to - @days - 1)}"}) %>
30 </div>
30 </div>
31 <div style="float:right;">
31 <div style="float:right;">
32 <%= link_to_remote((l(:label_next) + ' &#187;'),
32 <%= link_to_remote((l(:label_next) + ' &#187;'),
33 {:update => "content", :url => params.merge(:from => @date_to + @days), :complete => 'window.scrollTo(0,0)'},
33 {:update => "content", :url => params.merge(:from => @date_to + @days), :complete => 'window.scrollTo(0,0)'},
34 {:href => url_for(params.merge(:from => @date_to + @days)),
34 {:href => url_for(params.merge(:from => @date_to + @days)),
35 :title => "#{l(:label_date_from)} #{format_date(@date_to)} #{l(:label_date_to).downcase} #{format_date(@date_to + @days - 1)}"}) unless @date_to >= Date.today %>
35 :title => "#{l(:label_date_from)} #{format_date(@date_to)} #{l(:label_date_to).downcase} #{format_date(@date_to + @days - 1)}"}) unless @date_to >= Date.today %>
36 </div>
36 </div>
37 &nbsp;
37 &nbsp;
38 <p class="other-formats">
38 <p class="other-formats">
39 <%= l(:label_export_to) %>
39 <%= l(:label_export_to) %>
40 <%= link_to 'Atom', params.merge(:format => :atom, :key => User.current.rss_key).delete_if{|k,v|k=="commit"}, :class => 'feed' %>
40 <%= link_to 'Atom', params.merge(:format => :atom, :key => User.current.rss_key).delete_if{|k,v|k=="commit"}, :class => 'feed' %>
41 </p>
41 </p>
42
42
43 <% content_for :header_tags do %>
43 <% content_for :header_tags do %>
44 <%= auto_discovery_link_tag(:atom, params.merge(:format => 'atom', :year => nil, :month => nil, :key => User.current.rss_key)) %>
44 <%= auto_discovery_link_tag(:atom, params.merge(:format => 'atom', :year => nil, :month => nil, :key => User.current.rss_key)) %>
45 <% end %>
45 <% end %>
46
46
47 <% content_for :sidebar do %>
47 <% content_for :sidebar do %>
48 <% form_tag({}, :method => :get) do %>
48 <% form_tag({}, :method => :get) do %>
49 <h3><%= l(:label_activity) %></h3>
49 <h3><%= l(:label_activity) %></h3>
50 <p><% @activity.event_types.each do |t| %>
50 <p><% @activity.event_types.each do |t| %>
51 <label><%= check_box_tag "show_#{t}", 1, @activity.scope.include?(t) %> <%= l("label_#{t.singularize}_plural")%></label><br />
51 <label><%= check_box_tag "show_#{t}", 1, @activity.scope.include?(t) %> <%= l("label_#{t.singularize}_plural")%></label><br />
52 <% end %></p>
52 <% end %></p>
53 <% if @project && @project.active_children.any? %>
53 <% if @project && @project.active_children.any? %>
54 <p><label><%= check_box_tag 'with_subprojects', 1, @with_subprojects %> <%=l(:label_subproject_plural)%></label></p>
54 <p><label><%= check_box_tag 'with_subprojects', 1, @with_subprojects %> <%=l(:label_subproject_plural)%></label></p>
55 <%= hidden_field_tag 'with_subprojects', 0 %>
55 <%= hidden_field_tag 'with_subprojects', 0 %>
56 <% end %>
56 <% end %>
57 <p><%= submit_tag l(:button_apply), :class => 'button-small', :name => nil %></p>
57 <p><%= submit_tag l(:button_apply), :class => 'button-small', :name => nil %></p>
58 <% end %>
58 <% end %>
59 <% end %>
59 <% end %>
60
60
61 <% html_title(l(:label_activity)) -%>
61 <% html_title(l(:label_activity)) -%>
@@ -1,52 +1,55
1 <% form_tag({:action => 'edit'}) do %>
1 <% form_tag({:action => 'edit'}) do %>
2
2
3 <div class="box tabular settings">
3 <div class="box tabular settings">
4 <p><label><%= l(:setting_app_title) %></label>
4 <p><label><%= l(:setting_app_title) %></label>
5 <%= text_field_tag 'settings[app_title]', Setting.app_title, :size => 30 %></p>
5 <%= text_field_tag 'settings[app_title]', Setting.app_title, :size => 30 %></p>
6
6
7 <p><label><%= l(:setting_welcome_text) %></label>
7 <p><label><%= l(:setting_welcome_text) %></label>
8 <%= text_area_tag 'settings[welcome_text]', Setting.welcome_text, :cols => 60, :rows => 5, :class => 'wiki-edit' %></p>
8 <%= text_area_tag 'settings[welcome_text]', Setting.welcome_text, :cols => 60, :rows => 5, :class => 'wiki-edit' %></p>
9 <%= wikitoolbar_for 'settings[welcome_text]' %>
9 <%= wikitoolbar_for 'settings[welcome_text]' %>
10
10
11 <p><label><%= l(:label_theme) %></label>
11 <p><label><%= l(:label_theme) %></label>
12 <%= select_tag 'settings[ui_theme]', options_for_select( ([[l(:label_default), '']] + Redmine::Themes.themes.collect {|t| [t.name, t.id]}), Setting.ui_theme) %></p>
12 <%= select_tag 'settings[ui_theme]', options_for_select( ([[l(:label_default), '']] + Redmine::Themes.themes.collect {|t| [t.name, t.id]}), Setting.ui_theme) %></p>
13
13
14 <p><label><%= l(:setting_default_language) %></label>
14 <p><label><%= l(:setting_default_language) %></label>
15 <%= select_tag 'settings[default_language]', options_for_select( lang_options_for_select(false), Setting.default_language) %></p>
15 <%= select_tag 'settings[default_language]', options_for_select( lang_options_for_select(false), Setting.default_language) %></p>
16
16
17 <p><label><%= l(:setting_date_format) %></label>
17 <p><label><%= l(:setting_date_format) %></label>
18 <%= select_tag 'settings[date_format]', options_for_select( [[l(:label_language_based), '']] + Setting::DATE_FORMATS.collect {|f| [Date.today.strftime(f), f]}, Setting.date_format) %></p>
18 <%= select_tag 'settings[date_format]', options_for_select( [[l(:label_language_based), '']] + Setting::DATE_FORMATS.collect {|f| [Date.today.strftime(f), f]}, Setting.date_format) %></p>
19
19
20 <p><label><%= l(:setting_time_format) %></label>
20 <p><label><%= l(:setting_time_format) %></label>
21 <%= select_tag 'settings[time_format]', options_for_select( [[l(:label_language_based), '']] + Setting::TIME_FORMATS.collect {|f| [Time.now.strftime(f), f]}, Setting.time_format) %></p>
21 <%= select_tag 'settings[time_format]', options_for_select( [[l(:label_language_based), '']] + Setting::TIME_FORMATS.collect {|f| [Time.now.strftime(f), f]}, Setting.time_format) %></p>
22
22
23 <p><label><%= l(:setting_user_format) %></label>
23 <p><label><%= l(:setting_user_format) %></label>
24 <%= select_tag 'settings[user_format]', options_for_select( @options[:user_format], Setting.user_format.to_s ) %></p>
24 <%= select_tag 'settings[user_format]', options_for_select( @options[:user_format], Setting.user_format.to_s ) %></p>
25
25
26 <p><label><%= l(:setting_attachment_max_size) %></label>
26 <p><label><%= l(:setting_attachment_max_size) %></label>
27 <%= text_field_tag 'settings[attachment_max_size]', Setting.attachment_max_size, :size => 6 %> KB</p>
27 <%= text_field_tag 'settings[attachment_max_size]', Setting.attachment_max_size, :size => 6 %> KB</p>
28
28
29 <p><label><%= l(:setting_per_page_options) %></label>
29 <p><label><%= l(:setting_per_page_options) %></label>
30 <%= text_field_tag 'settings[per_page_options]', Setting.per_page_options_array.join(', '), :size => 20 %><br /><em><%= l(:text_comma_separated) %></em></p>
30 <%= text_field_tag 'settings[per_page_options]', Setting.per_page_options_array.join(', '), :size => 20 %><br /><em><%= l(:text_comma_separated) %></em></p>
31
31
32 <p><label><%= l(:setting_activity_days_default) %></label>
32 <p><label><%= l(:setting_activity_days_default) %></label>
33 <%= text_field_tag 'settings[activity_days_default]', Setting.activity_days_default, :size => 6 %> <%= l(:label_day_plural) %></p>
33 <%= text_field_tag 'settings[activity_days_default]', Setting.activity_days_default, :size => 6 %> <%= l(:label_day_plural) %></p>
34
34
35 <p><label><%= l(:setting_host_name) %></label>
35 <p><label><%= l(:setting_host_name) %></label>
36 <%= text_field_tag 'settings[host_name]', Setting.host_name, :size => 60 %></p>
36 <%= text_field_tag 'settings[host_name]', Setting.host_name, :size => 60 %></p>
37
37
38 <p><label><%= l(:setting_protocol) %></label>
38 <p><label><%= l(:setting_protocol) %></label>
39 <%= select_tag 'settings[protocol]', options_for_select(['http', 'https'], Setting.protocol) %></p>
39 <%= select_tag 'settings[protocol]', options_for_select(['http', 'https'], Setting.protocol) %></p>
40
40
41 <p><label><%= l(:setting_text_formatting) %></label>
41 <p><label><%= l(:setting_text_formatting) %></label>
42 <%= select_tag 'settings[text_formatting]', options_for_select([[l(:label_none), "0"], *Redmine::WikiFormatting.format_names.collect{|name| [name, name]} ], Setting.text_formatting.to_sym) %></p>
42 <%= select_tag 'settings[text_formatting]', options_for_select([[l(:label_none), "0"], *Redmine::WikiFormatting.format_names.collect{|name| [name, name]} ], Setting.text_formatting.to_sym) %></p>
43
43
44 <p><label><%= l(:setting_wiki_compression) %></label>
44 <p><label><%= l(:setting_wiki_compression) %></label>
45 <%= select_tag 'settings[wiki_compression]', options_for_select( [[l(:label_none), 0], ["gzip", "gzip"]], Setting.wiki_compression) %></p>
45 <%= select_tag 'settings[wiki_compression]', options_for_select( [[l(:label_none), 0], ["gzip", "gzip"]], Setting.wiki_compression) %></p>
46
46
47 <p><label><%= l(:setting_feeds_limit) %></label>
47 <p><label><%= l(:setting_feeds_limit) %></label>
48 <%= text_field_tag 'settings[feeds_limit]', Setting.feeds_limit, :size => 6 %></p>
48 <%= text_field_tag 'settings[feeds_limit]', Setting.feeds_limit, :size => 6 %></p>
49
50 <p><label><%= l(:setting_gravatar_enabled) %></label>
51 <%= check_box_tag 'settings[gravatar_enabled]', 1, Setting.gravatar_enabled? %><%= hidden_field_tag 'settings[gravatar_enabled]', 0 %></p>
49 </div>
52 </div>
50
53
51 <%= submit_tag l(:button_save) %>
54 <%= submit_tag l(:button_save) %>
52 <% end %>
55 <% end %>
@@ -1,47 +1,47
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to l(:label_user_new), {:action => 'add'}, :class => 'icon icon-add' %>
2 <%= link_to l(:label_user_new), {:action => 'add'}, :class => 'icon icon-add' %>
3 </div>
3 </div>
4
4
5 <h2><%=l(:label_user_plural)%></h2>
5 <h2><%=l(:label_user_plural)%></h2>
6
6
7 <% form_tag({}, :method => :get) do %>
7 <% form_tag({}, :method => :get) do %>
8 <fieldset><legend><%= l(:label_filter_plural) %></legend>
8 <fieldset><legend><%= l(:label_filter_plural) %></legend>
9 <label><%= l(:field_status) %>:</label>
9 <label><%= l(:field_status) %>:</label>
10 <%= select_tag 'status', users_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %>
10 <%= select_tag 'status', users_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %>
11 <label><%= l(:label_user) %>:</label>
11 <label><%= l(:label_user) %>:</label>
12 <%= text_field_tag 'name', params[:name], :size => 30 %>
12 <%= text_field_tag 'name', params[:name], :size => 30 %>
13 <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
13 <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
14 </fieldset>
14 </fieldset>
15 <% end %>
15 <% end %>
16 &nbsp;
16 &nbsp;
17
17
18 <table class="list">
18 <table class="list">
19 <thead><tr>
19 <thead><tr>
20 <%= sort_header_tag('login', :caption => l(:field_login)) %>
20 <%= sort_header_tag('login', :caption => l(:field_login)) %>
21 <%= sort_header_tag('firstname', :caption => l(:field_firstname)) %>
21 <%= sort_header_tag('firstname', :caption => l(:field_firstname)) %>
22 <%= sort_header_tag('lastname', :caption => l(:field_lastname)) %>
22 <%= sort_header_tag('lastname', :caption => l(:field_lastname)) %>
23 <%= sort_header_tag('mail', :caption => l(:field_mail)) %>
23 <%= sort_header_tag('mail', :caption => l(:field_mail)) %>
24 <%= sort_header_tag('admin', :caption => l(:field_admin), :default_order => 'desc') %>
24 <%= sort_header_tag('admin', :caption => l(:field_admin), :default_order => 'desc') %>
25 <%= sort_header_tag('created_on', :caption => l(:field_created_on), :default_order => 'desc') %>
25 <%= sort_header_tag('created_on', :caption => l(:field_created_on), :default_order => 'desc') %>
26 <%= sort_header_tag('last_login_on', :caption => l(:field_last_login_on), :default_order => 'desc') %>
26 <%= sort_header_tag('last_login_on', :caption => l(:field_last_login_on), :default_order => 'desc') %>
27 <th></th>
27 <th></th>
28 </tr></thead>
28 </tr></thead>
29 <tbody>
29 <tbody>
30 <% for user in @users -%>
30 <% for user in @users -%>
31 <tr class="user <%= cycle("odd", "even") %> <%= %w(anon active registered locked)[user.status] %>">
31 <tr class="user <%= cycle("odd", "even") %> <%= %w(anon active registered locked)[user.status] %>">
32 <td class="username"><%= gravatar(user.mail.blank? ? "" : user.mail, :size => "24") %><%= link_to h(user.login), :action => 'edit', :id => user %></td>
32 <td class="username"><%= gravatar_for_mail(user.mail.blank? ? "" : user.mail, :size => "24") %><%= link_to h(user.login), :action => 'edit', :id => user %></td>
33 <td class="firstname"><%= h(user.firstname) %></td>
33 <td class="firstname"><%= h(user.firstname) %></td>
34 <td class="lastname"><%= h(user.lastname) %></td>
34 <td class="lastname"><%= h(user.lastname) %></td>
35 <td class="email"><%= mail_to(h(user.mail)) %></td>
35 <td class="email"><%= mail_to(h(user.mail)) %></td>
36 <td align="center"><%= image_tag('true.png') if user.admin? %></td>
36 <td align="center"><%= image_tag('true.png') if user.admin? %></td>
37 <td class="created_on" align="center"><%= format_time(user.created_on) %></td>
37 <td class="created_on" align="center"><%= format_time(user.created_on) %></td>
38 <td class="last_login_on" align="center"><%= format_time(user.last_login_on) unless user.last_login_on.nil? %></td>
38 <td class="last_login_on" align="center"><%= format_time(user.last_login_on) unless user.last_login_on.nil? %></td>
39 <td><small><%= change_status_link(user) %></small></td>
39 <td><small><%= change_status_link(user) %></small></td>
40 </tr>
40 </tr>
41 <% end -%>
41 <% end -%>
42 </tbody>
42 </tbody>
43 </table>
43 </table>
44
44
45 <p class="pagination"><%= pagination_links_full @user_pages, @user_count %></p>
45 <p class="pagination"><%= pagination_links_full @user_pages, @user_count %></p>
46
46
47 <% html_title(l(:label_user_plural)) -%>
47 <% html_title(l(:label_user_plural)) -%>
@@ -1,138 +1,139
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
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
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.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18
18
19 # DO NOT MODIFY THIS FILE !!!
19 # DO NOT MODIFY THIS FILE !!!
20 # Settings can be defined through the application in Admin -> Settings
20 # Settings can be defined through the application in Admin -> Settings
21
21
22 app_title:
22 app_title:
23 default: Redmine
23 default: Redmine
24 app_subtitle:
24 app_subtitle:
25 default: Project management
25 default: Project management
26 welcome_text:
26 welcome_text:
27 default:
27 default:
28 login_required:
28 login_required:
29 default: 0
29 default: 0
30 self_registration:
30 self_registration:
31 default: '2'
31 default: '2'
32 lost_password:
32 lost_password:
33 default: 1
33 default: 1
34 attachment_max_size:
34 attachment_max_size:
35 format: int
35 format: int
36 default: 5120
36 default: 5120
37 issues_export_limit:
37 issues_export_limit:
38 format: int
38 format: int
39 default: 500
39 default: 500
40 activity_days_default:
40 activity_days_default:
41 format: int
41 format: int
42 default: 30
42 default: 30
43 per_page_options:
43 per_page_options:
44 default: '25,50,100'
44 default: '25,50,100'
45 mail_from:
45 mail_from:
46 default: redmine@example.net
46 default: redmine@example.net
47 bcc_recipients:
47 bcc_recipients:
48 default: 1
48 default: 1
49 plain_text_mail:
49 plain_text_mail:
50 default: 0
50 default: 0
51 text_formatting:
51 text_formatting:
52 default: textile
52 default: textile
53 wiki_compression:
53 wiki_compression:
54 default: ""
54 default: ""
55 default_language:
55 default_language:
56 default: en
56 default: en
57 host_name:
57 host_name:
58 default: localhost:3000
58 default: localhost:3000
59 protocol:
59 protocol:
60 default: http
60 default: http
61 feeds_limit:
61 feeds_limit:
62 format: int
62 format: int
63 default: 15
63 default: 15
64 enabled_scm:
64 enabled_scm:
65 serialized: true
65 serialized: true
66 default:
66 default:
67 - Subversion
67 - Subversion
68 - Darcs
68 - Darcs
69 - Mercurial
69 - Mercurial
70 - Cvs
70 - Cvs
71 - Bazaar
71 - Bazaar
72 - Git
72 - Git
73 autofetch_changesets:
73 autofetch_changesets:
74 default: 1
74 default: 1
75 sys_api_enabled:
75 sys_api_enabled:
76 default: 0
76 default: 0
77 commit_ref_keywords:
77 commit_ref_keywords:
78 default: 'refs,references,IssueID'
78 default: 'refs,references,IssueID'
79 commit_fix_keywords:
79 commit_fix_keywords:
80 default: 'fixes,closes'
80 default: 'fixes,closes'
81 commit_fix_status_id:
81 commit_fix_status_id:
82 format: int
82 format: int
83 default: 0
83 default: 0
84 commit_fix_done_ratio:
84 commit_fix_done_ratio:
85 default: 100
85 default: 100
86 # autologin duration in days
86 # autologin duration in days
87 # 0 means autologin is disabled
87 # 0 means autologin is disabled
88 autologin:
88 autologin:
89 format: int
89 format: int
90 default: 0
90 default: 0
91 # date format
91 # date format
92 date_format:
92 date_format:
93 default: ''
93 default: ''
94 time_format:
94 time_format:
95 default: ''
95 default: ''
96 user_format:
96 user_format:
97 default: :firstname_lastname
97 default: :firstname_lastname
98 format: symbol
98 format: symbol
99 cross_project_issue_relations:
99 cross_project_issue_relations:
100 default: 0
100 default: 0
101 notified_events:
101 notified_events:
102 serialized: true
102 serialized: true
103 default:
103 default:
104 - issue_added
104 - issue_added
105 - issue_updated
105 - issue_updated
106 mail_handler_api_enabled:
106 mail_handler_api_enabled:
107 default: 0
107 default: 0
108 mail_handler_api_key:
108 mail_handler_api_key:
109 default:
109 default:
110 issue_list_default_columns:
110 issue_list_default_columns:
111 serialized: true
111 serialized: true
112 default:
112 default:
113 - tracker
113 - tracker
114 - status
114 - status
115 - priority
115 - priority
116 - subject
116 - subject
117 - assigned_to
117 - assigned_to
118 - updated_on
118 - updated_on
119 display_subprojects_issues:
119 display_subprojects_issues:
120 default: 1
120 default: 1
121 default_projects_public:
121 default_projects_public:
122 default: 1
122 default: 1
123 sequential_project_identifiers:
123 sequential_project_identifiers:
124 default: 0
124 default: 0
125 # encodings used to convert repository files content to UTF-8
125 # encodings used to convert repository files content to UTF-8
126 # multiple values accepted, comma separated
126 # multiple values accepted, comma separated
127 repositories_encodings:
127 repositories_encodings:
128 default: ''
128 default: ''
129 # encoding used to convert commit logs to UTF-8
129 # encoding used to convert commit logs to UTF-8
130 commit_logs_encoding:
130 commit_logs_encoding:
131 default: 'UTF-8'
131 default: 'UTF-8'
132 ui_theme:
132 ui_theme:
133 default: ''
133 default: ''
134 emails_footer:
134 emails_footer:
135 default: |-
135 default: |-
136 You have received this notification because you have either subscribed to it, or are involved in it.
136 You have received this notification because you have either subscribed to it, or are involved in it.
137 To change your notification preferences, please click here: http://hostname/my/account
137 To change your notification preferences, please click here: http://hostname/my/account
138
138 gravatar_enabled:
139 default: 0
@@ -1,691 +1,692
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2
2
3 actionview_datehelper_select_day_prefix:
3 actionview_datehelper_select_day_prefix:
4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
6 actionview_datehelper_select_month_prefix:
6 actionview_datehelper_select_month_prefix:
7 actionview_datehelper_select_year_prefix:
7 actionview_datehelper_select_year_prefix:
8 actionview_datehelper_time_in_words_day: 1 day
8 actionview_datehelper_time_in_words_day: 1 day
9 actionview_datehelper_time_in_words_day_plural: %d days
9 actionview_datehelper_time_in_words_day_plural: %d days
10 actionview_datehelper_time_in_words_hour_about: about an hour
10 actionview_datehelper_time_in_words_hour_about: about an hour
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 actionview_datehelper_time_in_words_minute: 1 minute
13 actionview_datehelper_time_in_words_minute: 1 minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 actionview_datehelper_time_in_words_minute_single: 1 minute
17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 actionview_datehelper_time_in_words_second_less_than: less than a second
18 actionview_datehelper_time_in_words_second_less_than: less than a second
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
20 actionview_instancetag_blank_option: Please select
20 actionview_instancetag_blank_option: Please select
21
21
22 activerecord_error_inclusion: is not included in the list
22 activerecord_error_inclusion: is not included in the list
23 activerecord_error_exclusion: is reserved
23 activerecord_error_exclusion: is reserved
24 activerecord_error_invalid: is invalid
24 activerecord_error_invalid: is invalid
25 activerecord_error_confirmation: doesn't match confirmation
25 activerecord_error_confirmation: doesn't match confirmation
26 activerecord_error_accepted: must be accepted
26 activerecord_error_accepted: must be accepted
27 activerecord_error_empty: can't be empty
27 activerecord_error_empty: can't be empty
28 activerecord_error_blank: can't be blank
28 activerecord_error_blank: can't be blank
29 activerecord_error_too_long: is too long
29 activerecord_error_too_long: is too long
30 activerecord_error_too_short: is too short
30 activerecord_error_too_short: is too short
31 activerecord_error_wrong_length: is the wrong length
31 activerecord_error_wrong_length: is the wrong length
32 activerecord_error_taken: has already been taken
32 activerecord_error_taken: has already been taken
33 activerecord_error_not_a_number: is not a number
33 activerecord_error_not_a_number: is not a number
34 activerecord_error_not_a_date: is not a valid date
34 activerecord_error_not_a_date: is not a valid date
35 activerecord_error_greater_than_start_date: must be greater than start date
35 activerecord_error_greater_than_start_date: must be greater than start date
36 activerecord_error_not_same_project: doesn't belong to the same project
36 activerecord_error_not_same_project: doesn't belong to the same project
37 activerecord_error_circular_dependency: This relation would create a circular dependency
37 activerecord_error_circular_dependency: This relation would create a circular dependency
38
38
39 general_fmt_age: %d yr
39 general_fmt_age: %d yr
40 general_fmt_age_plural: %d yrs
40 general_fmt_age_plural: %d yrs
41 general_fmt_date: %%m/%%d/%%Y
41 general_fmt_date: %%m/%%d/%%Y
42 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
42 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
43 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
43 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
44 general_fmt_time: %%I:%%M %%p
44 general_fmt_time: %%I:%%M %%p
45 general_text_No: 'No'
45 general_text_No: 'No'
46 general_text_Yes: 'Yes'
46 general_text_Yes: 'Yes'
47 general_text_no: 'no'
47 general_text_no: 'no'
48 general_text_yes: 'yes'
48 general_text_yes: 'yes'
49 general_lang_name: 'English'
49 general_lang_name: 'English'
50 general_csv_separator: ','
50 general_csv_separator: ','
51 general_csv_decimal_separator: '.'
51 general_csv_decimal_separator: '.'
52 general_csv_encoding: ISO-8859-1
52 general_csv_encoding: ISO-8859-1
53 general_pdf_encoding: ISO-8859-1
53 general_pdf_encoding: ISO-8859-1
54 general_day_names: Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
54 general_day_names: Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
55 general_first_day_of_week: '7'
55 general_first_day_of_week: '7'
56
56
57 notice_account_updated: Account was successfully updated.
57 notice_account_updated: Account was successfully updated.
58 notice_account_invalid_creditentials: Invalid user or password
58 notice_account_invalid_creditentials: Invalid user or password
59 notice_account_password_updated: Password was successfully updated.
59 notice_account_password_updated: Password was successfully updated.
60 notice_account_wrong_password: Wrong password
60 notice_account_wrong_password: Wrong password
61 notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
61 notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
62 notice_account_unknown_email: Unknown user.
62 notice_account_unknown_email: Unknown user.
63 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
63 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
64 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
64 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
65 notice_account_activated: Your account has been activated. You can now log in.
65 notice_account_activated: Your account has been activated. You can now log in.
66 notice_successful_create: Successful creation.
66 notice_successful_create: Successful creation.
67 notice_successful_update: Successful update.
67 notice_successful_update: Successful update.
68 notice_successful_delete: Successful deletion.
68 notice_successful_delete: Successful deletion.
69 notice_successful_connection: Successful connection.
69 notice_successful_connection: Successful connection.
70 notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
70 notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
71 notice_locking_conflict: Data has been updated by another user.
71 notice_locking_conflict: Data has been updated by another user.
72 notice_not_authorized: You are not authorized to access this page.
72 notice_not_authorized: You are not authorized to access this page.
73 notice_email_sent: An email was sent to %s
73 notice_email_sent: An email was sent to %s
74 notice_email_error: An error occurred while sending mail (%s)
74 notice_email_error: An error occurred while sending mail (%s)
75 notice_feeds_access_key_reseted: Your RSS access key was reset.
75 notice_feeds_access_key_reseted: Your RSS access key was reset.
76 notice_failed_to_save_issues: "Failed to save %d issue(s) on %d selected: %s."
76 notice_failed_to_save_issues: "Failed to save %d issue(s) on %d selected: %s."
77 notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
77 notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
78 notice_account_pending: "Your account was created and is now pending administrator approval."
78 notice_account_pending: "Your account was created and is now pending administrator approval."
79 notice_default_data_loaded: Default configuration successfully loaded.
79 notice_default_data_loaded: Default configuration successfully loaded.
80 notice_unable_delete_version: Unable to delete version.
80 notice_unable_delete_version: Unable to delete version.
81
81
82 error_can_t_load_default_data: "Default configuration could not be loaded: %s"
82 error_can_t_load_default_data: "Default configuration could not be loaded: %s"
83 error_scm_not_found: "The entry or revision was not found in the repository."
83 error_scm_not_found: "The entry or revision was not found in the repository."
84 error_scm_command_failed: "An error occurred when trying to access the repository: %s"
84 error_scm_command_failed: "An error occurred when trying to access the repository: %s"
85 error_scm_annotate: "The entry does not exist or can not be annotated."
85 error_scm_annotate: "The entry does not exist or can not be annotated."
86 error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
86 error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
87
87
88 mail_subject_lost_password: Your %s password
88 mail_subject_lost_password: Your %s password
89 mail_body_lost_password: 'To change your password, click on the following link:'
89 mail_body_lost_password: 'To change your password, click on the following link:'
90 mail_subject_register: Your %s account activation
90 mail_subject_register: Your %s account activation
91 mail_body_register: 'To activate your account, click on the following link:'
91 mail_body_register: 'To activate your account, click on the following link:'
92 mail_body_account_information_external: You can use your "%s" account to log in.
92 mail_body_account_information_external: You can use your "%s" account to log in.
93 mail_body_account_information: Your account information
93 mail_body_account_information: Your account information
94 mail_subject_account_activation_request: %s account activation request
94 mail_subject_account_activation_request: %s account activation request
95 mail_body_account_activation_request: 'A new user (%s) has registered. The account is pending your approval:'
95 mail_body_account_activation_request: 'A new user (%s) has registered. The account is pending your approval:'
96 mail_subject_reminder: "%d issue(s) due in the next days"
96 mail_subject_reminder: "%d issue(s) due in the next days"
97 mail_body_reminder: "%d issue(s) that are assigned to you are due in the next %d days:"
97 mail_body_reminder: "%d issue(s) that are assigned to you are due in the next %d days:"
98
98
99 gui_validation_error: 1 error
99 gui_validation_error: 1 error
100 gui_validation_error_plural: %d errors
100 gui_validation_error_plural: %d errors
101
101
102 field_name: Name
102 field_name: Name
103 field_description: Description
103 field_description: Description
104 field_summary: Summary
104 field_summary: Summary
105 field_is_required: Required
105 field_is_required: Required
106 field_firstname: Firstname
106 field_firstname: Firstname
107 field_lastname: Lastname
107 field_lastname: Lastname
108 field_mail: Email
108 field_mail: Email
109 field_filename: File
109 field_filename: File
110 field_filesize: Size
110 field_filesize: Size
111 field_downloads: Downloads
111 field_downloads: Downloads
112 field_author: Author
112 field_author: Author
113 field_created_on: Created
113 field_created_on: Created
114 field_updated_on: Updated
114 field_updated_on: Updated
115 field_field_format: Format
115 field_field_format: Format
116 field_is_for_all: For all projects
116 field_is_for_all: For all projects
117 field_possible_values: Possible values
117 field_possible_values: Possible values
118 field_regexp: Regular expression
118 field_regexp: Regular expression
119 field_min_length: Minimum length
119 field_min_length: Minimum length
120 field_max_length: Maximum length
120 field_max_length: Maximum length
121 field_value: Value
121 field_value: Value
122 field_category: Category
122 field_category: Category
123 field_title: Title
123 field_title: Title
124 field_project: Project
124 field_project: Project
125 field_issue: Issue
125 field_issue: Issue
126 field_status: Status
126 field_status: Status
127 field_notes: Notes
127 field_notes: Notes
128 field_is_closed: Issue closed
128 field_is_closed: Issue closed
129 field_is_default: Default value
129 field_is_default: Default value
130 field_tracker: Tracker
130 field_tracker: Tracker
131 field_subject: Subject
131 field_subject: Subject
132 field_due_date: Due date
132 field_due_date: Due date
133 field_assigned_to: Assigned to
133 field_assigned_to: Assigned to
134 field_priority: Priority
134 field_priority: Priority
135 field_fixed_version: Target version
135 field_fixed_version: Target version
136 field_user: User
136 field_user: User
137 field_role: Role
137 field_role: Role
138 field_homepage: Homepage
138 field_homepage: Homepage
139 field_is_public: Public
139 field_is_public: Public
140 field_parent: Subproject of
140 field_parent: Subproject of
141 field_is_in_chlog: Issues displayed in changelog
141 field_is_in_chlog: Issues displayed in changelog
142 field_is_in_roadmap: Issues displayed in roadmap
142 field_is_in_roadmap: Issues displayed in roadmap
143 field_login: Login
143 field_login: Login
144 field_mail_notification: Email notifications
144 field_mail_notification: Email notifications
145 field_admin: Administrator
145 field_admin: Administrator
146 field_last_login_on: Last connection
146 field_last_login_on: Last connection
147 field_language: Language
147 field_language: Language
148 field_effective_date: Date
148 field_effective_date: Date
149 field_password: Password
149 field_password: Password
150 field_new_password: New password
150 field_new_password: New password
151 field_password_confirmation: Confirmation
151 field_password_confirmation: Confirmation
152 field_version: Version
152 field_version: Version
153 field_type: Type
153 field_type: Type
154 field_host: Host
154 field_host: Host
155 field_port: Port
155 field_port: Port
156 field_account: Account
156 field_account: Account
157 field_base_dn: Base DN
157 field_base_dn: Base DN
158 field_attr_login: Login attribute
158 field_attr_login: Login attribute
159 field_attr_firstname: Firstname attribute
159 field_attr_firstname: Firstname attribute
160 field_attr_lastname: Lastname attribute
160 field_attr_lastname: Lastname attribute
161 field_attr_mail: Email attribute
161 field_attr_mail: Email attribute
162 field_onthefly: On-the-fly user creation
162 field_onthefly: On-the-fly user creation
163 field_start_date: Start
163 field_start_date: Start
164 field_done_ratio: %% Done
164 field_done_ratio: %% Done
165 field_auth_source: Authentication mode
165 field_auth_source: Authentication mode
166 field_hide_mail: Hide my email address
166 field_hide_mail: Hide my email address
167 field_comments: Comment
167 field_comments: Comment
168 field_url: URL
168 field_url: URL
169 field_start_page: Start page
169 field_start_page: Start page
170 field_subproject: Subproject
170 field_subproject: Subproject
171 field_hours: Hours
171 field_hours: Hours
172 field_activity: Activity
172 field_activity: Activity
173 field_spent_on: Date
173 field_spent_on: Date
174 field_identifier: Identifier
174 field_identifier: Identifier
175 field_is_filter: Used as a filter
175 field_is_filter: Used as a filter
176 field_issue_to_id: Related issue
176 field_issue_to_id: Related issue
177 field_delay: Delay
177 field_delay: Delay
178 field_assignable: Issues can be assigned to this role
178 field_assignable: Issues can be assigned to this role
179 field_redirect_existing_links: Redirect existing links
179 field_redirect_existing_links: Redirect existing links
180 field_estimated_hours: Estimated time
180 field_estimated_hours: Estimated time
181 field_column_names: Columns
181 field_column_names: Columns
182 field_time_zone: Time zone
182 field_time_zone: Time zone
183 field_searchable: Searchable
183 field_searchable: Searchable
184 field_default_value: Default value
184 field_default_value: Default value
185 field_comments_sorting: Display comments
185 field_comments_sorting: Display comments
186 field_parent_title: Parent page
186 field_parent_title: Parent page
187
187
188 setting_app_title: Application title
188 setting_app_title: Application title
189 setting_app_subtitle: Application subtitle
189 setting_app_subtitle: Application subtitle
190 setting_welcome_text: Welcome text
190 setting_welcome_text: Welcome text
191 setting_default_language: Default language
191 setting_default_language: Default language
192 setting_login_required: Authentication required
192 setting_login_required: Authentication required
193 setting_self_registration: Self-registration
193 setting_self_registration: Self-registration
194 setting_attachment_max_size: Attachment max. size
194 setting_attachment_max_size: Attachment max. size
195 setting_issues_export_limit: Issues export limit
195 setting_issues_export_limit: Issues export limit
196 setting_mail_from: Emission email address
196 setting_mail_from: Emission email address
197 setting_bcc_recipients: Blind carbon copy recipients (bcc)
197 setting_bcc_recipients: Blind carbon copy recipients (bcc)
198 setting_plain_text_mail: plain text mail (no HTML)
198 setting_plain_text_mail: plain text mail (no HTML)
199 setting_host_name: Host name
199 setting_host_name: Host name
200 setting_text_formatting: Text formatting
200 setting_text_formatting: Text formatting
201 setting_wiki_compression: Wiki history compression
201 setting_wiki_compression: Wiki history compression
202 setting_feeds_limit: Feed content limit
202 setting_feeds_limit: Feed content limit
203 setting_default_projects_public: New projects are public by default
203 setting_default_projects_public: New projects are public by default
204 setting_autofetch_changesets: Autofetch commits
204 setting_autofetch_changesets: Autofetch commits
205 setting_sys_api_enabled: Enable WS for repository management
205 setting_sys_api_enabled: Enable WS for repository management
206 setting_commit_ref_keywords: Referencing keywords
206 setting_commit_ref_keywords: Referencing keywords
207 setting_commit_fix_keywords: Fixing keywords
207 setting_commit_fix_keywords: Fixing keywords
208 setting_autologin: Autologin
208 setting_autologin: Autologin
209 setting_date_format: Date format
209 setting_date_format: Date format
210 setting_time_format: Time format
210 setting_time_format: Time format
211 setting_cross_project_issue_relations: Allow cross-project issue relations
211 setting_cross_project_issue_relations: Allow cross-project issue relations
212 setting_issue_list_default_columns: Default columns displayed on the issue list
212 setting_issue_list_default_columns: Default columns displayed on the issue list
213 setting_repositories_encodings: Repositories encodings
213 setting_repositories_encodings: Repositories encodings
214 setting_commit_logs_encoding: Commit messages encoding
214 setting_commit_logs_encoding: Commit messages encoding
215 setting_emails_footer: Emails footer
215 setting_emails_footer: Emails footer
216 setting_protocol: Protocol
216 setting_protocol: Protocol
217 setting_per_page_options: Objects per page options
217 setting_per_page_options: Objects per page options
218 setting_user_format: Users display format
218 setting_user_format: Users display format
219 setting_activity_days_default: Days displayed on project activity
219 setting_activity_days_default: Days displayed on project activity
220 setting_display_subprojects_issues: Display subprojects issues on main projects by default
220 setting_display_subprojects_issues: Display subprojects issues on main projects by default
221 setting_enabled_scm: Enabled SCM
221 setting_enabled_scm: Enabled SCM
222 setting_mail_handler_api_enabled: Enable WS for incoming emails
222 setting_mail_handler_api_enabled: Enable WS for incoming emails
223 setting_mail_handler_api_key: API key
223 setting_mail_handler_api_key: API key
224 setting_sequential_project_identifiers: Generate sequential project identifiers
224 setting_sequential_project_identifiers: Generate sequential project identifiers
225 setting_gravatar_enabled: Use Gravatar user icons
225
226
226 permission_edit_project: Edit project
227 permission_edit_project: Edit project
227 permission_select_project_modules: Select project modules
228 permission_select_project_modules: Select project modules
228 permission_manage_members: Manage members
229 permission_manage_members: Manage members
229 permission_manage_versions: Manage versions
230 permission_manage_versions: Manage versions
230 permission_manage_categories: Manage issue categories
231 permission_manage_categories: Manage issue categories
231 permission_add_issues: Add issues
232 permission_add_issues: Add issues
232 permission_edit_issues: Edit issues
233 permission_edit_issues: Edit issues
233 permission_manage_issue_relations: Manage issue relations
234 permission_manage_issue_relations: Manage issue relations
234 permission_add_issue_notes: Add notes
235 permission_add_issue_notes: Add notes
235 permission_edit_issue_notes: Edit notes
236 permission_edit_issue_notes: Edit notes
236 permission_edit_own_issue_notes: Edit own notes
237 permission_edit_own_issue_notes: Edit own notes
237 permission_move_issues: Move issues
238 permission_move_issues: Move issues
238 permission_delete_issues: Delete issues
239 permission_delete_issues: Delete issues
239 permission_manage_public_queries: Manage public queries
240 permission_manage_public_queries: Manage public queries
240 permission_save_queries: Save queries
241 permission_save_queries: Save queries
241 permission_view_gantt: View gantt chart
242 permission_view_gantt: View gantt chart
242 permission_view_calendar: View calender
243 permission_view_calendar: View calender
243 permission_view_issue_watchers: View watchers list
244 permission_view_issue_watchers: View watchers list
244 permission_add_issue_watchers: Add watchers
245 permission_add_issue_watchers: Add watchers
245 permission_log_time: Log spent time
246 permission_log_time: Log spent time
246 permission_view_time_entries: View spent time
247 permission_view_time_entries: View spent time
247 permission_edit_time_entries: Edit time logs
248 permission_edit_time_entries: Edit time logs
248 permission_edit_own_time_entries: Edit own time logs
249 permission_edit_own_time_entries: Edit own time logs
249 permission_manage_news: Manage news
250 permission_manage_news: Manage news
250 permission_comment_news: Comment news
251 permission_comment_news: Comment news
251 permission_manage_documents: Manage documents
252 permission_manage_documents: Manage documents
252 permission_view_documents: View documents
253 permission_view_documents: View documents
253 permission_manage_files: Manage files
254 permission_manage_files: Manage files
254 permission_view_files: View files
255 permission_view_files: View files
255 permission_manage_wiki: Manage wiki
256 permission_manage_wiki: Manage wiki
256 permission_rename_wiki_pages: Rename wiki pages
257 permission_rename_wiki_pages: Rename wiki pages
257 permission_delete_wiki_pages: Delete wiki pages
258 permission_delete_wiki_pages: Delete wiki pages
258 permission_view_wiki_pages: View wiki
259 permission_view_wiki_pages: View wiki
259 permission_view_wiki_edits: View wiki history
260 permission_view_wiki_edits: View wiki history
260 permission_edit_wiki_pages: Edit wiki pages
261 permission_edit_wiki_pages: Edit wiki pages
261 permission_delete_wiki_pages_attachments: Delete attachments
262 permission_delete_wiki_pages_attachments: Delete attachments
262 permission_protect_wiki_pages: Protect wiki pages
263 permission_protect_wiki_pages: Protect wiki pages
263 permission_manage_repository: Manage repository
264 permission_manage_repository: Manage repository
264 permission_browse_repository: Browse repository
265 permission_browse_repository: Browse repository
265 permission_view_changesets: View changesets
266 permission_view_changesets: View changesets
266 permission_commit_access: Commit access
267 permission_commit_access: Commit access
267 permission_manage_boards: Manage boards
268 permission_manage_boards: Manage boards
268 permission_view_messages: View messages
269 permission_view_messages: View messages
269 permission_add_messages: Post messages
270 permission_add_messages: Post messages
270 permission_edit_messages: Edit messages
271 permission_edit_messages: Edit messages
271 permission_delete_messages: Delete messages
272 permission_delete_messages: Delete messages
272
273
273 project_module_issue_tracking: Issue tracking
274 project_module_issue_tracking: Issue tracking
274 project_module_time_tracking: Time tracking
275 project_module_time_tracking: Time tracking
275 project_module_news: News
276 project_module_news: News
276 project_module_documents: Documents
277 project_module_documents: Documents
277 project_module_files: Files
278 project_module_files: Files
278 project_module_wiki: Wiki
279 project_module_wiki: Wiki
279 project_module_repository: Repository
280 project_module_repository: Repository
280 project_module_boards: Boards
281 project_module_boards: Boards
281
282
282 label_user: User
283 label_user: User
283 label_user_plural: Users
284 label_user_plural: Users
284 label_user_new: New user
285 label_user_new: New user
285 label_project: Project
286 label_project: Project
286 label_project_new: New project
287 label_project_new: New project
287 label_project_plural: Projects
288 label_project_plural: Projects
288 label_project_all: All Projects
289 label_project_all: All Projects
289 label_project_latest: Latest projects
290 label_project_latest: Latest projects
290 label_issue: Issue
291 label_issue: Issue
291 label_issue_new: New issue
292 label_issue_new: New issue
292 label_issue_plural: Issues
293 label_issue_plural: Issues
293 label_issue_view_all: View all issues
294 label_issue_view_all: View all issues
294 label_issues_by: Issues by %s
295 label_issues_by: Issues by %s
295 label_issue_added: Issue added
296 label_issue_added: Issue added
296 label_issue_updated: Issue updated
297 label_issue_updated: Issue updated
297 label_document: Document
298 label_document: Document
298 label_document_new: New document
299 label_document_new: New document
299 label_document_plural: Documents
300 label_document_plural: Documents
300 label_document_added: Document added
301 label_document_added: Document added
301 label_role: Role
302 label_role: Role
302 label_role_plural: Roles
303 label_role_plural: Roles
303 label_role_new: New role
304 label_role_new: New role
304 label_role_and_permissions: Roles and permissions
305 label_role_and_permissions: Roles and permissions
305 label_member: Member
306 label_member: Member
306 label_member_new: New member
307 label_member_new: New member
307 label_member_plural: Members
308 label_member_plural: Members
308 label_tracker: Tracker
309 label_tracker: Tracker
309 label_tracker_plural: Trackers
310 label_tracker_plural: Trackers
310 label_tracker_new: New tracker
311 label_tracker_new: New tracker
311 label_workflow: Workflow
312 label_workflow: Workflow
312 label_issue_status: Issue status
313 label_issue_status: Issue status
313 label_issue_status_plural: Issue statuses
314 label_issue_status_plural: Issue statuses
314 label_issue_status_new: New status
315 label_issue_status_new: New status
315 label_issue_category: Issue category
316 label_issue_category: Issue category
316 label_issue_category_plural: Issue categories
317 label_issue_category_plural: Issue categories
317 label_issue_category_new: New category
318 label_issue_category_new: New category
318 label_custom_field: Custom field
319 label_custom_field: Custom field
319 label_custom_field_plural: Custom fields
320 label_custom_field_plural: Custom fields
320 label_custom_field_new: New custom field
321 label_custom_field_new: New custom field
321 label_enumerations: Enumerations
322 label_enumerations: Enumerations
322 label_enumeration_new: New value
323 label_enumeration_new: New value
323 label_information: Information
324 label_information: Information
324 label_information_plural: Information
325 label_information_plural: Information
325 label_please_login: Please log in
326 label_please_login: Please log in
326 label_register: Register
327 label_register: Register
327 label_password_lost: Lost password
328 label_password_lost: Lost password
328 label_home: Home
329 label_home: Home
329 label_my_page: My page
330 label_my_page: My page
330 label_my_account: My account
331 label_my_account: My account
331 label_my_projects: My projects
332 label_my_projects: My projects
332 label_administration: Administration
333 label_administration: Administration
333 label_login: Sign in
334 label_login: Sign in
334 label_logout: Sign out
335 label_logout: Sign out
335 label_help: Help
336 label_help: Help
336 label_reported_issues: Reported issues
337 label_reported_issues: Reported issues
337 label_assigned_to_me_issues: Issues assigned to me
338 label_assigned_to_me_issues: Issues assigned to me
338 label_last_login: Last connection
339 label_last_login: Last connection
339 label_last_updates: Last updated
340 label_last_updates: Last updated
340 label_last_updates_plural: %d last updated
341 label_last_updates_plural: %d last updated
341 label_registered_on: Registered on
342 label_registered_on: Registered on
342 label_activity: Activity
343 label_activity: Activity
343 label_overall_activity: Overall activity
344 label_overall_activity: Overall activity
344 label_new: New
345 label_new: New
345 label_logged_as: Logged in as
346 label_logged_as: Logged in as
346 label_environment: Environment
347 label_environment: Environment
347 label_authentication: Authentication
348 label_authentication: Authentication
348 label_auth_source: Authentication mode
349 label_auth_source: Authentication mode
349 label_auth_source_new: New authentication mode
350 label_auth_source_new: New authentication mode
350 label_auth_source_plural: Authentication modes
351 label_auth_source_plural: Authentication modes
351 label_subproject_plural: Subprojects
352 label_subproject_plural: Subprojects
352 label_and_its_subprojects: %s and its subprojects
353 label_and_its_subprojects: %s and its subprojects
353 label_min_max_length: Min - Max length
354 label_min_max_length: Min - Max length
354 label_list: List
355 label_list: List
355 label_date: Date
356 label_date: Date
356 label_integer: Integer
357 label_integer: Integer
357 label_float: Float
358 label_float: Float
358 label_boolean: Boolean
359 label_boolean: Boolean
359 label_string: Text
360 label_string: Text
360 label_text: Long text
361 label_text: Long text
361 label_attribute: Attribute
362 label_attribute: Attribute
362 label_attribute_plural: Attributes
363 label_attribute_plural: Attributes
363 label_download: %d Download
364 label_download: %d Download
364 label_download_plural: %d Downloads
365 label_download_plural: %d Downloads
365 label_no_data: No data to display
366 label_no_data: No data to display
366 label_change_status: Change status
367 label_change_status: Change status
367 label_history: History
368 label_history: History
368 label_attachment: File
369 label_attachment: File
369 label_attachment_new: New file
370 label_attachment_new: New file
370 label_attachment_delete: Delete file
371 label_attachment_delete: Delete file
371 label_attachment_plural: Files
372 label_attachment_plural: Files
372 label_file_added: File added
373 label_file_added: File added
373 label_report: Report
374 label_report: Report
374 label_report_plural: Reports
375 label_report_plural: Reports
375 label_news: News
376 label_news: News
376 label_news_new: Add news
377 label_news_new: Add news
377 label_news_plural: News
378 label_news_plural: News
378 label_news_latest: Latest news
379 label_news_latest: Latest news
379 label_news_view_all: View all news
380 label_news_view_all: View all news
380 label_news_added: News added
381 label_news_added: News added
381 label_change_log: Change log
382 label_change_log: Change log
382 label_settings: Settings
383 label_settings: Settings
383 label_overview: Overview
384 label_overview: Overview
384 label_version: Version
385 label_version: Version
385 label_version_new: New version
386 label_version_new: New version
386 label_version_plural: Versions
387 label_version_plural: Versions
387 label_confirmation: Confirmation
388 label_confirmation: Confirmation
388 label_export_to: 'Also available in:'
389 label_export_to: 'Also available in:'
389 label_read: Read...
390 label_read: Read...
390 label_public_projects: Public projects
391 label_public_projects: Public projects
391 label_open_issues: open
392 label_open_issues: open
392 label_open_issues_plural: open
393 label_open_issues_plural: open
393 label_closed_issues: closed
394 label_closed_issues: closed
394 label_closed_issues_plural: closed
395 label_closed_issues_plural: closed
395 label_total: Total
396 label_total: Total
396 label_permissions: Permissions
397 label_permissions: Permissions
397 label_current_status: Current status
398 label_current_status: Current status
398 label_new_statuses_allowed: New statuses allowed
399 label_new_statuses_allowed: New statuses allowed
399 label_all: all
400 label_all: all
400 label_none: none
401 label_none: none
401 label_nobody: nobody
402 label_nobody: nobody
402 label_next: Next
403 label_next: Next
403 label_previous: Previous
404 label_previous: Previous
404 label_used_by: Used by
405 label_used_by: Used by
405 label_details: Details
406 label_details: Details
406 label_add_note: Add a note
407 label_add_note: Add a note
407 label_per_page: Per page
408 label_per_page: Per page
408 label_calendar: Calendar
409 label_calendar: Calendar
409 label_months_from: months from
410 label_months_from: months from
410 label_gantt: Gantt
411 label_gantt: Gantt
411 label_internal: Internal
412 label_internal: Internal
412 label_last_changes: last %d changes
413 label_last_changes: last %d changes
413 label_change_view_all: View all changes
414 label_change_view_all: View all changes
414 label_personalize_page: Personalize this page
415 label_personalize_page: Personalize this page
415 label_comment: Comment
416 label_comment: Comment
416 label_comment_plural: Comments
417 label_comment_plural: Comments
417 label_comment_add: Add a comment
418 label_comment_add: Add a comment
418 label_comment_added: Comment added
419 label_comment_added: Comment added
419 label_comment_delete: Delete comments
420 label_comment_delete: Delete comments
420 label_query: Custom query
421 label_query: Custom query
421 label_query_plural: Custom queries
422 label_query_plural: Custom queries
422 label_query_new: New query
423 label_query_new: New query
423 label_filter_add: Add filter
424 label_filter_add: Add filter
424 label_filter_plural: Filters
425 label_filter_plural: Filters
425 label_equals: is
426 label_equals: is
426 label_not_equals: is not
427 label_not_equals: is not
427 label_in_less_than: in less than
428 label_in_less_than: in less than
428 label_in_more_than: in more than
429 label_in_more_than: in more than
429 label_in: in
430 label_in: in
430 label_today: today
431 label_today: today
431 label_all_time: all time
432 label_all_time: all time
432 label_yesterday: yesterday
433 label_yesterday: yesterday
433 label_this_week: this week
434 label_this_week: this week
434 label_last_week: last week
435 label_last_week: last week
435 label_last_n_days: last %d days
436 label_last_n_days: last %d days
436 label_this_month: this month
437 label_this_month: this month
437 label_last_month: last month
438 label_last_month: last month
438 label_this_year: this year
439 label_this_year: this year
439 label_date_range: Date range
440 label_date_range: Date range
440 label_less_than_ago: less than days ago
441 label_less_than_ago: less than days ago
441 label_more_than_ago: more than days ago
442 label_more_than_ago: more than days ago
442 label_ago: days ago
443 label_ago: days ago
443 label_contains: contains
444 label_contains: contains
444 label_not_contains: doesn't contain
445 label_not_contains: doesn't contain
445 label_day_plural: days
446 label_day_plural: days
446 label_repository: Repository
447 label_repository: Repository
447 label_repository_plural: Repositories
448 label_repository_plural: Repositories
448 label_browse: Browse
449 label_browse: Browse
449 label_modification: %d change
450 label_modification: %d change
450 label_modification_plural: %d changes
451 label_modification_plural: %d changes
451 label_revision: Revision
452 label_revision: Revision
452 label_revision_plural: Revisions
453 label_revision_plural: Revisions
453 label_associated_revisions: Associated revisions
454 label_associated_revisions: Associated revisions
454 label_added: added
455 label_added: added
455 label_modified: modified
456 label_modified: modified
456 label_copied: copied
457 label_copied: copied
457 label_renamed: renamed
458 label_renamed: renamed
458 label_deleted: deleted
459 label_deleted: deleted
459 label_latest_revision: Latest revision
460 label_latest_revision: Latest revision
460 label_latest_revision_plural: Latest revisions
461 label_latest_revision_plural: Latest revisions
461 label_view_revisions: View revisions
462 label_view_revisions: View revisions
462 label_max_size: Maximum size
463 label_max_size: Maximum size
463 label_on: 'on'
464 label_on: 'on'
464 label_sort_highest: Move to top
465 label_sort_highest: Move to top
465 label_sort_higher: Move up
466 label_sort_higher: Move up
466 label_sort_lower: Move down
467 label_sort_lower: Move down
467 label_sort_lowest: Move to bottom
468 label_sort_lowest: Move to bottom
468 label_roadmap: Roadmap
469 label_roadmap: Roadmap
469 label_roadmap_due_in: Due in %s
470 label_roadmap_due_in: Due in %s
470 label_roadmap_overdue: %s late
471 label_roadmap_overdue: %s late
471 label_roadmap_no_issues: No issues for this version
472 label_roadmap_no_issues: No issues for this version
472 label_search: Search
473 label_search: Search
473 label_result_plural: Results
474 label_result_plural: Results
474 label_all_words: All words
475 label_all_words: All words
475 label_wiki: Wiki
476 label_wiki: Wiki
476 label_wiki_edit: Wiki edit
477 label_wiki_edit: Wiki edit
477 label_wiki_edit_plural: Wiki edits
478 label_wiki_edit_plural: Wiki edits
478 label_wiki_page: Wiki page
479 label_wiki_page: Wiki page
479 label_wiki_page_plural: Wiki pages
480 label_wiki_page_plural: Wiki pages
480 label_index_by_title: Index by title
481 label_index_by_title: Index by title
481 label_index_by_date: Index by date
482 label_index_by_date: Index by date
482 label_current_version: Current version
483 label_current_version: Current version
483 label_preview: Preview
484 label_preview: Preview
484 label_feed_plural: Feeds
485 label_feed_plural: Feeds
485 label_changes_details: Details of all changes
486 label_changes_details: Details of all changes
486 label_issue_tracking: Issue tracking
487 label_issue_tracking: Issue tracking
487 label_spent_time: Spent time
488 label_spent_time: Spent time
488 label_f_hour: %.2f hour
489 label_f_hour: %.2f hour
489 label_f_hour_plural: %.2f hours
490 label_f_hour_plural: %.2f hours
490 label_time_tracking: Time tracking
491 label_time_tracking: Time tracking
491 label_change_plural: Changes
492 label_change_plural: Changes
492 label_statistics: Statistics
493 label_statistics: Statistics
493 label_commits_per_month: Commits per month
494 label_commits_per_month: Commits per month
494 label_commits_per_author: Commits per author
495 label_commits_per_author: Commits per author
495 label_view_diff: View differences
496 label_view_diff: View differences
496 label_diff_inline: inline
497 label_diff_inline: inline
497 label_diff_side_by_side: side by side
498 label_diff_side_by_side: side by side
498 label_options: Options
499 label_options: Options
499 label_copy_workflow_from: Copy workflow from
500 label_copy_workflow_from: Copy workflow from
500 label_permissions_report: Permissions report
501 label_permissions_report: Permissions report
501 label_watched_issues: Watched issues
502 label_watched_issues: Watched issues
502 label_related_issues: Related issues
503 label_related_issues: Related issues
503 label_applied_status: Applied status
504 label_applied_status: Applied status
504 label_loading: Loading...
505 label_loading: Loading...
505 label_relation_new: New relation
506 label_relation_new: New relation
506 label_relation_delete: Delete relation
507 label_relation_delete: Delete relation
507 label_relates_to: related to
508 label_relates_to: related to
508 label_duplicates: duplicates
509 label_duplicates: duplicates
509 label_duplicated_by: duplicated by
510 label_duplicated_by: duplicated by
510 label_blocks: blocks
511 label_blocks: blocks
511 label_blocked_by: blocked by
512 label_blocked_by: blocked by
512 label_precedes: precedes
513 label_precedes: precedes
513 label_follows: follows
514 label_follows: follows
514 label_end_to_start: end to start
515 label_end_to_start: end to start
515 label_end_to_end: end to end
516 label_end_to_end: end to end
516 label_start_to_start: start to start
517 label_start_to_start: start to start
517 label_start_to_end: start to end
518 label_start_to_end: start to end
518 label_stay_logged_in: Stay logged in
519 label_stay_logged_in: Stay logged in
519 label_disabled: disabled
520 label_disabled: disabled
520 label_show_completed_versions: Show completed versions
521 label_show_completed_versions: Show completed versions
521 label_me: me
522 label_me: me
522 label_board: Forum
523 label_board: Forum
523 label_board_new: New forum
524 label_board_new: New forum
524 label_board_plural: Forums
525 label_board_plural: Forums
525 label_topic_plural: Topics
526 label_topic_plural: Topics
526 label_message_plural: Messages
527 label_message_plural: Messages
527 label_message_last: Last message
528 label_message_last: Last message
528 label_message_new: New message
529 label_message_new: New message
529 label_message_posted: Message added
530 label_message_posted: Message added
530 label_reply_plural: Replies
531 label_reply_plural: Replies
531 label_send_information: Send account information to the user
532 label_send_information: Send account information to the user
532 label_year: Year
533 label_year: Year
533 label_month: Month
534 label_month: Month
534 label_week: Week
535 label_week: Week
535 label_date_from: From
536 label_date_from: From
536 label_date_to: To
537 label_date_to: To
537 label_language_based: Based on user's language
538 label_language_based: Based on user's language
538 label_sort_by: Sort by %s
539 label_sort_by: Sort by %s
539 label_send_test_email: Send a test email
540 label_send_test_email: Send a test email
540 label_feeds_access_key_created_on: RSS access key created %s ago
541 label_feeds_access_key_created_on: RSS access key created %s ago
541 label_module_plural: Modules
542 label_module_plural: Modules
542 label_added_time_by: Added by %s %s ago
543 label_added_time_by: Added by %s %s ago
543 label_updated_time: Updated %s ago
544 label_updated_time: Updated %s ago
544 label_jump_to_a_project: Jump to a project...
545 label_jump_to_a_project: Jump to a project...
545 label_file_plural: Files
546 label_file_plural: Files
546 label_changeset_plural: Changesets
547 label_changeset_plural: Changesets
547 label_default_columns: Default columns
548 label_default_columns: Default columns
548 label_no_change_option: (No change)
549 label_no_change_option: (No change)
549 label_bulk_edit_selected_issues: Bulk edit selected issues
550 label_bulk_edit_selected_issues: Bulk edit selected issues
550 label_theme: Theme
551 label_theme: Theme
551 label_default: Default
552 label_default: Default
552 label_search_titles_only: Search titles only
553 label_search_titles_only: Search titles only
553 label_user_mail_option_all: "For any event on all my projects"
554 label_user_mail_option_all: "For any event on all my projects"
554 label_user_mail_option_selected: "For any event on the selected projects only..."
555 label_user_mail_option_selected: "For any event on the selected projects only..."
555 label_user_mail_option_none: "Only for things I watch or I'm involved in"
556 label_user_mail_option_none: "Only for things I watch or I'm involved in"
556 label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
557 label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
557 label_registration_activation_by_email: account activation by email
558 label_registration_activation_by_email: account activation by email
558 label_registration_manual_activation: manual account activation
559 label_registration_manual_activation: manual account activation
559 label_registration_automatic_activation: automatic account activation
560 label_registration_automatic_activation: automatic account activation
560 label_display_per_page: 'Per page: %s'
561 label_display_per_page: 'Per page: %s'
561 label_age: Age
562 label_age: Age
562 label_change_properties: Change properties
563 label_change_properties: Change properties
563 label_general: General
564 label_general: General
564 label_more: More
565 label_more: More
565 label_scm: SCM
566 label_scm: SCM
566 label_plugins: Plugins
567 label_plugins: Plugins
567 label_ldap_authentication: LDAP authentication
568 label_ldap_authentication: LDAP authentication
568 label_downloads_abbr: D/L
569 label_downloads_abbr: D/L
569 label_optional_description: Optional description
570 label_optional_description: Optional description
570 label_add_another_file: Add another file
571 label_add_another_file: Add another file
571 label_preferences: Preferences
572 label_preferences: Preferences
572 label_chronological_order: In chronological order
573 label_chronological_order: In chronological order
573 label_reverse_chronological_order: In reverse chronological order
574 label_reverse_chronological_order: In reverse chronological order
574 label_planning: Planning
575 label_planning: Planning
575 label_incoming_emails: Incoming emails
576 label_incoming_emails: Incoming emails
576 label_generate_key: Generate a key
577 label_generate_key: Generate a key
577 label_issue_watchers: Watchers
578 label_issue_watchers: Watchers
578
579
579 button_login: Login
580 button_login: Login
580 button_submit: Submit
581 button_submit: Submit
581 button_save: Save
582 button_save: Save
582 button_check_all: Check all
583 button_check_all: Check all
583 button_uncheck_all: Uncheck all
584 button_uncheck_all: Uncheck all
584 button_delete: Delete
585 button_delete: Delete
585 button_create: Create
586 button_create: Create
586 button_test: Test
587 button_test: Test
587 button_edit: Edit
588 button_edit: Edit
588 button_add: Add
589 button_add: Add
589 button_change: Change
590 button_change: Change
590 button_apply: Apply
591 button_apply: Apply
591 button_clear: Clear
592 button_clear: Clear
592 button_lock: Lock
593 button_lock: Lock
593 button_unlock: Unlock
594 button_unlock: Unlock
594 button_download: Download
595 button_download: Download
595 button_list: List
596 button_list: List
596 button_view: View
597 button_view: View
597 button_move: Move
598 button_move: Move
598 button_back: Back
599 button_back: Back
599 button_cancel: Cancel
600 button_cancel: Cancel
600 button_activate: Activate
601 button_activate: Activate
601 button_sort: Sort
602 button_sort: Sort
602 button_log_time: Log time
603 button_log_time: Log time
603 button_rollback: Rollback to this version
604 button_rollback: Rollback to this version
604 button_watch: Watch
605 button_watch: Watch
605 button_unwatch: Unwatch
606 button_unwatch: Unwatch
606 button_reply: Reply
607 button_reply: Reply
607 button_archive: Archive
608 button_archive: Archive
608 button_unarchive: Unarchive
609 button_unarchive: Unarchive
609 button_reset: Reset
610 button_reset: Reset
610 button_rename: Rename
611 button_rename: Rename
611 button_change_password: Change password
612 button_change_password: Change password
612 button_copy: Copy
613 button_copy: Copy
613 button_annotate: Annotate
614 button_annotate: Annotate
614 button_update: Update
615 button_update: Update
615 button_configure: Configure
616 button_configure: Configure
616 button_quote: Quote
617 button_quote: Quote
617
618
618 status_active: active
619 status_active: active
619 status_registered: registered
620 status_registered: registered
620 status_locked: locked
621 status_locked: locked
621
622
622 text_select_mail_notifications: Select actions for which email notifications should be sent.
623 text_select_mail_notifications: Select actions for which email notifications should be sent.
623 text_regexp_info: eg. ^[A-Z0-9]+$
624 text_regexp_info: eg. ^[A-Z0-9]+$
624 text_min_max_length_info: 0 means no restriction
625 text_min_max_length_info: 0 means no restriction
625 text_project_destroy_confirmation: Are you sure you want to delete this project and related data ?
626 text_project_destroy_confirmation: Are you sure you want to delete this project and related data ?
626 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
627 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
627 text_workflow_edit: Select a role and a tracker to edit the workflow
628 text_workflow_edit: Select a role and a tracker to edit the workflow
628 text_are_you_sure: Are you sure ?
629 text_are_you_sure: Are you sure ?
629 text_journal_changed: changed from %s to %s
630 text_journal_changed: changed from %s to %s
630 text_journal_set_to: set to %s
631 text_journal_set_to: set to %s
631 text_journal_deleted: deleted
632 text_journal_deleted: deleted
632 text_tip_task_begin_day: task beginning this day
633 text_tip_task_begin_day: task beginning this day
633 text_tip_task_end_day: task ending this day
634 text_tip_task_end_day: task ending this day
634 text_tip_task_begin_end_day: task beginning and ending this day
635 text_tip_task_begin_end_day: task beginning and ending this day
635 text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
636 text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
636 text_caracters_maximum: %d characters maximum.
637 text_caracters_maximum: %d characters maximum.
637 text_caracters_minimum: Must be at least %d characters long.
638 text_caracters_minimum: Must be at least %d characters long.
638 text_length_between: Length between %d and %d characters.
639 text_length_between: Length between %d and %d characters.
639 text_tracker_no_workflow: No workflow defined for this tracker
640 text_tracker_no_workflow: No workflow defined for this tracker
640 text_unallowed_characters: Unallowed characters
641 text_unallowed_characters: Unallowed characters
641 text_comma_separated: Multiple values allowed (comma separated).
642 text_comma_separated: Multiple values allowed (comma separated).
642 text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
643 text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
643 text_issue_added: Issue %s has been reported by %s.
644 text_issue_added: Issue %s has been reported by %s.
644 text_issue_updated: Issue %s has been updated by %s.
645 text_issue_updated: Issue %s has been updated by %s.
645 text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ?
646 text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ?
646 text_issue_category_destroy_question: Some issues (%d) are assigned to this category. What do you want to do ?
647 text_issue_category_destroy_question: Some issues (%d) are assigned to this category. What do you want to do ?
647 text_issue_category_destroy_assignments: Remove category assignments
648 text_issue_category_destroy_assignments: Remove category assignments
648 text_issue_category_reassign_to: Reassign issues to this category
649 text_issue_category_reassign_to: Reassign issues to this category
649 text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
650 text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
650 text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
651 text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
651 text_load_default_configuration: Load the default configuration
652 text_load_default_configuration: Load the default configuration
652 text_status_changed_by_changeset: Applied in changeset %s.
653 text_status_changed_by_changeset: Applied in changeset %s.
653 text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?'
654 text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?'
654 text_select_project_modules: 'Select modules to enable for this project:'
655 text_select_project_modules: 'Select modules to enable for this project:'
655 text_default_administrator_account_changed: Default administrator account changed
656 text_default_administrator_account_changed: Default administrator account changed
656 text_file_repository_writable: File repository writable
657 text_file_repository_writable: File repository writable
657 text_rmagick_available: RMagick available (optional)
658 text_rmagick_available: RMagick available (optional)
658 text_destroy_time_entries_question: %.02f hours were reported on the issues you are about to delete. What do you want to do ?
659 text_destroy_time_entries_question: %.02f hours were reported on the issues you are about to delete. What do you want to do ?
659 text_destroy_time_entries: Delete reported hours
660 text_destroy_time_entries: Delete reported hours
660 text_assign_time_entries_to_project: Assign reported hours to the project
661 text_assign_time_entries_to_project: Assign reported hours to the project
661 text_reassign_time_entries: 'Reassign reported hours to this issue:'
662 text_reassign_time_entries: 'Reassign reported hours to this issue:'
662 text_user_wrote: '%s wrote:'
663 text_user_wrote: '%s wrote:'
663 text_enumeration_destroy_question: '%d objects are assigned to this value.'
664 text_enumeration_destroy_question: '%d objects are assigned to this value.'
664 text_enumeration_category_reassign_to: 'Reassign them to this value:'
665 text_enumeration_category_reassign_to: 'Reassign them to this value:'
665 text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
666 text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
666
667
667 default_role_manager: Manager
668 default_role_manager: Manager
668 default_role_developper: Developer
669 default_role_developper: Developer
669 default_role_reporter: Reporter
670 default_role_reporter: Reporter
670 default_tracker_bug: Bug
671 default_tracker_bug: Bug
671 default_tracker_feature: Feature
672 default_tracker_feature: Feature
672 default_tracker_support: Support
673 default_tracker_support: Support
673 default_issue_status_new: New
674 default_issue_status_new: New
674 default_issue_status_assigned: Assigned
675 default_issue_status_assigned: Assigned
675 default_issue_status_resolved: Resolved
676 default_issue_status_resolved: Resolved
676 default_issue_status_feedback: Feedback
677 default_issue_status_feedback: Feedback
677 default_issue_status_closed: Closed
678 default_issue_status_closed: Closed
678 default_issue_status_rejected: Rejected
679 default_issue_status_rejected: Rejected
679 default_doc_category_user: User documentation
680 default_doc_category_user: User documentation
680 default_doc_category_tech: Technical documentation
681 default_doc_category_tech: Technical documentation
681 default_priority_low: Low
682 default_priority_low: Low
682 default_priority_normal: Normal
683 default_priority_normal: Normal
683 default_priority_high: High
684 default_priority_high: High
684 default_priority_urgent: Urgent
685 default_priority_urgent: Urgent
685 default_priority_immediate: Immediate
686 default_priority_immediate: Immediate
686 default_activity_design: Design
687 default_activity_design: Design
687 default_activity_development: Development
688 default_activity_development: Development
688
689
689 enumeration_issue_priorities: Issue priorities
690 enumeration_issue_priorities: Issue priorities
690 enumeration_doc_categories: Document categories
691 enumeration_doc_categories: Document categories
691 enumeration_activities: Activities (time tracking)
692 enumeration_activities: Activities (time tracking)
General Comments 0
You need to be logged in to leave comments. Login now