From c74fa727db3fe98ff1e6e91f7bab761c494c51bc Mon Sep 17 00:00:00 2001 From: Noel De Martin Date: Mon, 16 Nov 2020 13:52:07 +0100 Subject: [PATCH] MDL-42382 admin: Add replace filters button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Luca Bösch Co-authored-by: Andrei Bautu --- lang/en/filters.php | 1 + user/filters/lib.php | 28 +++++++++++++++++----------- user/filters/user_filter_forms.php | 13 +++++++++++-- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/lang/en/filters.php b/lang/en/filters.php index f178887b4d6..e7fec9177cb 100644 --- a/lang/en/filters.php +++ b/lang/en/filters.php @@ -80,6 +80,7 @@ $string['profilelabel'] = '{$a->label}: {$a->profile} {$a->operator} {$a->value} $string['profilelabelnovalue'] = '{$a->label}: {$a->profile} {$a->operator}'; $string['removeall'] = 'Remove all filters'; $string['removeselected'] = 'Remove selected'; +$string['replacefilters'] = 'Replace filters'; $string['selectlabel'] = '{$a->label} {$a->operator} {$a->value}'; $string['startswith'] = 'starts with'; $string['tablenosave'] = 'Changes in table above are saved automatically.'; diff --git a/user/filters/lib.php b/user/filters/lib.php index a6fd73d4541..0bb6c893a4b 100644 --- a/user/filters/lib.php +++ b/user/filters/lib.php @@ -101,6 +101,12 @@ class user_filtering { // Fist the new filter form. $this->_addform = new user_add_filter_form($baseurl, array('fields' => $this->_fields, 'extraparams' => $extraparams)); if ($adddata = $this->_addform->get_data()) { + // Clear previous filters. + if (!empty($adddata->replacefilters)) { + $SESSION->user_filtering = []; + } + + // Add new filters. foreach ($this->_fields as $fname => $field) { $data = $field->check_data($adddata); if ($data === false) { @@ -111,19 +117,16 @@ class user_filtering { } $SESSION->user_filtering[$fname][] = $data; } - // Clear the form. - $_POST = array(); - $this->_addform = new user_add_filter_form($baseurl, array('fields' => $this->_fields, 'extraparams' => $extraparams)); } // Now the active filters. $this->_activeform = new user_active_filter_form($baseurl, array('fields' => $this->_fields, 'extraparams' => $extraparams)); - if ($adddata = $this->_activeform->get_data()) { - if (!empty($adddata->removeall)) { + if ($activedata = $this->_activeform->get_data()) { + if (!empty($activedata->removeall)) { $SESSION->user_filtering = array(); - } else if (!empty($adddata->removeselected) and !empty($adddata->filter)) { - foreach ($adddata->filter as $fname => $instances) { + } else if (!empty($activedata->removeselected) and !empty($activedata->filter)) { + foreach ($activedata->filter as $fname => $instances) { foreach ($instances as $i => $val) { if (empty($val)) { continue; @@ -135,11 +138,14 @@ class user_filtering { } } } - // Clear+reload the form. - $_POST = array(); - $this->_activeform = new user_active_filter_form($baseurl, array('fields' => $this->_fields, 'extraparams' => $extraparams)); } - // Now the active filters. + + // Rebuild the forms if filters data was processed. + if ($adddata || $activedata) { + $_POST = []; // Reset submitted data. + $this->_addform = new user_add_filter_form($baseurl, ['fields' => $this->_fields, 'extraparams' => $extraparams]); + $this->_activeform = new user_active_filter_form($baseurl, ['fields' => $this->_fields, 'extraparams' => $extraparams]); + } } /** diff --git a/user/filters/user_filter_forms.php b/user/filters/user_filter_forms.php index c08413598d5..b72ca1cab09 100644 --- a/user/filters/user_filter_forms.php +++ b/user/filters/user_filter_forms.php @@ -36,6 +36,8 @@ class user_add_filter_form extends moodleform { * Form definition. */ public function definition() { + global $SESSION; + $mform =& $this->_form; $fields = $this->_customdata['fields']; $extraparams = $this->_customdata['extraparams']; @@ -54,8 +56,15 @@ class user_add_filter_form extends moodleform { } } - // Add button. - $mform->addElement('submit', 'addfilter', get_string('addfilter', 'filters')); + // Add buttons. + $replacefiltersbutton = $mform->createElement('submit', 'replacefilters', get_string('replacefilters', 'filters')); + $addfilterbutton = $mform->createElement('submit', 'addfilter', get_string('addfilter', 'filters')); + $buttons = array_filter([ + empty($SESSION->user_filtering) ? null : $replacefiltersbutton, + $addfilterbutton, + ]); + + $mform->addGroup($buttons); } }