diff --git a/lib/classes/task/question_preview_cleanup_task.php b/lib/classes/task/question_preview_cleanup_task.php index fc0348d4e0e..1044373c8f7 100644 --- a/lib/classes/task/question_preview_cleanup_task.php +++ b/lib/classes/task/question_preview_cleanup_task.php @@ -45,12 +45,29 @@ class question_preview_cleanup_task extends scheduled_task { * Throw exceptions on errors (the job will be retried). */ public function execute() { - global $CFG; - // Run question bank clean-up. - require_once($CFG->libdir . '/questionlib.php'); - \question_bank::cron(); + // We delete previews that have not been touched for 24 hours. + $lastmodifiedcutoff = time() - DAYSECS; + mtrace("\n Cleaning up old question previews...", ''); + $oldpreviews = new \qubaid_join('{question_usages} quba', 'quba.id', + 'quba.component = :qubacomponent + AND NOT EXISTS ( + SELECT 1 + FROM {question_attempts} subq_qa + JOIN {question_attempt_steps} subq_qas ON subq_qas.questionattemptid = subq_qa.id + JOIN {question_usages} subq_qu ON subq_qu.id = subq_qa.questionusageid + WHERE subq_qa.questionusageid = quba.id + AND subq_qu.component = :qubacomponent2 + AND (subq_qa.timemodified > :qamodifiedcutoff + OR subq_qas.timecreated > :stepcreatedcutoff) + ) + ', + ['qubacomponent' => 'core_question_preview', 'qubacomponent2' => 'core_question_preview', + 'qamodifiedcutoff' => $lastmodifiedcutoff, 'stepcreatedcutoff' => $lastmodifiedcutoff]); + + \question_engine::delete_questions_usage_by_activities($oldpreviews); + mtrace('done.'); } } diff --git a/question/previewlib.php b/question/previewlib.php index bd92049122a..588e435a4ca 100644 --- a/question/previewlib.php +++ b/question/previewlib.php @@ -327,32 +327,3 @@ function restart_preview($previewid, $questionid, $displayoptions, $context) { redirect(question_preview_url($questionid, $displayoptions->behaviour, $displayoptions->maxmark, $displayoptions, $displayoptions->variant, $context)); } - -/** - * Scheduled tasks relating to question preview. Specifically, delete any old - * previews that are left over in the database. - */ -function question_preview_cron() { - $maxage = 24*60*60; // We delete previews that have not been touched for 24 hours. - $lastmodifiedcutoff = time() - $maxage; - - mtrace("\n Cleaning up old question previews...", ''); - $oldpreviews = new qubaid_join('{question_usages} quba', 'quba.id', - 'quba.component = :qubacomponent - AND NOT EXISTS ( - SELECT 1 - FROM {question_attempts} subq_qa - JOIN {question_attempt_steps} subq_qas ON subq_qas.questionattemptid = subq_qa.id - JOIN {question_usages} subq_qu ON subq_qu.id = subq_qa.questionusageid - WHERE subq_qa.questionusageid = quba.id - AND subq_qu.component = :qubacomponent2 - AND (subq_qa.timemodified > :qamodifiedcutoff - OR subq_qas.timecreated > :stepcreatedcutoff) - ) - ', - array('qubacomponent' => 'core_question_preview', 'qubacomponent2' => 'core_question_preview', - 'qamodifiedcutoff' => $lastmodifiedcutoff, 'stepcreatedcutoff' => $lastmodifiedcutoff)); - - question_engine::delete_questions_usage_by_activities($oldpreviews); - mtrace('done.'); -}