*/ class NewsletterLinkSubject implements Subject { const KEY = 'mailpoet:email-link'; /** @var NewsletterLinkFieldsFactory */ private $emailLinkFieldsFactory; /** @var NewsletterLinkRepository */ private $newsletterLinkRepository; public function __construct( NewsletterLinkFieldsFactory $emailLinkFieldsFactory, NewsletterLinkRepository $newsletterLinkRepository ) { $this->emailLinkFieldsFactory = $emailLinkFieldsFactory; $this->newsletterLinkRepository = $newsletterLinkRepository; } public function getKey(): string { return self::KEY; } public function getName(): string { // translators: automation subject (entity entering automation) title return __('Email link', 'mailpoet'); } public function getArgsSchema(): ObjectSchema { return Builder::object([ 'link_id' => Builder::integer()->minimum(1)->required(), ]); } public function getFields(): array { return $this->emailLinkFieldsFactory->getFields(); } public function getPayload(SubjectData $subjectData): Payload { $linkId = $subjectData->getArgs()['link_id']; $linkEntity = $this->newsletterLinkRepository->findOneById($linkId); if (!$linkEntity) { throw NotFoundException::create()->withMessage(sprintf("Email link with ID '%d' not found", $linkId)); } return new NewsletterLinkPayload($linkEntity); } }