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 / SegmentClass.php

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

138 lines 4.3 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\Helpers\PaginationHelper;
6 use AcyMailing\Core\AcymClass;
7
8 class SegmentClass extends AcymClass
9 {
10 public function __construct()
11 {
12 parent::__construct();
13
14 $this->table = 'segment';
15 $this->pkey = 'id';
16 }
17
18 public function getMatchingElements(array $settings = []): array
19 {
20 $query = 'SELECT segment.* FROM #__acym_segment AS segment';
21 $queryCount = 'SELECT COUNT(segment.id) AS total, SUM(active) AS totalActive FROM #__acym_segment AS segment';
22
23 if (!empty($settings['search'])) {
24 $filters[] = 'name LIKE '.acym_escapeDB('%'.$settings['search'].'%');
25 }
26
27 if (!empty($filters)) {
28 $query .= ' WHERE ('.implode(') AND (', $filters).')';
29 $queryCount .= ' WHERE ('.implode(') AND (', $filters).')';
30 }
31
32 if (!empty($settings['status'])) {
33 $query .= empty($filters) ? ' WHERE ' : ' AND ';
34 $query .= 'active = '.($settings['status'] == 'active' ? '1' : '0');
35 }
36
37 if (!empty($settings['ordering']) && !empty($settings['ordering_sort_order'])) {
38 $query .= ' ORDER BY '.acym_secureDBColumn($settings['ordering']).' '.acym_secureDBColumn(strtoupper($settings['ordering_sort_order']));
39 } else {
40 $query .= ' ORDER BY id asc';
41 }
42
43 if (empty($settings['offset']) || $settings['offset'] < 0) {
44 $settings['offset'] = 0;
45 }
46
47 if (empty($settings['elementsPerPage']) || $settings['elementsPerPage'] < 1) {
48 $pagination = new PaginationHelper();
49 $settings['elementsPerPage'] = $pagination->getListLimit();
50 }
51
52 $results['elements'] = acym_loadObjectList($query, '', $settings['offset'], $settings['elementsPerPage']);
53 $results['total'] = acym_loadObject($queryCount);
54
55 return $results;
56 }
57
58 public function getOneById($id)
59 {
60 $segment = parent::getOneById($id);
61
62 if (!empty($segment)) {
63 $segment->filters = empty($segment->filters) ? [] : json_decode($segment->filters, true);
64 }
65
66 return $segment;
67 }
68
69 public function getByIds($ids)
70 {
71 $segments = parent::getByIds($ids);
72
73 if (empty($segments)) return [];
74
75 foreach ($segments as $key => $segment) {
76 $segments[$key]->filters = empty($segment->filters) ? [] : json_decode($segment->filters, true);
77 }
78
79 return $segments;
80 }
81
82 public function getAllForSelect($firstEmpty = true)
83 {
84 $segments = acym_loadObjectList('SELECT * FROM #__acym_segment WHERE active = 1');
85
86 if ($firstEmpty) {
87 $return = [
88 '' => acym_translation('ACYM_SELECT_SEGMENT'),
89 ];
90 } else {
91 $return = [];
92 }
93
94 foreach ($segments as $segment) {
95 $return[$segment->id] = $segment->name;
96 }
97
98 return $return;
99 }
100
101 public function updateSegments()
102 {
103 $segments = $this->getAll();
104
105 if (empty($segments)) return;
106
107 foreach ($segments as $segment) {
108 $segment->filters = json_decode($segment->filters, true);
109 $keysOr = array_keys($segment->filters);
110 $keysAnd = array_keys($segment->filters[$keysOr[0]]);
111 if (is_numeric($keysAnd[0])) continue;
112 $segment->filters = json_encode([0 => $segment->filters], JSON_FORCE_OBJECT);
113 $this->save($segment);
114 }
115
116 $campaigns = acym_loadObjectList('SELECT * FROM #__acym_campaign WHERE sending_params LIKE "%filters%"');
117
118 if (empty($campaigns)) return;
119
120 $campaignClass = new CampaignClass();
121
122 foreach ($campaigns as $campaign) {
123 $campaign->sending_params = json_decode($campaign->sending_params, true);
124 if (empty($campaign->sending_params['segment'])) continue;
125
126 $keysOr = array_keys($campaign->sending_params['segment']['filters']);
127 $keysAnd = array_keys($campaign->sending_params['segment']['filters'][$keysOr[0]]);
128
129 if (is_numeric($keysAnd[0])) continue;
130
131 $campaign->sending_params['segment']['filters'] = (object)[0 => $campaign->sending_params['segment']['filters']];
132 $campaign->sending_params = json_encode($campaign->sending_params);
133
134 $campaignClass->save($campaign);
135 }
136 }
137 }
138