Skip to content

Commit

Permalink
MDL-61165 core: Final deprecation and removal of legacy cron.
Browse files Browse the repository at this point in the history
Following MDL-52846 this now finally deprecates and removes the
following classes:
- \core\task\legacy_plugin_cron_task.
- \mod_quiz\task\legacy_quiz_reports_cron
- \mod_quiz\task\legacy_quiz_accessrules_cron
- \mod_workshop\task\legacy_workshop_allocation_cron

Please, use the Task API instead:
https://moodledev.io/docs/apis/subsystems/task

This also removes the corresponding and specific to legacy cron strings
from mod_quiz and mod_workshop.

Following MDL-52846 this now finally deprecates and removes the
functions:
  - cron_execute_plugin_type()
  - cron_bc_hack_plugin_functions()

Please, use the Task API instead:
https://moodledev.io/docs/apis/subsystems/task

Signed-off-by: Daniel Ziegenberg <[email protected]>
  • Loading branch information
ziegenberg authored and andrewnicols committed Aug 23, 2023
1 parent cccc009 commit 7ff4626
Show file tree
Hide file tree
Showing 11 changed files with 21 additions and 492 deletions.
176 changes: 0 additions & 176 deletions lib/classes/task/legacy_plugin_cron_task.php

This file was deleted.

