Merge branch 'master' into 2798-go-keep-client
[arvados.git] / apps / workbench / app / controllers / actions_controller.rb
index c443c2196e372414c1d6e3361dc8e12f294c9527..2dab6dd6a86e00f52f6f2302eaa817bea2c54ffb 100644 (file)
@@ -1,10 +1,44 @@
 class ActionsController < ApplicationController
-  def combine_selected_files_into_collection
+
+  @@exposed_actions = {}
+  def self.expose_action method, &block
+    @@exposed_actions[method] = true
+    define_method method, block
+  end
+
+  def model_class
+    ArvadosBase::resource_class_for_uuid(params[:uuid])
+  end
+
+  def post
+    params.keys.collect(&:to_sym).each do |param|
+      if @@exposed_actions[param]
+        return self.send(param)
+      end
+    end
+    redirect_to :back
+  end
+
+  expose_action :copy_selections_into_folder do
+    already_named = Link.
+      filter([['tail_uuid','=',@object.uuid],
+              ['head_uuid','in',params["selection"]]]).
+      collect(&:head_uuid)
+    (params["selection"] - already_named).each do |s|
+      Link.create(tail_uuid: @object.uuid,
+                  head_uuid: s,
+                  link_class: 'name',
+                  name: "#{s} added #{Time.now}")
+    end
+    redirect_to @object
+  end
+
+  expose_action :combine_selected_files_into_collection do
     lst = []
     files = []
     params["selection"].each do |s|
       m = CollectionsHelper.match(s)
-      if m[1] and m[2]
+      if m and m[1] and m[2]
         lst.append(m[1] + m[2])
         files.append(m)
       end
@@ -73,9 +107,7 @@ class ActionsController < ApplicationController
 
     chash.each do |k,v|
       l = Link.new({
-                     tail_kind: "arvados#Collection",
                      tail_uuid: k,
-                     head_kind: "arvados#Collection", 
                      head_uuid: newuuid,
                      link_class: "provenance",
                      name: "provided"
@@ -83,14 +115,7 @@ class ActionsController < ApplicationController
       l.save!
     end
 
-    '/collections/' + newc.uuid
+    redirect_to controller: 'collections', action: :show, id: newc.uuid
   end
 
-  def post
-    if params["combine_selected_files_into_collection"]
-      redirect_to combine_selected_files_into_collection
-    else
-      redirect_to :back
-    end
-  end
 end