From b84f10a51a7607192217a589a2b21ce604dc857f Mon Sep 17 00:00:00 2001 From: Ahmad Farhat Date: Fri, 12 Jun 2020 10:01:53 -0400 Subject: [PATCH] GRN2-xx: Cleaned up manage users query (#1786) * Cleaned up manage users query * Bring back filter by role --- app/controllers/admins_controller.rb | 3 +-- app/controllers/concerns/populator.rb | 10 ++++++---- app/models/user.rb | 22 +++++++--------------- 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/app/controllers/admins_controller.rb b/app/controllers/admins_controller.rb index 577162b8..baabb19e 100644 --- a/app/controllers/admins_controller.rb +++ b/app/controllers/admins_controller.rb @@ -37,9 +37,8 @@ class AdminsController < ApplicationController @search = params[:search] || "" @order_column = params[:column] && params[:direction] != "none" ? params[:column] : "created_at" @order_direction = params[:direction] && params[:direction] != "none" ? params[:direction] : "DESC" - - @role = params[:role] ? Role.find_by(name: params[:role], provider: @user_domain) : nil @tab = params[:tab] || "active" + @role = params[:role] ? Role.find_by(name: params[:role], provider: @user_domain) : nil @user_list = merge_user_list diff --git a/app/controllers/concerns/populator.rb b/app/controllers/concerns/populator.rb index 1b81acfe..d196ad4b 100644 --- a/app/controllers/concerns/populator.rb +++ b/app/controllers/concerns/populator.rb @@ -21,25 +21,27 @@ module Populator # Returns a list of users that are in the same context of the current user def manage_users_list - current_role = @role - initial_list = case @tab when "active" User.without_role([:pending, :denied]) when "deleted" User.deleted + when "pending" + User.with_role(:pending) + when "denied" + User.with_role(:denied) else User.all end - current_role = Role.find_by(name: @tab, provider: @user_domain) if @tab == "pending" || @tab == "denied" + initial_list = initial_list.with_role(@role.name) if @role.present? initial_list = initial_list.without_role(:super_admin) unless current_user.has_role? :super_admin initial_list = initial_list.where(provider: @user_domain) if Rails.configuration.loadbalanced_configuration initial_list.where.not(id: current_user.id) - .admins_search(@search, current_role) + .admins_search(@search) .admins_order(@order_column, @order_direction) end diff --git a/app/models/user.rb b/app/models/user.rb index ab5bafa4..71e3c8d1 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -70,7 +70,9 @@ class User < ApplicationRecord end end - def self.admins_search(string, role) + def self.admins_search(string) + return all if string.blank? + active_database = Rails.configuration.database_configuration[Rails.env]["adapter"] # Postgres requires created_at to be cast to a string created_at_query = if active_database == "postgresql" @@ -79,22 +81,12 @@ class User < ApplicationRecord "created_at" end - search_query = "" - role_search_param = "" - if role.nil? - search_query = "users.name LIKE :search OR email LIKE :search OR username LIKE :search" \ - " OR users.#{created_at_query} LIKE :search OR users.provider LIKE :search" \ - " OR roles.name LIKE :roles_search" - role_search_param = "%#{sanitize_sql_like(string)}%" - else - search_query = "(users.name LIKE :search OR email LIKE :search OR username LIKE :search" \ - " OR users.#{created_at_query} LIKE :search OR users.provider LIKE :search)" \ - " AND roles.name = :roles_search" - role_search_param = role.name - end + search_query = "users.name LIKE :search OR email LIKE :search OR username LIKE :search" \ + " OR users.#{created_at_query} LIKE :search OR users.provider LIKE :search" \ + " OR roles.name LIKE :search" search_param = "%#{sanitize_sql_like(string)}%" - where(search_query, search: search_param, roles_search: role_search_param) + where(search_query, search: search_param) end def self.admins_order(column, direction)