PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.16.0
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.16.0
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
Config.php 2 years ago NitroPack.php 2 years ago Notifications.php 3 years 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