PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.18.8
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.18.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 / AppNotifications.php
nitropack / classes / WordPress / Notifications Last commit date
AppNotifications.php 1 year ago Notifications.php 7 months ago
AppNotifications.php
105 lines
1 <?php
2
3 namespace NitroPack\WordPress\Notifications;
4 use NitroPack\HttpClient\HttpClient;
5 use \NitroPack\SDK\Filesystem;
6
7 /*
8 * Class AppNotifications
9 *
10 * This class handles the notification.json file, mostly used for app notifications.
11 *
12 * @package NitroPack\WordPress\AppNotifications
13 */
14
15 class AppNotifications {
16 private static $instance = NULL;
17 private $cacheTtl = 3600;
18 private $getSiteId;
19 private $notifications;
20
21 public function __construct() {
22 $this->getSiteId = get_nitropack()->getSiteId();
23 $this->notifications = NULL;
24 }
25 public static function getInstance() {
26 if ( ! self::$instance ) {
27 self::$instance = new AppNotifications();
28 }
29
30 return self::$instance;
31 }
32 public function get( $type = NULL ) {
33 if ( $this->notifications === NULL ) {
34 $this->load();
35 }
36
37 if ( isset( $this->notifications[ $this->getSiteId ] ) ) {
38 $result = $this->notifications[ $this->getSiteId ];
39
40 if ( $type ) {
41 $notifications = isset( $result['notifications'][ $type ] ) ? $result['notifications'][ $type ] : [];
42 } else {
43 $notifications = $result['notifications'];
44 }
45 } else {
46 $notifications = [];
47 }
48
49 return apply_filters( 'get_nitropack_notifications', $notifications, $type );
50 }
51
52 private function load() {
53 $this->notifications = [];
54
55 $notificationsFile = nitropack_trailingslashit( NITROPACK_DATA_DIR ) . 'notifications.json';
56 if ( Filesystem::fileExists( $notificationsFile ) ) {
57 $this->notifications = json_decode( Filesystem::fileGetContents( $notificationsFile ), true );
58 if ( ! empty( $this->notifications ) && isset( $this->notifications[ $this->getSiteId ] ) ) {
59 $result = $this->notifications[ $this->getSiteId ];
60 if ( $result['last_modified'] + $this->cacheTtl > time() ) { // The cache is still fresh
61 $this->removeExpiredSystemNotifications();
62 return;
63 }
64 }
65 }
66
67 if ( get_nitropack()->isConnected() ) {
68 try {
69 $result = $this->fetch();
70 $this->notifications[ $this->getSiteId ] = [
71 'last_modified' => time(),
72 'notifications' => $result
73 ];
74 Filesystem::filePutContents( $notificationsFile, json_encode( $this->notifications ) );
75 } catch (\Exception $e) {
76 $this->notifications[ $this->getSiteId ] = [ // We need this entry in order to make use of the cache logic
77 'last_modified' => time(),
78 'error' => $e->getMessage(),
79 'notifications' => []
80 ];
81 Filesystem::filePutContents( $notificationsFile, json_encode( $this->notifications ) );
82 }
83 }
84 }
85
86 private function fetch() {
87 $notificationsUrl = get_nitropack_integration_url( 'notifications_json' );
88 $client = new HttpClient( $notificationsUrl );
89 $client->setHeader( "x-nitro-platform", "wordpress" );
90 $client->fetch();
91 $resp = $client->getStatusCode() == 200 ? json_decode( $client->getBody(), true ) : false;
92 return $resp ? $resp['notifications'] : [];
93 }
94
95 private function removeExpiredSystemNotifications() {
96 if ( isset( $this->notifications[ $this->getSiteId ]['notifications']['system'] ) ) {
97 date_default_timezone_set( 'UTC' );
98 foreach ( $this->notifications[ $this->getSiteId ]['notifications']['system'] as $key => $notification ) {
99 if ( strtotime( $notification['end_date'] ) < time() ) {
100 unset( $this->notifications[ $this->getSiteId ]['notifications']['system'][ $key ] );
101 }
102 }
103 }
104 }
105 }