PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.11.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.11.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.11.1, at back/Controllers/Campaigns/Listing.php

219 lines 8.1 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(): void
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(array &$data): void
75 {
76 $data['workflowHelper'] = new WorkflowHelper();
77 }
78
79 public function specificListing(): void
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(): void
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(array &$data): void
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(array &$data): void
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(array &$data): void
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(array &$data, string $campaignType = '', string $class = ''): void
162 {
163 $campaignsPerPage = $data['pagination']->getListLimit();
164 $page = $this->getVarFiltersListing('int', 'campaigns_pagination_page', 1);
165 $status = $data['status'];
166
167 $matchingCampaigns = $this->getMatchingElementsFromData(
168 [
169 'element_tab' => $campaignType,
170 'ordering' => $data['ordering'],
171 'search' => $data['search'],
172 'elementsPerPage' => $campaignsPerPage,
173 'offset' => ($page - 1) * $campaignsPerPage,
174 'tag' => $data['tag'],
175 'ordering_sort_order' => $data['orderingSortOrder'],
176 'status' => $data['status'],
177 'creator_id' => acym_isAdmin() ? 0 : acym_currentUserId(),
178 'campaign_type' => $data['campaign_type'] ?? '',
179 'advanced_total' => empty($class),
180 ],
181 $status,
182 $page,
183 empty($class) ? '' : $class
184 );
185
186 if (empty($class)) {
187 foreach ($matchingCampaigns['elements'] as $key => $campaign) {
188 $matchingCampaigns['elements'][$key]->scheduled = CampaignClass::SENDING_TYPE_SCHEDULED === $campaign->sending_type;
189 }
190
191 $data['allStatusFilter'] = $matchingCampaigns['total'];
192 $totalElement = empty($status) ? $data['allStatusFilter']->all : $data['allStatusFilter']->$status;
193 $data['statusAuto'] = CampaignClass::SENDING_TYPE_AUTO;
194 } else {
195 $totalElement = $matchingCampaigns['total']->total;
196 }
197
198 $data['pagination']->setStatus((int)$totalElement, $page, $campaignsPerPage);
199 $data['allCampaigns'] = $matchingCampaigns['elements'];
200 }
201
202 public function mailbox_action(): void
203 {
204 acym_setVar('layout', self::TASK_TYPE_MAILBOX_ACTION);
205
206 $data = [
207 'campaign_type' => 'campaigns',
208 'element_to_display' => lcfirst(acym_translation('ACYM_MAILBOX_ACTION_CAMPAIGN')),
209 ];
210 $this->prepareAllCampaignsListing($data);
211 $this->prepareToolbar($data);
212 $this->prepareListingClasses($data);
213
214 $data['menuClass'] = $this->menuClass;
215
216 parent::display($data);
217 }
218 }
219