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