Merge branch 'MDL-47499-master' of git://github.com/damyon/moodle

This commit is contained in:
Dan Poltawski 2014-10-23 10:19:53 +01:00 committed by Eloy Lafuente (stronk7)
commit 1153177851
2 changed files with 47 additions and 2 deletions

View File

@ -93,12 +93,18 @@ class manager {
$tasks = self::load_default_scheduled_tasks_for_component($componentname);
$tasklocks = array();
foreach ($tasks as $task) {
foreach ($tasks as $taskid => $task) {
$classname = get_class($task);
if (strpos($classname, '\\') !== 0) {
$classname = '\\' . $classname;
}
// If there is an existing task with a custom schedule, do not override it.
$currenttask = self::get_scheduled_task($classname);
if ($currenttask && $currenttask->is_customised()) {
$tasks[$taskid] = $currenttask;
}
if (!$lock = $cronlockfactory->get_lock($classname, 10, 60)) {
// Could not get all the locks required - release all locks and fail.
foreach ($tasklocks as $tasklock) {
@ -330,7 +336,7 @@ class manager {
$tasks = array();
// We are just reading - so no locks required.
$records = $DB->get_records('task_scheduled', array('componentname' => $componentname), 'classname', '*', IGNORE_MISSING);
$records = $DB->get_records('task_scheduled', array('component' => $componentname), 'classname', '*', IGNORE_MISSING);
foreach ($records as $record) {
$task = self::scheduled_task_from_record($record);
// Safety check in case the task in the DB does not match a real class (maybe something was uninstalled).

View File

@ -157,6 +157,45 @@ class core_scheduled_task_testcase extends advanced_testcase {
date_default_timezone_set($currenttimezonephp);
}
public function test_reset_scheduled_tasks_for_component() {
global $DB;
$this->resetAfterTest(true);
// Remember the defaults.
$defaulttasks = \core\task\manager::load_scheduled_tasks_for_component('moodle');
$initcount = count($defaulttasks);
// Customise a task.
$firsttask = reset($defaulttasks);
$firsttask->set_minute('1');
$firsttask->set_hour('2');
$firsttask->set_month('3');
$firsttask->set_day_of_week('4');
$firsttask->set_day('5');
$firsttask->set_customised('1');
\core\task\manager::configure_scheduled_task($firsttask);
$firsttaskrecord = \core\task\manager::record_from_scheduled_task($firsttask);
// We reset this field, because we do not want to compare it.
$firsttaskrecord->nextruntime = '0';
// Now call reset on all the tasks.
\core\task\manager::reset_scheduled_tasks_for_component('moodle');
// Load the tasks again.
$defaulttasks = \core\task\manager::load_scheduled_tasks_for_component('moodle');
$finalcount = count($defaulttasks);
// Compare the first task.
$newfirsttask = reset($defaulttasks);
$newfirsttaskrecord = \core\task\manager::record_from_scheduled_task($newfirsttask);
// We reset this field, because we do not want to compare it.
$newfirsttaskrecord->nextruntime = '0';
// Assert a customised task was not altered by reset.
$this->assertEquals($firsttaskrecord, $newfirsttaskrecord);
// Assert we have the same number of tasks.
$this->assertEquals($initcount, $finalcount);
}
public function test_get_next_scheduled_task() {
global $DB;