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