annotate app/controllers/issue_moves_controller.rb @ 868:e203d95588cd feature_135

Close obsolete branch feature_135
author Chris Cannam
date Tue, 12 Apr 2011 18:03:18 +0100
parents 94944d00e43c
children cbce1fd3b1b7
rev   line source
Chris@14 1 class IssueMovesController < ApplicationController
Chris@14 2 default_search_scope :issues
chris@37 3 before_filter :find_issues, :check_project_uniqueness
Chris@14 4 before_filter :authorize
Chris@14 5
Chris@14 6 def new
Chris@14 7 prepare_for_issue_move
Chris@14 8 render :layout => false if request.xhr?
Chris@14 9 end
Chris@14 10
Chris@14 11 def create
Chris@14 12 prepare_for_issue_move
Chris@14 13
Chris@14 14 if request.post?
Chris@14 15 new_tracker = params[:new_tracker_id].blank? ? nil : @target_project.trackers.find_by_id(params[:new_tracker_id])
Chris@14 16 unsaved_issue_ids = []
Chris@14 17 moved_issues = []
Chris@14 18 @issues.each do |issue|
Chris@14 19 issue.reload
Chris@14 20 issue.init_journal(User.current)
chris@37 21 issue.current_journal.notes = @notes if @notes.present?
Chris@14 22 call_hook(:controller_issues_move_before_save, { :params => params, :issue => issue, :target_project => @target_project, :copy => !!@copy })
Chris@14 23 if r = issue.move_to_project(@target_project, new_tracker, {:copy => @copy, :attributes => extract_changed_attributes_for_move(params)})
Chris@14 24 moved_issues << r
Chris@14 25 else
Chris@14 26 unsaved_issue_ids << issue.id
Chris@14 27 end
Chris@14 28 end
Chris@14 29 set_flash_from_bulk_issue_save(@issues, unsaved_issue_ids)
Chris@14 30
Chris@14 31 if params[:follow]
Chris@14 32 if @issues.size == 1 && moved_issues.size == 1
Chris@14 33 redirect_to :controller => 'issues', :action => 'show', :id => moved_issues.first
Chris@14 34 else
Chris@14 35 redirect_to :controller => 'issues', :action => 'index', :project_id => (@target_project || @project)
Chris@14 36 end
Chris@14 37 else
Chris@14 38 redirect_to :controller => 'issues', :action => 'index', :project_id => @project
Chris@14 39 end
Chris@14 40 return
Chris@14 41 end
Chris@14 42 end
Chris@14 43
Chris@14 44 private
Chris@14 45
Chris@14 46 def prepare_for_issue_move
Chris@14 47 @issues.sort!
Chris@14 48 @copy = params[:copy_options] && params[:copy_options][:copy]
Chris@14 49 @allowed_projects = Issue.allowed_target_projects_on_move
Chris@14 50 @target_project = @allowed_projects.detect {|p| p.id.to_s == params[:new_project_id]} if params[:new_project_id]
Chris@14 51 @target_project ||= @project
Chris@14 52 @trackers = @target_project.trackers
Chris@14 53 @available_statuses = Workflow.available_statuses(@project)
chris@37 54 @notes = params[:notes]
chris@37 55 @notes ||= ''
Chris@14 56 end
Chris@14 57
Chris@14 58 def extract_changed_attributes_for_move(params)
Chris@14 59 changed_attributes = {}
chris@37 60 [:assigned_to_id, :status_id, :start_date, :due_date, :priority_id].each do |valid_attribute|
Chris@14 61 unless params[valid_attribute].blank?
Chris@14 62 changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute])
Chris@14 63 end
Chris@14 64 end
Chris@14 65 changed_attributes
Chris@14 66 end
Chris@14 67
Chris@14 68 end