PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.18.0
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.18.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 / AppNotifications.php
nitropack / classes / WordPress / Notifications Last commit date
AppNotifications.php 1 year ago Notifications.php 1 year ago
AppNotifications.php
104 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 if ( $type ) {
40 $notifications = isset( $result['notifications'][ $type ] ) ? $result['notifications'][ $type ] : [];
41 } else {
42 $notifications = $result['notifications'];
43 }
44 } else {
45 $notifications = [];
46 }
47
48 return apply_filters( 'get_nitropack_notifications', $notifications, $type );
49 }
50
51 private function load() {
52 $this->notifications = [];
53
54 $notificationsFile = nitropack_trailingslashit( NITROPACK_DATA_DIR ) . 'notifications.json';
55 if ( Filesystem::fileExists( $notificationsFile ) ) {
56 $this->notifications = json_decode( Filesystem::fileGetContents( $notificationsFile ), true );
57 if ( ! empty( $this->notifications ) && isset( $this->notifications[ $this->getSiteId ] ) ) {
58 $result = $this->notifications[ $this->getSiteId ];
59 if ( $result['last_modified'] + $this->cacheTtl > time() ) { // The cache is still fresh
60 $this->removeExpiredSystemNotifications();
61 return;
62 }
63 }
64 }
65
66 if ( get_nitropack()->isConnected() ) {
67 try {
68 $result = $this->fetch();
69 $this->notifications[ $this->getSiteId ] = [
70 'last_modified' => time(),
71 'notifications' => $result
72 ];
73 Filesystem::filePutContents( $notificationsFile, json_encode( $this->notifications ) );
74 } catch (\Exception $e) {
75 $this->notifications[ $this->getSiteId ] = [ // We need this entry in order to make use of the cache logic
76 'last_modified' => time(),
77 'error' => $e->getMessage(),
78 'notifications' => []
79 ];
80 Filesystem::filePutContents( $notificationsFile, json_encode( $this->notifications ) );
81 }
82 }
83 }
84
85 private function fetch() {
86 $notificationsUrl = get_nitropack_integration_url( 'notifications_json' );
87 $client = new HttpClient( $notificationsUrl );
88 $client->setHeader( "x-nitro-platform", "wordpress" );
89 $client->fetch();
90 $resp = $client->getStatusCode() == 200 ? json_decode( $client->getBody(), true ) : false;
91 return $resp ? $resp['notifications'] : [];
92 }
93
94 private function removeExpiredSystemNotifications() {
95 if ( isset( $this->notifications[ $this->getSiteId ]['notifications']['system'] ) ) {
96 date_default_timezone_set( 'UTC' );
97 foreach ( $this->notifications[ $this->getSiteId ]['notifications']['system'] as $key => $notification ) {
98 if ( strtotime( $notification['end_date'] ) < time() ) {
99 unset( $this->notifications[ $this->getSiteId ]['notifications']['system'][ $key ] );
100 }
101 }
102 }
103 }
104 }