wp = $wp; $this->segmentsRepository = $segmentsRepository; } public function getKey(): string { return 'mailpoet:someone-subscribes'; } public function getName(): string { // translators: automation trigger title return __('Someone subscribes', 'mailpoet'); } public function getArgsSchema(): ObjectSchema { return Builder::object([ 'segment_ids' => Builder::array(Builder::number()), ]); } public function getSubjectKeys(): array { return [ SubscriberSubject::KEY, SegmentSubject::KEY, ]; } public function validate(StepValidationArgs $args): void { } public function registerHooks(): void { $this->wp->addAction('mailpoet_segment_subscribed', [$this, 'handleSubscription'], 10, 2); } public function handleSubscription(SubscriberSegmentEntity $subscriberSegment): void { $segment = $subscriberSegment->getSegment(); $subscriber = $subscriberSegment->getSubscriber(); if (!$segment || !$subscriber) { throw new InvalidStateException(); } $this->wp->doAction(Hooks::TRIGGER, $this, [ new Subject(SegmentSubject::KEY, ['segment_id' => $segment->getId()]), new Subject(SubscriberSubject::KEY, ['subscriber_id' => $subscriber->getId()]), ]); } public function isTriggeredBy(StepRunArgs $args): bool { $segmentId = $args->getSinglePayloadByClass(SegmentPayload::class)->getId(); $segment = $this->segmentsRepository->findOneById($segmentId); if (!$segment || $segment->getType() !== SegmentEntity::TYPE_DEFAULT) { return false; } // Triggers when no segment IDs defined (= any segment) or the current segment paylo. $triggerArgs = $args->getStep()->getArgs(); $segmentIds = $triggerArgs['segment_ids'] ?? []; return !is_array($segmentIds) || !$segmentIds || in_array($segmentId, $segmentIds, true); } }