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?
end
def load_contents_objects kinds=[]
- @limit = 5
kind_filters = @filters.select do |attr,op,val|
op == 'is_a' and val.is_a? Array and val.count > 1
end
- if /^created_at/ =~ @order[0] and kind_filters.count == 1
+ if /^created_at\b/ =~ @order[0] and kind_filters.count == 1
# If filtering on multiple types and sorting by date: Get the
# first page of each type, sort the entire set, truncate to one
# page, and use the last item on this page as a filter for
# retrieving the next page. Ideally the API would do this for
# us, but it doesn't (yet).
+ nextpage_operator = /\bdesc$/i =~ @order[0] ? '<' : '>'
@objects = []
+ @name_link_for = {}
kind_filters.each do |attr,op,val|
(val.is_a?(Array) ? val : [val]).each do |type|
- @objects += @object.contents(order: @order,
- limit: @limit,
- include_linked: true,
- filters: (@filters - kind_filters + [['uuid', 'is_a', type]]),
- offset: @offset)
+ objects = @object.contents(order: @order,
+ limit: @limit,
+ include_linked: true,
+ filters: (@filters - kind_filters + [['uuid', 'is_a', type]]),
+ offset: @offset)
+ objects.each do |object|
+ @name_link_for[object.andand.uuid] = objects.links_for(object, 'name').first
+ end
+ @objects += objects
end
end
- @objects = @objects.to_a.sort_by(&:created_at).reverse[0..@limit-1]
+ @objects = @objects.to_a.sort_by(&:created_at)
+ @objects.reverse! if nextpage_operator == '<'
+ @objects = @objects[0..@limit-1]
@next_page_filters = @filters.reject do |attr,op,val|
- attr == 'created_at' and op == '<'
+ attr == 'created_at' and op == nextpage_operator
end
if @objects.any?
- @next_page_filters += [['created_at', '<', @objects.last.created_at]]
+ @next_page_filters += [['created_at',
+ nextpage_operator,
+ @objects.last.created_at]]
@next_page_href = url_for(partial: :contents_rows,
filters: @next_page_filters.to_json)
else
offset: @offset)
@next_page_href = next_page_href(partial: :contents_rows)
end
+
+ preload_links_for_objects(@objects.to_a)
end
def show
name_links.each do |name_link|
objects_and_names << [object, name_link]
end
+ elsif @name_link_for.andand[object.uuid]
+ objects_and_names << [object, @name_link_for[object.uuid]]
elsif object.respond_to? :name
objects_and_names << [object, object]
else
head_uuid: object.uuid,
link_class: "name",
name: "")]
+
end
end
objects_and_names