PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 All 508 releases
← All changes | modules/monitor.php +143 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,143 @@
1 +<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 +/**
3 + * Module Name: Downtime Monitor
4 + * Module Description: Get instant alerts if your site goes down and know when it’s back online.
5 + * Sort Order: 28
6 + * Recommendation Order: 10
7 + * First Introduced: 2.6
8 + * Requires Connection: Yes
9 + * Requires User Connection: Yes
10 + * Auto Activate: No
11 + * Module Tags: Recommended
12 + * Feature: Security
13 + * Additional Search Queries: monitor, uptime, downtime, monitoring, maintenance, maintenance mode, offline, site is down, site down, down, repair, error
14 + *
15 + * @package automattic/jetpack
16 + */
17 +
18 +use Automattic\Jetpack\Connection\Manager as Connection_Manager;
19 +
20 +if ( ! defined( 'ABSPATH' ) ) {
21 + exit( 0 );
22 +}
23 +
24 +/**
25 + * Class Jetpack_Monitor
26 + *
27 + * @phan-constructor-used-for-side-effects
28 + */
29 +class Jetpack_Monitor {
30 +
31 + /**
32 + * Name of the module.
33 + *
34 + * @var string Name of module.
35 + */
36 + public $module = 'monitor';
37 +
38 + /**
39 + * Constructor.
40 + */
41 + public function __construct() {
42 + add_action( 'jetpack_modules_loaded', array( $this, 'jetpack_modules_loaded' ) );
43 + add_action( 'jetpack_activate_module_monitor', array( $this, 'activate_module' ) );
44 + }
45 +
46 + /**
47 + * Runs upon module activation.
48 + *
49 + * @return void
50 + */
51 + public function activate_module() {
52 + if ( ( new Connection_Manager( 'jetpack' ) )->is_user_connected() ) {
53 + self::update_option_receive_jetpack_monitor_notification( true );
54 + }
55 + }
56 +
57 + /**
58 + * Runs on the jetpack_modules_loaded hook to enable configuation.
59 + *
60 + * @return void
61 + */
62 + public function jetpack_modules_loaded() {
63 + Jetpack::enable_module_configurable( $this->module );
64 + }
65 +
66 + /**
67 + * Whether to receive the notifications.
68 + *
69 + * @param bool $value `true` to enable notifications, `false` to disable them.
70 + *
71 + * @return bool
72 + */
73 + public function update_option_receive_jetpack_monitor_notification( $value ) {
74 + $xml = new Jetpack_IXR_Client(
75 + array(
76 + 'user_id' => get_current_user_id(),
77 + )
78 + );
79 + $xml->query( 'jetpack.monitor.setNotifications', (bool) $value );
80 +
81 + if ( $xml->isError() ) {
82 + wp_die( sprintf( '%s: %s', esc_html( $xml->getErrorCode() ), esc_html( $xml->getErrorMessage() ) ) );
83 + }
84 +
85 + // To be used only in Jetpack_Core_Json_Api_Endpoints::get_remote_value.
86 + update_option( 'monitor_receive_notifications', (bool) $value );
87 +
88 + return true;
89 + }
90 +
91 + /**
92 + * Checks the status of notifications for current Jetpack site user.
93 + *
94 + * @since 2.8
95 + * @since 4.1.0 New parameter $die_on_error.
96 + *
97 + * @param bool $die_on_error Whether to issue a wp_die when an error occurs or return a WP_Error object.
98 + *
99 + * @return boolean|WP_Error
100 + */
101 + public static function user_receives_notifications( $die_on_error = true ) {
102 + $xml = new Jetpack_IXR_Client(
103 + array(
104 + 'user_id' => get_current_user_id(),
105 + )
106 + );
107 + $xml->query( 'jetpack.monitor.isUserInNotifications' );
108 +
109 + if ( $xml->isError() ) {
110 + if ( $die_on_error ) {
111 + wp_die( sprintf( '%s: %s', esc_html( $xml->getErrorCode() ), esc_html( $xml->getErrorMessage() ) ), 400 );
112 + } else {
113 + return new WP_Error( $xml->getErrorCode(), $xml->getErrorMessage(), array( 'status' => 400 ) );
114 + }
115 + }
116 + return $xml->getResponse();
117 + }
118 +
119 + /**
120 + * Returns date of the last downtime.
121 + *
122 + * @since 4.0.0
123 + * @return string date in YYYY-MM-DD HH:mm:ss format
124 + */
125 + public function monitor_get_last_downtime() {
126 + $xml = new Jetpack_IXR_Client();
127 +
128 + $xml->query( 'jetpack.monitor.getLastDowntime' );
129 +
130 + if ( $xml->isError() ) {
131 + return new WP_Error( 'monitor-downtime', $xml->getErrorMessage() );
132 + }
133 +
134 + set_transient( 'monitor_last_downtime', $xml->getResponse(), 10 * MINUTE_IN_SECONDS );
135 +
136 + return $xml->getResponse();
137 + }
138 +}
139 +
140 +new Jetpack_Monitor();
141 +
142 +// Register Jetpack Monitor abilities (WordPress Abilities API, WP 6.9+).
143 +\Automattic\Jetpack\Plugin\Abilities\Monitor_Abilities::init();