aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/ConsultationMailer.php
blob: 45ef0b48fc04db543975e358b41cc5bd6e4926df (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
142
143
144
145
146
147
148
149
150
151
152
153
<?php
/**
 * @author  Jan-Hendrik Willms <tleilax+studip@gmail.com>
 * @license GPL2 or any later version
 */
class ConsultationMailer
{
    private static $messaging = null;

    /**
     * Returns a messaging object.
     *
     * @return messaging object
     */
    private static function getMessaging()
    {
        if (self::$messaging === null) {
            self::$messaging = new messaging();
        }
        return self::$messaging;
    }

    /**
     * Sends a consultation information message.
     *
     * @param User|null         $sender  Sender
     * @param User             $user    Recipient
     * @param ConsultationSlot $slot    Slot in question
     * @param string           $subject Subject of the message
     * @param string           $reason  Reason for a booking or cancelation
     * @param User             $sender  Sender of the message
     */
    public static function sendMessage(?User $sender, User $user, ConsultationBooking $booking, string $subject, ?string $reason = '')
    {
        // Don't send message if user doesn't want it
        if (!UserConfig::get($user->id)->CONSULTATION_SEND_MESSAGES) {
            return;
        }

        setTempLanguage($user->id);

        $message = $GLOBALS['template_factory']->open('consultations/mail.php')->render([
            'user'   => $booking->user,
            'slot'   => $booking->slot,
            'reason' => $reason ?: _('Kein Grund angegeben'),
        ]);

        if ($sender === null) {
            messaging::sendSystemMessage($user, $subject, $message);
        } else {
            $messaging = new messaging();
            $messaging->insert_message($message, $user->username, $sender->id, '', '', '', '', $subject);
        }

        restoreLanguage();
    }

    /**
     * Send a booking information message to the teacher of the booked slot.
     *
     * @param User|null            $sender
     * @param ConsultationBooking $booking The booking
     */
    public static function sendBookingMessageToResponsibilities(?User $sender, ConsultationBooking $booking)
    {
        foreach ($booking->slot->block->responsible_persons as $user) {
            if ($user->id === $GLOBALS['user']->id) {
                continue;
            }

            self::sendMessage(
                $sender,
                $user,
                $booking,
                sprintf(_('Termin von %s zugesagt'), $booking->user->getFullName()), $booking->reason
            );
        }
    }

    /**
     * Send a booking information message to the user of the booked slot.
     *
     * @param User|null            $sender
     * @param  ConsultationBooking $booking The booking
     */
    public static function sendBookingMessageToUser(?User $sender, ConsultationBooking $booking)
    {
        self::sendMessage(
            $sender,
            $booking->user,
            $booking,
            sprintf(_('Termin bei %s zugesagt'), $booking->slot->block->range_display), $booking->reason
        );
    }

    /**
     * Send an information message about a changed reason to a user of the
     * booked slot.
     *
     * @param User                 $sender   The sender of the message
     * @param ConsultationBooking $booking  The booking
     * @param User                $receiver The receiver of the message
     */
    public static function sendReasonMessage(?User $sender, ConsultationBooking $booking, User $receiver)
    {
        self::sendMessage(
            $sender,
            $receiver,
            $booking,
            sprintf(_('Grund des Termins bei %s bearbeitet'), $booking->slot->block->range_display), $booking->reason
        );
    }

    /**
     * Send a cancelation message to the teacher of the booked slot.
     *
     * @param User|null            $sender
     * @param  ConsultationBooking $booking The booking
     * @param String               $reason  Reason of the cancelation
     */
    public static function sendCancelMessageToResponsibilities(?User $sender, ConsultationBooking $booking, string $reason = '')
    {
        foreach ($booking->slot->block->responsible_persons as $user) {
            if ($user->id === $GLOBALS['user']->id) {
                continue;
            }

            self::sendMessage(
                $sender,
                $user,
                $booking,
                sprintf(_('Termin von %s abgesagt'), $booking->user->getFullName()), trim($reason)
            );
        }
    }

    /**
     * Send a cancelation message to the user of the booked slot.
     *
     * @param User|null            $sender
     * @param  ConsultationBooking $booking The booking
     * @param String               $reason  Reason of the cancelation
     */
    public static function sendCancelMessageToUser(?User $sender, ConsultationBooking $booking, string $reason)
    {
        self::sendMessage(
            $sender,
            $booking->user,
            $booking,
            sprintf(_('Termin bei %s abgesagt'), $booking->slot->block->range_display), trim($reason)
        );
    }
}