Nav apraksta

Preprocessor.php 2.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace MailPoet\Newsletter\Renderer;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Entities\NewsletterEntity;
  5. use MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent;
  6. use MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock;
  7. use MailPoet\Tasks\Sending as SendingTask;
  8. use MailPoet\WooCommerce\TransactionalEmails\ContentPreprocessor;
  9. class Preprocessor {
  10. const WC_HEADING_BEFORE = '
  11. <table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0">
  12. <tr>
  13. <td class="mailpoet_text" valign="top" style="padding-top:20px;padding-bottom:20px;word-break:break-word;word-wrap:break-word;">';
  14. const WC_HEADING_AFTER = '
  15. </td>
  16. </tr>
  17. </table>';
  18. /** @var AbandonedCartContent */
  19. private $abandonedCartContent;
  20. /** @var AutomatedLatestContentBlock */
  21. private $automatedLatestContent;
  22. /** @var ContentPreprocessor */
  23. private $wooCommerceContentPreprocessor;
  24. public function __construct(
  25. AbandonedCartContent $abandonedCartContent,
  26. AutomatedLatestContentBlock $automatedLatestContent,
  27. ContentPreprocessor $wooCommerceContentPreprocessor
  28. ) {
  29. $this->abandonedCartContent = $abandonedCartContent;
  30. $this->automatedLatestContent = $automatedLatestContent;
  31. $this->wooCommerceContentPreprocessor = $wooCommerceContentPreprocessor;
  32. }
  33. /**
  34. * @param array $content
  35. * @param NewsletterEntity $newsletter
  36. * @return array
  37. */
  38. public function process(NewsletterEntity $newsletter, $content, bool $preview = false, SendingTask $sendingTask = null) {
  39. if (!array_key_exists('blocks', $content)) {
  40. return $content;
  41. }
  42. $blocks = [];
  43. foreach ($content['blocks'] as $block) {
  44. $processedBlock = $this->processBlock($newsletter, $block, $preview, $sendingTask);
  45. if (!empty($processedBlock)) {
  46. $blocks = array_merge($blocks, $processedBlock);
  47. }
  48. }
  49. $content['blocks'] = $blocks;
  50. return $content;
  51. }
  52. public function processBlock(NewsletterEntity $newsletter, array $block, bool $preview = false, SendingTask $sendingTask = null): array {
  53. switch ($block['type']) {
  54. case 'abandonedCartContent':
  55. return $this->abandonedCartContent->render($newsletter, $block, $preview, $sendingTask);
  56. case 'automatedLatestContentLayout':
  57. return $this->automatedLatestContent->render($newsletter, $block);
  58. case 'woocommerceHeading':
  59. return $this->wooCommerceContentPreprocessor->preprocessHeader();
  60. case 'woocommerceContent':
  61. return $this->wooCommerceContentPreprocessor->preprocessContent();
  62. }
  63. return [$block];
  64. }
  65. }