diff --git a/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php b/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php index 67f830b74d..06dd9231cc 100644 --- a/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php +++ b/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php @@ -11,12 +11,15 @@ use MailPoet\Mailer\MailerLog; use MailPoet\Models\Newsletter as NewsletterModel; use MailPoet\Models\NewsletterSegment as NewsletterSegmentModel; use MailPoet\Models\SendingQueue as SendingQueueModel; +use MailPoet\Models\Subscriber as SubscriberModel; use MailPoet\Newsletter\Links\Links as NewsletterLinks; use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\Renderer\PostProcess\OpenTracking; use MailPoet\Newsletter\Renderer\Renderer; +use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Settings\TrackingConfig; use MailPoet\Statistics\GATracking; +use MailPoet\Subscribers\SubscribersRepository; use MailPoet\Util\Helpers; use MailPoet\WP\Emoji; use MailPoet\WP\Functions as WPFunctions; @@ -52,6 +55,12 @@ class Newsletter { /** @var NewsletterLinks */ private $newsletterLinks; + /** @var SendingQueuesRepository */ + private $sendingQueuesRepository; + + /** @var SubscribersRepository */ + private $subscribersRepository; + public function __construct( WPFunctions $wp = null, PostsTask $postsTask = null, @@ -81,6 +90,8 @@ class Newsletter { $this->newslettersRepository = ContainerWrapper::getInstance()->get(NewslettersRepository::class); $this->linksTask = ContainerWrapper::getInstance()->get(LinksTask::class); $this->newsletterLinks = ContainerWrapper::getInstance()->get(NewsletterLinks::class); + $this->sendingQueuesRepository = ContainerWrapper::getInstance()->get(SendingQueuesRepository::class); + $this->subscribersRepository = ContainerWrapper::getInstance()->get(SubscribersRepository::class); } public function getNewsletterFromQueue($queue) { @@ -163,13 +174,20 @@ class Newsletter { } // extract and save newsletter posts $this->postsTask->extractAndSave($renderedNewsletter, $newsletterEntity); + + if ($sendingTask->queue() instanceof SendingQueueModel) { + $sendingQueueEntity = $this->sendingQueuesRepository->findOneById($sendingTask->queue()->id); + } else { + $sendingQueueEntity = null; + } + // update queue with the rendered and pre-processed newsletter $sendingTask->newsletterRenderedSubject = ShortcodesTask::process( $newsletter->subject, $renderedNewsletter['html'], - $newsletter, + $newsletterEntity, null, - $sendingTask + $sendingQueueEntity ); // if the rendered subject is empty, use a default subject, // having no subject in a newsletter is considered spammy @@ -206,12 +224,31 @@ class Newsletter { $renderedNewsletter['text'], ] ); + + if ($newsletter instanceof NewsletterModel) { + $newsletterEntity = $this->newslettersRepository->findOneById($newsletter->id); + } else { + $newsletterEntity = null; + } + + if ($subscriber instanceof SubscriberModel) { + $subscriberEntity = $this->subscribersRepository->findOneById($subscriber->id); + } else { + $subscriberEntity = null; + } + + if ($queue->queue() instanceof SendingQueueModel) { + $sendingQueueEntity = $this->sendingQueuesRepository->findOneById($queue->queue()->id); + } else { + $sendingQueueEntity = null; + } + $preparedNewsletter = ShortcodesTask::process( $preparedNewsletter, null, - $newsletter, - $subscriber, - $queue + $newsletterEntity, + $subscriberEntity, + $sendingQueueEntity ); if ($this->trackingEnabled) { $preparedNewsletter = $this->newsletterLinks->replaceSubscriberData( diff --git a/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Shortcodes.php b/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Shortcodes.php index 199392fd5f..f1830d1d28 100644 --- a/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Shortcodes.php +++ b/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Shortcodes.php @@ -6,53 +6,32 @@ use MailPoet\DI\ContainerWrapper; use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\SendingQueueEntity; use MailPoet\Entities\SubscriberEntity; -use MailPoet\Models\Newsletter; -use MailPoet\Models\SendingQueue; -use MailPoet\Models\Subscriber; -use MailPoet\Newsletter\NewslettersRepository; -use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Newsletter\Shortcodes\Shortcodes as NewsletterShortcodes; -use MailPoet\Subscribers\SubscribersRepository; -use MailPoet\Tasks\Sending; -use stdClass; class Shortcodes { /** * @param string $content * @param string|null $contentSource - * @param stdClass|Newsletter|null $newsletter - * @param Subscriber|null $subscriber - * @param Sending|SendingQueue|null $queue + * @param NewsletterEntity|null $newsletter + * @param SubscriberEntity|null $subscriber + * @param SendingQueueEntity|null $queue */ - public static function process($content, $contentSource = null, $newsletter = null, $subscriber = null, $queue = null) { + public static function process($content, $contentSource = null, NewsletterEntity $newsletter = null, SubscriberEntity $subscriber = null, SendingQueueEntity $queue = null) { /** @var NewsletterShortcodes $shortcodes */ $shortcodes = ContainerWrapper::getInstance()->get(NewsletterShortcodes::class); - /** @var SendingQueuesRepository $sendingQueueRepository */ - $sendingQueueRepository = ContainerWrapper::getInstance()->get(SendingQueuesRepository::class); - /** @var NewslettersRepository $newsletterRepository */ - $newsletterRepository = ContainerWrapper::getInstance()->get(NewslettersRepository::class); - /** @var SubscribersRepository $subscribersRepository */ - $subscribersRepository = ContainerWrapper::getInstance()->get(SubscribersRepository::class); - if (($queue instanceof Sending || $queue instanceof SendingQueue) && $queue->id) { - $queue = $sendingQueueRepository->findOneById($queue->id); - } if ($queue instanceof SendingQueueEntity) { $shortcodes->setQueue($queue); } else { $shortcodes->setQueue(null); } - if (($newsletter instanceof Newsletter || $newsletter instanceof stdClass) && $newsletter->id) { - $newsletter = $newsletterRepository->findOneById($newsletter->id); - } + if ($newsletter instanceof NewsletterEntity) { $shortcodes->setNewsletter($newsletter); } else { $shortcodes->setNewsletter(null); } - if ($subscriber instanceof Subscriber && $subscriber->id) { - $subscriber = $subscribersRepository->findOneById($subscriber->id); - } + if ($subscriber instanceof SubscriberEntity) { $shortcodes->setSubscriber($subscriber); } else {