PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 3.0.6
Jetpack – WP Security, Backup, Speed, & Growth v3.0.6
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 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 All 501 releases
jetpack / class.jetpack-debugger.php

class.jetpack-debugger.php in Jetpack – WP Security, Backup, Speed, & Growth 3.0.6, at class.jetpack-debugger.php

376 lines 14.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 class Jetpack_Debugger {
4
5 private static function is_jetpack_support_open() {
6 try {
7 $response = wp_remote_request( "http://jetpack.me/is-support-open" );
8 $body = wp_remote_retrieve_body( $response );
9 $json = json_decode( $body );
10 return ( ( bool )$json->is_support_open );
11 }
12 catch ( Exception $e ) {
13 return true;
14 }
15 }
16
17 public static function jetpack_increase_timeout($time) {
18 $time = 30; //seconds
19 return $time;
20 }
21
22 public static function jetpack_debug_display_handler() {
23 if ( ! current_user_can( 'manage_options' ) )
24 wp_die( esc_html__('You do not have sufficient permissions to access this page.', 'jetpack' ) );
25
26 global $current_user;
27 get_currentuserinfo();
28
29 $user_id = get_current_user_id();
30 $user_tokens = Jetpack_Options::get_option( 'user_tokens' );
31 if ( is_array( $user_tokens ) && array_key_exists( $user_id, $user_tokens ) ) {
32 $user_token = $user_tokens[$user_id];
33 } else {
34 $user_token = '[this user has no token]';
35 }
36 unset( $user_tokens );
37
38 $debug_info = "\r\n";
39 foreach ( array(
40 'CLIENT_ID' => 'id',
41 'BLOG_TOKEN' => 'blog_token',
42 'MASTER_USER' => 'master_user',
43 'CERT' => 'fallback_no_verify_ssl_certs',
44 'TIME_DIFF' => 'time_diff',
45 'VERSION' => 'version',
46 'OLD_VERSION' => 'old_version',
47 'PUBLIC' => 'public',
48 ) as $label => $option_name ) {
49 $debug_info .= "\r\n" . esc_html( $label . ": " . Jetpack_Options::get_option( $option_name ) );
50 }
51
52 $debug_info .= "\r\n" . esc_html( "USER_ID: " . $user_id );
53 $debug_info .= "\r\n" . esc_html( "USER_TOKEN: " . $user_token );
54 $debug_info .= "\r\n" . esc_html( "PHP_VERSION: " . PHP_VERSION );
55 $debug_info .= "\r\n" . esc_html( "WORDPRESS_VERSION: " . $GLOBALS['wp_version'] );
56 $debug_info .= "\r\n" . esc_html( "JETPACK__VERSION: " . JETPACK__VERSION );
57 $debug_info .= "\r\n" . esc_html( "JETPACK__PLUGIN_DIR: " . JETPACK__PLUGIN_DIR );
58 $debug_info .= "\r\n" . esc_html( "SITE_URL: " . site_url() );
59 $debug_info .= "\r\n" . esc_html( "HOME_URL: " . home_url() );
60
61 $debug_info .= "\r\n\r\nTEST RESULTS:\r\n\r\n";
62 $debug_raw_info = '';
63
64
65 $tests = array();
66
67 $tests['HTTP']['result'] = wp_remote_get( preg_replace( '/^https:/', 'http:', JETPACK__API_BASE ) . 'test/1/' );
68 $tests['HTTP']['fail_message'] = esc_html__( 'Your site isn’t reaching the Jetpack servers.', 'jetpack' );
69
70 $tests['HTTPS']['result'] = wp_remote_get( preg_replace( '/^http:/', 'https:', JETPACK__API_BASE ) . 'test/1/' );
71 $tests['HTTPS']['fail_message'] = esc_html__( 'Your site isn’t securely reaching the Jetpack servers.', 'jetpack' );
72
73 $identity_crisis_message = '';
74 if ( $identity_crisis = Jetpack::check_identity_crisis( true ) ) {
75 foreach( $identity_crisis as $key => $value ) {
76 $identity_crisis_message .= sprintf( __( 'Your `%1$s` option is set up as `%2$s`, but your WordPress.com connection lists it as `%3$s`!', 'jetpack' ), $key, (string) get_option( $key ), $value ) . "\r\n";
77 }
78 $identity_crisis = new WP_Error( 'identity-crisis', $identity_crisis_message, $identity_crisis );
79 } else {
80 $identity_crisis = 'PASS';
81 }
82 $tests['IDENTITY_CRISIS']['result'] = $identity_crisis;
83 $tests['IDENTITY_CRISIS']['fail_message'] = esc_html__( 'Something has gotten mixed up in your Jetpack Connection!', 'jetpack' );
84
85 $self_xml_rpc_url = home_url( 'xmlrpc.php' );
86
87 $args = array();
88 $testsite_url = Jetpack::fix_url_for_bad_hosts( JETPACK__API_BASE . 'testsite/1/?url=' );
89
90 add_filter( 'http_request_timeout', array( 'Jetpack_Debugger', 'jetpack_increase_timeout' ) );
91
92 $tests['SELF']['result'] = wp_remote_get( $testsite_url . $self_xml_rpc_url );
93 $tests['SELF']['fail_message'] = esc_html__( 'It looks like your site can not communicate properly with Jetpack.', 'jetpack' );
94
95 remove_filter( 'http_request_timeout', array( 'Jetpack_Debugger', 'jetpack_increase_timeout' ) );
96
97 ?>
98 <div class="wrap">
99 <h2><?php esc_html_e( 'Jetpack Debugging Center', 'jetpack' ); ?></h2>
100 <h3><?php _e( "Testing your site's compatibily with Jetpack...", 'jetpack' ); ?></h3>
101 <div class="jetpack-debug-test-container">
102 <?php
103 ob_start();
104 foreach ( $tests as $test_name => $test_info ) :
105 if ( 'PASS' !== $test_info['result'] && ( is_wp_error( $test_info['result'] ) ||
106 false == ( $response_code = wp_remote_retrieve_response_code( $test_info['result'] ) ) ||
107 '200' != $response_code ) ) {
108 $debug_info .= $test_name . ": FAIL\r\n";
109 ?>
110 <div class="jetpack-test-error">
111 <p>
112 <a class="jetpack-test-heading" href="#"><?php echo $test_info['fail_message']; ?>
113 <span class="noticon noticon-collapse"></span>
114 </a>
115 </p>
116 <pre class="jetpack-test-details"><?php echo esc_html( $test_name ); ?>:
117 <?php echo esc_html( is_wp_error( $test_info['result'] ) ? $test_info['result']->get_error_message() : print_r( $test_info['result'], 1 ) ); ?></pre>
118 </div><?php
119 } else {
120 $debug_info .= $test_name . ": PASS\r\n";
121 }
122 $debug_raw_info .= "\r\n\r\n" . $test_name . "\r\n" . esc_html( is_wp_error( $test_info['result'] ) ? $test_info['result']->get_error_message() : print_r( $test_info['result'], 1 ) );
123 ?>
124 <?php endforeach;
125 $html = ob_get_clean();
126
127 if ( '' == trim( $html ) ) {
128 echo '<div class="jetpack-tests-succed">' . esc_html__( 'Your Jetpack setup looks a-okay!', 'jetpack' ) . '</div>';
129 }
130 else {
131 echo '<h3>' . esc_html__( 'There seems to be a problem with your site’s ability to communicate with Jetpack!', 'jetpack' ) . '</h3>';
132 echo $html;
133 }
134 $debug_info .= "\r\n\r\nRAW TEST RESULTS:" . $debug_raw_info ."\r\n";
135 ?>
136 </div>
137 <div class="entry-content">
138 <h3><?php esc_html_e( 'Trouble with Jetpack?', 'jetpack' ); ?></h3>
139 <h4><?php esc_html_e( 'It may be caused by one of these issues, which you can diagnose yourself:', 'jetpack' ); ?></h4>
140 <ol>
141 <li><b><em><?php esc_html_e( 'A known issue.', 'jetpack' ); ?></em></b> <?php echo sprintf( __( 'Some themes and plugins have <a href="%1$s">known conflicts</a> with Jetpack – check the <a href="%2$s">list</a>. (You can also browse the <a href="%3$s">Jetpack support pages</a> or <a href="%4$s">Jetpack support forum</a> to see if others have experienced and solved the problem.)', 'jetpack' ), 'http://jetpack.me/support/getting-started-with-jetpack/known-issues/', 'http://jetpack.me/support/getting-started-with-jetpack/known-issues/', 'http://jetpack.me/support/', 'http://wordpress.org/support/plugin/jetpack' ); ?></li>
142 <li><b><em><?php esc_html_e( 'An incompatible plugin.', 'jetpack' ); ?></em></b> <?php esc_html_e( "Find out by disabling all plugins except Jetpack. If the problem persists, it's not a plugin issue. If the problem is solved, turn your plugins on one by one until the problem pops up again – there's the culprit! Let us know, and we'll try to help.", 'jetpack' ); ?></li>
143 <li><b><em><?php esc_html_e( 'A theme conflict.', 'jetpack' ); ?></em></b> <?php esc_html_e( "If your problem isn't known or caused by a plugin, try activating Twenty Twelve (the default WordPress theme). If this solves the problem, something in your theme is probably broken – let the theme's author know.", 'jetpack' ); ?></li>
144 <li><b><em><?php esc_html_e( 'A problem with your XMLRPC file.', 'jetpack' ); ?></em></b> <?php echo sprintf( __( 'Load your <a href="%s">XMLRPC file</a>. It should say “XML-RPC server accepts POST requests only.” on a line by itself.', 'jetpack' ), site_url( 'xmlrpc.php' ) ); ?>
145 <ul>
146 <li>- <?php esc_html_e( "If it's not by itself, a theme or plugin is displaying extra characters. Try steps 2 and 3.", 'jetpack' ); ?></li>
147 <li>- <?php esc_html_e( "If you get a 404 message, contact your web host. Their security may block XMLRPC.", 'jetpack' ); ?></li>
148 </ul>
149 </li>
150 </ol>
151 <?php if ( self::is_jetpack_support_open() ): ?>
152 <p class="jetpack-show-contact-form"><?php _e( 'If none of these help you find a solution, <a href="#">click here to contact Jetpack support</a>. Tell us as much as you can about the issue and what steps you\'ve tried to resolve it, and one of our Happiness Engineers will be in touch to help.', 'jetpack' ); ?>
153 </p>
154 <?php endif; ?>
155 <?php if ( Jetpack::is_active() ) : ?>
156 <hr />
157 <div id="sync-related-posts">
158 <p><?php echo esc_html__( 'Some features of Jetpack uses the WordPress.com infrastructure and requires that your public content be mirrored there. If you see intermittent issues only affecting certain posts, please try requesting a reindex of your posts.', 'jetpack' ); ?></p>
159 <?php echo Jetpack::init()->sync->reindex_ui() ?>
160 </div>
161 <?php endif; ?>
162 </div>
163 <div id="contact-message" <?php if( ! isset( $_GET['contact'] ) ) {?> style="display:none" <?php } ?>>
164 <?php if ( self::is_jetpack_support_open() ): ?>
165 <form id="contactme" method="post" action="http://jetpack.me/contact-support/">
166 <input type="hidden" name="action" value="submit">
167 <input type="hidden" name="jetpack" value="needs-service">
168
169 <input type="hidden" name="contact_form" id="contact_form" value="1">
170 <input type="hidden" name="blog_url" id="blog_url" value="<?php echo esc_attr( site_url() ); ?>">
171 <input type="hidden" name="subject" id="subject" value="from: <?php echo esc_attr( site_url() ); ?> Jetpack contact form">
172 <div class="formbox">
173 <label for="message" class="h"><?php esc_html_e( 'Please describe the problem you are having.', 'jetpack' ); ?></label>
174 <textarea name="message" cols="40" rows="7" id="did"></textarea>
175 </div>
176
177 <div id="name_div" class="formbox">
178 <label class="h" for="your_name"><?php esc_html_e( 'Name', 'jetpack' ); ?></label>
179 <span class="errormsg"><?php esc_html_e( 'Let us know your name.', 'jetpack' ); ?></span>
180 <input name="your_name" type="text" id="your_name" value="<?php esc_html_e( $current_user->display_name , 'jetpack'); ?>" size="40">
181 </div>
182
183 <div id="email_div" class="formbox">
184 <label class="h" for="your_email"><?php esc_html_e( 'E-mail', 'jetpack' ); ?></label>
185 <span class="errormsg"><?php esc_html_e( 'Use a valid email address.', 'jetpack' ); ?></span>
186 <input name="your_email" type="text" id="your_email" value="<?php esc_html_e( $current_user->user_email , 'jetpack'); ?>" size="40">
187 </div>
188
189 <div id="toggle_debug_info" class="formbox">
190 <p><?php _e( 'The test results and some other useful debug information will be sent to the support team. Please feel free to <a href="#">review/modify</a> this information.', 'jetpack' ); ?></p>
191 </div>
192
193 <div id="debug_info_div" class="formbox" style="display:none">
194 <label class="h" for="debug_info"><?php esc_html_e( 'Debug Info', 'jetpack' ); ?></label>
195 <textarea name="debug_info" cols="40" rows="7" id="debug_info"><?php echo esc_attr( $debug_info ); ?></textarea>
196 </div>
197
198 <div style="clear: both;"></div>
199
200 <div id="blog_div" class="formbox">
201 <div id="submit_div" class="contact-support">
202 <input type="submit" name="submit" value="Contact Support">
203 </div>
204 </div>
205 <div style="clear: both;"></div>
206 </form>
207 <?php endif; ?>
208 </div>
209 </div>
210 <?php
211 }
212
213 public static function jetpack_debug_admin_head() {
214 ?>
215 <style type="text/css">
216
217 .jetpack-debug-test-container {
218 margin-top: 20px;
219 margin-bottom: 30px;
220 }
221
222 .jetpack-tests-succed {
223 font-size: large;
224 color: #8BAB3E;
225 }
226
227 .jetpack-test-details {
228 margin: 4px 6px;
229 padding: 10px;
230 overflow: auto;
231 display: none;
232 }
233
234 .jetpack-test-error {
235 margin-bottom: 10px;
236 background: #FFEBE8;
237 border: solid 1px #C00;
238 border-radius: 3px;
239 }
240
241 .jetpack-test-error p {
242 margin: 0;
243 padding: 0;
244 }
245
246 .jetpack-test-error a.jetpack-test-heading {
247 padding: 4px 6px;
248 display: block;
249 text-decoration: none;
250 color: inherit;
251 }
252
253 .jetpack-test-error .noticon {
254 float: right;
255 }
256
257 form#contactme {
258 border: 1px solid #dfdfdf;
259 background: #eaf3fa;
260 padding: 20px;
261 margin: 10px;
262 background-color: #eaf3fa;
263 border-radius: 5px;
264 font-size: 15px;
265 font-family: "Open Sans", "Helvetica Neue", sans-serif;
266 }
267
268 form#contactme label.h {
269 color: #444;
270 display: block;
271 font-weight: bold;
272 margin: 0 0 7px 10px;
273 text-shadow: 1px 1px 0 #fff;
274 }
275
276 .formbox {
277 margin: 0 0 25px 0;
278 }
279
280 .formbox input[type="text"], .formbox input[type="email"], .formbox input[type="url"], .formbox textarea {
281 border: 1px solid #e5e5e5;
282 border-radius: 11px;
283 box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);
284 color: #666;
285 font-size: 14px;
286 padding: 10px;
287 width: 97%;
288 }
289 .formbox .contact-support input[type="submit"] {
290 float: right;
291 margin: 0 !important;
292 border-radius: 20px !important;
293 cursor: pointer;
294 font-size: 13pt !important;
295 height: auto !important;
296 margin: 0 0 2em 10px !important;
297 padding: 8px 16px !important;
298 background-color: #ddd;
299 border: 1px solid rgba(0,0,0,0.05);
300 border-top-color: rgba(255,255,255,0.1);
301 border-bottom-color: rgba(0,0,0,0.15);
302 color: #333;
303 font-weight: 400;
304 display: inline-block;
305 text-align: center;
306 text-decoration: none;
307 }
308
309 .formbox span.errormsg {
310 margin: 0 0 10px 10px;
311 color: #d00;
312 display: none;
313 }
314
315 .formbox.error span.errormsg {
316 display: block;
317 }
318
319 #contact-message ul {
320 margin: 0 0 20px 10px;
321 }
322
323 #contact-message li {
324 margin: 0 0 10px 10px;
325 list-style: disc;
326 display: list-item;
327 }
328
329 </style>
330 <script type="text/javascript">
331 jQuery( document ).ready( function($) {
332
333 $('#debug_info').prepend('jQuery version: ' + jQuery.fn.jquery + "\r\n");
334
335 $( '.jetpack-test-error .jetpack-test-heading' ).on( 'click', function() {
336 $( this ).parents( '.jetpack-test-error' ).find( '.jetpack-test-details' ).slideToggle();
337 return false;
338 } );
339
340 $( '.jetpack-show-contact-form a' ).on( 'click', function() {
341 $('#contact-message').slideToggle();
342 return false;
343 } );
344
345 $( '#toggle_debug_info a' ).on( 'click', function() {
346 $('#debug_info_div').slideToggle();
347 return false;
348 } );
349
350 $('form#contactme').on("submit", function(e){
351 var form = $(this);
352 var message = form.find('#did');
353 var name = form.find('#your_name');
354 var email = form.find('#your_email')
355 var validation_error = false;
356 if( !name.val() ) {
357 name.parents('.formbox').addClass('error');
358 validation_error = true;
359 }
360 if( !email.val() ) {
361 email.parents('.formbox').addClass('error');
362 validation_error = true;
363 }
364 if ( validation_error ) {
365 return false;
366 }
367 message.val(message.val() + "\r\n\r\n----------------------------------------------\r\n\r\nDEBUG INFO:\r\n" + $('#debug_info').val() );
368 return true;
369 });
370
371 } );
372 </script>
373 <?php
374 }
375 }
376