X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f0bf04abdbb7e4b47be85585fba5789d695bb31e..70148c4918a95ee9a49a18bf5789801d02e8ef5e:/apps/workbench/app/controllers/application_controller.rb diff --git a/apps/workbench/app/controllers/application_controller.rb b/apps/workbench/app/controllers/application_controller.rb index ae802f840e..72eb4df1e8 100644 --- a/apps/workbench/app/controllers/application_controller.rb +++ b/apps/workbench/app/controllers/application_controller.rb @@ -63,6 +63,22 @@ class ApplicationController < ActionController::Base self.render_error status: 404 end + def render_index + respond_to do |f| + f.json { render json: @objects } + f.html { + if params['tab_pane'] + comparable = self.respond_to? :compare + render(partial: 'show_' + params['tab_pane'].downcase, + locals: { comparable: comparable, objects: @objects }) + else + render + end + } + f.js { render } + end + end + def index @limit ||= 200 if params[:limit] @@ -85,11 +101,7 @@ class ApplicationController < ActionController::Base @objects ||= model_class @objects = @objects.filter(@filters).limit(@limit).offset(@offset).all - respond_to do |f| - f.json { render json: @objects } - f.html { render } - f.js { render } - end + render_index end def show @@ -99,10 +111,16 @@ class ApplicationController < ActionController::Base respond_to do |f| f.json { render json: @object.attributes.merge(href: url_for(@object)) } f.html { - if request.method == 'GET' - render + if params['tab_pane'] + comparable = self.respond_to? :compare + render(partial: 'show_' + params['tab_pane'].downcase, + locals: { comparable: comparable, objects: @objects }) else - redirect_to params[:return_to] || @object + if request.method == 'GET' + render + else + redirect_to params[:return_to] || @object + end end } f.js { render } @@ -146,8 +164,17 @@ class ApplicationController < ActionController::Base @new_resource_attrs ||= {} @new_resource_attrs.reject! { |k,v| k.to_s == 'uuid' } @object ||= model_class.new @new_resource_attrs, params["options"] - @object.save! - redirect_to @object + if @object.save + respond_to do |f| + f.json { render json: @object.attributes.merge(href: url_for(@object)) } + f.html { + redirect_to @object + } + f.js { render } + end + else + self.render_error status: 422 + end end def destroy @@ -165,8 +192,18 @@ class ApplicationController < ActionController::Base end def current_user + return Thread.current[:user] if Thread.current[:user] + if Thread.current[:arvados_api_token] - Thread.current[:user] ||= User.current + if session[:user] + if session[:user][:is_active] != true + Thread.current[:user] = User.current + else + Thread.current[:user] = User.new(session[:user]) + end + else + Thread.current[:user] = User.current + end else logger.error "No API token in Thread" return nil @@ -260,6 +297,16 @@ class ApplicationController < ActionController::Base # call to verify its authenticity. if verify_api_token session[:arvados_api_token] = params[:api_token] + u = User.current + session[:user] = { + uuid: u.uuid, + email: u.email, + first_name: u.first_name, + last_name: u.last_name, + is_active: u.is_active, + is_admin: u.is_admin, + prefs: u.prefs + } if !request.format.json? and request.method == 'GET' # Repeat this request with api_token in the (new) session # cookie instead of the query string. This prevents API @@ -404,6 +451,8 @@ class ApplicationController < ActionController::Base } def check_user_notifications + return if params['tab_pane'] + @notification_count = 0 @notifications = []