X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/fd1613bf6ad5af029255959ecf86f313b08d03ee..8deda2012ea7e25610f2cbd0a271e131d9364503:/apps/workbench/app/controllers/application_controller.rb?ds=sidebyside diff --git a/apps/workbench/app/controllers/application_controller.rb b/apps/workbench/app/controllers/application_controller.rb index 3d82b23ba5..3270cfb376 100644 --- a/apps/workbench/app/controllers/application_controller.rb +++ b/apps/workbench/app/controllers/application_controller.rb @@ -118,7 +118,9 @@ class ApplicationController < ActionController::Base def load_filters_and_paging_params if params[:order].blank? @order = 'created_at desc' - elsif !params[:order].is_a? Array + elsif params[:order].is_a? Array + @order = params[:order] + else begin @order = JSON.load(params[:order]) rescue @@ -162,11 +164,23 @@ class ApplicationController < ActionController::Base def find_objects_for_index @objects ||= model_class @objects = @objects.filter(@filters).limit(@limit).offset(@offset) + @objects.fetch_multiple_pages(false) end def render_index respond_to do |f| - f.json { render json: @objects } + f.json { + if params[:partial] + @next_page_href = next_page_href(partial: params[:partial], filters: @filters.to_json) + render json: { + content: render_to_string(partial: "show_#{params[:partial]}", + formats: [:html]), + next_page_href: @next_page_href + } + else + render json: @objects + end + } f.html { if params[:tab_pane] render_pane params[:tab_pane] @@ -397,12 +411,17 @@ class ApplicationController < ActionController::Base false # For convenience to return from callbacks end - def using_specific_api_token(api_token) + def using_specific_api_token(api_token, opts={}) start_values = {} [:arvados_api_token, :user].each do |key| start_values[key] = Thread.current[key] end - load_api_token(api_token) + if opts.fetch(:load_user, true) + load_api_token(api_token) + else + Thread.current[:arvados_api_token] = api_token + Thread.current[:user] = nil + end begin yield ensure @@ -828,6 +847,12 @@ class ApplicationController < ActionController::Base crumbs = [] current = @name_link || @object while current + # Halt if a group ownership loop is detected. API should refuse + # to produce this state, but it could still arise from a race + # condition when group ownership changes between our find() + # queries. + break if crumbs.collect(&:uuid).include? current.uuid + if current.is_a?(Group) and current.group_class == 'project' crumbs.prepend current end