PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / Newsletter / Renderer / Blocks / Renderer.php
mailpoet / lib / Newsletter / Renderer / Blocks Last commit date
AbandonedCartContent.php 1 year ago AutomatedLatestContentBlock.php 3 years ago Button.php 1 year ago Coupon.php 3 years ago Divider.php 2 years ago DynamicProductsBlock.php 11 months ago Footer.php 2 months ago Header.php 2 months ago Image.php 3 years ago Placeholder.php 4 years ago Renderer.php 2 months ago Social.php 2 months ago Spacer.php 3 years ago Text.php 2 months ago index.php 3 years ago
Renderer.php
158 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\Newsletter\Renderer\Blocks;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Entities\NewsletterEntity;
9 use MailPoet\Newsletter\Renderer\Columns\ColumnsHelper;
10 use MailPoet\Newsletter\Renderer\StylesHelper;
11
12 class Renderer {
13 /** @var AutomatedLatestContentBlock */
14 private $ALC;
15
16 /** @var Button */
17 private $button;
18
19 /** @var Divider */
20 private $divider;
21
22 /** @var Footer */
23 private $footer;
24
25 /** @var Header */
26 private $header;
27
28 /** @var Image */
29 private $image;
30
31 /** @var Social */
32 private $social;
33
34 /** @var Spacer */
35 private $spacer;
36
37 /** @var Text */
38 private $text;
39
40 /** @var Placeholder */
41 private $placeholder;
42
43 /** @var Coupon */
44 private $coupon;
45
46 /** @var DynamicProductsBlock */
47 private $dynamicProducts;
48
49 public function __construct(
50 AutomatedLatestContentBlock $ALC,
51 Button $button,
52 Divider $divider,
53 Footer $footer,
54 Header $header,
55 Image $image,
56 Social $social,
57 Spacer $spacer,
58 Text $text,
59 Placeholder $placeholder,
60 Coupon $coupon,
61 DynamicProductsBlock $dynamicProducts
62 ) {
63 $this->ALC = $ALC;
64 $this->button = $button;
65 $this->divider = $divider;
66 $this->footer = $footer;
67 $this->header = $header;
68 $this->image = $image;
69 $this->social = $social;
70 $this->spacer = $spacer;
71 $this->text = $text;
72 $this->placeholder = $placeholder;
73 $this->coupon = $coupon;
74 $this->dynamicProducts = $dynamicProducts;
75 }
76
77 public function render(NewsletterEntity $newsletter, $data, bool $isRtl = false) {
78 if (!isset($data['blocks']) || !is_countable($data['blocks']) || !is_iterable($data['blocks'])) {
79 return null;
80 }
81 $columnCount = count($data['blocks']);
82 $columnsLayout = $data['columnLayout'] ?? null;
83 $columnWidths = ColumnsHelper::columnWidth($columnCount, $columnsLayout);
84 $columnContent = [];
85
86 foreach ($data['blocks'] as $index => $columnBlocks) {
87 $renderedBlockElement = $this->renderBlocksInColumn($newsletter, $columnBlocks, $columnWidths[$index], $isRtl);
88 $columnContent[] = $renderedBlockElement;
89 }
90
91 return $columnContent;
92 }
93
94 private function renderBlocksInColumn(NewsletterEntity $newsletter, $block, $columnBaseWidth, bool $isRtl = false) {
95 $blockContent = '';
96 $_this = $this;
97 array_map(function($block) use (&$blockContent, $columnBaseWidth, $newsletter, $_this, $isRtl) {
98 $renderedBlockElement = $_this->createElementFromBlockType($newsletter, $block, $columnBaseWidth, $isRtl);
99 if (isset($block['blocks'])) {
100 $renderedBlockElement = $_this->renderBlocksInColumn($newsletter, $block, $columnBaseWidth, $isRtl);
101 // nested vertical column container is rendered as an array
102 if (is_array($renderedBlockElement)) {
103 $renderedBlockElement = implode('', array_map(static fn($v): string => is_scalar($v) ? (string)$v : '', $renderedBlockElement));
104 }
105 }
106
107 $blockContent .= $renderedBlockElement;
108 }, $block['blocks']);
109 return $blockContent;
110 }
111
112 public function createElementFromBlockType(NewsletterEntity $newsletter, $block, $columnBaseWidth, bool $isRtl = false) {
113 if ($block['type'] === 'automatedLatestContent') {
114 return $this->processAutomatedLatestContent($newsletter, $block, $columnBaseWidth, $isRtl);
115 }
116 if ($block['type'] === 'dynamicProducts') {
117 return $this->processDynamicProducts($block, $columnBaseWidth);
118 }
119 $block = StylesHelper::applyTextAlignment($block);
120 switch ($block['type']) {
121 case 'button':
122 return $this->button->render($block, $columnBaseWidth);
123 case 'divider':
124 return $this->divider->render($block);
125 case 'footer':
126 return $this->footer->render($block, $isRtl);
127 case 'header':
128 return $this->header->render($block, $isRtl);
129 case 'image':
130 return $this->image->render($block, $columnBaseWidth);
131 case 'social':
132 return $this->social->render($block);
133 case 'spacer':
134 return $this->spacer->render($block);
135 case 'text':
136 return $this->text->render($block, $isRtl);
137 case 'placeholder':
138 return $this->placeholder->render($block);
139 case Coupon::TYPE:
140 return $this->coupon->render($block, $columnBaseWidth);
141 }
142 return "<!-- Skipped unsupported block type: {$block['type']} -->";
143 }
144
145 public function processAutomatedLatestContent(NewsletterEntity $newsletter, $args, $columnBaseWidth, bool $isRtl = false) {
146 $transformedPosts = [
147 'blocks' => $this->ALC->render($newsletter, $args),
148 ];
149 $transformedPosts = StylesHelper::applyTextAlignment($transformedPosts);
150 return $this->renderBlocksInColumn($newsletter, $transformedPosts, $columnBaseWidth, $isRtl);
151 }
152
153 public function processDynamicProducts($args, $columnBaseWidth) {
154 $renderedProducts = $this->dynamicProducts->render($args, $columnBaseWidth);
155 return $renderedProducts;
156 }
157 }
158