'; const WC_HEADING_AFTER = ' '; /** @var AbandonedCartContent */ private $abandonedCartContent; /** @var AutomatedLatestContentBlock */ private $automatedLatestContent; /** @var ContentPreprocessor */ private $wooCommerceContentPreprocessor; /*** @var CouponPreProcessor */ private $couponPreProcessor; /*** @var NewslettersRepository */ private $newslettersRepository; /*** @var LoggerFactory */ private $loggerFactory; public function __construct( AbandonedCartContent $abandonedCartContent, AutomatedLatestContentBlock $automatedLatestContent, ContentPreprocessor $wooCommerceContentPreprocessor, CouponPreProcessor $couponPreProcessor, NewslettersRepository $newslettersRepository, LoggerFactory $loggerFactory ) { $this->abandonedCartContent = $abandonedCartContent; $this->automatedLatestContent = $automatedLatestContent; $this->wooCommerceContentPreprocessor = $wooCommerceContentPreprocessor; $this->couponPreProcessor = $couponPreProcessor; $this->newslettersRepository = $newslettersRepository; $this->loggerFactory = $loggerFactory; } /** * @param array $content * @param NewsletterEntity $newsletter * @return array */ public function process(NewsletterEntity $newsletter, $content, bool $preview = false, SendingTask $sendingTask = null) { if (!array_key_exists('blocks', $content)) { return $content; } $blocks = []; $contentBlocks = $content['blocks']; $contentBlocks = $this->couponPreProcessor->processCoupons($newsletter, $contentBlocks, $preview); try { $contentBlocks = $this->couponPreProcessor->processCoupons($newsletter, $contentBlocks, $preview); } catch (NewsletterProcessingException $e) { $this->loggerFactory->getLogger(LoggerFactory::TOPIC_COUPONS)->error( $e->getMessage(), ['newsletter_id' => $newsletter->getId()] ); $newsletter->setStatus(NewsletterEntity::STATUS_CORRUPT); $this->newslettersRepository->persist($newsletter); $this->newslettersRepository->flush(); } foreach ($contentBlocks as $block) { $processedBlock = $this->processBlock($newsletter, $block, $preview, $sendingTask); if (!empty($processedBlock)) { $blocks = array_merge($blocks, $processedBlock); } } $content['blocks'] = $blocks; return $content; } public function processBlock(NewsletterEntity $newsletter, array $block, bool $preview = false, SendingTask $sendingTask = null): array { switch ($block['type']) { case 'abandonedCartContent': return $this->abandonedCartContent->render($newsletter, $block, $preview, $sendingTask); case 'automatedLatestContentLayout': return $this->automatedLatestContent->render($newsletter, $block); case 'woocommerceHeading': return $this->wooCommerceContentPreprocessor->preprocessHeader(); case 'woocommerceContent': return $this->wooCommerceContentPreprocessor->preprocessContent(); } return [$block]; } }