subscriber = $subscriber; } /** * Handle the event. * * @param \CachetHQ\Cachet\Bus\Events\Component\ComponentStatusWasUpdatedEvent $event * * @return void */ public function handle(ComponentStatusWasUpdatedEvent $event) { $component = $event->component; // Don't email anything if the status hasn't changed. if ($event->original_status === $event->new_status) { return; } // First notify all global subscribers. $globalSubscribers = $this->subscriber->isVerified()->isGlobal()->get(); $globalSubscribers->map(function ($subscriber) use ($component, $event) { $subscriber->notify(new ComponentStatusChangedNotification($component, $event->new_status)); }); $notified = $globalSubscribers->pluck('id')->all(); // Notify the remaining component specific subscribers. $componentSubscribers = $this->subscriber ->isVerified() ->forComponent($component->id) ->get() ->reject(function ($subscriber) use ($notified) { return in_array($subscriber->id, $notified); }); $componentSubscribers->map(function ($subscriber) use ($component, $event) { $subscriber->notify(new ComponentStatusChangedNotification($component, $event->new_status)); }); } }