diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2010-04-11 16:27:37 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2010-04-11 16:27:37 +0000 |
commit | 43e5bb75d21f4654414e025b4fd49803507eba3c (patch) | |
tree | a86e8032c7f2532a43ae1c31b92410f8cdee1dbe /app/models | |
parent | 2674c6116cade13556cea62bb6e38567fd34cf10 (diff) | |
download | redmine-43e5bb75d21f4654414e025b4fd49803507eba3c.tar.gz redmine-43e5bb75d21f4654414e025b4fd49803507eba3c.zip |
Fixed: issue optimistic locking broken by r3308 (#5280).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3663 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/issue.rb | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb index 012661cad..e2c85e1db 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -212,6 +212,7 @@ class Issue < ActiveRecord::Base done_ratio estimated_hours custom_field_values + lock_version ) unless const_defined?(:SAFE_ATTRIBUTES) # Safely sets attributes @@ -481,6 +482,7 @@ class Issue < ActiveRecord::Base end # Saves an issue, time_entry, attachments, and a journal from the parameters + # Returns false if save fails def save_issue_with_child_records(params, existing_time_entry=nil) if params[:time_entry] && params[:time_entry][:hours].present? && User.current.allowed_to?(:log_time, project) @time_entry = existing_time_entry || TimeEntry.new @@ -498,14 +500,20 @@ class Issue < ActiveRecord::Base attachments[:files].each {|a| @current_journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)} # TODO: Rename hook Redmine::Hook.call_hook(:controller_issues_edit_before_save, { :params => params, :issue => self, :time_entry => @time_entry, :journal => @current_journal}) - if save - # TODO: Rename hook - Redmine::Hook.call_hook(:controller_issues_edit_after_save, { :params => params, :issue => self, :time_entry => @time_entry, :journal => @current_journal}) - return true + begin + if save + # TODO: Rename hook + Redmine::Hook.call_hook(:controller_issues_edit_after_save, { :params => params, :issue => self, :time_entry => @time_entry, :journal => @current_journal}) + return true + else + return false + end + rescue ActiveRecord::StaleObjectError + attachments[:files].each(&:destroy) + errors.add_to_base l(:notice_locking_conflict) + return false end end - # failure, returns false - end # Unassigns issues from +version+ if it's no longer shared with issue's project |