Make notifications cancellable
This commit makes certain notifications cancellable. This enables notifications to be sent conditionally based on the user's choice.
This commit is contained in:
parent
27b1f3170b
commit
17fb0e236f
|
@ -2,6 +2,8 @@
|
|||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Facades\Options;
|
||||
use App\Traits\Cancellable;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
@ -11,7 +13,7 @@ use App\Application;
|
|||
|
||||
class ApplicationApproved extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
use Queueable, Cancellable;
|
||||
|
||||
public $application;
|
||||
|
||||
|
@ -24,15 +26,15 @@ class ApplicationApproved extends Notification implements ShouldQueue
|
|||
{
|
||||
$this->application = $application;
|
||||
}
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
|
||||
public function channels()
|
||||
{
|
||||
return ['mail', 'slack'];
|
||||
return $this->chooseChannelsViaOptions();
|
||||
}
|
||||
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return Options::getOption('notify_applicant_approved') !== 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -6,10 +6,12 @@ use Illuminate\Bus\Queueable;
|
|||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
use App\Traits\Cancellable;
|
||||
use App\Facades\Options;
|
||||
|
||||
class ApplicationMoved extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
use Queueable, Cancellable;
|
||||
|
||||
/**
|
||||
* Create a new notification instance.
|
||||
|
@ -21,15 +23,9 @@ class ApplicationMoved extends Notification implements ShouldQueue
|
|||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return ['mail'];
|
||||
return Options::getOption('notify_application_status_change') !== 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -10,9 +10,12 @@ use Illuminate\Notifications\Notification;
|
|||
use App\Application;
|
||||
use App\Vacancy;
|
||||
|
||||
use App\Traits\Cancellable;
|
||||
use App\Facades\Options;
|
||||
|
||||
class NewApplicant extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
use Queueable, Cancellable;
|
||||
|
||||
|
||||
protected $application;
|
||||
|
@ -31,17 +34,21 @@ class NewApplicant extends Notification implements ShouldQueue
|
|||
$this->vacancy = $vacancy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
public function channels()
|
||||
{
|
||||
if (Options::getOption('enable_slack_notifications') == 1)
|
||||
{
|
||||
return ['slack'];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return Options::getOption('notify_new_user') !== 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mail representation of the notification.
|
||||
*
|
||||
|
|
|
@ -8,10 +8,12 @@ use Illuminate\Notifications\Messages\MailMessage;
|
|||
use Illuminate\Notifications\Notification;
|
||||
use App\Comment;
|
||||
use App\Application;
|
||||
use App\Traits\Cancellable;
|
||||
use App\Facades\Options;
|
||||
|
||||
class NewComment extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
use Queueable, Cancellable;
|
||||
|
||||
|
||||
protected $application;
|
||||
|
@ -26,15 +28,9 @@ class NewComment extends Notification implements ShouldQueue
|
|||
$this->application = $application;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return ['mail'];
|
||||
return Options::getOption('notify_application_comment') !== 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -10,10 +10,12 @@ use Illuminate\Notifications\Messages\SlackMessage;
|
|||
|
||||
use App\User;
|
||||
use App\Facades\UUID;
|
||||
use App\Traits\Cancellable;
|
||||
use App\Facades\Options;
|
||||
|
||||
class NewUser extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
use Queueable, Cancellable;
|
||||
|
||||
public $user;
|
||||
|
||||
|
@ -27,18 +29,14 @@ class NewUser extends Notification implements ShouldQueue
|
|||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
public function channels($notifiable)
|
||||
{
|
||||
return ($notifiable->isStaffMember())
|
||||
? ['slack', 'mail']
|
||||
: ['mail'];
|
||||
return $this->chooseChannelsViaOptions();
|
||||
}
|
||||
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return Options::getOption('notify_new_user') !== 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -9,10 +9,12 @@ use Illuminate\Notifications\Notification;
|
|||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
use App\Vacancy;
|
||||
use App\Facades\Options;
|
||||
use App\Traits\Cancellable;
|
||||
|
||||
class VacancyClosed extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
use Queueable, SerializesModels, Cancellable;
|
||||
|
||||
protected $vacancy;
|
||||
|
||||
|
@ -26,15 +28,9 @@ class VacancyClosed extends Notification implements ShouldQueue
|
|||
$this->vacancy = $vacancy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return ['mail'];
|
||||
return Options::getOption('notify_vacancystatus_change') !== 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Traits;
|
||||
|
||||
|
||||
use App\Facades\Options;
|
||||
|
||||
trait Cancellable
|
||||
{
|
||||
|
||||
public function chooseChannelsViaOptions()
|
||||
{
|
||||
$channels = [];
|
||||
|
||||
if (Options::getOption('enable_slack_notifications') == 1)
|
||||
{
|
||||
array_push($channels, 'slack');
|
||||
}
|
||||
elseif(Options::getOption('enable_email_notifications') == 1)
|
||||
{
|
||||
array_push($channels, 'email');
|
||||
}
|
||||
|
||||
return $channels;
|
||||
}
|
||||
|
||||
public function channels()
|
||||
{
|
||||
return ['mail'];
|
||||
}
|
||||
|
||||
public function via($notifiable)
|
||||
{
|
||||
if ($this->optOut($notifiable))
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
return $this->channels();
|
||||
}
|
||||
|
||||
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -12,12 +12,12 @@ class DefaultOptionsSeeder extends Seeder
|
|||
*/
|
||||
public function run()
|
||||
{
|
||||
Options::setOption('notify_new_application_email', true, 'Notify when a new application comes through');
|
||||
Options::setOption('notify_application_comment', false, 'Notify when someone comments on an application');
|
||||
Options::setOption('notify_new_user', true, 'Notify when someone signs up');
|
||||
Options::setOption('notify_application_status_change', true, 'Notify when an application changes status');
|
||||
Options::setOption('notify_applicant_approved', true, 'Notify when an applicant is approved');
|
||||
Options::setOption('notify_vacancystatus_change', false, 'Notify when a vacancy\'s status changes');
|
||||
Options::setOption('notify_new_application_email', true, 'Notify when a new application comes through'); // done
|
||||
Options::setOption('notify_application_comment', false, 'Notify when someone comments on an application'); // done
|
||||
Options::setOption('notify_new_user', true, 'Notify when someone signs up'); // done
|
||||
Options::setOption('notify_application_status_change', true, 'Notify when an application changes status'); // done
|
||||
Options::setOption('notify_applicant_approved', true, 'Notify when an applicant is approved'); // done
|
||||
Options::setOption('notify_vacancystatus_change', false, 'Notify when a vacancy\'s status changes'); // done
|
||||
|
||||
|
||||
Options::setOption('enable_slack_notifications', true, 'Enable slack notifications');
|
||||
|
|
Loading…
Reference in New Issue