9 changes: 0 additions & 9 deletions lib/db/tasks.php
Original file line number Diff line number Diff line change
Expand Up @@ -131,15 +131,6 @@
'dayofweek' => '*',
'month' => '*'
),
array(
'classname' => 'core\task\legacy_plugin_cron_task',
'blocking' => 0,
'minute' => '*',
'hour' => '*',
'day' => '*',
'dayofweek' => '*',
'month' => '*'
),
array(
'classname' => 'core\task\grade_cron_task',
'blocking' => 0,
Expand Down
136 changes: 11 additions & 125 deletions lib/deprecatedlib.php
Original file line number Diff line number Diff line change
Expand Up @@ -2657,137 +2657,23 @@ function cron_run_single_task() {
}

/**
* Executes cron functions for a specific type of plugin.
*
* @param string $plugintype Plugin type (e.g. 'report')
* @param string $description If specified, will display 'Starting (whatever)'
* and 'Finished (whatever)' lines, otherwise does not display
*
* @deprecated since Moodle 3.9 MDL-52846. Please use new task API.
* @todo MDL-61165 This will be deleted in Moodle 4.1.
*/
function cron_execute_plugin_type($plugintype, $description = null) {
global $DB;

// Get list from plugin => function for all plugins.
$plugins = get_plugin_list_with_function($plugintype, 'cron');

// Modify list for backward compatibility (different files/names).
$plugins = cron_bc_hack_plugin_functions($plugintype, $plugins);

// Return if no plugins with cron function to process.
if (!$plugins) {
return;
}

if ($description) {
mtrace('Starting '.$description);
}

foreach ($plugins as $component => $cronfunction) {
$dir = core_component::get_component_directory($component);

// Get cron period if specified in version.php, otherwise assume every cron.
$cronperiod = 0;
if (file_exists("$dir/version.php")) {
$plugin = new stdClass();
include("$dir/version.php");
if (isset($plugin->cron)) {
$cronperiod = $plugin->cron;
}
}

// Using last cron and cron period, don't run if it already ran recently.
$lastcron = get_config($component, 'lastcron');
if ($cronperiod && $lastcron) {
if ($lastcron + $cronperiod > time()) {
// Do not execute cron yet.
continue;
}
}

mtrace('Processing cron function for ' . $component . '...');
debugging("Use of legacy cron is deprecated ($cronfunction). Please use scheduled tasks.", DEBUG_DEVELOPER);
\core\cron::trace_time_and_memory();
$pre_dbqueries = $DB->perf_get_queries();
$pre_time = microtime(true);

$cronfunction();

mtrace("done. (" . ($DB->perf_get_queries() - $pre_dbqueries) . " dbqueries, " .
round(microtime(true) - $pre_time, 2) . " seconds)");

set_config('lastcron', time(), $component);
core_php_time_limit::raise();
}

if ($description) {
mtrace('Finished ' . $description);
}
function cron_execute_plugin_type() {
throw new coding_exception(
'cron_execute_plugin_type() has been removed. Please, use the Task API instead: ' .
'https://moodledev.io/docs/apis/subsystems/task.'
);
}

/**
* Used to add in old-style cron functions within plugins that have not been converted to the
* new standard API. (The standard API is frankenstyle_name_cron() in lib.php; some types used
* cron.php and some used a different name.)
*
* @param string $plugintype Plugin type e.g. 'report'
* @param array $plugins Array from plugin name (e.g. 'report_frog') to function name (e.g.
* 'report_frog_cron') for plugin cron functions that were already found using the new API
* @return array Revised version of $plugins that adds in any extra plugin functions found by
* looking in the older location
*
* @deprecated since Moodle 3.9 MDL-52846. Please use new task API.
* @todo MDL-61165 This will be deleted in Moodle 4.1.
*/
function cron_bc_hack_plugin_functions($plugintype, $plugins) {
global $CFG; // Mandatory in case it is referenced by include()d PHP script.

if ($plugintype === 'report') {
// Admin reports only - not course report because course report was
// never implemented before, so doesn't need BC.
foreach (core_component::get_plugin_list($plugintype) as $pluginname => $dir) {
$component = $plugintype . '_' . $pluginname;
if (isset($plugins[$component])) {
// We already have detected the function using the new API.
continue;
}
if (!file_exists("$dir/cron.php")) {
// No old style cron file present.
continue;
}
include_once("$dir/cron.php");
$cronfunction = $component . '_cron';
if (function_exists($cronfunction)) {
$plugins[$component] = $cronfunction;
} else {
debugging("Invalid legacy cron.php detected in $component, " .
"please use lib.php instead");
}
}
} else if (strpos($plugintype, 'grade') === 0) {
// Detect old style cron function names.
// Plugin gradeexport_frog used to use grade_export_frog_cron() instead of
// new standard API gradeexport_frog_cron(). Also applies to gradeimport, gradereport.
foreach (core_component::get_plugin_list($plugintype) as $pluginname => $dir) {
$component = $plugintype.'_'.$pluginname;
if (isset($plugins[$component])) {
// We already have detected the function using the new API.
continue;
}
if (!file_exists("$dir/lib.php")) {
continue;
}
include_once("$dir/lib.php");
$cronfunction = str_replace('grade', 'grade_', $plugintype) . '_' .
$pluginname . '_cron';
if (function_exists($cronfunction)) {
$plugins[$component] = $cronfunction;
}
}
}

return $plugins;
*/
function cron_bc_hack_plugin_functions() {
throw new coding_exception(
'cron_bc_hack_plugin_functions() has been removed. Please, use the Task API instead: ' .
'https://moodledev.io/docs/apis/subsystems/task.'
);
}

/**
Expand Down
10 changes: 10 additions & 0 deletions lib/upgrade.txt
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,16 @@ information provided here is intended especially for developers.
to ensure in some test that the block drawer is closed. This helps with random failures due to the block drawer
being forced open in all behat tests.
* The core_useragent::get_device_type_list() function has been deprecated. Use core_useragent::devicetypes instead as a replacement.
* Final deprecation and removal of legacy cron. This includes the functions:
- cron_execute_plugin_type()
- cron_bc_hack_plugin_functions()
Please, use the Task API instead: https://moodledev.io/docs/apis/subsystems/task
* Final deprecation and removal of the following classes:
- \core\task\legacy_plugin_cron_task
- \mod_quiz\task\legacy_quiz_reports_cron
- \mod_quiz\task\legacy_quiz_accessrules_cron
- \mod_workshop\task\legacy_workshop_allocation_cron
Please, use the Task API instead: https://moodledev.io/docs/apis/subsystems/task

=== 4.2 ===

Expand Down
Loading

0 comments on commit 7ff4626

Please sign in to comment.