skip_before_filter(:find_object_by_uuid,
only: [:provenance, :show_file, :show_file_links])
# We depend on show_file to display the user agreement:
- skip_before_filter :check_user_agreements, only: [:show_file]
+ skip_before_filter :check_user_agreements, only: :show_file
+ skip_before_filter :check_user_profile, only: :show_file
RELATION_LIMIT = 5
end
def choose
- params[:limit] ||= 40
+ # 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.
- filter = [['link_class','=','name'],
- ['head_uuid','is_a','arvados#collection']]
+ params[:limit] ||= 40
- if params[:project_uuid] and !params[:project_uuid].empty?
- filter << ['tail_uuid', '=', params[:project_uuid]]
- end
+ find_objects_for_index
+ @collections = @objects
- @objects = Link.filter(filter)
+ @filters += [['link_class','=','name'],
+ ['head_uuid','is_a','arvados#collection']]
+ @objects = Link
find_objects_for_index
- @next_page_href = (next_page_offset and
- url_for(offset: next_page_offset, partial: true))
+
@name_links = @objects
@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))
Job.limit(RELATION_LIMIT).where(conds)
.results.sort_by { |j| j.finished_at || j.created_at }
end
- @output_of = jobs_with.call(output: @object.uuid)
- @log_of = jobs_with.call(log: @object.uuid)
+ @output_of = jobs_with.call(output: @object.portable_data_hash)
+ @log_of = jobs_with.call(log: @object.portable_data_hash)
@project_links = Link.limit(RELATION_LIMIT).order("modified_at DESC")
.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
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)
+ collection.manifest.each_file.any? do |file_spec|
+ CollectionsHelper.file_path(file_spec) == target
end
- false
end
def file_enumerator(opts)