PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.5.13
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.5.13
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 4 years ago NitroPack.php 3 years ago Notifications.php 4 years ago
Notifications.php
88 lines
1 <?php
2 namespace NitroPack\WordPress;
3 use NitroPack\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 return isset($result['notifications'][$type]) ? $result['notifications'][$type] : [];
25 } else {
26 return $result['notifications'];
27 }
28 } else {
29 return [];
30 }
31 }
32
33 private function load() {
34 $this->notifications = [];
35
36 $notificationsFile = nitropack_trailingslashit(NITROPACK_DATA_DIR) . 'notifications.json';
37 if(Filesystem::fileExists($notificationsFile)) {
38 $this->notifications = json_decode(Filesystem::fileGetContents($notificationsFile), true);
39 if (!empty($this->notifications) && isset($this->notifications[$this->nitro->getSiteId()])) {
40 $result = $this->notifications[$this->nitro->getSiteId()];
41 if ($result['last_modified'] + $this->cacheTtl > time()) { // The cache is still fresh
42 $this->removeExpiredSystemNotifications();
43 return;
44 }
45 }
46 }
47
48 if ($this->nitro->isConnected()) {
49 try {
50 $result = $this->fetch();
51 $this->notifications[$this->nitro->getSiteId()] = [
52 'last_modified' => time(),
53 'notifications' => $result
54 ];
55 Filesystem::filePutContents($notificationsFile, json_encode($this->notifications));
56 } catch (\Exception $e) {
57 $this->notifications[$this->nitro->getSiteId()] = [ // We need this entry in order to make use of the cache logic
58 'last_modified' => time(),
59 'error' => $e->getMessage(),
60 'notifications' => []
61 ];
62 Filesystem::filePutContents($notificationsFile, json_encode($this->notifications));
63 }
64 }
65 }
66
67 private function fetch() {
68 $notificationsUrl = get_nitropack_integration_url('notifications_json');
69 $client = new HttpClient($notificationsUrl);
70 $client->setHeader("x-nitro-platform", "wordpress");
71 $client->fetch();
72 $resp = $client->getStatusCode() == 200 ? json_decode($client->getBody(), true) : false;
73 return $resp ? $resp['notifications'] : [];
74 }
75
76 private function removeExpiredSystemNotifications()
77 {
78 if (isset($this->notifications[$this->nitro->getSiteId()]['notifications']['system'])) {
79 date_default_timezone_set('UTC');
80 foreach ($this->notifications[$this->nitro->getSiteId()]['notifications']['system'] as $key => $notification) {
81 if (strtotime($notification['end_date']) < time()) {
82 unset($this->notifications[$this->nitro->getSiteId()]['notifications']['system'][$key]);
83 }
84 }
85 }
86 }
87 }
88