Throw and log the issue if coupon was not found when rendering
[MAILPOET-4983]
This commit is contained in:
@@ -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')
|
||||||
|
@@ -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']);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
|
@@ -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)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user