PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.0.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.0.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
acymailing / back / Controllers / Campaigns / Listing.php

Listing.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 10.0.1, at back/Controllers/Campaigns/Listing.php

253 lines 9.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace AcyMailing\Controllers\Campaigns;
4
5 use AcyMailing\Classes\CampaignClass;
6 use AcyMailing\Classes\MailClass;
7 use AcyMailing\Classes\TagClass;
8 use AcyMailing\Helpers\PaginationHelper;
9 use AcyMailing\Helpers\ToolbarHelper;
10 use AcyMailing\Helpers\WorkflowHelper;
11
12
13 trait Listing
14 {
15 public function listing()
16 {
17 $this->storeRedirectListing(true);
18 }
19
20 public function storeRedirectListing(bool $fromListing = false): void
21 {
22 acym_session();
23 $isFrontJoomla = !acym_isAdmin() && ACYM_CMS === 'joomla';
24 $variableName = $isFrontJoomla ? 'ctrl_stored_front' : 'ctrl_stored';
25
26 $currentTask = acym_getVar('string', 'task', '');
27 if (!in_array($currentTask, self::TASKS_TO_REMEMBER_FOR_LISTING) && !$fromListing) {
28 return;
29 }
30
31 if ((empty($currentTask) || !in_array($currentTask, self::TASKS_TO_REMEMBER_FOR_LISTING)) && !empty($_SESSION[$variableName])) {
32 $taskToGo = is_array($_SESSION[$variableName]) ? $_SESSION[$variableName]['task'].'&type='.$_SESSION[$variableName]['type'] : $_SESSION[$variableName];
33 $link = acym_completeLink(($isFrontJoomla ? 'front' : '').'campaigns&task='.$taskToGo, false, true);
34 acym_redirect($link);
35 } else {
36 if (empty($currentTask) || !in_array($currentTask, self::TASKS_TO_REMEMBER_FOR_LISTING)) {
37 $currentTask = self::TASK_TYPE_CAMPAIGN;
38 }
39
40 if ($currentTask === self::TASK_TYPE_SPECIFIC_LISTING) {
41 $type = acym_getVar('string', 'type', '');
42 $currentTask = empty($type) ? self::TASK_TYPE_CAMPAIGN : ['task' => $currentTask, 'type' => $type];
43 }
44
45 $_SESSION[$variableName] = $currentTask;
46 }
47
48 $taskToCall = is_array($currentTask) ? $currentTask['task'] : $currentTask;
49
50 if ($fromListing && method_exists($this, $taskToCall)) {
51 $this->$taskToCall();
52 }
53 }
54
55 public function setTaskListing(string $type): bool
56 {
57 $task = self::CAMPAIGN_TYPE_TO_TASK[$type] ?? self::TASK_TYPE_CAMPAIGN;
58
59 if ($task === self::TASK_TYPE_SPECIFIC_LISTING) {
60 $task = [
61 'task' => self::TASK_TYPE_SPECIFIC_LISTING,
62 'type' => $type,
63 ];
64 }
65
66 $isFrontJoomla = !acym_isAdmin() && ACYM_CMS === 'joomla';
67 $variableName = $isFrontJoomla ? 'ctrl_stored_front' : 'ctrl_stored';
68 acym_session();
69 $_SESSION[$variableName] = $task;
70
71 return true;
72 }
73
74 private function prepareListingClasses(&$data)
75 {
76 $data['workflowHelper'] = new WorkflowHelper();
77 }
78
79 public function specificListing()
80 {
81 acym_setVar('layout', 'specific_listing');
82
83 $type = acym_getVar('string', 'type');
84
85 $data = [
86 'type' => $type,
87 'campaign_type' => 'campaigns',
88 ];
89 $this->getAllParamsRequest($data);
90 $this->prepareListingClasses($data);
91 $this->prepareToolbar($data);
92
93 acym_trigger('onAcymCampaignDataSpecificListing', [&$data, $type]);
94
95 parent::display($data);
96 }
97
98 public function campaigns()
99 {
100 acym_setVar('layout', self::TASK_TYPE_CAMPAIGN);
101
102 $data = [
103 'campaign_type' => 'campaigns',
104 'element_to_display' => lcfirst(acym_translation('ACYM_CAMPAIGNS')),
105 ];
106 $this->prepareAllCampaignsListing($data);
107 $this->prepareToolbar($data);
108 $this->prepareListingClasses($data);
109
110 $data['menuClass'] = $this->menuClass;
111
112 parent::display($data);
113 }
114
115 public function prepareToolbar(&$data)
116 {
117 $toolbarHelper = new ToolbarHelper();
118 $toolbarHelper->addSearchBar($data['search'], 'campaigns_search');
119 $toolbarHelper->addButton(acym_translation('ACYM_CREATE'), ['data-task' => 'newEmail'], 'add', true);
120 if (acym_isAdmin() && (empty($data['campaign_type']) || $data['campaign_type'] !== MailClass::TYPE_FOLLOWUP)) {
121 $toolbarHelper->addFilterByTag($data, 'campaigns_tag', 'acym__campaigns__filter__tags acym__select');
122 }
123
124 $data['toolbar'] = $toolbarHelper;
125 }
126
127 private function getAllParamsRequest(&$data)
128 {
129 $tagClass = new TagClass();
130 $data['search'] = $this->getVarFiltersListing('string', 'campaigns_search', '');
131 $data['tag'] = $this->getVarFiltersListing('string', 'campaigns_tag', '');
132 $data['allTags'] = $tagClass->getAllTagsByType(TagClass::TYPE_MAIL);
133 $data['pagination'] = new PaginationHelper();
134 $data['status'] = '';
135 if (isset($data['campaign_type'])) {
136 $data['status'] = $this->getVarFiltersListing('string', $data['campaign_type'].'_status', '');
137 $data['ordering'] = $this->getVarFiltersListing('string', $data['campaign_type'].'_ordering', 'id');
138 $data['orderingSortOrder'] = $this->getVarFiltersListing('string', $data['campaign_type'].'_ordering_sort_order', 'desc');
139 } elseif (isset($data['email_type'])) {
140 $data['ordering'] = $this->getVarFiltersListing('string', $data['email_type'].'_ordering', 'id');
141 $data['orderingSortOrder'] = $this->getVarFiltersListing('string', $data['email_type'].'_ordering_sort_order', 'desc');
142 }
143
144 if (!empty($data['tag'])) {
145 $data['status_toolbar'] = [
146 'campaigns_tag' => $data['tag'],
147 ];
148 }
149 }
150
151 private function prepareAllCampaignsListing(&$data)
152 {
153 $this->getAllParamsRequest($data);
154 $this->prepareEmailsListing($data, $data['campaign_type']);
155 if ($data['campaign_type'] === self::TASK_TYPE_CAMPAIGN_AUTO) {
156 $this->getAutoCampaignsFrequency($data);
157 $this->getIsPendingGenerated($data);
158 }
159 }
160
161 public function prepareEmailsListing(&$data, $campaignType = '', $class = '')
162 {
163 $campaignsPerPage = $data['pagination']->getListLimit();
164 $page = $this->getVarFiltersListing('int', 'campaigns_pagination_page', 1);
165 $status = $data['status'];
166
167 $campaignClass = new CampaignClass();
168 $matchingCampaigns = $this->getMatchingElementsFromData(
169 [
170 'element_tab' => $campaignType,
171 'ordering' => $data['ordering'],
172 'search' => $data['search'],
173 'elementsPerPage' => $campaignsPerPage,
174 'offset' => ($page - 1) * $campaignsPerPage,
175 'tag' => $data['tag'],
176 'ordering_sort_order' => $data['orderingSortOrder'],
177 'status' => $data['status'],
178 'creator_id' => acym_isAdmin() ? 0 : acym_currentUserId(),
179 ],
180 $status,
181 $page,
182 empty($class) ? '' : $class
183 );
184
185 if (empty($class)) {
186 foreach ($matchingCampaigns['elements'] as $key => $campaign) {
187 $matchingCampaigns['elements'][$key]->scheduled = CampaignClass::SENDING_TYPE_SCHEDULED == $campaign->sending_type;
188 }
189 }
190
191 if (empty($class)) {
192 $data['allStatusFilter'] = $this->getCountStatusFilter($matchingCampaigns['total'], $data['campaign_type']);
193 if (self::TASK_TYPE_CAMPAIGN_AUTO === $data['campaign_type'] && 'generated' === $data['status']) {
194 $data['allStatusFilter']->all = $campaignClass->getCountCampaignType(CampaignClass::SENDING_TYPE_AUTO);
195 }
196 $totalElement = empty($status) ? $data['allStatusFilter']->all : $data['allStatusFilter']->$status;
197 $data['statusAuto'] = CampaignClass::SENDING_TYPE_AUTO;
198 } else {
199 $totalElement = $matchingCampaigns['total'];
200 }
201
202 $data['pagination']->setStatus($totalElement, $page, $campaignsPerPage);
203 $data['allCampaigns'] = $matchingCampaigns['elements'];
204 }
205
206 public function getCountStatusFilter($allCampaigns, $type)
207 {
208 $allCountStatus = new \stdClass();
209
210 if ($type == 'campaigns') {
211 $this->getCountStatusFilterCampaigns($allCampaigns, $allCountStatus);
212 } else {
213 $this->getCountStatusFilterCampaignsAuto($allCampaigns, $allCountStatus);
214 }
215
216 return $allCountStatus;
217 }
218
219 private function getCountStatusFilterCampaigns($allCampaigns, &$allCountStatus)
220 {
221 $allCountStatus->all = 0;
222 $allCountStatus->scheduled = 0;
223 $allCountStatus->sent = 0;
224 $allCountStatus->draft = 0;
225
226 foreach ($allCampaigns as $campaign) {
227 if (empty($campaign->parent_id)) {
228 $allCountStatus->all += 1;
229 if (CampaignClass::SENDING_TYPE_SCHEDULED == $campaign->sending_type) $allCountStatus->scheduled += 1;
230 $allCountStatus->sent += $campaign->sent;
231 $allCountStatus->draft += $campaign->draft;
232 }
233 }
234 }
235
236 public function mailbox_action()
237 {
238 acym_setVar('layout', self::TASK_TYPE_MAILBOX_ACTION);
239
240 $data = [
241 'campaign_type' => 'campaigns',
242 'element_to_display' => lcfirst(acym_translation('ACYM_MAILBOX_ACTION_CAMPAIGN')),
243 ];
244 $this->prepareAllCampaignsListing($data);
245 $this->prepareToolbar($data);
246 $this->prepareListingClasses($data);
247
248 $data['menuClass'] = $this->menuClass;
249
250 parent::display($data);
251 }
252 }
253