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]);
|
||||
}
|
||||
|
||||
public function setAsCorrupt(NewsletterEntity $entity): void {
|
||||
$entity->setStatus(NewsletterEntity::STATUS_CORRUPT);
|
||||
$this->persist($entity);
|
||||
$this->flush();
|
||||
}
|
||||
|
||||
private function fetchChildrenIds(array $parentIds) {
|
||||
$ids = $this->entityManager->createQueryBuilder()->select('n.id')
|
||||
->from(NewsletterEntity::class, 'n')
|
||||
|
@@ -4,6 +4,7 @@ namespace MailPoet\Newsletter\Renderer\Blocks;
|
||||
|
||||
use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper;
|
||||
use MailPoet\Newsletter\Renderer\StylesHelper;
|
||||
use MailPoet\NewsletterProcessingException;
|
||||
use MailPoet\WooCommerce\Helper;
|
||||
|
||||
class Coupon {
|
||||
@@ -23,7 +24,18 @@ class Coupon {
|
||||
public function render($element, $columnBaseWidth) {
|
||||
$couponCode = self::CODE_PLACEHOLDER;
|
||||
if (!empty($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);
|
||||
$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\Renderer\Blocks\AbandonedCartContent;
|
||||
use MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock;
|
||||
use MailPoet\NewsletterProcessingException;
|
||||
use MailPoet\Tasks\Sending as SendingTask;
|
||||
use MailPoet\WooCommerce\CouponPreProcessor;
|
||||
use MailPoet\WooCommerce\TransactionalEmails\ContentPreprocessor;
|
||||
|
@@ -5,7 +5,10 @@ namespace MailPoet\Newsletter\Renderer;
|
||||
use MailPoet\Config\Env;
|
||||
use MailPoet\Config\ServicesChecker;
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Logging\LoggerFactory;
|
||||
use MailPoet\Newsletter\NewslettersRepository;
|
||||
use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper;
|
||||
use MailPoet\NewsletterProcessingException;
|
||||
use MailPoet\Tasks\Sending as SendingTask;
|
||||
use MailPoet\Util\pQuery\DomNode;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
@@ -32,13 +35,21 @@ class Renderer {
|
||||
/** @var WPFunctions */
|
||||
private $wp;
|
||||
|
||||
/*** @var LoggerFactory */
|
||||
private $loggerFactory;
|
||||
|
||||
/*** @var NewslettersRepository */
|
||||
private $newslettersRepository;
|
||||
|
||||
public function __construct(
|
||||
Blocks\Renderer $blocksRenderer,
|
||||
Columns\Renderer $columnsRenderer,
|
||||
Preprocessor $preprocessor,
|
||||
\MailPoetVendor\CSS $cSSInliner,
|
||||
ServicesChecker $servicesChecker,
|
||||
WPFunctions $wp
|
||||
WPFunctions $wp,
|
||||
LoggerFactory $loggerFactory,
|
||||
NewslettersRepository $newslettersRepository
|
||||
) {
|
||||
$this->blocksRenderer = $blocksRenderer;
|
||||
$this->columnsRenderer = $columnsRenderer;
|
||||
@@ -46,6 +57,8 @@ class Renderer {
|
||||
$this->cSSInliner = $cSSInliner;
|
||||
$this->servicesChecker = $servicesChecker;
|
||||
$this->wp = $wp;
|
||||
$this->loggerFactory = $loggerFactory;
|
||||
$this->newslettersRepository = $newslettersRepository;
|
||||
}
|
||||
|
||||
public function render(NewsletterEntity $newsletter, SendingTask $sendingTask = null, $type = false) {
|
||||
@@ -75,8 +88,17 @@ class Renderer {
|
||||
|
||||
$language = $this->wp->getBloginfo('language');
|
||||
$metaRobots = $preview ? '<meta name="robots" content="noindex, nofollow" />' : '';
|
||||
$renderedBody = "";
|
||||
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);
|
||||
$customFontsLinks = StylesHelper::getCustomFontsLinks($styles);
|
||||
|
||||
|
@@ -5,6 +5,8 @@ namespace MailPoet\Test\Newsletter;
|
||||
use Codeception\Util\Fixtures;
|
||||
use MailPoet\Config\ServicesChecker;
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Logging\LoggerFactory;
|
||||
use MailPoet\Newsletter\NewslettersRepository;
|
||||
use MailPoet\Newsletter\Renderer\Blocks\Button;
|
||||
use MailPoet\Newsletter\Renderer\Blocks\Divider;
|
||||
use MailPoet\Newsletter\Renderer\Blocks\Footer;
|
||||
@@ -54,7 +56,9 @@ class RendererTest extends \MailPoetTest {
|
||||
$this->diContainer->get(Preprocessor::class),
|
||||
$this->diContainer->get(\MailPoetVendor\CSS::class),
|
||||
$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->dOMParser = new pQuery();
|
||||
|
@@ -117,7 +117,9 @@ class RendererTest extends \MailPoetTest {
|
||||
),
|
||||
$this->diContainer->get(\MailPoetVendor\CSS::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