PluginProbe
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration / 1.12
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration v1.12
2.1.0 2.0.15 2.0.12 2.0.10 2.0.4 2.0.1 2.0.0 1.95.3 1.95.2 1.95 1.91.6 trunk 1.11 1.12 1.13 1.20 1.21 1.22 1.23 1.30 1.31 1.32 1.35 1.40 1.41 All 42 releases
fluent-boards / app / Hooks / Handlers / ScheduleHandler.php

ScheduleHandler.php in FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration 1.12, at app/Hooks/Handlers/ScheduleHandler.php

371 lines 14.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentBoards\App\Hooks\Handlers;
4
5 use FluentBoards\App\Models\Comment;
6 use FluentBoards\App\Models\Task;
7 use FluentBoards\App\Models\User;
8 use FluentBoards\App\Services\Helper;
9
10 class ScheduleHandler
11 {
12 public function sendEmailForComment(
13 $commentId,
14 $usersToSendEmail,
15 $current_user_id
16 ) {
17 try {
18 $comment = Comment::find($commentId) ?? null;
19 if ( ! $comment) {
20 return;
21 }
22 if ('comment' != $comment->type) {
23 return;
24 }
25
26 $task = Task::findOrFail($comment->task_id);
27 if ( ! $task) {
28 return;
29 }
30 // $assignees = $task->assignees;
31 $board = $task->board;
32 $page_url = fluent_boards_page_url();
33
34 $user = $task->user($comment->created_by);
35
36 $userData = $this->getUserData($current_user_id);
37
38 $boardUrl = $page_url.'boards/'.$board->id;
39 $taskUrl = $page_url.'boards/'.$board->id.'/tasks/'.$task->id.'-'
40 .substr($task->title, 0, 10);
41
42 $userLinkTag = '<strong>'.htmlspecialchars($user->display_name)
43 .'</strong>';
44 $taskLinkTag = '<a target="_blank" href="'
45 .htmlspecialchars($taskUrl).'">'
46 .htmlspecialchars($task->title).'</a>';
47 $boardLinkTag = '<a target="_blank" href="'
48 .htmlspecialchars($boardUrl).'">'
49 .htmlspecialchars($board->title).'</a>';
50
51 $data = [
52 'body' => 'commented on '.$taskLinkTag.' on '
53 .$boardLinkTag.' board.',
54 'pre_header' => 'comment added in fluent task',
55 'show_footer' => true,
56 'comment' => $comment->description,
57 'userData' => $userData,
58 'site_url' => site_url(),
59 'site_title' => get_bloginfo('name'),
60 'site_logo' => fluent_boards_site_logo(),
61 ];
62
63 $mailSubject = 'new comment added on task';
64 $message = Helper::loadView('emails.comment2', $data);
65 $headers = ['Content-Type: text/html; charset=UTF-8'];
66
67 foreach ($usersToSendEmail as $email) {
68 \wp_mail($email, $mailSubject, $message, $headers);
69 }
70 } catch (\Exception $e) {
71 // do nothing // better to log here
72 }
73 }
74
75 public function sendEmailForAddAssignee(
76 $taskId,
77 $newAssigneeId,
78 $current_user_id
79 ) {
80 try {
81 $task = Task::findOrFail($taskId);
82 $board = $task->board;
83 $assignee = User::findOrFail($newAssigneeId);
84
85 $userData = $this->getUserData($current_user_id);
86
87 $page_url = fluent_boards_page_url();
88 $boardUrl = $page_url.'boards/'.$board->id;
89 $boardLinkTag = '<a target="_blank" href="'
90 .htmlspecialchars($boardUrl).'">'
91 .htmlspecialchars($board->title).'</a>';
92
93 if (null == $task->parent_id) {
94 // this is a task
95 $taskUrl = $page_url.'boards/'.$board->id.'/tasks/'
96 .$task->id.'-'.substr($task->title, 0, 10);
97 $taskLinkTag = '<a target="_blank" href="'
98 .htmlspecialchars($taskUrl).'">'
99 .htmlspecialchars($task->title).'</a>';
100 $data = [
101 'body' => 'has assigned you to task '.$taskLinkTag
102 .' on the board '.$boardLinkTag,
103 'pre_header' => 'you have been assigned to task',
104 'show_footer' => true,
105 'userData' => $userData,
106 'site_url' => site_url(),
107 'site_title' => get_bloginfo('name'),
108 'site_logo' => fluent_boards_site_logo(),
109 ];
110 } else {
111 // this is a subtask
112 $task = $task->parentTask($task->parent_id);
113
114 $taskUrl = $page_url.'boards/'.$board->id.'/tasks/'
115 .$task->id.'-'.substr($task->title, 0, 10);
116 $taskLinkTag = '<a target="_blank" href="'
117 .htmlspecialchars($taskUrl).'">'
118 .htmlspecialchars($task->title).'</a>';
119
120 $data = [
121 'body' => 'has assigned you to subtask <strong>'
122 .$task->title.'</strong> of task '
123 .$taskLinkTag.' on the board '
124 .$boardLinkTag,
125 'pre_header' => 'you have been assigned to subtask',
126 'show_footer' => true, 'user' => $assignee,
127 'userData' => $userData,
128 'site_url' => site_url(),
129 'site_title' => get_bloginfo('name'),
130 'site_logo' => fluent_boards_site_logo(),
131 ];
132 }
133
134 $mailSubject = 'You have been assigned to task';
135 $message = Helper::loadView('emails.assignee2', $data);
136 $headers = ['Content-Type: text/html; charset=UTF-8'];
137
138
139 \wp_mail($assignee->user_email, $mailSubject, $message, $headers);
140
141 } catch (\Exception $e) {
142 throw new \Exception('Error in sending mail to new assignees', 1);
143 }
144 }
145
146 public function sendEmailForRemoveAssignee(
147 $taskId,
148 $newAssigneeId,
149 $current_user_id
150 ) {
151 try {
152 $task = Task::findOrFail($taskId);
153 $board = $task->board;
154 $assignee = User::findOrFail($newAssigneeId);
155
156 $userData = $this->getUserData($current_user_id);
157
158 $page_url = fluent_boards_page_url();
159
160 $boardUrl = $page_url.'boards/'.$board->id;
161 $boardLinkTag = '<a target="_blank" href="'
162 .htmlspecialchars($boardUrl).'">'
163 .htmlspecialchars($board->title).'</a>';
164
165 if (null == $task->parent_id) {
166 // this is a task
167 $taskUrl = $page_url.'boards/'.$board->id.'/tasks/'
168 .$task->id.'-'.substr($task->title, 0, 10);
169 $taskLinkTag = '<a target="_blank" href="'
170 .htmlspecialchars($taskUrl).'">'
171 .htmlspecialchars($task->title).'</a>';
172 $data = [
173 'body' => 'has removed you from task '.$taskLinkTag
174 .' on the board '.$boardLinkTag,
175 'pre_header' => 'you have been removed from task',
176 'show_footer' => true,
177 'userData' => $userData,
178 'site_url' => site_url(),
179 'site_title' => get_bloginfo('name'),
180 'site_logo' => fluent_boards_site_logo(),
181 ];
182 } else {
183 // this is a subtask
184 $task = $task->parentTask($task->parent_id);
185
186 $taskUrl = $page_url.'boards/'.$board->id.'/tasks/'
187 .$task->id.'-'.substr($task->title, 0, 10);
188 $taskLinkTag = '<a target="_blank" href="'
189 .htmlspecialchars($taskUrl).'">'
190 .htmlspecialchars($task->title).'</a>';
191
192 $data = [
193 'body' => 'has removed you from subtask <strong>'
194 .$task->title.'</strong> of task '
195 .$taskLinkTag.' on the board '
196 .$boardLinkTag,
197 'pre_header' => 'you have been removed from subtask',
198 'show_footer' => true,
199 'userData' => $userData,
200 ];
201 }
202
203 $mailSubject = 'You have been removed from task';
204 $message = Helper::loadView('emails.assignee2', $data);
205 $headers = ['Content-Type: text/html; charset=UTF-8'];
206
207 \wp_mail($assignee->user_email, $mailSubject, $message, $headers);
208
209 } catch (\Exception $e) {
210 throw new \Exception('Error in sending mail to new assignees', 1);
211 }
212 }
213
214
215 public function sendEmailForChangeStage(
216 $taskId,
217 $newAssigneeEmails,
218 $current_user_id
219 ) {
220 try {
221 $task = Task::findOrFail($taskId);
222 $board = $task->board;
223
224 $userData = $this->getUserData($current_user_id);
225
226 $page_url = fluent_boards_page_url();
227 $boardUrl = $page_url.'boards/'.$board->id;
228 $boardLinkTag = '<a target="_blank" href="'
229 .htmlspecialchars($boardUrl).'">'
230 .htmlspecialchars($board->title).'</a>';
231
232 $taskUrl = $page_url.'boards/'.$board->id.'/tasks/'.$task->id
233 .'-'.substr($task->title, 0, 10);
234 $taskLinkTag = '<a target="_blank" href="'
235 .htmlspecialchars($taskUrl).'">'
236 .htmlspecialchars($task->title).'</a>';
237
238 $data = [
239 'body' => 'has moved '.$taskLinkTag.' task to <strong>'
240 .$task->stage->title
241 .'</strong> stage of board '.$boardLinkTag,
242 'pre_header' => 'Task stage has been changed',
243 'show_footer' => true,
244 'userData' => $userData,
245 'site_url' => site_url(),
246 'site_title' => get_bloginfo('name'),
247 'site_logo' => fluent_boards_site_logo(),
248 ];
249
250
251 $mailSubject = 'Task stage has been changed';
252 $message = Helper::loadView('emails.assignee2', $data);
253 $headers = ['Content-Type: text/html; charset=UTF-8'];
254
255 foreach ($newAssigneeEmails as $assignee_email) {
256 \wp_mail($assignee_email, $mailSubject, $message, $headers);
257 }
258 } catch (\Exception $e) {
259 throw new \Exception('Error in sending mail to new assignees', 1);
260 }
261 }
262
263 public function sendEmailForDueDateUpdate(
264 $taskId,
265 $newAssigneeEmails,
266 $current_user_id
267 ) {
268 try {
269 $task = Task::findOrFail($taskId);
270 $board = $task->board;
271
272 $userData = $this->getUserData($current_user_id);
273
274 $page_url = fluent_boards_page_url();
275 $boardUrl = $page_url.'boards/'.$board->id;
276 $boardLinkTag = '<a target="_blank" href="'
277 .htmlspecialchars($boardUrl).'">'
278 .htmlspecialchars($board->title).'</a>';
279
280 $taskUrl = $page_url.'boards/'.$board->id.'/tasks/'.$task->id
281 .'-'.substr($task->title, 0, 10);
282 $taskLinkTag = '<a target="_blank" href="'
283 .htmlspecialchars($taskUrl).'">'
284 .htmlspecialchars($task->title).'</a>';
285
286 $data = [
287 'body' => 'has updated due date of '.$taskLinkTag
288 .' task to <strong>'.$task->due_at
289 .'</strong> of board '.$boardLinkTag,
290 'pre_header' => 'Task due date has been changed',
291 'show_footer' => true,
292 'userData' => $userData,
293 'site_url' => site_url(),
294 'site_title' => get_bloginfo('name'),
295 'site_logo' => fluent_boards_site_logo(),
296 ];
297
298
299 $mailSubject = 'Task due date has been changed';
300 $message = Helper::loadView('emails.assignee2', $data);
301 $headers = ['Content-Type: text/html; charset=UTF-8'];
302
303 foreach ($newAssigneeEmails as $assignee_email) {
304 \wp_mail($assignee_email, $mailSubject, $message, $headers);
305 }
306 } catch (\Exception $e) {
307 throw new \Exception('Error in sending mail to new assignees', 1);
308 }
309 }
310
311 public function sendEmailForArchivedTask(
312 $taskId,
313 $newAssigneeEmails,
314 $current_user_id
315 ) {
316 try {
317 $task = Task::findOrFail($taskId);
318 $board = $task->board;
319
320 $userData = $this->getUserData($current_user_id);
321
322 $page_url = fluent_boards_page_url();
323 $boardUrl = $page_url.'boards/'.$board->id;
324 $boardLinkTag = '<a target="_blank" href="'
325 .htmlspecialchars($boardUrl).'">'
326 .htmlspecialchars($board->title).'</a>';
327
328 $taskUrl = $page_url.'boards/'.$board->id.'/tasks/'.$task->id
329 .'-'.substr($task->title, 0, 10);
330 $taskLinkTag = '<a target="_blank" href="'
331 .htmlspecialchars($taskUrl).'">'
332 .htmlspecialchars($task->title).'</a>';
333
334 $data = [
335 'body' => 'has archived '.$taskLinkTag.' task of board '
336 .$boardLinkTag,
337 'pre_header' => 'Task has been archived',
338 'show_footer' => true,
339 'userData' => $userData,
340 'site_url' => site_url(),
341 'site_title' => get_bloginfo('name'),
342 'site_logo' => fluent_boards_site_logo(),
343 ];
344
345
346 $mailSubject = 'Task has been archived';
347 $message = Helper::loadView('emails.assignee2', $data);
348 $headers = ['Content-Type: text/html; charset=UTF-8'];
349
350 foreach ($newAssigneeEmails as $assignee_email) {
351 \wp_mail($assignee_email, $mailSubject, $message, $headers);
352 }
353 } catch (\Exception $e) {
354 throw new \Exception('Error in sending mail to new assignees', 1);
355 }
356 }
357
358 private function getUserData($userId)
359 {
360 $currentUser = User::findOrFail($userId);
361 $gravaterPhoto = fluent_boards_user_avatar($currentUser->user_email,
362 $currentUser->display_name);
363
364 return [
365 'display_name' => $currentUser->display_name,
366 'photo' => $gravaterPhoto,
367 ];
368 }
369
370 }
371