MDL-60683 quiz: Replace quiz legacy cron with tasks
authorMichael Hughes <michaelhughes@strath.ac.uk>
Fri, 22 Feb 2019 16:39:37 +0000 (16:39 +0000)
committerMichael Hughes <michaelhughes@strath.ac.uk>
Fri, 22 Feb 2019 16:39:37 +0000 (16:39 +0000)
13 files changed:
mod/quiz/classes/task/legacy_quiz_accessrules_cron.php [new file with mode: 0644]
mod/quiz/classes/task/legacy_quiz_reports_cron.php [new file with mode: 0644]
mod/quiz/classes/task/update_overdue_attempts.php [new file with mode: 0644]
mod/quiz/db/tasks.php [new file with mode: 0644]
mod/quiz/lang/en/quiz.php
mod/quiz/lib.php
mod/quiz/report/statistics/classes/task/quiz_statistics_cleanup.php [new file with mode: 0644]
mod/quiz/report/statistics/db/tasks.php [new file with mode: 0644]
mod/quiz/report/statistics/lang/en/quiz_statistics.php
mod/quiz/report/statistics/lib.php
mod/quiz/report/statistics/version.php
mod/quiz/upgrade.txt
mod/quiz/version.php

diff --git a/mod/quiz/classes/task/legacy_quiz_accessrules_cron.php b/mod/quiz/classes/task/legacy_quiz_accessrules_cron.php
new file mode 100644 (file)
index 0000000..899eb86
--- /dev/null
@@ -0,0 +1,52 @@
+<?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/>.
+
+/**
+ * Legacy Cron Quiz Access Rules Task
+ *
+ * @package    mod_quiz
+ * @copyright  2017 Michael Hughes
+ * @author Michael Hughes
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+namespace mod_quiz\task;
+
+defined('MOODLE_INTERNAL') || die();
+
+require_once($CFG->dirroot . '/mod/quiz/locallib.php');
+
+/**
+ * Legacy Cron Quiz Access Rules Task
+ *
+ * @package    mod_quiz
+ * @copyright  2017 Michael Hughes
+ * @author Michael Hughes
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ *
+ */
+class legacy_quiz_accessrules_cron extends \core\task\scheduled_task {
+
+    public function get_name() {
+        return get_string('legacyquizaccessrulescron', 'mod_quiz');
+    }
+
+    /**
+     * Execute all quizaccess subplugins legacy cron tasks.
+     */
+    public function execute() {
+        cron_execute_plugin_type('quizaccess', 'quiz access rules');
+    }
+}
diff --git a/mod/quiz/classes/task/legacy_quiz_reports_cron.php b/mod/quiz/classes/task/legacy_quiz_reports_cron.php
new file mode 100644 (file)
index 0000000..7153338
--- /dev/null
@@ -0,0 +1,53 @@
+<?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/>.
+
+/**
+ * Legacy Cron Quiz Reports Task
+ *
+ * @package    mod_quiz
+ * @copyright  2017 Michael Hughes
+ * @author Michael Hughes
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ *
+ */
+namespace mod_quiz\task;
+
+defined('MOODLE_INTERNAL') || die();
+
+require_once($CFG->dirroot . '/mod/quiz/locallib.php');
+
+/**
+ * Legacy Cron Quiz Reports Task
+ *
+ * @package    mod_quiz
+ * @copyright  2017 Michael Hughes
+ * @author Michael Hughes
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ *
+ */
+class legacy_quiz_reports_cron extends \core\task\scheduled_task {
+
+    public function get_name() {
+        return get_string('legacyquizreportscron', 'mod_quiz');
+    }
+
+    /**
+     * Execute all quizreport sub-plugins cron tasks.
+     */
+    public function execute() {
+        cron_execute_plugin_type('quiz', 'quiz reports');
+    }
+}
diff --git a/mod/quiz/classes/task/update_overdue_attempts.php b/mod/quiz/classes/task/update_overdue_attempts.php
new file mode 100644 (file)
index 0000000..54fa14e
--- /dev/null
@@ -0,0 +1,65 @@
+<?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/>.
+
+/**
+ * Update Overdue Attempts Task
+ *
+ * @package    mod_quiz
+ * @copyright  2017 Michael Hughes
+ * @author Michael Hughes
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+namespace mod_quiz\task;
+
+defined('MOODLE_INTERNAL') || die();
+
+require_once($CFG->dirroot . '/mod/quiz/locallib.php');
+
+/**
+ * Update Overdue Attempts Task
+ *
+ * @package    mod_quiz
+ * @copyright  2017 Michael Hughes
+ * @author Michael Hughes
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ *
+ */
+class update_overdue_attempts extends \core\task\scheduled_task {
+
+    public function get_name() {
+        return get_string('updateoverdueattemptstask', 'mod_quiz');
+    }
+
+    /**
+     *
+     * Close off any overdue attempts.
+     */
+    public function execute() {
+        global $CFG;
+
+        require_once($CFG->dirroot . '/mod/quiz/cronlib.php');
+        $timenow = time();
+        $overduehander = new \mod_quiz_overdue_attempt_updater();
+
+        $processto = $timenow - get_config('quiz', 'graceperiodmin');
+
+        mtrace('  Looking for quiz overdue quiz attempts...');
+
+        list($count, $quizcount) = $overduehander->update_overdue_attempts($timenow, $processto);
+
+        mtrace('  Considered ' . $count . ' attempts in ' . $quizcount . ' quizzes.');
+    }
+}
diff --git a/mod/quiz/db/tasks.php b/mod/quiz/db/tasks.php
new file mode 100644 (file)
index 0000000..757d9f4
--- /dev/null
@@ -0,0 +1,56 @@
+<?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/>.
+
+/**
+ * Definition of Quiz scheduled tasks.
+ *
+ * @package   mod_quiz
+ * @category  task
+ * @copyright 2017 Michael Hughes <michaelhughes@strath.ac.uk>
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+$tasks = [
+    [
+        'classname' => 'mod_quiz\task\update_overdue_attempts',
+        'blocking' => 0,
+        'minute' => '*',
+        'hour' => '*',
+        'day' => '*',
+        'dayofweek' => '*',
+        'month' => '*'
+    ],
+    [
+        'classname' => 'mod_quiz\task\legacy_quiz_reports_cron',
+        'blocking' => 0,
+        'minute' => '*',
+        'hour' => '*',
+        'day' => '*',
+        'dayofweek' => '*',
+        'month' => '*'
+    ],
+    [
+        'classname' => 'mod_quiz\task\legacy_quiz_accessrules_cron',
+        'blocking' => 0,
+        'minute' => '*',
+        'hour' => '*',
+        'day' => '*',
+        'dayofweek' => '*',
+        'month' => '*'
+    ]
+];
index 2d9a3cd..f4480b7 100644 (file)
@@ -453,6 +453,8 @@ $string['layoutasshown'] = 'Page layout as shown.';
 $string['layoutasshownwithpages'] = 'Page layout as shown. <small>(Automatic new page every {$a} questions.)</small>';
 $string['layoutshuffledandpaged'] = 'Questions randomly shuffled with {$a} questions per page.';
 $string['layoutshuffledsinglepage'] = 'Questions randomly shuffled, all on one page.';
+$string['legacyquizaccessrulescron'] = 'Legacy Cron Quiz Access Rules';
+$string['legacyquizreportscron'] = 'Legacy Cron Quiz Reports';
 $string['link'] = 'Link';
 $string['listitems'] = 'Listing of items in quiz';
 $string['literal'] = 'Literal';
@@ -958,6 +960,7 @@ $string['unfinished'] = 'open';
 $string['ungraded'] = 'Ungraded';
 $string['unit'] = 'Unit';
 $string['unknowntype'] = 'Question type not supported at line {$a}. The question will be ignored';
+$string['updateoverdueattemptstask'] = 'Updating overdue quiz attempts';
 $string['updatesettings'] = 'Update quiz settings';
 $string['updatequizslotswithrandomxofy'] = 'Updating quiz slots with "random" question data ({$a->done}/{$a->total})';
 $string['updatingatttemptgrades'] = 'Updating attempt grades.';
index 3ffd67e..6dd7d88 100644 (file)
@@ -578,32 +578,6 @@ function quiz_user_complete($course, $user, $mod, $quiz) {
     return true;
 }
 
-/**
- * Quiz periodic clean-up tasks.
- */
-function quiz_cron() {
-    global $CFG;
-
-    require_once($CFG->dirroot . '/mod/quiz/cronlib.php');
-    mtrace('');
-
-    $timenow = time();
-    $overduehander = new mod_quiz_overdue_attempt_updater();
-
-    $processto = $timenow - get_config('quiz', 'graceperiodmin');
-
-    mtrace('  Looking for quiz overdue quiz attempts...');
-
-    list($count, $quizcount) = $overduehander->update_overdue_attempts($timenow, $processto);
-
-    mtrace('  Considered ' . $count . ' attempts in ' . $quizcount . ' quizzes.');
-
-    // Run cron for our sub-plugin types.
-    cron_execute_plugin_type('quiz', 'quiz reports');
-    cron_execute_plugin_type('quizaccess', 'quiz access rules');
-
-    return true;
-}
 
 /**
  * @param int|array $quizids A quiz ID, or an array of quiz IDs.
diff --git a/mod/quiz/report/statistics/classes/task/quiz_statistics_cleanup.php b/mod/quiz/report/statistics/classes/task/quiz_statistics_cleanup.php
new file mode 100644 (file)
index 0000000..5d266f3
--- /dev/null
@@ -0,0 +1,55 @@
+<?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/>.
+
+/**
+ * Legacy Cron Quiz Reports Task
+ *
+ * @package    quiz_statistics
+ * @copyright  2017 Michael Hughes, University of Strathclyde
+ * @author Michael Hughes <michaelhughes@strath.ac.uk>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ *
+ */
+namespace quiz_statistics\task;
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Legacy Cron Quiz Reports Task
+ *
+ * @package    quiz_statistics
+ * @copyright  2017 Michael Hughes
+ * @author Michael Hughes
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ *
+ */
+class quiz_statistics_cleanup extends \core\task\scheduled_task {
+    public function get_name() {
+        return get_string('quizstatisticscleanuptask', 'quiz_statistics');
+    }
+
+    /**
+     * Run the clean up task.
+     */
+    public function execute() {
+        global $DB;
+
+        $expiretime = time() - 4 * HOURSECS;
+        $DB->delete_records_select('quiz_statistics', 'timemodified < ?', array($expiretime));
+
+        return true;
+    }
+}
diff --git a/mod/quiz/report/statistics/db/tasks.php b/mod/quiz/report/statistics/db/tasks.php
new file mode 100644 (file)
index 0000000..c682ddc
--- /dev/null
@@ -0,0 +1,39 @@
+<?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/>.
+
+/**
+ * Legacy Cron Quiz Reports Task
+ *
+ * @package    quiz_statistics
+ * @copyright  2017 Michael Hughes, University of Strathclyde
+ * @author Michael Hughes <michaelhughes@strath.ac.uk>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ *
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+$tasks = [
+    [
+        'classname' => 'quiz_statistics\task\quiz_statistics_cleanup',
+        'blocking' => 0,
+        'minute' => 'R',
+        'hour' => '*/5',
+        'day' => '*',
+        'dayofweek' => '*',
+        'month' => '*'
+    ]
+];
index 40b5849..310364b 100644 (file)
@@ -93,6 +93,7 @@ $string['questioninformation'] = 'Question information';
 $string['questionname'] = 'Question name';
 $string['questionnumber'] = 'Q#';
 $string['questionstatistics'] = 'Question statistics';
