diff --git a/htdocs/js/collection-edit.js b/htdocs/js/collection-edit.js new file mode 100644 index 00000000..c8173723 --- /dev/null +++ b/htdocs/js/collection-edit.js @@ -0,0 +1,24 @@ +{ + let element = document.getElementById("fld_is_calendar"); + if (element != null ) { + element.addEventListener('click', function() { + toggle_enabled('fld_is_calendar','=fld_timezone','=fld_schedule_transp','!fld_is_addressbook'); + }); + } + element = document.getElementById("fld_is_addressbook"); + if (element != null ) { + element.addEventListener('click', function() { + toggle_enabled('fld_is_addressbook','!fld_is_calendar'); + }); + } + element = document.getElementById("fld_use_default_privs"); + if (element != null ) { + element.addEventListener('click', function() { + toggle_visible('fld_use_default_privs','!privileges_settings'); + }); + } +} + +toggle_enabled('fld_is_calendar','=fld_timezone','=fld_schedule_transp','!fld_is_addressbook'); +toggle_enabled('fld_is_addressbook','!fld_is_calendar'); +toggle_visible('fld_use_default_privs','!privileges_settings'); diff --git a/htdocs/js/common.js b/htdocs/js/common.js new file mode 100644 index 00000000..99cceb54 --- /dev/null +++ b/htdocs/js/common.js @@ -0,0 +1,73 @@ +function toggle_visible() { + var argv = toggle_visible.arguments; + var argc = argv.length; + + var fld_checkbox = document.getElementById(argv[0]); + + if ( argc < 2 ) { + return; + } + + for (var i = 1; i < argc; i++) { + var block_id = argv[i].substr(1); + var block_logical = argv[i].substr(0,1); + var b = document.getElementById(block_id); + if ( block_logical == '!' ) + b.style.display = (fld_checkbox.checked ? 'none' : ''); + else + b.style.display = (!fld_checkbox.checked ? 'none' : ''); + } +} + +function toggle_privileges() { + var argv = toggle_privileges.arguments; + var argc = argv.length; + + if ( argc < 2 ) { + return; + } + var match_me = argv[0]; + + var set_to = -1; + if ( argv[1] == 'all' ) { + let fields = document.querySelectorAll('[id^=' + match_me + '_]'); + fields.forEach((field) => { + if ( set_to == -1 ) { + set_to = ( field.checked ? 0 : 1 ); + } + field.checked = set_to; + }); + } + else { + for (var i = 1; i < argc; i++) { + var f = document.getElementById( match_me + '_' + argv[i]); + if ( f != null ) { + if ( set_to == -1 ) { + set_to = ( f.checked ? 0 : 1 ); + } + f.checked = set_to; + } + } + } +} + +function toggle_enabled() { + var argv = toggle_enabled.arguments; + var argc = argv.length; + + var fld_checkbox = document.getElementById(argv[0]); + + if ( argc < 2 ) { + return; + } + + for (var i = 1; i < argc; i++) { + var fld_id = argv[i].substr(1); + var fld_logical = argv[i].substr(0,1); + var f = document.getElementById(fld_id); + if ( fld_logical == '=' ) + f.disabled = !fld_checkbox.checked; + else + f.disabled = fld_checkbox.checked; + } +} diff --git a/htdocs/js/edit.js b/htdocs/js/edit.js new file mode 100644 index 00000000..48557049 --- /dev/null +++ b/htdocs/js/edit.js @@ -0,0 +1,42 @@ +const privilege_types = ['grant_privileges', 'ticket_privileges', 'default_privileges']; + +for (const fname of privilege_types) { + let element = document.getElementById("toggle_priv_"+fname+"_all"); + if (element != null ) { + element.addEventListener('click', function() { + toggle_privileges(fname, 'all'); + }); + } + element = document.getElementById("toggle_priv_"+fname+"_rw"); + if (element != null ) { + element.addEventListener('click', function() { + toggle_privileges(fname, 'read', 'write-properties', 'write-content', 'bind', 'unbind', 'read-free-busy', 'read-current-user-privilege-set', + 'schedule-deliver-invite', 'schedule-deliver-reply', 'schedule-query-freebusy', 'schedule-send-invite', 'schedule-send-reply', + 'schedule-send-freebusy' ); + }); + } + element = document.getElementById("toggle_priv_"+fname+"_read"); + if (element != null ) { + element.addEventListener('click', function() { + toggle_privileges(fname, 'read', 'read-free-busy', 'schedule-query-freebusy', 'read-current-user-privilege-set' ); + }); + } + element = document.getElementById("toggle_priv_"+fname+"_fb"); + if (element != null ) { + element.addEventListener('click', function() { + toggle_privileges(fname, 'read-free-busy', 'schedule-query-freebusy' ); + }); + } + element = document.getElementById("toggle_priv_"+fname+"_sd"); + if (element != null ) { + element.addEventListener('click', function() { + toggle_privileges(fname, 'schedule-deliver-invite', 'schedule-deliver-reply', 'schedule-query-freebusy' ); + }); + } + element = document.getElementById("toggle_priv_"+fname+"_ss"); + if (element != null ) { + element.addEventListener('click', function() { + toggle_privileges(fname, 'schedule-send-invite', 'schedule-send-reply', 'schedule-send-freebusy' ); + }); + } +} diff --git a/htdocs/js/setup.js b/htdocs/js/setup.js new file mode 100644 index 00000000..9de677db --- /dev/null +++ b/htdocs/js/setup.js @@ -0,0 +1,8 @@ +{ + let element = document.getElementById("fld_show_phpinfo"); + if (element != null ) { + element.addEventListener('click', function() { + toggle_visible('fld_show_phpinfo','=phpinfo'); + }); + } +} diff --git a/htdocs/setup.php b/htdocs/setup.php index cb42df65..3c465596 100644 --- a/htdocs/setup.php +++ b/htdocs/setup.php @@ -483,30 +483,11 @@ $content_config2

