From 996518eea74c1295ffae3312ae164a7c79ef1dba Mon Sep 17 00:00:00 2001 From: farhatahmad <35435341+farhatahmad@users.noreply.github.com> Date: Wed, 22 May 2019 13:39:34 -0400 Subject: [PATCH] Added filter for user role (#540) --- app/assets/javascripts/admins.js | 29 +++++++++- app/assets/javascripts/search.js | 25 ++++++-- app/assets/stylesheets/_tabler-custom.scss | 2 +- app/assets/stylesheets/admins.scss | 8 ++- app/controllers/admins_controller.rb | 14 +++-- app/models/user.rb | 4 +- .../shared/admin_settings/_users.html.erb | 26 ++------- .../shared/components/_admins_role.html.erb | 36 ++++++++++++ .../shared/components/_admins_tags.html.erb | 57 +++++++++++++++++++ 9 files changed, 165 insertions(+), 36 deletions(-) create mode 100644 app/views/shared/components/_admins_role.html.erb create mode 100644 app/views/shared/components/_admins_tags.html.erb diff --git a/app/assets/javascripts/admins.js b/app/assets/javascripts/admins.js index 71b7cad1..0dff33ee 100644 --- a/app/assets/javascripts/admins.js +++ b/app/assets/javascripts/admins.js @@ -31,8 +31,21 @@ $(document).on('turbolinks:load', function(){ $("#delete-confirm").parent().attr("action", url) }) - /* COLOR SELECTORS */ + //clear the role filter if user clicks on the x + $(".clear-role").click(function(data) { + search = new URL(location.href).searchParams.get('search') + url = window.location.pathname + "?page=1" + + if (search) { + url += "&search=" + search + } + + window.location.replace(url); + }) + + /* COLOR SELECTORS */ + $('#colorinput-regular').ColorPicker({ onBeforeShow: function () { var colour = rgb2hex($("#colorinput-regular").css("background-color")) @@ -93,6 +106,19 @@ function changeBrandingImage(path) { $.post(path, {url: url}) } +// Filters by role +function filterRole(role) { + search = new URL(location.href).searchParams.get('search') + + url = window.location.pathname + "?page=1" + "&role=" + role + + if (search) { + url += "&search=" + search + } + + window.location.replace(url); +} + function rgb2hex(rgb) { rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); function hex(x) { @@ -100,3 +126,4 @@ function rgb2hex(rgb) { } return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]); } + diff --git a/app/assets/javascripts/search.js b/app/assets/javascripts/search.js index 80642256..c7d6d8db 100644 --- a/app/assets/javascripts/search.js +++ b/app/assets/javascripts/search.js @@ -77,10 +77,19 @@ function searchPage() { var controller = $("body").data('controller'); var action = $("body").data('action'); + // Check if the user filtered by role + role = new URL(location.href).searchParams.get('role') + + url = window.location.pathname + "?page=1&search=" + search + + if (role) { + url += "&role=" + role + } + if(controller === "rooms" && action === "show"){ - window.location.replace(window.location.pathname + "?page=1&search=" + search + "#recordings-table"); + window.location.replace(url + "#recordings-table"); } else{ - window.location.replace(window.location.pathname + "?page=1&search=" + search); + window.location.replace(url); } } @@ -90,9 +99,17 @@ function clearSearch() { var controller = $("body").data('controller'); var action = $("body").data('action'); + role = new URL(location.href).searchParams.get('role') + + url = window.location.pathname + "?page=1" + + if (role) { + url += "&role=" + role + } + if(controller === "rooms" && action === "show"){ - window.location.replace(window.location.pathname + "?page=1" + "#recordings-table"); + window.location.replace(url + "#recordings-table"); } else{ - window.location.replace(window.location.pathname + "?page=1"); + window.location.replace(url); } } diff --git a/app/assets/stylesheets/_tabler-custom.scss b/app/assets/stylesheets/_tabler-custom.scss index c87cabeb..9df7c337 100644 --- a/app/assets/stylesheets/_tabler-custom.scss +++ b/app/assets/stylesheets/_tabler-custom.scss @@ -59,7 +59,7 @@ @import "tabler/stamp"; //@import "tabler/chat"; //@import "tabler/example"; -//@import "tabler/tag"; +@import "tabler/tag"; //@import "tabler/syntax"; //@import "tabler/infobox"; //@import "tabler/carousel"; diff --git a/app/assets/stylesheets/admins.scss b/app/assets/stylesheets/admins.scss index 2e87b611..b84cb410 100644 --- a/app/assets/stylesheets/admins.scss +++ b/app/assets/stylesheets/admins.scss @@ -15,8 +15,8 @@ // with BigBlueButton; if not, see . #users-table { - .user-role:hover { - cursor: default; + .user-role { + color: white !important; } } @@ -31,6 +31,10 @@ } } +.tag i { + color: white !important; +} + #branding-image{ z-index: auto; } diff --git a/app/controllers/admins_controller.rb b/app/controllers/admins_controller.rb index 4c0600f8..e7930169 100644 --- a/app/controllers/admins_controller.rb +++ b/app/controllers/admins_controller.rb @@ -34,6 +34,7 @@ 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] || "" @pagy, @users = pagy(user_list) end @@ -161,15 +162,18 @@ class AdminsController < ApplicationController # Gets the list of users based on your configuration def user_list + list = if @role.present? + User.with_role(@role.to_sym).where.not(id: current_user.id) + else + User.where.not(id: current_user.id) + end + if Rails.configuration.loadbalanced_configuration - User.without_role(:super_admin) - .where(provider: user_settings_provider) - .where.not(id: current_user.id) + list.where(provider: user_settings_provider) .admins_search(@search) .admins_order(@order_column, @order_direction) else - User.where.not(id: current_user.id) - .admins_search(@search) + list.admins_search(@search) .admins_order(@order_column, @order_direction) end end diff --git a/app/models/user.rb b/app/models/user.rb index 06534269..2966e22e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -111,8 +111,8 @@ class User < ApplicationRecord "created_at" end - search_query = "name LIKE :search OR email LIKE :search OR username LIKE :search" \ - " OR #{created_at_query} LIKE :search OR provider LIKE :search" + 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_param = "%#{string}%" where(search_query, search: search_param) end diff --git a/app/views/shared/admin_settings/_users.html.erb b/app/views/shared/admin_settings/_users.html.erb index 5aebf6ea..f0ce668c 100644 --- a/app/views/shared/admin_settings/_users.html.erb +++ b/app/views/shared/admin_settings/_users.html.erb @@ -13,6 +13,10 @@ # with BigBlueButton; if not, see . %> +<% if @role.present? %> + <%= render "shared/components/admins_tags" %> +<% end %> +
@@ -69,27 +73,7 @@ <%= user.provider %> <% roles = user.roles().pluck(:name) %> - <% if roles.include?("denied")%> -
- <%= t("roles.banned") %> -
- <% elsif roles.include?("pending") %> -
- <%= t("roles.pending") %> -
- <% elsif roles.include?("super_admin") %> -
- <%= t("roles.super_admin") %> -
- <% elsif roles.include?("admin") %> -
- <%= t("roles.administrator") %> -
- <% else %> -
- <%= t("roles.user") %> -
- <% end %> + <%= render "shared/components/admins_role", roles: roles %> <% if roles.include?("pending") %> diff --git a/app/views/shared/components/_admins_role.html.erb b/app/views/shared/components/_admins_role.html.erb new file mode 100644 index 00000000..baa42abb --- /dev/null +++ b/app/views/shared/components/_admins_role.html.erb @@ -0,0 +1,36 @@ +<% +# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. +# Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below). +# This program is free software; you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free Software +# Foundation; either version 3.0 of the License, or (at your option) any later +# version. +# +# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public License along +# with BigBlueButton; if not, see . +%> + +<% if roles.include?("denied")%> + +<% elsif roles.include?("pending") %> + +<% elsif roles.include?("super_admin") %> + +<% elsif roles.include?("admin") %> + +<% else %> + +<% end %> \ No newline at end of file diff --git a/app/views/shared/components/_admins_tags.html.erb b/app/views/shared/components/_admins_tags.html.erb new file mode 100644 index 00000000..a1e6142d --- /dev/null +++ b/app/views/shared/components/_admins_tags.html.erb @@ -0,0 +1,57 @@ +<% +# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. +# Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below). +# This program is free software; you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free Software +# Foundation; either version 3.0 of the License, or (at your option) any later +# version. +# +# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public License along +# with BigBlueButton; if not, see . +%> + +
+
+
+ <% if @role == "denied"%> + + <%= t("roles.banned") %> + + + + + <% elsif @role == "pending" %> + + <%= t("roles.pending") %> + + + + + <% elsif @role == "super_admin" %> + + <%= t("roles.super_admin") %> + + + + + <% elsif @role == "admin" %> + + <%= t("roles.administrator") %> + + + + + <% else %> + + <%= t("roles.user") %> + + + + + <% end %> +
+
+
\ No newline at end of file