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/dynamics/subscription/SubscriptionAutomationConditions.php +0 -288 10.10.2 → 11.1.1 View file →
@@ -1,288 +1,0 @@
1 -<?php
2 -
3 -use AcyMailing\Classes\ListClass;
4 -
5 -trait SubscriptionAutomationConditions
6 -{
7 - public function onAcymDeclareConditions(array &$conditions): void
8 - {
9 - $listClass = new ListClass();
10 - $allLists = $listClass->getAllForSelect(false);
11 - $listsWithAny = ['' => acym_translation('ACYM_ANY_LIST')] + $allLists;
12 - $list = [
13 - 'type' => [
14 - 'sub' => acym_translation('ACYM_SUBSCRIBED'),
15 - 'unsub' => acym_translation('ACYM_UNSUBSCRIBED'),
16 - 'notsub' => acym_translation('ACYM_NO_SUBSCRIPTION_STATUS'),
17 - 'notcurrentsub' => acym_translation('ACYM_NOT_CURRENTLY_SUBSCRIBED'),
18 - ],
19 - 'lists' => $listsWithAny,
20 - 'date' => [
21 - 'subscription_date' => acym_translation('ACYM_SUBSCRIPTION_DATE'),
22 - 'unsubscribe_date' => acym_translation('ACYM_UNSUBSCRIPTION_DATE'),
23 - ],
24 - ];
25 -
26 - $conditions['user']['acy_list'] = new stdClass();
27 - $conditions['user']['acy_list']->name = acym_translation('ACYM_ACYMAILING_LIST');
28 -
29 - $conditions['user']['acy_list']->option = '<div class="intext_select_automation cell">';
30 - $conditions['user']['acy_list']->option .= acym_select(
31 - $list['type'],
32 - 'acym_condition[conditions][__numor__][__numand__][acy_list][action]',
33 - null,
34 - ['class' => 'intext_select_automation acym__select']
35 - );
36 - $conditions['user']['acy_list']->option .= '</div>';
37 - $conditions['user']['acy_list']->option .= '<div class="intext_select_automation cell">';
38 - $conditions['user']['acy_list']->option .= acym_select(
39 - $list['lists'],
40 - 'acym_condition[conditions][__numor__][__numand__][acy_list][list]',
41 - null,
42 - ['class' => 'intext_select_automation acym__select']
43 - );
44 - $conditions['user']['acy_list']->option .= '</div><br>';
45 - $conditions['user']['acy_list']->option .= '<div class="cell grid-x grid-margin-x">';
46 - $conditions['user']['acy_list']->option .= acym_dateField('acym_condition[conditions][__numor__][__numand__][acy_list][date-min]');
47 - $conditions['user']['acy_list']->option .= '<span class="acym__title acym__title__secondary acym_vcenter margin-bottom-0 margin-left-1 margin-right-1"><</span>';
48 - $conditions['user']['acy_list']->option .= '<div class="intext_select_automation">';
49 - $conditions['user']['acy_list']->option .= acym_select(
50 - $list['date'],
51 - 'acym_condition[conditions][__numor__][__numand__][acy_list][date-type]',
52 - null,
53 - ['class' => 'intext_select_automation acym__select cell']
54 - );
55 - $conditions['user']['acy_list']->option .= '</div>';
56 - $conditions['user']['acy_list']->option .= '<span class="acym__title acym__title__secondary acym_vcenter margin-bottom-0 margin-left-1 margin-right-1"><</span>';
57 - $conditions['user']['acy_list']->option .= acym_dateField('acym_condition[conditions][__numor__][__numand__][acy_list][date-max]');
58 - $conditions['user']['acy_list']->option .= '</div>';
59 -
60 - $conditions['classic']['acy_list_all'] = new stdClass();
61 - $conditions['classic']['acy_list_all']->name = acym_translation('ACYM_NUMBER_USERS_LIST');
62 - $conditions['classic']['acy_list_all']->option = '<div class="cell shrink acym__automation__inner__text">'.acym_translation('ACYM_THERE_IS').'</div>';
63 - $conditions['classic']['acy_list_all']->option .= '<div class="intext_select_automation cell">';
64 - $conditions['classic']['acy_list_all']->option .= acym_select(
65 - ['>' => acym_translation('ACYM_MORE_THAN'), '<' => acym_translation('ACYM_LESS_THAN'), '=' => acym_translation('ACYM_EXACTLY')],
66 - 'acym_condition[conditions][__numor__][__numand__][acy_list_all][operator]',
67 - null,
68 - ['class' => 'intext_select_automation acym__select']
69 - );
70 - $conditions['classic']['acy_list_all']->option .= '</div>';
71 - $conditions['classic']['acy_list_all']->option .= '<input type="number" min="0" class="intext_input_automation cell" name="acym_condition[conditions][__numor__][__numand__][acy_list_all][number]">';
72 - $conditions['classic']['acy_list_all']->option .= '<div class="cell shrink acym__automation__inner__text">'.acym_translation('ACYM_ACYMAILING_USERS').'</div>';
73 - $listTypeAll = [
74 - 'sub' => acym_translation('ACYM_SUBSCRIBED'),
75 - 'unsub' => acym_translation('ACYM_UNSUBSCRIBED'),
76 - 'notsub' => acym_translation('ACYM_NO_SUBSCRIPTION_STATUS'),
77 - ];
78 - $conditions['classic']['acy_list_all']->option .= '<div class="cell grid-x grid-margin-x margin-left-0 margin-right-0"><div class="intext_select_automation cell">';
79 - $conditions['classic']['acy_list_all']->option .= acym_select(
80 - $listTypeAll,
81 - 'acym_condition[conditions][__numor__][__numand__][acy_list_all][action]',
82 - null,
83 - ['class' => 'intext_select_automation acym__select']
84 - );
85 - $conditions['classic']['acy_list_all']->option .= '</div>';
86 - $conditions['classic']['acy_list_all']->option .= '<div class="intext_select_automation cell">';
87 - $conditions['classic']['acy_list_all']->option .= acym_select(
88 - $list['lists'],
89 - 'acym_condition[conditions][__numor__][__numand__][acy_list_all][list]',
90 - null,
91 - ['class' => 'intext_select_automation acym__select']
92 - );
93 - $conditions['classic']['acy_list_all']->option .= '</div></div>';
94 - $conditions['classic']['acy_list_all']->option .= '<br><div class="cell grid-x grid-margin-x">';
95 - $conditions['classic']['acy_list_all']->option .= acym_dateField('acym_condition[conditions][__numor__][__numand__][acy_list_all][date-min]');
96 - $conditions['classic']['acy_list_all']->option .= '<span class="acym__title acym__title__secondary acym_vcenter margin-bottom-0 margin-left-1 margin-right-1"><</span>';
97 - $conditions['classic']['acy_list_all']->option .= '<div class="intext_select_automation">';
98 - $conditions['classic']['acy_list_all']->option .= acym_select(
99 - $list['date'],
100 - 'acym_condition[conditions][__numor__][__numand__][acy_list_all][date-type]',
101 - null,
102 - ['class' => 'intext_select_automation acym__select cell']
103 - );
104 - $conditions['classic']['acy_list_all']->option .= '</div>';
105 - $conditions['classic']['acy_list_all']->option .= '<span class="acym__title acym__title__secondary acym_vcenter margin-bottom-0 margin-left-1 margin-right-1"><</span>';
106 - $conditions['classic']['acy_list_all']->option .= acym_dateField('acym_condition[conditions][__numor__][__numand__][acy_list_all][date-max]');
107 - }
108 -
109 - public function onAcymDeclareConditionsScenario(array &$conditions): void
110 - {
111 - $this->onAcymDeclareConditions($conditions);
112 - }
113 -
114 - private function processConditionAcyLists(&$query, &$options, $num)
115 - {
116 - $isAnyList = empty($options['list']);
117 -
118 - $otherConditions = '';
119 - if (!empty($options['date-min'])) {
120 - $options['date-min'] = acym_replaceDate($options['date-min']);
121 - if (!is_numeric($options['date-min'])) {
122 - $options['date-min'] = strtotime($options['date-min']);
123 - }
124 - if (!empty($options['date-min'])) {
125 - $otherConditions .= ' AND userlist'.$num.'.'.acym_secureDBColumn($options['date-type']).' > '.acym_escapeDB(acym_date($options['date-min'], 'Y-m-d H:i:s', false));
126 - }
127 - }
128 - if (!empty($options['date-max'])) {
129 - $options['date-max'] = acym_replaceDate($options['date-max']);
130 - if (!is_numeric($options['date-max'])) {
131 - $options['date-max'] = strtotime($options['date-max']);
132 - }
133 - if (!empty($options['date-max'])) {
134 - $otherConditions .= ' AND userlist'.$num.'.'.acym_secureDBColumn($options['date-type']).' < '.acym_escapeDB(acym_date($options['date-max'], 'Y-m-d H:i:s', false));
135 - }
136 - }
137 -
138 - if ($isAnyList) {
139 - $standardListType = acym_escapeDB(ListClass::LIST_TYPE_STANDARD);
140 -
141 - if (in_array($options['action'], ['notsub', 'notcurrentsub'])) {
142 - $statusCondition = $options['action'] == 'notcurrentsub' ? 'userlist.status = 1 AND ' : '';
143 - $subquery = 'SELECT userlist.user_id FROM #__acym_user_has_list AS userlist
144 - INNER JOIN #__acym_list AS list ON userlist.list_id = list.id
145 - WHERE '.$statusCondition.'list.type = '.$standardListType;
146 - $query->where[] = 'user.id NOT IN ('.$subquery.')';
147 - } else {
148 - $status = $options['action'] === 'sub' ? '1' : '0';
149 - $query->join['list'.$num] = '#__acym_user_has_list AS userlist'.$num.' ON user.id = userlist'.$num.'.user_id AND userlist'.$num.'.status = '.$status.$otherConditions;
150 - $query->join['listtype'.$num] = '#__acym_list AS list'.$num.' ON userlist'.$num.'.list_id = list'.$num.'.id AND list'.$num.'.type = '.$standardListType;
151 - }
152 - } else {
153 - $query->leftjoin['list'.$num] = '#__acym_user_has_list AS userlist'.$num.' ON user.id = userlist'.$num.'.user_id AND userlist'.$num.'.list_id = '.intval(
154 - $options['list']
155 - ).$otherConditions;
156 - if ($options['action'] == 'notsub') {
157 - $query->where[] = 'userlist'.$num.'.user_id IS NULL';
158 - } elseif ($options['action'] === 'notcurrentsub') {
159 - $query->where[] = '(userlist'.$num.'.user_id IS NULL OR userlist'.$num.'.status = 0)';
160 - } else {
161 - $status = $options['action'] == 'sub' ? '1' : '0';
162 - $query->where[] = 'userlist'.$num.'.status = '.intval($status);
163 - }
164 - }
165 -
166 - return $query->count();
167 - }
168 -
169 - public function onAcymProcessCondition_acy_list(&$query, &$options, $num, &$conditionNotValid)
170 - {
171 - $affectedRows = $this->processConditionAcyLists($query, $options, $num);
172 - if (empty($affectedRows)) $conditionNotValid++;
173 - }
174 -
175 - public function onAcymProcessCondition_acy_list_all(&$query, &$options, $num, &$conditionNotValid)
176 - {
177 - $affectedRows = $this->processConditionAcyLists($query, $options, $num);
178 -
179 - $res = false;
180 - switch ($options['operator']) {
181 - case '=':
182 - $res = $affectedRows == $options['number'];
183 - break;
184 - case '>':
185 - $res = $affectedRows > $options['number'];
186 - break;
187 - case '<':
188 - $res = $affectedRows < $options['number'];
189 - break;
190 - }
191 -
192 - if (!$res) {
193 - $conditionNotValid++;
194 - }
195 - }
196 -
197 - public function onAcymDeclareSummary_conditions(&$automation)
198 - {
199 - if (!empty($automation['acy_list_all'])) {
200 - $operators = ['=' => acym_translation('ACYM_EXACTLY'), '>' => acym_translation('ACYM_MORE_THAN'), '<' => acym_translation('ACYM_LESS_THAN')];
201 - $finalText = acym_translation('ACYM_THERE_IS').' '.acym_strtolower(
202 - $operators[$automation['acy_list_all']['operator']]
203 - ).' '.$automation['acy_list_all']['number'].' '.acym_translation('ACYM_ACYMAILING_USERS').' ';
204 - $listClass = new ListClass();
205 - $automation['acy_list_all']['list'] = $listClass->getOneById($automation['acy_list_all']['list'] ? : 0);
206 - if (empty($automation['acy_list_all']['list'])) {
207 - $automation = '<span class="acym__color__red">'.acym_translation('ACYM_SELECT_A_LIST').'</span>';
208 -
209 - return;
210 - }
211 - if ($automation['acy_list_all']['action'] == 'sub') $automation['acy_list_all']['action'] = 'ACYM_SUBSCRIBED';
212 - if ($automation['acy_list_all']['action'] == 'unsub') $automation['acy_list_all']['action'] = 'ACYM_UNSUBSCRIBED';
213 - if ($automation['acy_list_all']['action'] == 'notsub') $automation['acy_list_all']['action'] = 'ACYM__NOT_SUBSCRIBED';
214 - $finalText .= acym_translationSprintf(
215 - 'ACYM_CONDITION_ACY_LIST_SUMMARY',
216 - acym_translation($automation['acy_list_all']['action']),
217 - $automation['acy_list_all']['list']->name
218 - ).' ';
219 -
220 - $automation = $this->summaryDate($automation['acy_list_all'], $finalText);
221 - }
222 -
223 - $this->onAcymDeclareSummary_conditionsFilters(
224 - $automation,
225 - 'ACYM_CONDITION_ACY_LIST_SUMMARY',
226 - 'ACYM_IS_SUBSCRIBED',
227 - 'ACYM_IS_UNSUBSCRIBED',
228 - 'ACYM_IS_NOT_SUBSCRIBED',
229 - 'ACYM_IS_NOT_CURRENTLY_SUBSCRIBED'
230 - );
231 - }
232 -
233 - private function onAcymDeclareSummary_conditionsFilters(
234 - &$automation,
235 - string $key,
236 - string $keySub,
237 - string $keyUnsub,
238 - string $keyNotSub,
239 - string $keyNotCurrentSub
240 - ): void {
241 - if (!empty($automation['acy_list'])) {
242 - $finalText = '';
243 - $listClass = new ListClass();
244 - $automation['acy_list']['list'] = $listClass->getOneById($automation['acy_list']['list'] ? : 0);
245 -
246 - $listName = empty($automation['acy_list']['list'])
247 - ? acym_translation('ACYM_ANY_LIST')
248 - : $automation['acy_list']['list']->name;
249 -
250 - if ($automation['acy_list']['action'] === 'sub') $automation['acy_list']['action'] = $keySub;
251 - if ($automation['acy_list']['action'] === 'unsub') $automation['acy_list']['action'] = $keyUnsub;
252 - if ($automation['acy_list']['action'] === 'notsub') $automation['acy_list']['action'] = $keyNotSub;
253 - if ($automation['acy_list']['action'] === 'notcurrentsub') $automation['acy_list']['action'] = $keyNotCurrentSub;
254 - $finalText .= acym_translationSprintf(
255 - $key,
256 - acym_translation($automation['acy_list']['action']),
257 - $listName
258 - ).' ';
259 -
260 - $automation = $this->summaryDate($automation['acy_list'], $finalText);
261 - }
262 -
263 - if (!empty($automation['unconfirmed'])) {
264 - $automation = acym_translation('ACYM_ACTION_UNCONFIRM');
265 - }
266 - }
267 -
268 - private function summaryDate($automation, $finalText)
269 - {
270 - if (!empty($automation['date-min']) || !empty($automation['date-max'])) {
271 - $finalText .= acym_translationSprintf('ACYM_WHERE_DATE_ACY_LIST_SUMMARY', acym_strtolower(acym_translation('ACYM_'.strtoupper($automation['date-type']))));
272 -
273 - $dates = [];
274 - if (!empty($automation['date-min'])) {
275 - $automation['date-min'] = acym_replaceDate($automation['date-min']);
276 - $dates[] = acym_translationSprintf('ACYM_WHERE_DATE_MIN_ACY_LIST_SUMMARY', acym_date($automation['date-min'], 'd M Y H:i'));
277 - }
278 - if (!empty($automation['date-max'])) {
279 - $automation['date-max'] = acym_replaceDate($automation['date-max']);
280 - $dates[] = acym_translationSprintf('ACYM_WHERE_DATE_MAX_ACY_LIST_SUMMARY', acym_date($automation['date-max'], 'd M Y H:i'));
281 - }
282 -
283 - $finalText .= ' '.implode(' '.acym_strtolower(acym_translation('ACYM_AND')).' ', $dates);
284 - }
285 -
286 - return $finalText;
287 - }
288 -}