From 5d916fc76a1ffcd4d7b446ff063ecfd25f5dfad5 Mon Sep 17 00:00:00 2001 From: Stephen Beaver Date: Wed, 3 Feb 2016 11:01:47 -0500 Subject: Improvements to the priviledge filter functionality --- src/usr/local/www/diag_backup.php | 2 +- src/usr/local/www/index.php | 2 +- src/usr/local/www/system_usermanager_addprivs.php | 65 ++++++++++++++++++++--- 3 files changed, 59 insertions(+), 10 deletions(-) (limited to 'src/usr/local/www') diff --git a/src/usr/local/www/diag_backup.php b/src/usr/local/www/diag_backup.php index 30da41b..242551c 100644 --- a/src/usr/local/www/diag_backup.php +++ b/src/usr/local/www/diag_backup.php @@ -57,7 +57,7 @@ */ ##|+PRIV -##|*IDENT=page-diagnostics-backup/restore +##|*IDENT=page-diagnostics-backup-restore ##|*NAME=Diagnostics: Backup/restore ##|*DESCR=Allow access to the 'Diagnostics: Backup/restore' page. ##|*MATCH=diag_backup.php* diff --git a/src/usr/local/www/index.php b/src/usr/local/www/index.php index 25a6a57..55de55e 100644 --- a/src/usr/local/www/index.php +++ b/src/usr/local/www/index.php @@ -57,7 +57,7 @@ */ ##|+PRIV -##|*IDENT=page-system-login/logout +##|*IDENT=page-system-login-logout ##|*NAME=System: Login / Logout / Dashboard ##|*DESCR=Allow access to the 'System: Login / Logout' page and Dashboard. ##|*MATCH=index.php* diff --git a/src/usr/local/www/system_usermanager_addprivs.php b/src/usr/local/www/system_usermanager_addprivs.php index 62c6636..35753c8 100644 --- a/src/usr/local/www/system_usermanager_addprivs.php +++ b/src/usr/local/www/system_usermanager_addprivs.php @@ -93,6 +93,7 @@ $spriv_list = $priv_list; uasort($spriv_list, admusercmp); if ($_POST) { + conf_mount_rw(); unset($input_errors); @@ -186,8 +187,15 @@ $section->addInput(new Form_Select( true ))->addClass('multiselect') ->setHelp('Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items'); - // ->setAttribute('style', 'height:400px;'); +$section->addInput(new Form_Select( + 'shadow', + 'Shadow', + null, + build_priv_list(), + true +))->addClass('shadowselect') + ->setHelp('Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items'); $section->addInput(new Form_Input( 'filtertxt', @@ -240,6 +248,7 @@ events.push(function() { + + $('.shadowselect').hide(); + // Set the number of options to display $('.multiselect').attr("size","20"); + $('.shadowselect').attr("size","20"); // When the 'sysprivs" selector is clicked, we display a description $('.multiselect').click(function() { $('#pdesc').html('' + descs[$(this).children('option:selected').index()] + ''); + + // and update the shadow list from the real list + $(".multiselect option").each(function() { + shadowoption = $('.shadowselect option').filter('[value=' + $(this).val() + ']'); + + if ($(this).is(':selected')) { + shadowoption.prop("selected", true); + } else { + shadowoption.prop("selected", false); + } + }); }); $('#btnfilter').prop('type', 'button'); $('#btnfilter').click(function() { searchterm = $('#filtertxt').val().toLowerCase(); + copyselect(true); + // Then filter $(".multiselect > option").each(function() { - if (this.text.toLowerCase().indexOf(searchterm) > -1 ) { - $(this).show(); - } else { - $(this).hide(); + if (this.text.toLowerCase().indexOf(searchterm) == -1 ) { + $(this).remove(); } }); }); @@ -282,9 +306,10 @@ events.push(function() { $('#btnclear').prop('type', 'button'); $('#btnclear').click(function() { - $(".multiselect > option").each(function() { - $(this).show(); - }); + // Copy all options from shadow to sysprivs + copyselect(true) + + $('#filtertxt').val(''); }); $('#filtertxt').keypress(function(e) { @@ -296,9 +321,33 @@ events.push(function() { // On submit unhide all options (or else they will not submit) $('form').submit(function() { + $(".multiselect > option").each(function() { $(this).show(); }); + + $('.shadowselect').remove(); + }); + + function copyselect(selected) { + // Copy all optionsfrom shadow to sysprivs + $('.multiselect').html($('.shadowselect').html()); + + if (selected) { + // Update the shadow list from the real list + $(".shadowselect option").each(function() { + multioption = $('.multiselect option').filter('[value=' + $(this).val() + ']'); + if ($(this).is(':selected')) { + multioption.prop("selected", true); + } else { + multioption.prop("selected", false); + } + }); + } + } + + $('.multiselect').mouseup(function () { + $('.multiselect').trigger('click'); }); }); //]]> -- cgit v1.1