From 958dfd9761deb6091731078e9ddedbec14bd1ebf Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Wed, 20 Feb 2019 12:55:55 +0800 Subject: [PATCH 1/2] MDL-64883 mod_chat: convert cron to scheduled task --- mod/chat/classes/task/cron_task.php | 65 +++++++++++++++++++++++++++++ mod/chat/db/tasks.php | 36 ++++++++++++++++ mod/chat/lang/en/chat.php | 1 + mod/chat/version.php | 2 +- 4 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 mod/chat/classes/task/cron_task.php create mode 100644 mod/chat/db/tasks.php diff --git a/mod/chat/classes/task/cron_task.php b/mod/chat/classes/task/cron_task.php new file mode 100644 index 00000000000..d174941a1fb --- /dev/null +++ b/mod/chat/classes/task/cron_task.php @@ -0,0 +1,65 @@ +. + +/** + * A scheduled task for chat cron. + * + * @package mod_chat + * @copyright 2019 Simey Lameze + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +namespace mod_chat\task; + +defined('MOODLE_INTERNAL') || die(); + +/** + * The main schedule task for the chat module. + * + * @package mod_chat + * @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', 'mod_chat'); + } + + /** + * Run chat cron. + */ + public function execute() { + global $CFG, $DB; + require_once($CFG->dirroot . '/mod/chat/lib.php'); + + chat_update_chat_times(); + chat_delete_old_users(); + + $timenow = time(); + $subselect = "SELECT c.keepdays + FROM {chat} c + WHERE c.id = {chat_messages}.chatid"; + $DB->delete_records_select('chat_messages', "($subselect) > 0 AND timestamp < ?", + [$timenow - ($subselect) * DAYSECS]); + + $DB->delete_records_select('chat_messages_current', "timestamp < ?", [$timenow - 8 * HOURSECS]); + } +} diff --git a/mod/chat/db/tasks.php b/mod/chat/db/tasks.php new file mode 100644 index 00000000000..a49ca7ebc25 --- /dev/null +++ b/mod/chat/db/tasks.php @@ -0,0 +1,36 @@ +. + +/** + * Definition of chat scheduled tasks. + * + * @package mod_chat + * @copyright 2019 Simey Lameze + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); +$tasks = array( + array( + 'classname' => '\mod_chat\task\cron_task', + 'blocking' => 0, + 'minute' => '*/5', + 'hour' => '*', + 'day' => '*', + 'month' => '*', + 'dayofweek' => '*' + ) +); diff --git a/mod/chat/lang/en/chat.php b/mod/chat/lang/en/chat.php index 82bd0cc1bf4..14c07debd72 100644 --- a/mod/chat/lang/en/chat.php +++ b/mod/chat/lang/en/chat.php @@ -40,6 +40,7 @@ $string['configservermax'] = 'Max number of clients allowed'; $string['configserverport'] = 'Port to use on the server for the daemon'; $string['compact'] = 'Compact'; $string['coursetheme'] = 'Course theme'; +$string['crontask'] = 'Background processing for chat module'; $string['currentchats'] = 'Active chat sessions'; $string['currentusers'] = 'Current users'; $string['deletesession'] = 'Delete this session'; diff --git a/mod/chat/version.php b/mod/chat/version.php index 269fbc347a8..58f76662db7 100644 --- a/mod/chat/version.php +++ b/mod/chat/version.php @@ -24,7 +24,7 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2018120300; // The current module version (Date: YYYYMMDDXX). +$plugin->version = 2018120301; // The current module version (Date: YYYYMMDDXX). $plugin->requires = 2018112800; // Requires this Moodle version. $plugin->component = 'mod_chat'; // Full name of the plugin (used for diagnostics). $plugin->cron = 300; From b98d775540dfd2aa099fe20c62bc0a540a189a91 Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Wed, 20 Feb 2019 12:58:48 +0800 Subject: [PATCH 2/2] MDL-64883 mod_chat: deprecate legacy chat_cron() function --- mod/chat/lib.php | 35 ----------------------------------- mod/chat/version.php | 1 - 2 files changed, 36 deletions(-) diff --git a/mod/chat/lib.php b/mod/chat/lib.php index 0db27f2be45..bd787088f46 100644 --- a/mod/chat/lib.php +++ b/mod/chat/lib.php @@ -399,41 +399,6 @@ function chat_print_recent_activity($course, $viewfullnames, $timestart) { return true; } -/** - * Function to be run periodically according to the moodle cron - * This function searches for things that need to be done, such - * as sending out mail, toggling flags etc ... - * - * @global object - * @return bool - */ -function chat_cron () { - global $DB; - - chat_update_chat_times(); - - chat_delete_old_users(); - - // Delete old messages with a single SQL query. - $subselect = "SELECT c.keepdays - FROM {chat} c - WHERE c.id = {chat_messages}.chatid"; - - $sql = "DELETE - FROM {chat_messages} - WHERE ($subselect) > 0 AND timestamp < ( ".time()." -($subselect) * 24 * 3600)"; - - $DB->execute($sql); - - $sql = "DELETE - FROM {chat_messages_current} - WHERE timestamp < ( ".time()." - 8 * 3600)"; - - $DB->execute($sql); - - return true; -} - /** * This standard function will check all instances of this module * and make sure there are up-to-date events created for each of them. diff --git a/mod/chat/version.php b/mod/chat/version.php index 58f76662db7..3655682bd81 100644 --- a/mod/chat/version.php +++ b/mod/chat/version.php @@ -27,4 +27,3 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2018120301; // The current module version (Date: YYYYMMDDXX). $plugin->requires = 2018112800; // Requires this Moodle version. $plugin->component = 'mod_chat'; // Full name of the plugin (used for diagnostics). -$plugin->cron = 300;