PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 11.1.0
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v11.1.0
11.1.1 11.1.0 11.0.5 11.0.4 11.0.3 11.0.2 11.0.1 11.0.0 10.11.1 10.11.0 10.10.2 10.10.1 10.10.0 10.9.1 trunk 10.0.0 10.0.1 10.1.0 10.1.1 10.1.2 10.1.3 10.1.4 10.2.0 10.2.1 10.2.2 All 62 releases
← All changes | back/Classes/OverrideClass.php +41 -20 10.0.1 → 11.1.0 View file →
@@ -14,12 +14,15 @@
14 14 $this->table = 'mail_override';
15 15 $this->pkey = 'id';
16 16 }
17 17
18 + /**
19 + * Get mails depending on filters (search, ordering, pagination)
20 + */
18 21 public function getMatchingElements(array $settings = []): array
19 22 {
20 23 $query = 'SELECT override.*, mail.name, mail.subject FROM #__acym_mail_override AS override JOIN #__acym_mail AS mail ON override.mail_id = mail.id';
21 - $queryCount = 'SELECT COUNT(override.mail_id) as total, SUM(override.active) as totalActive FROM #__acym_mail_override AS override INNER JOIN #__acym_mail AS mail ON override.mail_id = mail.id';
24 + $queryCount = 'SELECT COUNT(override.mail_id) AS total, SUM(override.active) AS totalActive FROM #__acym_mail_override AS override INNER JOIN #__acym_mail AS mail ON override.mail_id = mail.id';
22 25
23 26 $filters = [];
24 27
25 28 if (!empty($settings['search'])) {
@@ -56,33 +59,33 @@
56 59 $settings['elementsPerPage'] = $pagination->getListLimit();
57 60 }
58 61
59 62 $mailClass = new MailClass();
60 - $results['elements'] = $mailClass->decode(acym_loadObjectList($query, '', $settings['offset'], $settings['elementsPerPage']));
61 - $results['total'] = acym_loadObject($queryCount);
62 63
63 - $results['status'] = [];
64 -
65 - return $results;
64 + return [
65 + 'elements' => $mailClass->decode(acym_loadObjectList($query, '', $settings['offset'], $settings['elementsPerPage'])),
66 + 'total' => acym_loadObject($queryCount),
67 + 'status' => [],
68 + ];
66 69 }
67 70
68 - public function cleanEmailsOverride()
71 + public function cleanEmailsOverride(): void
69 72 {
70 73 $overrideId = acym_loadResultArray('SELECT id FROM #__acym_mail_override');
71 74 $this->delete($overrideId);
72 75 }
73 76
74 - public function areOverrideMailsInstalled()
77 + public function areOverrideMailsInstalled(): bool
75 78 {
76 79 return (bool)acym_loadResult('SELECT COUNT(id) FROM #__acym_mail_override');
77 80 }
78 81
79 - public function getAllSources()
82 + public function getAllSources(): array
80 83 {
81 84 return acym_loadResultArray('SELECT DISTINCT `source` FROM #__acym_mail_override');
82 85 }
83 86
84 - public function getActiveOverrides($key = '')
87 + public function getActiveOverrides(string $key = ''): array
85 88 {
86 89 $query = 'SELECT override.*, mail.name FROM #__acym_mail_override AS override JOIN #__acym_mail AS mail ON mail.id = override.mail_id WHERE `active` = 1';
87 90
88 91 return acym_loadObjectList($query, $key);
@@ -87,9 +90,12 @@
87 90
88 91 return acym_loadObjectList($query, $key);
89 92 }
90 93
91 - public function getMailByBaseContent($subject, $body)
94 + /**
95 + * Returns the override email corresponding to the base email content provided
96 + */
97 + public function getMailByBaseContent(string $subject, string $body): ?object
92 98 {
93 99 $translatepressIsActive = acym_isExtensionActive('translatepress-multilingual/index.php');
94 100 $activeOverrides = $this->getActiveOverrides('name');
95 101
@@ -100,9 +106,9 @@
100 106 $params = \Joomla\CMS\Component\ComponentHelper::getParams('com_mails');
101 107 $joomlaMailStyle = $params->get('mail_style', 'plaintext');
102 108 }
103 109 }
104 -
110 +
105 111 foreach ($activeOverrides as $oneOverride) {
106 112 $parameters = [];
107 113 $matches = true;
108 114 foreach (['subject', 'body'] as $part) {
@@ -108,8 +114,10 @@
108 114 foreach (['subject', 'body'] as $part) {
109 115 $identifier = 'base_'.$part;
110 116 if (empty($oneOverride->$identifier)) continue;
111 117
118 + // The identifier is the default email's text, for example "User coucou registered to the site https://www.acymailing.com"
119 + // We use it to check if the current email matches
112 120 $decodedValue = json_decode($oneOverride->$identifier, true);
113 121 if (empty($decodedValue)) continue;
114 122
115 123 $oneOverride->$identifier = '';
@@ -123,8 +131,11 @@
123 131 }
124 132 }
125 133 }
126 134
135 + // Replace the %s / %1$s by (.*) to get the params from the email content
136 + // So: User %1$s registered to the site %2$s
137 + // Becomes: User (.*) registered to the site (.*)
127 138 $oneOverride->$identifier = preg_replace(
128 139 [
129 140 '/%([0-9].?\$)?s/',
130 141 '/\\\{[A-Z_]+\\\}/i',
@@ -146,22 +157,24 @@
146 157
147 158 if (empty($parameters)) {
148 159 $parameters = $params;
149 160 } else {
150 - for ($i = 1 ; $i < count($params) ; $i++) {
161 + for ($i = 1; $i < count($params); $i++) {
151 162 $parameters[] = trim($params[$i]);
152 163 }
153 164 }
154 165 }
155 166
167 + // The content didn't match the identifier
156 168 if (!$matches) continue;
157 169
170 + // We found the override
158 171 $mailClass = new MailClass();
159 172 $mail = $mailClass->getOneById($oneOverride->mail_id);
160 173
161 174 if ($oneOverride->source == 'woocommerce' && $translatepressIsActive) {
162 175 $subjectTranslated = $params[0];
163 - for ($i = 1 ; $i < count($params) ; $i++) {
176 + for ($i = 1; $i < count($params); $i++) {
164 177 $pattern = '/'.$params[$i].'/i';
165 178 $param = '{param'.$i.'}';
166 179 $subjectTranslated = preg_replace($pattern, $param, $subjectTranslated);
167 180 }
@@ -167,22 +180,24 @@
167 180 }
168 181 $mail->subject = $subjectTranslated;
169 182 }
170 183
184 + // Include the found parameters
171 185 $mail->parameters = $parameters;
172 186
173 - if (empty($oneOverride->base_body)) $mail->body = $body;
187 + if (empty($oneOverride->base_body)) {
188 + $mail->body = $body;
189 + }
174 190
175 191 return $mail;
176 192 }
177 193
178 - return false;
194 + return null;
179 195 }
180 196
181 - public function delete($elements)
197 + public function delete(array $elements): int
182 198 {
183 199 if (empty($elements)) return 0;
184 - if (!is_array($elements)) $elements = [$elements];
185 200
186 201 acym_arrayToInteger($elements);
187 202 $mailIds = acym_loadResultArray('SELECT `mail_id` FROM #__acym_mail_override WHERE `id` IN ('.implode(',', $elements).')');
188 203
@@ -193,14 +208,20 @@
193 208
194 209 return $result;
195 210 }
196 211
197 - public function getParamsByMailId($mailId)
212 + public function getParamsByMailId(?int $mailId): array
198 213 {
214 + if (empty($mailId)) {
215 + return [];
216 + }
217 +
199 218 $mailClass = new MailClass();
200 219 $mail = $mailClass->getOneById($mailId);
201 220
202 - if (empty($mail)) return [];
221 + if (empty($mail)) {
222 + return [];
223 + }
203 224
204 225 return acym_getOverrideParamsByName($mail->name);
205 226 }
206 227 }