summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Artur <felipefac@gmail.com>2016-04-22 16:50:53 -0300
committerFelipe Artur <felipefac@gmail.com>2016-04-22 16:50:53 -0300
commite7c268a26ea2a1da4a52c49bf43f33bdf6acaeda (patch)
tree5f9d5bd5b0433d2ba3e86e031f87370fb3b7536d
parentd83d43c553281718749da1f18edc8e254264c059 (diff)
downloadgitlab-ce-issue_15221.tar.gz
Persists search filter state per project/groupissue_15221
-rw-r--r--app/controllers/application_controller.rb21
-rw-r--r--app/controllers/concerns/search_cookies.rb42
2 files changed, 43 insertions, 20 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 1c53b0b21a3..aeefafcb8f8 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -6,6 +6,7 @@ class ApplicationController < ActionController::Base
include Gitlab::GonHelper
include GitlabRoutingHelper
include PageLayoutHelper
+ include SearchCookies
before_action :authenticate_user_from_token!
before_action :authenticate_user!
@@ -354,24 +355,4 @@ class ApplicationController < ActionController::Base
current_user.nil? && root_path == request.path
end
-
- private
-
- def set_default_sort
- key = if is_a_listing_page_for?('issues') || is_a_listing_page_for?('merge_requests')
- 'issuable_sort'
- end
-
- cookies[key] = params[:sort] if key && params[:sort].present?
- params[:sort] = cookies[key] if key
- params[:sort] ||= 'id_desc'
- end
-
- def is_a_listing_page_for?(page_type)
- controller_name, action_name = params.values_at(:controller, :action)
-
- (controller_name == "projects/#{page_type}" && action_name == 'index') ||
- (controller_name == 'groups' && action_name == page_type) ||
- (controller_name == 'dashboard' && action_name == page_type)
- end
end
diff --git a/app/controllers/concerns/search_cookies.rb b/app/controllers/concerns/search_cookies.rb
new file mode 100644
index 00000000000..b425086d984
--- /dev/null
+++ b/app/controllers/concerns/search_cookies.rb
@@ -0,0 +1,42 @@
+#Persists filter state per project or group using cookies
+module SearchCookies
+ extend ActiveSupport::Concern
+
+ private
+
+ def set_default_sort
+ key = if is_a_listing_page_for?('issues') || is_a_listing_page_for?('merge_requests')
+ 'issuable_sort'
+ end
+
+ params[:sort] = get_cookie_value(key)
+ params[:sort] ||= 'id_desc'
+ end
+
+ #Save cookies based on user sessions
+ def get_cookie_value(key)
+ return unless key
+
+ subkey = "group_#{@group.id}" if @group.present?
+ subkey = "project_#{@project.id}" if @project.present?
+
+ begin
+ parsed_cookie = JSON.parse(cookies[key]) if cookies[key].present?
+ hash = parsed_cookie || {}
+ hash[subkey] = params[:sort] if params[:sort].present?
+ cookies[key] = JSON.generate(hash)
+ rescue
+ return
+ end
+
+ return hash[subkey]
+ end
+
+ def is_a_listing_page_for?(page_type)
+ controller_name, action_name = params.values_at(:controller, :action)
+
+ (controller_name == "projects/#{page_type}" && action_name == 'index') ||
+ (controller_name == 'groups' && action_name == page_type) ||
+ (controller_name == 'dashboard' && action_name == page_type)
+ end
+end