From 37d0c7c7fd28f245099968fe64c44bf84ea17b7a Mon Sep 17 00:00:00 2001 From: Jun Pataleta Date: Fri, 3 Mar 2017 15:22:27 +0800 Subject: [PATCH] MDL-55956 core: New adhoc task refresh_mod_calendar_events_task * New adhoc task that loops over mod plugins and calls the _refresh_events() hook, if available. --- .../task/refresh_mod_calendar_events_task.php | 69 +++++++++++++++++++ lib/upgrade.txt | 1 + 2 files changed, 70 insertions(+) create mode 100644 lib/classes/task/refresh_mod_calendar_events_task.php diff --git a/lib/classes/task/refresh_mod_calendar_events_task.php b/lib/classes/task/refresh_mod_calendar_events_task.php new file mode 100644 index 00000000000..ca5a63ee25d --- /dev/null +++ b/lib/classes/task/refresh_mod_calendar_events_task.php @@ -0,0 +1,69 @@ +. + +/** + * Adhoc task that updates all of the existing calendar events for modules that implement the *_refresh_events() hook. + * + * @package core + * @copyright 2017 Jun Pataleta + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\task; + +use core_plugin_manager; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Class that updates all of the existing calendar events for modules that implement the *_refresh_events() hook. + * + * Custom data accepted: + * - plugins -> Array of plugin names that need to be refreshed. Optional. + * + * @package core + * @copyright 2017 Jun Pataleta + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class refresh_mod_calendar_events_task extends adhoc_task { + + /** + * Run the task to refresh calendar events. + */ + public function execute() { + // Specific list of plugins that need to be refreshed. If not set, then all mod plugins will be refreshed. + $pluginstorefresh = null; + if (isset($this->get_custom_data()->plugins)) { + $pluginstorefresh = $this->get_custom_data()->plugins; + } + + $pluginmanager = core_plugin_manager::instance(); + $modplugins = $pluginmanager->get_plugins_of_type('mod'); + foreach ($modplugins as $plugin) { + // Check if a specific list of plugins is defined and check if it contains the plugin that is currently being evaluated. + if (!empty($pluginstorefresh) && !in_array($plugin->name, $pluginstorefresh)) { + // This plugin is not in the list, move on to the next one. + continue; + } + // Check if the plugin implements *_refresh_events() and call it when it does. + $refresheventsfunction = $plugin->name . '_refresh_events'; + if (function_exists($refresheventsfunction)) { + mtrace('Calling ' . $refresheventsfunction); + call_user_func($refresheventsfunction); + } + } + } +} diff --git a/lib/upgrade.txt b/lib/upgrade.txt index dace105d897..20cd540c1fd 100644 --- a/lib/upgrade.txt +++ b/lib/upgrade.txt @@ -53,6 +53,7 @@ information provided here is intended especially for developers. * get_user_capability_course() now has an additional parameter 'limit'. This can be used to return a set number of records with the submitted capability. The parameter 'fieldsexceptid' will now accept context fields which can be used for preloading. * The caching option 'immutable' has been added to send_stored_file() and send_file(). +* New adhoc task refresh_mod_calendar_events_task that updates existing calendar events of modules. === 3.2 ===