Browse Source

complete notification helper class and use it in listeners

pull/5/head
mahdihty 4 years ago
parent
commit
fc7ca2a6d0
  1. 66
      app/Listeners/BusinessUserCreateNotif.php
  2. 64
      app/Listeners/ProjectUserCreateNotif.php
  3. 68
      app/Listeners/TaskCreateNotif.php
  4. 92
      app/Listeners/TaskUpdateNotif.php
  5. 1
      app/Models/User.php
  6. 43
      app/Utilities/HelperClass/NotificationHelper.php

66
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');
}
}

64
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');
}
}

68
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');
}
}

92
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');
}
}

1
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;

43
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));
}
}
Loading…
Cancel
Save