PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 11.1.0
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v11.1.0
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/SegmentClass.php +139 -0 10.2.0 → 11.1.0 View file →
@@ -1,0 +1,139 @@
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 +}