Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.

Differences Between: [Versions 310 and 401] [Versions 311 and 401] [Versions 39 and 401]

   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  defined('MOODLE_INTERNAL') || die();
  18  
  19  require_once($CFG->libdir.'/formslib.php');
  20  
  21  /**
  22   * Event list filter form.
  23   *
  24   * @package   report_eventlist
  25   * @copyright 2014 Adrian Greeve <adrian@moodle.com>
  26   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  27   */
  28  class report_eventlist_filter_form extends moodleform {
  29  
  30      /**
  31       * Form definition method.
  32       */
  33      public function definition() {
  34  
  35          $mform = $this->_form;
  36          $mform->disable_form_change_checker();
  37          $componentarray = $this->_customdata['components'];
  38          $edulevelarray = $this->_customdata['edulevel'];
  39          $crudarray = $this->_customdata['crud'];
  40  
  41          $mform->addElement('header', 'displayinfo', get_string('filter', 'report_eventlist'));
  42  
  43          $mform->addElement('text', 'eventname', get_string('name', 'report_eventlist'));
  44          $mform->setType('eventname', PARAM_RAW);
  45  
  46          $mform->addElement('selectgroups', 'eventcomponent', get_string('component', 'report_eventlist'),
  47              self::group_components_by_type($componentarray));
  48          $mform->addElement('select', 'eventedulevel', get_string('edulevel', 'report_eventlist'), $edulevelarray);
  49          $mform->addElement('select', 'eventcrud', get_string('crud', 'report_eventlist'), $crudarray);
  50  
  51          $buttonarray = array();
  52          $buttonarray[] = $mform->createElement('button', 'filterbutton', get_string('filter', 'report_eventlist'));
  53          $buttonarray[] = $mform->createElement('button', 'clearbutton', get_string('clear', 'report_eventlist'));
  54          $mform->addGroup($buttonarray, 'filterbuttons', '', array(' '), false);
  55      }
  56  
  57      /**
  58       * Group list of component names by type for use in grouped select element
  59       *
  60       * @param string[] $components
  61       * @return array[] Component type => [...Components]
  62       */
  63      private static function group_components_by_type(array $components): array {
  64          $pluginmanager = core_plugin_manager::instance();
  65  
  66          $result = [];
  67          foreach ($components as $component) {
  68              // Core sub-systems are grouped together and are denoted by a distinct lang string.
  69              if (strpos($component, 'core') === 0) {
  70                  $componenttype = get_string('core', 'report_eventlist');
  71                  $componentname = get_string('coresubsystem', 'report_eventlist', $component);
  72              } else {
  73                  [$type] = core_component::normalize_component($component);
  74                  $componenttype = $pluginmanager->plugintype_name_plural($type);
  75                  $componentname = $pluginmanager->plugin_name($component);
  76              }
  77  
  78              $result[$componenttype][$component] = $componentname;
  79          }
  80  
  81          // Sort returned components according to their type, followed by name.
  82          core_collator::ksort($result);
  83          array_walk($result, function(array &$componenttype) {
  84              core_collator::asort($componenttype);
  85          });
  86  
  87          // Prepend "All" option.
  88          array_unshift($result, [0 => get_string('all', 'report_eventlist')]);
  89          return $result;
  90      }
  91  }