14287: Merge branch 'master' into 14287-federated-list
[arvados.git] / apps / workbench / app / controllers / pipeline_instances_controller.rb
index 57deee43e0506ee1817d40dabfba976bc6846747..c8863653a1b8f30433ce77d2570bd831cc7cfbd7 100644 (file)
@@ -1,8 +1,12 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
 class PipelineInstancesController < ApplicationController
-  skip_before_filter :find_object_by_uuid, only: :compare
-  before_filter :find_objects_by_uuid, only: :compare
-  skip_around_filter :require_thread_api_token, if: proc { |ctrl|
-    Rails.configuration.anonymous_user_token and
+  skip_before_action :find_object_by_uuid, only: :compare
+  before_action :find_objects_by_uuid, only: :compare
+  skip_around_action :require_thread_api_token, if: proc { |ctrl|
+    !Rails.configuration.Users.AnonymousUserToken.empty? and
     'show' == ctrl.action_name
   }
 
@@ -53,7 +57,7 @@ class PipelineInstancesController < ApplicationController
     end
     @object.state = 'New'
 
-    # set owner_uuid to that of source, provided it is a project and wriable by current user
+    # set owner_uuid to that of source, provided it is a project and writable by current user
     current_project = Group.find(source.owner_uuid) rescue nil
     if (current_project && current_project.writable_by.andand.include?(current_user.uuid))
       @object.owner_uuid = source.owner_uuid
@@ -63,7 +67,7 @@ class PipelineInstancesController < ApplicationController
   end
 
   def update
-    @updates ||= params[@object.class.to_s.underscore.singularize.to_sym]
+    @updates ||= params.to_unsafe_hash[@object.class.to_s.underscore.singularize.to_sym]
     if (components = @updates[:components])
       components.each do |cname, component|
         if component[:script_parameters]
@@ -188,6 +192,7 @@ class PipelineInstancesController < ApplicationController
     if provenance
       @prov_svg = ProvenanceHelper::create_provenance_graph provenance, "provenance_svg", {
         :request => request,
+        :direction => :top_down,
         :all_script_parameters => true,
         :combine_jobs => :script_and_version,
         :pips => pips,
@@ -300,8 +305,10 @@ class PipelineInstancesController < ApplicationController
             value = tv[:value]
           elsif tv[:default]
             value = tv[:default]
+          else
+            value = ''
           end
-          if value
+          if value.present?
             split = value.split '/'
             if CollectionsHelper.match(split[0])
               input_pdhs << split[0]
@@ -338,6 +345,15 @@ class PipelineInstancesController < ApplicationController
     @unreadable_inputs_present
   end
 
+  def cancel
+    @object.cancel
+    if params[:return_to]
+      redirect_to params[:return_to]
+    else
+      redirect_to @object
+    end
+  end
+
   protected
   def for_comparison v
     if v.is_a? Hash or v.is_a? Array