summaryrefslogtreecommitdiffstats
path: root/app/models/issue.rb
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2010-04-11 16:48:46 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2010-04-11 16:48:46 +0000
commitf35921d3080ff16f365d2941f82717ddb2a57b7e (patch)
treef55070df03ea99075c846de5cd959b279f682e4c /app/models/issue.rb
parent43e5bb75d21f4654414e025b4fd49803507eba3c (diff)
downloadredmine-f35921d3080ff16f365d2941f82717ddb2a57b7e.tar.gz
redmine-f35921d3080ff16f365d2941f82717ddb2a57b7e.zip
Fixes Issue#save_issue_with_child_records so that time entry do not get saved if issue save fails.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3664 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models/issue.rb')
-rw-r--r--app/models/issue.rb55
1 files changed, 28 insertions, 27 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb
index e2c85e1db..263cae132 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -484,34 +484,35 @@ class Issue < ActiveRecord::Base
# 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
- @time_entry.project = project
- @time_entry.issue = self
- @time_entry.user = User.current
- @time_entry.spent_on = Date.today
- @time_entry.attributes = params[:time_entry]
- self.time_entries << @time_entry
- end
-
- if valid?
- attachments = Attachment.attach_files(self, params[:attachments])
-
- 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})
- 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
+ Issue.transaction do
+ if params[:time_entry] && params[:time_entry][:hours].present? && User.current.allowed_to?(:log_time, project)
+ @time_entry = existing_time_entry || TimeEntry.new
+ @time_entry.project = project
+ @time_entry.issue = self
+ @time_entry.user = User.current
+ @time_entry.spent_on = Date.today
+ @time_entry.attributes = params[:time_entry]
+ self.time_entries << @time_entry
+ end
+
+ if valid?
+ attachments = Attachment.attach_files(self, params[:attachments])
+
+ 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})
+ 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})
+ else
+ raise ActiveRecord::Rollback
+ end
+ rescue ActiveRecord::StaleObjectError
+ attachments[:files].each(&:destroy)
+ errors.add_to_base l(:notice_locking_conflict)
+ raise ActiveRecord::Rollback
end
- rescue ActiveRecord::StaleObjectError
- attachments[:files].each(&:destroy)
- errors.add_to_base l(:notice_locking_conflict)
- return false
end
end
end