X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2ff5d889c8d169a85781d13edcf7988fb94cc248..a5186eeef2d320d34d70d9f55c70a1e6679c29cf:/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 f6c782d8f6..0593ee38dc 100644 --- a/apps/workbench/app/controllers/application_controller.rb +++ b/apps/workbench/app/controllers/application_controller.rb @@ -12,7 +12,9 @@ class ApplicationController < ActionController::Base # Methods that don't require login should # skip_around_filter :require_thread_api_token around_filter :require_thread_api_token, except: ERROR_ACTIONS + before_filter :accept_uuid_as_id_param, except: ERROR_ACTIONS before_filter :check_user_agreements, except: ERROR_ACTIONS + before_filter :check_user_profile, except: [:update_profile] + ERROR_ACTIONS before_filter :check_user_notifications, except: ERROR_ACTIONS before_filter :load_filters_and_paging_params, except: ERROR_ACTIONS before_filter :find_object_by_uuid, except: [:index, :choose] + ERROR_ACTIONS @@ -349,10 +351,14 @@ class ApplicationController < ActionController::Base end end - def find_object_by_uuid + + def accept_uuid_as_id_param if params[:id] and params[:id].match /\D/ params[:uuid] = params.delete :id end + end + + def find_object_by_uuid begin if not model_class @object = nil @@ -417,6 +423,7 @@ class ApplicationController < ActionController::Base is_admin: user.is_admin, prefs: user.prefs } + if !request.format.json? and request.method.in? ['GET', 'HEAD'] # Repeat this request with api_token in the (new) session # cookie instead of the query string. This prevents API @@ -510,6 +517,41 @@ class ApplicationController < ActionController::Base true end + def check_user_profile + profile_config = Rails.configuration.user_profile_form_fields + + if request.method.downcase != 'get' || params[:partial] || + params[:tab_pane] || params[:action_method] || + params[:action] == 'setup_popup' + return true + end + + if current_user && profile_config + missing_required_profile = false + + user_prefs = current_user.prefs + current_user.reload if !user_prefs[:profile] + user_prefs = current_user.prefs + current_user_profile = user_prefs[:profile] if user_prefs + + profile_config.kind_of?(Array) && profile_config.andand.each do |entry| + if entry['required'] + if !current_user_profile || + !current_user_profile[entry['key'].to_sym] || + current_user_profile[entry['key'].to_sym].empty? + missing_required_profile = true + break + end + end + end + + if missing_required_profile + render 'users/profile' + end + end + true + end + def select_theme return Rails.configuration.arvados_theme end @@ -577,7 +619,7 @@ class ApplicationController < ActionController::Base helper_method :all_projects def all_projects @all_projects ||= Group. - filter([['group_class','in',['project','folder']]]).order('name') + filter([['group_class','=','project']]).order('name') end helper_method :my_projects @@ -617,8 +659,8 @@ class ApplicationController < ActionController::Base (Job.limit(10) | PipelineInstance.limit(10)). sort_by do |x| - x.finished_at || x.started_at || x.created_at rescue x.created_at - end + (x.finished_at || x.started_at rescue nil) || x.modified_at || x.created_at + end.reverse end helper_method :my_project_tree @@ -688,7 +730,7 @@ class ApplicationController < ActionController::Base crumbs = [] current = @name_link || @object while current - if current.is_a?(Group) and current.group_class.in?(['project','folder']) + if current.is_a?(Group) and current.group_class == 'project' crumbs.prepend current end if current.is_a? Link @@ -702,7 +744,7 @@ class ApplicationController < ActionController::Base helper_method :current_project_uuid def current_project_uuid - if @object.is_a? Group and @object.group_class.in?(['project','folder']) + if @object.is_a? Group and @object.group_class == 'project' @object.uuid elsif @name_link.andand.tail_uuid @name_link.tail_uuid