annotate app/controllers/issue_moves_controller.rb @ 36:de76cd3e8c8e cc-branches

* Probably abortive experiments in extracting the branch from Hg
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Wed, 20 Oct 2010 10:07:29 +0100
parents 1d32c0a0efbf
children 94944d00e43c
rev   line source
Chris@14 1 class IssueMovesController < ApplicationController
Chris@14 2 default_search_scope :issues
Chris@14 3 before_filter :find_issues
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@14 21 call_hook(:controller_issues_move_before_save, { :params => params, :issue => issue, :target_project => @target_project, :copy => !!@copy })
Chris@14 22 if r = issue.move_to_project(@target_project, new_tracker, {:copy => @copy, :attributes => extract_changed_attributes_for_move(params)})
Chris@14 23 moved_issues << r
Chris@14 24 else
Chris@14 25 unsaved_issue_ids << issue.id
Chris@14 26 end
Chris@14 27 end
Chris@14 28 set_flash_from_bulk_issue_save(@issues, unsaved_issue_ids)
Chris@14 29
Chris@14 30 if params[:follow]
Chris@14 31 if @issues.size == 1 && moved_issues.size == 1
Chris@14 32 redirect_to :controller => 'issues', :action => 'show', :id => moved_issues.first
Chris@14 33 else
Chris@14 34 redirect_to :controller => 'issues', :action => 'index', :project_id => (@target_project || @project)
Chris@14 35 end
Chris@14 36 else
Chris@14 37 redirect_to :controller => 'issues', :action => 'index', :project_id => @project
Chris@14 38 end
Chris@14 39 return
Chris@14 40 end
Chris@14 41 end
Chris@14 42
Chris@14 43 private
Chris@14 44
Chris@14 45 def prepare_for_issue_move
Chris@14 46 @issues.sort!
Chris@14 47 @copy = params[:copy_options] && params[:copy_options][:copy]
Chris@14 48 @allowed_projects = Issue.allowed_target_projects_on_move
Chris@14 49 @target_project = @allowed_projects.detect {|p| p.id.to_s == params[:new_project_id]} if params[:new_project_id]
Chris@14 50 @target_project ||= @project
Chris@14 51 @trackers = @target_project.trackers
Chris@14 52 @available_statuses = Workflow.available_statuses(@project)
Chris@14 53 end
Chris@14 54
Chris@14 55 def extract_changed_attributes_for_move(params)
Chris@14 56 changed_attributes = {}
Chris@14 57 [:assigned_to_id, :status_id, :start_date, :due_date].each do |valid_attribute|
Chris@14 58 unless params[valid_attribute].blank?
Chris@14 59 changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute])
Chris@14 60 end
Chris@14 61 end
Chris@14 62 changed_attributes
Chris@14 63 end
Chris@14 64
Chris@14 65 end