PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.5.8
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.5.8
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 4 years ago Notifications.php 4 years ago
Notifications.php
75 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 return;
43 }
44 }
45 }
46
47 if ($this->nitro->isConnected()) {
48 try {
49 $result = $this->fetch();
50 $this->notifications[$this->nitro->getSiteId()] = [
51 'last_modified' => time(),
52 'notifications' => $result
53 ];
54 Filesystem::filePutContents($notificationsFile, json_encode($this->notifications));
55 } catch (\Exception $e) {
56 $this->notifications[$this->nitro->getSiteId()] = [ // We need this entry in order to make use of the cache logic
57 'last_modified' => time(),
58 'error' => $e->getMessage(),
59 'notifications' => []
60 ];
61 Filesystem::filePutContents($notificationsFile, json_encode($this->notifications));
62 }
63 }
64 }
65
66 private function fetch() {
67 $notificationsUrl = get_nitropack_integration_url('notifications_json');
68 $client = new HttpClient($notificationsUrl);
69 $client->setHeader("x-nitro-platform", "wordpress");
70 $client->fetch();
71 $resp = $client->getStatusCode() == 200 ? json_decode($client->getBody(), true) : false;
72 return $resp ? $resp['notifications'] : [];
73 }
74 }
75