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 / Editor / PostTransformer.php
mailpoet / lib / Newsletter / Editor Last commit date
LayoutHelper.php 3 years ago MetaInformationManager.php 2 months ago PostContentManager.php 11 months ago PostListTransformer.php 3 years ago PostTransformer.php 1 year ago PostTransformerContentsExtractor.php 2 months ago StructureTransformer.php 3 years ago TitleListTransformer.php 1 year ago Transformer.php 3 years ago index.php 3 years ago
PostTransformer.php
178 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\Newsletter\Editor;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 class PostTransformer {
9 /** @var PostTransformerContentsExtractor */
10 private $extractor;
11
12 /** @var array */
13 private $args;
14 /** @var bool */
15 private $withLayout;
16 /** @var string */
17 private $imagePosition;
18
19 public function __construct(
20 $args,
21 ?PostTransformerContentsExtractor $extractor = null
22 ) {
23 $this->args = $args;
24 $this->withLayout = isset($args['withLayout']) ? (bool)filter_var($args['withLayout'], FILTER_VALIDATE_BOOLEAN) : false;
25 $this->imagePosition = 'left';
26 if ($extractor === null) {
27 $extractor = new PostTransformerContentsExtractor($args);
28 }
29 $this->extractor = $extractor;
30 }
31
32 public function getDivider() {
33 if (empty($this->withLayout)) {
34 return $this->args['divider'];
35 }
36 return LayoutHelper::row([
37 LayoutHelper::col([$this->args['divider']]),
38 ]);
39 }
40
41 public function transform($post) {
42 if (empty($this->withLayout)) {
43 return $this->getStructure($post);
44 }
45 return $this->getStructureWithLayout($post);
46 }
47
48 private function getStructure($post) {
49 $content = $this->extractor->getContent($post, true, $this->args['displayType']);
50 $title = $this->extractor->getTitle($post);
51 $featuredImage = $this->extractor->getFeaturedImage($post);
52 $featuredImagePosition = $this->getFeaturedImagePosition($this->extractor->isProduct($post));
53
54 if (
55 $featuredImage
56 && $featuredImagePosition === 'belowTitle'
57 && (
58 $this->args['displayType'] !== 'titleOnly'
59 || $this->extractor->isProduct($post)
60 )
61 ) {
62 array_unshift($content, $title, $featuredImage);
63 return $content;
64 }
65
66 if ($content[0]['type'] === 'text') {
67 $content[0]['text'] = $title['text'] . $content[0]['text'];
68 } else {
69 array_unshift($content, $title);
70 }
71
72 if ($featuredImage && $this->args['displayType'] !== 'titleOnly') {
73 array_unshift($content, $featuredImage);
74 }
75
76 return $content;
77 }
78
79 private function getStructureWithLayout($post) {
80 $withPostClass = $this->args['displayType'] === 'full' || $this->args['displayType'] === 'excerpt';
81 $content = $this->extractor->getContent($post, $withPostClass, $this->args['displayType']);
82 $title = $this->extractor->getTitle($post);
83 $featuredImage = $this->extractor->getFeaturedImage($post);
84 $featuredImagePosition = $this->getFeaturedImagePosition($this->extractor->isProduct($post));
85
86 if (
87 !$featuredImage
88 || $featuredImagePosition === 'none'
89 || (
90 $this->args['displayType'] === 'titleOnly'
91 && !$this->extractor->isProduct($post)
92 )
93 ) {
94 array_unshift($content, $title);
95
96 return [
97 LayoutHelper::row([
98 LayoutHelper::col($content),
99 ]),
100 ];
101 }
102 $titlePosition = isset($this->args['titlePosition']) ? $this->args['titlePosition'] : '';
103
104 if ($featuredImagePosition === 'aboveTitle' || $featuredImagePosition === 'belowTitle') {
105 $featuredImagePosition = 'centered';
106 }
107
108 if ($featuredImagePosition === 'centered') {
109 if ($titlePosition === 'aboveExcerpt') {
110 array_unshift($content, $featuredImage, $title);
111 } else {
112 array_unshift($content, $title, $featuredImage);
113 }
114 return [
115 LayoutHelper::row([
116 LayoutHelper::col($content),
117 ]),
118 ];
119 }
120
121 if ($titlePosition === 'aboveExcerpt') {
122 array_unshift($content, $title);
123 }
124
125 if ($featuredImagePosition === 'alternate') {
126 $featuredImagePosition = $this->nextImagePosition();
127 }
128
129 $content = ($featuredImagePosition === 'left')
130 ? [
131 LayoutHelper::col([$featuredImage]),
132 LayoutHelper::col($content),
133 ]
134 : [
135 LayoutHelper::col($content),
136 LayoutHelper::col([$featuredImage]),
137 ];
138
139 $result = [
140 LayoutHelper::row($content),
141 ];
142
143 if ($titlePosition !== 'aboveExcerpt') {
144 array_unshift(
145 $result,
146 LayoutHelper::row(
147 [
148 LayoutHelper::col([$title]),
149 ]
150 )
151 );
152 }
153
154 return $result;
155 }
156
157 private function nextImagePosition() {
158 $this->imagePosition = ($this->imagePosition === 'left') ? 'right' : 'left';
159 return $this->imagePosition;
160 }
161
162 private function getFeaturedImagePosition(bool $isProduct) {
163 if ($this->args['displayType'] !== 'full') {
164 return $this->args['featuredImagePosition'];
165 }
166
167 // For products with display type 'full' use 'featuredImagePosition' if 'fullPostFeaturedImagePosition' not set.
168 // This is because products always supported images, even for 'full' post display type.
169 if ($isProduct && empty($this->args['fullPostFeaturedImagePosition'])) {
170 return $this->args['featuredImagePosition'];
171 }
172
173 // For posts with display type 'full' use 'fullPostFeaturedImagePosition'. This is for back compatibility
174 // with posts that don't have featured image but contain some value for 'featuredImagePosition' in the DB.
175 return $this->args['fullPostFeaturedImagePosition'] ?? 'none';
176 }
177 }
178