PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 11.1.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v11.1.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
← All changes | back/Controllers/Campaigns/Listing.php +0 -252 10.0.1 → 11.1.1 View file →
@@ -1,252 +1,0 @@
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 -}