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
154
155
156
|
<?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 (
$booking->user_id !== $user->id
&& !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)
);
}
}
|