PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 11.0.2
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v11.0.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 / Classes / SegmentClass.php

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

140 lines 4.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\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(int $id): ?object
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(array $ids): array
70 {
71 $segments = parent::getByIds($ids);
72
73 if (empty($segments)) {
74 return [];
75 }
76
77 foreach ($segments as $segment) {
78 $segment->filters = empty($segment->filters) ? [] : json_decode($segment->filters, true);
79 }
80
81 return $segments;
82 }
83
84 public function getAllForSelect(bool $firstEmpty = true): array
85 {
86 $segments = acym_loadObjectList('SELECT * FROM #__acym_segment WHERE active = 1');
87
88 if ($firstEmpty) {
89 $return = [
90 '' => acym_translation('ACYM_SELECT_SEGMENT'),
91 ];
92 } else {
93 $return = [];
94 }
95
96 foreach ($segments as $segment) {
97 $return[$segment->id] = $segment->name;
98 }
99
100 return $return;
101 }
102
103 public function updateSegments(): void
104 {
105 $segments = $this->getAll();
106
107 if (empty($segments)) return;
108
109 foreach ($segments as $segment) {
110 $segment->filters = json_decode($segment->filters, true);
111 $keysOr = array_keys($segment->filters);
112 $keysAnd = array_keys($segment->filters[$keysOr[0]]);
113 if (is_numeric($keysAnd[0])) continue;
114 $segment->filters = json_encode([0 => $segment->filters], JSON_FORCE_OBJECT);
115 $this->save($segment);
116 }
117
118 $campaigns = acym_loadObjectList('SELECT * FROM #__acym_campaign WHERE sending_params LIKE "%filters%"');
119
120 if (empty($campaigns)) return;
121
122 $campaignClass = new CampaignClass();
123
124 foreach ($campaigns as $campaign) {
125 $campaign->sending_params = json_decode($campaign->sending_params, true);
126 if (empty($campaign->sending_params['segment'])) continue;
127
128 $keysOr = array_keys($campaign->sending_params['segment']['filters']);
129 $keysAnd = array_keys($campaign->sending_params['segment']['filters'][$keysOr[0]]);
130
131 if (is_numeric($keysAnd[0])) continue;
132
133 $campaign->sending_params['segment']['filters'] = (object)[0 => $campaign->sending_params['segment']['filters']];
134 $campaign->sending_params = json_encode($campaign->sending_params);
135
136 $campaignClass->save($campaign);
137 }
138 }
139 }
140