diff app/controllers/workflows_controller.rb @ 245:051f544170fe

* Update to SVN trunk revision 4993
author Chris Cannam
date Thu, 03 Mar 2011 11:42:28 +0000
parents 513646585e45
children cbb26bc654de
line wrap: on
line diff
--- a/app/controllers/workflows_controller.rb	Thu Mar 03 11:40:10 2011 +0000
+++ b/app/controllers/workflows_controller.rb	Thu Mar 03 11:42:28 2011 +0000
@@ -32,14 +32,17 @@
     
     if request.post?
       Workflow.destroy_all( ["role_id=? and tracker_id=?", @role.id, @tracker.id])
-      (params[:issue_status] || []).each { |old, news| 
-        news.each { |new| 
-          @role.workflows.build(:tracker_id => @tracker.id, :old_status_id => old, :new_status_id => new) 
+      (params[:issue_status] || []).each { |status_id, transitions|
+        transitions.each { |new_status_id, options|
+          author = options.is_a?(Array) && options.include?('author') && !options.include?('always')
+          assignee = options.is_a?(Array) && options.include?('assignee') && !options.include?('always')
+          @role.workflows.build(:tracker_id => @tracker.id, :old_status_id => status_id, :new_status_id => new_status_id, :author => author, :assignee => assignee) 
         }
       }
       if @role.save
         flash[:notice] = l(:notice_successful_update)
         redirect_to :action => 'edit', :role_id => @role, :tracker_id => @tracker
+        return
       end
     end
     
@@ -48,6 +51,14 @@
       @statuses = @tracker.issue_statuses
     end
     @statuses ||= IssueStatus.find(:all, :order => 'position')
+    
+    if @tracker && @role && @statuses.any?
+      workflows = Workflow.all(:conditions => {:role_id => @role.id, :tracker_id => @tracker.id})
+      @workflows = {}
+      @workflows['always'] = workflows.select {|w| !w.author && !w.assignee}
+      @workflows['author'] = workflows.select {|w| w.author}
+      @workflows['assignee'] = workflows.select {|w| w.assignee}
+    end
   end
   
   def copy