From 7733ffd61065d02409d0c9419f40f6adf86f2868 Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Thu, 18 Jul 2024 11:54:12 +0530 Subject: [PATCH 1/7] Remove autoload options from disabled table --- .../audit-autoloaded-options/helper.php | 19 ++++++- .../test-audit-autoloaded-options.php | 50 +++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php b/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php index cf9cc93224..61d5ebc232 100644 --- a/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php +++ b/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php @@ -211,7 +211,24 @@ function perflab_aao_get_autoloaded_options_table(): string { function perflab_aao_get_disabled_autoloaded_options_table(): string { $disabled_options = get_option( 'perflab_aao_disabled_options', array() ); - if ( ! is_array( $disabled_options ) ) { + $autoload_option_names = array_map( + static function ( $option ) { + return $option->option_name; + }, + perflab_aao_query_autoloaded_options() + ); + + // Filter out the $disabled_options that are present in $autoload_option_names. + $disabled_options = array_filter( + $disabled_options, + static function ( $option ) use ( $autoload_option_names ) { + return ! in_array( $option, $autoload_option_names, true ); + } + ); + + update_option( 'perflab_aao_disabled_options', $disabled_options ); + + if ( ! $disabled_options ) { return ''; } diff --git a/plugins/performance-lab/tests/includes/site-health/audit-autoloaded-options/test-audit-autoloaded-options.php b/plugins/performance-lab/tests/includes/site-health/audit-autoloaded-options/test-audit-autoloaded-options.php index 99c69f84f8..2b45f5f617 100644 --- a/plugins/performance-lab/tests/includes/site-health/audit-autoloaded-options/test-audit-autoloaded-options.php +++ b/plugins/performance-lab/tests/includes/site-health/audit-autoloaded-options/test-audit-autoloaded-options.php @@ -187,6 +187,56 @@ static function () { ); } + public function test_perflab_aao_autoloaded_options_auto_enable_functionality(): void { + + $user_id = self::factory()->user->create( array( 'role' => 'administrator' ) ); + wp_set_current_user( $user_id ); + + // Mock wp_redirect to avoid actual redirection. + add_filter( + 'wp_redirect', + static function () { + return false; + } + ); + + // Add an autoload option with bigger size length value for testing. + self::set_autoloaded_option( self::WARNING_AUTOLOADED_SIZE_LIMIT_IN_BYTES ); + + $table_html = perflab_aao_get_autoloaded_options_table(); + $this->assertStringContainsString( self::AUTOLOADED_OPTION_KEY, $table_html ); + + // Check disable autoloaded option functionality. + $_REQUEST['_wpnonce'] = wp_create_nonce( 'perflab_aao_update_autoload' ); + $_GET['action'] = 'perflab_aao_update_autoload'; + $_GET['option_name'] = self::AUTOLOADED_OPTION_KEY; + $_GET['autoload'] = 'false'; + + perflab_aao_handle_update_autoload(); + + // Test that the autoloaded option is not displayed in the perflab_aao_get_autoloaded_options_table() after disabling. + $table_html = perflab_aao_get_autoloaded_options_table(); + $this->assertStringNotContainsString( self::AUTOLOADED_OPTION_KEY, $table_html ); + + // The option already exists, so update it. + update_option( self::AUTOLOADED_OPTION_KEY, wp_generate_password( self::WARNING_AUTOLOADED_SIZE_LIMIT_IN_BYTES ), 'yes' ); + + $table_html = perflab_aao_get_autoloaded_options_table(); + $this->assertStringContainsString( self::AUTOLOADED_OPTION_KEY, $table_html ); + + // Test that the disabled autoloaded option is displayed in the disabled options perflab_aao_get_disabled_autoloaded_options_table(). + $table_html = perflab_aao_get_disabled_autoloaded_options_table(); + $this->assertStringNotContainsString( self::AUTOLOADED_OPTION_KEY, $table_html ); + + // Remove the mock filter. + remove_filter( + 'wp_redirect', + static function () { + return false; + } + ); + } + /** * Sets a test autoloaded option. * From 9cd6575359c15cd9d6dcbed9af8c109050bdf7dd Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Fri, 19 Jul 2024 11:50:44 +0530 Subject: [PATCH 2/7] Simplified filter code --- .../test-audit-autoloaded-options.php | 30 ++----------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/plugins/performance-lab/tests/includes/site-health/audit-autoloaded-options/test-audit-autoloaded-options.php b/plugins/performance-lab/tests/includes/site-health/audit-autoloaded-options/test-audit-autoloaded-options.php index 2b45f5f617..05ff7f0d72 100644 --- a/plugins/performance-lab/tests/includes/site-health/audit-autoloaded-options/test-audit-autoloaded-options.php +++ b/plugins/performance-lab/tests/includes/site-health/audit-autoloaded-options/test-audit-autoloaded-options.php @@ -121,12 +121,7 @@ public function test_perflab_aao_autoloaded_options_disable_revert_functionality wp_set_current_user( $user_id ); // Mock wp_redirect to avoid actual redirection. - add_filter( - 'wp_redirect', - static function () { - return false; - } - ); + add_filter( 'wp_redirect', '__return_false' ); // Add an autoload option with small size length value for testing. $test_option_string = 'test'; @@ -177,14 +172,6 @@ static function () { // Test that the reverted autoloaded option is displayed in the autoloaded options perflab_aao_get_autoloaded_options_table(). $table_html = perflab_aao_get_autoloaded_options_table(); $this->assertStringContainsString( self::AUTOLOADED_OPTION_KEY, $table_html ); - - // Remove the mock filter. - remove_filter( - 'wp_redirect', - static function () { - return false; - } - ); } public function test_perflab_aao_autoloaded_options_auto_enable_functionality(): void { @@ -193,12 +180,7 @@ public function test_perflab_aao_autoloaded_options_auto_enable_functionality(): wp_set_current_user( $user_id ); // Mock wp_redirect to avoid actual redirection. - add_filter( - 'wp_redirect', - static function () { - return false; - } - ); + add_filter( 'wp_redirect', '__return_false' ); // Add an autoload option with bigger size length value for testing. self::set_autoloaded_option( self::WARNING_AUTOLOADED_SIZE_LIMIT_IN_BYTES ); @@ -227,14 +209,6 @@ static function () { // Test that the disabled autoloaded option is displayed in the disabled options perflab_aao_get_disabled_autoloaded_options_table(). $table_html = perflab_aao_get_disabled_autoloaded_options_table(); $this->assertStringNotContainsString( self::AUTOLOADED_OPTION_KEY, $table_html ); - - // Remove the mock filter. - remove_filter( - 'wp_redirect', - static function () { - return false; - } - ); } /** From cd7458bd51a5199a763cef865a05d300987897d5 Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Fri, 19 Jul 2024 12:11:57 +0530 Subject: [PATCH 3/7] Cast value for options --- .../includes/site-health/audit-autoloaded-options/helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php b/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php index 61d5ebc232..98a66d9b61 100644 --- a/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php +++ b/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php @@ -209,7 +209,7 @@ function perflab_aao_get_autoloaded_options_table(): string { * @return string HTML formatted table. */ function perflab_aao_get_disabled_autoloaded_options_table(): string { - $disabled_options = get_option( 'perflab_aao_disabled_options', array() ); + $disabled_options = (array) get_option( 'perflab_aao_disabled_options', array() ); $autoload_option_names = array_map( static function ( $option ) { From 72b4dd45b92f75303957e76eb7ceeadfb63b7b5d Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Fri, 19 Jul 2024 12:21:23 +0530 Subject: [PATCH 4/7] Apply suggestions from code review Co-authored-by: Weston Ruter --- .../site-health/audit-autoloaded-options/helper.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php b/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php index 98a66d9b61..81932be4a7 100644 --- a/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php +++ b/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php @@ -212,7 +212,7 @@ function perflab_aao_get_disabled_autoloaded_options_table(): string { $disabled_options = (array) get_option( 'perflab_aao_disabled_options', array() ); $autoload_option_names = array_map( - static function ( $option ) { + static function ( object $option ): string { return $option->option_name; }, perflab_aao_query_autoloaded_options() @@ -221,14 +221,14 @@ static function ( $option ) { // Filter out the $disabled_options that are present in $autoload_option_names. $disabled_options = array_filter( $disabled_options, - static function ( $option ) use ( $autoload_option_names ) { + static function ( $option ) use ( $autoload_option_names ): bool { return ! in_array( $option, $autoload_option_names, true ); } ); update_option( 'perflab_aao_disabled_options', $disabled_options ); - if ( ! $disabled_options ) { + if ( count( $disabled_options ) === 0 ) { return ''; } From 9fd6eb448119859a3a33f997a9590211363d4e1a Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Wed, 24 Jul 2024 12:16:48 +0530 Subject: [PATCH 5/7] Address review feedback --- .../audit-autoloaded-options/helper.php | 21 ++-------------- .../audit-autoloaded-options/hooks.php | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php b/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php index 81932be4a7..cf9cc93224 100644 --- a/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php +++ b/plugins/performance-lab/includes/site-health/audit-autoloaded-options/helper.php @@ -209,26 +209,9 @@ function perflab_aao_get_autoloaded_options_table(): string { * @return string HTML formatted table. */ function perflab_aao_get_disabled_autoloaded_options_table(): string { - $disabled_options = (array) get_option( 'perflab_aao_disabled_options', array() ); + $disabled_options = get_option( 'perflab_aao_disabled_options', array() ); - $autoload_option_names = array_map( - static function ( object $option ): string { - return $option->option_name; - }, - perflab_aao_query_autoloaded_options() - ); - - // Filter out the $disabled_options that are present in $autoload_option_names. - $disabled_options = array_filter( - $disabled_options, - static function ( $option ) use ( $autoload_option_names ): bool { - return ! in_array( $option, $autoload_option_names, true ); - } - ); - - update_option( 'perflab_aao_disabled_options', $disabled_options ); - - if ( count( $disabled_options ) === 0 ) { + if ( ! is_array( $disabled_options ) ) { return ''; } diff --git a/plugins/performance-lab/includes/site-health/audit-autoloaded-options/hooks.php b/plugins/performance-lab/includes/site-health/audit-autoloaded-options/hooks.php index 95f9036752..c93436e58f 100644 --- a/plugins/performance-lab/includes/site-health/audit-autoloaded-options/hooks.php +++ b/plugins/performance-lab/includes/site-health/audit-autoloaded-options/hooks.php @@ -129,3 +129,27 @@ function perflab_aao_extend_core_check( string $description ): string { return $description . perflab_aao_get_autoloaded_options_table() . perflab_aao_get_disabled_autoloaded_options_table(); } add_filter( 'site_status_autoloaded_options_limit_description', 'perflab_aao_extend_core_check' ); + +/** + * Filter the list of disabled options to exclude options that are autoloaded. + * + * This filter modifies the 'option_perflab_aao_disabled_options' to ensure + * that autoloaded options are not included in the disabled options list. + * + * @since n.e.x.t + * + * @param array $disabled_options Array of disabled options. + * @return array Filtered array of disabled options excluding autoloaded options. + */ +add_filter( + 'option_perflab_aao_disabled_options', + static function ( $disabled_options ): array { + $autoload_option_names = wp_list_pluck( perflab_aao_query_autoloaded_options(), 'option_name' ); + return array_filter( + (array) $disabled_options, + static function ( $option ) use ( $autoload_option_names ): bool { + return ! in_array( $option, $autoload_option_names, true ); + } + ); + } +); From f9db3b93b26514804b67ebd48113f24a958b1faf Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Thu, 25 Jul 2024 12:13:59 +0530 Subject: [PATCH 6/7] Use function instead of closure Co-authored-by: Weston Ruter --- .../audit-autoloaded-options/hooks.php | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/plugins/performance-lab/includes/site-health/audit-autoloaded-options/hooks.php b/plugins/performance-lab/includes/site-health/audit-autoloaded-options/hooks.php index c93436e58f..d1acf58e2e 100644 --- a/plugins/performance-lab/includes/site-health/audit-autoloaded-options/hooks.php +++ b/plugins/performance-lab/includes/site-health/audit-autoloaded-options/hooks.php @@ -131,25 +131,23 @@ function perflab_aao_extend_core_check( string $description ): string { add_filter( 'site_status_autoloaded_options_limit_description', 'perflab_aao_extend_core_check' ); /** - * Filter the list of disabled options to exclude options that are autoloaded. + * Filters the list of disabled options to exclude options that are autoloaded. * * This filter modifies the 'option_perflab_aao_disabled_options' to ensure * that autoloaded options are not included in the disabled options list. * * @since n.e.x.t * - * @param array $disabled_options Array of disabled options. - * @return array Filtered array of disabled options excluding autoloaded options. + * @param string[]|mixed $disabled_options Array of disabled options. + * @return string[] Filtered array of disabled options excluding autoloaded options. */ -add_filter( - 'option_perflab_aao_disabled_options', - static function ( $disabled_options ): array { - $autoload_option_names = wp_list_pluck( perflab_aao_query_autoloaded_options(), 'option_name' ); - return array_filter( - (array) $disabled_options, - static function ( $option ) use ( $autoload_option_names ): bool { - return ! in_array( $option, $autoload_option_names, true ); - } - ); - } -); +function perflab_filter_option_perflab_aao_disabled_options( $disabled_options ): array { + $autoload_option_names = wp_list_pluck( perflab_aao_query_autoloaded_options(), 'option_name' ); + return array_filter( + (array) $disabled_options, + static function ( $option ) use ( $autoload_option_names ): bool { + return ! in_array( $option, $autoload_option_names, true ); + } + ); +} +add_filter( 'option_perflab_aao_disabled_options', 'perflab_filter_option_perflab_aao_disabled_options' ); From ed61b7e3821d3a1cf9e9b27b36ce0ab408becbfd Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Thu, 25 Jul 2024 12:32:51 +0530 Subject: [PATCH 7/7] Add cover annotation --- .../test-audit-autoloaded-options.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/performance-lab/tests/includes/site-health/audit-autoloaded-options/test-audit-autoloaded-options.php b/plugins/performance-lab/tests/includes/site-health/audit-autoloaded-options/test-audit-autoloaded-options.php index 05ff7f0d72..8c5a557a15 100644 --- a/plugins/performance-lab/tests/includes/site-health/audit-autoloaded-options/test-audit-autoloaded-options.php +++ b/plugins/performance-lab/tests/includes/site-health/audit-autoloaded-options/test-audit-autoloaded-options.php @@ -174,6 +174,11 @@ public function test_perflab_aao_autoloaded_options_disable_revert_functionality $this->assertStringContainsString( self::AUTOLOADED_OPTION_KEY, $table_html ); } + /** + * Test that the list of disabled options excludes options that are autoloaded. + * + * @covers ::perflab_filter_option_perflab_aao_disabled_options + */ public function test_perflab_aao_autoloaded_options_auto_enable_functionality(): void { $user_id = self::factory()->user->create( array( 'role' => 'administrator' ) );