+$string['quizstatisticscleanuptask'] = 'Clean up old quiz statistics cache records';
 $string['questionstatsfilename'] = 'questionstats';
 $string['questiontype'] = 'Question type';
 $string['quizinformation'] = 'Quiz information';
index 416981b..8fe0c19 100644 (file)
@@ -59,17 +59,3 @@ function quiz_statistics_question_preview_pluginfile($previewcontext, $questioni
 
     send_stored_file($file, 0, 0, $forcedownload, $options);
 }
-
-/**
- * Quiz statistics report cron code. Deletes cached data more than a certain age.
- */
-function quiz_statistics_cron() {
-    global $DB;
-
-    mtrace("\n  Cleaning up old quiz statistics cache records...", '');
-
-    $expiretime = time() - 5*HOURSECS;
-    $DB->delete_records_select('quiz_statistics', 'timemodified < ?', array($expiretime));
-
-    return true;
-}
index 36ad4ee..2caeb2f 100644 (file)
@@ -26,5 +26,4 @@ defined('MOODLE_INTERNAL') || die();
 
 $plugin->version   = 2018120300;
 $plugin->requires  = 2018112800;
-$plugin->cron      = 18000;
 $plugin->component = 'quiz_statistics';
index f0265b0..929452b 100644 (file)
@@ -1,5 +1,10 @@
 This files describes API changes in the quiz code.
 
+=== 3.7 ===
+
+* Quiz_cron() has been removed. Sub-plugins should implemented scheduled tasks, however legacy cron in subplugins are
+  supported.
+
 === 3.6 ===
 
 * The following renamed classes have been completely removed:
index 496ac21..0e7e1fc 100644 (file)
@@ -27,4 +27,3 @@ defined('MOODLE_INTERNAL') || die();
 $plugin->version   = 2018120300;
 $plugin->requires  = 2018112800;
 $plugin->component = 'mod_quiz';
-$plugin->cron      = 60;