$site_statistics_table

$heading_php_info

-

+

EOBODY; +$c->scripts[] = 'js/common.js'; +$c->scripts[] = 'js/setup.js'; include("page-footer.php"); diff --git a/inc/ui/collection-edit.php b/inc/ui/collection-edit.php index 1211e7a5..ced4f4e2 100644 --- a/inc/ui/collection-edit.php +++ b/inc/ui/collection-edit.php @@ -17,12 +17,9 @@ $editor->AddAttribute('timezone', 'id', 'fld_timezone' ); $editor->AddAttribute('schedule_transp', 'id', 'fld_schedule_transp' ); $editor->AddAttribute('is_calendar', 'id', 'fld_is_calendar'); $editor->AddAttribute('is_addressbook', 'id', 'fld_is_addressbook'); -$editor->AddAttribute('is_calendar', 'onclick', 'toggle_enabled(\'fld_is_calendar\',\'=fld_timezone\',\'=fld_schedule_transp\',\'!fld_is_addressbook\');'); -$editor->AddAttribute('is_addressbook', 'onclick', 'toggle_enabled(\'fld_is_addressbook\',\'!fld_is_calendar\');'); $editor->AddField('use_default_privs','default_privileges IS NULL'); $editor->AddAttribute('use_default_privs', 'id', 'fld_use_default_privs'); -$editor->AddAttribute('use_default_privs', 'onclick', 'toggle_visible(\'fld_use_default_privs\',\'!privileges_settings\');'); $editor->AddField('ics_file', "''"); $editor->AddAttribute('ics_file', 'title', translate('Upload an iCalendar file or VCard file to replace this collection.')); @@ -178,6 +175,9 @@ if ( $editor->Available() ) { } else { $c->page_title = $editor->Title(translate('Create New Collection')); + $c->scripts[] = 'js/common.js'; + $c->scripts[] = 'js/edit.js'; + $c->scripts[] = 'js/collection-edit.js'; $privs = decbin(privilege_to_bits($c->default_privileges)); $editor->Assign('default_privileges', $privs); $editor->Assign('username', $principal->username()); @@ -270,15 +270,10 @@ $btn_ss = htmlspecialchars(translate('Schedule Send')); $btn_ss_title = htmls if ($can_write_collection || ! $id > 0) { $privileges_row = << - - - + + + +
$privileges_set EOPRIV; $submit_row = ' ##submit## '; @@ -292,84 +287,6 @@ $csrf_field = getCsrfField(); $id = $editor->Value('collection_id'); $template = << -function toggle_privileges() { - var argv = toggle_privileges.arguments; - var argc = argv.length; - - if ( argc < 2 ) { - return; - } - var match_me = argv[0]; - - var set_to = -1; - if ( argv[1] == 'all' ) { - var form = document.getElementById(argv[2]); - var fieldcount = form.elements.length; - var matching = '/^' + match_me + '/'; - for (var i = 0; i < fieldcount; i++) { - var fieldname = form.elements[i].name; - if ( fieldname.match( match_me ) ) { - if ( set_to == -1 ) { - set_to = ( form.elements[i].checked ? 0 : 1 ); - } - form.elements[i].checked = set_to; - } - } - } - else { - for (var i = 1; i < argc; i++) { - var f = document.getElementById( match_me + '_' + argv[i]); - if ( set_to == -1 ) { - set_to = ( f.checked ? 0 : 1 ); - } - f.checked = set_to; - } - } -} - -function toggle_enabled() { - var argv = toggle_enabled.arguments; - var argc = argv.length; - - var fld_checkbox = document.getElementById(argv[0]); - - if ( argc < 2 ) { - return; - } - - for (var i = 1; i < argc; i++) { - var fld_id = argv[i].substr(1); - var fld_logical = argv[i].substr(0,1); - var f = document.getElementById(fld_id); - if ( fld_logical == '=' ) - f.disabled = !fld_checkbox.checked; - else - f.disabled = fld_checkbox.checked; - } -} - -function toggle_visible() { - var argv = toggle_visible.arguments; - var argc = argv.length; - - var fld_checkbox = document.getElementById(argv[0]); - - if ( argc < 2 ) { - return; - } - - for (var i = 1; i < argc; i++) { - var block_id = argv[i].substr(1); - var block_logical = argv[i].substr(0,1); - var b = document.getElementById(block_id); - if ( block_logical == '!' ) - b.style.display = (fld_checkbox.checked ? 'none' : ''); - else - b.style.display = (!fld_checkbox.checked ? 'none' : ''); - } -} -