See Release Notes
Long Term Support Release
Differences Between: [Versions 310 and 401] [Versions 311 and 401] [Versions 39 and 401] [Versions 400 and 401] [Versions 401 and 402] [Versions 401 and 403]
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/>. 16 17 /** 18 * Provides user rendering functionality such as printing private files tree and displaying a search utility 19 * 20 * @package core_user 21 * @copyright 2010 Dongsheng Cai <dongsheng@moodle.com> 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 defined('MOODLE_INTERNAL') || die(); 26 27 /** 28 * Provides user rendering functionality such as printing private files tree and displaying a search utility 29 * @copyright 2010 Dongsheng Cai <dongsheng@moodle.com> 30 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 31 */ 32 class core_user_renderer extends plugin_renderer_base { 33 34 /** 35 * Prints user search utility that can search user by first initial of firstname and/or first initial of lastname 36 * Prints a header with a title and the number of users found within that subset 37 * @param string $url the url to return to, complete with any parameters needed for the return 38 * @param string $firstinitial the first initial of the firstname 39 * @param string $lastinitial the first initial of the lastname 40 * @param int $usercount the amount of users meeting the search criteria 41 * @param int $totalcount the amount of users of the set/subset being searched 42 * @param string $heading heading of the subset being searched, default is All Participants 43 * @return string html output 44 */ 45 public function user_search($url, $firstinitial, $lastinitial, $usercount, $totalcount, $heading = null) { 46 47 if ($firstinitial !== 'all') { 48 set_user_preference('ifirst', $firstinitial); 49 } 50 if ($lastinitial !== 'all') { 51 set_user_preference('ilast', $lastinitial); 52 } 53 54 if (!isset($heading)) { 55 $heading = get_string('allparticipants'); 56 } 57 58 $content = html_writer::start_tag('form', array('action' => new moodle_url($url))); 59 $content .= html_writer::start_tag('div'); 60 61 // Search utility heading. 62 $content .= $this->output->heading($heading.get_string('labelsep', 'langconfig').$usercount.'/'.$totalcount, 3); 63 64 // Initials bar. 65 $prefixfirst = 'sifirst'; 66 $prefixlast = 'silast'; 67 $content .= $this->output->initials_bar($firstinitial, 'firstinitial', get_string('firstname'), $prefixfirst, $url); 68 $content .= $this->output->initials_bar($lastinitial, 'lastinitial', get_string('lastname'), $prefixlast, $url); 69 70 $content .= html_writer::end_tag('div'); 71 $content .= html_writer::tag('div', ' '); 72 $content .= html_writer::end_tag('form'); 73 74 return $content; 75 } 76 77 /** 78 * Displays the list of tagged users 79 * 80 * @param array $userlist 81 * @param bool $exclusivemode if set to true it means that no other entities tagged with this tag 82 * are displayed on the page and the per-page limit may be bigger 83 * @return string 84 */ 85 public function user_list($userlist, $exclusivemode) { 86 $tagfeed = new core_tag\output\tagfeed(); 87 foreach ($userlist as $user) { 88 $userpicture = $this->output->user_picture($user, array('size' => $exclusivemode ? 100 : 35)); 89 $fullname = fullname($user); 90 if (user_can_view_profile($user)) { 91 $profilelink = new moodle_url('/user/view.php', array('id' => $user->id)); 92 $fullname = html_writer::link($profilelink, $fullname); 93 } 94 $tagfeed->add($userpicture, $fullname); 95 } 96 97 $items = $tagfeed->export_for_template($this->output); 98 99 if ($exclusivemode) { 100 $output = '<div><ul class="inline-list">'; 101 foreach ($items['items'] as $item) { 102 $output .= '<li><div class="user-box">'. $item['img'] . $item['heading'] ."</div></li>\n"; 103 } 104 $output .= "</ul></div>\n"; 105 return $output; 106 } 107 108 return $this->output->render_from_template('core_tag/tagfeed', $items); 109 } 110 111 /** 112 * Renders the unified filter element for the course participants page. 113 * @deprecated since 3.9 114 * @throws coding_exception 115 */ 116 public function unified_filter() { 117 throw new coding_exception('unified_filter cannot be used any more, please use participants_filter instead'); 118 119 } 120 121 /** 122 * Render the data required for the participants filter on the course participants page. 123 * 124 * @param context $context The context of the course being displayed 125 * @param string $tableregionid Container of the table to be updated by this filter, is used to retrieve the table 126 * @return string 127 */ 128 public function participants_filter(context $context, string $tableregionid): string { 129 $renderable = new \core_user\output\participants_filter($context, $tableregionid); 130 $templatecontext = $renderable->export_for_template($this->output); 131 132 return $this->output->render_from_template('core_user/participantsfilter', $templatecontext); 133 } 134 135 /** 136 * Returns a formatted filter option. 137 * 138 * @param int $filtertype The filter type (e.g. status, role, group, enrolment, last access). 139 * @param string $criteria The string label of the filter type. 140 * @param int $value The value for the filter option. 141 * @param string $label The string representation of the filter option's value. 142 * @return array The formatted option with the ['filtertype:value' => 'criteria: label'] format. 143 */ 144 protected function format_filter_option($filtertype, $criteria, $value, $label) { 145 $optionlabel = get_string('filteroption', 'moodle', (object)['criteria' => $criteria, 'value' => $label]); 146 $optionvalue = "$filtertype:$value"; 147 return [$optionvalue => $optionlabel]; 148 } 149 150 /** 151 * Handles cases when after reloading the applied filters are missing in the filter options. 152 * 153 * @param array $filtersapplied The applied filters. 154 * @param array $filteroptions The filter options. 155 * @return array The formatted options with the ['filtertype:value' => 'criteria: label'] format. 156 */ 157 private function handle_missing_applied_filters($filtersapplied, $filteroptions) { 158 global $DB; 159 160 foreach ($filtersapplied as $filter) { 161 if (!array_key_exists($filter, $filteroptions)) { 162 $filtervalue = explode(':', $filter); 163 if (count($filtervalue) !== 2) { 164 continue; 165 } 166 $key = $filtervalue[0]; 167 $value = $filtervalue[1]; 168 169 switch($key) { 170 case USER_FILTER_LAST_ACCESS: 171 $now = usergetmidnight(time()); 172 $criteria = get_string('usersnoaccesssince'); 173 // Days. 174 for ($i = 1; $i < 7; $i++) { 175 $timestamp = strtotime('-' . $i . ' days', $now); 176 if ($timestamp < $value) { 177 break; 178 } 179 $val = get_string('numdays', 'moodle', $i); 180 $filteroptions += $this->format_filter_option(USER_FILTER_LAST_ACCESS, $criteria, $timestamp, $val); 181 } 182 // Weeks. 183 for ($i = 1; $i < 10; $i++) { 184 $timestamp = strtotime('-'.$i.' weeks', $now); 185 if ($timestamp < $value) { 186 break; 187 } 188 $val = get_string('numweeks', 'moodle', $i); 189 $filteroptions += $this->format_filter_option(USER_FILTER_LAST_ACCESS, $criteria, $timestamp, $val); 190 } 191 // Months. 192 for ($i = 2; $i < 12; $i++) { 193 $timestamp = strtotime('-'.$i.' months', $now); 194 if ($timestamp < $value) { 195 break; 196 } 197 $val = get_string('nummonths', 'moodle', $i); 198 $filteroptions += $this->format_filter_option(USER_FILTER_LAST_ACCESS, $criteria, $timestamp, $val); 199 } 200 // Try a year. 201 $timestamp = strtotime('-1 year', $now); 202 if ($timestamp >= $value) { 203 $val = get_string('numyear', 'moodle', 1); 204 $filteroptions += $this->format_filter_option(USER_FILTER_LAST_ACCESS, $criteria, $timestamp, $val); 205 } 206 break; 207 case USER_FILTER_ROLE: 208 $criteria = get_string('role'); 209 if ($role = $DB->get_record('role', array('id' => $value))) { 210 $role = role_get_name($role); 211 $filteroptions += $this->format_filter_option(USER_FILTER_ROLE, $criteria, $value, $role); 212 } 213 break; 214 } 215 } 216 } 217 return $filteroptions; 218 } 219 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body