PluginProbe
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration / 1.40
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration v1.40
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 1.45 All 41 releases
fluent-boards / app / Services / NotificationService.php

NotificationService.php in FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration 1.40, at app/Services/NotificationService.php

247 lines 7.9 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\Services;
4
5 use FluentBoards\App\Models\Meta;
6 use FluentBoards\App\Models\Notification;
7 use FluentBoards\App\Models\NotificationUser;
8 use FluentBoards\App\Models\Relation;
9 use FluentBoards\App\Models\Task;
10 use FluentBoards\App\Models\User;
11
12 class NotificationService
13 {
14 public function getAllNotifications($per_page, $page)
15 {
16 $user = wp_get_current_user();
17
18 $notifications = Notification::where('object_type', Constant::OBJECT_TYPE_BOARD_NOTIFICATION)
19 ->whereHas('users', function($q) use ($user) {
20 $q->where('user_id', $user->ID);
21 })->with('activitist', 'task')->orderBy('created_at', 'desc')->paginate($per_page, ['*'], 'page', $page);
22
23 foreach ($notifications as $notification){
24 $notification->read = $notification->checkReadOrNot();
25 }
26
27 return $notifications;
28 }
29
30 /**
31 * @throws \Exception
32 */
33 public function getAllUnreadNotifications($per_page, $page)
34 {
35 $userId = get_current_user_id();
36 if (!$userId) {
37 throw new \Exception('You are not allowed to do that', 403);
38 }
39 $unreadNotifications = Notification::where('object_type', Constant::OBJECT_TYPE_BOARD_NOTIFICATION)
40 ->whereHas('users', function($q) use ($userId) {
41 $q->where('user_id', $userId)
42 ->whereNull('marked_read_at');
43 })->with('activitist', 'task')->orderBy('created_at', 'desc')->paginate($per_page, ['*'], 'page', $page);
44 return $unreadNotifications;
45 }
46
47 public function markAllRead()
48 {
49 $user = wp_get_current_user();
50
51 $userNotifications = NotificationUser::where('user_id', $user->ID)
52 ->with('notification')
53 ->get();
54
55 foreach ($userNotifications as $data)
56 {
57 $data->marked_read_at = current_time('mysql');
58 $data->save();
59 }
60 }
61
62 public function markNotificationRead($notificationId)
63 {
64 $user = wp_get_current_user();
65
66 $notification = NotificationUser::where('user_id', $user->ID)
67 ->where('notification_id', $notificationId)
68 ->first();
69 $notification->marked_read_at = current_time('mysql');
70 $notification->save();
71 return $notification;
72 }
73
74 public function newNotificationNumber()
75 {
76 $user = wp_get_current_user();
77
78 $unread_notifications = Notification::query()->where('object_type', Constant::OBJECT_TYPE_BOARD_NOTIFICATION)
79 ->whereHas('users', function($q) use ($user) {
80 $q->where('user_id', $user->ID)
81 ->whereNull('marked_read_at');
82 });
83
84 return $unread_notifications->count();
85 }
86
87 public function isCurrentUserObservingTask($task)
88 {
89 $currentUserId = get_current_user_id();
90 $observers = $task->watchers()->get()->pluck('ID');
91
92 foreach ($observers as $id){
93 if($id == $currentUserId)
94 return true;
95 }
96
97 return false;
98 }
99
100 public function getBoardNotificationSettingsOfUser($id, $userId)
101 {
102 $boardSettings = Relation::where('object_type', Constant::OBJECT_TYPE_BOARD_USER)
103 ->where('object_id', $id)
104 ->where('foreign_id', $userId)
105 ->first();
106
107 return $boardSettings;
108 }
109
110 public function getGlobalNotificationSettingsOfUser($userId)
111 {
112 $settings = Meta::where('object_type', Constant::OBJECT_TYPE_USER)
113 ->where('object_id', $userId)
114 ->where('key', Constant::USER_GLOBAL_NOTIFICATIONS)
115 ->first();
116
117 return $settings;
118 }
119
120 public function updateBoardNotificationSettings($newSettings, $id)
121 {
122 $userId = get_current_user_id();
123 $boardSettings = $this->getBoardNotificationSettingsOfUser($id, $userId);
124 if(empty($boardSettings)){
125 return;
126 }
127 foreach ($newSettings as $index => $setting)
128 {
129 $newSettings[$index] = $setting == 'true' ? true : false;
130 }
131 $boardSettings->preferences = $newSettings;
132 $boardSettings->save();
133
134 }
135
136 public function filterAssigneeToSendEmail($taskId, $emailPurpose){
137 $task = Task::findOrFail($taskId);
138 $watchers = $task->watchers;
139 $currentUserId = get_current_user_id();
140
141 $wathersToSendEmail = array();
142
143 foreach ($watchers as $watcher){
144 if($watcher->ID != $currentUserId)
145 {
146 if($this->checkIfEmailEnable($watcher->ID, $emailPurpose, $task->board_id))
147 {
148 $wathersToSendEmail[] = $watcher->user_email;
149 }
150 }
151 }
152
153 return $wathersToSendEmail;
154 }
155
156 public function checkIfEmailEnable($userId, $emailPurpose, $boardId)
157 {
158 if(
159 $this->checkIfEmailEnabled($boardId, $userId, $emailPurpose)
160 ){
161 return true;
162 }else{
163 return false;
164 }
165 }
166
167 public function checkIfEmailEnabled($boardId, $userId, $purpose)
168 {
169 $boardSettings = $this->getBoardNotificationSettingsOfUser($boardId, $userId);
170
171 if($boardSettings){
172 $preferences = maybe_unserialize($boardSettings['preferences']);
173 if(!array_key_exists($purpose, $preferences)){
174 $preferences[$purpose] = true;
175 $boardSettings->preferences = $preferences;
176 $boardSettings->save();
177 return true;
178 }
179 return $preferences[$purpose];
180 }
181
182 return false;
183 }
184
185 public function checkIfEmailEnabledGlobally($userId, $purpose)
186 {
187 $globalSettings = $this->getGlobalNotificationSettingsOfUser($userId);
188
189 if($globalSettings){
190 $preferences = maybe_unserialize($globalSettings['value']);
191 if(!array_key_exists($purpose, $preferences)){
192 $preferences[$purpose] = true;
193 $globalSettings->preferences = $preferences;
194 $globalSettings->save();
195 return true;
196 }
197 return $preferences[$purpose];
198 }
199
200 return true;
201 }
202
203 public function mentionInComment($comment, $mentionedUserIds)
204 {
205 $uniqueIds = array_unique($mentionedUserIds);
206
207 $uniqueIds = array_filter($uniqueIds, function($value) {
208 return (int)$value !== get_current_user_id();
209 });
210
211 //sending emails to mentioned users
212 $mentionedUserEmails = User::whereIn('ID', $uniqueIds)->pluck('user_email');
213 $this->sendMailAfterMention($comment->id, $mentionedUserEmails);
214
215 //sending desktop notifications
216 do_action('fluent_boards/mention_comment_notification', $comment, $uniqueIds);
217 }
218
219 public function sendMailAfterMention($commentId, $usersToSendEmail)
220 {
221 $current_user_id = get_current_user_id();
222
223 /* this will run in background as soon as possible */
224 /* sending Model or Model Instance won't work here */
225 as_enqueue_async_action('fluent_boards/one_time_schedule_send_email_for_mention', [$commentId, $usersToSendEmail, $current_user_id], 'fluent-boards');
226 }
227
228 public function getUnreadNotificationsOfTasks($task)
229 {
230 $userId = get_current_user_id();
231 if (!$userId) {
232 throw new \Exception('You are not allowed to do that', 403);
233 }
234 $unreadNotifications = Notification::where('object_type', Constant::OBJECT_TYPE_BOARD_NOTIFICATION)
235 ->whereHas('users', function($q) use ($userId) {
236 $q->where('user_id', $userId)
237 ->whereNull('marked_read_at');
238 })->whereHas('task', function($q) use ($task) {
239 $q->where('id', $task->id);
240 })
241 ->with('activitist')->orderBy('created_at', 'desc')->count();
242 return $unreadNotifications;
243 }
244 }
245
246
247