end
end
+ def move_items
+ target_uuid = params['target']
+ uuids_to_add = session[:selected_move_items]
+
+ uuids_to_add.
+ collect { |x| ArvadosBase::resource_class_for_uuid(x) }.
+ uniq.
+ each do |resource_class|
+ resource_class.filter([['uuid','in',uuids_to_add]]).each do |dst|
+ if resource_class == Collection
+ dst = Link.new(owner_uuid: target_uuid,
+ tail_uuid: target_uuid,
+ head_uuid: dst.uuid,
+ link_class: 'name',
+ name: target_uuid)
+ else
+ dst.owner_uuid = target_uuid
+ dst.tail_uuid = target_uuid if dst.class == Link
+ end
+ dst.save!
+ end
+ end
+ session[:selected_move_items] = nil
+ redirect_to @object
+ end
+
def destroy
while (objects = Link.filter([['owner_uuid','=',@object.uuid],
['tail_uuid','=',@object.uuid]])).any?
@errors = ["No user/group UUIDs specified to share with."]
return render_error(status: 422)
end
- results = {"success" => [], "failure" => {}}
+ results = {"success" => [], "errors" => []}
params[:uuids].each do |shared_uuid|
begin
Link.create(tail_uuid: shared_uuid, link_class: "permission",
name: "can_read", head_uuid: @object.uuid)
rescue ArvadosApiClient::ApiError => error
- results["failure"][shared_uuid] = error.api_response.andand[:errors]
+ error_list = error.api_response.andand[:errors]
+ if error_list.andand.any?
+ results["errors"] += error_list.map { |e| "#{shared_uuid}: #{e}" }
+ else
+ error_code = error.api_status || "Bad status"
+ results["errors"] << "#{shared_uuid}: #{error_code} response"
+ end
else
results["success"] << shared_uuid
end
end
- status = (results["failure"].empty?) ? 200 : 422
+ if results["errors"].empty?
+ results.delete("errors")
+ status = 200
+ else
+ status = 422
+ end
respond_to do |f|
f.json { render(json: results, status: status) }
end