diff --git a/app/Bus/Commands/Schedule/CreateScheduleCommand.php b/app/Bus/Commands/Schedule/CreateScheduleCommand.php index ebeec0d8..ffaee9d7 100644 --- a/app/Bus/Commands/Schedule/CreateScheduleCommand.php +++ b/app/Bus/Commands/Schedule/CreateScheduleCommand.php @@ -60,6 +60,13 @@ final class CreateScheduleCommand */ public $components; + /** + * Whether to notify that the incident was reported. + * + * @var bool + */ + public $notify; + /** * The validation rules. * @@ -72,6 +79,7 @@ final class CreateScheduleCommand 'scheduled_at' => 'required|string', 'completed_at' => 'nullable|string', 'components' => 'nullable|array', + 'notify' => 'nullable|bool' ]; /** @@ -83,10 +91,11 @@ final class CreateScheduleCommand * @param string $scheduled_at * @param string $completed_at * @param array $components + * @param notify $notify * * @return void */ - public function __construct($name, $message, $status, $scheduled_at, $completed_at, array $components = []) + public function __construct($name, $message, $status, $scheduled_at, $completed_at, array $components = [], $notify) { $this->name = $name; $this->message = $message; @@ -94,5 +103,6 @@ final class CreateScheduleCommand $this->scheduled_at = $scheduled_at; $this->completed_at = $completed_at; $this->components = $components; + $this->notify = $notify; } } diff --git a/app/Bus/Events/Schedule/ScheduleWasCreatedEvent.php b/app/Bus/Events/Schedule/ScheduleWasCreatedEvent.php index 1e1ecb4e..d16612c0 100644 --- a/app/Bus/Events/Schedule/ScheduleWasCreatedEvent.php +++ b/app/Bus/Events/Schedule/ScheduleWasCreatedEvent.php @@ -36,18 +36,27 @@ final class ScheduleWasCreatedEvent implements ActionInterface, ScheduleEventInt */ public $schedule; + /** + * Whether to notify that the incident was reported. + * + * @var bool + */ + public $notify; + /** * Create a new schedule was created event instance. * * @param \CachetHQ\Cachet\Models\User $user * @param \CachetHQ\Cachet\Models\Schedule $schedule + * @param bool notify * * @return void */ - public function __construct(User $user, Schedule $schedule) + public function __construct(User $user, Schedule $schedule, $notify = false) { $this->user = $user; $this->schedule = $schedule; + $this->notify = $notify; } /** diff --git a/app/Bus/Handlers/Commands/Schedule/CreateScheduleCommandHandler.php b/app/Bus/Handlers/Commands/Schedule/CreateScheduleCommandHandler.php index 23de4933..9069eadb 100644 --- a/app/Bus/Handlers/Commands/Schedule/CreateScheduleCommandHandler.php +++ b/app/Bus/Handlers/Commands/Schedule/CreateScheduleCommandHandler.php @@ -66,8 +66,7 @@ class CreateScheduleCommandHandler { try { $schedule = Schedule::create($this->filter($command)); - - event(new ScheduleWasCreatedEvent($this->auth->user(), $schedule)); + event(new ScheduleWasCreatedEvent($this->auth->user(), $schedule, (bool) $command->notify)); } catch (InvalidArgumentException $e) { throw new ValidationException(new MessageBag([$e->getMessage()])); } @@ -96,6 +95,7 @@ class CreateScheduleCommandHandler 'status' => $command->status, 'scheduled_at' => $scheduledAt, 'completed_at' => $completedAt, + 'notify' => $command->notify, ]; $availableParams = array_filter($params, function ($val) { diff --git a/app/Bus/Handlers/Events/Schedule/SendScheduleEmailNotificationHandler.php b/app/Bus/Handlers/Events/Schedule/SendScheduleEmailNotificationHandler.php index 11e6b377..84e9db31 100644 --- a/app/Bus/Handlers/Events/Schedule/SendScheduleEmailNotificationHandler.php +++ b/app/Bus/Handlers/Events/Schedule/SendScheduleEmailNotificationHandler.php @@ -51,6 +51,9 @@ class SendScheduleEmailNotificationHandler public function handle(ScheduleEventInterface $event) { $schedule = $event->schedule; + if (!$event->notify) { + return false; + } // First notify all global subscribers. $globalSubscribers = $this->subscriber->isVerified()->isGlobal()->get()->each(function ($subscriber) use ($schedule) { diff --git a/app/Http/Controllers/Dashboard/ScheduleController.php b/app/Http/Controllers/Dashboard/ScheduleController.php index ceb369bc..6f32768f 100644 --- a/app/Http/Controllers/Dashboard/ScheduleController.php +++ b/app/Http/Controllers/Dashboard/ScheduleController.php @@ -15,6 +15,7 @@ use AltThree\Validator\ValidationException; use CachetHQ\Cachet\Bus\Commands\Schedule\CreateScheduleCommand; use CachetHQ\Cachet\Bus\Commands\Schedule\DeleteScheduleCommand; use CachetHQ\Cachet\Bus\Commands\Schedule\UpdateScheduleCommand; +use CachetHQ\Cachet\Integrations\Contracts\System; use CachetHQ\Cachet\Models\IncidentTemplate; use CachetHQ\Cachet\Models\Schedule; use GrahamCampbell\Binput\Facades\Binput; @@ -35,13 +36,22 @@ class ScheduleController extends Controller */ protected $subMenu = []; + /** + * The system instance. + * + * @var \CachetHQ\Cachet\Integrations\Contracts\System + */ + protected $system; + + /** * Creates a new schedule controller instance. * * @return void */ - public function __construct() + public function __construct(System $system) { + $this->system = $system; View::share('subTitle', trans('dashboard.schedule.title')); } @@ -70,7 +80,8 @@ class ScheduleController extends Controller return View::make('dashboard.maintenance.add') ->withPageTitle(trans('dashboard.schedule.add.title').' - '.trans('dashboard.dashboard')) - ->withIncidentTemplates($incidentTemplates); + ->withIncidentTemplates($incidentTemplates) + ->withNotificationsEnabled($this->system->canNotifySubscribers()); } /** @@ -87,7 +98,8 @@ class ScheduleController extends Controller Binput::get('status', Schedule::UPCOMING), Binput::get('scheduled_at'), Binput::get('completed_at'), - Binput::get('components', []) + Binput::get('components', []), + Binput::get('notify', false) )); } catch (ValidationException $e) { return cachet_redirect('dashboard.schedule.create') diff --git a/resources/views/dashboard/maintenance/add.blade.php b/resources/views/dashboard/maintenance/add.blade.php index 99a64bba..07c5d6fa 100644 --- a/resources/views/dashboard/maintenance/add.blade.php +++ b/resources/views/dashboard/maintenance/add.blade.php @@ -57,7 +57,15 @@ - + @if($notificationsEnabled) + +