From 70d495d290335bd7328cfd5e7974f2e1dbf19e93 Mon Sep 17 00:00:00 2001 From: b1ink0 Date: Mon, 18 Nov 2024 15:35:29 +0530 Subject: [PATCH 1/5] Add plugin dependancies programmatically --- .../includes/admin/plugins.php | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/plugins/performance-lab/includes/admin/plugins.php b/plugins/performance-lab/includes/admin/plugins.php index 1e91c66cf2..f29a0f1226 100644 --- a/plugins/performance-lab/includes/admin/plugins.php +++ b/plugins/performance-lab/includes/admin/plugins.php @@ -71,16 +71,29 @@ function perflab_query_plugin_info( string $plugin_slug ) { return new WP_Error( 'no_plugins', __( 'No plugins found in the API response.', 'performance-lab' ) ); } - $plugins = array(); - $standalone_plugins = array_merge( - array_flip( perflab_get_standalone_plugins() ), - array( 'optimization-detective' => array() ) // TODO: Programmatically discover the plugin dependencies and add them here. See . - ); - foreach ( $response->plugins as $plugin_data ) { - if ( ! isset( $standalone_plugins[ $plugin_data['slug'] ] ) ) { + $plugins = array(); + $plugin_queue = perflab_get_standalone_plugins(); + + // Index the plugins from the API response by their slug for efficient lookup. + $plugins_by_slug = array_column( $response->plugins, null, 'slug' ); + + // Start processing the plugins using a queue-based approach. + while ( ! empty( $plugin_queue ) ) { + $current_plugin_slug = array_shift( $plugin_queue ); + + if ( isset( $plugins[ $current_plugin_slug ] ) || ! isset( $plugins_by_slug[ $current_plugin_slug ] ) ) { continue; } - $plugins[ $plugin_data['slug'] ] = wp_array_slice_assoc( $plugin_data, $fields ); + + $plugin_data = $plugins_by_slug[ $current_plugin_slug ]; + $plugins[ $current_plugin_slug ] = wp_array_slice_assoc( $plugin_data, $fields ); + + if ( empty( $plugin_data['requires_plugins'] ) || ! is_array( $plugin_data['requires_plugins'] ) ) { + continue; + } + + // Enqueue the required plugins slug by adding it to the queue. + $plugin_queue = array_merge( $plugin_queue, $plugin_data['requires_plugins'] ); } set_transient( $transient_key, $plugins, HOUR_IN_SECONDS ); @@ -440,9 +453,8 @@ function perflab_render_plugin_card( array $plugin_data ): void { ); $action_links[] = sprintf( - '%s', + '%s', esc_url( $url ), - esc_attr( $plugin_data['slug'] ), esc_html__( 'Activate', 'default' ) ); } else { From be0e75d2aef67eafb40da84a2ff83e611dff0397 Mon Sep 17 00:00:00 2001 From: b1ink0 Date: Wed, 20 Nov 2024 14:54:25 +0530 Subject: [PATCH 2/5] =?UTF-8?q?Fix=20the=20accidental=20removal=20of=C2=A0?= =?UTF-8?q?'data-plugin-slug'=20attribute?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/performance-lab/includes/admin/plugins.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/performance-lab/includes/admin/plugins.php b/plugins/performance-lab/includes/admin/plugins.php index f29a0f1226..08808b414a 100644 --- a/plugins/performance-lab/includes/admin/plugins.php +++ b/plugins/performance-lab/includes/admin/plugins.php @@ -453,8 +453,9 @@ function perflab_render_plugin_card( array $plugin_data ): void { ); $action_links[] = sprintf( - '%s', + '%s', esc_url( $url ), + esc_attr( $plugin_data['slug'] ), esc_html__( 'Activate', 'default' ) ); } else { From d2c8bcefc40f34dcdf9154c9de841dcca7691540 Mon Sep 17 00:00:00 2001 From: b1ink0 Date: Thu, 21 Nov 2024 15:46:38 +0530 Subject: [PATCH 3/5] Refactor to eliminate use of empty(), Refactor to rename variable -> --- .../performance-lab/includes/admin/plugins.php | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/plugins/performance-lab/includes/admin/plugins.php b/plugins/performance-lab/includes/admin/plugins.php index 08808b414a..25cdeb7789 100644 --- a/plugins/performance-lab/includes/admin/plugins.php +++ b/plugins/performance-lab/includes/admin/plugins.php @@ -75,25 +75,23 @@ function perflab_query_plugin_info( string $plugin_slug ) { $plugin_queue = perflab_get_standalone_plugins(); // Index the plugins from the API response by their slug for efficient lookup. - $plugins_by_slug = array_column( $response->plugins, null, 'slug' ); + $all_performance_plugins = array_column( $response->plugins, null, 'slug' ); // Start processing the plugins using a queue-based approach. - while ( ! empty( $plugin_queue ) ) { + while ( count( $plugin_queue ) > 0 ) { // phpcs:ignore Squiz.PHP.DisallowSizeFunctionsInLoops.Found $current_plugin_slug = array_shift( $plugin_queue ); - if ( isset( $plugins[ $current_plugin_slug ] ) || ! isset( $plugins_by_slug[ $current_plugin_slug ] ) ) { + if ( isset( $plugins[ $current_plugin_slug ] ) || ! isset( $all_performance_plugins[ $current_plugin_slug ] ) ) { continue; } - $plugin_data = $plugins_by_slug[ $current_plugin_slug ]; + $plugin_data = $all_performance_plugins[ $current_plugin_slug ]; $plugins[ $current_plugin_slug ] = wp_array_slice_assoc( $plugin_data, $fields ); - if ( empty( $plugin_data['requires_plugins'] ) || ! is_array( $plugin_data['requires_plugins'] ) ) { - continue; - } - // Enqueue the required plugins slug by adding it to the queue. - $plugin_queue = array_merge( $plugin_queue, $plugin_data['requires_plugins'] ); + if ( isset( $plugin_data['requires_plugins'] ) && is_array( $plugin_data['requires_plugins'] ) ) { + $plugin_queue = array_merge( $plugin_queue, $plugin_data['requires_plugins'] ); + } } set_transient( $transient_key, $plugins, HOUR_IN_SECONDS ); From 5f6e82a0e8b972faea722910a893c763647ce694 Mon Sep 17 00:00:00 2001 From: b1ink0 Date: Thu, 21 Nov 2024 17:29:25 +0530 Subject: [PATCH 4/5] Return error when requested plugin is not in performance lab's features/plugins --- plugins/performance-lab/includes/admin/plugins.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugins/performance-lab/includes/admin/plugins.php b/plugins/performance-lab/includes/admin/plugins.php index 25cdeb7789..d66033841e 100644 --- a/plugins/performance-lab/includes/admin/plugins.php +++ b/plugins/performance-lab/includes/admin/plugins.php @@ -81,10 +81,17 @@ function perflab_query_plugin_info( string $plugin_slug ) { while ( count( $plugin_queue ) > 0 ) { // phpcs:ignore Squiz.PHP.DisallowSizeFunctionsInLoops.Found $current_plugin_slug = array_shift( $plugin_queue ); - if ( isset( $plugins[ $current_plugin_slug ] ) || ! isset( $all_performance_plugins[ $current_plugin_slug ] ) ) { + if ( isset( $plugins[ $current_plugin_slug ] ) ) { continue; } + if ( ! isset( $all_performance_plugins[ $current_plugin_slug ] ) ) { + return new WP_Error( + 'plugin_not_found', + __( 'Plugin not found in Performance Lab\'s features / plugins.', 'performance-lab' ) + ); + } + $plugin_data = $all_performance_plugins[ $current_plugin_slug ]; $plugins[ $current_plugin_slug ] = wp_array_slice_assoc( $plugin_data, $fields ); From 451a7365da5545376a13200e878aa6f4f2331fdd Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Thu, 21 Nov 2024 11:15:52 -0800 Subject: [PATCH 5/5] Improve error message Co-authored-by: Felix Arntz --- plugins/performance-lab/includes/admin/plugins.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/performance-lab/includes/admin/plugins.php b/plugins/performance-lab/includes/admin/plugins.php index d66033841e..285d503e53 100644 --- a/plugins/performance-lab/includes/admin/plugins.php +++ b/plugins/performance-lab/includes/admin/plugins.php @@ -88,7 +88,7 @@ function perflab_query_plugin_info( string $plugin_slug ) { if ( ! isset( $all_performance_plugins[ $current_plugin_slug ] ) ) { return new WP_Error( 'plugin_not_found', - __( 'Plugin not found in Performance Lab\'s features / plugins.', 'performance-lab' ) + __( 'Plugin not found in WordPress.org API response.', 'performance-lab' ) ); }