From f0e9b935694d356e64a97ca796d2e83692701698 Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Fri, 1 Mar 2019 15:01:10 +0800 Subject: [PATCH] MDL-64881 workshopallocation_scheduled: create a scheduled task --- .../scheduled/classes/task/cron_task.php | 78 +++++++++++++++++++ .../allocation/scheduled/db/tasks.php | 37 +++++++++ .../lang/en/workshopallocation_scheduled.php | 1 + mod/workshop/allocation/scheduled/version.php | 2 +- 4 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 mod/workshop/allocation/scheduled/classes/task/cron_task.php create mode 100644 mod/workshop/allocation/scheduled/db/tasks.php diff --git a/mod/workshop/allocation/scheduled/classes/task/cron_task.php b/mod/workshop/allocation/scheduled/classes/task/cron_task.php new file mode 100644 index 00000000000..139d6944bfb --- /dev/null +++ b/mod/workshop/allocation/scheduled/classes/task/cron_task.php @@ -0,0 +1,78 @@ +. + +/** + * A schedule task for scheduled allocation cron. + * + * @package workshopallocation_scheduled + * @copyright 2019 Simey Lameze + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +namespace workshopallocation_scheduled\task; + +defined('MOODLE_INTERNAL') || die(); + +/** + * The main schedule task for scheduled allocation cron. + * + * @package workshopallocation_scheduled + * @copyright 2019 Simey Lameze + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class cron_task extends \core\task\scheduled_task { + /** + * Get a descriptive name for this task (shown to admins). + * + * @return string + */ + public function get_name() { + return get_string('crontask', 'workshopallocation_scheduled'); + } + + /** + * Run scheduled allocation cron. + */ + public function execute() { + global $CFG, $DB; + + $sql = "SELECT w.* + FROM {workshopallocation_scheduled} a + JOIN {workshop} w ON a.workshopid = w.id + WHERE a.enabled = 1 + AND w.phase = 20 + AND w.submissionend > 0 + AND w.submissionend < ? + AND (a.timeallocated IS NULL OR a.timeallocated < w.submissionend)"; + $workshops = $DB->get_records_sql($sql, array(time())); + + if (empty($workshops)) { + mtrace('... no workshops awaiting scheduled allocation. ', ''); + return; + } + + mtrace('... executing scheduled allocation in ' . count($workshops) . ' workshop(s) ... ', ''); + + require_once($CFG->dirroot . '/mod/workshop/locallib.php'); + + foreach ($workshops as $workshop) { + $cm = get_coursemodule_from_instance('workshop', $workshop->id, $workshop->course, false, MUST_EXIST); + $course = $DB->get_record('course', ['id' => $cm->course], '*', MUST_EXIST); + $workshop = new \workshop($workshop, $cm, $course); + $allocator = $workshop->allocator_instance('scheduled'); + $allocator->execute(); + } + } +} diff --git a/mod/workshop/allocation/scheduled/db/tasks.php b/mod/workshop/allocation/scheduled/db/tasks.php new file mode 100644 index 00000000000..fb64d39aa0d --- /dev/null +++ b/mod/workshop/allocation/scheduled/db/tasks.php @@ -0,0 +1,37 @@ +. + +/** + * Definition of scheduled allocation tasks. + * + * @package workshopallocation_scheduled + * @copyright 2019 Simey Lameze + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$tasks = [ + [ + 'classname' => '\workshopallocation_scheduled\task\cron_task', + 'blocking' => 0, + 'minute' => '*', + 'hour' => '*', + 'day' => '*', + 'month' => '*', + 'dayofweek' => '*' + ] +]; diff --git a/mod/workshop/allocation/scheduled/lang/en/workshopallocation_scheduled.php b/mod/workshop/allocation/scheduled/lang/en/workshopallocation_scheduled.php index 27d7a74caf3..6bc8b2eaa4b 100644 --- a/mod/workshop/allocation/scheduled/lang/en/workshopallocation_scheduled.php +++ b/mod/workshop/allocation/scheduled/lang/en/workshopallocation_scheduled.php @@ -26,6 +26,7 @@ defined('MOODLE_INTERNAL') || die(); +$string['crontask'] = 'Background processing for scheduled allocation'; $string['currentstatus'] = 'Current status'; $string['currentstatusexecution'] = 'Status'; $string['currentstatusexecution1'] = 'Executed on {$a->datetime}'; diff --git a/mod/workshop/allocation/scheduled/version.php b/mod/workshop/allocation/scheduled/version.php index 555a2ae793a..1553d51d083 100644 --- a/mod/workshop/allocation/scheduled/version.php +++ b/mod/workshop/allocation/scheduled/version.php @@ -27,7 +27,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'workshopallocation_scheduled'; -$plugin->version = 2018120300; +$plugin->version = 2018120301; $plugin->requires = 2018112800; $plugin->dependencies = array( 'workshopallocation_random' => 2018112800,