Group
end
+ def find_object_by_uuid
+ if current_user and params[:uuid] == current_user.uuid
+ @object = current_user.dup
+ @object.uuid = current_user.uuid
+ class << @object
+ def name
+ 'Home'
+ end
+ def description
+ ''
+ end
+ def attribute_editable? attr, *args
+ case attr
+ when 'description', 'name'
+ false
+ else
+ super
+ end
+ end
+ end
+ else
+ super
+ end
+ end
+
def index_pane_list
%w(Projects)
end
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?
@groups = Group.limit(10000).
select(["uuid", "name", "description"])
- begin
- @share_links = Link.permissions_for(@object)
- @user_is_manager = true
- rescue ArvadosApiClient::AccessForbiddenException,
- ArvadosApiClient::NotFoundException
- @share_links = []
- @user_is_manager = false
+ @user_is_manager = false
+ @share_links = []
+ if @object.uuid != current_user.uuid
+ begin
+ @share_links = Link.permissions_for(@object)
+ @user_is_manager = true
+ rescue ArvadosApiClient::AccessForbiddenException,
+ ArvadosApiClient::NotFoundException
+ end
end
@objects_and_names = get_objects_and_names @objects
@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