PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.1.4
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.1.4
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 / Helpers / HeaderHelper.php

HeaderHelper.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 10.1.4, at back/Helpers/HeaderHelper.php

371 lines 16.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace AcyMailing\Helpers;
4
5 use AcyMailing\Core\AcymObject;
6
7 class HeaderHelper extends AcymObject
8 {
9 public function display(array $breadcrumb): string
10 {
11 $header = '<div class="cell large-6 xlarge-7 xxlarge-8 grid-x acym_vcenter">';
12 $header .= $this->getBreadcrumb($breadcrumb);
13 $header .= '</div>';
14
15 $header .= '<div class="cell large-6 xlarge-5 xxlarge-4 grid-x">';
16
17 $header .= '<div id="checkVersionArea" class="cell auto grid-x align-right check-version-area acym_vcenter padding-right-1">';
18 $header .= $this->checkVersionArea();
19 $header .= '</div>';
20
21 $header .= '<div class="cell shrink grid-x align-right acym_vcenter">';
22 $header .= $this->getCheckVersionButton();
23 $header .= $this->getHelpWedButton();
24 $header .= $this->getDocumentationButton();
25 $header .= $this->getNotificationCenter();
26 $header .= '</div>';
27
28 $header .= '</div>';
29
30 $header = '<div id="acym_header" class="grid-x margin-bottom-1">'.$header.'</div>';
31
32 return $this->getLastNews().$header;
33 }
34
35 private function getLastNews(): string
36 {
37 $lastNewsCheck = $this->config->get('last_news_check', 0);
38 if ($lastNewsCheck < time() - 7200) {
39 $context = stream_context_create(['http' => ['timeout' => 1]]);
40 $news = @file_get_contents(ACYM_ACYMAILING_WEBSITE.'acymnews.xml', false, $context);
41 $this->config->save(
42 [
43 'last_news_check' => time(),
44 'last_news' => base64_encode($news),
45 ],
46 false
47 );
48 } else {
49 $news = $this->config->get('last_news', '');
50 if (!empty($news)) $news = base64_decode($news);
51 }
52 if (empty($news)) {
53 return '';
54 }
55
56 $news = @simplexml_load_string($news);
57 if (empty($news->news)) {
58 return '';
59 }
60
61 $currentLanguage = acym_getLanguageTag();
62 $latestNews = null;
63 $doNotRemind = json_decode($this->config->get('remindme', '[]'));
64
65 foreach ($news->news as $oneNews) {
66 if (!empty($latestNews) && strtotime($latestNews->date) > strtotime($oneNews->date)) break;
67
68 $language = strtolower($oneNews->language);
69 if (empty($oneNews->published) || ($language != strtolower($currentLanguage) && ($language != 'default' || !empty($latestNews)))) {
70 continue;
71 }
72
73 if (!empty($oneNews->extension) && strtolower($oneNews->extension) !== 'acymailing') continue;
74
75 if (!empty($oneNews->cms) && strtolower($oneNews->cms) != strtolower('WordPress')) continue;
76
77 if (!empty($oneNews->level) && strtolower($oneNews->level) != strtolower($this->config->get('level'))) continue;
78
79 if (!empty($oneNews->version)) {
80 [$version, $operator] = explode('_', $oneNews->version);
81 if (!version_compare($this->config->get('version'), $version, $operator)) continue;
82 }
83
84 if (!empty($oneNews->mailermethod)) {
85 $sendMethod = $this->config->get('mailer_method', '');
86 if ($oneNews->mailermethod !== $sendMethod) continue;
87 }
88
89 if (in_array($oneNews->name, $doNotRemind)) continue;
90
91 $latestNews = $oneNews;
92 }
93
94 if (empty($latestNews)) {
95 return '';
96 }
97
98 $newsDisplay = '<div id="acym__header__banner__news" data-news="'.acym_escape($latestNews->name).'">';
99 $newsDisplay .= $latestNews->content;
100 $newsDisplay .= '</div>';
101
102 return $newsDisplay;
103 }
104
105 private function getBreadcrumb(array $breadcrumb): string
106 {
107 $links = [];
108 foreach ($breadcrumb as $oneLevel => $link) {
109 if (!empty($link)) {
110 $oneLevel = '<a href="'.$link.'">'.$oneLevel.'</a>';
111 }
112 $links[] = '<li>'.$oneLevel.'</li>';
113 }
114
115 if (count($links) > 1) {
116 $links[count($links) - 1] = str_replace('<li>', '<li class="last_link cell shrink"><span class="show-for-sr">Current: </span>', $links[count($links) - 1]);
117 }
118
119 $header = '<i class="cell shrink acym-logo"></i>';
120 $header .= '<div id="acym_global_navigation" class="cell auto">
121 <nav aria-label="You are here:" role="navigation">
122 <ul class="breadcrumbs grid-x">'.implode('<li class="breadcrumbs__separator"><i class="acymicon-keyboard-arrow-right"></i></li>', $links).'</ul>
123 </nav>
124 </div>';
125
126 return $header;
127 }
128
129 public function checkVersionArea(bool $reloading = false): string
130 {
131 $currentLevel = $this->config->get('level', '');
132 $currentVersion = $this->config->get('version', '');
133 $latestVersion = $this->config->get('latestversion', '');
134
135 $version = '<div id="acym_level_version_area" class="text-right">';
136 $version .= '<div id="acym_level">'.ACYM_NAME.' '.$currentLevel.' ';
137
138 if (version_compare($currentVersion, $latestVersion, '>=')) {
139 $version .= acym_tooltip(
140 [
141 'hoveredText' => '<span class="acym__color__green">'.$currentVersion.'</span>',
142 'textShownInTooltip' => acym_translation('ACYM_UP_TO_DATE'),
143 ]
144 );
145 } elseif (!empty($latestVersion)) {
146 if ('wordpress' === ACYM_CMS) {
147 $downloadLink = admin_url().'update-core.php';
148 } else {
149 $downloadLink = ACYM_ACYMAILING_WEBSITE.'account/license/" target="_blank';
150 }
151 $version .= acym_tooltip(
152 [
153 'hoveredText' => '<span class="acy_updateversion acym__color__red">'.$currentVersion.'</span>',
154 'textShownInTooltip' => acym_translationSprintf('ACYM_CLICK_UPDATE', $latestVersion),
155 'titleShownInTooltip' => acym_translation('ACYM_OLD_VERSION'),
156 'link' => $downloadLink,
157 ]
158 );
159 }
160
161 $version .= '</div></div>';
162
163 $expirationDate = $this->config->get('expirationdate', 0);
164 if ((empty($expirationDate) || $expirationDate == -1) && empty($this->config->get('acymailer_apikey', ''))) return $version;
165
166 $version .= '<div id="acym_expiration" class="text-right cell">';
167 if (acym_level(ACYM_ESSENTIAL) && ACYM_PRODUCTION) {
168 if ($expirationDate == -2) {
169 $version .= '<div class="acylicence_expired">
170 <a class="acy_attachlicence acymbuttons acym__color__red acym_link_license_tab"
171 href="'.acym_completeLink('configuration', false, false, true).'">'.acym_translation('ACYM_ATTACH_LICENCE').'</a>
172 </div>';
173 } elseif ($expirationDate < time()) {
174 $version .= acym_tooltip(
175 [
176 'hoveredText' => '<span class="acy_subscriptionexpired acym__color__red">'.acym_translation('ACYM_SUBSCRIPTION_EXPIRED').'</span>',
177 'textShownInTooltip' => acym_translation('ACYM_SUBSCRIPTION_EXPIRED_LINK'),
178 'link' => ACYM_ACYMAILING_WEBSITE.'account/license/',
179 ]
180 );
181 } else {
182 $version .= '<div class="acylicence_valid">
183 <span class="acy_subscriptionok acym__color__green">'.acym_translationSprintf(
184 'ACYM_VALID_UNTIL',
185 acym_getDate($expirationDate, acym_translation('ACYM_DATE_FORMAT_LC4'))
186 ).'</span>
187 </div>';
188 }
189 }
190
191 $creditRemainingSendingMethod = '';
192 acym_trigger('onAcymGetCreditRemainingSendingMethod', [&$creditRemainingSendingMethod, $reloading]);
193 if (!empty($creditRemainingSendingMethod)) {
194 $version .= '<div class="acy_sending_method_credits">
195 <span>'.$creditRemainingSendingMethod.'</span>
196 </div>';
197 }
198
199 $version .= '</div>';
200
201 return $version;
202 }
203
204 private function getCheckVersionButton(): string
205 {
206 if (ACYM_CMS == 'wordpress' && !acym_level(ACYM_ESSENTIAL)) {
207 return '';
208 }
209
210 $lastLicenseCheck = $this->config->get('lastlicensecheck', 0);
211 $time = time();
212 $checking = ($time > $lastLicenseCheck + 604800) ? $checking = '1' : '0';
213 if (empty($lastLicenseCheck)) $lastLicenseCheck = $time;
214
215 return acym_tooltip(
216 [
217 'hoveredText' => '<a id="checkVersionButton" type="button" class="grid-x align-center button_header medium-shrink acym_vcenter" data-check="'.acym_escape(
218 $checking
219 ).'"><i class="cell shrink acymicon-autorenew"></i></a>',
220 'textShownInTooltip' => acym_translation('ACYM_LAST_CHECK').' <span id="acym__check__version__last__check">'.acym_date($lastLicenseCheck, 'Y/m/d H:i').'</span>',
221 ]
222 );
223 }
224
225 private function getDocumentationButton(): string
226 {
227 return acym_tooltip(
228 [
229 'hoveredText' => '<a type="button" class="grid-x align-center button_header medium-shrink acym_vcenter" target="_blank" href="'.ACYM_DOCUMENTATION.'"><i class="cell shrink acymicon-book"></i></a>',
230 'textShownInTooltip' => acym_translation('ACYM_DOCUMENTATION'),
231 ]
232 );
233 }
234
235 private function getHelpWedButton(): string
236 {
237 if (ACYM_CMS != 'wordpress' || acym_level(ACYM_ESSENTIAL)) {
238 return '';
239 }
240
241 return '<a type="button" class="grid-x align-center button_header medium-shrink acym_vcenter" target="_blank" href="https://wordpress.org/support/plugin/acymailing/">
242 <i class="cell shrink acymicon-book"></i>
243 </a>';
244 }
245
246 public function getNotificationCenter(): string
247 {
248 $notifications = json_decode($this->config->get('notifications', '{}'), true);
249 $message = '';
250 $notificationLevel = 0;
251 if (!empty($_SESSION['acym_success'])) {
252 $message = $_SESSION['acym_success'];
253 $_SESSION['acym_success'] = '';
254 $notificationLevel = 1;
255 }
256
257 if (!empty($notifications)) {
258 foreach ($notifications as $notification) {
259 if ($notification['read']) continue;
260 if ($notification['level'] == 'info' && $notificationLevel < 2) $notificationLevel = 2;
261 if ($notification['level'] == 'warning' && $notificationLevel < 3) $notificationLevel = 3;
262 if ($notification['level'] == 'error' && $notificationLevel < 4) $notificationLevel = 4;
263 }
264 }
265
266 $iconToDisplay = '';
267 $tooltip = '';
268
269 switch ($notificationLevel) {
270 case 0:
271 $iconToDisplay = 'acymicon-bell';
272 $notificationLevel = '';
273 break;
274 case 1:
275 $iconToDisplay = 'acymicon-check-circle acym__color__green';
276 $notificationLevel = 'acym__header__notification__button__success acym__header__notification__pulse';
277 $tooltip = 'data-acym-tooltip="'.acym_escape($message).'" data-acym-tooltip-position="left"';
278 break;
279 case 2:
280 $iconToDisplay = 'acymicon-bell acym__color__blue';
281 $notificationLevel = 'acym__header__notification__button__info';
282 break;
283 case 3:
284 $iconToDisplay = 'acymicon-exclamation-triangle acym__color__orange';
285 $notificationLevel = 'acym__header__notification__button__warning';
286 break;
287 case 4:
288 $iconToDisplay = 'acymicon-exclamation-circle acym__color__red';
289 $notificationLevel = 'acym__header__notification__button__error';
290 break;
291 }
292
293 $notificationCenter = '<div class="cell grid-x align-center acym_vcenter medium-shrink acym__header__notification '.$notificationLevel.' button_header cursor-pointer" '.$tooltip.'>';
294 $notificationCenter .= '<i class="'.$iconToDisplay.'"></i>';
295 $notificationCenter .= '<div class="cell grid-x acym__header__notification__center align-center">';
296 $notificationCenter .= $this->getNotificationCenterInner($notifications);
297 $notificationCenter .= '</div>';
298 $notificationCenter .= '</div>';
299
300 return $notificationCenter;
301 }
302
303 public function getNotificationCenterInner(array $notifications): string
304 {
305 $notificationCenter = '';
306 if (empty($notifications)) {
307 $notificationCenter .= '<div class="cell grid-x acym__header__notification__one acym__header__notification__one__empty acym_vcenter">';
308 $notificationCenter .= '<h2 class="cell text-center">'.acym_translation('ACYM_YOU_DONT_HAVE_NOTIFICATIONS').'</h2>';
309 $notificationCenter .= '</div>';
310 } else {
311 $notificationCenter .= '<div class="cell grid-x acym__header__notification__toolbox"><p class="cell auto">'.acym_translation(
312 'ACYM_NOTIFICATIONS'
313 ).'</p><div class="cell shrink cursor-pointer acym__header__notification__toolbox__remove text-right">'.acym_translation('ACYM_DELETE_ALL').'</div></div>';
314 foreach ($notifications as $key => $notif) {
315 $fullMessageHover = $notif['message'];
316
317 if (strlen($notif['message']) > 150) {
318 $tag = new \stdClass();
319 $tag->wrap = 150;
320
321 $pluginHelper = new PluginHelper();
322 $notif['message'] = $pluginHelper->wrapText($notif['message'], $tag);
323 }
324 $fullMessageHover = $fullMessageHover != $notif['message'] ? 'data-acym-full="'.acym_escape($fullMessageHover).'"' : '';
325
326 $logo = $notif['level'] === 'info' ? 'acymicon-bell' : ($notif['level'] == 'warning' ? 'acymicon-exclamation-triangle' : 'acymicon-exclamation-circle');
327 $read = $notif['read'] ? 'acym__header__notification__one__read' : '';
328 $notificationCenter .= '<div class="'.$read.' cell grid-x acym__header__notification__one acym_vcenter acym_vcenter acym__header__notification__one__'.$notif['level'].'">';
329 $notificationCenter .= '<div class="cell small-3 align-center grid-x acym__header__notification__one__icon"><i class="cell '.$logo.'"></i></div>';
330 $notificationCenter .= '<div class="cell grid-x small-8"><p class="cell acym__header__notification__message" '.$fullMessageHover.'>'.$notif['message'];
331 $notificationCenter .= '<div class="cell acym__header__notification__one__date">'.acym_date($notif['date']).'</div></div>';
332 $notificationCenter .= '<i class="cell small-1 acym__header__notification__one__delete acymicon-close" data-id="'.acym_escape($key).'"></i>';
333 $notificationCenter .= '</div>';
334 }
335 }
336
337 return $notificationCenter;
338 }
339
340 public function addNotification(object $notif): string
341 {
342 if ($notif->level === 'success') {
343 $_SESSION['acym_success'] = $notif->message;
344
345 return '';
346 }
347
348 $notifications = json_decode($this->config->get('notifications', '[]'), true);
349 if (!is_array($notifications)) {
350 $notifications = [];
351 }
352
353 $notif->message = str_replace('<br />', "\r\n", $notif->message);
354 $notif->message = strip_tags($notif->message, '<a>');
355
356 foreach ($notifications as $key => $oneNotif) {
357 if ($oneNotif['message'] === $notif->message && $oneNotif['level'] === $notif->level) unset($notifications[$key]);
358 }
359 $notifications = array_values($notifications);
360
361 $notif->id = uniqid();
362 array_unshift($notifications, $notif);
363
364 if (count($notifications) > 10) unset($notifications[10]);
365
366 $this->config->save(['notifications' => json_encode($notifications)]);
367
368 return $notif->id;
369 }
370 }
371