From: Jean-Philippe Lang Date: Sun, 13 Oct 2013 10:31:04 +0000 (+0000) Subject: Fixed that controller_issues_edit_before/after_save hooks have no controller context... X-Git-Tag: 2.4.0~49 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=94e7df78ca5265b20d97487a5ba8465644d72710;p=redmine.git Fixed that controller_issues_edit_before/after_save hooks have no controller context (#15044). Patch by Jordan Hollinger. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@12219 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index a0f296487..0ff8ded82 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -181,7 +181,7 @@ class IssuesController < ApplicationController @issue.save_attachments(params[:attachments] || (params[:issue] && params[:issue][:uploads])) saved = false begin - saved = @issue.save_issue_with_child_records(params, @time_entry) + saved = save_issue_with_child_records rescue ActiveRecord::StaleObjectError @conflict = true if params[:last_journal_id] @@ -452,4 +452,26 @@ class IssuesController < ApplicationController end attributes end + + # Saves @issue and a time_entry from the parameters + def save_issue_with_child_records + Issue.transaction do + if params[:time_entry] && (params[:time_entry][:hours].present? || params[:time_entry][:comments].present?) && User.current.allowed_to?(:log_time, @issue.project) + time_entry = @time_entry || TimeEntry.new + time_entry.project = @issue.project + time_entry.issue = @issue + time_entry.user = User.current + time_entry.spent_on = User.current.today + time_entry.attributes = params[:time_entry] + @issue.time_entries << time_entry + end + + call_hook(:controller_issues_edit_before_save, { :params => params, :issue => @issue, :time_entry => time_entry, :journal => @issue.current_journal}) + if @issue.save + call_hook(:controller_issues_edit_after_save, { :params => params, :issue => @issue, :time_entry => time_entry, :journal => @issue.current_journal}) + else + raise ActiveRecord::Rollback + end + end + end end diff --git a/app/models/issue.rb b/app/models/issue.rb index 42d33be09..fc25e6620 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1087,30 +1087,6 @@ class Issue < ActiveRecord::Base s end - # Saves an issue and a time_entry from the parameters - def save_issue_with_child_records(params, existing_time_entry=nil) - Issue.transaction do - if params[:time_entry] && (params[:time_entry][:hours].present? || params[:time_entry][:comments].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 = User.current.today - @time_entry.attributes = params[:time_entry] - self.time_entries << @time_entry - end - - # 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}) - else - raise ActiveRecord::Rollback - end - end - end - # Unassigns issues from +version+ if it's no longer shared with issue's project def self.update_versions_from_sharing_change(version) # Update issues assigned to the version