Added filter for user role (#540)

This commit is contained in:
farhatahmad 2019-05-22 13:39:34 -04:00 committed by Jesus Federico
parent eac8290001
commit 996518eea7
9 changed files with 165 additions and 36 deletions

View File

@ -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]);
}

View File

@ -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);
}
}

View File

@ -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";

View File

@ -15,8 +15,8 @@
// with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
#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;
}

View File

@ -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

View File

@ -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

View File

@ -13,6 +13,10 @@
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
%>
<% if @role.present? %>
<%= render "shared/components/admins_tags" %>
<% end %>
<div class="form-group">
<div class="row">
<div class="col-12">
@ -69,27 +73,7 @@
<td><%= user.provider %></td>
<td class="text-center">
<% roles = user.roles().pluck(:name) %>
<% if roles.include?("denied")%>
<div class="user-role btn btn-sm btn-gray-dark">
<%= t("roles.banned") %>
</div>
<% elsif roles.include?("pending") %>
<div class="user-role btn btn-sm btn-cyan">
<%= t("roles.pending") %>
</div>
<% elsif roles.include?("super_admin") %>
<div class="user-role btn btn-sm btn-red">
<%= t("roles.super_admin") %>
</div>
<% elsif roles.include?("admin") %>
<div class="user-role btn btn-sm btn-yellow">
<%= t("roles.administrator") %>
</div>
<% else %>
<div class="user-role btn btn-sm btn-gray">
<%= t("roles.user") %>
</div>
<% end %>
<%= render "shared/components/admins_role", roles: roles %>
</td>
<td>
<% if roles.include?("pending") %>

View File

@ -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 <http://www.gnu.org/licenses/>.
%>
<% if roles.include?("denied")%>
<button class="user-role btn btn-sm btn-gray-dark" onclick="filterRole('denied')">
<%= t("roles.banned") %>
</button>
<% elsif roles.include?("pending") %>
<button class="user-role btn btn-sm btn-cyan" onclick="filterRole('pending')">
<%= t("roles.pending") %>
</button>
<% elsif roles.include?("super_admin") %>
<button class="user-role btn btn-sm btn-red" onclick="filterRole('super_admin')">
<%= t("roles.super_admin") %>
</button>
<% elsif roles.include?("admin") %>
<button class="user-role btn btn-sm btn-yellow" onclick="filterRole('admin')">
<%= t("roles.administrator") %>
</button>
<% else %>
<button class="user-role btn btn-sm btn-gray" onclick="filterRole('user')">
<%= t("roles.user") %>
</button>
<% end %>

View File

@ -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 <http://www.gnu.org/licenses/>.
%>
<div class="form-group">
<div class="row">
<div class="col-12 tags">
<% if @role == "denied"%>
<span class="tag tag-gray-dark">
<%= t("roles.banned") %>
<a class="tag-addon clear-role">
<i class="fas fa-times"></i>
</a>
</span>
<% elsif @role == "pending" %>
<span class="tag tag-cyan">
<%= t("roles.pending") %>
<a class="tag-addon clear-role">
<i class="fas fa-times"></i>
</a>
</span>
<% elsif @role == "super_admin" %>
<span class="tag tag-red">
<%= t("roles.super_admin") %>
<a class="tag-addon clear-role">
<i class="fas fa-times"></i>
</a>
</span>
<% elsif @role == "admin" %>
<span class="tag tag-yellow">
<%= t("roles.administrator") %>
<a class="tag-addon clear-role">
<i class="fas fa-times"></i>
</a>
</span>
<% else %>
<span class="tag tag-gray">
<%= t("roles.user") %>
<a class="tag-addon clear-role">
<i class="fas fa-times"></i>
</a>
</span>
<% end %>
</div>
</div>
</div>