Completed
Push — fix/site-health ( 2772ac...22db34 )
by
unknown
27:01 queued 20:33
created

debug-functions.php ➔ jetpack_debugger_site_status_tests()   C

Complexity

Conditions 8
Paths 2

Size

Total Lines 89

Duplication

Lines 9
Ratio 10.11 %

Importance

Changes 0
Metric Value
cc 8
nc 2
nop 1
dl 9
loc 89
rs 6.9955
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * WP Site Health functionality temporarily stored in this file until all of Jetpack is PHP 5.3+
4
 *
5
 * @package Jetpack.
6
 */
7
8
use Automattic\Jetpack\Sync\Modules;
9
/**
10
 * Test runner for Core's Site Health module.
11
 *
12
 * @since 7.3.0
13
 */
14
function jetpack_debugger_ajax_local_testing_suite() {
15
	check_ajax_referer( 'health-check-site-status' );
16
	if ( ! current_user_can( 'jetpack_manage_modules' ) ) {
17
		wp_send_json_error();
18
	}
19
	$tests = new Jetpack_Cxn_Tests();
20
	wp_send_json_success( $tests->output_results_for_core_async_site_health() );
21
}
22
/**
23
 * Adds the Jetpack Local Testing Suite to the Core Site Health system.
24
 *
25
 * @since 7.3.0
26
 *
27
 * @param array $core_tests Array of tests from Core's Site Health.
28
 *
29
 * @return array $core_tests Array of tests for Core's Site Health.
30
 */
31
function jetpack_debugger_site_status_tests( $core_tests ) {
32
	$cxn_tests = new Jetpack_Cxn_Tests();
33
	$tests     = $cxn_tests->list_tests( 'direct' );
34
	foreach ( $tests as $test ) {
35
36
		$core_tests['direct'][ $test['name'] ] = array(
37
			'label' => __( 'Jetpack: ', 'jetpack' ) . $test['name'],
38
			/**
39
			 * Callable for Core's Site Health system to execute.
40
			 *
41
			 * @param array $test A Jetpack Testing Suite test array.
42
			 * @param Jetpack_Cxn_Tests $cxn_tests An instance of the Jetpack Test Suite.
43
			 *
44
			 * @return array {
45
			 *      A results array to match the format expected by WordPress Core.
46
			 *
47
			 *      @type string $label Name for the test.
48
			 *      @type string $status 'critical', 'recommended', or 'good'.
49
			 *      @type array $badge Array for Site Health status. Keys label and color.
50
			 *      @type string $description Description of the test result.
51
			 *      @type string $action HTML to a link to resolve issue.
52
			 *      @type string $test Unique test identifier.
53
			 *  }
54
			 */
55
			'test'  => function() use ( $test, $cxn_tests ) {
56
				$results = $cxn_tests->run_test( $test['name'] );
57
				if ( is_wp_error( $results ) ) {
58
					return;
59
				}
60
61
				$label = $results['label'] ?
62
					$results['label'] :
63
					ucwords(
64
						str_replace(
65
							'_',
66
							' ',
67
							str_replace( 'test__', '', $test['name'] )
68
						)
69
					);
70
				if ( $results['long_description'] ) {
71
					$description = $results['long_description'];
72
				} elseif ( $results['short_description'] ) {
73
					$description = sprintf(
74
						'<p>%s</p>',
75
						$results['short_description']
76
					);
77
				} else {
78
					$description = sprintf(
79
						'<p>%s</p>',
80
						__( 'This test successfully passed!', 'jetpack' )
81
					);
82
				}
83
84
				$return = array(
85
					'label'       => $label,
86
					'status'      => 'good',
87
					'badge'       => array(
88
						'label' => __( 'Jetpack', 'jetpack' ),
89
						'color' => 'green',
90
					),
91
					'description' => $description,
92
					'actions'     => '',
93
					'test'        => 'jetpack_' . $test['name'],
94
				);
95
96
				if ( false === $results['pass'] ) {
97
					$return['status'] = $results['severity'];
98 View Code Duplication
					if ( ! empty( $results['action'] ) ) {
99
						$return['actions'] = sprintf(
100
							'<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>',
101
							esc_url( $results['action'] ),
102
							$results['action_label'],
103
							/* translators: accessibility text */
104
							__( '(opens in a new tab)', 'jetpack' )
105
						);
106
					}
107
				}
108
109
				return $return;
110
			},
111
		);
112
	}
113
	$core_tests['async']['jetpack_test_suite'] = array(
114
		'label' => __( 'Jetpack Tests', 'jetpack' ),
115
		'test'  => 'jetpack_local_testing_suite',
116
	);
117
118
	return $core_tests;
119
}
120
121
/**
122
 * Loads site health scripts if we are on the site health page.
123
 *
124
 * @param string $hook The current admin page hook.
125
 */
