From 81aea827ba3c267d3b64be6306f6d5e98258becf Mon Sep 17 00:00:00 2001 From: shawn-higgins1 <23224097+shawn-higgins1@users.noreply.github.com> Date: Tue, 23 Jul 2019 14:57:01 -0400 Subject: [PATCH] GRN2-210: Add ability to search by role (#659) * Add ability to search by role * Fix role search to work with select --- app/controllers/admins_controller.rb | 12 +++++------- app/models/user.rb | 22 ++++++++++++++++++---- config/locales/en.yml | 2 +- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/app/controllers/admins_controller.rb b/app/controllers/admins_controller.rb index 193cc4ff..de2fdd12 100644 --- a/app/controllers/admins_controller.rb +++ b/app/controllers/admins_controller.rb @@ -206,15 +206,13 @@ class AdminsController < ApplicationController User.without_role(:super_admin).where.not(id: current_user.id).includes(:roles) end - list = @role.present? ? initial_list.with_role(@role.to_sym) : initial_list - if Rails.configuration.loadbalanced_configuration - list.where(provider: user_settings_provider) - .admins_search(@search) - .admins_order(@order_column, @order_direction) + initial_list.where(provider: user_settings_provider) + .admins_search(@search, @role) + .admins_order(@order_column, @order_direction) else - list.admins_search(@search) - .admins_order(@order_column, @order_direction) + initial_list.admins_search(@search, @role) + .admins_order(@order_column, @order_direction) end end diff --git a/app/models/user.rb b/app/models/user.rb index 6ed05a76..302bafd6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -101,7 +101,7 @@ class User < ApplicationRecord end end - def self.admins_search(string) + def self.admins_search(string, role) 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" @@ -110,10 +110,24 @@ class User < ApplicationRecord "created_at" end - search_query = "users.name LIKE :search OR email LIKE :search OR username LIKE :search" \ - " OR users.#{created_at_query} LIKE :search OR provider LIKE :search" + search_query = "" + role_search_param = "" + if role.present? + search_query = "(users.name LIKE :search OR email LIKE :search OR username LIKE :search" \ + " OR users.#{created_at_query} LIKE :search OR provider LIKE :search)" \ + " AND roles.name = :roles_search" + role_search_param = role + else + search_query = "users.name LIKE :search OR email LIKE :search OR username LIKE :search" \ + " OR users.#{created_at_query} LIKE :search OR provider LIKE :search" \ + " OR roles.name LIKE :roles_search" + role_search_param = "%#{string}%".downcase + end + search_param = "%#{string}%" - where(search_query, search: search_param) + joins("LEFT OUTER JOIN users_roles ON users_roles.user_id = users.id LEFT OUTER JOIN roles " \ + "ON roles.id = users_roles.role_id").distinct + .where(search_query, search: search_param, roles_search: role_search_param) end def self.admins_order(column, direction) diff --git a/config/locales/en.yml b/config/locales/en.yml index 001a3859..9142d59a 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -360,7 +360,7 @@ en: confirm: New Password Confirmation update: Update Password roles: - administrator: Administrator + administrator: Admin banned: Banned pending: Pending super_admin: Super Admin