wp = $wp; $this->subscribersRepository = $subscribersRepository; } public function getKey(): string { return self::KEY; } public function getName(): string { // translators: automation trigger title return __('WordPress user registers', 'mailpoet'); } public function getArgsSchema(): ObjectSchema { return Builder::object([ 'roles' => Builder::array(Builder::string()), ]); } public function getSubjectKeys(): array { return [ SegmentSubject::KEY, SubscriberSubject::KEY, ]; } public function validate(StepValidationArgs $args): void { } public function registerHooks(): void { $this->wp->addAction('mailpoet_segment_subscribed', [$this, 'handleSubscription']); } 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 { $segmentPayload = $args->getSinglePayloadByClass(SegmentPayload::class); if ($segmentPayload->getType() !== SegmentEntity::TYPE_WP_USERS) { return false; } $subscriberPayload = $args->getSinglePayloadByClass(SubscriberPayload::class); $this->subscribersRepository->refresh($subscriberPayload->getSubscriber()); if (!$subscriberPayload->isWPUser()) { return false; } $user = $this->wp->getUserBy('id', (int)$subscriberPayload->getWpUserId()); if (!$user) { return false; } $triggerArgs = $args->getStep()->getArgs(); $roles = $triggerArgs['roles'] ?? []; return !is_array($roles) || !$roles || count(array_intersect($user->roles, $roles)) > 0; } }