summaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2010-04-11 16:27:37 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2010-04-11 16:27:37 +0000
commit43e5bb75d21f4654414e025b4fd49803507eba3c (patch)
treea86e8032c7f2532a43ae1c31b92410f8cdee1dbe /app/models
parent2674c6116cade13556cea62bb6e38567fd34cf10 (diff)
downloadredmine-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.rb20
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