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;
|
namespace App\Notifications;
|
||||||
|
|
||||||
|
use App\Facades\Options;
|
||||||
|
use App\Traits\Cancellable;
|
||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
use Illuminate\Notifications\Messages\MailMessage;
|
use Illuminate\Notifications\Messages\MailMessage;
|
||||||
|
@ -11,7 +13,7 @@ use App\Application;
|
||||||
|
|
||||||
class ApplicationApproved extends Notification implements ShouldQueue
|
class ApplicationApproved extends Notification implements ShouldQueue
|
||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable, Cancellable;
|
||||||
|
|
||||||
public $application;
|
public $application;
|
||||||
|
|
||||||
|
@ -24,15 +26,15 @@ class ApplicationApproved extends Notification implements ShouldQueue
|
||||||
{
|
{
|
||||||
$this->application = $application;
|
$this->application = $application;
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Get the notification's delivery channels.
|
public function channels()
|
||||||
*
|
|
||||||
* @param mixed $notifiable
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function via($notifiable)
|
|
||||||
{
|
{
|
||||||
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\Contracts\Queue\ShouldQueue;
|
||||||
use Illuminate\Notifications\Messages\MailMessage;
|
use Illuminate\Notifications\Messages\MailMessage;
|
||||||
use Illuminate\Notifications\Notification;
|
use Illuminate\Notifications\Notification;
|
||||||
|
use App\Traits\Cancellable;
|
||||||
|
use App\Facades\Options;
|
||||||
|
|
||||||
class ApplicationMoved extends Notification implements ShouldQueue
|
class ApplicationMoved extends Notification implements ShouldQueue
|
||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable, Cancellable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new notification instance.
|
* Create a new notification instance.
|
||||||
|
@ -21,15 +23,9 @@ class ApplicationMoved extends Notification implements ShouldQueue
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function optOut($notifiable)
|
||||||
* Get the notification's delivery channels.
|
|
||||||
*
|
|
||||||
* @param mixed $notifiable
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function via($notifiable)
|
|
||||||
{
|
{
|
||||||
return ['mail'];
|
return Options::getOption('notify_application_status_change') !== 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -10,9 +10,12 @@ use Illuminate\Notifications\Notification;
|
||||||
use App\Application;
|
use App\Application;
|
||||||
use App\Vacancy;
|
use App\Vacancy;
|
||||||
|
|
||||||
|
use App\Traits\Cancellable;
|
||||||
|
use App\Facades\Options;
|
||||||
|
|
||||||
class NewApplicant extends Notification implements ShouldQueue
|
class NewApplicant extends Notification implements ShouldQueue
|
||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable, Cancellable;
|
||||||
|
|
||||||
|
|
||||||
protected $application;
|
protected $application;
|
||||||
|
@ -31,15 +34,19 @@ class NewApplicant extends Notification implements ShouldQueue
|
||||||
$this->vacancy = $vacancy;
|
$this->vacancy = $vacancy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function channels()
|
||||||
* Get the notification's delivery channels.
|
|
||||||
*
|
|
||||||
* @param mixed $notifiable
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function via($notifiable)
|
|
||||||
{
|
{
|
||||||
return ['slack'];
|
if (Options::getOption('enable_slack_notifications') == 1)
|
||||||
|
{
|
||||||
|
return ['slack'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function optOut($notifiable)
|
||||||
|
{
|
||||||
|
return Options::getOption('notify_new_user') !== 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -8,10 +8,12 @@ use Illuminate\Notifications\Messages\MailMessage;
|
||||||
use Illuminate\Notifications\Notification;
|
use Illuminate\Notifications\Notification;
|
||||||
use App\Comment;
|
use App\Comment;
|
||||||
use App\Application;
|
use App\Application;
|
||||||
|
use App\Traits\Cancellable;
|
||||||
|
use App\Facades\Options;
|
||||||
|
|
||||||
class NewComment extends Notification implements ShouldQueue
|
class NewComment extends Notification implements ShouldQueue
|
||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable, Cancellable;
|
||||||
|
|
||||||
|
|
||||||
protected $application;
|
protected $application;
|
||||||
|
@ -26,15 +28,9 @@ class NewComment extends Notification implements ShouldQueue
|
||||||
$this->application = $application;
|
$this->application = $application;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function optOut($notifiable)
|
||||||
* Get the notification's delivery channels.
|
|
||||||
*
|
|
||||||
* @param mixed $notifiable
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function via($notifiable)
|
|
||||||
{
|
{
|
||||||
return ['mail'];
|
return Options::getOption('notify_application_comment') !== 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -10,10 +10,12 @@ use Illuminate\Notifications\Messages\SlackMessage;
|
||||||
|
|
||||||
use App\User;
|
use App\User;
|
||||||
use App\Facades\UUID;
|
use App\Facades\UUID;
|
||||||
|
use App\Traits\Cancellable;
|
||||||
|
use App\Facades\Options;
|
||||||
|
|
||||||
class NewUser extends Notification implements ShouldQueue
|
class NewUser extends Notification implements ShouldQueue
|
||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable, Cancellable;
|
||||||
|
|
||||||
public $user;
|
public $user;
|
||||||
|
|
||||||
|
@ -27,18 +29,14 @@ class NewUser extends Notification implements ShouldQueue
|
||||||
$this->user = $user;
|
$this->user = $user;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function channels($notifiable)
|
||||||
* Get the notification's delivery channels.
|
|
||||||
*
|
|
||||||
* @param mixed $notifiable
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function via($notifiable)
|
|
||||||
{
|
{
|
||||||
return ($notifiable->isStaffMember())
|
return $this->chooseChannelsViaOptions();
|
||||||
? ['slack', 'mail']
|
}
|
||||||
: ['mail'];
|
|
||||||
|
|
||||||
|
public function optOut($notifiable)
|
||||||
|
{
|
||||||
|
return Options::getOption('notify_new_user') !== 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -9,10 +9,12 @@ use Illuminate\Notifications\Notification;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
use App\Vacancy;
|
use App\Vacancy;
|
||||||
|
use App\Facades\Options;
|
||||||
|
use App\Traits\Cancellable;
|
||||||
|
|
||||||
class VacancyClosed extends Notification implements ShouldQueue
|
class VacancyClosed extends Notification implements ShouldQueue
|
||||||
{
|
{
|
||||||
use Queueable, SerializesModels;
|
use Queueable, SerializesModels, Cancellable;
|
||||||
|
|
||||||
protected $vacancy;
|
protected $vacancy;
|
||||||
|
|
||||||
|
@ -26,15 +28,9 @@ class VacancyClosed extends Notification implements ShouldQueue
|
||||||
$this->vacancy = $vacancy;
|
$this->vacancy = $vacancy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function optOut($notifiable)
|
||||||
* Get the notification's delivery channels.
|
|
||||||
*
|
|
||||||
* @param mixed $notifiable
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function via($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()
|
public function run()
|
||||||
{
|
{
|
||||||
Options::setOption('notify_new_application_email', true, 'Notify when a new application comes through');
|
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');
|
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');
|
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');
|
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');
|
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');
|
Options::setOption('notify_vacancystatus_change', false, 'Notify when a vacancy\'s status changes'); // done
|
||||||
|
|
||||||
|
|
||||||
Options::setOption('enable_slack_notifications', true, 'Enable slack notifications');
|
Options::setOption('enable_slack_notifications', true, 'Enable slack notifications');
|
||||||
|
|
Loading…
Reference in New Issue