aboutsummaryrefslogtreecommitdiff
path: root/lib/cronjobs/studygroup_expiration.php
blob: 25ba288b6aaf640549cffd2954206fe5fd16584d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
/**
 * studygroup_expiration.php - Delete expired study groups
 *
 * @author Rasmus Fuhse <fuhse@data-quest.de>
 * @author Michaela Brückner <brueckner@data-quest.de>
 * @access public
 * @since  6.0
 */

require_once 'lib/classes/CronJob.php';

class StudygroupExpirationJob extends CronJob
{
    /**
     * Returns the name of the cronjob.
     */
    public static function getName()
    {
        return _('Studiengruppen aufräumen');
    }

    /**
     * Returns the description of the cronjob.
     */
    public static function getDescription()
    {
        return _('Studiengruppen, die abgelaufen sind, werden gelöscht. Zusätzlich werden Gruppengründer:innen benachrichtigt, wenn ihre Studiengruppen in einem Monat ablaufen.');
    }

    /**
     * Return the paremeters for this cronjob.
     *
     * @return Array Parameters.
     */
    public static function getParameters()
    {
        return [];
    }

    /**
     * Executes the cronjob.
     *
     * @param mixed $last_result What the last execution of this cronjob
     *                           returned.
     * @param Array $parameters Parameters for this cronjob instance which
     *                          were defined during scheduling.
     */
    public function execute($last_result, $parameters = [])
    {
        $statement = DBManager::get()->prepare("
            SELECT `range_id`
            FROM `config_values`
            WHERE `field` = 'STUDYGROUP_EXPIRATION_DATE'
                AND `value` > 0 AND `value` < UNIX_TIMESTAMP()
        ");
        $statement->execute();
        while ($course_id = $statement->fetch(PDO::FETCH_COLUMN)) {
            $course = Course::find($course_id);
            $course->delete();
        }

        //now the notifications
        $messaging = new messaging();
        $statement = DBManager::get()->prepare("
            SELECT `seminare`.*
            FROM `seminare`
                INNER JOIN `config_values` ON (`config_values`.`range_id` = `seminare`.`Seminar_id` AND `config_values`.`field` = 'STUDYGROUP_EXPIRATION_DATE')
            WHERE `config_values`.`value` >= UNIX_TIMESTAMP() - 86400 * 31
                AND `config_values`.`value` < UNIX_TIMESTAMP() - 86400 * 30
        ");
        $statement->execute([
            'last_time' => $last_result
        ]);
        while ($course = Course::buildExisting($statement->fetch(PDO::FETCH_ASSOC))) {
            foreach ($course->getTeachers() as $course_member) {
                setTempLanguage($course_member->user_id);
                $message = sprintf(
                    _('Ihre Studiengruppe %s wird in einem Monat ablaufen und dann automatisch gelöscht werden. Falls Sie die Studiengruppe noch benötigen, ändern Sie in der Verwaltung der Studiengruppe das Ablaufdatum.'),
                    $course->getFullName()
                );
                $subject = _('Ablauf Ihrer Studiengruppe');
                $messaging->insert_message(
                    $message,
                    $course_member->user->username,
                    '____%system%____',
                    '',
                    '',
                    '',
                    '',
                    $subject
                );
                restoreLanguage();
            }
        }
    }
}