PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
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 / 3rd-party / debug-bar / class-jetpack-search-debug-bar.php
jetpack / 3rd-party / debug-bar Last commit date
class-jetpack-search-debug-bar.php 7 months ago debug-bar.css 4 months ago debug-bar.js 3 months ago
class-jetpack-search-debug-bar.php
198 lines
1 <?php
2 /**
3 * Adds a Jetpack Search debug panel to Debug Bar.
4 *
5 * @package automattic/jetpack
6 */
7
8 use Automattic\Jetpack\Search as Jetpack_Search;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit( 0 );
12 }
13
14 /**
15 * Singleton class instantiated by Jetpack_Searc_Debug_Bar::instance() that handles
16 * rendering the Jetpack Search debug bar menu item and panel.
17 */
18 class Jetpack_Search_Debug_Bar extends Debug_Bar_Panel {
19 /**
20 * Holds singleton instance
21 *
22 * @var Jetpack_Search_Debug_Bar
23 */
24 protected static $instance = null;
25
26 /**
27 * The title to use in the debug bar navigation
28 *
29 * @var string
30 */
31 public $title;
32
33 /**
34 * Constructor
35 */
36 public function __construct() {
37 /** "Search" is a product name, do not translate. */
38 $this->title( 'Jetpack Search' );
39 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
40 add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
41 add_action( 'login_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
42 add_action( 'enqueue_embed_scripts', array( $this, 'enqueue_scripts' ) );
43 }
44
45 /**
46 * Returns the singleton instance of Jetpack_Search_Debug_Bar
47 *
48 * @return Jetpack_Search_Debug_Bar
49 */
50 public static function instance() {
51 if ( self::$instance === null ) {
52 self::$instance = new Jetpack_Search_Debug_Bar();
53 }
54 return self::$instance;
55 }
56
57 /**
58 * Enqueues styles for our panel in the debug bar
59 *
60 * @return void
61 */
62 public function enqueue_scripts() {
63 // Do not enqueue scripts if we haven't already enqueued Debug Bar or Query Monitor styles.
64 if ( ! wp_style_is( 'debug-bar' ) && ! wp_style_is( 'query-monitor' ) ) {
65 return;
66 }
67
68 wp_enqueue_style(
69 'jetpack-search-debug-bar',
70 plugins_url( '3rd-party/debug-bar/debug-bar.css', JETPACK__PLUGIN_FILE ),
71 array(),
72 JETPACK__VERSION
73 );
74 wp_enqueue_script(
75 'jetpack-search-debug-bar',
76 plugins_url( '3rd-party/debug-bar/debug-bar.js', JETPACK__PLUGIN_FILE ),
77 array( 'jquery' ),
78 JETPACK__VERSION,
79 true
80 );
81 }
82
83 /**
84 * Should the Jetpack Search Debug Bar show?
85 *
86 * Since we've previously done a check for the search module being activated, let's just return true.
87 * Later on, we can update this to only show when `is_search()` is true.
88 *
89 * @return boolean
90 */
91 public function is_visible() {
92 return true;
93 }
94
95 /**
96 * Renders the panel content
97 *
98 * @return void
99 */
100 public function render() {
101 $jetpack_search = (
102 Jetpack_Search\Options::is_instant_enabled() ?
103 Jetpack_Search\Instant_Search::instance() :
104 Jetpack_Search\Classic_Search::instance()
105 );
106
107 // Search hasn't been initialized. Exit early and do not display the debug bar.
108 if ( ! method_exists( $jetpack_search, 'get_last_query_info' ) ) {
109 return;
110 }
111
112 $last_query_info = $jetpack_search->get_last_query_info();
113
114 // If not empty, let's reshuffle the order of some things.
115 if ( ! empty( $last_query_info ) ) {
116 $args = $last_query_info['args'];
117 $response = $last_query_info['response'];
118 $response_code = $last_query_info['response_code'];
119
120 unset( $last_query_info['args'] );
121 unset( $last_query_info['response'] );
122 unset( $last_query_info['response_code'] );
123
124 if ( $last_query_info['es_time'] === null ) {
125 $last_query_info['es_time'] = esc_html_x(
126 'cache hit',
127 'displayed in search results when results are cached',
128 'jetpack'
129 );
130 }
131
132 $temp = array_merge(
133 array( 'response_code' => $response_code ),
134 array( 'args' => $args ),
135 $last_query_info,
136 array( 'response' => $response )
137 );
138
139 $last_query_info = $temp;
140 }
141 ?>
142 <div class="jetpack-search-debug-bar">
143 <h2><?php esc_html_e( 'Last query information:', 'jetpack' ); ?></h2>
144 <?php if ( empty( $last_query_info ) ) : ?>
145 <?php echo esc_html_x( 'None', 'Text displayed when there is no information', 'jetpack' ); ?>
146 <?php
147 else :
148 foreach ( $last_query_info as $key => $info ) :
149 ?>
150 <h3><?php echo esc_html( $key ); ?></h3>
151 <?php
152 if ( 'response' !== $key && 'args' !== $key ) :
153 ?>
154 <pre><?php print_r( esc_html( $info ) ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions ?></pre>
155 <?php
156 else :
157 $this->render_json_toggle( $info );
158 endif;
159 ?>
160 <?php
161 endforeach;
162 endif;
163 ?>
164 </div><!-- Closes .jetpack-search-debug-bar -->
165 <?php
166 }
167
168 /**
169 * Responsible for rendering the HTML necessary for the JSON toggle
170 *
171 * @param array $value The resonse from the API as an array.
172 * @return void
173 */
174 public function render_json_toggle( $value ) {
175 ?>
176 <div class="json-toggle-wrap">
177 <pre class="json">
178 <?php
179 // esc_html() will not double-encode entities (&amp; -> &amp;amp;).
180 // If any entities are part of the JSON blob, we want to re-encoode them
181 // (double-encode them) so that they are displayed correctly in the debug
182 // bar.
183 // Use _wp_specialchars() "manually" to ensure entities are encoded correctly.
184 echo _wp_specialchars( // phpcs:ignore WordPress.Security.EscapeOutput
185 wp_json_encode( $value, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ),
186 ENT_NOQUOTES, // Don't need to encode quotes (output is for a text node).
187 'UTF-8', // wp_json_encode() outputs UTF-8, not the blog's charset.
188 true // Do "double-encode" existing HTML entities.
189 );
190 ?>
191 </pre>
192 <span class="pretty toggle"><?php echo esc_html_x( 'Pretty', 'label for formatting JSON', 'jetpack' ); ?></span>
193 <span class="ugly toggle"><?php echo esc_html_x( 'Minify', 'label for formatting JSON', 'jetpack' ); ?></span>
194 </div>
195 <?php
196 }
197 }
198