Merge branch 'master' into 3296-user-profile
authorradhika <radhika@curoverse.com>
Tue, 12 Aug 2014 19:10:46 +0000 (15:10 -0400)
committerradhika <radhika@curoverse.com>
Tue, 12 Aug 2014 19:10:46 +0000 (15:10 -0400)
1  2 
apps/workbench/app/controllers/application_controller.rb

index 0802113911084e5911b4d2f08382cee8bdfa0565,10a1de8d4f3ea212bd7ce5436025bf0dd44b6c50..222888085d9e3bb95973f2a2865c3efbb569b7f5
@@@ -14,7 -14,6 +14,7 @@@ class ApplicationController < ActionCon
    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
@@@ -90,6 -89,9 +90,9 @@@
    end
  
    def load_filters_and_paging_params
+     @order = params[:order] || 'created_at desc'
+     @order = [@order] unless @order.is_a? Array
      @limit ||= 200
      if params[:limit]
        @limit = params[:limit].to_i
      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 })
+         if params[:tab_pane]
+           render_pane params[:tab_pane]
          else
            render
          end
      end
    end
  
+   helper_method :render_pane
+   def render_pane tab_pane, opts={}
+     render_opts = {
+       partial: 'show_' + tab_pane.downcase,
+       locals: {
+         comparable: self.respond_to?(:compare),
+         objects: @objects,
+         tab_pane: tab_pane
+       }.merge(opts[:locals] || {})
+     }
+     if opts[:to_string]
+       render_to_string render_opts
+     else
+       render render_opts
+     end
+   end
    def index
      find_objects_for_index if !@objects
      render_index
        f.json { render json: @object.attributes.merge(href: url_for(@object)) }
        f.html {
          if params['tab_pane']
-           comparable = self.respond_to? :compare
-           render(partial: 'show_' + params['tab_pane'].downcase,
-                  locals: { comparable: comparable, objects: @objects })
+           render_pane params['tab_pane']
          elsif request.method.in? ['GET', 'HEAD']
            render
          else
      Thread.current[:arvados_api_token] = new_token
      if new_token.nil?
        Thread.current[:user] = nil
 -    elsif (new_token == session[:arvados_api_token]) and
 -        session[:user].andand[:is_active]
 -      Thread.current[:user] = User.new(session[:user])
      else
        Thread.current[:user] = User.current
      end
        false  # We may redirect to login, or not, based on the current action.
      else
        session[:arvados_api_token] = params[:api_token]
 -      session[:user] = {
 -        uuid: user.uuid,
 -        email: user.email,
 -        first_name: user.first_name,
 -        last_name: user.last_name,
 -        is_active: user.is_active,
 -        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
      true
    end
  
 +  def check_user_profile
 +    if request.method.downcase != 'get' || params[:partial] ||
 +       params[:tab_pane] || params[:action_method] ||
 +       params[:action] == 'setup_popup'
 +      return true
 +    end
 +
 +    if missing_required_profile?
 +      render 'users/profile'
 +    end
 +    true
 +  end
 +
 +  helper_method :missing_required_profile?
 +  def missing_required_profile?
 +    missing_required = false
 +
 +    profile_config = Rails.configuration.user_profile_form_fields
 +    if current_user && profile_config
 +      current_user_profile = current_user.prefs[:profile]
 +      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 = true
 +            break
 +          end
 +        end
 +      end
 +    end
 +
 +    missing_required
 +  end
 +
    def select_theme
      return Rails.configuration.arvados_theme
    end