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

207 lines 7.4 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()
69 {
70 $overrideId = acym_loadResultArray('SELECT id FROM #__acym_mail_override');
71 $this->delete($overrideId);
72 }
73
74 public function areOverrideMailsInstalled()
75 {
76 return (bool)acym_loadResult('SELECT COUNT(id) FROM #__acym_mail_override');
77 }
78
79 public function getAllSources()
80 {
81 return acym_loadResultArray('SELECT DISTINCT `source` FROM #__acym_mail_override');
82 }
83
84 public function getActiveOverrides($key = '')
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($subject, $body)
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)) $mail->body = $body;
174
175 return $mail;
176 }
177
178 return false;
179 }
180
181 public function delete($elements)
182 {
183 if (empty($elements)) return 0;
184 if (!is_array($elements)) $elements = [$elements];
185
186 acym_arrayToInteger($elements);
187 $mailIds = acym_loadResultArray('SELECT `mail_id` FROM #__acym_mail_override WHERE `id` IN ('.implode(',', $elements).')');
188
189 $result = parent::delete($elements);
190
191 $mailClass = new MailClass();
192 $mailClass->delete($mailIds);
193
194 return $result;
195 }
196
197 public function getParamsByMailId($mailId)
198 {
199 $mailClass = new MailClass();
200 $mail = $mailClass->getOneById($mailId);
201
202 if (empty($mail)) return [];
203
204 return acym_getOverrideParamsByName($mail->name);
205 }
206 }
207