forked from External/greenlight
		
	Added filter for user role (#540)
This commit is contained in:
		
				
					committed by
					
						
						Jesus Federico
					
				
			
			
				
	
			
			
			
						parent
						
							eac8290001
						
					
				
				
					commit
					996518eea7
				
			@@ -31,6 +31,19 @@ $(document).on('turbolinks:load', function(){
 | 
				
			|||||||
      $("#delete-confirm").parent().attr("action", url)
 | 
					      $("#delete-confirm").parent().attr("action", url)
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //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 */
 | 
					    /* COLOR SELECTORS */
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    $('#colorinput-regular').ColorPicker({
 | 
					    $('#colorinput-regular').ColorPicker({
 | 
				
			||||||
@@ -93,6 +106,19 @@ function changeBrandingImage(path) {
 | 
				
			|||||||
  $.post(path, {url: url})
 | 
					  $.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) {
 | 
					function rgb2hex(rgb) {
 | 
				
			||||||
  rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
 | 
					  rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
 | 
				
			||||||
  function hex(x) {
 | 
					  function hex(x) {
 | 
				
			||||||
@@ -100,3 +126,4 @@ function rgb2hex(rgb) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
 | 
					  return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,10 +77,19 @@ function searchPage() {
 | 
				
			|||||||
  var controller = $("body").data('controller');
 | 
					  var controller = $("body").data('controller');
 | 
				
			||||||
  var action = $("body").data('action');
 | 
					  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"){
 | 
					  if(controller === "rooms" && action === "show"){
 | 
				
			||||||
    window.location.replace(window.location.pathname + "?page=1&search=" + search + "#recordings-table");
 | 
					    window.location.replace(url + "#recordings-table");
 | 
				
			||||||
  } else{
 | 
					  } 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 controller = $("body").data('controller');
 | 
				
			||||||
  var action = $("body").data('action');
 | 
					  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"){
 | 
					  if(controller === "rooms" && action === "show"){
 | 
				
			||||||
    window.location.replace(window.location.pathname + "?page=1"  + "#recordings-table");
 | 
					    window.location.replace(url + "#recordings-table");
 | 
				
			||||||
  } else{
 | 
					  } else{
 | 
				
			||||||
    window.location.replace(window.location.pathname + "?page=1");
 | 
					    window.location.replace(url);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,7 +59,7 @@
 | 
				
			|||||||
@import "tabler/stamp";
 | 
					@import "tabler/stamp";
 | 
				
			||||||
//@import "tabler/chat";
 | 
					//@import "tabler/chat";
 | 
				
			||||||
//@import "tabler/example";
 | 
					//@import "tabler/example";
 | 
				
			||||||
//@import "tabler/tag";
 | 
					@import "tabler/tag";
 | 
				
			||||||
//@import "tabler/syntax";
 | 
					//@import "tabler/syntax";
 | 
				
			||||||
//@import "tabler/infobox";
 | 
					//@import "tabler/infobox";
 | 
				
			||||||
//@import "tabler/carousel";
 | 
					//@import "tabler/carousel";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,8 +15,8 @@
 | 
				
			|||||||
// with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 | 
					// with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#users-table {
 | 
					#users-table {
 | 
				
			||||||
  .user-role:hover {
 | 
					  .user-role {
 | 
				
			||||||
    cursor: default;
 | 
					    color: white !important;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -31,6 +31,10 @@
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.tag i {
 | 
				
			||||||
 | 
					  color: white !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#branding-image{
 | 
					#branding-image{
 | 
				
			||||||
  z-index: auto;
 | 
					  z-index: auto;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,6 +34,7 @@ class AdminsController < ApplicationController
 | 
				
			|||||||
    @search = params[:search] || ""
 | 
					    @search = params[:search] || ""
 | 
				
			||||||
    @order_column = params[:column] && params[:direction] != "none" ? params[:column] : "created_at"
 | 
					    @order_column = params[:column] && params[:direction] != "none" ? params[:column] : "created_at"
 | 
				
			||||||
    @order_direction = params[:direction] && params[:direction] != "none" ? params[:direction] : "DESC"
 | 
					    @order_direction = params[:direction] && params[:direction] != "none" ? params[:direction] : "DESC"
 | 
				
			||||||
 | 
					    @role = params[:role] || ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @pagy, @users = pagy(user_list)
 | 
					    @pagy, @users = pagy(user_list)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
@@ -161,15 +162,18 @@ class AdminsController < ApplicationController
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  # Gets the list of users based on your configuration
 | 
					  # Gets the list of users based on your configuration
 | 
				
			||||||
  def user_list
 | 
					  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
 | 
					    if Rails.configuration.loadbalanced_configuration
 | 
				
			||||||
      User.without_role(:super_admin)
 | 
					      list.where(provider: user_settings_provider)
 | 
				
			||||||
          .where(provider: user_settings_provider)
 | 
					 | 
				
			||||||
          .where.not(id: current_user.id)
 | 
					 | 
				
			||||||
          .admins_search(@search)
 | 
					          .admins_search(@search)
 | 
				
			||||||
          .admins_order(@order_column, @order_direction)
 | 
					          .admins_order(@order_column, @order_direction)
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      User.where.not(id: current_user.id)
 | 
					      list.admins_search(@search)
 | 
				
			||||||
          .admins_search(@search)
 | 
					 | 
				
			||||||
          .admins_order(@order_column, @order_direction)
 | 
					          .admins_order(@order_column, @order_direction)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -111,8 +111,8 @@ class User < ApplicationRecord
 | 
				
			|||||||
      "created_at"
 | 
					      "created_at"
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    search_query = "name LIKE :search OR email LIKE :search OR username LIKE :search" \
 | 
					    search_query = "users.name LIKE :search OR email LIKE :search OR username LIKE :search" \
 | 
				
			||||||
                   " OR #{created_at_query} LIKE :search OR provider LIKE :search"
 | 
					                   " OR users.#{created_at_query} LIKE :search OR provider LIKE :search"
 | 
				
			||||||
    search_param = "%#{string}%"
 | 
					    search_param = "%#{string}%"
 | 
				
			||||||
    where(search_query, search: search_param)
 | 
					    where(search_query, search: search_param)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,6 +13,10 @@
 | 
				
			|||||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 | 
					# 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="form-group">
 | 
				
			||||||
  <div class="row">
 | 
					  <div class="row">
 | 
				
			||||||
    <div class="col-12">
 | 
					    <div class="col-12">
 | 
				
			||||||
@@ -69,27 +73,7 @@
 | 
				
			|||||||
                    <td><%= user.provider %></td>
 | 
					                    <td><%= user.provider %></td>
 | 
				
			||||||
                    <td class="text-center">
 | 
					                    <td class="text-center">
 | 
				
			||||||
                      <% roles = user.roles().pluck(:name) %>
 | 
					                      <% roles = user.roles().pluck(:name) %>
 | 
				
			||||||
                      <% if roles.include?("denied")%>
 | 
					                      <%= render "shared/components/admins_role", roles: roles %>
 | 
				
			||||||
                        <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 %>
 | 
					 | 
				
			||||||
                    </td>
 | 
					                    </td>
 | 
				
			||||||
                    <td>
 | 
					                    <td>
 | 
				
			||||||
                      <% if roles.include?("pending") %>
 | 
					                      <% if roles.include?("pending") %>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										36
									
								
								app/views/shared/components/_admins_role.html.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								app/views/shared/components/_admins_role.html.erb
									
									
									
									
									
										Normal 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 %>
 | 
				
			||||||
							
								
								
									
										57
									
								
								app/views/shared/components/_admins_tags.html.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								app/views/shared/components/_admins_tags.html.erb
									
									
									
									
									
										Normal 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>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user