/** * Run the cron functions required by messages * * @return boolean True if completes successfully, false otherwise */ function message_cron() { global $CFG, $DB; // dismiss old alerts $time = time() - (MSG_CRON_DISMISS_ALERTS * (24 * 60 * 60)); $msgs = tm_messages_get_by_time('local_alert', $time); $deleted = array(); foreach ($msgs as $msg) { tm_message_dismiss($msg->id); //store message ids for bulk delete if (!in_array($msg->id, $deleted)) { $deleted[] = $msg->id; } } // dismiss old taskes $time = time() - (MSG_CRON_DISMISS_TASKS * (24 * 60 * 60)); $msgs = tm_messages_get_by_time('local_task', $time); foreach ($msgs as $msg) { tm_message_dismiss($msg->id); //store message ids for bulk delete if (!in_array($msg->id, $deleted)) { $deleted[] = $msg->id; } } //delete the message records $DB->delete_records_list('message', 'id', $deleted); // tidy up orphaned metadata records - shouldn't be any - but odd things could happen with core messages cron $sql = "SELECT mm.id FROM {message_metadata} mm LEFT JOIN {message} m ON mm.messageid = m.id LEFT JOIN {message_read} mr ON mm.messagereadid = mr.id WHERE m.id IS NULL AND mr.id IS NULL"; $allidstodelete = $DB->get_fieldset_sql($sql); if (!empty($allidstodelete)) { // We may have really large numbers so split it up into smaller batches. $batchidstodelete = array_chunk($allidstodelete, 25000); foreach ($batchidstodelete as $idstodelete) { list($insql, $params) = $DB->get_in_or_equal($idstodelete); $sql = "DELETE FROM {message_metadata} WHERE id {$insql}"; $DB->execute($sql, $params); } } return true; }
/** * For listing message histories between any two users */ require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); require_once('lib.php'); require_login(); $PAGE->set_context(context_system::instance()); if (isguestuser()) { redirect($CFG->wwwroot); } /// Script parameters $msgid = required_param('id', PARAM_INT); $returnto = optional_param('returnto', NULL, PARAM_LOCALURL); // check message ownership $message = $DB->get_record('message', array('id' => $msgid)); if (!$message || $message->useridto != $USER->id || !confirm_sesskey()) { print_error('notyours', 'local_message', $msgid); } // dismiss the message and then return tm_message_dismiss($msgid); if ($returnto) { redirect($returnto); }