MDL-67917 user: Add skeleton for new participants filter
[moodle.git] / user / classes / output / participants_filter.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Class for rendering user filters on the course participants page.
19  *
20  * @package    core_user
21  * @copyright  2020 Michael Hawkins <michaelh@moodle.com>
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
24 namespace core_user\output;
26 use context_course;
27 use renderable;
28 use renderer_base;
29 use stdClass;
30 use templatable;
32 /**
33  * Class for rendering user filters on the course participants page.
34  *
35  * @copyright  2020 Michael Hawkins <michaelh@moodle.com>
36  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
37  */
38 class participants_filter implements renderable, templatable {
40     /** @var context_course $context The context where the filters are being rendered. */
41     protected $context;
43     /** @var string $tableregionid The table to be updated by this filter */
44     protected $tableregionid;
46     /**
47      * Participants filter constructor.
48      *
49      * @param context_course $context The context where the filters are being rendered.
50      * @param string $tableregionid The table to be updated by this filter
51      */
52     public function __construct(context_course $context, string $tableregionid) {
53         $this->context = $context;
54         $this->tableregionid = $tableregionid;
55     }
57     /**
58      * Get data for all filter types.
59      *
60      * @return array
61      */
62     protected function get_filtertypes(): array {
63         $filtertypes = [];
65         if ($filtertype = $this->get_enrolmentstatus_filter()) {
66             $filtertypes[] = $filtertype;
67         }
69         return $filtertypes;
70     }
72     /**
73      * Get data for the enrolment status filter.
74      *
75      * @return stdClass|null
76      */
77     protected function get_enrolmentstatus_filter(): ?stdClass {
78         if (!has_capability('moodle/course:enrolreview', $this->context)) {
79             return null;
80         }
82         return $this->get_filter_object(
83             'status',
84             get_string('participationstatus', 'core_enrol'),
85             false,
86             true,
87             null,
88             [
89                 (object) [
90                     'value' => ENROL_USER_ACTIVE,
91                     'title' => get_string('active'),
92                 ],
93                 (object) [
94                     'value' => ENROL_USER_SUSPENDED,
95                     'title'  => get_string('inactive'),
96                 ],
97             ]
98         );
99     }
101     /**
102      * Export the renderer data in a mustache template friendly format.
103      *
104      * @param renderer_base $output Unused.
105      * @return stdClass Data in a format compatible with a mustache template.
106      */
107     public function export_for_template(renderer_base $output): stdClass {
108         return (object) [
109             'tableregionid' => $this->tableregionid,
110             'courseid' => $this->context->instanceid,
111             'filtertypes' => $this->get_filtertypes(),
112         ];
114         return $data;
115     }
117     /**
118      * Get a standardised filter object.
119      *
120      * @param string $name
121      * @param string $title
122      * @param bool $custom
123      * @param bool $multiple
124      * @param string|null $filterclass
125      * @param array $values
126      * @return stdClass|null
127      */
128     protected function get_filter_object(
129         string $name,
130         string $title,
131         bool $custom,
132         bool $multiple,
133         ?string $filterclass,
134         array $values
135     ): ?stdClass {
136         if (empty($values)) {
137             // Do not show empty filters.
138             return null;
139         }
141         return (object) [
142             'name' => $name,
143             'title' => $title,
144             'allowcustom' => $custom,
145             'allowmultiple' => $multiple,
146             'filtertypeclass' => $filterclass,
147             'values' => $values,
148         ];
149     }