PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.3
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-connection / src / class-site-health.php
jetpack / jetpack_vendor / automattic / jetpack-connection / src Last commit date
abilities 3 months ago connectors 2 months ago health 2 months ago identity-crisis 2 months ago sso 2 months ago traits 9 months ago webhooks 9 months ago class-authorize-json-api.php 2 months ago class-client.php 8 months ago class-connection-assets.php 1 year ago class-connection-notice.php 8 months ago class-error-handler.php 3 weeks ago class-external-storage.php 4 months ago class-heartbeat.php 1 month ago class-initial-state.php 4 weeks ago class-manager.php 3 weeks ago class-nonce-handler.php 9 months ago class-package-version-tracker.php 2 months ago class-package-version.php 3 weeks ago class-partner-coupon.php 3 months ago class-partner.php 2 years ago class-plugin-storage.php 8 months ago class-plugin.php 9 months ago class-rest-authentication.php 9 months ago class-rest-connector.php 4 weeks ago class-secrets.php 9 months ago class-server-sandbox.php 3 months ago class-site-health.php 2 months ago class-terms-of-service.php 2 years ago class-tokens-locks.php 9 months ago class-tokens.php 9 months ago class-tracking.php 3 months ago class-urls.php 6 months ago class-user-account-status.php 9 months ago class-users-connection-admin.php 2 months ago class-utils.php 2 years ago class-webhooks.php 2 months ago class-xmlrpc-async-call.php 2 years ago class-xmlrpc-connector.php 9 months ago interface-manager.php 4 years ago interface-storage-provider.php 6 months ago
class-site-health.php
180 lines
1 <?php
2 /**
3 * WordPress Site Health integration for the Jetpack Connection package.
4 *
5 * @package automattic/jetpack-connection
6 */
7
8 namespace Automattic\Jetpack\Connection;
9
10 /**
11 * Integrates connection health tests into WordPress Site Health.
12 *
13 * This class defers to the Jetpack plugin's own debugger integration when it
14 * is present (old Jetpack versions). When no legacy integration is detected,
15 * it registers the connection health tests directly.
16 *
17 * @since 8.5.0
18 */
19 class Site_Health {
20
21 /**
22 * Whether the class has been initialized.
23 *
24 * @var bool
25 */
26 private static $initialized = false;
27
28 /**
29 * Initialize Site Health integration.
30 *
31 * Should be called once, typically from the package's actions.php via a plugins_loaded hook.
32 *
33 * @since 8.5.0
34 */
35 public static function init() {
36 if ( self::$initialized ) {
37 return;
38 }
39 self::$initialized = true;
40
41 add_action( 'admin_init', array( __CLASS__, 'maybe_register_site_health' ), 1 );
42 }
43
44 /**
45 * Conditionally register Site Health hooks.
46 *
47 * Checks whether the legacy Jetpack debugger has already registered its
48 * Site Health hooks. If so, we defer to avoid duplicate tests.
49 *
50 * @since 8.5.0
51 */
52 public static function maybe_register_site_health() {
53 // Defer to the old Jetpack plugin's debugger if it has already registered
54 // its Site Health filter. Old Jetpack versions add this filter during plugin
55 // loading, so by admin_init it is already present.
56 if ( has_filter( 'site_status_tests', 'jetpack_debugger_site_status_tests' ) ) {
57 return;
58 }
59
60 add_filter( 'site_status_tests', array( __CLASS__, 'register_site_health_tests' ) );
61 add_action( 'wp_ajax_health-check-jetpack-connection-health', array( __CLASS__, 'ajax_local_testing_suite' ) );
62 }
63
64 /**
65 * Register connection tests with WordPress Site Health.
66 *
67 * @since 8.5.0
68 *
69 * @param array $core_tests Array of tests from Core's Site Health.
70 *
71 * @return array Modified array of tests.
72 */
73 public static function register_site_health_tests( $core_tests ) {
74 $cxn_tests = new Connection_Health_Tests();
75 $tests = $cxn_tests->list_tests( 'direct' );
76
77 foreach ( $tests as $test ) {
78 $core_tests['direct'][ $test['name'] ] = array(
79 'label' => __( 'Jetpack: ', 'jetpack-connection' ) . $test['name'],
80 'test' => self::make_site_health_callback( $test, $cxn_tests ),
81 );
82 }
83
84 $core_tests['async']['jetpack_connection_test_suite'] = array(
85 'label' => __( 'Jetpack Connection Tests', 'jetpack-connection' ),
86 'test' => 'jetpack-connection-health',
87 );
88
89 return $core_tests;
90 }
91
92 /**
93 * Create a closure for a Site Health direct test.
94 *
95 * @since 8.5.0
96 *
97 * @param array $test Test definition array.
98 * @param Connection_Health_Tests $cxn_tests Test suite instance.
99 *
100 * @return callable The Site Health test callback.
101 */
102 private static function make_site_health_callback( $test, $cxn_tests ) {
103 return function () use ( $test, $cxn_tests ) {
104 $results = $cxn_tests->run_test( $test['name'] );
105 if ( is_wp_error( $results ) ) {
106 return;
107 }
108
109 $label = $results['label'] ?
110 $results['label'] :
111 ucwords(
112 str_replace(
113 '_',
114 ' ',
115 str_replace( 'test__', '', $test['name'] )
116 )
117 );
118
119 if ( $results['long_description'] ) {
120 $description = $results['long_description'];
121 } elseif ( $results['short_description'] ) {
122 $description = sprintf(
123 '<p>%s</p>',
124 $results['short_description']
125 );
126 } else {
127 $description = sprintf(
128 '<p>%s</p>',
129 __( 'This test successfully passed!', 'jetpack-connection' )
130 );
131 }
132
133 $badge_label = $cxn_tests->get_site_health_badge_label();
134
135 $return = array(
136 'label' => $label,
137 'status' => 'good',
138 'badge' => array(
139 'label' => $badge_label,
140 'color' => 'green',
141 ),
142 'description' => $description,
143 'actions' => '',
144 'test' => 'jetpack_' . $test['name'],
145 );
146
147 if ( false === $results['pass'] ) {
148 $return['status'] = $results['severity'];
149 if ( ! empty( $results['action'] ) ) {
150 $return['actions'] = sprintf(
151 '<a href="%1$s" target="_blank" rel="noopener noreferrer">%2$s <span class="screen-reader-text">%3$s</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a>',
152 esc_url( $results['action'] ),
153 $results['action_label'],
154 /* translators: accessibility text */
155 __( '(opens in a new tab)', 'jetpack-connection' )
156 );
157 }
158 }
159
160 return $return;
161 };
162 }
163
164 /**
165 * AJAX handler for async Site Health tests.
166 *
167 * @since 8.5.0
168 */
169 public static function ajax_local_testing_suite() {
170 check_ajax_referer( 'health-check-site-status' );
171 if ( ! current_user_can( 'manage_options' ) ) {
172 // @phan-suppress-next-line PhanTypeMismatchArgumentProbablyReal
173 wp_send_json_error( null, null, JSON_UNESCAPED_SLASHES );
174 }
175 $tests = new Connection_Health_Tests();
176 // @phan-suppress-next-line PhanTypeMismatchArgumentProbablyReal
177 wp_send_json_success( $tests->output_results_for_core_async_site_health(), null, JSON_UNESCAPED_SLASHES );
178 }
179 }
180