From f238bb73d1b1a0a69548eb8e1a5c7fec6f01bbf4 Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Tue, 31 Jul 2012 18:29:39 +0100 Subject: [PATCH] MDL-32705 backup ui: add select all/none JavaScript on schema screens --- backup/util/ui/base_moodleform.class.php | 3 + .../ui/yui/backupselectall/backupselectall.js | 80 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 backup/util/ui/yui/backupselectall/backupselectall.js diff --git a/backup/util/ui/base_moodleform.class.php b/backup/util/ui/base_moodleform.class.php index 3a72edcad2064..ce95e7a81d6f7 100644 --- a/backup/util/ui/base_moodleform.class.php +++ b/backup/util/ui/base_moodleform.class.php @@ -324,6 +324,9 @@ public function display() { $config->noLabel = get_string('confirmcancelno', 'backup'); $PAGE->requires->yui_module('moodle-backup-confirmcancel', 'M.core_backup.watch_cancel_buttons', array($config)); + $PAGE->requires->yui_module('moodle-backup-backupselectall', 'M.core_backup.select_all_init', + array(array('select' => get_string('select'), 'all' => get_string('all'), 'none' => get_string('none')))); + parent::display(); } diff --git a/backup/util/ui/yui/backupselectall/backupselectall.js b/backup/util/ui/yui/backupselectall/backupselectall.js new file mode 100644 index 0000000000000..9f05b7f4272b8 --- /dev/null +++ b/backup/util/ui/yui/backupselectall/backupselectall.js @@ -0,0 +1,80 @@ +YUI.add('moodle-backup-backupselectall', function(Y) { + +// Namespace for the backup +M.core_backup = M.core_backup || {}; + +/** + * Adds select all/none links to the top of the backup/restore/import schema page. + */ +M.core_backup.select_all_init = function(str) { + var formid = null; + + var helper = function(e, check, type) { + e.preventDefault(); + + var len = type.length; + Y.all('input[type="checkbox"]').each(function(checkbox) { + var name = checkbox.get('name'); + if (name.substring(name.length - len) == type) { + checkbox.set('checked', check); + } + }); + + // At this point, we really need to persuade the form we are part of to + // update all of its disabledIf rules. However, as far as I can see, + // given the way that lib/form/form.js is written, that is impossible. + if (formid && M.form) { + M.form.updateFormState(formid); + } + }; + + var html_generator = function(classname, idtype) { + return '
' + + '
' + + '
' + str.select + '
' + + '
' + + '' + str.all + ' / ' + + '' + str.none + '' + + '
' + + '
' + + '
'; + }; + + var firstsection = Y.one('fieldset#coursesettings .fcontainer.clearfix .grouped_settings.section_level'); + if (!firstsection) { + // This is not a relevant page. + return; + } + if (!firstsection.one('.felement.fcheckbox')) { + // No checkboxes. + return; + } + + formid = firstsection.ancestor('form').getAttribute('id'); + + var withuserdata = false; + Y.all('input[type="checkbox"]').each(function(checkbox) { + var name = checkbox.get('name'); + if (name.substring(name.length - 9) == '_userdata') { + withuserdata = '_userdata'; + } else if (name.substring(name.length - 9) == '_userinfo') { + withuserdata = '_userinfo'; + } + }); + + var html = html_generator('include_setting section_level', 'included'); + if (withuserdata) { + html += html_generator('normal_setting', 'userdata'); + } + var links = Y.Node.create('
' + html + '
'); + firstsection.insert(links, 'before'); + + Y.one('#backup-all-included').on('click', function(e) { helper(e, true, '_included'); }); + Y.one('#backup-none-included').on('click', function(e) { helper(e, false, '_included'); }); + if (withuserdata) { + Y.one('#backup-all-userdata').on('click', function(e) { helper(e, true, withuserdata); }); + Y.one('#backup-none-userdata').on('click', function(e) { helper(e, false, withuserdata); }); + } +} + +}, '@VERSION@', {'requires':['base','node','event', 'node-event-simulate']});