Mercurial > hg > soundsoftware-site
comparison app/controllers/issue_moves_controller.rb @ 14:1d32c0a0efbf
* Update to SVN trunk (revisions 3892-4040)
author | Chris Cannam |
---|---|
date | Wed, 25 Aug 2010 16:30:24 +0100 |
parents | |
children | 94944d00e43c |
comparison
equal
deleted
inserted
replaced
4:9cc62779c13a | 14:1d32c0a0efbf |
---|---|
1 class IssueMovesController < ApplicationController | |
2 default_search_scope :issues | |
3 before_filter :find_issues | |
4 before_filter :authorize | |
5 | |
6 def new | |
7 prepare_for_issue_move | |
8 render :layout => false if request.xhr? | |
9 end | |
10 | |
11 def create | |
12 prepare_for_issue_move | |
13 | |
14 if request.post? | |
15 new_tracker = params[:new_tracker_id].blank? ? nil : @target_project.trackers.find_by_id(params[:new_tracker_id]) | |
16 unsaved_issue_ids = [] | |
17 moved_issues = [] | |
18 @issues.each do |issue| | |
19 issue.reload | |
20 issue.init_journal(User.current) | |
21 call_hook(:controller_issues_move_before_save, { :params => params, :issue => issue, :target_project => @target_project, :copy => !!@copy }) | |
22 if r = issue.move_to_project(@target_project, new_tracker, {:copy => @copy, :attributes => extract_changed_attributes_for_move(params)}) | |
23 moved_issues << r | |
24 else | |
25 unsaved_issue_ids << issue.id | |
26 end | |
27 end | |
28 set_flash_from_bulk_issue_save(@issues, unsaved_issue_ids) | |
29 | |
30 if params[:follow] | |
31 if @issues.size == 1 && moved_issues.size == 1 | |
32 redirect_to :controller => 'issues', :action => 'show', :id => moved_issues.first | |
33 else | |
34 redirect_to :controller => 'issues', :action => 'index', :project_id => (@target_project || @project) | |
35 end | |
36 else | |
37 redirect_to :controller => 'issues', :action => 'index', :project_id => @project | |
38 end | |
39 return | |
40 end | |
41 end | |
42 | |
43 private | |
44 | |
45 def prepare_for_issue_move | |
46 @issues.sort! | |
47 @copy = params[:copy_options] && params[:copy_options][:copy] | |
48 @allowed_projects = Issue.allowed_target_projects_on_move | |
49 @target_project = @allowed_projects.detect {|p| p.id.to_s == params[:new_project_id]} if params[:new_project_id] | |
50 @target_project ||= @project | |
51 @trackers = @target_project.trackers | |
52 @available_statuses = Workflow.available_statuses(@project) | |
53 end | |
54 | |
55 def extract_changed_attributes_for_move(params) | |
56 changed_attributes = {} | |
57 [:assigned_to_id, :status_id, :start_date, :due_date].each do |valid_attribute| | |
58 unless params[valid_attribute].blank? | |
59 changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute]) | |
60 end | |
61 end | |
62 changed_attributes | |
63 end | |
64 | |
65 end |