PluginProbe
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration / 1.22
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration v1.22
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.22, at app/Services/NotificationService.php

225 lines 7.1 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 //sending emails to mentioned users
207 $mentionedUserEmails = User::whereIn('ID', $uniqueIds)->pluck('user_email');
208 $this->sendMailAfterMention($comment->id, $mentionedUserEmails);
209
210 //sending desktop notifications
211 do_action('fluent_boards/mention_comment_notification', $comment, $mentionedUserIds);
212 }
213
214 public function sendMailAfterMention($commentId, $usersToSendEmail)
215 {
216 $current_user_id = get_current_user_id();
217
218 /* this will run in background as soon as possible */
219 /* sending Model or Model Instance won't work here */
220 as_enqueue_async_action('fluent_boards/one_time_schedule_send_email_for_mention', [$commentId, $usersToSendEmail, $current_user_id], 'fluent-boards');
221 }
222 }
223
224
225