From bb4a79234b9deae5b0446b560b1d986a3c21fe7f Mon Sep 17 00:00:00 2001 From: Sara Arjona Date: Wed, 7 Feb 2018 18:31:43 +0100 Subject: [PATCH] MDL-60828 user: Reset current page when filtering/searching users Added baseurl parameter to core_user\output\unified_filter to let specify different URL, instead of using always $PAGE->url. --- user/classes/output/unified_filter.php | 15 +++++++++++++-- user/index.php | 12 ++++++------ user/renderer.php | 5 +++-- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/user/classes/output/unified_filter.php b/user/classes/output/unified_filter.php index 503fad19319..849a98664f6 100644 --- a/user/classes/output/unified_filter.php +++ b/user/classes/output/unified_filter.php @@ -23,6 +23,7 @@ */ namespace core_user\output; +use moodle_url; use renderable; use renderer_base; use stdClass; @@ -44,15 +45,22 @@ class unified_filter implements renderable, templatable { /** @var array $selectedoptions The list of selected filter option values. */ protected $selectedoptions; + /** @var moodle_url|string $baseurl The url with params needed to call up this page. */ + protected $baseurl; + /** * unified_filter constructor. * * @param array $filteroptions The filter options. * @param array $selectedoptions The list of selected filter option values. + * @param string|moodle_url $baseurl The url with params needed to call up this page. */ - public function __construct($filteroptions, $selectedoptions) { + public function __construct($filteroptions, $selectedoptions, $baseurl = null) { $this->filteroptions = $filteroptions; $this->selectedoptions = $selectedoptions; + if (!empty($baseurl)) { + $this->baseurl = new moodle_url($baseurl); + } } /** @@ -64,7 +72,10 @@ class unified_filter implements renderable, templatable { public function export_for_template(renderer_base $output) { global $PAGE; $data = new stdClass(); - $data->action = $PAGE->url->out(false); + if (empty($this->baseurl)) { + $this->baseurl = $PAGE->url; + } + $data->action = $this->baseurl->out(false); foreach ($this->selectedoptions as $option) { if (!isset($this->filteroptions[$option])) { diff --git a/user/index.php b/user/index.php index aed9016d967..4bd12a43027 100644 --- a/user/index.php +++ b/user/index.php @@ -213,18 +213,18 @@ foreach ($enrolbuttons as $enrolbutton) { } echo html_writer::div($enrolbuttonsout, 'pull-right'); -// Render the unified filter. -$renderer = $PAGE->get_renderer('core_user'); -echo $renderer->unified_filter($course, $context, $filtersapplied); - -echo '
'; - // Should use this variable so that we don't break stuff every time a variable is added or changed. $baseurl = new moodle_url('/user/index.php', array( 'contextid' => $context->id, 'id' => $course->id, 'perpage' => $perpage)); +// Render the unified filter. +$renderer = $PAGE->get_renderer('core_user'); +echo $renderer->unified_filter($course, $context, $filtersapplied, $baseurl); + +echo '
'; + $participanttable = new \core_user\participants_table($course->id, $groupid, $lastaccess, $roleid, $enrolid, $status, $searchkeywords, $bulkoperations, $selectall); $participanttable->define_baseurl($baseurl); diff --git a/user/renderer.php b/user/renderer.php index d3af40a1c8b..35711ce11e0 100644 --- a/user/renderer.php +++ b/user/renderer.php @@ -115,9 +115,10 @@ class core_user_renderer extends plugin_renderer_base { * @param stdClass $course The course object. * @param context $context The context object. * @param array $filtersapplied Array of currently applied filters. + * @param string|moodle_url $baseurl The url with params needed to call up this page. * @return bool|string */ - public function unified_filter($course, $context, $filtersapplied) { + public function unified_filter($course, $context, $filtersapplied, $baseurl = null) { global $CFG, $DB, $USER; require_once($CFG->dirroot . '/enrol/locallib.php'); @@ -248,7 +249,7 @@ class core_user_renderer extends plugin_renderer_base { // Add missing applied filters to the filter options. $filteroptions = $this->handle_missing_applied_filters($filtersapplied, $filteroptions); - $indexpage = new \core_user\output\unified_filter($filteroptions, $filtersapplied); + $indexpage = new \core_user\output\unified_filter($filteroptions, $filtersapplied, $baseurl); $context = $indexpage->export_for_template($this->output); return $this->output->render_from_template('core_user/unified_filter', $context); -- 2.43.0