Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
// This file is part of Moodle - http://moodle.org/
3
//
4
// Moodle is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// Moodle is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16
 
17
/**
18
 * Task to cleanup old question previews.
19
 *
20
 * @package    core
21
 * @copyright  2013 onwards Martin Dougiamas  http://dougiamas.com
22
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
namespace core\task;
25
 
26
/**
27
 * A task to cleanup old question previews.
28
 *
29
 * @copyright  2013 onwards Martin Dougiamas  http://dougiamas.com
30
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
31
 */
32
class question_preview_cleanup_task extends scheduled_task {
33
 
34
    /**
35
     * Get a descriptive name for this task (shown to admins).
36
     *
37
     * @return string
38
     */
39
    public function get_name() {
40
        return get_string('taskquestioncron', 'admin');
41
    }
42
 
43
    /**
44
     * Do the job.
45
     * Throw exceptions on errors (the job will be retried).
46
     */
47
    public function execute() {
48
        global $CFG;
49
        require_once($CFG->dirroot . '/question/engine/lib.php');
50
 
51
        // We delete previews that have not been touched for 24 hours.
52
        $lastmodifiedcutoff = time() - DAYSECS;
53
 
54
        mtrace("\n  Cleaning up old question previews...", '');
55
        $oldpreviews = new \qubaid_join('{question_usages} quba', 'quba.id',
56
            'quba.component = :qubacomponent
57
                    AND NOT EXISTS (
58
                        SELECT 1
59
                          FROM {question_attempts}      subq_qa
60
                          JOIN {question_attempt_steps} subq_qas ON subq_qas.questionattemptid = subq_qa.id
61
                          JOIN {question_usages}        subq_qu  ON subq_qu.id = subq_qa.questionusageid
62
                         WHERE subq_qa.questionusageid = quba.id
63
                           AND subq_qu.component = :qubacomponent2
64
                           AND (subq_qa.timemodified > :qamodifiedcutoff
65
                                    OR subq_qas.timecreated > :stepcreatedcutoff)
66
                    )
67
            ',
68
            ['qubacomponent' => 'core_question_preview', 'qubacomponent2' => 'core_question_preview',
69
                'qamodifiedcutoff' => $lastmodifiedcutoff, 'stepcreatedcutoff' => $lastmodifiedcutoff]);
70
 
71
        \question_engine::delete_questions_usage_by_activities($oldpreviews);
72
        mtrace('done.');
73
    }
74
 
75
}