*/ class UpdateSubscriberSubscriptionCommandHandler { /** * Handle the subscribe subscriber command. * * @param \CachetHQ\Cachet\Bus\Commands\Subscriber\UpdateSubscriberSubscriptionCommand $command * * @return \CachetHQ\Cachet\Models\Subscriber */ public function handle(UpdateSubscriberSubscriptionCommand $command) { $subscriber = $command->subscriber; $subscriptions = $command->subscriptions ?: []; $components = Component::all(); $updateSubscriptions = $components->filter(function ($item) use ($subscriptions) { return in_array($item->id, $subscriptions); }); $subscriber->global = ($updateSubscriptions->count() === $components->count()); $subscriber->subscriptions()->delete(); if (!$updateSubscriptions->isEmpty()) { $updateSubscriptions->each(function ($subscription) use ($subscriber) { Subscription::firstOrCreate([ 'subscriber_id' => $subscriber->id, 'component_id' => $subscription->id, ]); }); } $subscriber->save(); event(new SubscriberHasUpdatedSubscriptionsEvent($subscriber)); return $subscriber; } }