diff --git a/report/eventlist/classes/list_generator.php b/report/eventlist/classes/list_generator.php index cce411f4479..ba5c27b6b4a 100644 --- a/report/eventlist/classes/list_generator.php +++ b/report/eventlist/classes/list_generator.php @@ -40,7 +40,47 @@ class report_eventlist_list_generator { * @return array All events. */ public static function get_all_events_list($detail = true) { - return array_merge(self::get_core_events_list($detail), self::get_non_core_event_list($detail)); + global $CFG; + + // Disable developer debugging as deprecated events will fire warnings. + // Setup backup variables to restore the following settings back to what they were when we are finished. + $debuglevel = $CFG->debug; + $debugdisplay = $CFG->debugdisplay; + $debugdeveloper = $CFG->debugdeveloper; + $CFG->debug = 0; + $CFG->debugdisplay = false; + $CFG->debugdeveloper = false; + + // List of exceptional events that will cause problems if displayed. + $eventsignore = [ + \core\event\unknown_logged::class, + \logstore_legacy\event\legacy_logged::class, + ]; + + $eventinformation = []; + + $events = core_component::get_component_classes_in_namespace(null, 'event'); + foreach (array_keys($events) as $event) { + // We need to filter all classes that extend event base, or the base class itself. + if (is_a($event, \core\event\base::class, true) && !in_array($event, $eventsignore)) { + if ($detail) { + $reflectionclass = new ReflectionClass($event); + if (!$reflectionclass->isAbstract()) { + $eventinformation = self::format_data($eventinformation, "\\${event}"); + } + } else { + $parts = explode('\\', $event); + $eventinformation["\\${event}"] = array_shift($parts); + } + } + } + + // Now enable developer debugging as event information has been retrieved. + $CFG->debug = $debuglevel; + $CFG->debugdisplay = $debugdisplay; + $CFG->debugdeveloper = $debugdeveloper; + + return $eventinformation; } /** @@ -48,10 +88,15 @@ class report_eventlist_list_generator { * * @param bool $detail True will return details, but no abstract classes, False will return all events, but no details. * @return array Core events. + * + * @deprecated since 4.0 use {@see get_all_events_list} instead */ public static function get_core_events_list($detail = true) { global $CFG; + debugging(__FUNCTION__ . '() is deprecated, please use report_eventlist_list_generator::get_all_events_list() instead', + DEBUG_DEVELOPER); + // Disable developer debugging as deprecated events will fire warnings. // Setup backup variables to restore the following settings back to what they were when we are finished. $debuglevel = $CFG->debug; @@ -173,9 +218,15 @@ class report_eventlist_list_generator { * * @param bool $detail True will return details, but no abstract classes, False will return all events, but no details. * @return array A list of events from all plug-ins. + * + * @deprecated since 4.0 use {@see get_all_events_list} instead */ public static function get_non_core_event_list($detail = true) { global $CFG; + + debugging(__FUNCTION__ . '() is deprecated, please use report_eventlist_list_generator::get_all_events_list() instead', + DEBUG_DEVELOPER); + // Disable developer debugging as deprecated events will fire warnings. // Setup backup variables to restore the following settings back to what they were when we are finished. $debuglevel = $CFG->debug; diff --git a/report/eventlist/upgrade.txt b/report/eventlist/upgrade.txt new file mode 100644 index 00000000000..34649bb06b8 --- /dev/null +++ b/report/eventlist/upgrade.txt @@ -0,0 +1,8 @@ +This file describes API changes in /report/eventlist/*, +information provided here is intended especially for developers. + +=== 4.0 === +* The following methods have been deprecated in favour of a single `get_all_events_list` method: + - report_eventlist_list_generator::get_core_events_list + - report_eventlist_list_generator::get_non_core_event_list + diff --git a/report/eventlist/yui/build/moodle-report_eventlist-eventfilter/moodle-report_eventlist-eventfilter-debug.js b/report/eventlist/yui/build/moodle-report_eventlist-eventfilter/moodle-report_eventlist-eventfilter-debug.js index 34cc92a6a4b..617edac493c 100644 --- a/report/eventlist/yui/build/moodle-report_eventlist-eventfilter/moodle-report_eventlist-eventfilter-debug.js +++ b/report/eventlist/yui/build/moodle-report_eventlist-eventfilter/moodle-report_eventlist-eventfilter-debug.js @@ -181,8 +181,6 @@ Y.extend(EventFilter, Y.Base, { _totalFilter: function() { // Get all of the details of the filter elements var eventNameFilter = this._eventName.get('value').toLowerCase(), - // Component selected text. - componentFilter = this._component.get('options').item(this._component.get('selectedIndex')).get('text').toLowerCase(), // Component selected value. componentValue = this._component.get('value'), // Education level selected text. @@ -201,7 +199,7 @@ Y.extend(EventFilter, Y.Base, { // These variables will either be false or true depending on the statement outcome. var fullEventText = Y.Node.create(this.get('tabledata')[i].fulleventname).get('text'), eventNameValue = fullEventText.toLowerCase().indexOf(eventNameFilter) >= 0, - componentFilterValue = this.get('tabledata')[i].component.toLowerCase().indexOf(componentFilter) >= 0, + componentFilterValue = fullEventText.toLowerCase().indexOf('\\' + componentValue + '\\event\\') >= 0, eduLevelFilterValue = this.get('tabledata')[i].edulevel.toLowerCase().indexOf(eduLevelFilter) >= 0, crudFilterValue = this.get('tabledata')[i].crud.toLowerCase().indexOf(crudFilter) >= 0; // If the name field is empty then add to the filter. diff --git a/report/eventlist/yui/build/moodle-report_eventlist-eventfilter/moodle-report_eventlist-eventfilter-min.js b/report/eventlist/yui/build/moodle-report_eventlist-eventfilter/moodle-report_eventlist-eventfilter-min.js index 292bdc17e6d..110843d3546 100644 --- a/report/eventlist/yui/build/moodle-report_eventlist-eventfilter/moodle-report_eventlist-eventfilter-min.js +++ b/report/eventlist/yui/build/moodle-report_eventlist-eventfilter/moodle-report_eventlist-eventfilter-min.js @@ -1 +1 @@ -YUI.add("moodle-report_eventlist-eventfilter",function(g,e){function t(){t.superclass.constructor.apply(this,arguments)}var l="#id_eventname",n="#id_eventcomponent",i="#id_eventedulevel",a="#id_eventcrud",r="#id_filterbutton",s="#id_clearbutton";g.extend(t,g.Base,{_table:null,_eventName:null,_component:null,_eduLevel:null,_crud:null,initializer:function(){var e=g.one(r),t=g.one(s);this._createTable(this.get("tabledata")),this._eventName=g.one(l),this._component=g.one(n),this._eduLevel=g.one(i),this._crud=g.one(a),this._eventName.on("valuechange",this._totalFilter,this),e.on("click",this._totalFilter,this),t.on("click",this._clearFilter,this)},_createTable:function(e){var t=new g.DataTable({columns:[{key:"fulleventname",label:M.util.get_string("eventname","report_eventlist"),allowHTML:!0,sortable:!0,sortFn:function(e,t,l){var n=e.getAttrs().raweventname,i=t.getAttrs().raweventname= 0, - componentFilterValue = this.get('tabledata')[i].component.toLowerCase().indexOf(componentFilter) >= 0, + componentFilterValue = fullEventText.toLowerCase().indexOf('\\' + componentValue + '\\event\\') >= 0, eduLevelFilterValue = this.get('tabledata')[i].edulevel.toLowerCase().indexOf(eduLevelFilter) >= 0, crudFilterValue = this.get('tabledata')[i].crud.toLowerCase().indexOf(crudFilter) >= 0; // If the name field is empty then add to the filter. diff --git a/report/eventlist/yui/src/eventfilter/js/eventfilter.js b/report/eventlist/yui/src/eventfilter/js/eventfilter.js index 771b2669481..adf481b9140 100644 --- a/report/eventlist/yui/src/eventfilter/js/eventfilter.js +++ b/report/eventlist/yui/src/eventfilter/js/eventfilter.js @@ -179,8 +179,6 @@ Y.extend(EventFilter, Y.Base, { _totalFilter: function() { // Get all of the details of the filter elements var eventNameFilter = this._eventName.get('value').toLowerCase(), - // Component selected text. - componentFilter = this._component.get('options').item(this._component.get('selectedIndex')).get('text').toLowerCase(), // Component selected value. componentValue = this._component.get('value'), // Education level selected text. @@ -199,7 +197,7 @@ Y.extend(EventFilter, Y.Base, { // These variables will either be false or true depending on the statement outcome. var fullEventText = Y.Node.create(this.get('tabledata')[i].fulleventname).get('text'), eventNameValue = fullEventText.toLowerCase().indexOf(eventNameFilter) >= 0, - componentFilterValue = this.get('tabledata')[i].component.toLowerCase().indexOf(componentFilter) >= 0, + componentFilterValue = fullEventText.toLowerCase().indexOf('\\' + componentValue + '\\event\\') >= 0, eduLevelFilterValue = this.get('tabledata')[i].edulevel.toLowerCase().indexOf(eduLevelFilter) >= 0, crudFilterValue = this.get('tabledata')[i].crud.toLowerCase().indexOf(crudFilter) >= 0; // If the name field is empty then add to the filter.