From 2b40d66b6534fc0a55c35891ff1e8fc385a0ca50 Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Thu, 4 Apr 2019 09:14:45 +0800 Subject: [PATCH] MDL-65191 core_badges: add badges_message_task task --- lang/en/admin.php | 1 + lib/classes/task/badges_message_task.php | 67 ++++++++++++++++++++++++ lib/db/tasks.php | 9 ++++ version.php | 2 +- 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 lib/classes/task/badges_message_task.php diff --git a/lang/en/admin.php b/lang/en/admin.php index 5e21e571c9f..c41bad3cebc 100644 --- a/lang/en/admin.php +++ b/lang/en/admin.php @@ -1216,6 +1216,7 @@ $string['taskanalyticscleanup'] = 'Analytics cleanup'; $string['taskautomatedbackup'] = 'Automated backups'; $string['taskbackupcleanup'] = 'Clean backup tables and logs'; $string['taskbadgescron'] = 'Award badges'; +$string['taskbadgesmessagecron'] = 'Background processing for sending badges notifications'; $string['taskblogcron'] = 'Sync external blogs'; $string['taskcachecleanup'] = 'Remove expired cache entries'; $string['taskcachecron'] = 'Background processing for caches'; diff --git a/lib/classes/task/badges_message_task.php b/lib/classes/task/badges_message_task.php new file mode 100644 index 00000000000..5c7f83878cb --- /dev/null +++ b/lib/classes/task/badges_message_task.php @@ -0,0 +1,67 @@ +. + +/** + * A scheduled task. + * + * @package core + * @copyright 2019 Simey Lameze + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +namespace core\task; + +/** + * Simple task to run the badges cron. + */ +class badges_message_task extends scheduled_task { + + /** + * Get a descriptive name for this task (shown to admins). + * + * @return string + */ + public function get_name() { + return get_string('taskbadgesmessagecron', 'admin'); + } + + /** + * Reviews criteria and awards badges + * + * First find all badges that can be earned, then reviews each badge. + */ + public function execute() { + global $CFG, $DB; + + if (!empty($CFG->enablebadges)) { + require_once($CFG->libdir . '/badgeslib.php'); + mtrace('Sending scheduled badge notifications.'); + + $scheduled = $DB->get_records_select('badge', 'notification > ? AND (status != ?) AND nextcron < ?', + array(BADGE_MESSAGE_ALWAYS, BADGE_STATUS_ARCHIVED, time()), + 'notification ASC', 'id, name, notification, usercreated as creator, timecreated'); + + foreach ($scheduled as $sch) { + // Send messages. + badge_assemble_notification($sch); + + // Update next cron value. + $nextcron = badges_calculate_message_schedule($sch->notification); + $DB->set_field('badge', 'nextcron', $nextcron, array('id' => $sch->id)); + } + } + } + +} diff --git a/lib/db/tasks.php b/lib/db/tasks.php index 93ffff03005..0c63d2ff904 100644 --- a/lib/db/tasks.php +++ b/lib/db/tasks.php @@ -257,6 +257,15 @@ $tasks = array( 'dayofweek' => '*', 'month' => '*' ), + array( + 'classname' => 'core\task\badges_message_task', + 'blocking' => 0, + 'minute' => '*/5', + 'hour' => '*', + 'day' => '*', + 'dayofweek' => '*', + 'month' => '*' + ), array( 'classname' => 'core\task\file_temp_cleanup_task', 'blocking' => 0, diff --git a/version.php b/version.php index 6db178530a8..d9a50febb07 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2019032200.00; // YYYYMMDD = weekly release date of this DEV branch. +$version = 2019032200.01; // YYYYMMDD = weekly release date of this DEV branch. // RR = release increments - 00 in DEV branches. // .XX = incremental changes. -- 2.43.0