diff --git a/admin/themes/default/js/user_list.js b/admin/themes/default/js/user_list.js
index 2b3833983..af31f4f26 100644
--- a/admin/themes/default/js/user_list.js
+++ b/admin/themes/default/js/user_list.js
@@ -228,6 +228,16 @@ $( document ).ready(function() {
$(".advanced-filter-select").change(update_user_list);
$("#user_search").on("input", update_user_list);
+ // disables certain status, level and group filters if they do not have users
+ $(`
+ .advanced-filter-select[name="filter_status"] option:not(:selected),
+ .advanced-filter-select[name="filter_level"] option:not(:selected),
+ .advanced-filter-select[name="filter_group"] option:not(:selected)
+ `).each(function() {
+ if (!this.textContent.split(' ')[1]){
+ $(this).prop('disabled', true);
+ }
+ });
/*View manager*/
diff --git a/admin/themes/default/template/user_list.tpl b/admin/themes/default/template/user_list.tpl
index 851361239..28dc90120 100644
--- a/admin/themes/default/template/user_list.tpl
+++ b/admin/themes/default/template/user_list.tpl
@@ -293,7 +293,7 @@ $(document).ready(function() {
@@ -302,7 +302,7 @@ $(document).ready(function() {
@@ -311,7 +311,7 @@ $(document).ready(function() {
diff --git a/admin/user_list.php b/admin/user_list.php
index 8d814aac9..13904f028 100644
--- a/admin/user_list.php
+++ b/admin/user_list.php
@@ -26,8 +26,10 @@ include(PHPWG_ROOT_PATH.'admin/include/user_tabs.inc.php');
$groups = array();
$query = '
-SELECT id, name
+SELECT id, name, COUNT(ug.user_id) as nb_users_of
FROM `'.GROUPS_TABLE.'`
+ LEFT JOIN `'. USER_GROUP_TABLE .'` ug ON id = ug.group_id
+ GROUP BY name
ORDER BY name ASC
;';
$result = pwg_query($query);
@@ -35,8 +37,11 @@ $result = pwg_query($query);
while ($row = pwg_db_fetch_assoc($result))
{
$groups[$row['id']] = $row['name'];
+ $groups_for_filter[$row['id']] = $row['nb_users_of'] ? $row['name'] . ' ('. $row['nb_users_of'] .')' : $row['name'];
}
+$template->assign('groups_for_filter', $groups_for_filter);
+
// +-----------------------------------------------------------------------+
// | Dates for filtering |
// +-----------------------------------------------------------------------+
@@ -142,6 +147,23 @@ foreach (get_enums(USER_INFOS_TABLE, 'status') as $status)
$label_of_status[$status] = l10n('user_status_'.$status);
}
+$query = '
+SELECT
+ status,
+ COUNT(*) AS nb_users_of
+ FROM '. USER_INFOS_TABLE .'
+ WHERE user_id != '. $conf['guest_id'] .'
+ GROUP BY status
+';
+
+$result = pwg_query($query);
+while($row = pwg_db_fetch_assoc($result))
+{
+ $nb_users_by_status[$row['status']] = l10n('user_status_'.$row['status']) . ' ('. $row['nb_users_of'] .')';
+}
+
+$nb_users_by_status = array_merge($label_of_status, $nb_users_by_status);
+
$pref_status_options = $label_of_status;
// a simple "admin" can't set/remove statuses webmaster/admin
@@ -154,14 +176,33 @@ if ('admin' == $user['status'])
$template->assign('label_of_status', $label_of_status);
$template->assign('pref_status_options', $pref_status_options);
$template->assign('pref_status_selected', 'normal');
+$template->assign('nb_users_by_status', $nb_users_by_status);
// user level options
foreach ($conf['available_permission_levels'] as $level)
{
$level_options[$level] = l10n(sprintf('Level %d', $level));
}
+
+$query = '
+SELECT
+ level,
+ COUNT(*) AS nb_users_of
+ FROM '. USER_INFOS_TABLE .'
+ WHERE user_id != '. $conf['guest_id'] .'
+ GROUP BY level
+';
+
+$result = pwg_query($query);
+$nb_users_by_level = $level_options;
+while($row = pwg_db_fetch_assoc($result))
+{
+ $nb_users_by_level[$row['level']] = l10n(sprintf('Level %d', $row['level'])) . ' ('. $row['nb_users_of'] .')';
+}
+
$template->assign('level_options', $level_options);
$template->assign('level_selected', $default_user['level']);
+$template->assign('nb_users_by_level', $nb_users_by_level);
$query = '
SELECT id, name, is_default