PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.2.2
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.2.2
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 / dynamics / user / UserAutomationConditions.php

UserAutomationConditions.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 10.2.2, at back/dynamics/user/UserAutomationConditions.php

262 lines 11.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 use AcyMailing\Helpers\AutomationHelper;
4 use AcyMailing\Types\OperatorInType;
5 use AcyMailing\Types\OperatorType;
6
7 trait UserAutomationConditions
8 {
9 public function onAcymDeclareConditions(&$conditions)
10 {
11 $allGroups = acym_getGroups();
12 $groups = ['' => acym_translation('ACYM_NO_GROUP')];
13 foreach ($allGroups as $group) {
14 $groups[$group->id] = $group->text;
15 }
16 $operatorIn = new OperatorInType();
17
18 $conditions['user']['acy_group'] = new stdClass();
19 $conditions['user']['acy_group']->name = acym_translation('ACYM_GROUP');
20 $isJoomla = ACYM_CMS == 'joomla';
21 ob_start();
22 include acym_getPartial('conditions', 'acy_group');
23 $conditions['user']['acy_group']->option = ob_get_clean();
24
25 $cmsFields = [];
26 foreach (acym_getColumns('users', false) as $key => $column) {
27 $cmsFields[$column] = $column;
28 }
29
30 if (ACYM_CMS == 'joomla' && ACYM_J37) {
31 $query = 'SELECT id, title
32 FROM #__fields
33 WHERE context = "com_users.user"
34 AND state = 1
35 AND type IN ("calendar", "checkboxes", "color", "integer", "list", "radio", "sql", "text", "url")
36 ORDER BY title ASC';
37 $customFields = acym_loadObjectList($query);
38 foreach ($customFields as $oneCF) {
39 $cmsFields['cf_'.$oneCF->id] = $oneCF->title;
40 }
41 }
42 $excluded = ['password', 'params', 'activation', 'lastResetTime', 'resetCount', 'optKey', 'otep', 'requireReset', 'user_pass', 'user_activation_key'];
43 foreach ($excluded as $oneExcluded) {
44 unset($cmsFields[$oneExcluded]);
45 }
46
47 $operator = new OperatorType();
48
49 $conditions['user']['acy_cmsfield'] = new stdClass();
50 $conditions['user']['acy_cmsfield']->name = acym_translation('ACYM_ACCOUNT_USER_FIELD');
51 ob_start();
52 include acym_getPartial('conditions', 'acy_cmsfield');
53 $conditions['user']['acy_cmsfield']->option = ob_get_clean();
54
55 $conditions['classic']['acy_totaluser'] = new stdClass();
56 $conditions['classic']['acy_totaluser']->name = acym_translation('ACYM_NUMBER_OF_SUBSCRIBERS');
57 $conditions['classic']['acy_totaluser']->option = '<div class="cell shrink acym__automation__inner__text">'.acym_translation('ACYM_THERE_IS').'</div>';
58 $conditions['classic']['acy_totaluser']->option .= '<div class="intext_select_automation cell">';
59 $conditions['classic']['acy_totaluser']->option .= acym_select(
60 ['=' => acym_translation('ACYM_EXACTLY'), '>' => acym_translation('ACYM_MORE_THAN'), '<' => acym_translation('ACYM_LESS_THAN')],
61 'acym_condition[conditions][__numor__][__numand__][acy_totaluser][operator]',
62 null,
63 ['class' => 'intext_select_automation acym__select']
64 );
65 $conditions['classic']['acy_totaluser']->option .= '</div>';
66 $conditions['classic']['acy_totaluser']->option .= '<input type="number" min="0" class="intext_input_automation cell" name="acym_condition[conditions][__numor__][__numand__][acy_totaluser][number]">';
67 $conditions['classic']['acy_totaluser']->option .= '<div class="cell shrink acym__automation__inner__text">'.acym_translation('ACYM_ACYMAILING_USERS').'</div>';
68
69 $conditions['both']['acy_toss'] = new stdClass();
70 $conditions['both']['acy_toss']->name = acym_translation('ACYM_TOSS');
71 $conditions['both']['acy_toss']->option = '<input type="hidden" name="acym_condition[conditions][__numor__][__numand__][acy_toss][toss]" value="true"><div class="acym__automation__inner__text">'.acym_translation(
72 'ACYM_TOSS_DESC'
73 ).'</div>';
74 }
75
76 public function onAcymDeclareConditionsScenario(&$conditions)
77 {
78 $this->onAcymDeclareConditions($conditions);
79 }
80
81 public function onAcymProcessCondition_acy_toss(&$query, $option, $num, &$conditionNotValid)
82 {
83 if (!mt_rand(0, 1)) $conditionNotValid++;
84 }
85
86 public function onAcymProcessCondition_acy_totaluser(&$query, $option, $num, &$conditionNotValid)
87 {
88 $numberUsers = $query->count();
89 $res = false;
90
91 switch ($option['operator']) {
92 case '=' :
93 $res = $numberUsers == $option['number'];
94 break;
95 case '>' :
96 $res = $numberUsers > $option['number'];
97 break;
98 case '<' :
99 $res = $numberUsers < $option['number'];
100 break;
101 }
102
103 if (!$res) $conditionNotValid++;
104 }
105
106 public function onAcymProcessCondition_acy_group(&$query, $options, $num, &$conditionNotValid)
107 {
108 $affectedRows = $this->_processAcyGroup($query, $options, $num);
109 if (empty($affectedRows)) $conditionNotValid++;
110 }
111
112 private function _processAcyGroup(&$query, $options, $num)
113 {
114 if (empty($options['group'])) {
115 if (ACYM_CMS === 'joomla') {
116 $operator = (empty($options['in']) || $options['in'] === 'in') ? 'IS NULL' : 'IS NOT NULL AND cmsuser'.$num.'.user_id != 0';
117 $query->leftjoin['cmsuser'.$num] = '#__user_usergroup_map AS cmsuser'.$num.'
118 ON cmsuser'.$num.'.user_id = user.cms_id ';
119 } else {
120 $operator = (empty($options['in']) || $options['in'] === 'in') ? 'IS NOT NULL AND cmsuser'.$num.'.user_id != 0' : 'IS NULL AND user.cms_id != 0';
121 $query->leftjoin['cmsuser'.$num] = '#__usermeta AS cmsuser'.$num.'
122 ON cmsuser'.$num.'.user_id = user.cms_id
123 AND cmsuser'.$num.'.meta_key = "#__capabilities"
124 AND cmsuser'.$num.'.meta_value = "a:0:{}"';
125 }
126 } else {
127 $operator = (empty($options['in']) || $options['in'] === 'in') ? 'IS NOT NULL AND cmsuser'.$num.'.user_id != 0' : 'IS NULL';
128
129 if (ACYM_CMS === 'joomla') {
130 if (empty($options['subgroup'])) {
131 $value = ' = '.intval($options['group']);
132 } else {
133 $lftrgt = acym_loadObject('SELECT lft, rgt FROM #__usergroups WHERE id = '.intval($options['group']));
134 $allSubGroups = acym_loadResultArray('SELECT id FROM #__usergroups WHERE lft > '.intval($lftrgt->lft).' AND rgt < '.intval($lftrgt->rgt));
135 array_unshift($allSubGroups, $options['group']);
136 $value = ' IN ('.implode(', ', $allSubGroups).')';
137 }
138
139 $query->leftjoin['cmsuser'.$num] = '#__user_usergroup_map AS cmsuser'.$num.'
140 ON cmsuser'.$num.'.user_id = user.cms_id
141 AND cmsuser'.$num.'.group_id'.$value;
142 } else {
143 $query->leftjoin['cmsuser'.$num] = '#__usermeta AS cmsuser'.$num.'
144 ON cmsuser'.$num.'.user_id = user.cms_id
145 AND cmsuser'.$num.'.meta_key = "#__capabilities"
146 AND cmsuser'.$num.'.meta_value LIKE '.acym_escapeDB('%'.strlen($options['group']).':"'.acym_secureDBColumn($options['group']).'"%');
147 }
148 }
149
150 $query->where[] = 'cmsuser'.$num.'.user_id '.$operator;
151
152 return $query->count();
153 }
154
155 public function onAcymProcessCondition_acy_cmsfield(&$query, $options, $num, &$conditionNotValid)
156 {
157 $affectedRows = $this->_processAcyCMSField($query, $options, $num);
158 if (empty($affectedRows)) $conditionNotValid++;
159 }
160
161 private function _processAcyCMSField(&$query, $options, $num)
162 {
163 if (empty($options['field'])) {
164 return;
165 }
166
167 if (strpos($options['field'], 'cf_') !== false) {
168 $cfId = substr($options['field'], 3);
169 $query->leftjoin['cmsuserfields'.$num] = '#__fields_values AS cmsuserfields'.$num.' ON cmsuserfields'.$num.'.item_id = user.cms_id AND cmsuserfields'.$num.'.field_id = '.intval(
170 $cfId
171 );
172 $query->where[] = $query->convertQuery('cmsuserfields'.$num, 'value', $options['operator'], $options['value']);
173 } else {
174 $type = '';
175 $query->leftjoin['cmsuser'.$num] = '#__users AS cmsuser'.$num.' ON cmsuser'.$num.'.id = user.cms_id';
176
177 if (in_array($options['field'], ['registerDate', 'lastvisitDate', 'user_registered'])) {
178 $type = AutomationHelper::TYPE_DATETIME;
179 $options['value'] = acym_replaceDate($options['value']);
180
181 if (!is_numeric($options['value']) && strtotime($options['value']) !== false) {
182 $options['value'] = strtotime($options['value']);
183 }
184 if (is_numeric($options['value'])) {
185 $options['value'] = date('Y-m-d H:i:s', $options['value']);
186 }
187 }
188
189 $query->where[] = $query->convertQuery(
190 'cmsuser'.$num,
191 $options['field'],
192 $options['operator'],
193 $options['value'],
194 $type
195 );
196 }
197
198 return $query->count();
199 }
200
201 public function onAcymDeclareSummary_conditions(&$automation)
202 {
203 $this->_summaryGroup($automation);
204
205 if (!empty($automation['acy_cmsfield'])) {
206 $automation = acym_translationSprintf(
207 'ACYM_CONDITION_ACY_CMS_FIELD_SUMMARY',
208 $automation['acy_cmsfield']['field'],
209 $automation['acy_cmsfield']['operator'],
210 $automation['acy_cmsfield']['value']
211 );
212 }
213
214 if (!empty($automation['acy_totaluser'])) {
215 $operators = ['=' => acym_translation('ACYM_EXACTLY'), '>' => acym_translation('ACYM_MORE_THAN'), '<' => acym_translation('ACYM_LESS_THAN')];
216 $automation = acym_translation('ACYM_THERE_IS').' '.acym_strtolower(
217 $operators[$automation['acy_totaluser']['operator']]
218 ).' '.$automation['acy_totaluser']['number'].' '.acym_translation('ACYM_ACYMAILING_USERS').' ';
219 }
220
221 if (!empty($automation['acy_toss'])) {
222 $automation = acym_translation('ACYM_TOSS_DESC');
223 }
224 }
225
226 private function _summaryGroup(&$automation)
227 {
228 if (empty($automation['acy_group'])) return;
229
230 if ('joomla' === ACYM_CMS) {
231 $allGroups = acym_getGroups();
232 $groups = [];
233 foreach ($allGroups as $group) {
234 if ($automation['acy_group']['group'] == $group->id) {
235 $automation['acy_group']['group'] = $group->text;
236 }
237 $groups[$group->id] = $group->text;
238 }
239 } else {
240 $groupKey = 'ACYM_'.strtoupper($automation['acy_group']['group']);
241 if (acym_translationExists($groupKey)) {
242 $automation['acy_group']['group'] = $groupKey;
243 }
244 }
245
246 if (empty($automation['acy_group']['group'])) {
247 $automation['acy_group']['group'] = acym_translation('ACYM_NO_GROUP');
248 }
249
250 $finalText = acym_translationSprintf(
251 'ACYM_FILTER_ACY_GROUP_SUMMARY',
252 acym_translation($automation['acy_group']['in'] == 'in' ? 'ACYM_IN' : 'ACYM_NOT_IN'),
253 acym_translation($automation['acy_group']['group'])
254 );
255 if ('joomla' === ACYM_CMS) {
256 $finalText .= $automation['acy_group']['subgroup'] == 1 ? ' '.acym_translation('ACYM_FILTER_ACY_GROUP_SUBGROUP_SUMMARY') : '';
257 }
258
259 $automation = $finalText;
260 }
261 }
262