Version Description
Download this release
Release Info
Developer | johnbillion |
Plugin | Query Monitor |
Version | 3.3.1 |
Comparing to | |
See all releases |
Code changes from version 3.3.0 to 3.3.1
- assets/query-monitor-dark.css +18 -1
- assets/query-monitor.css +18 -1
- assets/query-monitor.js +2 -2
- classes/Collector.php +3 -3
- classes/Hook.php +60 -0
- collectors/admin.php +4 -0
- collectors/hooks.php +2 -52
- dispatchers/Html.php +12 -3
- output/Html.php +22 -33
- output/html/conditionals.php +3 -0
- query-monitor.php +2 -2
- readme.txt +1 -1
assets/query-monitor-dark.css
CHANGED
@@ -265,6 +265,10 @@ body.admin-color-light #wp-admin-bar-query-monitor:not(.qm-all-clear):not(:hover
|
|
265 |
width: 4px !important;
|
266 |
z-index: 2 !important;
|
267 |
}
|
|
|
|
|
|
|
|
|
268 |
#query-monitor-main #qm-wrapper {
|
269 |
display: flex;
|
270 |
flex-grow: 1 !important;
|
@@ -557,8 +561,21 @@ body.admin-color-light #wp-admin-bar-query-monitor:not(.qm-all-clear):not(:hover
|
|
557 |
#query-monitor-main .qm-non-tabular p {
|
558 |
margin-bottom: 10px !important;
|
559 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
560 |
#query-monitor-main .qm-non-tabular dd {
|
561 |
-
|
|
|
|
|
562 |
}
|
563 |
#query-monitor-main .qm-non-tabular h3 a {
|
564 |
float: right !important;
|
265 |
width: 4px !important;
|
266 |
z-index: 2 !important;
|
267 |
}
|
268 |
+
#query-monitor-main.qm-show-right.qm-peek {
|
269 |
+
height: 100vh !important;
|
270 |
+
top: 0 !important;
|
271 |
+
}
|
272 |
#query-monitor-main #qm-wrapper {
|
273 |
display: flex;
|
274 |
flex-grow: 1 !important;
|
561 |
#query-monitor-main .qm-non-tabular p {
|
562 |
margin-bottom: 10px !important;
|
563 |
}
|
564 |
+
#query-monitor-main .qm-non-tabular dl {
|
565 |
+
display: flex !important;
|
566 |
+
flex-wrap: wrap !important;
|
567 |
+
max-width: 60em !important;
|
568 |
+
}
|
569 |
+
#query-monitor-main .qm-non-tabular dt {
|
570 |
+
border-top: 1px solid #bbc8d4 !important;
|
571 |
+
flex-grow: 0;
|
572 |
+
flex: 1 0 16em;
|
573 |
+
padding: 10px 10px 10px 0 !important;
|
574 |
+
}
|
575 |
#query-monitor-main .qm-non-tabular dd {
|
576 |
+
border-top: 1px solid #bbc8d4 !important;
|
577 |
+
flex: 1 0 calc(100% - 10px - 16em);
|
578 |
+
padding: 10px 0 !important;
|
579 |
}
|
580 |
#query-monitor-main .qm-non-tabular h3 a {
|
581 |
float: right !important;
|
assets/query-monitor.css
CHANGED
@@ -258,6 +258,10 @@ body.admin-color-light #wp-admin-bar-query-monitor:not(.qm-all-clear):not(:hover
|
|
258 |
width: 4px !important;
|
259 |
z-index: 2 !important;
|
260 |
}
|
|
|
|
|
|
|
|
|
261 |
#query-monitor-main #qm-wrapper {
|
262 |
display: flex;
|
263 |
flex-grow: 1 !important;
|
@@ -550,8 +554,21 @@ body.admin-color-light #wp-admin-bar-query-monitor:not(.qm-all-clear):not(:hover
|
|
550 |
#query-monitor-main .qm-non-tabular p {
|
551 |
margin-bottom: 10px !important;
|
552 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
553 |
#query-monitor-main .qm-non-tabular dd {
|
554 |
-
|
|
|
|
|
555 |
}
|
556 |
#query-monitor-main .qm-non-tabular h3 a {
|
557 |
float: right !important;
|
258 |
width: 4px !important;
|
259 |
z-index: 2 !important;
|
260 |
}
|
261 |
+
#query-monitor-main.qm-show-right.qm-peek {
|
262 |
+
height: 100vh !important;
|
263 |
+
top: 0 !important;
|
264 |
+
}
|
265 |
#query-monitor-main #qm-wrapper {
|
266 |
display: flex;
|
267 |
flex-grow: 1 !important;
|
554 |
#query-monitor-main .qm-non-tabular p {
|
555 |
margin-bottom: 10px !important;
|
556 |
}
|
557 |
+
#query-monitor-main .qm-non-tabular dl {
|
558 |
+
display: flex !important;
|
559 |
+
flex-wrap: wrap !important;
|
560 |
+
max-width: 60em !important;
|
561 |
+
}
|
562 |
+
#query-monitor-main .qm-non-tabular dt {
|
563 |
+
border-top: 1px solid #ddd !important;
|
564 |
+
flex-grow: 0;
|
565 |
+
flex: 1 0 16em;
|
566 |
+
padding: 10px 10px 10px 0 !important;
|
567 |
+
}
|
568 |
#query-monitor-main .qm-non-tabular dd {
|
569 |
+
border-top: 1px solid #ddd !important;
|
570 |
+
flex: 1 0 calc(100% - 10px - 16em);
|
571 |
+
padding: 10px 0 !important;
|
572 |
}
|
573 |
#query-monitor-main .qm-non-tabular h3 a {
|
574 |
float: right !important;
|
assets/query-monitor.js
CHANGED
@@ -616,7 +616,7 @@ if ( window.jQuery ) {
|
|
616 |
window.addEventListener('load', function() {
|
617 |
if ( ( 'undefined' === typeof jQuery ) || ! window.jQuery ) {
|
618 |
/* Fallback for running without jQuery (`QM_NO_JQUERY`) */
|
619 |
-
document.getElementById( 'query-monitor' ).className += ' qm-broken';
|
620 |
console.error( document.getElementById( 'qm-broken' ).textContent );
|
621 |
|
622 |
if ( 'undefined' === typeof jQuery ) {
|
@@ -630,7 +630,7 @@ window.addEventListener('load', function() {
|
|
630 |
var menu_item = document.getElementById( 'wp-admin-bar-query-monitor' );
|
631 |
if ( menu_item ) {
|
632 |
menu_item.addEventListener( 'click', function() {
|
633 |
-
document.getElementById( 'query-monitor' ).className += ' qm-show';
|
634 |
} );
|
635 |
}
|
636 |
}
|
616 |
window.addEventListener('load', function() {
|
617 |
if ( ( 'undefined' === typeof jQuery ) || ! window.jQuery ) {
|
618 |
/* Fallback for running without jQuery (`QM_NO_JQUERY`) */
|
619 |
+
document.getElementById( 'query-monitor-main' ).className += ' qm-broken';
|
620 |
console.error( document.getElementById( 'qm-broken' ).textContent );
|
621 |
|
622 |
if ( 'undefined' === typeof jQuery ) {
|
630 |
var menu_item = document.getElementById( 'wp-admin-bar-query-monitor' );
|
631 |
if ( menu_item ) {
|
632 |
menu_item.addEventListener( 'click', function() {
|
633 |
+
document.getElementById( 'query-monitor-main' ).className += ' qm-show';
|
634 |
} );
|
635 |
}
|
636 |
}
|
classes/Collector.php
CHANGED
@@ -151,14 +151,14 @@ abstract class QM_Collector {
|
|
151 |
|
152 |
foreach ( $concerned_actions as $action ) {
|
153 |
if ( has_action( $action ) ) {
|
154 |
-
$this->concerned_actions[ $action ] =
|
155 |
}
|
156 |
$tracked[] = $action;
|
157 |
}
|
158 |
|
159 |
foreach ( $concerned_filters as $filter ) {
|
160 |
if ( has_filter( $filter ) ) {
|
161 |
-
$this->concerned_filters[ $filter ] =
|
162 |
}
|
163 |
$tracked[] = $filter;
|
164 |
}
|
@@ -180,7 +180,7 @@ abstract class QM_Collector {
|
|
180 |
$option
|
181 |
);
|
182 |
if ( has_filter( $filter ) ) {
|
183 |
-
$this->concerned_filters[ $filter ] =
|
184 |
}
|
185 |
$tracked[] = $filter;
|
186 |
}
|
151 |
|
152 |
foreach ( $concerned_actions as $action ) {
|
153 |
if ( has_action( $action ) ) {
|
154 |
+
$this->concerned_actions[ $action ] = QM_Hook::process( $action, $wp_filter, true, true );
|
155 |
}
|
156 |
$tracked[] = $action;
|
157 |
}
|
158 |
|
159 |
foreach ( $concerned_filters as $filter ) {
|
160 |
if ( has_filter( $filter ) ) {
|
161 |
+
$this->concerned_filters[ $filter ] = QM_Hook::process( $filter, $wp_filter, true, true );
|
162 |
}
|
163 |
$tracked[] = $filter;
|
164 |
}
|
180 |
$option
|
181 |
);
|
182 |
if ( has_filter( $filter ) ) {
|
183 |
+
$this->concerned_filters[ $filter ] = QM_Hook::process( $filter, $wp_filter, true, true );
|
184 |
}
|
185 |
$tracked[] = $filter;
|
186 |
}
|
classes/Hook.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Hook processor.
|
4 |
+
*
|
5 |
+
* @package query-monitor
|
6 |
+
*/
|
7 |
+
|
8 |
+
class QM_Hook {
|
9 |
+
|
10 |
+
public static function process( $name, array $wp_filter, $hide_qm = false, $hide_core = false ) {
|
11 |
+
|
12 |
+
$actions = array();
|
13 |
+
$components = array();
|
14 |
+
|
15 |
+
if ( isset( $wp_filter[ $name ] ) ) {
|
16 |
+
|
17 |
+
# http://core.trac.wordpress.org/ticket/17817
|
18 |
+
$action = $wp_filter[ $name ];
|
19 |
+
|
20 |
+
foreach ( $action as $priority => $callbacks ) {
|
21 |
+
|
22 |
+
foreach ( $callbacks as $callback ) {
|
23 |
+
|
24 |
+
$callback = QM_Util::populate_callback( $callback );
|
25 |
+
|
26 |
+
if ( isset( $callback['component'] ) ) {
|
27 |
+
if (
|
28 |
+
( $hide_qm && 'query-monitor' === $callback['component']->context )
|
29 |
+
|| ( $hide_core && 'core' === $callback['component']->context )
|
30 |
+
) {
|
31 |
+
continue;
|
32 |
+
}
|
33 |
+
|
34 |
+
$components[ $callback['component']->name ] = $callback['component']->name;
|
35 |
+
}
|
36 |
+
|
37 |
+
// This isn't used and takes up a ton of memory:
|
38 |
+
unset( $callback['function'] );
|
39 |
+
|
40 |
+
$actions[] = array(
|
41 |
+
'priority' => $priority,
|
42 |
+
'callback' => $callback,
|
43 |
+
);
|
44 |
+
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
$parts = array_filter( preg_split( '#[_/-]#', $name ) );
|
50 |
+
|
51 |
+
return array(
|
52 |
+
'name' => $name,
|
53 |
+
'actions' => $actions,
|
54 |
+
'parts' => $parts,
|
55 |
+
'components' => $components,
|
56 |
+
);
|
57 |
+
|
58 |
+
}
|
59 |
+
|
60 |
+
}
|
collectors/admin.php
CHANGED
@@ -16,6 +16,10 @@ class QM_Collector_Admin extends QM_Collector {
|
|
16 |
public function get_concerned_actions() {
|
17 |
$actions = array(
|
18 |
'current_screen',
|
|
|
|
|
|
|
|
|
19 |
);
|
20 |
|
21 |
if ( ! empty( $this->data['list_table'] ) ) {
|
16 |
public function get_concerned_actions() {
|
17 |
$actions = array(
|
18 |
'current_screen',
|
19 |
+
'admin_notices',
|
20 |
+
'all_admin_notices',
|
21 |
+
'network_admin_notices',
|
22 |
+
'user_admin_notices',
|
23 |
);
|
24 |
|
25 |
if ( ! empty( $this->data['list_table'] ) ) {
|
collectors/hooks.php
CHANGED
@@ -26,7 +26,7 @@ class QM_Collector_Hooks extends QM_Collector {
|
|
26 |
$components = array();
|
27 |
|
28 |
if ( has_filter( 'all' ) ) {
|
29 |
-
$hooks[] =
|
30 |
}
|
31 |
|
32 |
if ( defined( 'QM_SHOW_ALL_HOOKS' ) && QM_SHOW_ALL_HOOKS ) {
|
@@ -39,7 +39,7 @@ class QM_Collector_Hooks extends QM_Collector {
|
|
39 |
|
40 |
foreach ( $hook_names as $name ) {
|
41 |
|
42 |
-
$hook =
|
43 |
$hooks[] = $hook;
|
44 |
|
45 |
$all_parts = array_merge( $all_parts, $hook['parts'] );
|
@@ -55,56 +55,6 @@ class QM_Collector_Hooks extends QM_Collector {
|
|
55 |
usort( $this->data['components'], 'strcasecmp' );
|
56 |
}
|
57 |
|
58 |
-
public static function process_action( $name, array $wp_filter, $hide_qm = false, $hide_core = false ) {
|
59 |
-
|
60 |
-
$actions = array();
|
61 |
-
$components = array();
|
62 |
-
|
63 |
-
if ( isset( $wp_filter[ $name ] ) ) {
|
64 |
-
|
65 |
-
# http://core.trac.wordpress.org/ticket/17817
|
66 |
-
$action = $wp_filter[ $name ];
|
67 |
-
|
68 |
-
foreach ( $action as $priority => $callbacks ) {
|
69 |
-
|
70 |
-
foreach ( $callbacks as $callback ) {
|
71 |
-
|
72 |
-
$callback = QM_Util::populate_callback( $callback );
|
73 |
-
|
74 |
-
if ( isset( $callback['component'] ) ) {
|
75 |
-
if (
|
76 |
-
( $hide_qm && 'query-monitor' === $callback['component']->context )
|
77 |
-
|| ( $hide_core && 'core' === $callback['component']->context )
|
78 |
-
) {
|
79 |
-
continue;
|
80 |
-
}
|
81 |
-
|
82 |
-
$components[ $callback['component']->name ] = $callback['component']->name;
|
83 |
-
}
|
84 |
-
|
85 |
-
// This isn't used and takes up a ton of memory:
|
86 |
-
unset( $callback['function'] );
|
87 |
-
|
88 |
-
$actions[] = array(
|
89 |
-
'priority' => $priority,
|
90 |
-
'callback' => $callback,
|
91 |
-
);
|
92 |
-
|
93 |
-
}
|
94 |
-
}
|
95 |
-
}
|
96 |
-
|
97 |
-
$parts = array_filter( preg_split( '#[_/-]#', $name ) );
|
98 |
-
|
99 |
-
return array(
|
100 |
-
'name' => $name,
|
101 |
-
'actions' => $actions,
|
102 |
-
'parts' => $parts,
|
103 |
-
'components' => $components,
|
104 |
-
);
|
105 |
-
|
106 |
-
}
|
107 |
-
|
108 |
}
|
109 |
|
110 |
# Load early to catch all hooks
|
26 |
$components = array();
|
27 |
|
28 |
if ( has_filter( 'all' ) ) {
|
29 |
+
$hooks[] = QM_Hook::process( 'all', $wp_filter, self::$hide_qm, self::$hide_core );
|
30 |
}
|
31 |
|
32 |
if ( defined( 'QM_SHOW_ALL_HOOKS' ) && QM_SHOW_ALL_HOOKS ) {
|
39 |
|
40 |
foreach ( $hook_names as $name ) {
|
41 |
|
42 |
+
$hook = QM_Hook::process( $name, $wp_filter, self::$hide_qm, self::$hide_core );
|
43 |
$hooks[] = $hook;
|
44 |
|
45 |
$all_parts = array_merge( $all_parts, $hook['parts'] );
|
55 |
usort( $this->data['components'], 'strcasecmp' );
|
56 |
}
|
57 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
}
|
59 |
|
60 |
# Load early to catch all hooks
|
dispatchers/Html.php
CHANGED
@@ -301,6 +301,13 @@ class QM_Dispatcher_Html extends QM_Dispatcher {
|
|
301 |
}
|
302 |
}
|
303 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
304 |
echo '</select>';
|
305 |
|
306 |
echo '</div>';
|
@@ -370,7 +377,9 @@ class QM_Dispatcher_Html extends QM_Dispatcher {
|
|
370 |
|
371 |
echo '<p><button class="qm-auth qm-button" data-qm-text-on="' . esc_attr( $text['on'] ) . '" data-qm-text-off="' . esc_attr( $text['off'] ) . '">' . esc_html( $text[ $state ] ) . '</button></p>';
|
372 |
echo '</section>';
|
|
|
373 |
|
|
|
374 |
$constants = array(
|
375 |
'QM_DB_EXPENSIVE' => array(
|
376 |
/* translators: %s: The default value for a PHP constant */
|
@@ -472,7 +481,7 @@ class QM_Dispatcher_Html extends QM_Dispatcher {
|
|
472 |
window.addEventListener('load', function() {
|
473 |
if ( ( 'undefined' === typeof QM_i18n ) || ( 'undefined' === typeof jQuery ) || ! window.jQuery ) {
|
474 |
/* Fallback for worst case scenario */
|
475 |
-
document.getElementById( 'query-monitor' ).className += ' qm-broken';
|
476 |
console.error( document.getElementById( 'qm-broken' ).textContent );
|
477 |
|
478 |
if ( 'undefined' === typeof QM_i18n ) {
|
@@ -490,11 +499,11 @@ class QM_Dispatcher_Html extends QM_Dispatcher {
|
|
490 |
var menu_item = document.getElementById( 'wp-admin-bar-query-monitor' );
|
491 |
if ( menu_item ) {
|
492 |
menu_item.addEventListener( 'click', function() {
|
493 |
-
document.getElementById( 'query-monitor' ).className += ' qm-show';
|
494 |
} );
|
495 |
}
|
496 |
} else if ( ! document.getElementById( 'wpadminbar' ) ) {
|
497 |
-
document.getElementById( 'query-monitor' ).className += ' qm-peek';
|
498 |
}
|
499 |
} );
|
500 |
<?php
|
301 |
}
|
302 |
}
|
303 |
}
|
304 |
+
|
305 |
+
printf(
|
306 |
+
'<option value="%1$s">%2$s</option>',
|
307 |
+
'#qm-settings',
|
308 |
+
esc_html__( 'Settings', 'query-monitor' )
|
309 |
+
);
|
310 |
+
|
311 |
echo '</select>';
|
312 |
|
313 |
echo '</div>';
|
377 |
|
378 |
echo '<p><button class="qm-auth qm-button" data-qm-text-on="' . esc_attr( $text['on'] ) . '" data-qm-text-off="' . esc_attr( $text['off'] ) . '">' . esc_html( $text[ $state ] ) . '</button></p>';
|
379 |
echo '</section>';
|
380 |
+
echo '</div>';
|
381 |
|
382 |
+
echo '<div class="qm-boxed">';
|
383 |
$constants = array(
|
384 |
'QM_DB_EXPENSIVE' => array(
|
385 |
/* translators: %s: The default value for a PHP constant */
|
481 |
window.addEventListener('load', function() {
|
482 |
if ( ( 'undefined' === typeof QM_i18n ) || ( 'undefined' === typeof jQuery ) || ! window.jQuery ) {
|
483 |
/* Fallback for worst case scenario */
|
484 |
+
document.getElementById( 'query-monitor-main' ).className += ' qm-broken';
|
485 |
console.error( document.getElementById( 'qm-broken' ).textContent );
|
486 |
|
487 |
if ( 'undefined' === typeof QM_i18n ) {
|
499 |
var menu_item = document.getElementById( 'wp-admin-bar-query-monitor' );
|
500 |
if ( menu_item ) {
|
501 |
menu_item.addEventListener( 'click', function() {
|
502 |
+
document.getElementById( 'query-monitor-main' ).className += ' qm-show';
|
503 |
} );
|
504 |
}
|
505 |
} else if ( ! document.getElementById( 'wpadminbar' ) ) {
|
506 |
+
document.getElementById( 'query-monitor-main' ).className += ' qm-peek';
|
507 |
}
|
508 |
} );
|
509 |
<?php
|
output/Html.php
CHANGED
@@ -225,6 +225,7 @@ abstract class QM_Output_Html extends QM_Output {
|
|
225 |
* @param array $args {
|
226 |
* @type string $highlight The name for the `data-` attributes that get highlighted by this control.
|
227 |
* @type array $prepend Associative array of options to prepend to the list of values.
|
|
|
228 |
* }
|
229 |
* @return string Markup for the table filter controls.
|
230 |
*/
|
@@ -243,12 +244,16 @@ abstract class QM_Output_Html extends QM_Output {
|
|
243 |
$args = array_merge( array(
|
244 |
'highlight' => '',
|
245 |
'prepend' => array(),
|
|
|
246 |
), $args );
|
247 |
|
248 |
-
$
|
|
|
249 |
|
250 |
-
if ( 'component' === $name && count( $values ) > 1 &&
|
251 |
-
$args['
|
|
|
|
|
252 |
}
|
253 |
|
254 |
$filter_id = 'qm-filter-' . $this->collector->id . '-' . $name;
|
@@ -268,6 +273,12 @@ abstract class QM_Output_Html extends QM_Output {
|
|
268 |
$out .= '<option value="' . esc_attr( $value ) . '">' . esc_html( $value ) . '</option>';
|
269 |
}
|
270 |
|
|
|
|
|
|
|
|
|
|
|
|
|
271 |
$out .= '</select>';
|
272 |
$out .= '</div>';
|
273 |
|
@@ -352,33 +363,9 @@ abstract class QM_Output_Html extends QM_Output {
|
|
352 |
}
|
353 |
|
354 |
/**
|
355 |
-
* Returns a file path, name, and line number. Safe for output.
|
356 |
-
*
|
357 |
-
* If clickable file links are enabled via the `xdebug.file_link_format` setting in the PHP configuration,
|
358 |
-
* a link such as this is returned:
|
359 |
-
*
|
360 |
-
* <a href="subl://open/?line={line}&url={file}">{text}</a>
|
361 |
-
*
|
362 |
-
* Otherwise, the display text and file details such as this is returned:
|
363 |
-
*
|
364 |
-
* {text}<br>{file}:{line}
|
365 |
-
*
|
366 |
-
* Further information on clickable stack traces for your editor:
|
367 |
-
*
|
368 |
-
* PhpStorm: (support is built in)
|
369 |
-
* `phpstorm://open?file=%f&line=%l`
|
370 |
-
*
|
371 |
-
* Visual Studio Code: (support is built in)
|
372 |
-
* `vscode://file/%f:%l`
|
373 |
-
*
|
374 |
-
* Sublime Text: https://github.com/corysimmons/subl-handler
|
375 |
-
* `subl://open/?url=file://%f&line=%l`
|
376 |
-
*
|
377 |
-
* Atom: https://github.com/WizardOfOgz/atom-handler
|
378 |
-
* `atm://open/?url=file://%f&line=%l`
|
379 |
*
|
380 |
-
*
|
381 |
-
* `nbopen://%f:%l`
|
382 |
*
|
383 |
* @param string $text The display text, such as a function name or file name.
|
384 |
* @param string $file The full file path and name.
|
@@ -442,11 +429,12 @@ abstract class QM_Output_Html extends QM_Output {
|
|
442 |
$format = ini_get( 'xdebug.file_link_format' );
|
443 |
|
444 |
/**
|
445 |
-
* Filters the file link format.
|
446 |
*
|
|
|
447 |
* @since 3.0.0
|
448 |
*
|
449 |
-
* @param string $format The format of the file link.
|
450 |
*/
|
451 |
$format = apply_filters( 'qm/output/file_link_format', $format );
|
452 |
if ( empty( $format ) ) {
|
@@ -461,11 +449,12 @@ abstract class QM_Output_Html extends QM_Output {
|
|
461 |
|
462 |
public static function get_file_path_map() {
|
463 |
/**
|
464 |
-
*
|
465 |
*
|
|
|
466 |
* @since 3.0.0
|
467 |
*
|
468 |
-
* @param array $file_map Array of file
|
469 |
*/
|
470 |
return apply_filters( 'qm/output/file_path_map', array() );
|
471 |
}
|
225 |
* @param array $args {
|
226 |
* @type string $highlight The name for the `data-` attributes that get highlighted by this control.
|
227 |
* @type array $prepend Associative array of options to prepend to the list of values.
|
228 |
+
* @type array $append Associative array of options to append to the list of values.
|
229 |
* }
|
230 |
* @return string Markup for the table filter controls.
|
231 |
*/
|
244 |
$args = array_merge( array(
|
245 |
'highlight' => '',
|
246 |
'prepend' => array(),
|
247 |
+
'append' => array(),
|
248 |
), $args );
|
249 |
|
250 |
+
$core_val = __( 'Core', 'query-monitor' );
|
251 |
+
$core_key = array_search( $core_val, $values, true );
|
252 |
|
253 |
+
if ( 'component' === $name && count( $values ) > 1 && false !== $core_key ) {
|
254 |
+
$args['append'][ $core_val ] = $core_val;
|
255 |
+
$args['append']['non-core'] = __( 'Non-Core', 'query-monitor' );
|
256 |
+
unset( $values[ $core_key ] );
|
257 |
}
|
258 |
|
259 |
$filter_id = 'qm-filter-' . $this->collector->id . '-' . $name;
|
273 |
$out .= '<option value="' . esc_attr( $value ) . '">' . esc_html( $value ) . '</option>';
|
274 |
}
|
275 |
|
276 |
+
if ( ! empty( $args['append'] ) ) {
|
277 |
+
foreach ( $args['append'] as $value => $label ) {
|
278 |
+
$out .= '<option value="' . esc_attr( $value ) . '">' . esc_html( $label ) . '</option>';
|
279 |
+
}
|
280 |
+
}
|
281 |
+
|
282 |
$out .= '</select>';
|
283 |
$out .= '</div>';
|
284 |
|
363 |
}
|
364 |
|
365 |
/**
|
366 |
+
* Returns a file path, name, and line number, or a clickable link to the file. Safe for output.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
367 |
*
|
368 |
+
* @link https://querymonitor.com/blog/2019/02/clickable-stack-traces-and-function-names-in-query-monitor/
|
|
|
369 |
*
|
370 |
* @param string $text The display text, such as a function name or file name.
|
371 |
* @param string $file The full file path and name.
|
429 |
$format = ini_get( 'xdebug.file_link_format' );
|
430 |
|
431 |
/**
|
432 |
+
* Filters the clickable file link format.
|
433 |
*
|
434 |
+
* @link https://querymonitor.com/blog/2019/02/clickable-stack-traces-and-function-names-in-query-monitor/
|
435 |
* @since 3.0.0
|
436 |
*
|
437 |
+
* @param string $format The format of the clickable file link.
|
438 |
*/
|
439 |
$format = apply_filters( 'qm/output/file_link_format', $format );
|
440 |
if ( empty( $format ) ) {
|
449 |
|
450 |
public static function get_file_path_map() {
|
451 |
/**
|
452 |
+
* Filters the file path mapping for clickable file links.
|
453 |
*
|
454 |
+
* @link https://querymonitor.com/blog/2019/02/clickable-stack-traces-and-function-names-in-query-monitor/
|
455 |
* @since 3.0.0
|
456 |
*
|
457 |
+
* @param array $file_map Array of file path mappings.
|
458 |
*/
|
459 |
return apply_filters( 'qm/output/file_path_map', array() );
|
460 |
}
|
output/html/conditionals.php
CHANGED
@@ -28,6 +28,9 @@ class QM_Output_Html_Conditionals extends QM_Output_Html {
|
|
28 |
echo '</ul>';
|
29 |
|
30 |
echo '</section>';
|
|
|
|
|
|
|
31 |
echo '<section>';
|
32 |
echo '<h3>' . esc_html__( 'False Conditionals', 'query-monitor' ) . '</h3>';
|
33 |
|
28 |
echo '</ul>';
|
29 |
|
30 |
echo '</section>';
|
31 |
+
echo '</div>';
|
32 |
+
|
33 |
+
echo '<div class="qm-boxed">';
|
34 |
echo '<section>';
|
35 |
echo '<h3>' . esc_html__( 'False Conditionals', 'query-monitor' ) . '</h3>';
|
36 |
|
query-monitor.php
CHANGED
@@ -10,7 +10,7 @@
|
|
10 |
*
|
11 |
* Plugin Name: Query Monitor
|
12 |
* Description: The Developer Tools Panel for WordPress.
|
13 |
-
* Version: 3.3.
|
14 |
* Plugin URI: https://querymonitor.com/
|
15 |
* Author: John Blackbourn
|
16 |
* Author URI: https://querymonitor.com/
|
@@ -61,7 +61,7 @@ if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
|
|
61 |
return;
|
62 |
}
|
63 |
|
64 |
-
foreach ( array( 'QueryMonitor', 'Backtrace', 'Collectors', 'Collector', 'Dispatchers', 'Dispatcher', 'Output', 'Timer' ) as $qm_class ) {
|
65 |
require_once "{$qm_dir}/classes/{$qm_class}.php";
|
66 |
}
|
67 |
|
10 |
*
|
11 |
* Plugin Name: Query Monitor
|
12 |
* Description: The Developer Tools Panel for WordPress.
|
13 |
+
* Version: 3.3.1
|
14 |
* Plugin URI: https://querymonitor.com/
|
15 |
* Author: John Blackbourn
|
16 |
* Author URI: https://querymonitor.com/
|
61 |
return;
|
62 |
}
|
63 |
|
64 |
+
foreach ( array( 'QueryMonitor', 'Backtrace', 'Collectors', 'Collector', 'Dispatchers', 'Dispatcher', 'Hook', 'Output', 'Timer' ) as $qm_class ) {
|
65 |
require_once "{$qm_dir}/classes/{$qm_class}.php";
|
66 |
}
|
67 |
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: johnbillion
|
|
3 |
Tags: debug, debug-bar, debugging, development, developer, performance, profiler, queries, query monitor, rest-api
|
4 |
Requires at least: 3.7
|
5 |
Tested up to: 5.1
|
6 |
-
Stable tag: 3.3.
|
7 |
License: GPLv2 or later
|
8 |
Requires PHP: 5.3
|
9 |
|
3 |
Tags: debug, debug-bar, debugging, development, developer, performance, profiler, queries, query monitor, rest-api
|
4 |
Requires at least: 3.7
|
5 |
Tested up to: 5.1
|
6 |
+
Stable tag: 3.3.1
|
7 |
License: GPLv2 or later
|
8 |
Requires PHP: 5.3
|
9 |
|