aboutsummaryrefslogtreecommitdiff
path: root/lib/cronjobs/send_mail_notifications.php
blob: 5565218e4a5961e9e7f7796cda1612b23c49c4f6 (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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<?php
/**
 * send_mail_notifications.php - Sends daily email notifications.
 *
 * @author  André Noack <noack@data-quest.de>, Suchi & Berg GmbH <info@data-quest.de>
 * @author  Jan-Hendrik Willms <tleilax+studip@gmail.com>
 * @access  public
 */

// +---------------------------------------------------------------------------+
// This file is part of Stud.IP
// send_mail_notifications.php
//
// Copyright (C) 2013 Jan-Hendrik Willms <tleilax+studip@gmail.com>
// +---------------------------------------------------------------------------+
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or any later version.
// +---------------------------------------------------------------------------+
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
// +---------------------------------------------------------------------------+


// TODO: notifications for plugins not implemented

class SendMailNotificationsJob extends CronJob
{
    /**
     * Returns the name of the cronjob.
     */
    public static function getName()
    {
        return _('Versendet tägliche E-Mailbenachrichtigungen');
    }

    /**
     * Returns the description of the cronjob.
     */
    public static function getDescription()
    {
        return _('Versendet die täglichen E-Mailbenachrichtigungen an alle Nutzer, die diese aktiviert haben');
    }

    /**
     * Setup method. Loads neccessary classes and checks environment. Will
     * bail out with an exception if environment does not match requirements.
     */
    public function setUp()
    {
        require_once 'lib/dates.inc.php';

        if (!Config::get()->MAIL_NOTIFICATION_ENABLE) {
            throw new Exception('Mail notifications are disabled in this Stud.IP installation.');
        }
        if (empty($GLOBALS['ABSOLUTE_URI_STUDIP'])) {
            throw new Exception('To use mail notifications you MUST set correct values for $ABSOLUTE_URI_STUDIP in config_local.inc.php!');
        }
    }

    /**
     * Return the paremeters for this cronjob.
     *
     * @return Array Parameters.
     */
    public static function getParameters()
    {
        return [
            'verbose' => [
                'type'        => 'boolean',
                'default'     => false,
                'status'      => 'optional',
                'description' => _('Sollen Ausgaben erzeugt werden (sind später im Log des Cronjobs sichtbar)'),
            ],
        ];
    }

    /**
     * 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.
     *                          Only valid parameter at the moment is
     *                          "verbose" which toggles verbose output while
     *                          purging the cache.
     */
    public function execute($last_result, $parameters = [])
    {
        $cli_user = $GLOBALS['user'];

        $notification = new ModulesNotification();

        $query = "SELECT DISTINCT user_id
                  FROM seminar_user_notifications
                  JOIN seminar_user USING (user_id, seminar_id)";
        DBManager::get()->fetchFirst(
            $query,
            [],
            function ($user_id) use ($parameters, $notification) {
                $user = User::find($user_id);
                if (!$user || $user->isBlocked()) {
                    return;
                }

                $GLOBALS['user'] = new Seminar_User($user);

                $ok = false;
                $mailmessage = $notification->getAllNotifications($user->id);

                if ($mailmessage) {
                    setTempLanguage('', $user->preferred_language);

                    $ok = StudipMail::sendMessage(
                        $user->email,
                        "[" . Config::get()->UNI_NAME_CLEAN . "] " . _('Tägliche Benachrichtigung'),
                        $mailmessage['text'],
                        $user->config->MAIL_AS_HTML ? $mailmessage['html'] : null
                    );
                }

                // Unset user configuration cache to preserve memory
                UserConfig::set($user->id, null);

                // Log results
                if ($ok !== false && $parameters['verbose']) {
                    echo $user->username . ':' . $ok . "\n";
                }
            }
        );

        $GLOBALS['user'] = $cli_user;
    }
}