126
function jetpack_debugger_enqueue_site_health_scripts( $hook ) {
127
	$full_sync_module = Modules::get_module( 'full-sync' );
128
	$progress_percent = $full_sync_module ? $full_sync_module->get_sync_progress_percentage() : false;
129
130
	$ajax_nonce = wp_create_nonce( 'jetpack-site-health' );
131
132
	if ( 'site-health.php' === $hook ) {
133
		$wp_scripts = wp_scripts();
134
		wp_enqueue_script( 'jquery-ui-progressbar' );
135
		wp_enqueue_script(
136
			'jetpack_debug_site_health_script',
137
			plugins_url( 'jetpack-debugger-site-health.js', __FILE__ ),
138
			array( 'jquery-ui-progressbar' ),
139
			JETPACK__VERSION,
140
			false
141
		);
142
		wp_enqueue_style(
143
			'jetpack_debug_site_health_styles',
144
			plugins_url( 'jetpack-debugger-site-health.css', __FILE__ ),
145
			false,
146
			JETPACK__VERSION,
147
			false
148
		);
149
		/* WordPress is not bundled with jquery UI styles - we need to grab them from the Google API. */
150
		wp_enqueue_style(
151
			'jetpack-jquery-ui-styles',
152
			'https://code.jquery.com/ui/' . $wp_scripts->registered['jquery-ui-core']->ver . '/themes/smoothness/jquery-ui.min.css',
153
			false,
154
			JETPACK__VERSION,
155
			false
156
		);
157
		wp_localize_script(
158
			'jetpack_debug_site_health_script',
159
			'jetpackSiteHealth',
160
			array(
161
				'ajaxUrl'             => admin_url( 'admin-ajax.php' ),
162
				'syncProgressHeading' => __( 'Jetpack is performing a sync of your site', 'jetpack' ),
163
				'progressPercent'     => $progress_percent,
164
				'fullSyncNonce'       => $ajax_nonce,
165
			)
166
		);
167
	}
168
}
169
170
/**
171
 * Responds to ajax calls from the site health page. Echos a full sync percantage to update progress bar.
172
 */
173
function jetpack_debugger_sync_progress_ajax() {
174
	$full_sync_module = Modules::get_module( 'full-sync' );
175
	$progress_percent = $full_sync_module ? $full_sync_module->get_sync_progress_percentage() : null;
176
	if ( ! $progress_percent ) {
177
		echo 'done';
178
		wp_die();
179
	}
180
	echo intval( $progress_percent );
181
	wp_die();
182
}
183
184
/**
185
 * Responds to ajax calls from the site health page. Triggers a Full Sync
186
 */
187
function jetpack_debugger_full_sync_start() {
188
	check_ajax_referer( 'jetpack-site-health', 'site-health-nonce' );
189
	$full_sync_module = Modules::get_module( 'full-sync' );
190
	$full_sync_module->start();
191
	echo 'requested';
192
	wp_die();
193
}
194