end
def choose
+ # Find collections using default find_objects logic, then search for name
+ # links, and preload any other links connected to the collections that are
+ # found.
+ # Name links will be obsolete when issue #3036 is merged,
+ # at which point this entire custom #choose function can probably be
+ # eliminated.
+
params[:limit] ||= 40
find_objects_for_index
@objects = Collection.
filter([['uuid','in',@name_links.collect(&:head_uuid)]])
+
preload_links_for_objects (@collections.to_a + @objects.to_a)
super
end
def index
+ # API server index doesn't return manifest_text by default, but our
+ # callers want it unless otherwise specified.
+ @select ||= Collection.columns.map(&:name)
+ base_search = Collection.select(@select)
if params[:search].andand.length.andand > 0
tags = Link.where(any: ['contains', params[:search]])
- @collections = (Collection.where(uuid: tags.collect(&:head_uuid)) |
- Collection.where(any: ['contains', params[:search]])).
+ @collections = (base_search.where(uuid: tags.collect(&:head_uuid)) |
+ base_search.where(any: ['contains', params[:search]])).
uniq { |c| c.uuid }
else
if params[:limit]
offset = 0
end
- @collections = Collection.limit(limit).offset(offset)
+ @collections = base_search.limit(limit).offset(offset)
end
@links = Link.limit(1000).
where(head_uuid: @collections.collect(&:uuid))
end
if usable_token.nil?
return # Response already rendered.
- elsif params[:file].nil? or not file_in_collection?(coll, params[:file])
+ elsif params[:file].nil? or not coll.manifest.has_file?(params[:file])
return render_not_found
end
opts = params.merge(arvados_api_token: usable_token)
.where(head_uuid: @object.uuid, link_class: 'name').results
project_hash = Group.where(uuid: @project_links.map(&:tail_uuid)).to_hash
@projects = project_hash.values
+
+ if @object.uuid.match /[0-9a-f]{32}/
+ @same_pdh = Collection.filter([["portable_data_hash", "=", @object.portable_data_hash]])
+ owners = @same_pdh.map {|s| s.owner_uuid}.to_a
+ preload_objects_for_dataclass Group, owners
+ preload_objects_for_dataclass User, owners
+ end
+
@permissions = Link.limit(RELATION_LIMIT).order("modified_at DESC")
.where(head_uuid: @object.uuid, link_class: 'permission',
name: 'can_read').results
return nil
end
- def file_in_collection?(collection, filename)
- target = CollectionsHelper.file_path(File.split(filename))
- collection.files.each do |file_spec|
- return true if (CollectionsHelper.file_path(file_spec) == target)
- end
- false
- end
-
def file_enumerator(opts)
FileStreamer.new opts
end