Add subscriber to WP user subject transformer

[MAILPOET-5168]
This commit is contained in:
Jan Jakes
2023-05-11 15:17:07 +02:00
committed by Aschepikov
parent b132405f42
commit 88b23f6a59
3 changed files with 48 additions and 0 deletions

View File

@ -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(

View File

@ -0,0 +1,40 @@
<?php declare(strict_types = 1);
namespace MailPoet\Automation\Integrations\MailPoet\SubjectTransformers;
use MailPoet\Automation\Engine\Data\Subject;
use MailPoet\Automation\Engine\Integration\SubjectTransformer;
use MailPoet\Automation\Integrations\MailPoet\Subjects\SubscriberSubject;
use MailPoet\Automation\Integrations\WordPress\Subjects\UserSubject;
use MailPoet\Subscribers\SubscribersRepository;
class SubscriberSubjectToWordPressUserSubjectTransformer implements SubjectTransformer {
/** @var SubscribersRepository */
private $subscribersRepository;
public function __construct(
SubscribersRepository $subscribersRepository
) {
$this->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()]);
}
}

View File

@ -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);