Throw and log the issue if coupon was not found when rendering

[MAILPOET-4983]
This commit is contained in:
Sam Najian
2023-02-22 17:48:43 +01:00
committed by Aschepikov
parent 534bff5a80
commit c84a6894ba
6 changed files with 52 additions and 7 deletions

View File

@@ -543,6 +543,12 @@ class NewslettersRepository extends Repository {
return $this->findBy(['status' => NewsletterEntity::STATUS_CORRUPT, 'deletedAt' => null]); return $this->findBy(['status' => NewsletterEntity::STATUS_CORRUPT, 'deletedAt' => null]);
} }
public function setAsCorrupt(NewsletterEntity $entity): void {
$entity->setStatus(NewsletterEntity::STATUS_CORRUPT);
$this->persist($entity);
$this->flush();
}
private function fetchChildrenIds(array $parentIds) { private function fetchChildrenIds(array $parentIds) {
$ids = $this->entityManager->createQueryBuilder()->select('n.id') $ids = $this->entityManager->createQueryBuilder()->select('n.id')
->from(NewsletterEntity::class, 'n') ->from(NewsletterEntity::class, 'n')

View File

@@ -4,6 +4,7 @@ namespace MailPoet\Newsletter\Renderer\Blocks;
use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper; use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper;
use MailPoet\Newsletter\Renderer\StylesHelper; use MailPoet\Newsletter\Renderer\StylesHelper;
use MailPoet\NewsletterProcessingException;
use MailPoet\WooCommerce\Helper; use MailPoet\WooCommerce\Helper;
class Coupon { class Coupon {
@@ -23,7 +24,18 @@ class Coupon {
public function render($element, $columnBaseWidth) { public function render($element, $columnBaseWidth) {
$couponCode = self::CODE_PLACEHOLDER; $couponCode = self::CODE_PLACEHOLDER;
if (!empty($element['couponId'])) { if (!empty($element['couponId'])) {
$couponCode = $this->helper->wcGetCouponCodeById((int)$element['couponId']); try {
$couponCode = $this->helper->wcGetCouponCodeById((int)$element['couponId']);
} catch (\Exception $e) {
if (!$this->helper->isWooCommerceActive()) {
throw NewsletterProcessingException::create()->withMessage(__('Woocommerce is not active', 'mailpoet'));
} else {
throw NewsletterProcessingException::create()->withMessage($e->getMessage())->withCode($e->getCode());
}
}
if (empty($couponCode)) {
throw NewsletterProcessingException::create()->withMessage(__('Couldn\'t find coupon, please edit and adjust if coupons is removed.', 'mailpoet'));
}
} }
$element['styles']['block']['width'] = $this->calculateWidth($element, $columnBaseWidth); $element['styles']['block']['width'] = $this->calculateWidth($element, $columnBaseWidth);
$styles = 'display:inline-block;-webkit-text-size-adjust:none;mso-hide:all;text-decoration:none;text-align:center;' . StylesHelper::getBlockStyles($element, $exclude = ['textAlign']); $styles = 'display:inline-block;-webkit-text-size-adjust:none;mso-hide:all;text-decoration:none;text-align:center;' . StylesHelper::getBlockStyles($element, $exclude = ['textAlign']);

View File

@@ -7,7 +7,6 @@ use MailPoet\Logging\LoggerFactory;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent; use MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent;
use MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock; use MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock;
use MailPoet\NewsletterProcessingException;
use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\WooCommerce\CouponPreProcessor; use MailPoet\WooCommerce\CouponPreProcessor;
use MailPoet\WooCommerce\TransactionalEmails\ContentPreprocessor; use MailPoet\WooCommerce\TransactionalEmails\ContentPreprocessor;

View File

@@ -5,7 +5,10 @@ namespace MailPoet\Newsletter\Renderer;
use MailPoet\Config\Env; use MailPoet\Config\Env;
use MailPoet\Config\ServicesChecker; use MailPoet\Config\ServicesChecker;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Logging\LoggerFactory;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper; use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper;
use MailPoet\NewsletterProcessingException;
use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\Util\pQuery\DomNode; use MailPoet\Util\pQuery\DomNode;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
@@ -32,13 +35,21 @@ class Renderer {
/** @var WPFunctions */ /** @var WPFunctions */
private $wp; private $wp;
/*** @var LoggerFactory */
private $loggerFactory;
/*** @var NewslettersRepository */
private $newslettersRepository;
public function __construct( public function __construct(
Blocks\Renderer $blocksRenderer, Blocks\Renderer $blocksRenderer,
Columns\Renderer $columnsRenderer, Columns\Renderer $columnsRenderer,
Preprocessor $preprocessor, Preprocessor $preprocessor,
\MailPoetVendor\CSS $cSSInliner, \MailPoetVendor\CSS $cSSInliner,
ServicesChecker $servicesChecker, ServicesChecker $servicesChecker,
WPFunctions $wp WPFunctions $wp,
LoggerFactory $loggerFactory,
NewslettersRepository $newslettersRepository
) { ) {
$this->blocksRenderer = $blocksRenderer; $this->blocksRenderer = $blocksRenderer;
$this->columnsRenderer = $columnsRenderer; $this->columnsRenderer = $columnsRenderer;
@@ -46,6 +57,8 @@ class Renderer {
$this->cSSInliner = $cSSInliner; $this->cSSInliner = $cSSInliner;
$this->servicesChecker = $servicesChecker; $this->servicesChecker = $servicesChecker;
$this->wp = $wp; $this->wp = $wp;
$this->loggerFactory = $loggerFactory;
$this->newslettersRepository = $newslettersRepository;
} }
public function render(NewsletterEntity $newsletter, SendingTask $sendingTask = null, $type = false) { public function render(NewsletterEntity $newsletter, SendingTask $sendingTask = null, $type = false) {
@@ -75,8 +88,17 @@ class Renderer {
$language = $this->wp->getBloginfo('language'); $language = $this->wp->getBloginfo('language');
$metaRobots = $preview ? '<meta name="robots" content="noindex, nofollow" />' : ''; $metaRobots = $preview ? '<meta name="robots" content="noindex, nofollow" />' : '';
$content = $this->preprocessor->process($newsletter, $content, $preview, $sendingTask); $renderedBody = "";
$renderedBody = $this->renderBody($newsletter, $content); try {
$content = $this->preprocessor->process($newsletter, $content, $preview, $sendingTask);
$renderedBody = $this->renderBody($newsletter, $content);
} catch (NewsletterProcessingException $e) {
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_COUPONS)->error(
$e->getMessage(),
['newsletter_id' => $newsletter->getId()]
);
$this->newslettersRepository->setAsCorrupt($newsletter);
}
$renderedStyles = $this->renderStyles($styles); $renderedStyles = $this->renderStyles($styles);
$customFontsLinks = StylesHelper::getCustomFontsLinks($styles); $customFontsLinks = StylesHelper::getCustomFontsLinks($styles);

View File

@@ -5,6 +5,8 @@ namespace MailPoet\Test\Newsletter;
use Codeception\Util\Fixtures; use Codeception\Util\Fixtures;
use MailPoet\Config\ServicesChecker; use MailPoet\Config\ServicesChecker;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Logging\LoggerFactory;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Renderer\Blocks\Button; use MailPoet\Newsletter\Renderer\Blocks\Button;
use MailPoet\Newsletter\Renderer\Blocks\Divider; use MailPoet\Newsletter\Renderer\Blocks\Divider;
use MailPoet\Newsletter\Renderer\Blocks\Footer; use MailPoet\Newsletter\Renderer\Blocks\Footer;
@@ -54,7 +56,9 @@ class RendererTest extends \MailPoetTest {
$this->diContainer->get(Preprocessor::class), $this->diContainer->get(Preprocessor::class),
$this->diContainer->get(\MailPoetVendor\CSS::class), $this->diContainer->get(\MailPoetVendor\CSS::class),
$this->servicesChecker, $this->servicesChecker,
$this->diContainer->get(WPFunctions::class) $this->diContainer->get(WPFunctions::class),
$this->diContainer->get(LoggerFactory::class),
$this->diContainer->get(NewslettersRepository::class)
); );
$this->columnRenderer = new ColumnRenderer(); $this->columnRenderer = new ColumnRenderer();
$this->dOMParser = new pQuery(); $this->dOMParser = new pQuery();

View File

@@ -117,7 +117,9 @@ class RendererTest extends \MailPoetTest {
), ),
$this->diContainer->get(\MailPoetVendor\CSS::class), $this->diContainer->get(\MailPoetVendor\CSS::class),
$this->diContainer->get(ServicesChecker::class), $this->diContainer->get(ServicesChecker::class),
$this->diContainer->get(WPFunctions::class) $this->diContainer->get(WPFunctions::class),
$this->diContainer->get(LoggerFactory::class),
$this->diContainer->get(NewslettersRepository::class)
); );
} }
} }