From 4d345bc4003022ca22b5e7f42069c5a6bde41b6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Wed, 20 Jan 2016 17:29:53 -0500 Subject: [PATCH] Remember last sort option used. --- app/controllers/application_controller.rb | 22 +++++++++++++++++++++- app/models/concerns/cookie_helpers.rb | 5 +++++ app/models/group.rb | 3 ++- app/models/project.rb | 1 + app/models/user.rb | 1 + 5 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 app/models/concerns/cookie_helpers.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 633c3f55614..4c4e2ac3d3c 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -297,7 +297,8 @@ class ApplicationController < ActionController::Base end def set_filters_params - params[:sort] ||= 'id_desc' + set_default_sort + params[:scope] = 'all' if params[:scope].blank? params[:state] = 'opened' if params[:state].blank? @@ -404,4 +405,23 @@ class ApplicationController < ActionController::Base current_user.nil? && root_path == request.path end + + private + + def set_default_sort + controller_name = params[:controller].sub(/Controller\Z/, '').underscore + cookie_suffix = "_sort_#{controller_name}" + + key = if @project + "#{@project.cookie_key}#{cookie_suffix}" + elsif @group + "#{@group.cookie_key}#{cookie_suffix}" + else + "#{current_user.cookie_key}#{cookie_suffix}" + end + + cookies[key] ||= 'id_desc' + cookies[key] = params[:sort] if params[:sort].present? + params[:sort] = cookies[key] + end end diff --git a/app/models/concerns/cookie_helpers.rb b/app/models/concerns/cookie_helpers.rb new file mode 100644 index 00000000000..1c8d43a4661 --- /dev/null +++ b/app/models/concerns/cookie_helpers.rb @@ -0,0 +1,5 @@ +module CookieHelpers + def cookie_key + "#{model_name.singular}_#{id}" + end +end diff --git a/app/models/group.rb b/app/models/group.rb index 5a31b46920c..3ba18b85193 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -19,7 +19,8 @@ require 'file_size_validator' class Group < Namespace include Gitlab::ConfigHelper include Referable - + include CookieHelpers + has_many :group_members, dependent: :destroy, as: :source, class_name: 'GroupMember' alias_method :members, :group_members has_many :users, through: :group_members diff --git a/app/models/project.rb b/app/models/project.rb index 5579710a476..5ba7532c61a 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -51,6 +51,7 @@ class Project < ActiveRecord::Base include AfterCommitQueue include CaseSensitivity include TokenAuthenticatable + include CookieHelpers extend Gitlab::ConfigHelper diff --git a/app/models/user.rb b/app/models/user.rb index 4214f01f6a4..c24f8a35380 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -73,6 +73,7 @@ class User < ActiveRecord::Base include Sortable include CaseSensitivity include TokenAuthenticatable + include CookieHelpers add_authentication_token_field :authentication_token