PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.17.6
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.17.6
1.19.8 1.19.7 1.19.6 1.19.5 trunk 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.12.0 1.13.0 1.14.0 1.15.0 1.15.1 1.15.2 1.15.3 1.16.0 1.16.1 1.16.2 1.16.3 1.16.4 1.16.5 1.16.6 1.16.7 1.16.8 1.17.0 1.17.6 1.17.7 1.17.8 1.17.9 1.18.0 1.18.1 1.18.2 1.18.3 1.18.4 1.18.5 1.18.6 1.18.7 1.18.8 1.18.9 1.19.0 1.19.1 1.19.2 1.19.3 1.19.4 1.3.19 1.3.20 1.4.0 1.4.1 1.5.0 1.5.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.16 1.5.17 1.5.18 1.5.19 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.7.0 1.7.1 1.8.0 1.8.1 1.8.3 1.9.0 1.9.1 1.9.2
nitropack / classes / WordPress / Notifications.php
nitropack / classes / WordPress Last commit date
Settings 1 year ago Config.php 2 years ago Cron.php 1 year ago NitroPack.php 1 year ago Notifications.php 1 year ago Settings.php 1 year ago
Notifications.php
90 lines
1 <?php
2 namespace NitroPack\WordPress;
3 use NitroPack\HttpClient\HttpClient;
4 use \NitroPack\SDK\Filesystem;
5
6 class Notifications {
7 private $cacheTtl = 3600;
8 private $nitro;
9 private $notifications;
10
11 public function __construct($nitro) {
12 $this->nitro = $nitro;
13 $this->notifications = NULL;
14 }
15
16 public function get($type = NULL) {
17 if ($this->notifications === NULL) {
18 $this->load();
19 }
20
21 if (isset($this->notifications[$this->nitro->getSiteId()])) {
22 $result = $this->notifications[$this->nitro->getSiteId()];
23 if ($type) {
24 $notifications = isset($result['notifications'][$type]) ? $result['notifications'][$type] : [];
25 } else {
26 $notifications = $result['notifications'];
27 }
28 } else {
29 $notifications = [];
30 }
31
32 return apply_filters('get_nitropack_notifications', $notifications, $type);
33 }
34
35 private function load() {
36 $this->notifications = [];
37
38 $notificationsFile = nitropack_trailingslashit(NITROPACK_DATA_DIR) . 'notifications.json';
39 if(Filesystem::fileExists($notificationsFile)) {
40 $this->notifications = json_decode(Filesystem::fileGetContents($notificationsFile), true);
41 if (!empty($this->notifications) && isset($this->notifications[$this->nitro->getSiteId()])) {
42 $result = $this->notifications[$this->nitro->getSiteId()];
43 if ($result['last_modified'] + $this->cacheTtl > time()) { // The cache is still fresh
44 $this->removeExpiredSystemNotifications();
45 return;
46 }
47 }
48 }
49
50 if ($this->nitro->isConnected()) {
51 try {
52 $result = $this->fetch();
53 $this->notifications[$this->nitro->getSiteId()] = [
54 'last_modified' => time(),
55 'notifications' => $result
56 ];
57 Filesystem::filePutContents($notificationsFile, json_encode($this->notifications));
58 } catch (\Exception $e) {
59 $this->notifications[$this->nitro->getSiteId()] = [ // We need this entry in order to make use of the cache logic
60 'last_modified' => time(),
61 'error' => $e->getMessage(),
62 'notifications' => []
63 ];
64 Filesystem::filePutContents($notificationsFile, json_encode($this->notifications));
65 }
66 }
67 }
68
69 private function fetch() {
70 $notificationsUrl = get_nitropack_integration_url('notifications_json');
71 $client = new HttpClient($notificationsUrl);
72 $client->setHeader("x-nitro-platform", "wordpress");
73 $client->fetch();
74 $resp = $client->getStatusCode() == 200 ? json_decode($client->getBody(), true) : false;
75 return $resp ? $resp['notifications'] : [];
76 }
77
78 private function removeExpiredSystemNotifications()
79 {
80 if (isset($this->notifications[$this->nitro->getSiteId()]['notifications']['system'])) {
81 date_default_timezone_set('UTC');
82 foreach ($this->notifications[$this->nitro->getSiteId()]['notifications']['system'] as $key => $notification) {
83 if (strtotime($notification['end_date']) < time()) {
84 unset($this->notifications[$this->nitro->getSiteId()]['notifications']['system'][$key]);
85 }
86 }
87 }
88 }
89 }
90