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
 * A scheduled task.
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
 * Simple task to run the badges cron.
28
 */
29
class badges_cron_task extends scheduled_task {
30
 
31
    /**
32
     * Get a descriptive name for this task (shown to admins).
33
     *
34
     * @return string
35
     */
36
    public function get_name() {
37
        return get_string('taskbadgescron', 'admin');
38
    }
39
 
40
    /**
41
     * Reviews criteria and awards badges
42
     *
43
     * First find all badges that can be earned, then reviews each badge.
44
     * (Not sure how efficient this is timewise).
45
     */
46
    public function execute() {
47
        global $DB, $CFG;
48
        if (empty($CFG->enablebadges)) {
49
            return;
50
        }
51
        require_once($CFG->libdir . '/badgeslib.php');
52
 
53
        $courseparams = [];
54
        if (empty($CFG->badges_allowcoursebadges)) {
55
            $coursesql = '';
56
        } else {
57
            $coursesql = "OR EXISTS (
58
                          SELECT c.id
59
                            FROM {course} c
60
                           WHERE c.visible = :visible
61
                             AND c.startdate < :current
62
                             AND c.id = b.courseid
63
                           ) ";
64
            $courseparams = ['visible' => 1, 'current' => time()];
65
        }
66
 
67
        $sql = "SELECT b.id
68
                  FROM {badge} b
69
                 WHERE (b.status = :active OR b.status = :activelocked)
70
                   AND (b.type = :site $coursesql )";
71
        $badgeparams = [
72
            'active' => BADGE_STATUS_ACTIVE,
73
            'activelocked' => BADGE_STATUS_ACTIVE_LOCKED,
74
            'site' => BADGE_TYPE_SITE,
75
        ];
76
        $params = array_merge($badgeparams, $courseparams);
77
        $badges = $DB->get_fieldset_sql($sql, $params);
78
 
79
        foreach ($badges as $bid) {
80
            $task = new badges_adhoc_task();
81
            $task->set_custom_data(['badgeid' => $bid]);
82
            manager::queue_adhoc_task($task, true);
83
        }
84
 
85
        mtrace(count($badges) . " adhoc badge tasks were added");
86
    }
87
}