diff options
author | Felipe Artur <felipefac@gmail.com> | 2016-04-22 16:50:53 -0300 |
---|---|---|
committer | Felipe Artur <felipefac@gmail.com> | 2016-04-22 16:50:53 -0300 |
commit | e7c268a26ea2a1da4a52c49bf43f33bdf6acaeda (patch) | |
tree | 5f9d5bd5b0433d2ba3e86e031f87370fb3b7536d | |
parent | d83d43c553281718749da1f18edc8e254264c059 (diff) | |
download | gitlab-ce-issue_15221.tar.gz |
Persists search filter state per project/groupissue_15221
-rw-r--r-- | app/controllers/application_controller.rb | 21 | ||||
-rw-r--r-- | app/controllers/concerns/search_cookies.rb | 42 |
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 |