From ca57db1b5beb59b5c44f770fd5640bb56221b6ef Mon Sep 17 00:00:00 2001 From: Kailey Lampert Date: Tue, 2 Jul 2024 10:56:48 -0700 Subject: [PATCH 1/4] Add QM Panel to display info about js/css concatenation --- .../class-qm-collector-vip-concat.php | 50 ++++++ .../class-qm-output-vip-concat.php | 147 ++++++++++++++++++ qm-plugins/qm-vip-concat/qm-vip-concat.php | 32 ++++ qm-plugins/qm-vip-concat/readme.md | 3 + query-monitor.php | 3 + 5 files changed, 235 insertions(+) create mode 100644 qm-plugins/qm-vip-concat/class-qm-collector-vip-concat.php create mode 100644 qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php create mode 100644 qm-plugins/qm-vip-concat/qm-vip-concat.php create mode 100644 qm-plugins/qm-vip-concat/readme.md diff --git a/qm-plugins/qm-vip-concat/class-qm-collector-vip-concat.php b/qm-plugins/qm-vip-concat/class-qm-collector-vip-concat.php new file mode 100644 index 0000000000..17aafc0bdf --- /dev/null +++ b/qm-plugins/qm-vip-concat/class-qm-collector-vip-concat.php @@ -0,0 +1,50 @@ +get_levels() as $level ) { + add_action( "qm/{$level}", array( $this, $level ), 10, 2 ); + } + } + + /** + * @param mixed $message + * @param array $context + * @phpstan-param LogMessage $message + * @return void + */ + public function vip_concat_info( $message, array $context = array() ) { + $this->store( 'vip_concat_info', $message, $context ); + } + public function vip_concat_warn( $message, array $context = array() ) { + $this->store( 'vip_concat_warn', $message, $context ); + } + + /** + * @return array + * @phpstan-return list + */ + public function get_levels() { + return array( + 'vip_concat_info', + 'vip_concat_warn', + ); + } + + /** + * @return array + * @phpstan-return list + */ + public function get_warning_levels() { + return array( + 'vip_concat_warn', + ); + } + +} diff --git a/qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php b/qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php new file mode 100644 index 0000000000..e2bb90bb31 --- /dev/null +++ b/qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php @@ -0,0 +1,147 @@ +collector->get_data(); + + if ( empty( $data->logs ) ) { + $this->before_non_tabular_output(); + + $notice = sprintf( + /* translators: %s: Link to help article */ + __( 'No data logged. Read about the VIP Platform\'s file concatenation feature.', 'query-monitor' ), + 'https://docs.wpvip.com/vip-go-mu-plugins/file-concatenation-and-minification/' + ); + echo $this->build_notice( $notice ); // WPCS: XSS ok. + + $this->after_non_tabular_output(); + + return; + } + + $levels = array(); + + foreach ( $this->collector->get_levels() as $level ) { + if ( $data->counts[ $level ] ) { + $levels[ $level ] = sprintf( + '%s (%d)', + ucfirst( $level ), + $data->counts[ $level ] + ); + } else { + $levels[ $level ] = ucfirst( $level ); + } + } + $this->before_tabular_output(); + + $level_args = array( + 'all' => sprintf( + __( 'All (%d)', 'query-monitor' ), + count( $data->logs ) + ), + ); + + echo ''; + echo ''; + echo ''; + echo $this->build_filter( 'type', $levels, __( 'Level', 'query-monitor' ), $level_args ); // WPCS: XSS ok. + echo ''; + echo '' . esc_html__( 'Message', 'query-monitor' ) . ''; + echo ''; + echo ''; + echo ''; + + foreach ( $data->logs as $row ) { + + $row_attr = array(); + $row_attr['data-qm-type'] = $row['level']; + + $attr = ''; + + foreach ( $row_attr as $a => $v ) { + $attr .= ' ' . $a . '="' . esc_attr( $v ) . '"'; + } + + $is_warning = in_array( $row['level'], $this->collector->get_warning_levels(), true ); + + if ( $is_warning ) { + $class = 'qm-warn'; + } else { + $class = ''; + } + + echo ''; // WPCS: XSS ok. + echo ''; + + if ( $is_warning ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + echo QueryMonitor::icon( 'warning' ); + } else { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + echo QueryMonitor::icon( 'blank' ); + } + + echo esc_html( ucfirst( str_replace( 'vip_concat_', '', $row['level'] ) ) ); + echo ''; + printf( + '
%s
', + esc_html( $row['message'] ) + ); + + echo ''; + + } + + echo ''; + + $this->after_tabular_output(); + + } + + /** + * Adds data to top admin bar + * + * @param array $title + * + * @return array + */ + public function admin_title( array $title ) { + return $title; + } + + /** + * @param array $class + * + * @return array + */ + public function admin_class( array $class ) { + $class[] = 'qm-vip_concat'; + return $class; + } + + public function admin_menu( array $menu ) { + + $menu[] = $this->menu( array( + 'id' => 'qm-vip_concat', + 'href' => '#qm-vip_concat', + 'title' => __( 'VIP JS/CSS Concat', 'query-monitor' ), + )); + + return $menu; + } +} diff --git a/qm-plugins/qm-vip-concat/qm-vip-concat.php b/qm-plugins/qm-vip-concat/qm-vip-concat.php new file mode 100644 index 0000000000..fec4c63ece --- /dev/null +++ b/qm-plugins/qm-vip-concat/qm-vip-concat.php @@ -0,0 +1,32 @@ + Date: Tue, 2 Jul 2024 11:31:55 -0700 Subject: [PATCH 2/4] phpcs fixes --- .../qm-vip-concat/class-qm-collector-vip-concat.php | 1 - .../qm-vip-concat/class-qm-output-vip-concat.php | 10 +++++----- qm-plugins/qm-vip-concat/qm-vip-concat.php | 12 ++++++------ 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/qm-plugins/qm-vip-concat/class-qm-collector-vip-concat.php b/qm-plugins/qm-vip-concat/class-qm-collector-vip-concat.php index 17aafc0bdf..9ff32650a6 100644 --- a/qm-plugins/qm-vip-concat/class-qm-collector-vip-concat.php +++ b/qm-plugins/qm-vip-concat/class-qm-collector-vip-concat.php @@ -46,5 +46,4 @@ public function get_warning_levels() { 'vip_concat_warn', ); } - } diff --git a/qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php b/qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php index e2bb90bb31..0ec016a2da 100644 --- a/qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php +++ b/qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php @@ -27,7 +27,7 @@ public function output() { __( 'No data logged. Read about the VIP Platform\'s file concatenation feature.', 'query-monitor' ), 'https://docs.wpvip.com/vip-go-mu-plugins/file-concatenation-and-minification/' ); - echo $this->build_notice( $notice ); // WPCS: XSS ok. + echo $this->build_notice( $notice ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- $this->after_non_tabular_output(); @@ -51,6 +51,7 @@ public function output() { $level_args = array( 'all' => sprintf( + /* translators: %s: Total number of items in a list */ __( 'All (%d)', 'query-monitor' ), count( $data->logs ) ), @@ -59,7 +60,7 @@ public function output() { echo ''; echo ''; echo ''; - echo $this->build_filter( 'type', $levels, __( 'Level', 'query-monitor' ), $level_args ); // WPCS: XSS ok. + echo $this->build_filter( 'type', $levels, __( 'Level', 'query-monitor' ), $level_args ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- echo ''; echo '' . esc_html__( 'Message', 'query-monitor' ) . ''; echo ''; @@ -68,7 +69,7 @@ public function output() { foreach ( $data->logs as $row ) { - $row_attr = array(); + $row_attr = array(); $row_attr['data-qm-type'] = $row['level']; $attr = ''; @@ -85,7 +86,7 @@ public function output() { $class = ''; } - echo ''; // WPCS: XSS ok. + echo ''; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- echo ''; if ( $is_warning ) { @@ -110,7 +111,6 @@ public function output() { echo ''; $this->after_tabular_output(); - } /** diff --git a/qm-plugins/qm-vip-concat/qm-vip-concat.php b/qm-plugins/qm-vip-concat/qm-vip-concat.php index fec4c63ece..77cc2f11a8 100644 --- a/qm-plugins/qm-vip-concat/qm-vip-concat.php +++ b/qm-plugins/qm-vip-concat/qm-vip-concat.php @@ -6,7 +6,7 @@ * Author: trepmal */ -add_action('plugins_loaded', function() { +add_action('plugins_loaded', function () { /** * Register collector, only if Query Monitor is enabled. @@ -21,12 +21,12 @@ * Register output. The filter won't run if Query Monitor is not * installed so we don't have to explicity check for it. */ - add_filter( 'qm/outputter/html', function( array $output, QM_Collectors $collectors ) { + add_filter( 'qm/outputter/html', function ( array $output ) { include_once 'class-qm-output-vip-concat.php'; - if ( $collector = QM_Collectors::get( 'vip_concat' ) ) { + $collector = QM_Collectors::get( 'vip_concat' ); + if ( $collector ) { $output['vip_concat'] = new QM_Output_VIPConcat( $collector ); } return $output; - }, 101, 2 ); - -}); + }, 101 ); +} ); From 373a3a370df950f29fffd21adb5ae37923d414d1 Mon Sep 17 00:00:00 2001 From: Kailey Lampert Date: Tue, 2 Jul 2024 17:07:37 -0700 Subject: [PATCH 3/4] check class exists --- qm-plugins/qm-vip-concat/qm-vip-concat.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qm-plugins/qm-vip-concat/qm-vip-concat.php b/qm-plugins/qm-vip-concat/qm-vip-concat.php index 77cc2f11a8..8b424c96bb 100644 --- a/qm-plugins/qm-vip-concat/qm-vip-concat.php +++ b/qm-plugins/qm-vip-concat/qm-vip-concat.php @@ -11,7 +11,7 @@ /** * Register collector, only if Query Monitor is enabled. */ - if ( class_exists( 'QM_Collectors' ) ) { + if ( class_exists( 'QM_Collectors' ) && class_exists( 'QM_Collector_Logger' ) ) { include_once 'class-qm-collector-vip-concat.php'; QM_Collectors::add( new QM_Collector_VIPConcat() ); From b0817b559ee20e7cd6b842f3b6f50cccb1ec1380 Mon Sep 17 00:00:00 2001 From: Kailey Lampert Date: Fri, 12 Jul 2024 11:04:26 -0700 Subject: [PATCH 4/4] Update qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php Co-authored-by: Rinat K --- qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php b/qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php index 0ec016a2da..974253746b 100644 --- a/qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php +++ b/qm-plugins/qm-vip-concat/class-qm-output-vip-concat.php @@ -24,7 +24,7 @@ public function output() { $notice = sprintf( /* translators: %s: Link to help article */ - __( 'No data logged. Read about the VIP Platform\'s file concatenation feature.', 'query-monitor' ), + __( 'No data logged. Read about the WordPress VIP Platform\'s file concatenation feature.', 'query-monitor' ), 'https://docs.wpvip.com/vip-go-mu-plugins/file-concatenation-and-minification/' ); echo $this->build_notice( $notice ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped --