##// END OF EJS Templates
Merged r10294 from trunk....
Jean-Philippe Lang -
r10114:8cc56cce6683
parent child
Show More
@@ -1,1130 +1,1132
1 1 # encoding: utf-8
2 2 #
3 3 # Redmine - project management software
4 4 # Copyright (C) 2006-2011 Jean-Philippe Lang
5 5 #
6 6 # This program is free software; you can redistribute it and/or
7 7 # modify it under the terms of the GNU General Public License
8 8 # as published by the Free Software Foundation; either version 2
9 9 # of the License, or (at your option) any later version.
10 10 #
11 11 # This program is distributed in the hope that it will be useful,
12 12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 14 # GNU General Public License for more details.
15 15 #
16 16 # You should have received a copy of the GNU General Public License
17 17 # along with this program; if not, write to the Free Software
18 18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 19
20 20 require 'forwardable'
21 21 require 'cgi'
22 22
23 23 module ApplicationHelper
24 24 include Redmine::WikiFormatting::Macros::Definitions
25 25 include Redmine::I18n
26 26 include GravatarHelper::PublicMethods
27 27
28 28 extend Forwardable
29 29 def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter
30 30
31 31 # Return true if user is authorized for controller/action, otherwise false
32 32 def authorize_for(controller, action)
33 33 User.current.allowed_to?({:controller => controller, :action => action}, @project)
34 34 end
35 35
36 36 # Display a link if user is authorized
37 37 #
38 38 # @param [String] name Anchor text (passed to link_to)
39 39 # @param [Hash] options Hash params. This will checked by authorize_for to see if the user is authorized
40 40 # @param [optional, Hash] html_options Options passed to link_to
41 41 # @param [optional, Hash] parameters_for_method_reference Extra parameters for link_to
42 42 def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference)
43 43 link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action])
44 44 end
45 45
46 46 # Display a link to remote if user is authorized
47 47 def link_to_remote_if_authorized(name, options = {}, html_options = nil)
48 48 url = options[:url] || {}
49 49 link_to_remote(name, options, html_options) if authorize_for(url[:controller] || params[:controller], url[:action])
50 50 end
51 51
52 52 # Displays a link to user's account page if active
53 53 def link_to_user(user, options={})
54 54 if user.is_a?(User)
55 55 name = h(user.name(options[:format]))
56 56 if user.active?
57 57 link_to name, :controller => 'users', :action => 'show', :id => user
58 58 else
59 59 name
60 60 end
61 61 else
62 62 h(user.to_s)
63 63 end
64 64 end
65 65
66 66 # Displays a link to +issue+ with its subject.
67 67 # Examples:
68 68 #
69 69 # link_to_issue(issue) # => Defect #6: This is the subject
70 70 # link_to_issue(issue, :truncate => 6) # => Defect #6: This i...
71 71 # link_to_issue(issue, :subject => false) # => Defect #6
72 72 # link_to_issue(issue, :project => true) # => Foo - Defect #6
73 73 #
74 74 def link_to_issue(issue, options={})
75 75 title = nil
76 76 subject = nil
77 77 if options[:subject] == false
78 78 title = truncate(issue.subject, :length => 60)
79 79 else
80 80 subject = issue.subject
81 81 if options[:truncate]
82 82 subject = truncate(subject, :length => options[:truncate])
83 83 end
84 84 end
85 85 s = link_to "#{h(issue.tracker)} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue},
86 86 :class => issue.css_classes,
87 87 :title => title
88 88 s << h(": #{subject}") if subject
89 89 s = h("#{issue.project} - ") + s if options[:project]
90 90 s
91 91 end
92 92
93 93 # Generates a link to an attachment.
94 94 # Options:
95 95 # * :text - Link text (default to attachment filename)
96 96 # * :download - Force download (default: false)
97 97 def link_to_attachment(attachment, options={})
98 98 text = options.delete(:text) || attachment.filename
99 99 action = options.delete(:download) ? 'download' : 'show'
100 100 opt_only_path = {}
101 101 opt_only_path[:only_path] = (options[:only_path] == false ? false : true)
102 102 options.delete(:only_path)
103 103 link_to(h(text),
104 104 {:controller => 'attachments', :action => action,
105 105 :id => attachment, :filename => attachment.filename}.merge(opt_only_path),
106 106 options)
107 107 end
108 108
109 109 # Generates a link to a SCM revision
110 110 # Options:
111 111 # * :text - Link text (default to the formatted revision)
112 112 def link_to_revision(revision, repository, options={})
113 113 if repository.is_a?(Project)
114 114 repository = repository.repository
115 115 end
116 116 text = options.delete(:text) || format_revision(revision)
117 117 rev = revision.respond_to?(:identifier) ? revision.identifier : revision
118 118 link_to(
119 119 h(text),
120 120 {:controller => 'repositories', :action => 'revision', :id => repository.project, :repository_id => repository.identifier_param, :rev => rev},
121 121 :title => l(:label_revision_id, format_revision(revision))
122 122 )
123 123 end
124 124
125 125 # Generates a link to a message
126 126 def link_to_message(message, options={}, html_options = nil)
127 127 link_to(
128 128 h(truncate(message.subject, :length => 60)),
129 129 { :controller => 'messages', :action => 'show',
130 130 :board_id => message.board_id,
131 131 :id => message.root,
132 132 :r => (message.parent_id && message.id),
133 133 :anchor => (message.parent_id ? "message-#{message.id}" : nil)
134 134 }.merge(options),
135 135 html_options
136 136 )
137 137 end
138 138
139 139 # Generates a link to a project if active
140 140 # Examples:
141 141 #
142 142 # link_to_project(project) # => link to the specified project overview
143 143 # link_to_project(project, :action=>'settings') # => link to project settings
144 144 # link_to_project(project, {:only_path => false}, :class => "project") # => 3rd arg adds html options
145 145 # link_to_project(project, {}, :class => "project") # => html options with default url (project overview)
146 146 #
147 147 def link_to_project(project, options={}, html_options = nil)
148 148 if project.active?
149 149 url = {:controller => 'projects', :action => 'show', :id => project}.merge(options)
150 150 link_to(h(project), url, html_options)
151 151 else
152 152 h(project)
153 153 end
154 154 end
155 155
156 156 def toggle_link(name, id, options={})
157 157 onclick = "Element.toggle('#{id}'); "
158 158 onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ")
159 159 onclick << "return false;"
160 160 link_to(name, "#", :onclick => onclick)
161 161 end
162 162
163 163 def image_to_function(name, function, html_options = {})
164 164 html_options.symbolize_keys!
165 165 tag(:input, html_options.merge({
166 166 :type => "image", :src => image_path(name),
167 167 :onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function};"
168 168 }))
169 169 end
170 170
171 171 def prompt_to_remote(name, text, param, url, html_options = {})
172 172 html_options[:onclick] = "promptToRemote('#{text}', '#{param}', '#{url_for(url)}'); return false;"
173 173 link_to name, {}, html_options
174 174 end
175 175
176 176 def format_activity_title(text)
177 177 h(truncate_single_line(text, :length => 100))
178 178 end
179 179
180 180 def format_activity_day(date)
181 181 date == Date.today ? l(:label_today).titleize : format_date(date)
182 182 end
183 183
184 184 def format_activity_description(text)
185 185 h(truncate(text.to_s, :length => 120).gsub(%r{[\r\n]*<(pre|code)>.*$}m, '...')
186 186 ).gsub(/[\r\n]+/, "<br />").html_safe
187 187 end
188 188
189 189 def format_version_name(version)
190 190 if version.project == @project
191 191 h(version)
192 192 else
193 193 h("#{version.project} - #{version}")
194 194 end
195 195 end
196 196
197 197 def due_date_distance_in_words(date)
198 198 if date
199 199 l((date < Date.today ? :label_roadmap_overdue : :label_roadmap_due_in), distance_of_date_in_words(Date.today, date))
200 200 end
201 201 end
202 202
203 203 def render_page_hierarchy(pages, node=nil, options={})
204 204 content = ''
205 205 if pages[node]
206 206 content << "<ul class=\"pages-hierarchy\">\n"
207 207 pages[node].each do |page|
208 208 content << "<li>"
209 209 content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'show', :project_id => page.project, :id => page.title},
210 210 :title => (options[:timestamp] && page.updated_on ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil))
211 211 content << "\n" + render_page_hierarchy(pages, page.id, options) if pages[page.id]
212 212 content << "</li>\n"
213 213 end
214 214 content << "</ul>\n"
215 215 end
216 216 content.html_safe
217 217 end
218 218
219 219 # Renders flash messages
220 220 def render_flash_messages
221 221 s = ''
222 222 flash.each do |k,v|
223 223 s << (content_tag('div', v.html_safe, :class => "flash #{k}"))
224 224 end
225 225 s.html_safe
226 226 end
227 227
228 228 # Renders tabs and their content
229 229 def render_tabs(tabs)
230 230 if tabs.any?
231 231 render :partial => 'common/tabs', :locals => {:tabs => tabs}
232 232 else
233 233 content_tag 'p', l(:label_no_data), :class => "nodata"
234 234 end
235 235 end
236 236
237 237 # Renders the project quick-jump box
238 238 def render_project_jump_box
239 239 return unless User.current.logged?
240 240 projects = User.current.memberships.collect(&:project).compact.uniq
241 241 if projects.any?
242 242 s = '<select onchange="if (this.value != \'\') { window.location = this.value; }">' +
243 243 "<option value=''>#{ l(:label_jump_to_a_project) }</option>" +
244 244 '<option value="" disabled="disabled">---</option>'
245 245 s << project_tree_options_for_select(projects, :selected => @project) do |p|
246 246 { :value => url_for(:controller => 'projects', :action => 'show', :id => p, :jump => current_menu_item) }
247 247 end
248 248 s << '</select>'
249 249 s.html_safe
250 250 end
251 251 end
252 252
253 253 def project_tree_options_for_select(projects, options = {})
254 254 s = ''
255 255 project_tree(projects) do |project, level|
256 256 name_prefix = (level > 0 ? ('&nbsp;' * 2 * level + '&#187; ').html_safe : '')
257 257 tag_options = {:value => project.id}
258 258 if project == options[:selected] || (options[:selected].respond_to?(:include?) && options[:selected].include?(project))
259 259 tag_options[:selected] = 'selected'
260 260 else
261 261 tag_options[:selected] = nil
262 262 end
263 263 tag_options.merge!(yield(project)) if block_given?
264 264 s << content_tag('option', name_prefix + h(project), tag_options)
265 265 end
266 266 s.html_safe
267 267 end
268 268
269 269 # Yields the given block for each project with its level in the tree
270 270 #
271 271 # Wrapper for Project#project_tree
272 272 def project_tree(projects, &block)
273 273 Project.project_tree(projects, &block)
274 274 end
275 275
276 276 def project_nested_ul(projects, &block)
277 277 s = ''
278 278 if projects.any?
279 279 ancestors = []
280 280 projects.sort_by(&:lft).each do |project|
281 281 if (ancestors.empty? || project.is_descendant_of?(ancestors.last))
282 282 s << "<ul>\n"
283 283 else
284 284 ancestors.pop
285 285 s << "</li>"
286 286 while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
287 287 ancestors.pop
288 288 s << "</ul></li>\n"
289 289 end
290 290 end
291 291 s << "<li>"
292 292 s << yield(project).to_s
293 293 ancestors << project
294 294 end
295 295 s << ("</li></ul>\n" * ancestors.size)
296 296 end
297 297 s.html_safe
298 298 end
299 299
300 300 def principals_check_box_tags(name, principals)
301 301 s = ''
302 302 principals.sort.each do |principal|
303 303 s << "<label>#{ check_box_tag name, principal.id, false } #{h principal}</label>\n"
304 304 end
305 305 s.html_safe
306 306 end
307 307
308 308 # Returns a string for users/groups option tags
309 309 def principals_options_for_select(collection, selected=nil)
310 310 s = ''
311 311 if collection.include?(User.current)
312 312 s << content_tag('option', "<< #{l(:label_me)} >>".html_safe, :value => User.current.id)
313 313 end
314 314 groups = ''
315 315 collection.sort.each do |element|
316 316 selected_attribute = ' selected="selected"' if option_value_selected?(element, selected)
317 317 (element.is_a?(Group) ? groups : s) << %(<option value="#{element.id}"#{selected_attribute}>#{h element.name}</option>)
318 318 end
319 319 unless groups.empty?
320 320 s << %(<optgroup label="#{h(l(:label_group_plural))}">#{groups}</optgroup>)
321 321 end
322 322 s
323 323 end
324 324
325 325 # Truncates and returns the string as a single line
326 326 def truncate_single_line(string, *args)
327 327 truncate(string.to_s, *args).gsub(%r{[\r\n]+}m, ' ')
328 328 end
329 329
330 330 # Truncates at line break after 250 characters or options[:length]
331 331 def truncate_lines(string, options={})
332 332 length = options[:length] || 250
333 333 if string.to_s =~ /\A(.{#{length}}.*?)$/m
334 334 "#{$1}..."
335 335 else
336 336 string
337 337 end
338 338 end
339 339
340 340 def anchor(text)
341 341 text.to_s.gsub(' ', '_')
342 342 end
343 343
344 344 def html_hours(text)
345 345 text.gsub(%r{(\d+)\.(\d+)}, '<span class="hours hours-int">\1</span><span class="hours hours-dec">.\2</span>').html_safe
346 346 end
347 347
348 348 def authoring(created, author, options={})
349 349 l(options[:label] || :label_added_time_by, :author => link_to_user(author), :age => time_tag(created)).html_safe
350 350 end
351 351
352 352 def time_tag(time)
353 353 text = distance_of_time_in_words(Time.now, time)
354 354 if @project
355 355 link_to(text, {:controller => 'activities', :action => 'index', :id => @project, :from => time.to_date}, :title => format_time(time))
356 356 else
357 357 content_tag('acronym', text, :title => format_time(time))
358 358 end
359 359 end
360 360
361 361 def syntax_highlight_lines(name, content)
362 362 lines = []
363 363 syntax_highlight(name, content).each_line { |line| lines << line }
364 364 lines
365 365 end
366 366
367 367 def syntax_highlight(name, content)
368 368 Redmine::SyntaxHighlighting.highlight_by_filename(content, name)
369 369 end
370 370
371 371 def to_path_param(path)
372 372 path.to_s.split(%r{[/\\]}).select {|p| !p.blank?}
373 373 end
374 374
375 375 def pagination_links_full(paginator, count=nil, options={})
376 376 page_param = options.delete(:page_param) || :page
377 377 per_page_links = options.delete(:per_page_links)
378 378 url_param = params.dup
379 379
380 380 html = ''
381 381 if paginator.current.previous
382 382 # \xc2\xab(utf-8) = &#171;
383 383 html << link_to_content_update(
384 384 "\xc2\xab " + l(:label_previous),
385 385 url_param.merge(page_param => paginator.current.previous)) + ' '
386 386 end
387 387
388 388 html << (pagination_links_each(paginator, options) do |n|
389 389 link_to_content_update(n.to_s, url_param.merge(page_param => n))
390 390 end || '')
391 391
392 392 if paginator.current.next
393 393 # \xc2\xbb(utf-8) = &#187;
394 394 html << ' ' + link_to_content_update(
395 395 (l(:label_next) + " \xc2\xbb"),
396 396 url_param.merge(page_param => paginator.current.next))
397 397 end
398 398
399 399 unless count.nil?
400 400 html << " (#{paginator.current.first_item}-#{paginator.current.last_item}/#{count})"
401 401 if per_page_links != false && links = per_page_links(paginator.items_per_page)
402 402 html << " | #{links}"
403 403 end
404 404 end
405 405
406 406 html.html_safe
407 407 end
408 408
409 409 def per_page_links(selected=nil)
410 410 links = Setting.per_page_options_array.collect do |n|
411 411 n == selected ? n : link_to_content_update(n, params.merge(:per_page => n))
412 412 end
413 413 links.size > 1 ? l(:label_display_per_page, links.join(', ')) : nil
414 414 end
415 415
416 416 def reorder_links(name, url, method = :post)
417 417 link_to(image_tag('2uparrow.png', :alt => l(:label_sort_highest)),
418 418 url.merge({"#{name}[move_to]" => 'highest'}),
419 419 :method => method, :title => l(:label_sort_highest)) +
420 420 link_to(image_tag('1uparrow.png', :alt => l(:label_sort_higher)),
421 421 url.merge({"#{name}[move_to]" => 'higher'}),
422 422 :method => method, :title => l(:label_sort_higher)) +
423 423 link_to(image_tag('1downarrow.png', :alt => l(:label_sort_lower)),
424 424 url.merge({"#{name}[move_to]" => 'lower'}),
425 425 :method => method, :title => l(:label_sort_lower)) +
426 426 link_to(image_tag('2downarrow.png', :alt => l(:label_sort_lowest)),
427 427 url.merge({"#{name}[move_to]" => 'lowest'}),
428 428 :method => method, :title => l(:label_sort_lowest))
429 429 end
430 430
431 431 def breadcrumb(*args)
432 432 elements = args.flatten
433 433 elements.any? ? content_tag('p', (args.join(" \xc2\xbb ") + " \xc2\xbb ").html_safe, :class => 'breadcrumb') : nil
434 434 end
435 435
436 436 def other_formats_links(&block)
437 437 concat('<p class="other-formats">'.html_safe + l(:label_export_to))
438 438 yield Redmine::Views::OtherFormatsBuilder.new(self)
439 439 concat('</p>'.html_safe)
440 440 end
441 441
442 442 def page_header_title
443 443 if @project.nil? || @project.new_record?
444 444 h(Setting.app_title)
445 445 else
446 446 b = []
447 447 ancestors = (@project.root? ? [] : @project.ancestors.visible.all)
448 448 if ancestors.any?
449 449 root = ancestors.shift
450 450 b << link_to_project(root, {:jump => current_menu_item}, :class => 'root')
451 451 if ancestors.size > 2
452 452 b << "\xe2\x80\xa6"
453 453 ancestors = ancestors[-2, 2]
454 454 end
455 455 b += ancestors.collect {|p| link_to_project(p, {:jump => current_menu_item}, :class => 'ancestor') }
456 456 end
457 457 b << h(@project)
458 458 b.join(" \xc2\xbb ").html_safe
459 459 end
460 460 end
461 461
462 462 def html_title(*args)
463 463 if args.empty?
464 464 title = @html_title || []
465 465 title << @project.name if @project
466 466 title << Setting.app_title unless Setting.app_title == title.last
467 467 title.select {|t| !t.blank? }.join(' - ')
468 468 else
469 469 @html_title ||= []
470 470 @html_title += args
471 471 end
472 472 end
473 473
474 474 # Returns the theme, controller name, and action as css classes for the
475 475 # HTML body.
476 476 def body_css_classes
477 477 css = []
478 478 if theme = Redmine::Themes.theme(Setting.ui_theme)
479 479 css << 'theme-' + theme.name
480 480 end
481 481
482 482 css << 'controller-' + controller_name
483 483 css << 'action-' + action_name
484 484 css.join(' ')
485 485 end
486 486
487 487 def accesskey(s)
488 488 Redmine::AccessKeys.key_for s
489 489 end
490 490
491 491 # Formats text according to system settings.
492 492 # 2 ways to call this method:
493 493 # * with a String: textilizable(text, options)
494 494 # * with an object and one of its attribute: textilizable(issue, :description, options)
495 495 def textilizable(*args)
496 496 options = args.last.is_a?(Hash) ? args.pop : {}
497 497 case args.size
498 498 when 1
499 499 obj = options[:object]
500 500 text = args.shift
501 501 when 2
502 502 obj = args.shift
503 503 attr = args.shift
504 504 text = obj.send(attr).to_s
505 505 else
506 506 raise ArgumentError, 'invalid arguments to textilizable'
507 507 end
508 508 return '' if text.blank?
509 509 project = options[:project] || @project || (obj && obj.respond_to?(:project) ? obj.project : nil)
510 510 only_path = options.delete(:only_path) == false ? false : true
511 511
512 512 text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr)
513 513
514 514 @parsed_headings = []
515 515 @heading_anchors = {}
516 516 @current_section = 0 if options[:edit_section_links]
517 517
518 518 parse_sections(text, project, obj, attr, only_path, options)
519 519 text = parse_non_pre_blocks(text) do |text|
520 520 [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_macros].each do |method_name|
521 521 send method_name, text, project, obj, attr, only_path, options
522 522 end
523 523 end
524 524 parse_headings(text, project, obj, attr, only_path, options)
525 525
526 526 if @parsed_headings.any?
527 527 replace_toc(text, @parsed_headings)
528 528 end
529 529
530 530 text.html_safe
531 531 end
532 532
533 533 def parse_non_pre_blocks(text)
534 534 s = StringScanner.new(text)
535 535 tags = []
536 536 parsed = ''
537 537 while !s.eos?
538 538 s.scan(/(.*?)(<(\/)?(pre|code)(.*?)>|\z)/im)
539 539 text, full_tag, closing, tag = s[1], s[2], s[3], s[4]
540 540 if tags.empty?
541 541 yield text
542 542 end
543 543 parsed << text
544 544 if tag
545 545 if closing
546 546 if tags.last == tag.downcase
547 547 tags.pop
548 548 end
549 549 else
550 550 tags << tag.downcase
551 551 end
552 552 parsed << full_tag
553 553 end
554 554 end
555 555 # Close any non closing tags
556 556 while tag = tags.pop
557 557 parsed << "</#{tag}>"
558 558 end
559 559 parsed
560 560 end
561 561
562 562 def parse_inline_attachments(text, project, obj, attr, only_path, options)
563 563 # when using an image link, try to use an attachment, if possible
564 564 if options[:attachments] || (obj && obj.respond_to?(:attachments))
565 565 attachments = options[:attachments] || obj.attachments
566 566 text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpe|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m|
567 567 filename, ext, alt, alttext = $1.downcase, $2, $3, $4
568 568 # search for the picture in attachments
569 569 if found = Attachment.latest_attach(attachments, filename)
570 570 image_url = url_for :only_path => only_path, :controller => 'attachments',
571 571 :action => 'download', :id => found
572 572 desc = found.description.to_s.gsub('"', '')
573 573 if !desc.blank? && alttext.blank?
574 574 alt = " title=\"#{desc}\" alt=\"#{desc}\""
575 575 end
576 576 "src=\"#{image_url}\"#{alt}"
577 577 else
578 578 m
579 579 end
580 580 end
581 581 end
582 582 end
583 583
584 584 # Wiki links
585 585 #
586 586 # Examples:
587 587 # [[mypage]]
588 588 # [[mypage|mytext]]
589 589 # wiki links can refer other project wikis, using project name or identifier:
590 590 # [[project:]] -> wiki starting page
591 591 # [[project:|mytext]]
592 592 # [[project:mypage]]
593 593 # [[project:mypage|mytext]]
594 594 def parse_wiki_links(text, project, obj, attr, only_path, options)
595 595 text.gsub!(/(!)?(\[\[([^\]\n\|]+)(\|([^\]\n\|]+))?\]\])/) do |m|
596 596 link_project = project
597 597 esc, all, page, title = $1, $2, $3, $5
598 598 if esc.nil?
599 599 if page =~ /^([^\:]+)\:(.*)$/
600 600 link_project = Project.find_by_identifier($1) || Project.find_by_name($1)
601 601 page = $2
602 602 title ||= $1 if page.blank?
603 603 end
604 604
605 605 if link_project && link_project.wiki
606 606 # extract anchor
607 607 anchor = nil
608 608 if page =~ /^(.+?)\#(.+)$/
609 609 page, anchor = $1, $2
610 610 end
611 611 anchor = sanitize_anchor_name(anchor) if anchor.present?
612 612 # check if page exists
613 613 wiki_page = link_project.wiki.find_page(page)
614 614 url = if anchor.present? && wiki_page.present? && (obj.is_a?(WikiContent) || obj.is_a?(WikiContent::Version)) && obj.page == wiki_page
615 615 "##{anchor}"
616 616 else
617 617 case options[:wiki_links]
618 618 when :local; "#{page.present? ? Wiki.titleize(page) : ''}.html" + (anchor.present? ? "##{anchor}" : '')
619 619 when :anchor; "##{page.present? ? Wiki.titleize(page) : title}" + (anchor.present? ? "_#{anchor}" : '') # used for single-file wiki export
620 620 else
621 621 wiki_page_id = page.present? ? Wiki.titleize(page) : nil
622 622 parent = wiki_page.nil? && obj.is_a?(WikiContent) && obj.page && project == link_project ? obj.page.title : nil
623 623 url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project,
624 624 :id => wiki_page_id, :anchor => anchor, :parent => parent)
625 625 end
626 626 end
627 627 link_to(title.present? ? title.html_safe : h(page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new')))
628 628 else
629 629 # project or wiki doesn't exist
630 630 all
631 631 end
632 632 else
633 633 all
634 634 end
635 635 end
636 636 end
637 637
638 638 # Redmine links
639 639 #
640 640 # Examples:
641 641 # Issues:
642 642 # #52 -> Link to issue #52
643 643 # Changesets:
644 644 # r52 -> Link to revision 52
645 645 # commit:a85130f -> Link to scmid starting with a85130f
646 646 # Documents:
647 647 # document#17 -> Link to document with id 17
648 648 # document:Greetings -> Link to the document with title "Greetings"
649 649 # document:"Some document" -> Link to the document with title "Some document"
650 650 # Versions:
651 651 # version#3 -> Link to version with id 3
652 652 # version:1.0.0 -> Link to version named "1.0.0"
653 653 # version:"1.0 beta 2" -> Link to version named "1.0 beta 2"
654 654 # Attachments:
655 655 # attachment:file.zip -> Link to the attachment of the current object named file.zip
656 656 # Source files:
657 657 # source:some/file -> Link to the file located at /some/file in the project's repository
658 658 # source:some/file@52 -> Link to the file's revision 52
659 659 # source:some/file#L120 -> Link to line 120 of the file
660 660 # source:some/file@52#L120 -> Link to line 120 of the file's revision 52
661 661 # export:some/file -> Force the download of the file
662 662 # Forum messages:
663 663 # message#1218 -> Link to message with id 1218
664 664 #
665 665 # Links can refer other objects from other projects, using project identifier:
666 666 # identifier:r52
667 667 # identifier:document:"Some document"
668 668 # identifier:version:1.0.0
669 669 # identifier:source:some/file
670 670 def parse_redmine_links(text, project, obj, attr, only_path, options)
671 671 text.gsub!(%r{([\s\(,\-\[\>]|^)(!)?(([a-z0-9\-_]+):)?(attachment|document|version|forum|news|message|project|commit|source|export)?(((#)|((([a-z0-9\-]+)\|)?(r)))((\d+)((#note)?-(\d+))?)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]][^A-Za-z0-9_/])|,|\s|\]|<|$)}) do |m|
672 672 leading, esc, project_prefix, project_identifier, prefix, repo_prefix, repo_identifier, sep, identifier, comment_suffix, comment_id = $1, $2, $3, $4, $5, $10, $11, $8 || $12 || $18, $14 || $19, $15, $17
673 673 link = nil
674 674 if project_identifier
675 675 project = Project.visible.find_by_identifier(project_identifier)
676 676 end
677 677 if esc.nil?
678 678 if prefix.nil? && sep == 'r'
679 679 if project
680 680 repository = nil
681 681 if repo_identifier
682 682 repository = project.repositories.detect {|repo| repo.identifier == repo_identifier}
683 683 else
684 684 repository = project.repository
685 685 end
686 686 # project.changesets.visible raises an SQL error because of a double join on repositories
687 687 if repository && (changeset = Changeset.visible.find_by_repository_id_and_revision(repository.id, identifier))
688 688 link = link_to(h("#{project_prefix}#{repo_prefix}r#{identifier}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :repository_id => repository.identifier_param, :rev => changeset.revision},
689 689 :class => 'changeset',
690 690 :title => truncate_single_line(changeset.comments, :length => 100))
691 691 end
692 692 end
693 693 elsif sep == '#'
694 694 oid = identifier.to_i
695 695 case prefix
696 696 when nil
697 697 if issue = Issue.visible.find_by_id(oid, :include => :status)
698 698 anchor = comment_id ? "note-#{comment_id}" : nil
699 699 link = link_to("##{oid}", {:only_path => only_path, :controller => 'issues', :action => 'show', :id => oid, :anchor => anchor},
700 700 :class => issue.css_classes,
701 701 :title => "#{truncate(issue.subject, :length => 100)} (#{issue.status.name})")
702 702 end
703 703 when 'document'
704 704 if document = Document.visible.find_by_id(oid)
705 705 link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
706 706 :class => 'document'
707 707 end
708 708 when 'version'
709 709 if version = Version.visible.find_by_id(oid)
710 710 link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
711 711 :class => 'version'
712 712 end
713 713 when 'message'
714 714 if message = Message.visible.find_by_id(oid, :include => :parent)
715 715 link = link_to_message(message, {:only_path => only_path}, :class => 'message')
716 716 end
717 717 when 'forum'
718 718 if board = Board.visible.find_by_id(oid)
719 719 link = link_to h(board.name), {:only_path => only_path, :controller => 'boards', :action => 'show', :id => board, :project_id => board.project},
720 720 :class => 'board'
721 721 end
722 722 when 'news'
723 723 if news = News.visible.find_by_id(oid)
724 724 link = link_to h(news.title), {:only_path => only_path, :controller => 'news', :action => 'show', :id => news},
725 725 :class => 'news'
726 726 end
727 727 when 'project'
728 728 if p = Project.visible.find_by_id(oid)
729 729 link = link_to_project(p, {:only_path => only_path}, :class => 'project')
730 730 end
731 731 end
732 732 elsif sep == ':'
733 733 # removes the double quotes if any
734 734 name = identifier.gsub(%r{^"(.*)"$}, "\\1")
735 735 case prefix
736 736 when 'document'
737 737 if project && document = project.documents.visible.find_by_title(name)
738 738 link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
739 739 :class => 'document'
740 740 end
741 741 when 'version'
742 742 if project && version = project.versions.visible.find_by_name(name)
743 743 link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
744 744 :class => 'version'
745 745 end
746 746 when 'forum'
747 747 if project && board = project.boards.visible.find_by_name(name)
748 748 link = link_to h(board.name), {:only_path => only_path, :controller => 'boards', :action => 'show', :id => board, :project_id => board.project},
749 749 :class => 'board'
750 750 end
751 751 when 'news'
752 752 if project && news = project.news.visible.find_by_title(name)
753 753 link = link_to h(news.title), {:only_path => only_path, :controller => 'news', :action => 'show', :id => news},
754 754 :class => 'news'
755 755 end
756 756 when 'commit', 'source', 'export'
757 757 if project
758 758 repository = nil
759 759 if name =~ %r{^(([a-z0-9\-]+)\|)(.+)$}
760 760 repo_prefix, repo_identifier, name = $1, $2, $3
761 761 repository = project.repositories.detect {|repo| repo.identifier == repo_identifier}
762 762 else
763 763 repository = project.repository
764 764 end
765 765 if prefix == 'commit'
766 766 if repository && (changeset = Changeset.visible.find(:first, :conditions => ["repository_id = ? AND scmid LIKE ?", repository.id, "#{name}%"]))
767 767 link = link_to h("#{project_prefix}#{repo_prefix}#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :repository_id => repository.identifier_param, :rev => changeset.identifier},
768 768 :class => 'changeset',
769 769 :title => truncate_single_line(h(changeset.comments), :length => 100)
770 770 end
771 771 else
772 772 if repository && User.current.allowed_to?(:browse_repository, project)
773 773 name =~ %r{^[/\\]*(.*?)(@([0-9a-f]+))?(#(L\d+))?$}
774 774 path, rev, anchor = $1, $3, $5
775 775 link = link_to h("#{project_prefix}#{prefix}:#{repo_prefix}#{name}"), {:controller => 'repositories', :action => 'entry', :id => project, :repository_id => repository.identifier_param,
776 776 :path => to_path_param(path),
777 777 :rev => rev,
778 778 :anchor => anchor,
779 779 :format => (prefix == 'export' ? 'raw' : nil)},
780 780 :class => (prefix == 'export' ? 'source download' : 'source')
781 781 end
782 782 end
783 783 repo_prefix = nil
784 784 end
785 785 when 'attachment'
786 786 attachments = options[:attachments] || (obj && obj.respond_to?(:attachments) ? obj.attachments : nil)
787 787 if attachments && attachment = attachments.detect {|a| a.filename == name }
788 788 link = link_to h(attachment.filename), {:only_path => only_path, :controller => 'attachments', :action => 'download', :id => attachment},
789 789 :class => 'attachment'
790 790 end
791 791 when 'project'
792 792 if p = Project.visible.find(:first, :conditions => ["identifier = :s OR LOWER(name) = :s", {:s => name.downcase}])
793 793 link = link_to_project(p, {:only_path => only_path}, :class => 'project')
794 794 end
795 795 end
796 796 end
797 797 end
798 798 (leading + (link || "#{project_prefix}#{prefix}#{repo_prefix}#{sep}#{identifier}#{comment_suffix}"))
799 799 end
800 800 end
801 801
802 HEADING_RE = /(<h(1|2|3|4)( [^>]+)?>(.+?)<\/h(1|2|3|4)>)/i unless const_defined?(:HEADING_RE)
802 HEADING_RE = /(<h(\d)( [^>]+)?>(.+?)<\/h(\d)>)/i unless const_defined?(:HEADING_RE)
803 803
804 804 def parse_sections(text, project, obj, attr, only_path, options)
805 805 return unless options[:edit_section_links]
806 806 text.gsub!(HEADING_RE) do
807 807 heading = $1
808 808 @current_section += 1
809 809 if @current_section > 1
810 810 content_tag('div',
811 811 link_to(image_tag('edit.png'), options[:edit_section_links].merge(:section => @current_section)),
812 812 :class => 'contextual',
813 813 :title => l(:button_edit_section)) + heading.html_safe
814 814 else
815 815 heading
816 816 end
817 817 end
818 818 end
819 819
820 820 # Headings and TOC
821 821 # Adds ids and links to headings unless options[:headings] is set to false
822 822 def parse_headings(text, project, obj, attr, only_path, options)
823 823 return if options[:headings] == false
824 824
825 825 text.gsub!(HEADING_RE) do
826 826 level, attrs, content = $2.to_i, $3, $4
827 827 item = strip_tags(content).strip
828 828 anchor = sanitize_anchor_name(item)
829 829 # used for single-file wiki export
830 830 anchor = "#{obj.page.title}_#{anchor}" if options[:wiki_links] == :anchor && (obj.is_a?(WikiContent) || obj.is_a?(WikiContent::Version))
831 831 @heading_anchors[anchor] ||= 0
832 832 idx = (@heading_anchors[anchor] += 1)
833 833 if idx > 1
834 834 anchor = "#{anchor}-#{idx}"
835 835 end
836 836 @parsed_headings << [level, anchor, item]
837 837 "<a name=\"#{anchor}\"></a>\n<h#{level} #{attrs}>#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">&para;</a></h#{level}>"
838 838 end
839 839 end
840 840
841 841 MACROS_RE = /
842 842 (!)? # escaping
843 843 (
844 844 \{\{ # opening tag
845 845 ([\w]+) # macro name
846 846 (\(([^\}]*)\))? # optional arguments
847 847 \}\} # closing tag
848 848 )
849 849 /x unless const_defined?(:MACROS_RE)
850 850
851 851 # Macros substitution
852 852 def parse_macros(text, project, obj, attr, only_path, options)
853 853 text.gsub!(MACROS_RE) do
854 854 esc, all, macro = $1, $2, $3.downcase
855 855 args = ($5 || '').split(',').each(&:strip)
856 856 if esc.nil?
857 857 begin
858 858 exec_macro(macro, obj, args)
859 859 rescue => e
860 860 "<div class=\"flash error\">Error executing the <strong>#{macro}</strong> macro (#{e})</div>"
861 861 end || all
862 862 else
863 863 all
864 864 end
865 865 end
866 866 end
867 867
868 868 TOC_RE = /<p>\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE)
869 869
870 870 # Renders the TOC with given headings
871 871 def replace_toc(text, headings)
872 872 text.gsub!(TOC_RE) do
873 # Keep only the 4 first levels
874 headings = headings.select{|level, anchor, item| level <= 4}
873 875 if headings.empty?
874 876 ''
875 877 else
876 878 div_class = 'toc'
877 879 div_class << ' right' if $1 == '>'
878 880 div_class << ' left' if $1 == '<'
879 881 out = "<ul class=\"#{div_class}\"><li>"
880 882 root = headings.map(&:first).min
881 883 current = root
882 884 started = false
883 885 headings.each do |level, anchor, item|
884 886 if level > current
885 887 out << '<ul><li>' * (level - current)
886 888 elsif level < current
887 889 out << "</li></ul>\n" * (current - level) + "</li><li>"
888 890 elsif started
889 891 out << '</li><li>'
890 892 end
891 893 out << "<a href=\"##{anchor}\">#{item}</a>"
892 894 current = level
893 895 started = true
894 896 end
895 897 out << '</li></ul>' * (current - root)
896 898 out << '</li></ul>'
897 899 end
898 900 end
899 901 end
900 902
901 903 # Same as Rails' simple_format helper without using paragraphs
902 904 def simple_format_without_paragraph(text)
903 905 text.to_s.
904 906 gsub(/\r\n?/, "\n"). # \r\n and \r -> \n
905 907 gsub(/\n\n+/, "<br /><br />"). # 2+ newline -> 2 br
906 908 gsub(/([^\n]\n)(?=[^\n])/, '\1<br />'). # 1 newline -> br
907 909 html_safe
908 910 end
909 911
910 912 def lang_options_for_select(blank=true)
911 913 (blank ? [["(auto)", ""]] : []) +
912 914 valid_languages.collect{|lang| [ ll(lang.to_s, :general_lang_name), lang.to_s]}.sort{|x,y| x.last <=> y.last }
913 915 end
914 916
915 917 def label_tag_for(name, option_tags = nil, options = {})
916 918 label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")
917 919 content_tag("label", label_text)
918 920 end
919 921
920 922 def labelled_tabular_form_for(*args, &proc)
921 923 ActiveSupport::Deprecation.warn "ApplicationHelper#labelled_tabular_form_for is deprecated and will be removed in Redmine 1.5. Use #labelled_form_for instead."
922 924 args << {} unless args.last.is_a?(Hash)
923 925 options = args.last
924 926 options[:html] ||= {}
925 927 options[:html][:class] = 'tabular' unless options[:html].has_key?(:class)
926 928 options.merge!({:builder => Redmine::Views::LabelledFormBuilder})
927 929 form_for(*args, &proc)
928 930 end
929 931
930 932 def labelled_form_for(*args, &proc)
931 933 args << {} unless args.last.is_a?(Hash)
932 934 options = args.last
933 935 options.merge!({:builder => Redmine::Views::LabelledFormBuilder})
934 936 form_for(*args, &proc)
935 937 end
936 938
937 939 def labelled_fields_for(*args, &proc)
938 940 args << {} unless args.last.is_a?(Hash)
939 941 options = args.last
940 942 options.merge!({:builder => Redmine::Views::LabelledFormBuilder})
941 943 fields_for(*args, &proc)
942 944 end
943 945
944 946 def labelled_remote_form_for(*args, &proc)
945 947 args << {} unless args.last.is_a?(Hash)
946 948 options = args.last
947 949 options.merge!({:builder => Redmine::Views::LabelledFormBuilder})
948 950 remote_form_for(*args, &proc)
949 951 end
950 952
951 953 def error_messages_for(*objects)
952 954 html = ""
953 955 objects = objects.map {|o| o.is_a?(String) ? instance_variable_get("@#{o}") : o}.compact
954 956 errors = objects.map {|o| o.errors.full_messages}.flatten
955 957 if errors.any?
956 958 html << "<div id='errorExplanation'><ul>\n"
957 959 errors.each do |error|
958 960 html << "<li>#{h error}</li>\n"
959 961 end
960 962 html << "</ul></div>\n"
961 963 end
962 964 html.html_safe
963 965 end
964 966
965 967 def back_url_hidden_field_tag
966 968 back_url = params[:back_url] || request.env['HTTP_REFERER']
967 969 back_url = CGI.unescape(back_url.to_s)
968 970 hidden_field_tag('back_url', CGI.escape(back_url), :id => nil) unless back_url.blank?
969 971 end
970 972
971 973 def check_all_links(form_name)
972 974 link_to_function(l(:button_check_all), "checkAll('#{form_name}', true)") +
973 975 " | ".html_safe +
974 976 link_to_function(l(:button_uncheck_all), "checkAll('#{form_name}', false)")
975 977 end
976 978
977 979 def progress_bar(pcts, options={})
978 980 pcts = [pcts, pcts] unless pcts.is_a?(Array)
979 981 pcts = pcts.collect(&:round)
980 982 pcts[1] = pcts[1] - pcts[0]
981 983 pcts << (100 - pcts[1] - pcts[0])
982 984 width = options[:width] || '100px;'
983 985 legend = options[:legend] || ''
984 986 content_tag('table',
985 987 content_tag('tr',
986 988 (pcts[0] > 0 ? content_tag('td', '', :style => "width: #{pcts[0]}%;", :class => 'closed') : ''.html_safe) +
987 989 (pcts[1] > 0 ? content_tag('td', '', :style => "width: #{pcts[1]}%;", :class => 'done') : ''.html_safe) +
988 990 (pcts[2] > 0 ? content_tag('td', '', :style => "width: #{pcts[2]}%;", :class => 'todo') : ''.html_safe)
989 991 ), :class => 'progress', :style => "width: #{width};").html_safe +
990 992 content_tag('p', legend, :class => 'pourcent').html_safe
991 993 end
992 994
993 995 def checked_image(checked=true)
994 996 if checked
995 997 image_tag 'toggle_check.png'
996 998 end
997 999 end
998 1000
999 1001 def context_menu(url)
1000 1002 unless @context_menu_included
1001 1003 content_for :header_tags do
1002 1004 javascript_include_tag('context_menu') +
1003 1005 stylesheet_link_tag('context_menu')
1004 1006 end
1005 1007 if l(:direction) == 'rtl'
1006 1008 content_for :header_tags do
1007 1009 stylesheet_link_tag('context_menu_rtl')
1008 1010 end
1009 1011 end
1010 1012 @context_menu_included = true
1011 1013 end
1012 1014 javascript_tag "new ContextMenu('#{ url_for(url) }')"
1013 1015 end
1014 1016
1015 1017 def calendar_for(field_id)
1016 1018 include_calendar_headers_tags
1017 1019 image_tag("calendar.png", {:id => "#{field_id}_trigger",:class => "calendar-trigger"}) +
1018 1020 javascript_tag("Calendar.setup({inputField : '#{field_id}', ifFormat : '%Y-%m-%d', button : '#{field_id}_trigger' });")
1019 1021 end
1020 1022
1021 1023 def include_calendar_headers_tags
1022 1024 unless @calendar_headers_tags_included
1023 1025 @calendar_headers_tags_included = true
1024 1026 content_for :header_tags do
1025 1027 start_of_week = case Setting.start_of_week.to_i
1026 1028 when 1
1027 1029 'Calendar._FD = 1;' # Monday
1028 1030 when 7
1029 1031 'Calendar._FD = 0;' # Sunday
1030 1032 when 6
1031 1033 'Calendar._FD = 6;' # Saturday
1032 1034 else
1033 1035 '' # use language
1034 1036 end
1035 1037
1036 1038 javascript_include_tag('calendar/calendar') +
1037 1039 javascript_include_tag("calendar/lang/calendar-#{current_language.to_s.downcase}.js") +
1038 1040 javascript_tag(start_of_week) +
1039 1041 javascript_include_tag('calendar/calendar-setup') +
1040 1042 stylesheet_link_tag('calendar')
1041 1043 end
1042 1044 end
1043 1045 end
1044 1046
1045 1047 def content_for(name, content = nil, &block)
1046 1048 @has_content ||= {}
1047 1049 @has_content[name] = true
1048 1050 super(name, content, &block)
1049 1051 end
1050 1052
1051 1053 def has_content?(name)
1052 1054 (@has_content && @has_content[name]) || false
1053 1055 end
1054 1056
1055 1057 def email_delivery_enabled?
1056 1058 !!ActionMailer::Base.perform_deliveries
1057 1059 end
1058 1060
1059 1061 # Returns the avatar image tag for the given +user+ if avatars are enabled
1060 1062 # +user+ can be a User or a string that will be scanned for an email address (eg. 'joe <joe@foo.bar>')
1061 1063 def avatar(user, options = { })
1062 1064 if Setting.gravatar_enabled?
1063 1065 options.merge!({:ssl => (defined?(request) && request.ssl?), :default => Setting.gravatar_default})
1064 1066 email = nil
1065 1067 if user.respond_to?(:mail)
1066 1068 email = user.mail
1067 1069 elsif user.to_s =~ %r{<(.+?)>}
1068 1070 email = $1
1069 1071 end
1070 1072 return gravatar(email.to_s.downcase, options) unless email.blank? rescue nil
1071 1073 else
1072 1074 ''
1073 1075 end
1074 1076 end
1075 1077
1076 1078 def sanitize_anchor_name(anchor)
1077 1079 anchor.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
1078 1080 end
1079 1081
1080 1082 # Returns the javascript tags that are included in the html layout head
1081 1083 def javascript_heads
1082 1084 tags = javascript_include_tag(:defaults)
1083 1085 unless User.current.pref.warn_on_leaving_unsaved == '0'
1084 1086 tags << "\n".html_safe + javascript_tag("Event.observe(window, 'load', function(){ new WarnLeavingUnsaved('#{escape_javascript( l(:text_warn_on_leaving_unsaved) )}'); });")
1085 1087 end
1086 1088 tags
1087 1089 end
1088 1090
1089 1091 def favicon
1090 1092 "<link rel='shortcut icon' href='#{image_path('/favicon.ico')}' />".html_safe
1091 1093 end
1092 1094
1093 1095 def robot_exclusion_tag
1094 1096 '<meta name="robots" content="noindex,follow,noarchive" />'.html_safe
1095 1097 end
1096 1098
1097 1099 # Returns true if arg is expected in the API response
1098 1100 def include_in_api_response?(arg)
1099 1101 unless @included_in_api_response
1100 1102 param = params[:include]
1101 1103 @included_in_api_response = param.is_a?(Array) ? param.collect(&:to_s) : param.to_s.split(',')
1102 1104 @included_in_api_response.collect!(&:strip)
1103 1105 end
1104 1106 @included_in_api_response.include?(arg.to_s)
1105 1107 end
1106 1108
1107 1109 # Returns options or nil if nometa param or X-Redmine-Nometa header
1108 1110 # was set in the request
1109 1111 def api_meta(options)
1110 1112 if params[:nometa].present? || request.headers['X-Redmine-Nometa']
1111 1113 # compatibility mode for activeresource clients that raise
1112 1114 # an error when unserializing an array with attributes
1113 1115 nil
1114 1116 else
1115 1117 options
1116 1118 end
1117 1119 end
1118 1120
1119 1121 private
1120 1122
1121 1123 def wiki_helper
1122 1124 helper = Redmine::WikiFormatting.helper_for(Setting.text_formatting)
1123 1125 extend helper
1124 1126 return self
1125 1127 end
1126 1128
1127 1129 def link_to_content_update(text, url_params = {}, html_options = {})
1128 1130 link_to(text, url_params, html_options)
1129 1131 end
1130 1132 end
@@ -1,2031 +1,2032
1 1 == Redmine changelog
2 2
3 3 Redmine - project management software
4 4 Copyright (C) 2006-2012 Jean-Philippe Lang
5 5 http://www.redmine.org/
6 6
7 7 == TBD v1.4.5
8 8
9 9 * Defect #10818: Running rake in test environment causes exception
10 10 * Defect #11192: Make repository identifier accept underscores
11 11 * Defect #11307: Can't filter for negative numeric custom fields
12 12 * Defect #11365: Attachment description length is not validated
13 13 * Defect #11541: Version sharing is missing in the REST API
14 * Defect #11789: Edit section links broken with h5/h6 headings
14 15 * Feature #11338: Exclude emails with auto-submitted => auto-generated
15 16 * Patch #11328: Fix Japanese mistranslation for 'label_language_based'
16 17 * Patch #11448: Russian translation for 1.4-stable and 2.0-stable
17 18 * Patch #11600: Fix plural form of the abbreviation for hours in Brazilian Portuguese
18 19
19 20 == 2012-06-18 v1.4.4
20 21
21 22 * Defect #10688: PDF export from Wiki - Problems with tables
22 23 * Defect #11061: Cannot choose commit versions to view differences in Git/Mercurial repository view
23 24 * Defect #11112: REST API - custom fields in POST/PUT ignored for time_entries
24 25 * Defect #11133: Wiki-page section edit link can point to incorrect section
25 26 * Defect #11160: SQL Error on time report if a custom field has multiple values for an entry
26 27 * Defect #11178: Spent time sorted by date-descending order lists same-date entries in physical order
27 28 * Defect #11185: Redmine fails to delete a project with parent/child task
28 29 * Feature #6597: Configurable session lifetime and timeout
29 30 * Patch #11113: Small glitch in German localization
30 31 * Fix for Rails vulnerabilities CVE-2012-2694 and CVE-2012-2695
31 32
32 33 == 2012-06-05 v1.4.3
33 34
34 35 * Defect #11038: "Create and continue" should preserve project, issue and activity when logging time
35 36 * Defect #11046: Redmine.pm does not support "bind as user" ldap authentication
36 37 * Defect #11051: reposman.rb fails in 1.4.2 because of missing require for rubygems
37 38 * Fix for Rails vulnerability CVE-2012-2660
38 39
39 40 == 2012-05-13 v1.4.2
40 41
41 42 * Defect #10744: rake task redmine:email:test broken
42 43 * Defect #10787: "Allow users to unsubscribe" option is confusing
43 44 * Defect #10827: Cannot access Repositories page and Settings in a Project - Error 500
44 45 * Defect #10829: db:migrate fails 0.8.2 -> 1.4.1
45 46 * Defect #10832: REST Uploads fail with fastcgi
46 47 * Defect #10837: reposman and rdm-mailhandler not working with ruby 1.9.x
47 48 * Defect #10856: can not load translations from hr.yml with ruby1.9.3-p194
48 49 * Defect #10865: Filter reset when deleting locked user
49 50 * Feature #9790: Allow filtering text custom fields on "is null" and "is not null"
50 51 * Feature #10778: svn:ignore for config/additional_environment.rb
51 52 * Feature #10875: Partial Albanian Translations
52 53 * Feature #10888: Bring back List-Id to help aid Gmail filtering
53 54 * Patch #10733: Traditional Chinese language file (to r9502)
54 55 * Patch #10745: Japanese translation update (r9519)
55 56 * Patch #10750: Swedish Translation for r9522
56 57 * Patch #10785: Bulgarian translation (jstoolbar)
57 58 * Patch #10800: Simplified Chinese translation
58 59
59 60 == 2012-04-20 v1.4.1
60 61
61 62 * Defect #8574: Time report: date range fields not enabled when using the calendar popup
62 63 * Defect #10642: Nested textile ol/ul lists generate invalid HTML
63 64 * Defect #10668: RSS key is generated twice when user is not reloaded
64 65 * Defect #10669: Token.destroy_expired should not delete API tokens
65 66 * Defect #10675: "Submit and continue" is broken
66 67 * Defect #10711: User cannot change account details with "Login has already been taken" error
67 68 * Feature #10664: Unsubscribe Own User Account
68 69 * Patch #10693: German Translation Update
69 70
70 71 == 2012-04-14 v1.4.0
71 72
72 73 * Defect #2719: Increase username length limit from 30 to 60
73 74 * Defect #3087: Revision referring to issues across all projects
74 75 * Defect #4824: Unable to connect (can't convert Net::LDAP::LdapError into String)
75 76 * Defect #5058: reminder mails are not sent when delivery_method is :async_smtp
76 77 * Defect #6859: Moving issues to a tracker with different custom fields should let fill these fields
77 78 * Defect #7398: Error when trying to quick create a version with required custom field
78 79 * Defect #7495: Python multiline comments highlighting problem in Repository browser
79 80 * Defect #7826: bigdecimal-segfault-fix.rb must be removed for Oracle
80 81 * Defect #7920: Attempted to update a stale object when copying a project
81 82 * Defect #8857: Git: Too long in fetching repositories after upgrade from 1.1 or new branch at first time
82 83 * Defect #9472: The git scm module causes an excess amount of DB traffic.
83 84 * Defect #9685: Adding multiple times the same related issue relation is possible
84 85 * Defect #9798: Release 1.3.0 does not detect rubytree under ruby 1.9.3p0 / rails 2.3.14
85 86 * Defect #9978: Japanese "permission_add_issue_watchers" is wrong
86 87 * Defect #10006: Email reminders are sent for closed issues
87 88 * Defect #10150: CSV export and spent time: rounding issue
88 89 * Defect #10168: CSV export breaks custom columns
89 90 * Defect #10181: Issue context menu and bulk edit form show irrelevant statuses
90 91 * Defect #10198: message_id regex in pop3.rb only recognizes Message-ID header (not Message-Id)
91 92 * Defect #10251: Description diff link in note details is relative when received by email
92 93 * Defect #10272: Ruby 1.9.3: "incompatible character encoding" with LDAP auth
93 94 * Defect #10275: Message object not passed to wiki macros for head topic and in preview edit mode
94 95 * Defect #10334: Full name is not unquoted when creating users from emails
95 96 * Defect #10410: [Localization] Grammar issue of Simplified Chinese in zh.yml
96 97 * Defect #10442: Ruby 1.9.3 Time Zone setting Internal error.
97 98 * Defect #10467: Confusing behavior while moving issue to a project with disabled Issues module
98 99 * Defect #10575: Uploading of attachments which filename contains non-ASCII chars fails with Ruby 1.9
99 100 * Defect #10590: WikiContent::Version#text return string with #<Encoding:ASCII-8BIT> when uncompressed
100 101 * Defect #10593: Error: 'incompatible character encodings: UTF-8 and ASCII-8BIT' (old annoing issue) on ruby-1.9.3
101 102 * Defect #10600: Watchers search generates an Internal error
102 103 * Defect #10605: Bulk edit selected issues does not allow selection of blank values for custom fields
103 104 * Defect #10619: When changing status before tracker, it shows improper status
104 105 * Feature #779: Multiple SCM per project
105 106 * Feature #971: Add "Spent time" column to query
106 107 * Feature #1060: Add a LDAP-filter using external auth sources
107 108 * Feature #1102: Shortcut for assigning an issue to me
108 109 * Feature #1189: Multiselect custom fields
109 110 * Feature #1363: Allow underscores in project identifiers
110 111 * Feature #1913: LDAP - authenticate as user
111 112 * Feature #1972: Attachments for News
112 113 * Feature #2009: Manually add related revisions
113 114 * Feature #2323: Workflow permissions for administrators
114 115 * Feature #2416: {background:color} doesn't work in text formatting
115 116 * Feature #2694: Notification on loosing assignment
116 117 * Feature #2715: "Magic links" to notes
117 118 * Feature #2850: Add next/previous navigation to issue
118 119 * Feature #3055: Option to copy attachments when copying an issue
119 120 * Feature #3108: set parent automatically for new pages
120 121 * Feature #3463: Export all wiki pages to PDF
121 122 * Feature #4050: Ruby 1.9 support
122 123 * Feature #4769: Ability to move an issue to a different project from the update form
123 124 * Feature #4774: Change the hyperlink for file attachment to view and download
124 125 * Feature #5159: Ability to add Non-Member watchers to the watch list
125 126 * Feature #5638: Use Bundler (Gemfile) for gem management
126 127 * Feature #5643: Add X-Redmine-Sender header to email notifications
127 128 * Feature #6296: Bulk-edit custom fields through context menu
128 129 * Feature #6386: Issue mail should render the HTML version of the issue details
129 130 * Feature #6449: Edit a wiki page's parent on the edit page
130 131 * Feature #6555: Double-click on "Submit" and "Save" buttons should not send two requests to server
131 132 * Feature #7361: Highlight active query in the side bar
132 133 * Feature #7420: Rest API for projects members
133 134 * Feature #7603: Please make editing issues more obvious than "Change properties (More)"
134 135 * Feature #8171: Adding attachments through the REST API
135 136 * Feature #8691: Better handling of issue update conflict
136 137 * Feature #9803: Change project through REST API issue update
137 138 * Feature #9923: User type custom fields should be filterable by "Me".
138 139 * Feature #9985: Group time report by the Status field
139 140 * Feature #9995: Time entries insertion, "Create and continue" button
140 141 * Feature #10020: Enable global time logging at /time_entries/new
141 142 * Feature #10042: Bulk change private flag
142 143 * Feature #10126: Add members of subprojects in the assignee and author filters
143 144 * Feature #10131: Include custom fiels in time entries API responses
144 145 * Feature #10207: Git: use default branch from HEAD
145 146 * Feature #10208: Estonian translation
146 147 * Feature #10253: Better handling of attachments when validation fails
147 148 * Feature #10350: Bulk copy should allow for changing the target version
148 149 * Feature #10607: Ignore out-of-office incoming emails
149 150 * Feature #10635: Adding time like "123 Min" is invalid
150 151 * Patch #9998: Make attachement "Optional Description" less wide
151 152 * Patch #10066: i18n not working with russian gem
152 153 * Patch #10128: Disable IE 8 compatibility mode to fix wrong div.autoscroll scroll bar behaviour
153 154 * Patch #10155: Russian translation changed
154 155 * Patch #10464: Enhanced PDF output for Issues list
155 156 * Patch #10470: Efficiently process new git revisions in a single batch
156 157 * Patch #10513: Dutch translation improvement
157 158
158 159 == 2012-04-14 v1.3.3
159 160
160 161 * Defect #10505: Error when exporting to PDF with NoMethodError (undefined method `downcase' for nil:NilClass)
161 162 * Defect #10554: Defect symbols when exporting tasks in pdf
162 163 * Defect #10564: Unable to change locked, sticky flags and board when editing a message
163 164 * Defect #10591: Dutch "label_file_added" translation is wrong
164 165 * Defect #10622: "Default administrator account changed" is always true
165 166 * Patch #10555: rake redmine:send_reminders aborted if issue assigned to group
166 167 * Patch #10611: Simplified Chinese translations for 1.3-stable
167 168
168 169 == 2012-03-11 v1.3.2
169 170
170 171 * Defect #8194: {{toc}} uses identical anchors for subsections with the same name
171 172 * Defect #9143: Partial diff comparison should be done on actual code, not on html
172 173 * Defect #9523: {{toc}} does not display headers with @ code markup
173 174 * Defect #9815: Release 1.3.0 does not detect rubytree with rubgems 1.8
174 175 * Defect #10053: undefined method `<=>' for nil:NilClass when accessing the settings of a project
175 176 * Defect #10135: ActionView::TemplateError (can't convert Fixnum into String)
176 177 * Defect #10193: Unappropriate icons in highlighted code block
177 178 * Defect #10199: No wiki section edit when title contains code
178 179 * Defect #10218: Error when creating a project with a version custom field
179 180 * Defect #10241: "get version by ID" fails with "401 not authorized" error when using API access key
180 181 * Defect #10284: Note added by commit from a subproject does not contain project identifier
181 182 * Defect #10374: User list is empty when adding users to project / group if remaining users are added late
182 183 * Defect #10390: Mass assignment security vulnerability
183 184 * Patch #8413: Confirmation message before deleting a relationship
184 185 * Patch #10160: Bulgarian translation (r8777)
185 186 * Patch #10242: Migrate Redmine.pm from Digest::Sha1 to Digest::Sha
186 187 * Patch #10258: Italian translation for 1.3-stable
187 188
188 189 == 2012-02-06 v1.3.1
189 190
190 191 * Defect #9775: app/views/repository/_revision_graph.html.erb sets window.onload directly..
191 192 * Defect #9792: Ruby 1.9: [v1.3.0] Error: incompatible character encodings for it translation on Calendar page
192 193 * Defect #9793: Bad spacing between numbered list and heading (recently broken).
193 194 * Defect #9795: Unrelated error message when creating a group with an invalid name
194 195 * Defect #9832: Revision graph height should depend on height of rows in revisions table
195 196 * Defect #9937: Repository settings are not saved when all SCM are disabled
196 197 * Defect #9961: Ukrainian "default_tracker_bug" is wrong
197 198 * Defect #10013: Rest API - Create Version -> Internal server error 500
198 199 * Defect #10115: Javascript error - Can't attach more than 1 file on IE 6 and 7
199 200 * Defect #10130: Broken italic text style in edited comment preview
200 201 * Defect #10152: Attachment diff type is not saved in user preference
201 202 * Feature #9943: Arabic translation
202 203 * Patch #9874: pt-BR translation updates
203 204 * Patch #9922: Spanish translation updated
204 205 * Patch #10137: Korean language file ko.yml updated to Redmine 1.3.0
205 206
206 207 == 2011-12-10 v1.3.0
207 208
208 209 * Defect #2109: Context menu is being submitted twice per right click
209 210 * Defect #7717: MailHandler user creation for unknown_user impossible due to diverging length-limits of login and email fields
210 211 * Defect #7917: Creating users via email fails if user real name containes special chars
211 212 * Defect #7966: MailHandler does not include JournalDetail for attached files
212 213 * Defect #8368: Bad decimal separator in time entry CSV
213 214 * Defect #8371: MySQL error when filtering a custom field using the REST api
214 215 * Defect #8549: Export CSV has character encoding error
215 216 * Defect #8573: Do not show inactive Enumerations where not needed
216 217 * Defect #8611: rake/rdoctask is deprecated
217 218 * Defect #8751: Email notification: bug, when number of recipients more then 8
218 219 * Defect #8894: Private issues - make it more obvious in the UI?
219 220 * Defect #8994: Hardcoded French string "anonyme"
220 221 * Defect #9043: Hardcoded string "diff" in Wiki#show and Repositories_Helper
221 222 * Defect #9051: wrong "text_issue_added" in russian translation.
222 223 * Defect #9108: Custom query not saving status filter
223 224 * Defect #9252: Regression: application title escaped 2 times
224 225 * Defect #9264: Bad Portuguese translation
225 226 * Defect #9470: News list is missing Avatars
226 227 * Defect #9471: Inline markup broken in Wiki link labels
227 228 * Defect #9489: Label all input field and control tags
228 229 * Defect #9534: Precedence: bulk email header is non standard and discouraged
229 230 * Defect #9540: Issue filter by assigned_to_role is not project specific
230 231 * Defect #9619: Time zone ignored when logging time while editing ticket
231 232 * Defect #9638: Inconsistent image filename extensions
232 233 * Defect #9669: Issue list doesn't sort assignees/authors regarding user display format
233 234 * Defect #9672: Message-quoting in forums module broken
234 235 * Defect #9719: Filtering by numeric custom field types broken after update to master
235 236 * Defect #9724: Can't remote add new categories
236 237 * Defect #9738: Setting of cross-project custom query is not remembered inside project
237 238 * Defect #9748: Error about configuration.yml validness should mention file path
238 239 * Feature #69: Textilized description in PDF
239 240 * Feature #401: Add pdf export for WIKI page
240 241 * Feature #1567: Make author column sortable and groupable
241 242 * Feature #2222: Single section edit.
242 243 * Feature #2269: Default issue start date should become configurable.
243 244 * Feature #2371: character encoding for attachment file
244 245 * Feature #2964: Ability to assign issues to groups
245 246 * Feature #3033: Bug Reporting: Using "Create and continue" should show bug id of saved bug
246 247 * Feature #3261: support attachment images in PDF export
247 248 * Feature #4264: Update CodeRay to 1.0 final
248 249 * Feature #4324: Redmine renames my files, it shouldn't.
249 250 * Feature #4729: Add Date-Based Filters for Issues List
250 251 * Feature #4742: CSV export: option to export selected or all columns
251 252 * Feature #4976: Allow rdm-mailhandler to read the API key from a file
252 253 * Feature #5501: Git: Mercurial: Adding visual merge/branch history to repository view
253 254 * Feature #5634: Export issue to PDF does not include Subtasks and Related Issues
254 255 * Feature #5670: Cancel option for file upload
255 256 * Feature #5737: Custom Queries available through the REST Api
256 257 * Feature #6180: Searchable custom fields do not provide adequate operators
257 258 * Feature #6954: Filter from date to date
258 259 * Feature #7180: List of statuses in REST API
259 260 * Feature #7181: List of trackers in REST API
260 261 * Feature #7366: REST API for Issue Relations
261 262 * Feature #7403: REST API for Versions
262 263 * Feature #7671: REST API for reading attachments
263 264 * Feature #7832: Ability to assign issue categories to groups
264 265 * Feature #8420: Consider removing #7013 workaround
265 266 * Feature #9196: Improve logging in MailHandler when user creation fails
266 267 * Feature #9496: Adds an option in mailhandler to disable server certificate verification
267 268 * Feature #9553: CRUD operations for "Issue categories" in REST API
268 269 * Feature #9593: HTML title should be reordered
269 270 * Feature #9600: Wiki links for news and forums
270 271 * Feature #9607: Filter for issues without start date (or any another field based on date type)
271 272 * Feature #9609: Upgrade to Rails 2.3.14
272 273 * Feature #9612: "side by side" and "inline" patch view for attachments
273 274 * Feature #9667: Check attachment size before upload
274 275 * Feature #9690: Link in notification pointing to the actual update
275 276 * Feature #9720: Add note number for single issue's PDF
276 277 * Patch #8617: Indent subject of subtask ticket in exported issues PDF
277 278 * Patch #8778: Traditional Chinese 'issue' translation change
278 279 * Patch #9053: Fix up Russian translation
279 280 * Patch #9129: Improve wording of Git repository note at project setting
280 281 * Patch #9148: Better handling of field_due_date italian translation
281 282 * Patch #9273: Fix typos in russian localization
282 283 * Patch #9484: Limit SCM annotate to text files under the maximum file size for viewing
283 284 * Patch #9659: Indexing rows in auth_sources/index view
284 285 * Patch #9692: Fix Textilized description in PDF for CodeRay
285 286
286 287 == 2011-12-10 v1.2.3
287 288
288 289 * Defect #8707: Reposman: wrong constant name
289 290 * Defect #8809: Table in timelog report overflows
290 291 * Defect #9055: Version files in Files module cannot be downloaded if issue tracking is disabled
291 292 * Defect #9137: db:encrypt fails to handle repositories with blank password
292 293 * Defect #9394: Custom date field only validating on regex and not a valid date
293 294 * Defect #9405: Any user with :log_time permission can edit time entries via context menu
294 295 * Defect #9448: The attached images are not shown in documents
295 296 * Defect #9520: Copied private query not visible after project copy
296 297 * Defect #9552: Error when reading ciphered text from the database without cipher key configured
297 298 * Defect #9566: Redmine.pm considers all projects private when login_required is enabled
298 299 * Defect #9567: Redmine.pm potential security issue with cache credential enabled and subversion
299 300 * Defect #9577: Deleting a subtasks doesn't update parent's rgt & lft values
300 301 * Defect #9597: Broken version links in wiki annotate history
301 302 * Defect #9682: Wiki HTML Export only useful when Access history is accessible
302 303 * Defect #9737: Custom values deleted before issue submit
303 304 * Defect #9741: calendar-hr.js (Croatian) is not UTF-8
304 305 * Patch #9558: Simplified Chinese translation for 1.2.2 updated
305 306 * Patch #9695: Bulgarian translation (r7942)
306 307
307 308 == 2011-11-11 v1.2.2
308 309
309 310 * Defect #3276: Incorrect handling of anchors in Wiki to HTML export
310 311 * Defect #7215: Wiki formatting mangles links to internal headers
311 312 * Defect #7613: Generated test instances may share the same attribute value object
312 313 * Defect #8411: Can't remove "Project" column on custom query
313 314 * Defect #8615: Custom 'version' fields don't show shared versions
314 315 * Defect #8633: Pagination counts non visible issues
315 316 * Defect #8651: Email attachments are not added to issues any more in v1.2
316 317 * Defect #8825: JRuby + Windows: SCMs do not work on Redmine 1.2
317 318 * Defect #8836: Additional workflow transitions not available when set to both author and assignee
318 319 * Defect #8865: Custom field regular expression is not validated
319 320 * Defect #8880: Error deleting issue with grandchild
320 321 * Defect #8884: Assignee is cleared when updating issue with locked assignee
321 322 * Defect #8892: Unused fonts in rfpdf plugin folder
322 323 * Defect #9161: pt-BR field_warn_on_leaving_unsaved has a small gramatical error
323 324 * Defect #9308: Search fails when a role haven't "view wiki" permission
324 325 * Defect #9465: Mercurial: can't browse named branch below Mercurial 1.5
325 326
326 327 == 2011-07-11 v1.2.1
327 328
328 329 * Defect #5089: i18N error on truncated revision diff view
329 330 * Defect #7501: Search options get lost after clicking on a specific result type
330 331 * Defect #8229: "project.xml" response does not include the parent ID
331 332 * Defect #8449: Wiki annotated page does not display author of version 1
332 333 * Defect #8467: Missing german translation - Warn me when leaving a page with unsaved text
333 334 * Defect #8468: No warning when leaving page with unsaved text that has not lost focus
334 335 * Defect #8472: Private checkbox ignored on issue creation with "Set own issues public or private" permission
335 336 * Defect #8510: JRuby: Can't open administrator panel if scm command is not available
336 337 * Defect #8512: Syntax highlighter on Welcome page
337 338 * Defect #8554: Translation missing error on custom field validation
338 339 * Defect #8565: JRuby: Japanese PDF export error
339 340 * Defect #8566: Exported PDF UTF-8 Vietnamese not correct
340 341 * Defect #8569: JRuby: PDF export error with TypeError
341 342 * Defect #8576: Missing german translation - different things
342 343 * Defect #8616: Circular relations
343 344 * Defect #8646: Russian translation "label_follows" and "label_follows" are wrong
344 345 * Defect #8712: False 'Description updated' journal details messages
345 346 * Defect #8729: Not-public queries are not private
346 347 * Defect #8737: Broken line of long issue description on issue PDF.
347 348 * Defect #8738: Missing revision number/id of associated revisions on issue PDF
348 349 * Defect #8739: Workflow copy does not copy advanced workflow settings
349 350 * Defect #8759: Setting issue attributes from mail should be case-insensitive
350 351 * Defect #8777: Mercurial: Not able to Resetting Redmine project respository
351 352
352 353 == 2011-05-30 v1.2.0
353 354
354 355 * Defect #61: Broken character encoding in pdf export
355 356 * Defect #1965: Redmine is not Tab Safe
356 357 * Defect #2274: Filesystem Repository path encoding of non UTF-8 characters
357 358 * Defect #2664: Mercurial: Repository path encoding of non UTF-8 characters
358 359 * Defect #3421: Mercurial reads files from working dir instead of changesets
359 360 * Defect #3462: CVS: Repository path encoding of non UTF-8 characters
360 361 * Defect #3715: Login page should not show projects link and search box if authentication is required
361 362 * Defect #3724: Mercurial repositories display revision ID instead of changeset ID
362 363 * Defect #3761: Most recent CVS revisions are missing in "revisions" view
363 364 * Defect #4270: CVS Repository view in Project doesn't show Author, Revision, Comment
364 365 * Defect #5138: Don't use Ajax for pagination
365 366 * Defect #5152: Cannot use certain characters for user and role names.
366 367 * Defect #5251: Git: Repository path encoding of non UTF-8 characters
367 368 * Defect #5373: Translation missing when adding invalid watchers
368 369 * Defect #5817: Shared versions not shown in subproject's gantt chart
369 370 * Defect #6013: git tab,browsing, very slow -- even after first time
370 371 * Defect #6148: Quoting, newlines, and nightmares...
371 372 * Defect #6256: Redmine considers non ASCII and UTF-16 text files as binary in SCM
372 373 * Defect #6476: Subproject's issues are not shown in the subproject's gantt
373 374 * Defect #6496: Remove i18n 0.3.x/0.4.x hack for Rails 2.3.5
374 375 * Defect #6562: Context-menu deletion of issues deletes all subtasks too without explicit prompt
375 376 * Defect #6604: Issues targeted at parent project versions' are not shown on gantt chart
376 377 * Defect #6706: Resolving issues with the commit message produces the wrong comment with CVS
377 378 * Defect #6901: Copy/Move an issue does not give any history of who actually did the action.
378 379 * Defect #6905: Specific heading-content breaks CSS
379 380 * Defect #7000: Project filter not applied on versions in Gantt chart
380 381 * Defect #7097: Starting day of week cannot be set to Saturday
381 382 * Defect #7114: New gantt doesn't display some projects
382 383 * Defect #7146: Git adapter lost commits before 7 days from database latest changeset
383 384 * Defect #7218: Date range error on issue query
384 385 * Defect #7257: "Issues by" version links bad criterias
385 386 * Defect #7279: CSS class ".icon-home" is not used.
386 387 * Defect #7320: circular dependency >2 issues
387 388 * Defect #7352: Filters not working in Gantt charts
388 389 * Defect #7367: Receiving pop3 email should not output debug messages
389 390 * Defect #7373: Error with PDF output and ruby 1.9.2
390 391 * Defect #7379: Remove extraneous hidden_field on wiki history
391 392 * Defect #7516: Redmine does not work with RubyGems 1.5.0
392 393 * Defect #7518: Mercurial diff can be wrong if the previous changeset isn't the parent
393 394 * Defect #7581: Not including a spent time value on the main issue update screen causes silent data loss
394 395 * Defect #7582: hiding form pages from search engines
395 396 * Defect #7597: Subversion and Mercurial log have the possibility to miss encoding
396 397 * Defect #7604: ActionView::TemplateError (undefined method `name' for nil:NilClass)
397 398 * Defect #7605: Using custom queries always redirects to "Issues" tab
398 399 * Defect #7615: CVS diffs do not handle new files properly
399 400 * Defect #7618: SCM diffs do not handle one line new files properly
400 401 * Defect #7639: Some date fields do not have requested format.
401 402 * Defect #7657: Wrong commit range in git log command on Windows
402 403 * Defect #7818: Wiki pages don't use the local timezone to display the "Updated ? hours ago" mouseover
403 404 * Defect #7821: Git "previous" and "next" revisions are incorrect
404 405 * Defect #7827: CVS: Age column on repository view is off by timezone delta
405 406 * Defect #7843: Add a relation between issues = explicit login window ! (basic authentication popup is prompted on AJAX request)
406 407 * Defect #8011: {{toc}} does not display headlines with inline code markup
407 408 * Defect #8029: List of users for adding to a group may be empty if 100 first users have been added
408 409 * Defect #8064: Text custom fields do not wrap on the issue list
409 410 * Defect #8071: Watching a subtask from the context menu updates main issue watch link
410 411 * Defect #8072: Two untranslatable default role names
411 412 * Defect #8075: Some "notifiable" names are not i18n-enabled
412 413 * Defect #8081: GIT: Commits missing when user has the "decorate" git option enabled
413 414 * Defect #8088: Colorful indentation of subprojects must be on right in RTL locales
414 415 * Defect #8239: notes field is not propagated during issue copy
415 416 * Defect #8356: GET /time_entries.xml ignores limit/offset parameters
416 417 * Defect #8432: Private issues information shows up on Activity page for unauthorized users
417 418 * Feature #746: Versioned issue descriptions
418 419 * Feature #1067: Differentiate public/private saved queries in the sidebar
419 420 * Feature #1236: Make destination folder for attachment uploads configurable
420 421 * Feature #1735: Per project repository log encoding setting
421 422 * Feature #1763: Autologin-cookie should be configurable
422 423 * Feature #1981: display mercurial tags
423 424 * Feature #2074: Sending email notifications when comments are added in the news section
424 425 * Feature #2096: Custom fields referencing system tables (users and versions)
425 426 * Feature #2732: Allow additional workflow transitions for author and assignee
426 427 * Feature #2910: Warning on leaving edited issue/wiki page without saving
427 428 * Feature #3396: Git: use --encoding=UTF-8 in "git log"
428 429 * Feature #4273: SCM command availability automatic check in administration panel
429 430 * Feature #4477: Use mime types in downloading from repository
430 431 * Feature #5518: Graceful fallback for "missing translation" needed
431 432 * Feature #5520: Text format buttons and preview link missing when editing comment
432 433 * Feature #5831: Parent Task to Issue Bulk Edit
433 434 * Feature #6887: Upgrade to Rails 2.3.11
434 435 * Feature #7139: Highlight changes inside diff lines
435 436 * Feature #7236: Collapse All for Groups
436 437 * Feature #7246: Handle "named branch" for mercurial
437 438 * Feature #7296: Ability for admin to delete users
438 439 * Feature #7318: Add user agent to Redmine Mailhandler
439 440 * Feature #7408: Add an application configuration file
440 441 * Feature #7409: Cross project Redmine links
441 442 * Feature #7410: Add salt to user passwords
442 443 * Feature #7411: Option to cipher LDAP ans SCM passwords stored in the database
443 444 * Feature #7412: Add an issue visibility level to each role
444 445 * Feature #7414: Private issues
445 446 * Feature #7517: Configurable path of executable for scm adapters
446 447 * Feature #7640: Add "mystery man" gravatar to options
447 448 * Feature #7858: RubyGems 1.6 support
448 449 * Feature #7893: Group filter on the users list
449 450 * Feature #7899: Box for editing comments should open with the formatting toolbar
450 451 * Feature #7921: issues by pulldown should have 'status' option
451 452 * Feature #7996: Bulk edit and context menu for time entries
452 453 * Feature #8006: Right click context menu for Related Issues
453 454 * Feature #8209: I18n YAML files not parsable with psych yaml library
454 455 * Feature #8345: Link to user profile from account page
455 456 * Feature #8365: Git: per project setting to report last commit or not in repository tree
456 457 * Patch #5148: metaKey not handled in issues selection
457 458 * Patch #5629: Wrap text fields properly in PDF
458 459 * Patch #7418: Redmine Persian Translation
459 460 * Patch #8295: Wrap title fields properly in PDF
460 461 * Patch #8310: fixes automatic line break problem with TCPDF
461 462 * Patch #8312: Switch to TCPDF from FPDF for PDF export
462 463
463 464 == 2011-04-29 v1.1.3
464 465
465 466 * Defect #5773: Email reminders are sent to locked users
466 467 * Defect #6590: Wrong file list link in email notification on new file upload
467 468 * Defect #7589: Wiki page with backslash in title can not be found
468 469 * Defect #7785: Mailhandler keywords are not removed when updating issues
469 470 * Defect #7794: Internal server error on formatting an issue as a PDF in Japanese
470 471 * Defect #7838: Gantt- Issues does not show up in green when start and end date are the same
471 472 * Defect #7846: Headers (h1, etc.) containing backslash followed by a digit are not displayed correctly
472 473 * Defect #7875: CSV export separators in polish locale (pl.yml)
473 474 * Defect #7890: Internal server error when referencing an issue without project in commit message
474 475 * Defect #7904: Subprojects not properly deleted when deleting a parent project
475 476 * Defect #7939: Simultaneous Wiki Updates Cause Internal Error
476 477 * Defect #7951: Atom links broken on wiki index
477 478 * Defect #7954: IE 9 can not select issues, does not display context menu
478 479 * Defect #7985: Trying to do a bulk edit results in "Internal Error"
479 480 * Defect #8003: Error raised by reposman.rb under Windows server 2003
480 481 * Defect #8012: Wrong selection of modules when adding new project after validation error
481 482 * Defect #8038: Associated Revisions OL/LI items are not styled properly in issue view
482 483 * Defect #8067: CSV exporting in Italian locale
483 484 * Defect #8235: bulk edit issues and copy issues error in es, gl and ca locales
484 485 * Defect #8244: selected modules are not activated when copying a project
485 486 * Patch #7278: Update Simplified Chinese translation to 1.1
486 487 * Patch #7390: Fixes in Czech localization
487 488 * Patch #7963: Reminder email: Link for show all issues does not sort
488 489
489 490 == 2011-03-07 v1.1.2
490 491
491 492 * Defect #3132: Bulk editing menu non-functional in Opera browser
492 493 * Defect #6090: Most binary files become corrupted when downloading from CVS repository browser when Redmine is running on a Windows server
493 494 * Defect #7280: Issues subjects wrap in Gantt
494 495 * Defect #7288: Non ASCII filename downloaded from repo is broken on Internet Explorer.
495 496 * Defect #7317: Gantt tab gives internal error due to nil avatar icon
496 497 * Defect #7497: Aptana Studio .project file added to version 1.1.1-stable
497 498 * Defect #7611: Workflow summary shows X icon for workflow with exactly 1 status transition
498 499 * Defect #7625: Syntax highlighting unavailable from board new topic or topic edit preview
499 500 * Defect #7630: Spent time in commits not recognized
500 501 * Defect #7656: MySQL SQL Syntax Error when filtering issues by Assignee's Group
501 502 * Defect #7718: Minutes logged in commit message are converted to hours
502 503 * Defect #7763: Email notification are sent to watchers even if 'No events' setting is chosen
503 504 * Feature #7608: Add "retro" gravatars
504 505 * Patch #7598: Extensible MailHandler
505 506 * Patch #7795: Internal server error at journals#index with custom fields
506 507
507 508 == 2011-01-30 v1.1.1
508 509
509 510 * Defect #4899: Redmine fails to list files for darcs repository
510 511 * Defect #7245: Wiki fails to find pages with cyrillic characters using postgresql
511 512 * Defect #7256: redmine/public/.htaccess must be moved for non-fastcgi installs/upgrades
512 513 * Defect #7258: Automatic spent time logging does not work properly with SQLite3
513 514 * Defect #7259: Released 1.1.0 uses "devel" label inside admin information
514 515 * Defect #7265: "Loading..." icon does not disappear after add project member
515 516 * Defect #7266: Test test_due_date_distance_in_words fail due to undefined locale
516 517 * Defect #7274: CSV value separator in dutch locale
517 518 * Defect #7277: Enabling gravatas causes usernames to overlap first name field in user list
518 519 * Defect #7294: "Notifiy for only project I select" is not available anymore in 1.1.0
519 520 * Defect #7307: HTTP 500 error on query for empty revision
520 521 * Defect #7313: Label not translated in french in Settings/Email Notification tab
521 522 * Defect #7329: <code class="javascript"> with long strings may hang server
522 523 * Defect #7337: My page french translation
523 524 * Defect #7348: French Translation of "Connection"
524 525 * Defect #7385: Error when viewing an issue which was related to a deleted subtask
525 526 * Defect #7386: NoMethodError on pdf export
526 527 * Defect #7415: Darcs adapter recognizes new files as modified files above Darcs 2.4
527 528 * Defect #7421: no email sent with 'Notifiy for any event on the selected projects only'
528 529 * Feature #5344: Update to latest CodeRay 0.9.x
529 530
530 531 == 2011-01-09 v1.1.0
531 532
532 533 * Defect #2038: Italics in wiki headers show-up wrong in the toc
533 534 * Defect #3449: Redmine Takes Too Long On Large Mercurial Repository
534 535 * Defect #3567: Sorting for changesets might go wrong on Mercurial repos
535 536 * Defect #3707: {{toc}} doesn't work with {{include}}
536 537 * Defect #5096: Redmine hangs up while browsing Git repository
537 538 * Defect #6000: Safe Attributes prevents plugin extension of Issue model...
538 539 * Defect #6064: Modules not assigned to projects created via API
539 540 * Defect #6110: MailHandler should allow updating Issue Priority and Custom fields
540 541 * Defect #6136: JSON API holds less information than XML API
541 542 * Defect #6345: xml used by rest API is invalid
542 543 * Defect #6348: Gantt chart PDF rendering errors
543 544 * Defect #6403: Updating an issue with custom fields fails
544 545 * Defect #6467: "Member of role", "Member of group" filter not work correctly
545 546 * Defect #6473: New gantt broken after clearing issue filters
546 547 * Defect #6541: Email notifications send to everybody
547 548 * Defect #6549: Notification settings not migrated properly
548 549 * Defect #6591: Acronyms must have a minimum of three characters
549 550 * Defect #6674: Delete time log broken after changes to REST
550 551 * Defect #6681: Mercurial, Bazaar and Darcs auto close issue text should be commit id instead of revision number
551 552 * Defect #6724: Wiki uploads does not work anymore (SVN 4266)
552 553 * Defect #6746: Wiki links are broken on Activity page
553 554 * Defect #6747: Wiki diff does not work since r4265
554 555 * Defect #6763: New gantt charts: subject displayed twice on issues
555 556 * Defect #6826: Clicking "Add" twice creates duplicate member record
556 557 * Defect #6844: Unchecking status filter on the issue list has no effect
557 558 * Defect #6895: Wrong Polish translation of "blocks"
558 559 * Defect #6943: Migration from boolean to varchar fails on PostgreSQL 8.1
559 560 * Defect #7064: Mercurial adapter does not recognize non alphabetic nor numeric in UTF-8 copied files
560 561 * Defect #7128: New gantt chart does not render subtasks under parent task
561 562 * Defect #7135: paging mechanism returns the same last page forever
562 563 * Defect #7188: Activity page not refreshed when changing language
563 564 * Defect #7195: Apply CLI-supplied defaults for incoming mail only to new issues not replies
564 565 * Defect #7197: Tracker reset to default when replying to an issue email
565 566 * Defect #7213: Copy project does not copy all roles and permissions
566 567 * Defect #7225: Project settings: Trackers & Custom fields only relevant if module Issue tracking is active
567 568 * Feature #630: Allow non-unique names for projects
568 569 * Feature #1738: Add a "Visible" flag to project/user custom fields
569 570 * Feature #2803: Support for Javascript in Themes
570 571 * Feature #2852: Clean Incoming Email of quoted text "----- Reply above this line ------"
571 572 * Feature #2995: Improve error message when trying to access an archived project
572 573 * Feature #3170: Autocomplete issue relations on subject
573 574 * Feature #3503: Administrator Be Able To Modify Email settings Of Users
574 575 * Feature #4155: Automatic spent time logging from commit messages
575 576 * Feature #5136: Parent select on Wiki rename page
576 577 * Feature #5338: Descendants (subtasks) should be available via REST API
577 578 * Feature #5494: Wiki TOC should display heading from level 4
578 579 * Feature #5594: Improve MailHandler's keyword handling
579 580 * Feature #5622: Allow version to be set via incoming email
580 581 * Feature #5712: Reload themes
581 582 * Feature #5869: Issue filters by Group and Role
582 583 * Feature #6092: Truncate Git revision labels in Activity page/feed and allow configurable length
583 584 * Feature #6112: Accept localized keywords when receiving emails
584 585 * Feature #6140: REST issues response with issue count limit and offset
585 586 * Feature #6260: REST API for Users
586 587 * Feature #6276: Gantt Chart rewrite
587 588 * Feature #6446: Remove length limits on project identifier and name
588 589 * Feature #6628: Improvements in truncate email
589 590 * Feature #6779: Project JSON API
590 591 * Feature #6823: REST API for time tracker.
591 592 * Feature #7072: REST API for news
592 593 * Feature #7111: Expose more detail on journal entries
593 594 * Feature #7141: REST API: get information about current user
594 595 * Patch #4807: Allow to set the done_ratio field with the incoming mail system
595 596 * Patch #5441: Initialize TimeEntry attributes with params[:time_entry]
596 597 * Patch #6762: Use GET instead of POST to retrieve context_menu
597 598 * Patch #7160: French translation ofr "not_a_date" is missing
598 599 * Patch #7212: Missing remove_index in AddUniqueIndexOnMembers down migration
599 600
600 601
601 602 == 2010-12-23 v1.0.5
602 603
603 604 * #6656: Mercurial adapter loses seconds of commit times
604 605 * #6996: Migration trac(sqlite3) -> redmine(postgresql) doesnt escape ' char
605 606 * #7013: v-1.0.4 trunk - see {{count}} in page display rather than value
606 607 * #7016: redundant 'field_start_date' in ja.yml
607 608 * #7018: 'undefined method `reschedule_after' for nil:NilClass' on new issues
608 609 * #7024: E-mail notifications about Wiki changes.
609 610 * #7033: 'class' attribute of <pre> tag shouldn't be truncate
610 611 * #7035: CSV value separator in russian
611 612 * #7122: Issue-description Quote-button missing
612 613 * #7144: custom queries making use of deleted custom fields cause a 500 error
613 614 * #7162: Multiply defined label in french translation
614 615
615 616 == 2010-11-28 v1.0.4
616 617
617 618 * #5324: Git not working if color.ui is enabled
618 619 * #6447: Issues API doesn't allow full key auth for all actions
619 620 * #6457: Edit User group problem
620 621 * #6575: start date being filled with current date even when blank value is submitted
621 622 * #6740: Max attachment size, incorrect usage of 'KB'
622 623 * #6760: Select box sorted by ID instead of name in Issue Category
623 624 * #6766: Changing target version name can cause an internal error
624 625 * #6784: Redmine not working with i18n gem 0.4.2
625 626 * #6839: Hardcoded absolute links in my/page_layout
626 627 * #6841: Projects API doesn't allow full key auth for all actions
627 628 * #6860: svn: Write error: Broken pipe when browsing repository
628 629 * #6874: API should return XML description when creating a project
629 630 * #6932: submitting wrong parent task input creates a 500 error
630 631 * #6966: Records of Forums are remained, deleting project
631 632 * #6990: Layout problem in workflow overview
632 633 * #5117: mercurial_adapter should ensure the right LANG environment variable
633 634 * #6782: Traditional Chinese language file (to r4352)
634 635 * #6783: Swedish Translation for r4352
635 636 * #6804: Bugfix: spelling fixes
636 637 * #6814: Japanese Translation for r4362
637 638 * #6948: Bulgarian translation
638 639 * #6973: Update es.yml
639 640
640 641 == 2010-10-31 v1.0.3
641 642
642 643 * #4065: Redmine.pm doesn't work with LDAPS and a non-standard port
643 644 * #4416: Link from version details page to edit the wiki.
644 645 * #5484: Add new issue as subtask to an existing ticket
645 646 * #5948: Update help/wiki_syntax_detailed.html with more link options
646 647 * #6494: Typo in pt_BR translation for 1.0.2
647 648 * #6508: Japanese translation update
648 649 * #6509: Localization pt-PT (new strings)
649 650 * #6511: Rake task to test email
650 651 * #6525: Traditional Chinese language file (to r4225)
651 652 * #6536: Patch for swedish translation
652 653 * #6548: Rake tasks to add/remove i18n strings
653 654 * #6569: Updated Hebrew translation
654 655 * #6570: Japanese Translation for r4231
655 656 * #6596: pt-BR translation updates
656 657 * #6629: Change field-name of issues start date
657 658 * #6669: Bulgarian translation
658 659 * #6731: Macedonian translation fix
659 660 * #6732: Japanese Translation for r4287
660 661 * #6735: Add user-agent to reposman
661 662 * #6736: Traditional Chinese language file (to r4288)
662 663 * #6739: Swedish Translation for r4288
663 664 * #6765: Traditional Chinese language file (to r4302)
664 665 * Fixed #5324: Git not working if color.ui is enabled
665 666 * Fixed #5652: Bad URL parsing in the wiki when it ends with right-angle-bracket(greater-than mark).
666 667 * Fixed #5803: Precedes/Follows Relationships Broke
667 668 * Fixed #6435: Links to wikipages bound to versions do not respect version-sharing in Settings -> Versions
668 669 * Fixed #6438: Autologin cannot be disabled again once it's enabled
669 670 * Fixed #6513: "Move" and "Copy" are not displayed when deployed in subdirectory
670 671 * Fixed #6521: Tooltip/label for user "search-refinment" field on group/project member list
671 672 * Fixed #6563: i18n-issues on calendar view
672 673 * Fixed #6598: Wrong caption for button_create_and_continue in German language file
673 674 * Fixed #6607: Unclear caption for german button_update
674 675 * Fixed #6612: SortHelper missing from CalendarsController
675 676 * Fixed #6740: Max attachment size, incorrect usage of 'KB'
676 677 * Fixed #6750: ActionView::TemplateError (undefined method `empty?' for nil:NilClass) on line #12 of app/views/context_menus/issues.html.erb:
677 678
678 679 == 2010-09-26 v1.0.2
679 680
680 681 * #2285: issue-refinement: pressing enter should result to an "apply"
681 682 * #3411: Allow mass status update trough context menu
682 683 * #5929: https-enabled gravatars when called over https
683 684 * #6189: Japanese Translation for r4011
684 685 * #6197: Traditional Chinese language file (to r4036)
685 686 * #6198: Updated german translation
686 687 * #6208: Macedonian translation
687 688 * #6210: Swedish Translation for r4039
688 689 * #6248: nl translation update for r4050
689 690 * #6263: Catalan translation update
690 691 * #6275: After submitting a related issue, the Issue field should be re-focused
691 692 * #6289: Checkboxes in issues list shouldn't be displayed when printing
692 693 * #6290: Make journals theming easier
693 694 * #6291: User#allowed_to? is not tested
694 695 * #6306: Traditional Chinese language file (to r4061)
695 696 * #6307: Korean translation update for 4066(4061)
696 697 * #6316: pt_BR update
697 698 * #6339: SERBIAN Updated
698 699 * #6358: Updated Polish translation
699 700 * #6363: Japanese Translation for r4080
700 701 * #6365: Traditional Chinese language file (to r4081)
701 702 * #6382: Issue PDF export variable usage
702 703 * #6428: Interim solution for i18n >= 0.4
703 704 * #6441: Japanese Translation for r4162
704 705 * #6451: Traditional Chinese language file (to r4167)
705 706 * #6465: Japanese Translation for r4171
706 707 * #6466: Traditional Chinese language file (to r4171)
707 708 * #6490: pt-BR translation for 1.0.2
708 709 * Fixed #3935: stylesheet_link_tag with plugin doesn't take into account relative_url_root
709 710 * Fixed #4998: Global issue list's context menu has enabled options for parent menus but there are no valid selections
710 711 * Fixed #5170: Done ratio can not revert to 0% if status is used for done ratio
711 712 * Fixed #5608: broken with i18n 0.4.0
712 713 * Fixed #6054: Error 500 on filenames with whitespace in git reposities
713 714 * Fixed #6135: Default logger configuration grows without bound.
714 715 * Fixed #6191: Deletion of a main task deletes all subtasks
715 716 * Fixed #6195: Missing move issues between projects
716 717 * Fixed #6242: can't switch between inline and side-by-side diff
717 718 * Fixed #6249: Create and continue returns 404
718 719 * Fixed #6267: changing the authentication mode from ldap to internal with setting the password
719 720 * Fixed #6270: diff coderay malformed in the "news" page
720 721 * Fixed #6278: missing "cant_link_an_issue_with_a_descendant"from locale files
721 722 * Fixed #6333: Create and continue results in a 404 Error
722 723 * Fixed #6346: Age column on repository view is skewed for git, probably CVS too
723 724 * Fixed #6351: Context menu on roadmap broken
724 725 * Fixed #6388: New Subproject leads to a 404
725 726 * Fixed #6392: Updated/Created links to activity broken
726 727 * Fixed #6413: Error in SQL
727 728 * Fixed #6443: Redirect to project settings after Copying a Project
728 729 * Fixed #6448: Saving a wiki page with no content has a translation missing
729 730 * Fixed #6452: Unhandled exception on creating File
730 731 * Fixed #6471: Typo in label_report in Czech translation
731 732 * Fixed #6479: Changing tracker type will lose watchers
732 733 * Fixed #6499: Files with leading or trailing whitespace are not shown in git.
733 734
734 735 == 2010-08-22 v1.0.1
735 736
736 737 * #819: Add a body ID and class to all pages
737 738 * #871: Commit new CSS styles!
738 739 * #3301: Add favicon to base layout
739 740 * #4656: On Issue#show page, clicking on Ò€œAdd related issueҀ� should focus on the input
740 741 * #4896: Project identifier should be a limited field
741 742 * #5084: Filter all isssues by projects
742 743 * #5477: Replace Test::Unit::TestCase with ActiveSupport::TestCase
743 744 * #5591: 'calendar' action is used with 'issue' controller in issue/sidebar
744 745 * #5735: Traditional Chinese language file (to r3810)
745 746 * #5740: Swedish Translation for r3810
746 747 * #5785: pt-BR translation update
747 748 * #5898: Projects should be displayed as links in users/memberships
748 749 * #5910: Chinese translation to redmine-1.0.0
749 750 * #5912: Translation update for french locale
750 751 * #5962: Hungarian translation update to r3892
751 752 * #5971: Remove falsly applied chrome on revision links
752 753 * #5972: Updated Hebrew translation for 1.0.0
753 754 * #5982: Updated german translation
754 755 * #6008: Move admin_menu to Redmine::MenuManager
755 756 * #6012: RTL layout
756 757 * #6021: Spanish translation 1.0.0-RC
757 758 * #6025: nl translation updated for r3905
758 759 * #6030: Japanese Translation for r3907
759 760 * #6074: sr-CY.yml contains DOS-type newlines (\r\n)
760 761 * #6087: SERBIAN translation updated
761 762 * #6093: Updated italian translation
762 763 * #6142: Swedish Translation for r3940
763 764 * #6153: Move view_calendar and view_gantt to own modules
764 765 * #6169: Add issue status to issue tooltip
765 766 * Fixed #3834: Add a warning when not choosing a member role
766 767 * Fixed #3922: Bad english arround "Assigned to" text in journal entries
767 768 * Fixed #5158: Simplified Chinese language file zh.yml updated to r3608
768 769 * Fixed #5162: translation missing: zh-TW, field_time_entrie
769 770 * Fixed #5297: openid not validated correctly
770 771 * Fixed #5628: Wrong commit range in git log command
771 772 * Fixed #5760: Assigned_to and author filters in "Projects>View all issues" should be based on user's project visibility
772 773 * Fixed #5771: Problem when importing git repository
773 774 * Fixed #5775: ldap authentication in admin menu should have an icon
774 775 * Fixed #5811: deleting statuses doesnt delete workflow entries
775 776 * Fixed #5834: Emails with trailing spaces incorrectly detected as invalid
776 777 * Fixed #5846: ChangeChangesPathLengthLimit does not remove default for MySQL
777 778 * Fixed #5861: Vertical scrollbar always visible in Wiki "code" blocks in Chrome.
778 779 * Fixed #5883: correct label_project_latest Chinese translation
779 780 * Fixed #5892: Changing status from contextual menu opens the ticket instead
780 781 * Fixed #5904: Global gantt PDF and PNG should display project names
781 782 * Fixed #5925: parent task's priority edit should be disabled through shortcut menu in issues list page
782 783 * Fixed #5935: Add Another file to ticket doesn't work in IE Internet Explorer
783 784 * Fixed #5937: Harmonize french locale "zero" translation with other locales
784 785 * Fixed #5945: Forum message permalinks don't take pagination into account
785 786 * Fixed #5978: Debug code still remains
786 787 * Fixed #6009: When using "English (British)", the repository browser (svn) shows files over 1000 bytes as floating point (2.334355)
787 788 * Fixed #6045: Repository file Diff view sometimes shows more than selected file
788 789 * Fixed #6079: German Translation error in TimeEntryActivity
789 790 * Fixed #6100: User's profile should display all visible projects
790 791 * Fixed #6132: Allow Key based authentication in the Boards atom feed
791 792 * Fixed #6163: Bad CSS class for calendar project menu_item
792 793 * Fixed #6172: Browsing to a missing user's page shows the admin sidebar
793 794
794 795 == 2010-07-18 v1.0.0 (Release candidate)
795 796
796 797 * #443: Adds context menu to the roadmap issue lists
797 798 * #443: Subtasking
798 799 * #741: Description preview while editing an issue
799 800 * #1131: Add support for alternate (non-LDAP) authentication
800 801 * #1214: REST API for Issues
801 802 * #1223: File upload on wiki edit form
802 803 * #1755: add "blocked by" as a related issues option
803 804 * #2420: Fetching emails from an POP server
804 805 * #2482: Named scopes in Issue and ActsAsWatchable plus some view refactoring (logic extraction).
805 806 * #2924: Make the right click menu more discoverable using a cursor property
806 807 * #2985: Make syntax highlighting pluggable
807 808 * #3201: Workflow Check/Uncheck All Rows/Columns
808 809 * #3359: Update CodeRay 0.9
809 810 * #3706: Allow assigned_to field configuration on Issue creation by email
810 811 * #3936: configurable list of models to include in search
811 812 * #4480: Create a link to the user profile from the administration interface
812 813 * #4482: Cache textile rendering
813 814 * #4572: Make it harder to ruin your database
814 815 * #4573: Move github gems to Gemcutter
815 816 * #4664: Add pagination to forum threads
816 817 * #4732: Make login case-insensitive also for PostgreSQL
817 818 * #4812: Create links to other projects
818 819 * #4819: Replace images with smushed ones for speed
819 820 * #4945: Allow custom fields attached to project to be searchable
820 821 * #5121: Fix issues list layout overflow
821 822 * #5169: Issue list view hook request
822 823 * #5208: Aibility to edit wiki sidebar
823 824 * #5281: Remove empty ul tags in the issue history
824 825 * #5291: Updated basque translations
825 826 * #5328: Automatically add "Repository" menu_item after repository creation
826 827 * #5415: Fewer SQL statements generated for watcher_recipients
827 828 * #5416: Exclude "fields_for" from overridden methods in TabularFormBuilder
828 829 * #5573: Allow issue assignment in email
829 830 * #5595: Allow start date and due dates to be set via incoming email
830 831 * #5752: The projects view (/projects) renders ul's wrong
831 832 * #5781: Allow to use more macros on the welcome page and project list
832 833 * Fixed #1288: Unable to past escaped wiki syntax in an issue description
833 834 * Fixed #1334: Wiki formatting character *_ and _*
834 835 * Fixed #1416: Inline code with less-then/greater-than produces @lt; and @gt; respectively
835 836 * Fixed #2473: Login and mail should not be case sensitive
836 837 * Fixed #2990: Ruby 1.9 - wrong number of arguments (1 for 0) on rake db:migrate
837 838 * Fixed #3089: Text formatting sometimes breaks when combined
838 839 * Fixed #3690: Status change info duplicates on the issue screen
839 840 * Fixed #3691: Redmine allows two files with the same file name to be uploaded to the same issue
840 841 * Fixed #3764: ApplicationHelperTest fails with JRuby
841 842 * Fixed #4265: Unclosed code tags in issue descriptions affects main UI
842 843 * Fixed #4745: Bug in index.xml.builder (issues)
843 844 * Fixed #4852: changing user/roles of project member not possible without javascript
844 845 * Fixed #4857: Week number calculation in date picker is wrong if a week starts with Sunday
845 846 * Fixed #4883: Bottom "contextual" placement in issue with associated changeset
846 847 * Fixed #4918: Revisions r3453 and r3454 broke On-the-fly user creation with LDAP
847 848 * Fixed #4935: Navigation to the Master Timesheet page (time_entries)
848 849 * Fixed #5043: Flash messages are not displayed after the project settings[module/activity] saved
849 850 * Fixed #5081: Broken links on public/help/wiki_syntax_detailed.html
850 851 * Fixed #5104: Description of document not wikified on documents index
851 852 * Fixed #5108: Issue linking fails inside of []s
852 853 * Fixed #5199: diff code coloring using coderay
853 854 * Fixed #5233: Add a hook to the issue report (Summary) view
854 855 * Fixed #5265: timetracking: subtasks time is added to the main task
855 856 * Fixed #5343: acts_as_event Doesn't Accept Outside URLs
856 857 * Fixed #5440: UI Inconsistency : Administration > Enumerations table row headers should be enclosed in <thead>
857 858 * Fixed #5463: 0.9.4 INSTALL and/or UPGRADE, missing session_store.rb
858 859 * Fixed #5524: Update_parent_attributes doesn't work for the old parent issue when reparenting
859 860 * Fixed #5548: SVN Repository: Can not list content of a folder which includes square brackets.
860 861 * Fixed #5589: "with subproject" malfunction
861 862 * Fixed #5676: Search for Numeric Value
862 863 * Fixed #5696: Redmine + PostgreSQL 8.4.4 fails on _dir_list_content.rhtml
863 864 * Fixed #5698: redmine:email:receive_imap fails silently for mails with subject longer than 255 characters
864 865 * Fixed #5700: TimelogController#destroy assumes success
865 866 * Fixed #5751: developer role is mispelled
866 867 * Fixed #5769: Popup Calendar doesn't Advance in Chrome
867 868 * Fixed #5771: Problem when importing git repository
868 869 * Fixed #5823: Error in comments in plugin.rb
869 870
870 871
871 872 == 2010-07-07 v0.9.6
872 873
873 874 * Fixed: Redmine.pm access by unauthorized users
874 875
875 876 == 2010-06-24 v0.9.5
876 877
877 878 * Linkify folder names on revision view
878 879 * "fiters" and "options" should be hidden in print view via css
879 880 * Fixed: NoMethodError when no issue params are submitted
880 881 * Fixed: projects.atom with required authentication
881 882 * Fixed: External links not correctly displayed in Wiki TOC
882 883 * Fixed: Member role forms in project settings are not hidden after member added
883 884 * Fixed: pre can't be inside p
884 885 * Fixed: session cookie path does not respect RAILS_RELATIVE_URL_ROOT
885 886 * Fixed: mail handler fails when the from address is empty
886 887
887 888
888 889 == 2010-05-01 v0.9.4
889 890
890 891 * Filters collapsed by default on issues index page for a saved query
891 892 * Fixed: When categories list is too big the popup menu doesn't adjust (ex. in the issue list)
892 893 * Fixed: remove "main-menu" div when the menu is empty
893 894 * Fixed: Code syntax highlighting not working in Document page
894 895 * Fixed: Git blame/annotate fails on moved files
895 896 * Fixed: Failing test in test_show_atom
896 897 * Fixed: Migrate from trac - not displayed Wikis
897 898 * Fixed: Email notifications on file upload sent to empty recipient list
898 899 * Fixed: Migrating from trac is not possible, fails to allocate memory
899 900 * Fixed: Lost password no longer flashes a confirmation message
900 901 * Fixed: Crash while deleting in-use enumeration
901 902 * Fixed: Hard coded English string at the selection of issue watchers
902 903 * Fixed: Bazaar v2.1.0 changed behaviour
903 904 * Fixed: Roadmap display can raise an exception if no trackers are selected
904 905 * Fixed: Gravatar breaks layout of "logged in" page
905 906 * Fixed: Reposman.rb on Windows
906 907 * Fixed: Possible error 500 while moving an issue to another project with SQLite
907 908 * Fixed: backslashes in issue description/note should be escaped when quoted
908 909 * Fixed: Long text in <pre> disrupts Associated revisions
909 910 * Fixed: Links to missing wiki pages not red on project overview page
910 911 * Fixed: Cannot delete a project with subprojects that shares versions
911 912 * Fixed: Update of Subversion changesets broken under Solaris
912 913 * Fixed: "Move issues" permission not working for Non member
913 914 * Fixed: Sidebar overlap on Users tab of Group editor
914 915 * Fixed: Error on db:migrate with table prefix set (hardcoded name in principal.rb)
915 916 * Fixed: Report shows sub-projects for non-members
916 917 * Fixed: 500 internal error when browsing any Redmine page in epiphany
917 918 * Fixed: Watchers selection lost when issue creation fails
918 919 * Fixed: When copying projects, redmine should not generate an email to people who created issues
919 920 * Fixed: Issue "#" table cells should have a class attribute to enable fine-grained CSS theme
920 921 * Fixed: Plugin generators should display help if no parameter is given
921 922
922 923
923 924 == 2010-02-28 v0.9.3
924 925
925 926 * Adds filter for system shared versions on the cross project issue list
926 927 * Makes project identifiers searchable
927 928 * Remove invalid utf8 sequences from commit comments and author name
928 929 * Fixed: Wrong link when "http" not included in project "Homepage" link
929 930 * Fixed: Escaping in html email templates
930 931 * Fixed: Pound (#) followed by number with leading zero (0) removes leading zero when rendered in wiki
931 932 * Fixed: Deselecting textile text formatting causes interning empty string errors
932 933 * Fixed: error with postgres when entering a non-numeric id for an issue relation
933 934 * Fixed: div.task incorrectly wrapping on Gantt Chart
934 935 * Fixed: Project copy loses wiki pages hierarchy
935 936 * Fixed: parent project field doesn't include blank value when a member with 'add subproject' permission edits a child project
936 937 * Fixed: Repository.fetch_changesets tries to fetch changesets for archived projects
937 938 * Fixed: Duplicated project name for subproject version on gantt chart
938 939 * Fixed: roadmap shows subprojects issues even if subprojects is unchecked
939 940 * Fixed: IndexError if all the :last menu items are deleted from a menu
940 941 * Fixed: Very high CPU usage for a long time when fetching commits from a large Git repository
941 942
942 943
943 944 == 2010-02-07 v0.9.2
944 945
945 946 * Fixed: Sub-project repository commits not displayed on parent project issues
946 947 * Fixed: Potential security leak on my page calendar
947 948 * Fixed: Project tree structure is broken by deleting the project with the subproject
948 949 * Fixed: Error message shown duplicated when creating a new group
949 950 * Fixed: Firefox cuts off large pages
950 951 * Fixed: Invalid format parameter returns a DoubleRenderError on issues index
951 952 * Fixed: Unnecessary Quote button on locked forum message
952 953 * Fixed: Error raised when trying to view the gantt or calendar with a grouped query
953 954 * Fixed: PDF support for Korean locale
954 955 * Fixed: Deprecation warning in extra/svn/reposman.rb
955 956
956 957
957 958 == 2010-01-30 v0.9.1
958 959
959 960 * Vertical alignment for inline images in formatted text set to 'middle'
960 961 * Fixed: Redmine.pm error "closing dbh with active statement handles at /usr/lib/perl5/Apache/Redmine.pm"
961 962 * Fixed: copyright year in footer set to 2010
962 963 * Fixed: Trac migration script may not output query lines
963 964 * Fixed: Email notifications may affect language of notice messages on the UI
964 965 * Fixed: Can not search for 2 letters word
965 966 * Fixed: Attachments get saved on issue update even if validation fails
966 967 * Fixed: Tab's 'border-bottom' not absent when selected
967 968 * Fixed: Issue summary tables that list by user are not sorted
968 969 * Fixed: Issue pdf export fails if target version is set
969 970 * Fixed: Issue list export to PDF breaks when issues are sorted by a custom field
970 971 * Fixed: SQL error when adding a group
971 972 * Fixes: Min password length during password reset always displays as 4 chars
972 973
973 974
974 975 == 2010-01-09 v0.9.0 (Release candidate)
975 976
976 977 * Unlimited subproject nesting
977 978 * Multiple roles per user per project
978 979 * User groups
979 980 * Inheritence of versions
980 981 * OpenID login
981 982 * "Watched by me" issue filter
982 983 * Project copy
983 984 * Project creation by non admin users
984 985 * Accept emails from anyone on a private project
985 986 * Add email notification on Wiki changes
986 987 * Make issue description non-required field
987 988 * Custom fields for Versions
988 989 * Being able to sort the issue list by custom fields
989 990 * Ability to close versions
990 991 * User display/editing of custom fields attached to their user profile
991 992 * Add "follows" issue relation
992 993 * Copy workflows between trackers and roles
993 994 * Defaults enabled modules list for project creation
994 995 * Weighted version completion percentage on the roadmap
995 996 * Autocreate user account when user submits email that creates new issue
996 997 * CSS class on overdue issues on the issue list
997 998 * Enable tracker update on issue edit form
998 999 * Remove issue watchers
999 1000 * Ability to move threads between project forums
1000 1001 * Changed custom field "Possible values" to a textarea
1001 1002 * Adds projects association on tracker form
1002 1003 * Set session store to cookie store by default
1003 1004 * Set a default wiki page on project creation
1004 1005 * Roadmap for main project should see Roadmaps for sub projects
1005 1006 * Ticket grouping on the issue list
1006 1007 * Hierarchical Project links in the page header
1007 1008 * Allow My Page blocks to be added to from a plugin
1008 1009 * Sort issues by multiple columns
1009 1010 * Filters of saved query are now visible and be adjusted without editing the query
1010 1011 * Saving "sort order" in custom queries
1011 1012 * Url to fetch changesets for a repository
1012 1013 * Managers able to create subprojects
1013 1014 * Issue Totals on My Page Modules
1014 1015 * Convert Enumerations to single table inheritance (STI)
1015 1016 * Allow custom my_page blocks to define drop-down names
1016 1017 * "View Issues" user permission added
1017 1018 * Ask user what to do with child pages when deleting a parent wiki page
1018 1019 * Contextual quick search
1019 1020 * Allow resending of password by email
1020 1021 * Change reply subject to be a link to the reply itself
1021 1022 * Include Logged Time as part of the project's Activity history
1022 1023 * REST API for authentication
1023 1024 * Browse through Git branches
1024 1025 * Setup Object Daddy to replace test fixtures
1025 1026 * Setup shoulda to make it easier to test
1026 1027 * Custom fields and overrides on Enumerations
1027 1028 * Add or remove columns from the issue list
1028 1029 * Ability to add new version from issues screen
1029 1030 * Setting to choose which day calendars start
1030 1031 * Asynchronous email delivery method
1031 1032 * RESTful URLs for (almost) everything
1032 1033 * Include issue status in search results and activity pages
1033 1034 * Add email to admin user search filter
1034 1035 * Proper content type for plain text mails
1035 1036 * Default value of project jump box
1036 1037 * Tree based menus
1037 1038 * Ability to use issue status to update percent done
1038 1039 * Second set of issue "Action Links" at the bottom of an issue page
1039 1040 * Proper exist status code for rdm-mailhandler.rb
1040 1041 * Remove incoming email body via a delimiter
1041 1042 * Fixed: Custom querry 'Export to PDF' ignores field selection
1042 1043 * Fixed: Related e-mail notifications aren't threaded
1043 1044 * Fixed: No warning when the creation of a categories from the issue form fails
1044 1045 * Fixed: Actually block issues from closing when relation 'blocked by' isn't closed
1045 1046 * Fixed: Include both first and last name when sorting by users
1046 1047 * Fixed: Table cell with multiple line text
1047 1048 * Fixed: Project overview page shows disabled trackers
1048 1049 * Fixed: Cross project issue relations and user permissions
1049 1050 * Fixed: My page shows tickets the user doesn't have access to
1050 1051 * Fixed: TOC does not parse wiki page reference links with description
1051 1052 * Fixed: Target version-list on bulk edit form is incorrectly sorted
1052 1053 * Fixed: Cannot modify/delete project named "Documents"
1053 1054 * Fixed: Email address in brackets breaks html
1054 1055 * Fixed: Timelog detail loose issue filter passing to report tab
1055 1056 * Fixed: Inform about custom field's name maximum length
1056 1057 * Fixed: Activity page and Atom feed links contain project id instead of identifier
1057 1058 * Fixed: no Atom key for forums with only 1 forum
1058 1059 * Fixed: When reading RSS feed in MS Outlook, the inline links are broken.
1059 1060 * Fixed: Sometimes new posts don't show up in the topic list of a forum.
1060 1061 * Fixed: The all/active filter selection in the project view does not stick.
1061 1062 * Fixed: Login box has Different width
1062 1063 * Fixed: User removed from project - still getting project update emails
1063 1064 * Fixed: Project with the identifier of 'new' cannot be viewed
1064 1065 * Fixed: Artefacts in search view (Cyrillic)
1065 1066 * Fixed: Allow [#id] as subject to reply by email
1066 1067 * Fixed: Wrong language used when closing an issue via a commit message
1067 1068 * Fixed: email handler drops emails for new issues with no subject
1068 1069 * Fixed: Calendar misspelled under Roles/Permissions
1069 1070 * Fixed: Emails from no-reply redmine's address hell cycle
1070 1071 * Fixed: child_pages macro fails on wiki page history
1071 1072 * Fixed: Pre-filled time tracking date ignores timezone
1072 1073 * Fixed: Links on locked users lead to 404 page
1073 1074 * Fixed: Page changes in issue-list when using context menu
1074 1075 * Fixed: diff parser removes lines starting with multiple dashes
1075 1076 * Fixed: Quoting in forums resets message subject
1076 1077 * Fixed: Editing issue comment removes quote link
1077 1078 * Fixed: Redmine.pm ignore browse_repository permission
1078 1079 * Fixed: text formatting breaks on [msg1][msg2]
1079 1080 * Fixed: Spent Time Default Value of 0.0
1080 1081 * Fixed: Wiki pages in search results are referenced by project number, not by project identifier.
1081 1082 * Fixed: When logging in via an autologin cookie the user's last_login_on should be updated
1082 1083 * Fixed: 50k users cause problems in project->settings->members screen
1083 1084 * Fixed: Document timestamp needs to show updated timestamps
1084 1085 * Fixed: Users getting notifications for issues they are no longer allowed to view
1085 1086 * Fixed: issue summary counts should link to the issue list without subprojects
1086 1087 * Fixed: 'Delete' link on LDAP list has no effect
1087 1088
1088 1089
1089 1090 == 2009-11-15 v0.8.7
1090 1091
1091 1092 * Fixed: Hide paragraph terminator at the end of headings on html export
1092 1093 * Fixed: pre tags containing "<pre*"
1093 1094 * Fixed: First date of the date range not included in the time report with SQLite
1094 1095 * Fixed: Password field not styled correctly on alternative stylesheet
1095 1096 * Fixed: Error when sumbitting a POST request that requires a login
1096 1097 * Fixed: CSRF vulnerabilities
1097 1098
1098 1099
1099 1100 == 2009-11-04 v0.8.6
1100 1101
1101 1102 * Change links to closed issues to be a grey color
1102 1103 * Change subversion adapter to not cache authentication and run non interactively
1103 1104 * Fixed: Custom Values with a nil value cause HTTP error 500
1104 1105 * Fixed: Failure to convert HTML entities when editing an Issue reply
1105 1106 * Fixed: Error trying to show repository when there are no comments in a changeset
1106 1107 * Fixed: account/show/:user_id should not be accessible for other users not in your projects
1107 1108 * Fixed: XSS vulnerabilities
1108 1109 * Fixed: IssuesController#destroy should accept POST only
1109 1110 * Fixed: Inline images in wiki headings
1110 1111
1111 1112
1112 1113 == 2009-09-13 v0.8.5
1113 1114
1114 1115 * Incoming mail handler : Allow spaces between keywords and colon
1115 1116 * Do not require a non-word character after a comma in Redmine links
1116 1117 * Include issue hyperlinks in reminder emails
1117 1118 * Prevent nil error when retrieving svn version
1118 1119 * Various plugin hooks added
1119 1120 * Add plugins information to script/about
1120 1121 * Fixed: 500 Internal Server Error is raised if add an empty comment to the news
1121 1122 * Fixed: Atom links for wiki pages are not correct
1122 1123 * Fixed: Atom feeds leak email address
1123 1124 * Fixed: Case sensitivity in Issue filtering
1124 1125 * Fixed: When reading RSS feed, the inline-embedded images are not properly shown
1125 1126
1126 1127
1127 1128 == 2009-05-17 v0.8.4
1128 1129
1129 1130 * Allow textile mailto links
1130 1131 * Fixed: memory consumption when uploading file
1131 1132 * Fixed: Mercurial integration doesn't work if Redmine is installed in folder path containing space
1132 1133 * Fixed: an error is raised when no tab is available on project settings
1133 1134 * Fixed: insert image macro corrupts urls with excalamation marks
1134 1135 * Fixed: error on cross-project gantt PNG export
1135 1136 * Fixed: self and alternate links in atom feeds do not respect Atom specs
1136 1137 * Fixed: accept any svn tunnel scheme in repository URL
1137 1138 * Fixed: issues/show should accept user's rss key
1138 1139 * Fixed: consistency of custom fields display on the issue detail view
1139 1140 * Fixed: wiki comments length validation is missing
1140 1141 * Fixed: weak autologin token generation algorithm causes duplicate tokens
1141 1142
1142 1143
1143 1144 == 2009-04-05 v0.8.3
1144 1145
1145 1146 * Separate project field and subject in cross-project issue view
1146 1147 * Ability to set language for redmine:load_default_data task using REDMINE_LANG environment variable
1147 1148 * Rescue Redmine::DefaultData::DataAlreadyLoaded in redmine:load_default_data task
1148 1149 * CSS classes to highlight own and assigned issues
1149 1150 * Hide "New file" link on wiki pages from printing
1150 1151 * Flush buffer when asking for language in redmine:load_default_data task
1151 1152 * Minimum project identifier length set to 1
1152 1153 * Include headers so that emails don't trigger vacation auto-responders
1153 1154 * Fixed: Time entries csv export links for all projects are malformed
1154 1155 * Fixed: Files without Version aren't visible in the Activity page
1155 1156 * Fixed: Commit logs are centered in the repo browser
1156 1157 * Fixed: News summary field content is not searchable
1157 1158 * Fixed: Journal#save has a wrong signature
1158 1159 * Fixed: Email footer signature convention
1159 1160 * Fixed: Timelog report do not show time for non-versioned issues
1160 1161
1161 1162
1162 1163 == 2009-03-07 v0.8.2
1163 1164
1164 1165 * Send an email to the user when an administrator activates a registered user
1165 1166 * Strip keywords from received email body
1166 1167 * Footer updated to 2009
1167 1168 * Show RSS-link even when no issues is found
1168 1169 * One click filter action in activity view
1169 1170 * Clickable/linkable line #'s while browsing the repo or viewing a file
1170 1171 * Links to versions on files list
1171 1172 * Added request and controller objects to the hooks by default
1172 1173 * Fixed: exporting an issue with attachments to PDF raises an error
1173 1174 * Fixed: "too few arguments" error may occur on activerecord error translation
1174 1175 * Fixed: "Default columns Displayed on the Issues list" setting is not easy to read
1175 1176 * Fixed: visited links to closed tickets are not striked through with IE6
1176 1177 * Fixed: MailHandler#plain_text_body returns nil if there was nothing to strip
1177 1178 * Fixed: MailHandler raises an error when processing an email without From header
1178 1179
1179 1180
1180 1181 == 2009-02-15 v0.8.1
1181 1182
1182 1183 * Select watchers on new issue form
1183 1184 * Issue description is no longer a required field
1184 1185 * Files module: ability to add files without version
1185 1186 * Jump to the current tab when using the project quick-jump combo
1186 1187 * Display a warning if some attachments were not saved
1187 1188 * Import custom fields values from emails on issue creation
1188 1189 * Show view/annotate/download links on entry and annotate views
1189 1190 * Admin Info Screen: Display if plugin assets directory is writable
1190 1191 * Adds a 'Create and continue' button on the new issue form
1191 1192 * IMAP: add options to move received emails
1192 1193 * Do not show Category field when categories are not defined
1193 1194 * Lower the project identifier limit to a minimum of two characters
1194 1195 * Add "closed" html class to closed entries in issue list
1195 1196 * Fixed: broken redirect URL on login failure
1196 1197 * Fixed: Deleted files are shown when using Darcs
1197 1198 * Fixed: Darcs adapter works on Win32 only
1198 1199 * Fixed: syntax highlight doesn't appear in new ticket preview
1199 1200 * Fixed: email notification for changes I make still occurs when running Repository.fetch_changesets
1200 1201 * Fixed: no error is raised when entering invalid hours on the issue update form
1201 1202 * Fixed: Details time log report CSV export doesn't honour date format from settings
1202 1203 * Fixed: invalid css classes on issue details
1203 1204 * Fixed: Trac importer creates duplicate custom values
1204 1205 * Fixed: inline attached image should not match partial filename
1205 1206
1206 1207
1207 1208 == 2008-12-30 v0.8.0
1208 1209
1209 1210 * Setting added in order to limit the number of diff lines that should be displayed
1210 1211 * Makes logged-in username in topbar linking to
1211 1212 * Mail handler: strip tags when receiving a html-only email
1212 1213 * Mail handler: add watchers before sending notification
1213 1214 * Adds a css class (overdue) to overdue issues on issue lists and detail views
1214 1215 * Fixed: project activity truncated after viewing user's activity
1215 1216 * Fixed: email address entered for password recovery shouldn't be case-sensitive
1216 1217 * Fixed: default flag removed when editing a default enumeration
1217 1218 * Fixed: default category ignored when adding a document
1218 1219 * Fixed: error on repository user mapping when a repository username is blank
1219 1220 * Fixed: Firefox cuts off large diffs
1220 1221 * Fixed: CVS browser should not show dead revisions (deleted files)
1221 1222 * Fixed: escape double-quotes in image titles
1222 1223 * Fixed: escape textarea content when editing a issue note
1223 1224 * Fixed: JS error on context menu with IE
1224 1225 * Fixed: bold syntax around single character in series doesn't work
1225 1226 * Fixed several XSS vulnerabilities
1226 1227 * Fixed a SQL injection vulnerability
1227 1228
1228 1229
1229 1230 == 2008-12-07 v0.8.0-rc1
1230 1231
1231 1232 * Wiki page protection
1232 1233 * Wiki page hierarchy. Parent page can be assigned on the Rename screen
1233 1234 * Adds support for issue creation via email
1234 1235 * Adds support for free ticket filtering and custom queries on Gantt chart and calendar
1235 1236 * Cross-project search
1236 1237 * Ability to search a project and its subprojects
1237 1238 * Ability to search the projects the user belongs to
1238 1239 * Adds custom fields on time entries
1239 1240 * Adds boolean and list custom fields for time entries as criteria on time report
1240 1241 * Cross-project time reports
1241 1242 * Display latest user's activity on account/show view
1242 1243 * Show last connexion time on user's page
1243 1244 * Obfuscates email address on user's account page using javascript
1244 1245 * wiki TOC rendered as an unordered list
1245 1246 * Adds the ability to search for a user on the administration users list
1246 1247 * Adds the ability to search for a project name or identifier on the administration projects list
1247 1248 * Redirect user to the previous page after logging in
1248 1249 * Adds a permission 'view wiki edits' so that wiki history can be hidden to certain users
1249 1250 * Adds permissions for viewing the watcher list and adding new watchers on the issue detail view
1250 1251 * Adds permissions to let users edit and/or delete their messages
1251 1252 * Link to activity view when displaying dates
1252 1253 * Hide Redmine version in atom feeds and pdf properties
1253 1254 * Maps repository users to Redmine users. Users with same username or email are automatically mapped. Mapping can be manually adjusted in repository settings. Multiple usernames can be mapped to the same Redmine user.
1254 1255 * Sort users by their display names so that user dropdown lists are sorted alphabetically
1255 1256 * Adds estimated hours to issue filters
1256 1257 * Switch order of current and previous revisions in side-by-side diff
1257 1258 * Render the commit changes list as a tree
1258 1259 * Adds watch/unwatch functionality at forum topic level
1259 1260 * When moving an issue to another project, reassign it to the category with same name if any
1260 1261 * Adds child_pages macro for wiki pages
1261 1262 * Use GET instead of POST on roadmap (#718), gantt and calendar forms
1262 1263 * Search engine: display total results count and count by result type
1263 1264 * Email delivery configuration moved to an unversioned YAML file (config/email.yml, see the sample file)
1264 1265 * Adds icons on search results
1265 1266 * Adds 'Edit' link on account/show for admin users
1266 1267 * Adds Lock/Unlock/Activate link on user edit screen
1267 1268 * Adds user count in status drop down on admin user list
1268 1269 * Adds multi-levels blockquotes support by using > at the beginning of lines
1269 1270 * Adds a Reply link to each issue note
1270 1271 * Adds plain text only option for mail notifications
1271 1272 * Gravatar support for issue detail, user grid, and activity stream (disabled by default)
1272 1273 * Adds 'Delete wiki pages attachments' permission
1273 1274 * Show the most recent file when displaying an inline image
1274 1275 * Makes permission screens localized
1275 1276 * AuthSource list: display associated users count and disable 'Delete' buton if any
1276 1277 * Make the 'duplicates of' relation asymmetric
1277 1278 * Adds username to the password reminder email
1278 1279 * Adds links to forum messages using message#id syntax
1279 1280 * Allow same name for custom fields on different object types
1280 1281 * One-click bulk edition using the issue list context menu within the same project
1281 1282 * Adds support for commit logs reencoding to UTF-8 before insertion in the database. Source encoding of commit logs can be selected in Application settings -> Repositories.
1282 1283 * Adds checkboxes toggle links on permissions report
1283 1284 * Adds Trac-Like anchors on wiki headings
1284 1285 * Adds support for wiki links with anchor
1285 1286 * Adds category to the issue context menu
1286 1287 * Adds a workflow overview screen
1287 1288 * Appends the filename to the attachment url so that clients that ignore content-disposition http header get the real filename
1288 1289 * Dots allowed in custom field name
1289 1290 * Adds posts quoting functionality
1290 1291 * Adds an option to generate sequential project identifiers
1291 1292 * Adds mailto link on the user administration list
1292 1293 * Ability to remove enumerations (activities, priorities, document categories) that are in use. Associated objects can be reassigned to another value
1293 1294 * Gantt chart: display issues that don't have a due date if they are assigned to a version with a date
1294 1295 * Change projects homepage limit to 255 chars
1295 1296 * Improved on-the-fly account creation. If some attributes are missing (eg. not present in the LDAP) or are invalid, the registration form is displayed so that the user is able to fill or fix these attributes
1296 1297 * Adds "please select" to activity select box if no activity is set as default
1297 1298 * Do not silently ignore timelog validation failure on issue edit
1298 1299 * Adds a rake task to send reminder emails
1299 1300 * Allow empty cells in wiki tables
1300 1301 * Makes wiki text formatter pluggable
1301 1302 * Adds back textile acronyms support
1302 1303 * Remove pre tag attributes
1303 1304 * Plugin hooks
1304 1305 * Pluggable admin menu
1305 1306 * Plugins can provide activity content
1306 1307 * Moves plugin list to its own administration menu item
1307 1308 * Adds url and author_url plugin attributes
1308 1309 * Adds Plugin#requires_redmine method so that plugin compatibility can be checked against current Redmine version
1309 1310 * Adds atom feed on time entries details
1310 1311 * Adds project name to issues feed title
1311 1312 * Adds a css class on menu items in order to apply item specific styles (eg. icons)
1312 1313 * Adds a Redmine plugin generators
1313 1314 * Adds timelog link to the issue context menu
1314 1315 * Adds links to the user page on various views
1315 1316 * Turkish translation by Ismail Sezen
1316 1317 * Catalan translation
1317 1318 * Vietnamese translation
1318 1319 * Slovak translation
1319 1320 * Better naming of activity feed if only one kind of event is displayed
1320 1321 * Enable syntax highlight on issues, messages and news
1321 1322 * Add target version to the issue list context menu
1322 1323 * Hide 'Target version' filter if no version is defined
1323 1324 * Add filters on cross-project issue list for custom fields marked as 'For all projects'
1324 1325 * Turn ftp urls into links
1325 1326 * Hiding the View Differences button when a wiki page's history only has one version
1326 1327 * Messages on a Board can now be sorted by the number of replies
1327 1328 * Adds a class ('me') to events of the activity view created by current user
1328 1329 * Strip pre/code tags content from activity view events
1329 1330 * Display issue notes in the activity view
1330 1331 * Adds links to changesets atom feed on repository browser
1331 1332 * Track project and tracker changes in issue history
1332 1333 * Adds anchor to atom feed messages links
1333 1334 * Adds a key in lang files to set the decimal separator (point or comma) in csv exports
1334 1335 * Makes importer work with Trac 0.8.x
1335 1336 * Upgraded to Prototype 1.6.0.1
1336 1337 * File viewer for attached text files
1337 1338 * Menu mapper: add support for :before, :after and :last options to #push method and add #delete method
1338 1339 * Removed inconsistent revision numbers on diff view
1339 1340 * CVS: add support for modules names with spaces
1340 1341 * Log the user in after registration if account activation is not needed
1341 1342 * Mercurial adapter improvements
1342 1343 * Trac importer: read session_attribute table to find user's email and real name
1343 1344 * Ability to disable unused SCM adapters in application settings
1344 1345 * Adds Filesystem adapter
1345 1346 * Clear changesets and changes with raw sql when deleting a repository for performance
1346 1347 * Redmine.pm now uses the 'commit access' permission defined in Redmine
1347 1348 * Reposman can create any type of scm (--scm option)
1348 1349 * Reposman creates a repository if the 'repository' module is enabled at project level only
1349 1350 * Display svn properties in the browser, svn >= 1.5.0 only
1350 1351 * Reduces memory usage when importing large git repositories
1351 1352 * Wider SVG graphs in repository stats
1352 1353 * SubversionAdapter#entries performance improvement
1353 1354 * SCM browser: ability to download raw unified diffs
1354 1355 * More detailed error message in log when scm command fails
1355 1356 * Adds support for file viewing with Darcs 2.0+
1356 1357 * Check that git changeset is not in the database before creating it
1357 1358 * Unified diff viewer for attached files with .patch or .diff extension
1358 1359 * File size display with Bazaar repositories
1359 1360 * Git adapter: use commit time instead of author time
1360 1361 * Prettier url for changesets
1361 1362 * Makes changes link to entries on the revision view
1362 1363 * Adds a field on the repository view to browse at specific revision
1363 1364 * Adds new projects atom feed
1364 1365 * Added rake tasks to generate rcov code coverage reports
1365 1366 * Add Redcloth's :block_markdown_rule to allow horizontal rules in wiki
1366 1367 * Show the project hierarchy in the drop down list for new membership on user administration screen
1367 1368 * Split user edit screen into tabs
1368 1369 * Renames bundled RedCloth to RedCloth3 to avoid RedCloth 4 to be loaded instead
1369 1370 * Fixed: Roadmap crashes when a version has a due date > 2037
1370 1371 * Fixed: invalid effective date (eg. 99999-01-01) causes an error on version edition screen
1371 1372 * Fixed: login filter providing incorrect back_url for Redmine installed in sub-directory
1372 1373 * Fixed: logtime entry duplicated when edited from parent project
1373 1374 * Fixed: wrong digest for text files under Windows
1374 1375 * Fixed: associated revisions are displayed in wrong order on issue view
1375 1376 * Fixed: Git Adapter date parsing ignores timezone
1376 1377 * Fixed: Printing long roadmap doesn't split across pages
1377 1378 * Fixes custom fields display order at several places
1378 1379 * Fixed: urls containing @ are parsed as email adress by the wiki formatter
1379 1380 * Fixed date filters accuracy with SQLite
1380 1381 * Fixed: tokens not escaped in highlight_tokens regexp
1381 1382 * Fixed Bazaar shared repository browsing
1382 1383 * Fixes platform determination under JRuby
1383 1384 * Fixed: Estimated time in issue's journal should be rounded to two decimals
1384 1385 * Fixed: 'search titles only' box ignored after one search is done on titles only
1385 1386 * Fixed: non-ASCII subversion path can't be displayed
1386 1387 * Fixed: Inline images don't work if file name has upper case letters or if image is in BMP format
1387 1388 * Fixed: document listing shows on "my page" when viewing documents is disabled for the role
1388 1389 * Fixed: Latest news appear on the homepage for projects with the News module disabled
1389 1390 * Fixed: cross-project issue list should not show issues of projects for which the issue tracking module was disabled
1390 1391 * Fixed: the default status is lost when reordering issue statuses
1391 1392 * Fixes error with Postgresql and non-UTF8 commit logs
1392 1393 * Fixed: textile footnotes no longer work
1393 1394 * Fixed: http links containing parentheses fail to reder correctly
1394 1395 * Fixed: GitAdapter#get_rev should use current branch instead of hardwiring master
1395 1396
1396 1397
1397 1398 == 2008-07-06 v0.7.3
1398 1399
1399 1400 * Allow dot in firstnames and lastnames
1400 1401 * Add project name to cross-project Atom feeds
1401 1402 * Encoding set to utf8 in example database.yml
1402 1403 * HTML titles on forums related views
1403 1404 * Fixed: various XSS vulnerabilities
1404 1405 * Fixed: Entourage (and some old client) fails to correctly render notification styles
1405 1406 * Fixed: Fixed: timelog redirects inappropriately when :back_url is blank
1406 1407 * Fixed: wrong relative paths to images in wiki_syntax.html
1407 1408
1408 1409
1409 1410 == 2008-06-15 v0.7.2
1410 1411
1411 1412 * "New Project" link on Projects page
1412 1413 * Links to repository directories on the repo browser
1413 1414 * Move status to front in Activity View
1414 1415 * Remove edit step from Status context menu
1415 1416 * Fixed: No way to do textile horizontal rule
1416 1417 * Fixed: Repository: View differences doesn't work
1417 1418 * Fixed: attachement's name maybe invalid.
1418 1419 * Fixed: Error when creating a new issue
1419 1420 * Fixed: NoMethodError on @available_filters.has_key?
1420 1421 * Fixed: Check All / Uncheck All in Email Settings
1421 1422 * Fixed: "View differences" of one file at /repositories/revision/ fails
1422 1423 * Fixed: Column width in "my page"
1423 1424 * Fixed: private subprojects are listed on Issues view
1424 1425 * Fixed: Textile: bold, italics, underline, etc... not working after parentheses
1425 1426 * Fixed: Update issue form: comment field from log time end out of screen
1426 1427 * Fixed: Editing role: "issue can be assigned to this role" out of box
1427 1428 * Fixed: Unable use angular braces after include word
1428 1429 * Fixed: Using '*' as keyword for repository referencing keywords doesn't work
1429 1430 * Fixed: Subversion repository "View differences" on each file rise ERROR
1430 1431 * Fixed: View differences for individual file of a changeset fails if the repository URL doesn't point to the repository root
1431 1432 * Fixed: It is possible to lock out the last admin account
1432 1433 * Fixed: Wikis are viewable for anonymous users on public projects, despite not granting access
1433 1434 * Fixed: Issue number display clipped on 'my issues'
1434 1435 * Fixed: Roadmap version list links not carrying state
1435 1436 * Fixed: Log Time fieldset in IssueController#edit doesn't set default Activity as default
1436 1437 * Fixed: git's "get_rev" API should use repo's current branch instead of hardwiring "master"
1437 1438 * Fixed: browser's language subcodes ignored
1438 1439 * Fixed: Error on project selection with numeric (only) identifier.
1439 1440 * Fixed: Link to PDF doesn't work after creating new issue
1440 1441 * Fixed: "Replies" should not be shown on forum threads that are locked
1441 1442 * Fixed: SVN errors lead to svn username/password being displayed to end users (security issue)
1442 1443 * Fixed: http links containing hashes don't display correct
1443 1444 * Fixed: Allow ampersands in Enumeration names
1444 1445 * Fixed: Atom link on saved query does not include query_id
1445 1446 * Fixed: Logtime info lost when there's an error updating an issue
1446 1447 * Fixed: TOC does not parse colorization markups
1447 1448 * Fixed: CVS: add support for modules names with spaces
1448 1449 * Fixed: Bad rendering on projects/add
1449 1450 * Fixed: exception when viewing differences on cvs
1450 1451 * Fixed: export issue to pdf will messup when use Chinese language
1451 1452 * Fixed: Redmine::Scm::Adapters::GitAdapter#get_rev ignored GIT_BIN constant
1452 1453 * Fixed: Adding non-ASCII new issue type in the New Issue page have encoding error using IE
1453 1454 * Fixed: Importing from trac : some wiki links are messed
1454 1455 * Fixed: Incorrect weekend definition in Hebrew calendar locale
1455 1456 * Fixed: Atom feeds don't provide author section for repository revisions
1456 1457 * Fixed: In Activity views, changesets titles can be multiline while they should not
1457 1458 * Fixed: Ignore unreadable subversion directories (read disabled using authz)
1458 1459 * Fixed: lib/SVG/Graph/Graph.rb can't externalize stylesheets
1459 1460 * Fixed: Close statement handler in Redmine.pm
1460 1461
1461 1462
1462 1463 == 2008-05-04 v0.7.1
1463 1464
1464 1465 * Thai translation added (Gampol Thitinilnithi)
1465 1466 * Translations updates
1466 1467 * Escape HTML comment tags
1467 1468 * Prevent "can't convert nil into String" error when :sort_order param is not present
1468 1469 * Fixed: Updating tickets add a time log with zero hours
1469 1470 * Fixed: private subprojects names are revealed on the project overview
1470 1471 * Fixed: Search for target version of "none" fails with postgres 8.3
1471 1472 * Fixed: Home, Logout, Login links shouldn't be absolute links
1472 1473 * Fixed: 'Latest projects' box on the welcome screen should be hidden if there are no projects
1473 1474 * Fixed: error when using upcase language name in coderay
1474 1475 * Fixed: error on Trac import when :due attribute is nil
1475 1476
1476 1477
1477 1478 == 2008-04-28 v0.7.0
1478 1479
1479 1480 * Forces Redmine to use rails 2.0.2 gem when vendor/rails is not present
1480 1481 * Queries can be marked as 'For all projects'. Such queries will be available on all projects and on the global issue list.
1481 1482 * Add predefined date ranges to the time report
1482 1483 * Time report can be done at issue level
1483 1484 * Various timelog report enhancements
1484 1485 * Accept the following formats for "hours" field: 1h, 1 h, 1 hour, 2 hours, 30m, 30min, 1h30, 1h30m, 1:30
1485 1486 * Display the context menu above and/or to the left of the click if needed
1486 1487 * Make the admin project files list sortable
1487 1488 * Mercurial: display working directory files sizes unless browsing a specific revision
1488 1489 * Preserve status filter and page number when using lock/unlock/activate links on the users list
1489 1490 * Redmine.pm support for LDAP authentication
1490 1491 * Better error message and AR errors in log for failed LDAP on-the-fly user creation
1491 1492 * Redirected user to where he is coming from after logging hours
1492 1493 * Warn user that subprojects are also deleted when deleting a project
1493 1494 * Include subprojects versions on calendar and gantt
1494 1495 * Notify project members when a message is posted if they want to receive notifications
1495 1496 * Fixed: Feed content limit setting has no effect
1496 1497 * Fixed: Priorities not ordered when displayed as a filter in issue list
1497 1498 * Fixed: can not display attached images inline in message replies
1498 1499 * Fixed: Boards are not deleted when project is deleted
1499 1500 * Fixed: trying to preview a new issue raises an exception with postgresql
1500 1501 * Fixed: single file 'View difference' links do not work because of duplicate slashes in url
1501 1502 * Fixed: inline image not displayed when including a wiki page
1502 1503 * Fixed: CVS duplicate key violation
1503 1504 * Fixed: ActiveRecord::StaleObjectError exception on closing a set of circular duplicate issues
1504 1505 * Fixed: custom field filters behaviour
1505 1506 * Fixed: Postgresql 8.3 compatibility
1506 1507 * Fixed: Links to repository directories don't work
1507 1508
1508 1509
1509 1510 == 2008-03-29 v0.7.0-rc1
1510 1511
1511 1512 * Overall activity view and feed added, link is available on the project list
1512 1513 * Git VCS support
1513 1514 * Rails 2.0 sessions cookie store compatibility
1514 1515 * Use project identifiers in urls instead of ids
1515 1516 * Default configuration data can now be loaded from the administration screen
1516 1517 * Administration settings screen split to tabs (email notifications options moved to 'Settings')
1517 1518 * Project description is now unlimited and optional
1518 1519 * Wiki annotate view
1519 1520 * Escape HTML tag in textile content
1520 1521 * Add Redmine links to documents, versions, attachments and repository files
1521 1522 * New setting to specify how many objects should be displayed on paginated lists. There are 2 ways to select a set of issues on the issue list:
1522 1523 * by using checkbox and/or the little pencil that will select/unselect all issues
1523 1524 * by clicking on the rows (but not on the links), Ctrl and Shift keys can be used to select multiple issues
1524 1525 * Context menu disabled on links so that the default context menu of the browser is displayed when right-clicking on a link (click anywhere else on the row to display the context menu)
1525 1526 * User display format is now configurable in administration settings
1526 1527 * Issue list now supports bulk edit/move/delete (for a set of issues that belong to the same project)
1527 1528 * Merged 'change status', 'edit issue' and 'add note' actions:
1528 1529 * Users with 'edit issues' permission can now update any property including custom fields when adding a note or changing the status
1529 1530 * 'Change issue status' permission removed. To change an issue status, a user just needs to have either 'Edit' or 'Add note' permissions and some workflow transitions allowed
1530 1531 * Details by assignees on issue summary view
1531 1532 * 'New issue' link in the main menu (accesskey 7). The drop-down lists to add an issue on the project overview and the issue list are removed
1532 1533 * Change status select box default to current status
1533 1534 * Preview for issue notes, news and messages
1534 1535 * Optional description for attachments
1535 1536 * 'Fixed version' label changed to 'Target version'
1536 1537 * Let the user choose when deleting issues with reported hours to:
1537 1538 * delete the hours
1538 1539 * assign the hours to the project
1539 1540 * reassign the hours to another issue
1540 1541 * Date range filter and pagination on time entries detail view
1541 1542 * Propagate time tracking to the parent project
1542 1543 * Switch added on the project activity view to include subprojects
1543 1544 * Display total estimated and spent hours on the version detail view
1544 1545 * Weekly time tracking block for 'My page'
1545 1546 * Permissions to edit time entries
1546 1547 * Include subprojects on the issue list, calendar, gantt and timelog by default (can be turned off is administration settings)
1547 1548 * Roadmap enhancements (separate related issues from wiki contents, leading h1 in version wiki pages is hidden, smaller wiki headings)
1548 1549 * Make versions with same date sorted by name
1549 1550 * Allow issue list to be sorted by target version
1550 1551 * Related changesets messages displayed on the issue details view
1551 1552 * Create a journal and send an email when an issue is closed by commit
1552 1553 * Add 'Author' to the available columns for the issue list
1553 1554 * More appropriate default sort order on sortable columns
1554 1555 * Add issue subject to the time entries view and issue subject, description and tracker to the csv export
1555 1556 * Permissions to edit issue notes
1556 1557 * Display date/time instead of date on files list
1557 1558 * Do not show Roadmap menu item if the project doesn't define any versions
1558 1559 * Allow longer version names (60 chars)
1559 1560 * Ability to copy an existing workflow when creating a new role
1560 1561 * Display custom fields in two columns on the issue form
1561 1562 * Added 'estimated time' in the csv export of the issue list
1562 1563 * Display the last 30 days on the activity view rather than the current month (number of days can be configured in the application settings)
1563 1564 * Setting for whether new projects should be public by default
1564 1565 * User preference to choose how comments/replies are displayed: in chronological or reverse chronological order
1565 1566 * Added default value for custom fields
1566 1567 * Added tabindex property on wiki toolbar buttons (to easily move from field to field using the tab key)
1567 1568 * Redirect to issue page after creating a new issue
1568 1569 * Wiki toolbar improvements (mainly for Firefox)
1569 1570 * Display wiki syntax quick ref link on all wiki textareas
1570 1571 * Display links to Atom feeds
1571 1572 * Breadcrumb nav for the forums
1572 1573 * Show replies when choosing to display messages in the activity
1573 1574 * Added 'include' macro to include another wiki page
1574 1575 * RedmineWikiFormatting page available as a static HTML file locally
1575 1576 * Wrap diff content
1576 1577 * Strip out email address from authors in repository screens
1577 1578 * Highlight the current item of the main menu
1578 1579 * Added simple syntax highlighters for php and java languages
1579 1580 * Do not show empty diffs
1580 1581 * Show explicit error message when the scm command failed (eg. when svn binary is not available)
1581 1582 * Lithuanian translation added (Sergej Jegorov)
1582 1583 * Ukrainan translation added (Natalia Konovka & Mykhaylo Sorochan)
1583 1584 * Danish translation added (Mads Vestergaard)
1584 1585 * Added i18n support to the jstoolbar and various settings screen
1585 1586 * RedCloth's glyphs no longer user
1586 1587 * New icons for the wiki toolbar (from http://www.famfamfam.com/lab/icons/silk/)
1587 1588 * The following menus can now be extended by plugins: top_menu, account_menu, application_menu
1588 1589 * Added a simple rake task to fetch changesets from the repositories: rake redmine:fetch_changesets
1589 1590 * Remove hardcoded "Redmine" strings in account related emails and use application title instead
1590 1591 * Mantis importer preserve bug ids
1591 1592 * Trac importer: Trac guide wiki pages skipped
1592 1593 * Trac importer: wiki attachments migration added
1593 1594 * Trac importer: support database schema for Trac migration
1594 1595 * Trac importer: support CamelCase links
1595 1596 * Removes the Redmine version from the footer (can be viewed on admin -> info)
1596 1597 * Rescue and display an error message when trying to delete a role that is in use
1597 1598 * Add various 'X-Redmine' headers to email notifications: X-Redmine-Host, X-Redmine-Site, X-Redmine-Project, X-Redmine-Issue-Id, -Author, -Assignee, X-Redmine-Topic-Id
1598 1599 * Add "--encoding utf8" option to the Mercurial "hg log" command in order to get utf8 encoded commit logs
1599 1600 * Fixed: Gantt and calendar not properly refreshed (fragment caching removed)
1600 1601 * Fixed: Textile image with style attribute cause internal server error
1601 1602 * Fixed: wiki TOC not rendered properly when used in an issue or document description
1602 1603 * Fixed: 'has already been taken' error message on username and email fields if left empty
1603 1604 * Fixed: non-ascii attachement filename with IE
1604 1605 * Fixed: wrong url for wiki syntax pop-up when Redmine urls are prefixed
1605 1606 * Fixed: search for all words doesn't work
1606 1607 * Fixed: Do not show sticky and locked checkboxes when replying to a message
1607 1608 * Fixed: Mantis importer: do not duplicate Mantis username in firstname and lastname if realname is blank
1608 1609 * Fixed: Date custom fields not displayed as specified in application settings
1609 1610 * Fixed: titles not escaped in the activity view
1610 1611 * Fixed: issue queries can not use custom fields marked as 'for all projects' in a project context
1611 1612 * Fixed: on calendar, gantt and in the tracker filter on the issue list, only active trackers of the project (and its sub projects) should be available
1612 1613 * Fixed: locked users should not receive email notifications
1613 1614 * Fixed: custom field selection is not saved when unchecking them all on project settings
1614 1615 * Fixed: can not lock a topic when creating it
1615 1616 * Fixed: Incorrect filtering for unset values when using 'is not' filter
1616 1617 * Fixed: PostgreSQL issues_seq_id not updated when using Trac importer
1617 1618 * Fixed: ajax pagination does not scroll up
1618 1619 * Fixed: error when uploading a file with no content-type specified by the browser
1619 1620 * Fixed: wiki and changeset links not displayed when previewing issue description or notes
1620 1621 * Fixed: 'LdapError: no bind result' error when authenticating
1621 1622 * Fixed: 'LdapError: invalid binding information' when no username/password are set on the LDAP account
1622 1623 * Fixed: CVS repository doesn't work if port is used in the url
1623 1624 * Fixed: Email notifications: host name is missing in generated links
1624 1625 * Fixed: Email notifications: referenced changesets, wiki pages, attachments... are not turned into links
1625 1626 * Fixed: Do not clear issue relations when moving an issue to another project if cross-project issue relations are allowed
1626 1627 * Fixed: "undefined method 'textilizable'" error on email notification when running Repository#fetch_changesets from the console
1627 1628 * Fixed: Do not send an email with no recipient, cc or bcc
1628 1629 * Fixed: fetch_changesets fails on commit comments that close 2 duplicates issues.
1629 1630 * Fixed: Mercurial browsing under unix-like os and for directory depth > 2
1630 1631 * Fixed: Wiki links with pipe can not be used in wiki tables
1631 1632 * Fixed: migrate_from_trac doesn't import timestamps of wiki and tickets
1632 1633 * Fixed: when bulk editing, setting "Assigned to" to "nobody" causes an sql error with Postgresql
1633 1634
1634 1635
1635 1636 == 2008-03-12 v0.6.4
1636 1637
1637 1638 * Fixed: private projects name are displayed on account/show even if the current user doesn't have access to these private projects
1638 1639 * Fixed: potential LDAP authentication security flaw
1639 1640 * Fixed: context submenus on the issue list don't show up with IE6.
1640 1641 * Fixed: Themes are not applied with Rails 2.0
1641 1642 * Fixed: crash when fetching Mercurial changesets if changeset[:files] is nil
1642 1643 * Fixed: Mercurial repository browsing
1643 1644 * Fixed: undefined local variable or method 'log' in CvsAdapter when a cvs command fails
1644 1645 * Fixed: not null constraints not removed with Postgresql
1645 1646 * Doctype set to transitional
1646 1647
1647 1648
1648 1649 == 2007-12-18 v0.6.3
1649 1650
1650 1651 * Fixed: upload doesn't work in 'Files' section
1651 1652
1652 1653
1653 1654 == 2007-12-16 v0.6.2
1654 1655
1655 1656 * Search engine: issue custom fields can now be searched
1656 1657 * News comments are now textilized
1657 1658 * Updated Japanese translation (Satoru Kurashiki)
1658 1659 * Updated Chinese translation (Shortie Lo)
1659 1660 * Fixed Rails 2.0 compatibility bugs:
1660 1661 * Unable to create a wiki
1661 1662 * Gantt and calendar error
1662 1663 * Trac importer error (readonly? is defined by ActiveRecord)
1663 1664 * Fixed: 'assigned to me' filter broken
1664 1665 * Fixed: crash when validation fails on issue edition with no custom fields
1665 1666 * Fixed: reposman "can't find group" error
1666 1667 * Fixed: 'LDAP account password is too long' error when leaving the field empty on creation
1667 1668 * Fixed: empty lines when displaying repository files with Windows style eol
1668 1669 * Fixed: missing body closing tag in repository annotate and entry views
1669 1670
1670 1671
1671 1672 == 2007-12-10 v0.6.1
1672 1673
1673 1674 * Rails 2.0 compatibility
1674 1675 * Custom fields can now be displayed as columns on the issue list
1675 1676 * Added version details view (accessible from the roadmap)
1676 1677 * Roadmap: more accurate completion percentage calculation (done ratio of open issues is now taken into account)
1677 1678 * Added per-project tracker selection. Trackers can be selected on project settings
1678 1679 * Anonymous users can now be allowed to create, edit, comment issues, comment news and post messages in the forums
1679 1680 * Forums: messages can now be edited/deleted (explicit permissions need to be given)
1680 1681 * Forums: topics can be locked so that no reply can be added
1681 1682 * Forums: topics can be marked as sticky so that they always appear at the top of the list
1682 1683 * Forums: attachments can now be added to replies
1683 1684 * Added time zone support
1684 1685 * Added a setting to choose the account activation strategy (available in application settings)
1685 1686 * Added 'Classic' theme (inspired from the v0.51 design)
1686 1687 * Added an alternate theme which provides issue list colorization based on issues priority
1687 1688 * Added Bazaar SCM adapter
1688 1689 * Added Annotate/Blame view in the repository browser (except for Darcs SCM)
1689 1690 * Diff style (inline or side by side) automatically saved as a user preference
1690 1691 * Added issues status changes on the activity view (by Cyril Mougel)
1691 1692 * Added forums topics on the activity view (disabled by default)
1692 1693 * Added an option on 'My account' for users who don't want to be notified of changes that they make
1693 1694 * Trac importer now supports mysql and postgresql databases
1694 1695 * Trac importer improvements (by Mat Trudel)
1695 1696 * 'fixed version' field can now be displayed on the issue list
1696 1697 * Added a couple of new formats for the 'date format' setting
1697 1698 * Added Traditional Chinese translation (by Shortie Lo)
1698 1699 * Added Russian translation (iGor kMeta)
1699 1700 * Project name format limitation removed (name can now contain any character)
1700 1701 * Project identifier maximum length changed from 12 to 20
1701 1702 * Changed the maximum length of LDAP account to 255 characters
1702 1703 * Removed the 12 characters limit on passwords
1703 1704 * Added wiki macros support
1704 1705 * Performance improvement on workflow setup screen
1705 1706 * More detailed html title on several views
1706 1707 * Custom fields can now be reordered
1707 1708 * Search engine: search can be restricted to an exact phrase by using quotation marks
1708 1709 * Added custom fields marked as 'For all projects' to the csv export of the cross project issue list
1709 1710 * Email notifications are now sent as Blind carbon copy by default
1710 1711 * Fixed: all members (including non active) should be deleted when deleting a project
1711 1712 * Fixed: Error on wiki syntax link (accessible from wiki/edit)
1712 1713 * Fixed: 'quick jump to a revision' form on the revisions list
1713 1714 * Fixed: error on admin/info if there's more than 1 plugin installed
1714 1715 * Fixed: svn or ldap password can be found in clear text in the html source in editing mode
1715 1716 * Fixed: 'Assigned to' drop down list is not sorted
1716 1717 * Fixed: 'View all issues' link doesn't work on issues/show
1717 1718 * Fixed: error on account/register when validation fails
1718 1719 * Fixed: Error when displaying the issue list if a float custom field is marked as 'used as filter'
1719 1720 * Fixed: Mercurial adapter breaks on missing :files entry in changeset hash (James Britt)
1720 1721 * Fixed: Wrong feed URLs on the home page
1721 1722 * Fixed: Update of time entry fails when the issue has been moved to an other project
1722 1723 * Fixed: Error when moving an issue without changing its tracker (Postgresql)
1723 1724 * Fixed: Changes not recorded when using :pserver string (CVS adapter)
1724 1725 * Fixed: admin should be able to move issues to any project
1725 1726 * Fixed: adding an attachment is not possible when changing the status of an issue
1726 1727 * Fixed: No mime-types in documents/files downloading
1727 1728 * Fixed: error when sorting the messages if there's only one board for the project
1728 1729 * Fixed: 'me' doesn't appear in the drop down filters on a project issue list.
1729 1730
1730 1731 == 2007-11-04 v0.6.0
1731 1732
1732 1733 * Permission model refactoring.
1733 1734 * Permissions: there are now 2 builtin roles that can be used to specify permissions given to other users than members of projects
1734 1735 * Permissions: some permissions (eg. browse the repository) can be removed for certain roles
1735 1736 * Permissions: modules (eg. issue tracking, news, documents...) can be enabled/disabled at project level
1736 1737 * Added Mantis and Trac importers
1737 1738 * New application layout
1738 1739 * Added "Bulk edit" functionality on the issue list
1739 1740 * More flexible mail notifications settings at user level
1740 1741 * Added AJAX based context menu on the project issue list that provide shortcuts for editing, re-assigning, changing the status or the priority, moving or deleting an issue
1741 1742 * Added the hability to copy an issue. It can be done from the "issue/show" view or from the context menu on the issue list
1742 1743 * Added the ability to customize issue list columns (at application level or for each saved query)
1743 1744 * Overdue versions (date reached and open issues > 0) are now always displayed on the roadmap
1744 1745 * Added the ability to rename wiki pages (specific permission required)
1745 1746 * Search engines now supports pagination. Results are sorted in reverse chronological order
1746 1747 * Added "Estimated hours" attribute on issues
1747 1748 * A category with assigned issue can now be deleted. 2 options are proposed: remove assignments or reassign issues to another category
1748 1749 * Forum notifications are now also sent to the authors of the thread, even if they donΓ―ΒΏΒ½t watch the board
1749 1750 * Added an application setting to specify the application protocol (http or https) used to generate urls in emails
1750 1751 * Gantt chart: now starts at the current month by default
1751 1752 * Gantt chart: month count and zoom factor are automatically saved as user preferences
1752 1753 * Wiki links can now refer to other project wikis
1753 1754 * Added wiki index by date
1754 1755 * Added preview on add/edit issue form
1755 1756 * Emails footer can now be customized from the admin interface (Admin -> Email notifications)
1756 1757 * Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that theyΓ―ΒΏΒ½re properly displayed)
1757 1758 * Calendar: first day of week can now be set in lang files
1758 1759 * Automatic closing of duplicate issues
1759 1760 * Added a cross-project issue list
1760 1761 * AJAXified the SCM browser (tree view)
1761 1762 * Pretty URL for the repository browser (Cyril Mougel)
1762 1763 * Search engine: added a checkbox to search titles only
1763 1764 * Added "% done" in the filter list
1764 1765 * Enumerations: values can now be reordered and a default value can be specified (eg. default issue priority)
1765 1766 * Added some accesskeys
1766 1767 * Added "Float" as a custom field format
1767 1768 * Added basic Theme support
1768 1769 * Added the ability to set the Γ―ΒΏΒ½done ratioΓ―ΒΏΒ½ of issues fixed by commit (Nikolay Solakov)
1769 1770 * Added custom fields in issue related mail notifications
1770 1771 * Email notifications are now sent in plain text and html
1771 1772 * Gantt chart can now be exported to a graphic file (png). This functionality is only available if RMagick is installed.
1772 1773 * Added syntax highlightment for repository files and wiki
1773 1774 * Improved automatic Redmine links
1774 1775 * Added automatic table of content support on wiki pages
1775 1776 * Added radio buttons on the documents list to sort documents by category, date, title or author
1776 1777 * Added basic plugin support, with a sample plugin
1777 1778 * Added a link to add a new category when creating or editing an issue
1778 1779 * Added a "Assignable" boolean on the Role model. If unchecked, issues can not be assigned to users having this role.
1779 1780 * Added an option to be able to relate issues in different projects
1780 1781 * Added the ability to move issues (to another project) without changing their trackers.
1781 1782 * Atom feeds added on project activity, news and changesets
1782 1783 * Added the ability to reset its own RSS access key
1783 1784 * Main project list now displays root projects with their subprojects
1784 1785 * Added anchor links to issue notes
1785 1786 * Added reposman Ruby version. This script can now register created repositories in Redmine (Nicolas Chuche)
1786 1787 * Issue notes are now included in search
1787 1788 * Added email sending test functionality
1788 1789 * Added LDAPS support for LDAP authentication
1789 1790 * Removed hard-coded URLs in mail templates
1790 1791 * Subprojects are now grouped by projects in the navigation drop-down menu
1791 1792 * Added a new value for date filters: this week
1792 1793 * Added cache for application settings
1793 1794 * Added Polish translation (Tomasz Gawryl)
1794 1795 * Added Czech translation (Jan Kadlecek)
1795 1796 * Added Romanian translation (Csongor Bartus)
1796 1797 * Added Hebrew translation (Bob Builder)
1797 1798 * Added Serbian translation (Dragan Matic)
1798 1799 * Added Korean translation (Choi Jong Yoon)
1799 1800 * Fixed: the link to delete issue relations is displayed even if the user is not authorized to delete relations
1800 1801 * Performance improvement on calendar and gantt
1801 1802 * Fixed: wiki preview doesnΓ―ΒΏΒ½t work on long entries
1802 1803 * Fixed: queries with multiple custom fields return no result
1803 1804 * Fixed: Can not authenticate user against LDAP if its DN contains non-ascii characters
1804 1805 * Fixed: URL with ~ broken in wiki formatting
1805 1806 * Fixed: some quotation marks are rendered as strange characters in pdf
1806 1807
1807 1808
1808 1809 == 2007-07-15 v0.5.1
1809 1810
1810 1811 * per project forums added
1811 1812 * added the ability to archive projects
1812 1813 * added Γ―ΒΏΒ½WatchΓ―ΒΏΒ½ functionality on issues. It allows users to receive notifications about issue changes
1813 1814 * custom fields for issues can now be used as filters on issue list
1814 1815 * added per user custom queries
1815 1816 * commit messages are now scanned for referenced or fixed issue IDs (keywords defined in Admin -> Settings)
1816 1817 * projects list now shows the list of public projects and private projects for which the user is a member
1817 1818 * versions can now be created with no date
1818 1819 * added issue count details for versions on Reports view
1819 1820 * added time report, by member/activity/tracker/version and year/month/week for the selected period
1820 1821 * each category can now be associated to a user, so that new issues in that category are automatically assigned to that user
1821 1822 * added autologin feature (disabled by default)
1822 1823 * optimistic locking added for wiki edits
1823 1824 * added wiki diff
1824 1825 * added the ability to destroy wiki pages (requires permission)
1825 1826 * a wiki page can now be attached to each version, and displayed on the roadmap
1826 1827 * attachments can now be added to wiki pages (original patch by Pavol Murin) and displayed online
1827 1828 * added an option to see all versions in the roadmap view (including completed ones)
1828 1829 * added basic issue relations
1829 1830 * added the ability to log time when changing an issue status
1830 1831 * account information can now be sent to the user when creating an account
1831 1832 * author and assignee of an issue always receive notifications (even if they turned of mail notifications)
1832 1833 * added a quick search form in page header
1833 1834 * added 'me' value for 'assigned to' and 'author' query filters
1834 1835 * added a link on revision screen to see the entire diff for the revision
1835 1836 * added last commit message for each entry in repository browser
1836 1837 * added the ability to view a file diff with free to/from revision selection.
1837 1838 * text files can now be viewed online when browsing the repository
1838 1839 * added basic support for other SCM: CVS (Ralph Vater), Mercurial and Darcs
1839 1840 * added fragment caching for svn diffs
1840 1841 * added fragment caching for calendar and gantt views
1841 1842 * login field automatically focused on login form
1842 1843 * subproject name displayed on issue list, calendar and gantt
1843 1844 * added an option to choose the date format: language based or ISO 8601
1844 1845 * added a simple mail handler. It lets users add notes to an existing issue by replying to the initial notification email.
1845 1846 * a 403 error page is now displayed (instead of a blank page) when trying to access a protected page
1846 1847 * added portuguese translation (Joao Carlos Clementoni)
1847 1848 * added partial online help japanese translation (Ken Date)
1848 1849 * added bulgarian translation (Nikolay Solakov)
1849 1850 * added dutch translation (Linda van den Brink)
1850 1851 * added swedish translation (Thomas Habets)
1851 1852 * italian translation update (Alessio Spadaro)
1852 1853 * japanese translation update (Satoru Kurashiki)
1853 1854 * fixed: error on history atom feed when thereΓ―ΒΏΒ½s no notes on an issue change
1854 1855 * fixed: error in journalizing an issue with longtext custom fields (Postgresql)
1855 1856 * fixed: creation of Oracle schema
1856 1857 * fixed: last day of the month not included in project activity
1857 1858 * fixed: files with an apostrophe in their names can't be accessed in SVN repository
1858 1859 * fixed: performance issue on RepositoriesController#revisions when a changeset has a great number of changes (eg. 100,000)
1859 1860 * fixed: open/closed issue counts are always 0 on reports view (postgresql)
1860 1861 * fixed: date query filters (wrong results and sql error with postgresql)
1861 1862 * fixed: confidentiality issue on account/show (private project names displayed to anyone)
1862 1863 * fixed: Long text custom fields displayed without line breaks
1863 1864 * fixed: Error when editing the wokflow after deleting a status
1864 1865 * fixed: SVN commit dates are now stored as local time
1865 1866
1866 1867
1867 1868 == 2007-04-11 v0.5.0
1868 1869
1869 1870 * added per project Wiki
1870 1871 * added rss/atom feeds at project level (custom queries can be used as feeds)
1871 1872 * added search engine (search in issues, news, commits, wiki pages, documents)
1872 1873 * simple time tracking functionality added
1873 1874 * added version due dates on calendar and gantt
1874 1875 * added subprojects issue count on project Reports page
1875 1876 * added the ability to copy an existing workflow when creating a new tracker
1876 1877 * added the ability to include subprojects on calendar and gantt
1877 1878 * added the ability to select trackers to display on calendar and gantt (Jeffrey Jones)
1878 1879 * added side by side svn diff view (Cyril Mougel)
1879 1880 * added back subproject filter on issue list
1880 1881 * added permissions report in admin area
1881 1882 * added a status filter on users list
1882 1883 * support for password-protected SVN repositories
1883 1884 * SVN commits are now stored in the database
1884 1885 * added simple svn statistics SVG graphs
1885 1886 * progress bars for roadmap versions (Nick Read)
1886 1887 * issue history now shows file uploads and deletions
1887 1888 * #id patterns are turned into links to issues in descriptions and commit messages
1888 1889 * japanese translation added (Satoru Kurashiki)
1889 1890 * chinese simplified translation added (Andy Wu)
1890 1891 * italian translation added (Alessio Spadaro)
1891 1892 * added scripts to manage SVN repositories creation and user access control using ssh+svn (Nicolas Chuche)
1892 1893 * better calendar rendering time
1893 1894 * fixed migration scripts to work with mysql 5 running in strict mode
1894 1895 * fixed: error when clicking "add" with no block selected on my/page_layout
1895 1896 * fixed: hard coded links in navigation bar
1896 1897 * fixed: table_name pre/suffix support
1897 1898
1898 1899
1899 1900 == 2007-02-18 v0.4.2
1900 1901
1901 1902 * Rails 1.2 is now required
1902 1903 * settings are now stored in the database and editable through the application in: Admin -> Settings (config_custom.rb is no longer used)
1903 1904 * added project roadmap view
1904 1905 * mail notifications added when a document, a file or an attachment is added
1905 1906 * tooltips added on Gantt chart and calender to view the details of the issues
1906 1907 * ability to set the sort order for roles, trackers, issue statuses
1907 1908 * added missing fields to csv export: priority, start date, due date, done ratio
1908 1909 * added total number of issues per tracker on project overview
1909 1910 * all icons replaced (new icons are based on GPL icon set: "KDE Crystal Diamond 2.5" -by paolino- and "kNeu! Alpha v0.1" -by Pablo Fabregat-)
1910 1911 * added back "fixed version" field on issue screen and in filters
1911 1912 * project settings screen split in 4 tabs
1912 1913 * custom fields screen split in 3 tabs (one for each kind of custom field)
1913 1914 * multiple issues pdf export now rendered as a table
1914 1915 * added a button on users/list to manually activate an account
1915 1916 * added a setting option to disable "password lost" functionality
1916 1917 * added a setting option to set max number of issues in csv/pdf exports
1917 1918 * fixed: subprojects count is always 0 on projects list
1918 1919 * fixed: locked users are proposed when adding a member to a project
1919 1920 * fixed: setting an issue status as default status leads to an sql error with SQLite
1920 1921 * fixed: unable to delete an issue status even if it's not used yet
1921 1922 * fixed: filters ignored when exporting a predefined query to csv/pdf
1922 1923 * fixed: crash when french "issue_edit" email notification is sent
1923 1924 * fixed: hide mail preference not saved (my/account)
1924 1925 * fixed: crash when a new user try to edit its "my page" layout
1925 1926
1926 1927
1927 1928 == 2007-01-03 v0.4.1
1928 1929
1929 1930 * fixed: emails have no recipient when one of the project members has notifications disabled
1930 1931
1931 1932
1932 1933 == 2007-01-02 v0.4.0
1933 1934
1934 1935 * simple SVN browser added (just needs svn binaries in PATH)
1935 1936 * comments can now be added on news
1936 1937 * "my page" is now customizable
1937 1938 * more powerfull and savable filters for issues lists
1938 1939 * improved issues change history
1939 1940 * new functionality: move an issue to another project or tracker
1940 1941 * new functionality: add a note to an issue
1941 1942 * new report: project activity
1942 1943 * "start date" and "% done" fields added on issues
1943 1944 * project calendar added
1944 1945 * gantt chart added (exportable to pdf)
1945 1946 * single/multiple issues pdf export added
1946 1947 * issues reports improvements
1947 1948 * multiple file upload for issues, documents and files
1948 1949 * option to set maximum size of uploaded files
1949 1950 * textile formating of issue and news descritions (RedCloth required)
1950 1951 * integration of DotClear jstoolbar for textile formatting
1951 1952 * calendar date picker for date fields (LGPL DHTML Calendar http://sourceforge.net/projects/jscalendar)
1952 1953 * new filter in issues list: Author
1953 1954 * ajaxified paginators
1954 1955 * news rss feed added
1955 1956 * option to set number of results per page on issues list
1956 1957 * localized csv separator (comma/semicolon)
1957 1958 * csv output encoded to ISO-8859-1
1958 1959 * user custom field displayed on account/show
1959 1960 * default configuration improved (default roles, trackers, status, permissions and workflows)
1960 1961 * language for default configuration data can now be chosen when running 'load_default_data' task
1961 1962 * javascript added on custom field form to show/hide fields according to the format of custom field
1962 1963 * fixed: custom fields not in csv exports
1963 1964 * fixed: project settings now displayed according to user's permissions
1964 1965 * fixed: application error when no version is selected on projects/add_file
1965 1966 * fixed: public actions not authorized for members of non public projects
1966 1967 * fixed: non public projects were shown on welcome screen even if current user is not a member
1967 1968
1968 1969
1969 1970 == 2006-10-08 v0.3.0
1970 1971
1971 1972 * user authentication against multiple LDAP (optional)
1972 1973 * token based "lost password" functionality
1973 1974 * user self-registration functionality (optional)
1974 1975 * custom fields now available for issues, users and projects
1975 1976 * new custom field format "text" (displayed as a textarea field)
1976 1977 * project & administration drop down menus in navigation bar for quicker access
1977 1978 * text formatting is preserved for long text fields (issues, projects and news descriptions)
1978 1979 * urls and emails are turned into clickable links in long text fields
1979 1980 * "due date" field added on issues
1980 1981 * tracker selection filter added on change log
1981 1982 * Localization plugin replaced with GLoc 1.1.0 (iconv required)
1982 1983 * error messages internationalization
1983 1984 * german translation added (thanks to Karim Trott)
1984 1985 * data locking for issues to prevent update conflicts (using ActiveRecord builtin optimistic locking)
1985 1986 * new filter in issues list: "Fixed version"
1986 1987 * active filters are displayed with colored background on issues list
1987 1988 * custom configuration is now defined in config/config_custom.rb
1988 1989 * user object no more stored in session (only user_id)
1989 1990 * news summary field is no longer required
1990 1991 * tables and forms redesign
1991 1992 * Fixed: boolean custom field not working
1992 1993 * Fixed: error messages for custom fields are not displayed
1993 1994 * Fixed: invalid custom fields should have a red border
1994 1995 * Fixed: custom fields values are not validated on issue update
1995 1996 * Fixed: unable to choose an empty value for 'List' custom fields
1996 1997 * Fixed: no issue categories sorting
1997 1998 * Fixed: incorrect versions sorting
1998 1999
1999 2000
2000 2001 == 2006-07-12 - v0.2.2
2001 2002
2002 2003 * Fixed: bug in "issues list"
2003 2004
2004 2005
2005 2006 == 2006-07-09 - v0.2.1
2006 2007
2007 2008 * new databases supported: Oracle, PostgreSQL, SQL Server
2008 2009 * projects/subprojects hierarchy (1 level of subprojects only)
2009 2010 * environment information display in admin/info
2010 2011 * more filter options in issues list (rev6)
2011 2012 * default language based on browser settings (Accept-Language HTTP header)
2012 2013 * issues list exportable to CSV (rev6)
2013 2014 * simple_format and auto_link on long text fields
2014 2015 * more data validations
2015 2016 * Fixed: error when all mail notifications are unchecked in admin/mail_options
2016 2017 * Fixed: all project news are displayed on project summary
2017 2018 * Fixed: Can't change user password in users/edit
2018 2019 * Fixed: Error on tables creation with PostgreSQL (rev5)
2019 2020 * Fixed: SQL error in "issue reports" view with PostgreSQL (rev5)
2020 2021
2021 2022
2022 2023 == 2006-06-25 - v0.1.0
2023 2024
2024 2025 * multiple users/multiple projects
2025 2026 * role based access control
2026 2027 * issue tracking system
2027 2028 * fully customizable workflow
2028 2029 * documents/files repository
2029 2030 * email notifications on issue creation and update
2030 2031 * multilanguage support (except for error messages):english, french, spanish
2031 2032 * online manual in french (unfinished)
General Comments 0
You need to be logged in to leave comments. Login now