Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.0.x will end 8 May 2023 (12 months).
  • Bug fixes for security issues in 4.0.x will end 13 November 2023 (18 months).
  • PHP version: minimum PHP 7.3.0 Note: the minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is also supported.
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Event developer detail.
 *
 * @package   report_eventlist
 * @copyright 2014 Adrian Greeve <adrian@moodle.com>
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
require_once(__DIR__ . '/../../config.php');
require_once($CFG->libdir . '/adminlib.php');

// Required parameters.
$eventname = required_param('eventname', PARAM_RAW);

admin_externalpage_setup('reporteventlists');

// Retrieve all events in a list.
$completelist = report_eventlist_list_generator::get_all_events_list(false);

// Check that $eventname is a valid event.
if (!array_key_exists($eventname, $completelist)) {
< print_error('errorinvalidevent', 'report_eventlist');
> throw new \moodle_exception('errorinvalidevent', 'report_eventlist');
} // Break up the full event name to usable parts. $component = explode('\\', $eventname); $directory = core_component::get_component_directory($component[1]); // File and directory information. $directory = $directory . '/classes/event'; // Verify that the directory is valid. if (!is_dir($directory)) {
< print_error('errorinvaliddirectory', 'report_eventlist');
> throw new \moodle_exception('errorinvaliddirectory', 'report_eventlist');
} $filename = end($component); $eventfiles = $directory . '/' . $filename . '.php'; $title = $eventname::get_name_with_info(); // Define event information. $eventinformation = array('title' => $title); $eventcontents = file_get_contents($eventfiles); $eventinformation['filecontents'] = $eventcontents; $ref = new \ReflectionClass($eventname); $eventinformation['explanation'] = $eventname::get_explanation($eventname); // Get event information nicely if we can. if (!$ref->isAbstract()) { $eventinformation = array_merge($eventinformation, $eventname::get_static_info());
< $eventinformation['legacyevent'] = $eventname::get_legacy_eventname();
$eventinformation['crud'] = report_eventlist_list_generator::get_crud_string($eventinformation['crud']); $eventinformation['edulevel'] = report_eventlist_list_generator::get_edulevel_string($eventinformation['edulevel']); } else { $eventinformation['abstract'] = true; if ($eventname != '\core\event\base') { // No choice but to get information the hard way. // Strip out CRUD information. $crudpattern = "/(\['crud'\]\s=\s')(\w)/"; $result = array(); preg_match($crudpattern, $eventcontents, $result); if (!empty($result[2])) { $eventinformation['crud'] = report_eventlist_list_generator::get_crud_string($result[2]); } // Strip out edulevel information. $edulevelpattern = "/(\['edulevel'\]\s=\sself\:\:)(\w*)/"; $result = array(); preg_match($edulevelpattern, $eventcontents, $result); if (!empty($result[2])) { $educationlevel = constant('\core\event\base::' . $result[2]); $eventinformation['edulevel'] = report_eventlist_list_generator::get_edulevel_string($educationlevel); } // Retrieve object table information. $affectedtablepattern = "/(\['objecttable'\]\s=\s')(\w*)/"; $result = array(); preg_match($affectedtablepattern, $eventcontents, $result); if (!empty($result[2])) { $eventinformation['objecttable'] = $result[2]; } } } // I can't think of a nice way to get the following information. // Searching to see if @type has been used for the 'other' field in the event. $othertypepattern = "/(@type\s([\w|\s|.]*))+/"; $typeparams = array(); preg_match_all($othertypepattern, $eventcontents, $typeparams); if (!empty($typeparams[2])) { $eventinformation['typeparameter'] = array(); foreach ($typeparams[2] as $typeparameter) { $eventinformation['typeparameter'][] = $typeparameter; } } // Retrieving the 'other' event field information. $otherpattern = "/(\*\s{5,}-([\w|\s]*\:[\w|\s|\(|\)|.]*))/"; $typeparams = array(); preg_match_all($otherpattern, $eventcontents, $typeparams); if (!empty($typeparams[2])) { $eventinformation['otherparameter'] = array(); foreach ($typeparams[2] as $typeparameter) { $eventinformation['otherparameter'][] = $typeparameter; } } // Get parent class information. if ($parentclass = get_parent_class($eventname)) { $eventinformation['parentclass'] = '\\' . $parentclass; } // Fetch all the observers to be matched with this event. $allobserverslist = report_eventlist_list_generator::get_observer_list(); $observers = array(); if (isset($allobserverslist['\\core\\event\\base'])) { $observers = $allobserverslist['\\core\\event\\base']; } if (isset($allobserverslist[$eventname])) { $observers = array_merge($observers, $allobserverslist[$eventname]); } $PAGE->set_primary_active_tab('siteadminnode'); $PAGE->set_secondary_active_tab('reports'); // OUTPUT. $renderer = $PAGE->get_renderer('report_eventlist'); echo $renderer->render_event_detail($observers, $eventinformation);