); } public function handle(NewsletterLinkEntity $link, SubscriberEntity $subscriber, bool $isPreview): void { if ($isPreview) { return; } $this->wp->doAction( Hooks::TRIGGER, $this, [ new Subject(SubscriberSubject::KEY, ['subscriber_id' => $subscriber->getId()]), new Subject(NewsletterLinkSubject::KEY, ['link_id' => $link->getId()]), ] ); } public function isTriggeredBy(StepRunArgs $args): bool { $operator = $args->getStep()->getArgs()['operator']; $linkIds = $args->getStep()->getArgs()['link_ids']; $newsletterId = $args->getStep()->getArgs()['newsletter_id']; $subscriberPayload = $args->getSinglePayloadByClass(SubscriberPayload::class); $linkPayload = $args->getSinglePayloadByClass(NewsletterLinkPayload::class); if ( !$linkPayload->getLink()->getNewsletter() || $newsletterId !== $linkPayload->getLink()->getNewsletter()->getId() ) { return false; } $linkId = $linkPayload->getLink()->getId(); if ($operator === 'any') { return in_array($linkId, $linkIds); } elseif ($operator === 'none') { return !in_array($linkId, $linkIds); } $allLinkClicks = $this->statisticsClicksRepository->findBy([ 'subscriber' => $subscriberPayload->getSubscriber(), 'link' => $linkIds, ]); $clickedLinkIds = array_filter(array_map( function(StatisticsClickEntity $link) { return $link->getLink() ? $link->getLink()->getId() : null; }, $allLinkClicks )); return count(array_diff($linkIds, $clickedLinkIds)) === 0; } }