PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.11.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.11.1
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
acymailing / back / Classes / OverrideClass.php

OverrideClass.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 10.11.1, at back/Classes/OverrideClass.php

214 lines 7.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace AcyMailing\Classes;
4
5 use AcyMailing\Core\AcymClass;
6 use AcyMailing\Helpers\PaginationHelper;
7
8 class OverrideClass extends AcymClass
9 {
10 public function __construct()
11 {
12 parent::__construct();
13
14 $this->table = 'mail_override';
15 $this->pkey = 'id';
16 }
17
18 public function getMatchingElements(array $settings = []): array
19 {
20 $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';
22
23 $filters = [];
24
25 if (!empty($settings['search'])) {
26 $filters[] = 'mail.name LIKE '.acym_escapeDB('%'.$settings['search'].'%');
27 }
28
29 if (!empty($settings['source'])) {
30 $filters[] = 'override.source LIKE '.acym_escapeDB('%'.$settings['source'].'%');
31 }
32
33 $filters[] = 'mail.parent_id IS NULL';
34
35 if (!empty($filters)) {
36 $query .= ' WHERE ('.implode(') AND (', $filters).')';
37 $queryCount .= ' WHERE ('.implode(') AND (', $filters).')';
38 }
39
40 if (!empty($settings['status'])) {
41 $query .= empty($filters) ? ' WHERE ' : ' AND ';
42 $query .= 'active = '.($settings['status'] == 'active' ? '1' : '0');
43 }
44
45 if (!empty($settings['ordering']) && !empty($settings['ordering_sort_order'])) {
46 $query .= ' ORDER BY override.'.acym_secureDBColumn($settings['ordering']).' '.acym_secureDBColumn(strtoupper($settings['ordering_sort_order']));
47 $query .= ', override.mail_id ASC';
48 }
49
50 if (empty($settings['offset']) || $settings['offset'] < 0) {
51 $settings['offset'] = 0;
52 }
53
54 if (empty($settings['elementsPerPage']) || $settings['elementsPerPage'] < 1) {
55 $pagination = new PaginationHelper();
56 $settings['elementsPerPage'] = $pagination->getListLimit();
57 }
58
59 $mailClass = new MailClass();
60
61 return [
62 'elements' => $mailClass->decode(acym_loadObjectList($query, '', $settings['offset'], $settings['elementsPerPage'])),
63 'total' => acym_loadObject($queryCount),
64 'status' => [],
65 ];
66 }
67
68 public function cleanEmailsOverride(): void
69 {
70 $overrideId = acym_loadResultArray('SELECT id FROM #__acym_mail_override');
71 $this->delete($overrideId);
72 }
73
74 public function areOverrideMailsInstalled(): bool
75 {
76 return (bool)acym_loadResult('SELECT COUNT(id) FROM #__acym_mail_override');
77 }
78
79 public function getAllSources(): array
80 {
81 return acym_loadResultArray('SELECT DISTINCT `source` FROM #__acym_mail_override');
82 }
83
84 public function getActiveOverrides(string $key = ''): array
85 {
86 $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
88 return acym_loadObjectList($query, $key);
89 }
90
91 public function getMailByBaseContent(string $subject, string $body): ?object
92 {
93 $translatepressIsActive = acym_isExtensionActive('translatepress-multilingual/index.php');
94 $activeOverrides = $this->getActiveOverrides('name');
95
96 $joomlaMailStyle = 'plaintext';
97 if ('joomla' === ACYM_CMS) {
98 acym_loadLanguageFile('com_contact');
99 if (ACYM_J40) {
100 $params = \Joomla\CMS\Component\ComponentHelper::getParams('com_mails');
101 $joomlaMailStyle = $params->get('mail_style', 'plaintext');
102 }
103 }
104
105 foreach ($activeOverrides as $oneOverride) {
106 $parameters = [];
107 $matches = true;
108 foreach (['subject', 'body'] as $part) {
109 $identifier = 'base_'.$part;
110 if (empty($oneOverride->$identifier)) continue;
111
112 $decodedValue = json_decode($oneOverride->$identifier, true);
113 if (empty($decodedValue)) continue;
114
115 $oneOverride->$identifier = '';
116 foreach ($decodedValue as $partialTrad) {
117 $oneOverride->$identifier .= acym_translation($partialTrad, false, true, '');
118 if ($oneOverride->source === 'woocommerce') {
119 $oneOverride->$identifier = acym_translation($oneOverride->$identifier, false, true, 'woocommerce');
120 if ($translatepressIsActive) {
121 $oneOverride->$identifier = preg_replace('/#!trpst#trp-gettext data-trpgettextoriginal=\d+#!trpen#/i', '', $oneOverride->$identifier);
122 $oneOverride->$identifier = preg_replace('/#!trpst#\/trp-gettext#!trpen#/i', '', $oneOverride->$identifier);
123 }
124 }
125 }
126
127 $oneOverride->$identifier = preg_replace(
128 [
129 '/%([0-9].?\$)?s/',
130 '/\\\{[A-Z_]+\\\}/i',
131 '/###[A-Z_-]+###/i',
132 '/\\\#\\\#\\\#[A-Z_-]+\\\#\\\#\\\#/i',
133 ],
134 '(.*)',
135 preg_quote($oneOverride->$identifier, '/')
136 );
137
138 $oneOverride->$identifier = str_replace('&amp;', '&', $oneOverride->$identifier);
139
140 if ('plaintext' !== $joomlaMailStyle) {
141 $$part = str_replace('<br>', '', $$part);
142 }
143 $$part = str_replace("\r\n", "\n", $$part);
144
145 $matches = preg_match('/'.trim($oneOverride->$identifier).'/', $$part, $params) === 1 && $matches;
146
147 if (empty($parameters)) {
148 $parameters = $params;
149 } else {
150 for ($i = 1; $i < count($params); $i++) {
151 $parameters[] = trim($params[$i]);
152 }
153 }
154 }
155
156 if (!$matches) continue;
157
158 $mailClass = new MailClass();
159 $mail = $mailClass->getOneById($oneOverride->mail_id);
160
161 if ($oneOverride->source == 'woocommerce' && $translatepressIsActive) {
162 $subjectTranslated = $params[0];
163 for ($i = 1; $i < count($params); $i++) {
164 $pattern = '/'.$params[$i].'/i';
165 $param = '{param'.$i.'}';
166 $subjectTranslated = preg_replace($pattern, $param, $subjectTranslated);
167 }
168 $mail->subject = $subjectTranslated;
169 }
170
171 $mail->parameters = $parameters;
172
173 if (empty($oneOverride->base_body)) {
174 $mail->body = $body;
175 }
176
177 return $mail;
178 }
179
180 return null;
181 }
182
183 public function delete(array $elements): int
184 {
185 if (empty($elements)) return 0;
186
187 acym_arrayToInteger($elements);
188 $mailIds = acym_loadResultArray('SELECT `mail_id` FROM #__acym_mail_override WHERE `id` IN ('.implode(',', $elements).')');
189
190 $result = parent::delete($elements);
191
192 $mailClass = new MailClass();
193 $mailClass->delete($mailIds);
194
195 return $result;
196 }
197
198 public function getParamsByMailId(?int $mailId): array
199 {
200 if (empty($mailId)) {
201 return [];
202 }
203
204 $mailClass = new MailClass();
205 $mail = $mailClass->getOneById($mailId);
206
207 if (empty($mail)) {
208 return [];
209 }
210
211 return acym_getOverrideParamsByName($mail->name);
212 }
213 }
214