From fc7ca2a6d06c7ccbb2af11358b05e3b6ba896380 Mon Sep 17 00:00:00 2001 From: mahdihty Date: Sat, 13 Mar 2021 11:26:25 +0330 Subject: [PATCH] complete notification helper class and use it in listeners --- app/Listeners/BusinessUserCreateNotif.php | 66 +++---------- app/Listeners/ProjectUserCreateNotif.php | 64 +++---------- app/Listeners/TaskCreateNotif.php | 68 +++----------- app/Listeners/TaskUpdateNotif.php | 92 ++++--------------- app/Models/User.php | 1 - .../HelperClass/NotificationHelper.php | 43 +++++---- 6 files changed, 74 insertions(+), 260 deletions(-) diff --git a/app/Listeners/BusinessUserCreateNotif.php b/app/Listeners/BusinessUserCreateNotif.php index 29f4456..764cd5f 100644 --- a/app/Listeners/BusinessUserCreateNotif.php +++ b/app/Listeners/BusinessUserCreateNotif.php @@ -2,27 +2,27 @@ namespace App\Listeners; -use App\Channels\FcmChannel; use App\Events\BusinessUserCreate; use App\Models\Business; use App\Models\User; -use App\Notifications\DBNotification; -use App\Notifications\FcmNotification; -use App\Notifications\MailNotification; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Queue\InteractsWithQueue; -use Illuminate\Support\Facades\Notification; +use App\Utilities\HelperClass\NotificationHelper; class BusinessUserCreateNotif { + + /** + * @var NotificationHelper + */ + public $helper; + /** * Create the event listener. * * @return void */ - public function __construct() + public function __construct(NotificationHelper $helper) { - // + $this->helper = $helper; } /** @@ -42,52 +42,10 @@ class BusinessUserCreateNotif $new_user = User::findOrFail($payload->data->original->user_id); $owners = Business::findOrFail($payload->business)->owners()->where('id', '!=', $new_user->id)->get(); - $notif = $this->makeNotif($payload,['business' => request('_business_info')['name'], 'user' => $new_user->name]); - $users = $owners->prepend($new_user); - $this->sendNotifications($users, $notif); - } - - /** - * Make notification object - * - * @param $payload - * @param array $options - * @return array - */ - public function makeNotif($payload, $options = []) { - return [ - 'greeting' => $this->getMessageLine($payload, 'greeting'), - 'subject' => $this->getMessageLine($payload, 'subject'), - 'title' => $this->getMessageLine($payload, 'title'), - 'body' => $this->getMessageLine($payload, 'body', $options) - ]; - } - - /** - * Fetch message from notifications lang file - * - * @param $payload - * @param $key - * @param null $options - * @return array|\Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Translation\Translator|string|null - * - */ - public function getMessageLine($payload, $key, $options = []) - { - return __('notification.'.$payload->data->table_name.'.'.enum('cruds.inverse.'.$payload->data->crud_id.'.singular_name').'.'.$key, $options); - } - - /** - * Call notifications - * - * @param $users - * @param $notif - */ - public function sendNotifications($users, $notif) { - Notification::send($users, new MailNotification($notif)); - Notification::send($users, new DBNotification($notif)); - Notification::send($users, new FcmNotification($notif)); + $this->helper->makeNotif($payload, null, + ['business' => request('_business_info')['name'], 'user' => $new_user->name] + )->sendNotifications($users, 'critical'); } } diff --git a/app/Listeners/ProjectUserCreateNotif.php b/app/Listeners/ProjectUserCreateNotif.php index add26cb..eb0a09f 100644 --- a/app/Listeners/ProjectUserCreateNotif.php +++ b/app/Listeners/ProjectUserCreateNotif.php @@ -5,23 +5,23 @@ namespace App\Listeners; use App\Events\ProjectUserCreate; use App\Models\Project; use App\Models\User; -use App\Notifications\DBNotification; -use App\Notifications\FcmNotification; -use App\Notifications\MailNotification; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Queue\InteractsWithQueue; -use Illuminate\Support\Facades\Notification; +use App\Utilities\HelperClass\NotificationHelper; class ProjectUserCreateNotif { + /** + * @var NotificationHelper + */ + public $helper; + /** * Create the event listener. * * @return void */ - public function __construct() + public function __construct(NotificationHelper $helper) { - // + $this->helper = $helper; } /** @@ -42,52 +42,10 @@ class ProjectUserCreateNotif $owners = User::whereIn('id', array_keys($owners_id))->get(); - $notif = $this->makeNotif($payload,['project' => $project->name, 'user' => $new_user->name]); - $users = $owners->prepend($new_user); - $this->sendNotifications($users, $notif); - } - - /** - * Make notification object - * - * @param $payload - * @param array $options - * @return array - */ - public function makeNotif($payload, $options = []) { - return [ - 'greeting' => $this->getMessageLine($payload, 'greeting'), - 'subject' => $this->getMessageLine($payload, 'subject'), - 'title' => $this->getMessageLine($payload, 'title'), - 'body' => $this->getMessageLine($payload, 'body', $options) - ]; - } - - /** - * Fetch message from notifications lang file - * - * @param $payload - * @param $key - * @param null $options - * @return array|\Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Translation\Translator|string|null - * - */ - public function getMessageLine($payload, $key, $options = []) - { - return __('notification.'.$payload->data->table_name.'.'.enum('cruds.inverse.'.$payload->data->crud_id.'.singular_name').'.'.$key, $options); - } - - /** - * Call notifications - * - * @param $users - * @param $notif - */ - public function sendNotifications($users, $notif) { - Notification::send($users, new MailNotification($notif)); - Notification::send($users, new DBNotification($notif)); - Notification::send($users, new FcmNotification($notif)); + $this->helper->makeNotif($payload, null, + ['project' => $project->name, 'user' => $new_user->name] + )->sendNotifications($users, 'critical'); } } diff --git a/app/Listeners/TaskCreateNotif.php b/app/Listeners/TaskCreateNotif.php index 3bba2d8..5daded5 100644 --- a/app/Listeners/TaskCreateNotif.php +++ b/app/Listeners/TaskCreateNotif.php @@ -5,21 +5,23 @@ namespace App\Listeners; use App\Events\TaskCreate; use App\Models\Task; use App\Models\User; -use App\Notifications\DBNotification; -use App\Notifications\FcmNotification; -use App\Notifications\MailNotification; -use Illuminate\Support\Facades\Notification; +use App\Utilities\HelperClass\NotificationHelper; class TaskCreateNotif { + /** + * @var NotificationHelper + */ + public $helper; + /** * Create the event listener. * * @return void */ - public function __construct() + public function __construct(NotificationHelper $helper) { - // + $this->helper = $helper; } /** @@ -44,61 +46,15 @@ class TaskCreateNotif $user = User::findOrFail($payload->data->original->assignee_id); $task = Task::findOrFail($payload->data->original->id); - $notif = $this->makeNotif($payload, 'assignee', ['task' => $task->title]); - - $this->sendNotifications($user, $notif); + $this->helper->makeNotif($payload, 'assignee', ['task' => $task->title]) + ->sendNotifications($user, 'critical'); } public function approverNotifHandler($payload) { $user = User::findOrFail($payload->data->original->approver_id); $task = Task::findOrFail($payload->data->original->id); - $notif = $this->makeNotif($payload, 'approver', ['task' => $task->title]); - - $this->sendNotifications($user, $notif); - } - - /** - * Make notification object - * - * @param $payload - * @param null $route - * @param array $options - * @return array - */ - public function makeNotif($payload, $route = null, $options = []) { - $route = $route == null ? "" : $route.'.'; - return [ - 'greeting' => $this->getMessageLine($payload, $route.'greeting'), - 'subject' => $this->getMessageLine($payload, $route.'subject'), - 'title' => $this->getMessageLine($payload, $route.'title'), - 'body' => $this->getMessageLine($payload, $route.'body', $options) - ]; - } - - /** - * Fetch message from notifications lang file - * - * @param $payload - * @param $key - * @param null $options - * @return array|\Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Translation\Translator|string|null - * - */ - public function getMessageLine($payload, $key, $options = []) - { - return __('notification.'.$payload->data->table_name.'.'.enum('cruds.inverse.'.$payload->data->crud_id.'.singular_name').'.'.$key, $options); - } - - /** - * Call notifications - * - * @param $users - * @param $notif - */ - public function sendNotifications($users, $notif) { - Notification::send($users, new MailNotification($notif)); - Notification::send($users, new DBNotification($notif)); - Notification::send($users, new FcmNotification($notif)); + $this->helper->makeNotif($payload, 'approver', ['task' => $task->title]) + ->sendNotifications($user, 'critical'); } } diff --git a/app/Listeners/TaskUpdateNotif.php b/app/Listeners/TaskUpdateNotif.php index 118036c..a1c35bc 100644 --- a/app/Listeners/TaskUpdateNotif.php +++ b/app/Listeners/TaskUpdateNotif.php @@ -5,21 +5,23 @@ namespace App\Listeners; use App\Events\TaskUpdate; use App\Models\Task; use App\Models\User; -use App\Notifications\DBNotification; -use App\Notifications\FcmNotification; -use App\Notifications\MailNotification; -use Illuminate\Support\Facades\Notification; +use App\Utilities\HelperClass\NotificationHelper; class TaskUpdateNotif { + /** + * @var NotificationHelper + */ + public $helper; + /** * Create the event listener. * * @return void */ - public function __construct() + public function __construct(NotificationHelper $helper) { - // + $this->helper = $helper; } /** @@ -49,18 +51,16 @@ class TaskUpdateNotif $user = User::findOrFail($payload->data->diff->assignee_id); $task = Task::findOrFail($payload->data->original->id); - $notif = $this->makeNotif($payload, 'assignee', ['task' => $task->title]); - - $this->sendNotifications($user, $notif); + $this->helper->makeNotif($payload, 'assignee', ['task' => $task->title]) + ->sendNotifications($user, 'critical'); } public function approverNotifHandler($payload) { $user = User::findOrFail($payload->data->diff->approver_id); $task = Task::findOrFail($payload->data->original->id); - $notif = $this->makeNotif($payload, 'approver', ['task' => $task->title]); - - $this->sendNotifications($user, $notif); + $this->helper->makeNotif($payload, 'approver', ['task' => $task->title]) + ->sendNotifications($user, 'critical'); } public function completedNotifHandler($payload){ @@ -74,9 +74,8 @@ class TaskUpdateNotif $users = User::whereIn('id', $user_ids)->where('id', '!=', auth()->id())->get(); - $notif = $this->makeNotif($payload, 'completed', ['task' => $task->title]); - - $this->sendNotifications($users, $notif); + $this->helper->makeNotif($payload, 'completed', ['task' => $task->title]) + ->sendNotifications($users, 'critical'); } public function readyNotifHandler($payload) @@ -90,66 +89,7 @@ class TaskUpdateNotif $users = User::whereIn('id', $user_ids)->where('id', '!=', auth()->id())->get(); - $notif = $this->makeNotif($payload, 'ready', ['task' => $task->title]); - - $this->sendNotifications($users, $notif); - } - - /** - * Make notification object - * - * @param $payload - * @param null $route - * @param array $options - * @return array - */ - public function makeNotif($payload, $route = null, $options = []) { - $route = $route == null ? "" : $route.'.'; - return [ - 'greeting' => $this->getMessageLine($payload, $route.'greeting'), - 'subject' => $this->getMessageLine($payload, $route.'subject'), - 'title' => $this->getMessageLine($payload, $route.'title'), - 'body' => $this->getMessageLine($payload, $route.'body', $options) - ]; - } - - /** - * Fetch message from notifications lang file - * - * @param $payload - * @param $key - * @param null $options - * @return array|\Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Translation\Translator|string|null - * - */ - public function getMessageLine($payload, $key, $options = []) - { - return __('notification.'.$payload->data->table_name.'.'.enum('cruds.inverse.'.$payload->data->crud_id.'.singular_name').'.'.$key, $options); - } - - /** - * Call notifications - * - * @param $users - * @param $notif - */ - public function sendNotifications($users, $notif) { -// switch ($level) { -// case "emergency": -//// Notification::send($users, new SmsNotification($notif)); -// case "critical": -// Notification::send($users, new MailNotification($notif)); -// case "high": -// Notification::send($users, new DBNotification($notif)); -// case "medium": -// Notification::send($users, new FcmNotification($notif)); -// case "low": -//// Notification::send($users, new SocketNotification($notif)); -// default: -//// Notification::send($users, new SocketNotification($notif)); -// } - Notification::send($users, new MailNotification($notif)); - Notification::send($users, new DBNotification($notif)); - Notification::send($users, new FcmNotification($notif)); + $this->helper->makeNotif($payload, 'ready', ['task' => $task->title]) + ->sendNotifications($users, 'critical'); } } diff --git a/app/Models/User.php b/app/Models/User.php index 1a71790..5095cb9 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -11,7 +11,6 @@ use Illuminate\Validation\Rule; use Illuminate\Http\UploadedFile; use Spatie\MediaLibrary\HasMedia; use Illuminate\Auth\Authenticatable; -use Illuminate\Notifications\Notifiable; use Spatie\MediaLibrary\InteractsWithMedia; use Illuminate\Foundation\Auth\Access\Authorizable; use Spatie\MediaLibrary\MediaCollections\Models\Media; diff --git a/app/Utilities/HelperClass/NotificationHelper.php b/app/Utilities/HelperClass/NotificationHelper.php index 4231cbe..582989b 100644 --- a/app/Utilities/HelperClass/NotificationHelper.php +++ b/app/Utilities/HelperClass/NotificationHelper.php @@ -11,6 +11,7 @@ use Illuminate\Support\Facades\Notification; class NotificationHelper { + protected $notif; /** * Make notification object * @@ -21,12 +22,13 @@ class NotificationHelper */ public function makeNotif($payload, $route = null, $options = []) { $route = $route == null ? "" : $route.'.'; - return [ + $this->notif = [ 'greeting' => $this->getMessageLine($payload, $route.'greeting'), 'subject' => $this->getMessageLine($payload, $route.'subject'), 'title' => $this->getMessageLine($payload, $route.'title'), 'body' => $this->getMessageLine($payload, $route.'body', $options) ]; + return $this; } /** @@ -38,7 +40,7 @@ class NotificationHelper * @return array|\Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Translation\Translator|string|null * */ - public function getMessageLine($payload, $key, $options = []) + protected function getMessageLine($payload, $key, $options = []) { return __('notification.'.$payload->data->table_name.'.'.enum('cruds.inverse.'.$payload->data->crud_id.'.singular_name').'.'.$key, $options); } @@ -49,24 +51,25 @@ class NotificationHelper * @param $users * @param $notif */ - public function sendNotifications($users, $notif) { -// switch ($level) { -// case "emergency": -//// Notification::send($users, new SmsNotification($notif)); -// case "critical": -// Notification::send($users, new MailNotification($notif)); -// case "high": -// Notification::send($users, new DBNotification($notif)); -// case "medium": -// Notification::send($users, new FcmNotification($notif)); -// case "low": -//// Notification::send($users, new SocketNotification($notif)); -// default: -//// Notification::send($users, new SocketNotification($notif)); -// } - Notification::send($users, new MailNotification($notif)); - Notification::send($users, new DBNotification($notif)); - Notification::send($users, new FcmNotification($notif)); + public function sendNotifications($users, $level = null) { + switch ($level) { + case "emergency": +// Notification::send($users, new SmsNotification($notif)); + case "critical": + Notification::send($users, new MailNotification($notif)); + case "high": + Notification::send($users, new DBNotification($notif)); + case "medium": + Notification::send($users, new FcmNotification($notif)); + case "low": +// Notification::send($users, new SocketNotification($notif)); + default: +// Notification::send($users, new SocketNotification($notif)); + } + +// Notification::send($users, new MailNotification($this->notif)); +// Notification::send($users, new DBNotification($this->notif)); +// Notification::send($users, new FcmNotification($this->notif)); } }