diff --git a/mailpoet/lib/Automation/Integrations/MailPoet/MailPoetIntegration.php b/mailpoet/lib/Automation/Integrations/MailPoet/MailPoetIntegration.php index 60100c9d39..438627738e 100644 --- a/mailpoet/lib/Automation/Integrations/MailPoet/MailPoetIntegration.php +++ b/mailpoet/lib/Automation/Integrations/MailPoet/MailPoetIntegration.php @@ -11,6 +11,7 @@ use MailPoet\Automation\Integrations\MailPoet\Subjects\SegmentSubject; use MailPoet\Automation\Integrations\MailPoet\Subjects\SubscriberSubject; use MailPoet\Automation\Integrations\MailPoet\SubjectTransformers\OrderSubjectToSegmentSubjectTransformer; use MailPoet\Automation\Integrations\MailPoet\SubjectTransformers\OrderSubjectToSubscriberSubjectTransformer; +use MailPoet\Automation\Integrations\MailPoet\SubjectTransformers\SubscriberSubjectToWordPressUserSubjectTransformer; use MailPoet\Automation\Integrations\MailPoet\Triggers\SomeoneSubscribesTrigger; use MailPoet\Automation\Integrations\MailPoet\Triggers\UserRegistrationTrigger; @@ -45,12 +46,16 @@ class MailPoetIntegration implements Integration { /** @var OrderSubjectToSegmentSubjectTransformer */ private $orderToSegmentTransformer; + /** @var SubscriberSubjectToWordPressUserSubjectTransformer */ + private $subscriberToWordPressUserTransformer; + public function __construct( ContextFactory $contextFactory, SegmentSubject $segmentSubject, SubscriberSubject $subscriberSubject, OrderSubjectToSubscriberSubjectTransformer $orderToSubscriberTransformer, OrderSubjectToSegmentSubjectTransformer $orderToSegmentTransformer, + SubscriberSubjectToWordPressUserSubjectTransformer $subscriberToWordPressUserTransformer, SomeoneSubscribesTrigger $someoneSubscribesTrigger, UserRegistrationTrigger $userRegistrationTrigger, SendEmailAction $sendEmailAction, @@ -62,6 +67,7 @@ class MailPoetIntegration implements Integration { $this->subscriberSubject = $subscriberSubject; $this->orderToSubscriberTransformer = $orderToSubscriberTransformer; $this->orderToSegmentTransformer = $orderToSegmentTransformer; + $this->subscriberToWordPressUserTransformer = $subscriberToWordPressUserTransformer; $this->someoneSubscribesTrigger = $someoneSubscribesTrigger; $this->userRegistrationTrigger = $userRegistrationTrigger; $this->sendEmailAction = $sendEmailAction; @@ -81,6 +87,7 @@ class MailPoetIntegration implements Integration { $registry->addAction($this->sendEmailAction); $registry->addSubjectTransformer($this->orderToSubscriberTransformer); $registry->addSubjectTransformer($this->orderToSegmentTransformer); + $registry->addSubjectTransformer($this->subscriberToWordPressUserTransformer); // sync step args (subject, preheader, etc.) to email settings $registry->onBeforeAutomationStepSave( diff --git a/mailpoet/lib/Automation/Integrations/MailPoet/SubjectTransformers/SubscriberSubjectToWordPressUserSubjectTransformer.php b/mailpoet/lib/Automation/Integrations/MailPoet/SubjectTransformers/SubscriberSubjectToWordPressUserSubjectTransformer.php new file mode 100644 index 0000000000..1d3f961233 --- /dev/null +++ b/mailpoet/lib/Automation/Integrations/MailPoet/SubjectTransformers/SubscriberSubjectToWordPressUserSubjectTransformer.php @@ -0,0 +1,40 @@ +subscribersRepository = $subscribersRepository; + } + + public function accepts(): string { + return SubscriberSubject::KEY; + } + + public function returns(): string { + return UserSubject::KEY; + } + + public function transform(Subject $data): Subject { + if ($this->accepts() !== $data->getKey()) { + throw new \InvalidArgumentException('Invalid subject type'); + } + + $subscriber = $this->subscribersRepository->findOneById((int)$data->getArgs()['subscriber_id']); + if (!$subscriber) { + throw new \InvalidArgumentException('Subscriber not found'); + } + return new Subject(UserSubject::KEY, ['user_id' => $subscriber->getWpUserId()]); + } +} diff --git a/mailpoet/lib/DI/ContainerConfigurator.php b/mailpoet/lib/DI/ContainerConfigurator.php index 8f82471a9d..4315c45084 100644 --- a/mailpoet/lib/DI/ContainerConfigurator.php +++ b/mailpoet/lib/DI/ContainerConfigurator.php @@ -176,6 +176,7 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\Automation\Integrations\MailPoet\Hooks\CreateAutomationRunHook::class)->setPublic(true); $container->autowire(\MailPoet\Automation\Integrations\MailPoet\SubjectTransformers\OrderSubjectToSubscriberSubjectTransformer::class)->setPublic(true)->setShared(false); $container->autowire(\MailPoet\Automation\Integrations\MailPoet\SubjectTransformers\OrderSubjectToSegmentSubjectTransformer::class)->setPublic(true)->setShared(false); + $container->autowire(\MailPoet\Automation\Integrations\MailPoet\SubjectTransformers\SubscriberSubjectToWordPressUserSubjectTransformer::class)->setPublic(true)->setShared(false); // Automation - WooCommerce integration $container->autowire(\MailPoet\Automation\Integrations\WooCommerce\ContextFactory::class)->setPublic(true);