PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 11.1.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v11.1.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
← All changes | back/Classes/OverrideClass.php +0 -213 10.11.1 → 11.1.1 View file →
@@ -1,213 +1,0 @@
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 -}