From 1780c6543c4949058385beefe8e5ac8170ce5182 Mon Sep 17 00:00:00 2001 From: Mehul Kaklotar Date: Mon, 19 Sep 2022 12:49:02 +0530 Subject: [PATCH 01/30] new setting added for generating webp and jpeg in Settings > Media > Uploads section --- modules/images/webp-uploads/load.php | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/modules/images/webp-uploads/load.php b/modules/images/webp-uploads/load.php index b7d63759ac..22124c1962 100644 --- a/modules/images/webp-uploads/load.php +++ b/modules/images/webp-uploads/load.php @@ -706,3 +706,49 @@ function webp_uploads_get_image_sizes_additional_mime_type_support() { return $allowed_sizes; } + +/** + * Register media settings field to generate multiple mime WebP & JPEG output. + * + * @since n.e.x.t + * + * @return void + */ +function webp_uploads_register_media_settings_field() { + // Register field setting for the processing. + register_setting( 'media', 'generate_webp_and_jpeg' ); + + // Add settings field. + add_settings_field( + 'generate_webp_and_jpeg', + __( 'Generate WebP and JPEG', 'performance-lab' ), + 'webp_uploads_generate_webp_jpeg_setting_callback', + 'media', + 'uploads', + array( + 'class' => 'hidden', + ) + ); +} +add_action( 'admin_init', 'webp_uploads_register_media_settings_field' ); + +/** + * Callback function for the media settings generate_webp_and_jpeg field. + * + * @since n.e.x.t + * + * @return void + */ +function webp_uploads_generate_webp_jpeg_setting_callback() { + ?> + + + + + + Date: Mon, 19 Sep 2022 12:49:36 +0530 Subject: [PATCH 02/30] new setting used when true for generating webp and jpeg --- modules/images/webp-uploads/helper.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modules/images/webp-uploads/helper.php b/modules/images/webp-uploads/helper.php index 2ba5b5a9f3..716e5feae1 100644 --- a/modules/images/webp-uploads/helper.php +++ b/modules/images/webp-uploads/helper.php @@ -20,6 +20,14 @@ function webp_uploads_get_upload_image_mime_transforms() { 'image/webp' => array( 'image/webp', 'image/jpeg' ), ); + // Check Setting for generating mimes. + if ( true === (bool) get_option( 'generate_webp_and_jpeg' ) ) { + $default_transforms = array( + 'image/jpeg' => array( 'image/jpeg', 'image/webp' ), + 'image/webp' => array( 'image/webp', 'image/jpeg' ), + ); + } + /** * Filter to allow the definition of a custom mime types, in which a defined mime type * can be transformed and provide a wide range of mime types. From cd960305500030b2ee7fedf6fd97b8421d12dce5 Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Tue, 4 Oct 2022 16:37:49 +0530 Subject: [PATCH 03/30] Set default value for option --- modules/images/webp-uploads/load.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/images/webp-uploads/load.php b/modules/images/webp-uploads/load.php index 22124c1962..b1e15bb310 100644 --- a/modules/images/webp-uploads/load.php +++ b/modules/images/webp-uploads/load.php @@ -744,7 +744,7 @@ function webp_uploads_generate_webp_jpeg_setting_callback() { From 1f3d1ccdab48cfe4ab445e6b78752df485fd65df Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Tue, 4 Oct 2022 16:47:12 +0530 Subject: [PATCH 04/30] Update markup and remove the return in function --- modules/images/webp-uploads/load.php | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/modules/images/webp-uploads/load.php b/modules/images/webp-uploads/load.php index b1e15bb310..8d404c862f 100644 --- a/modules/images/webp-uploads/load.php +++ b/modules/images/webp-uploads/load.php @@ -711,8 +711,6 @@ function webp_uploads_get_image_sizes_additional_mime_type_support() { * Register media settings field to generate multiple mime WebP & JPEG output. * * @since n.e.x.t - * - * @return void */ function webp_uploads_register_media_settings_field() { // Register field setting for the processing. @@ -725,9 +723,7 @@ function webp_uploads_register_media_settings_field() { 'webp_uploads_generate_webp_jpeg_setting_callback', 'media', 'uploads', - array( - 'class' => 'hidden', - ) + array( 'class' => 'hidden' ) ); } add_action( 'admin_init', 'webp_uploads_register_media_settings_field' ); @@ -736,15 +732,13 @@ function webp_uploads_register_media_settings_field() { * Callback function for the media settings generate_webp_and_jpeg field. * * @since n.e.x.t - * - * @return void */ function webp_uploads_generate_webp_jpeg_setting_callback() { ?> - + From 49cd8f654d26a0c07ee62f788572b8a78e8c2418 Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Tue, 4 Oct 2022 16:56:56 +0530 Subject: [PATCH 05/30] Set default value and code from parent PR --- modules/images/webp-uploads/helper.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/images/webp-uploads/helper.php b/modules/images/webp-uploads/helper.php index 716e5feae1..d832360537 100644 --- a/modules/images/webp-uploads/helper.php +++ b/modules/images/webp-uploads/helper.php @@ -21,7 +21,7 @@ function webp_uploads_get_upload_image_mime_transforms() { ); // Check Setting for generating mimes. - if ( true === (bool) get_option( 'generate_webp_and_jpeg' ) ) { + if ( 1 === (int) get_option( 'generate_webp_and_jpeg', '1' ) ) { $default_transforms = array( 'image/jpeg' => array( 'image/jpeg', 'image/webp' ), 'image/webp' => array( 'image/webp', 'image/jpeg' ), @@ -152,7 +152,14 @@ function webp_uploads_generate_additional_image_source( $attachment_id, $image_s $destination_file_name = $editor->generate_filename( $suffix, null, $extension[0] ); } - $image = $editor->save( $destination_file_name, $mime ); + if ( 1 === (int) get_option( 'generate_webp_and_jpeg', '1' ) ) { + $image = $editor->save( $destination_file_name, $mime ); + } else { + remove_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); + $image = $editor->save( $destination_file_name, $mime ); + add_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); + } + if ( is_wp_error( $image ) ) { return $image; } From a32815323ce83954f0c00e4994d5704ab4e3ad9d Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Wed, 5 Oct 2022 13:38:40 +0530 Subject: [PATCH 06/30] Unset default value for option --- modules/images/webp-uploads/load.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/images/webp-uploads/load.php b/modules/images/webp-uploads/load.php index 8d404c862f..dfec5cb109 100644 --- a/modules/images/webp-uploads/load.php +++ b/modules/images/webp-uploads/load.php @@ -738,7 +738,7 @@ function webp_uploads_generate_webp_jpeg_setting_callback() { From b6a653158d8dc26adbc90e18373c07df6b175e00 Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Wed, 5 Oct 2022 13:50:37 +0530 Subject: [PATCH 07/30] Unset default value for option --- modules/images/webp-uploads/helper.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/images/webp-uploads/helper.php b/modules/images/webp-uploads/helper.php index d832360537..549e79c738 100644 --- a/modules/images/webp-uploads/helper.php +++ b/modules/images/webp-uploads/helper.php @@ -21,7 +21,7 @@ function webp_uploads_get_upload_image_mime_transforms() { ); // Check Setting for generating mimes. - if ( 1 === (int) get_option( 'generate_webp_and_jpeg', '1' ) ) { + if ( true === (bool) get_option( 'generate_webp_and_jpeg' ) ) { $default_transforms = array( 'image/jpeg' => array( 'image/jpeg', 'image/webp' ), 'image/webp' => array( 'image/webp', 'image/jpeg' ), @@ -152,7 +152,7 @@ function webp_uploads_generate_additional_image_source( $attachment_id, $image_s $destination_file_name = $editor->generate_filename( $suffix, null, $extension[0] ); } - if ( 1 === (int) get_option( 'generate_webp_and_jpeg', '1' ) ) { + if ( true === (bool) get_option( 'generate_webp_and_jpeg' ) ) { $image = $editor->save( $destination_file_name, $mime ); } else { remove_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); From 4570b8d2bbd3c7744239151103b5e08bdbc2e41e Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Wed, 5 Oct 2022 13:58:55 +0530 Subject: [PATCH 08/30] Add webp_uploads_check_multi_mime_support() --- modules/images/webp-uploads/helper.php | 29 +++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/modules/images/webp-uploads/helper.php b/modules/images/webp-uploads/helper.php index 549e79c738..340ba490e6 100644 --- a/modules/images/webp-uploads/helper.php +++ b/modules/images/webp-uploads/helper.php @@ -152,13 +152,7 @@ function webp_uploads_generate_additional_image_source( $attachment_id, $image_s $destination_file_name = $editor->generate_filename( $suffix, null, $extension[0] ); } - if ( true === (bool) get_option( 'generate_webp_and_jpeg' ) ) { - $image = $editor->save( $destination_file_name, $mime ); - } else { - remove_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); - $image = $editor->save( $destination_file_name, $mime ); - add_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); - } + $image = webp_uploads_check_multi_mime_support( $editor, $destination_file_name, $mime ); if ( is_wp_error( $image ) ) { return $image; @@ -337,3 +331,24 @@ function webp_uploads_should_discard_additional_image_file( array $original, arr } return false; } + +/** + * Returns the updated WP_Image_Editor instance if the multi mime is activated or not. + * + * @since n.e.x.t + * + * @param WP_Image_Editor $editor WP_Image_Editor instance. + * @param string $file_name The path where the file would be stored, including the extension. + * @param string $mime The target mime in which the image should be created. + * @return WP_Image_Editor WP_Image_Editor instance with changes applied. + */ +function webp_uploads_check_multi_mime_support( $editor, $file_name, $mime ) { + if ( true === (bool) get_option( 'generate_webp_and_jpeg' ) ) { + $image = $editor->save( $file_name, $mime ); + } else { + remove_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); + $image = $editor->save( $file_name, $mime ); + add_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); + } + return $image; +} From 9d8a99215c7e240cfe2cbcf6b8caaf456eab7eac Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Wed, 5 Oct 2022 14:05:27 +0530 Subject: [PATCH 09/30] Update image-edit.php --- modules/images/webp-uploads/image-edit.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/images/webp-uploads/image-edit.php b/modules/images/webp-uploads/image-edit.php index 0cc655d0ed..7355dcd5c7 100644 --- a/modules/images/webp-uploads/image-edit.php +++ b/modules/images/webp-uploads/image-edit.php @@ -187,7 +187,8 @@ function ( $metadata, $post_meta_id ) use ( $post_id, $file_path, $mime_type, $e // Create a file with then new extension out of the targeted file. $target_file_name = preg_replace( "/\.$current_extension$/", ".$extension", $thumbnail_file ); $target_file_location = path_join( $original_directory, $target_file_name ); - $result = $editor->save( $target_file_location, $targeted_mime ); + + $result = webp_uploads_check_multi_mime_support( $editor, $target_file_location, $targeted_mime ); if ( is_wp_error( $result ) ) { continue; @@ -196,7 +197,8 @@ function ( $metadata, $post_meta_id ) use ( $post_id, $file_path, $mime_type, $e $subsized_images[ $targeted_mime ] = array( 'thumbnail' => $result ); } else { $destination = trailingslashit( $original_directory ) . "{$filename}.{$extension}"; - $result = $editor->save( $destination, $targeted_mime ); + + $result = webp_uploads_check_multi_mime_support( $editor, $destination, $targeted_mime ); if ( is_wp_error( $result ) ) { continue; From 2c7323333ef5dec32a753c5e02f95779531d02fd Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Wed, 5 Oct 2022 16:40:10 +0530 Subject: [PATCH 10/30] Unit test for new setting --- .../images/webp-uploads/load-tests.php | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/modules/images/webp-uploads/load-tests.php b/tests/modules/images/webp-uploads/load-tests.php index a6792f51e5..67c735befb 100644 --- a/tests/modules/images/webp-uploads/load-tests.php +++ b/tests/modules/images/webp-uploads/load-tests.php @@ -823,4 +823,36 @@ private function mock_frontend_body_hooks() { remove_all_actions( 'template_redirect' ); do_action( 'template_redirect' ); } + + /** + * Create JPEG and WebP for JPEG images, if generate_webp_and_jpeg option set. + * + * @test + */ + public function it_should_create_jpeg_and_webp_for_jpeg_images_if_generate_webp_and_jpeg_set() { + + update_option( 'generate_webp_and_jpeg', '1' ); + + $attachment_id = $this->factory->attachment->create_upload_object( TESTS_PLUGIN_DIR . '/tests/testdata/modules/images/leafs.jpg' ); + + // There should be JPEG and WebP sources for the full image. + $this->assertImageHasSource( $attachment_id, 'image/jpeg' ); + $this->assertImageHasSource( $attachment_id, 'image/webp' ); + + $metadata = wp_get_attachment_metadata( $attachment_id ); + + // The full image should be a JPEG. + $this->assertArrayHasKey( 'file', $metadata ); + $this->assertStringEndsWith( $metadata['sources']['image/jpeg']['file'], $metadata['file'] ); + $this->assertStringEndsWith( $metadata['sources']['image/jpeg']['file'], get_attached_file( $attachment_id ) ); + + // The post MIME type should be JPEG. + $this->assertSame( 'image/jpeg', get_post_mime_type( $attachment_id ) ); + + // There should be JPEG and WebP sources for all sizes. + foreach ( array_keys( $metadata['sizes'] ) as $size_name ) { + $this->assertImageHasSizeSource( $attachment_id, $size_name, 'image/jpeg' ); + $this->assertImageHasSizeSource( $attachment_id, $size_name, 'image/webp' ); + } + } } From 009ef92da473d0146bee66e6376b9d3676bde8a5 Mon Sep 17 00:00:00 2001 From: Mehul Kaklotar Date: Wed, 5 Oct 2022 23:59:28 +0530 Subject: [PATCH 11/30] settings.php file added for the new setting perflab_generate_webp_and_jpeg --- modules/images/webp-uploads/settings.php | 55 ++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 modules/images/webp-uploads/settings.php diff --git a/modules/images/webp-uploads/settings.php b/modules/images/webp-uploads/settings.php new file mode 100644 index 0000000000..6442e3c336 --- /dev/null +++ b/modules/images/webp-uploads/settings.php @@ -0,0 +1,55 @@ + 'hidden' ) + ); +} +add_action( 'admin_init', 'webp_uploads_add_media_settings_field' ); + +/** + * Callback function for the media settings perflab_generate_webp_and_jpeg field. + * + * @since n.e.x.t + */ +function webp_uploads_generate_webp_jpeg_setting_callback() { + ?> + + + +

+ + + Date: Wed, 5 Oct 2022 23:59:59 +0530 Subject: [PATCH 12/30] settings.php file added for the new setting perflab_generate_webp_and_jpeg --- modules/images/webp-uploads/load.php | 41 +--------------------------- 1 file changed, 1 insertion(+), 40 deletions(-) diff --git a/modules/images/webp-uploads/load.php b/modules/images/webp-uploads/load.php index a30736f67a..40e1fdab78 100644 --- a/modules/images/webp-uploads/load.php +++ b/modules/images/webp-uploads/load.php @@ -14,6 +14,7 @@ require_once __DIR__ . '/helper.php'; require_once __DIR__ . '/rest-api.php'; require_once __DIR__ . '/image-edit.php'; +require_once __DIR__ . '/settings.php'; /** * Hook called by `wp_generate_attachment_metadata` to create the `sources` property for every image @@ -741,43 +742,3 @@ function webp_uploads_get_image_sizes_additional_mime_type_support() { return $allowed_sizes; } - -/** - * Register media settings field to generate multiple mime WebP & JPEG output. - * - * @since n.e.x.t - */ -function webp_uploads_register_media_settings_field() { - // Register field setting for the processing. - register_setting( 'media', 'generate_webp_and_jpeg' ); - - // Add settings field. - add_settings_field( - 'generate_webp_and_jpeg', - __( 'Generate WebP and JPEG', 'performance-lab' ), - 'webp_uploads_generate_webp_jpeg_setting_callback', - 'media', - 'uploads', - array( 'class' => 'hidden' ) - ); -} -add_action( 'admin_init', 'webp_uploads_register_media_settings_field' ); - -/** - * Callback function for the media settings generate_webp_and_jpeg field. - * - * @since n.e.x.t - */ -function webp_uploads_generate_webp_jpeg_setting_callback() { - ?> - - - - - - Date: Thu, 6 Oct 2022 00:00:38 +0530 Subject: [PATCH 13/30] new setting perflab_generate_webp_and_jpeg used and filters reverted from suggestions --- modules/images/webp-uploads/helper.php | 27 ++++------------------ modules/images/webp-uploads/image-edit.php | 8 +++++-- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/modules/images/webp-uploads/helper.php b/modules/images/webp-uploads/helper.php index 6e5366c722..54224c2cba 100644 --- a/modules/images/webp-uploads/helper.php +++ b/modules/images/webp-uploads/helper.php @@ -21,7 +21,7 @@ function webp_uploads_get_upload_image_mime_transforms() { ); // Check Setting for generating mimes. - if ( true === (bool) get_option( 'generate_webp_and_jpeg' ) ) { + if ( true === (bool) get_option( 'perflab_generate_webp_and_jpeg' ) ) { $default_transforms = array( 'image/jpeg' => array( 'image/jpeg', 'image/webp' ), 'image/webp' => array( 'image/webp', 'image/jpeg' ), @@ -152,7 +152,9 @@ function webp_uploads_generate_additional_image_source( $attachment_id, $image_s $destination_file_name = $editor->generate_filename( $suffix, null, $extension[0] ); } - $image = webp_uploads_check_multi_mime_support( $editor, $destination_file_name, $mime ); + remove_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); + $image = $editor->save( $destination_file_name, $mime ); + add_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); if ( is_wp_error( $image ) ) { return $image; @@ -331,24 +333,3 @@ function webp_uploads_should_discard_additional_image_file( array $original, arr } return false; } - -/** - * Returns the updated WP_Image_Editor instance if the multi mime is activated or not. - * - * @since n.e.x.t - * - * @param WP_Image_Editor $editor WP_Image_Editor instance. - * @param string $file_name The path where the file would be stored, including the extension. - * @param string $mime The target mime in which the image should be created. - * @return WP_Image_Editor WP_Image_Editor instance with changes applied. - */ -function webp_uploads_check_multi_mime_support( $editor, $file_name, $mime ) { - if ( true === (bool) get_option( 'generate_webp_and_jpeg' ) ) { - $image = $editor->save( $file_name, $mime ); - } else { - remove_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); - $image = $editor->save( $file_name, $mime ); - add_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); - } - return $image; -} diff --git a/modules/images/webp-uploads/image-edit.php b/modules/images/webp-uploads/image-edit.php index 7355dcd5c7..dda6d9798f 100644 --- a/modules/images/webp-uploads/image-edit.php +++ b/modules/images/webp-uploads/image-edit.php @@ -188,7 +188,9 @@ function ( $metadata, $post_meta_id ) use ( $post_id, $file_path, $mime_type, $e $target_file_name = preg_replace( "/\.$current_extension$/", ".$extension", $thumbnail_file ); $target_file_location = path_join( $original_directory, $target_file_name ); - $result = webp_uploads_check_multi_mime_support( $editor, $target_file_location, $targeted_mime ); + remove_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); + $result = $editor->save( $target_file_location, $targeted_mime ); + add_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); if ( is_wp_error( $result ) ) { continue; @@ -198,7 +200,9 @@ function ( $metadata, $post_meta_id ) use ( $post_id, $file_path, $mime_type, $e } else { $destination = trailingslashit( $original_directory ) . "{$filename}.{$extension}"; - $result = webp_uploads_check_multi_mime_support( $editor, $destination, $targeted_mime ); + remove_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); + $result = $editor->save( $destination, $targeted_mime ); + add_filter( 'image_editor_output_format', 'webp_uploads_filter_image_editor_output_format', 10, 3 ); if ( is_wp_error( $result ) ) { continue; From 35b303a78c65ef0ebe373073adfe446b7c2bc86c Mon Sep 17 00:00:00 2001 From: Mehul Kaklotar Date: Thu, 6 Oct 2022 00:01:09 +0530 Subject: [PATCH 14/30] new setting perflab_generate_webp_and_jpeg tests added and moved from suggestions --- .../images/webp-uploads/helper-tests.php | 22 +++++++ .../images/webp-uploads/load-tests.php | 63 +++++++++---------- 2 files changed, 53 insertions(+), 32 deletions(-) diff --git a/tests/modules/images/webp-uploads/helper-tests.php b/tests/modules/images/webp-uploads/helper-tests.php index a21f701d8c..c0259eea80 100644 --- a/tests/modules/images/webp-uploads/helper-tests.php +++ b/tests/modules/images/webp-uploads/helper-tests.php @@ -420,6 +420,28 @@ function () { $this->assertSame( array( 'image/jpeg' => array( 'image/jpeg', 'image/webp' ) ), $transforms ); } + /** + * Returns custom transforms array when overwritten by webp_uploads_upload_image_mime_transforms filter. + * + * @test + */ + public function it_should_return_jpeg_and_webp_transforms_when_option_generate_webp_and_jpeg_set() { + remove_all_filters( 'webp_uploads_get_upload_image_mime_transforms' ); + + update_option( 'perflab_generate_webp_and_jpeg', '1' ); + + $transforms = webp_uploads_get_upload_image_mime_transforms(); + + $this->assertIsArray( $transforms ); + $this->assertSame( + array( + 'image/jpeg' => array( 'image/jpeg', 'image/webp' ), + 'image/webp' => array( 'image/webp', 'image/jpeg' ), + ), + $transforms + ); + } + /** * @dataProvider data_provider_image_filesize * diff --git a/tests/modules/images/webp-uploads/load-tests.php b/tests/modules/images/webp-uploads/load-tests.php index 47e378317c..a2dd3907bd 100644 --- a/tests/modules/images/webp-uploads/load-tests.php +++ b/tests/modules/images/webp-uploads/load-tests.php @@ -108,6 +108,37 @@ public function it_should_create_jpeg_and_webp_for_jpeg_images_if_opted_in() { } } + /** + * Create JPEG and WebP for JPEG images, if perflab_generate_webp_and_jpeg option set. + * + * @test + */ + public function it_should_create_jpeg_and_webp_for_jpeg_images_if_generate_webp_and_jpeg_set() { + update_option( 'perflab_generate_webp_and_jpeg', '1' ); + + $attachment_id = $this->factory->attachment->create_upload_object( TESTS_PLUGIN_DIR . '/tests/testdata/modules/images/leafs.jpg' ); + + // There should be JPEG and WebP sources for the full image. + $this->assertImageHasSource( $attachment_id, 'image/jpeg' ); + $this->assertImageHasSource( $attachment_id, 'image/webp' ); + + $metadata = wp_get_attachment_metadata( $attachment_id ); + + // The full image should be a JPEG. + $this->assertArrayHasKey( 'file', $metadata ); + $this->assertStringEndsWith( $metadata['sources']['image/jpeg']['file'], $metadata['file'] ); + $this->assertStringEndsWith( $metadata['sources']['image/jpeg']['file'], get_attached_file( $attachment_id ) ); + + // The post MIME type should be JPEG. + $this->assertSame( 'image/jpeg', get_post_mime_type( $attachment_id ) ); + + // There should be JPEG and WebP sources for all sizes. + foreach ( array_keys( $metadata['sizes'] ) as $size_name ) { + $this->assertImageHasSizeSource( $attachment_id, $size_name, 'image/jpeg' ); + $this->assertImageHasSizeSource( $attachment_id, $size_name, 'image/webp' ); + } + } + /** * Don't create the sources property if no transform is provided. * @@ -894,36 +925,4 @@ private function mock_frontend_body_hooks() { remove_all_actions( 'template_redirect' ); do_action( 'template_redirect' ); } - - /** - * Create JPEG and WebP for JPEG images, if generate_webp_and_jpeg option set. - * - * @test - */ - public function it_should_create_jpeg_and_webp_for_jpeg_images_if_generate_webp_and_jpeg_set() { - - update_option( 'generate_webp_and_jpeg', '1' ); - - $attachment_id = $this->factory->attachment->create_upload_object( TESTS_PLUGIN_DIR . '/tests/testdata/modules/images/leafs.jpg' ); - - // There should be JPEG and WebP sources for the full image. - $this->assertImageHasSource( $attachment_id, 'image/jpeg' ); - $this->assertImageHasSource( $attachment_id, 'image/webp' ); - - $metadata = wp_get_attachment_metadata( $attachment_id ); - - // The full image should be a JPEG. - $this->assertArrayHasKey( 'file', $metadata ); - $this->assertStringEndsWith( $metadata['sources']['image/jpeg']['file'], $metadata['file'] ); - $this->assertStringEndsWith( $metadata['sources']['image/jpeg']['file'], get_attached_file( $attachment_id ) ); - - // The post MIME type should be JPEG. - $this->assertSame( 'image/jpeg', get_post_mime_type( $attachment_id ) ); - - // There should be JPEG and WebP sources for all sizes. - foreach ( array_keys( $metadata['sizes'] ) as $size_name ) { - $this->assertImageHasSizeSource( $attachment_id, $size_name, 'image/jpeg' ); - $this->assertImageHasSizeSource( $attachment_id, $size_name, 'image/webp' ); - } - } } From 9a7155300d03da3ffc611888594d0b985bcc7e2b Mon Sep 17 00:00:00 2001 From: Mehul Kaklotar Date: Thu, 6 Oct 2022 00:02:46 +0530 Subject: [PATCH 15/30] new setting perflab_generate_webp_and_jpeg deleted when uninstalled --- uninstall.php | 1 + 1 file changed, 1 insertion(+) diff --git a/uninstall.php b/uninstall.php index 2c30066dde..bb349f9a87 100644 --- a/uninstall.php +++ b/uninstall.php @@ -38,4 +38,5 @@ */ function perflab_delete_plugin_option() { delete_option( 'perflab_modules_settings' ); + delete_option( 'perflab_generate_webp_and_jpeg' ); } From 23b81028d5ce1870098e069317186772306a991f Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Thu, 6 Oct 2022 09:35:37 +0530 Subject: [PATCH 16/30] Update document Co-authored-by: Felix Arntz --- modules/images/webp-uploads/helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/images/webp-uploads/helper.php b/modules/images/webp-uploads/helper.php index 54224c2cba..bf1f6f4b5d 100644 --- a/modules/images/webp-uploads/helper.php +++ b/modules/images/webp-uploads/helper.php @@ -20,7 +20,7 @@ function webp_uploads_get_upload_image_mime_transforms() { 'image/webp' => array( 'image/webp' ), ); - // Check Setting for generating mimes. + // Check setting for whether to generate both JPEG and WebP. if ( true === (bool) get_option( 'perflab_generate_webp_and_jpeg' ) ) { $default_transforms = array( 'image/jpeg' => array( 'image/jpeg', 'image/webp' ), From 1cd10bc0cd99d0abca3bfd2252c5433aec09cdb6 Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Thu, 6 Oct 2022 09:38:46 +0530 Subject: [PATCH 17/30] Update document Co-authored-by: Felix Arntz --- modules/images/webp-uploads/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/images/webp-uploads/settings.php b/modules/images/webp-uploads/settings.php index 6442e3c336..7deb02353d 100644 --- a/modules/images/webp-uploads/settings.php +++ b/modules/images/webp-uploads/settings.php @@ -1,6 +1,6 @@ Date: Thu, 6 Oct 2022 09:50:10 +0530 Subject: [PATCH 18/30] Update modules/images/webp-uploads/settings.php Co-authored-by: Felix Arntz --- modules/images/webp-uploads/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/images/webp-uploads/settings.php b/modules/images/webp-uploads/settings.php index 7deb02353d..5488084de5 100644 --- a/modules/images/webp-uploads/settings.php +++ b/modules/images/webp-uploads/settings.php @@ -7,7 +7,7 @@ */ /** - * Register media settings field to generate multiple mime WebP & JPEG output. + * Registers setting for generating both JPEG and WebP versions for image uploads. * * @since n.e.x.t */ From f7c3a2af93929e26154195e6c62c25e0f52766e0 Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Thu, 6 Oct 2022 10:36:44 +0530 Subject: [PATCH 19/30] Update document Co-authored-by: Felix Arntz --- modules/images/webp-uploads/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/images/webp-uploads/settings.php b/modules/images/webp-uploads/settings.php index 5488084de5..473245d6b0 100644 --- a/modules/images/webp-uploads/settings.php +++ b/modules/images/webp-uploads/settings.php @@ -18,7 +18,7 @@ function webp_uploads_register_media_settings_field() { add_action( 'init', 'webp_uploads_register_media_settings_field' ); /** - * Add media settings field to generate multiple mime WebP & JPEG output. + * Adds media settings field for the 'perflab_generate_webp_and_jpeg' setting. * * @since n.e.x.t */ From 02aaa7dfcd6906f5854ab969c35b9eb83ced92e1 Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Thu, 6 Oct 2022 10:42:51 +0530 Subject: [PATCH 20/30] Update document Co-authored-by: Felix Arntz --- modules/images/webp-uploads/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/images/webp-uploads/settings.php b/modules/images/webp-uploads/settings.php index 473245d6b0..07c7bd8bad 100644 --- a/modules/images/webp-uploads/settings.php +++ b/modules/images/webp-uploads/settings.php @@ -36,7 +36,7 @@ function webp_uploads_add_media_settings_field() { add_action( 'admin_init', 'webp_uploads_add_media_settings_field' ); /** - * Callback function for the media settings perflab_generate_webp_and_jpeg field. + * Renders the settings field for the 'perflab_generate_webp_and_jpeg' setting. * * @since n.e.x.t */ From 0c3a321a8e01eac84f431221f761f63603447dc1 Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Thu, 6 Oct 2022 10:56:07 +0530 Subject: [PATCH 21/30] Add `$args` in register_setting Co-authored-by: Felix Arntz --- modules/images/webp-uploads/settings.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/images/webp-uploads/settings.php b/modules/images/webp-uploads/settings.php index 07c7bd8bad..b143535696 100644 --- a/modules/images/webp-uploads/settings.php +++ b/modules/images/webp-uploads/settings.php @@ -13,7 +13,15 @@ */ function webp_uploads_register_media_settings_field() { // Register field setting for the processing. - register_setting( 'media', 'perflab_generate_webp_and_jpeg' ); + register_setting( + 'media', + 'perflab_generate_webp_and_jpeg', + array( + 'type' => 'boolean', + 'default' => false, + 'show_in_rest' => false, + ) + ); } add_action( 'init', 'webp_uploads_register_media_settings_field' ); From c7b75751f15d9d7380d836ca29f2548df6556fb9 Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Thu, 6 Oct 2022 11:02:15 +0530 Subject: [PATCH 22/30] Fix PHPCS and remove doc --- modules/images/webp-uploads/settings.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/modules/images/webp-uploads/settings.php b/modules/images/webp-uploads/settings.php index b143535696..6010f13ff3 100644 --- a/modules/images/webp-uploads/settings.php +++ b/modules/images/webp-uploads/settings.php @@ -12,14 +12,13 @@ * @since n.e.x.t */ function webp_uploads_register_media_settings_field() { - // Register field setting for the processing. register_setting( 'media', 'perflab_generate_webp_and_jpeg', array( - 'type' => 'boolean', - 'default' => false, - 'show_in_rest' => false, + 'type' => 'boolean', + 'default' => false, + 'show_in_rest' => false, ) ); } From ab65615023d29ee1839cae928a23e67739947d32 Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Thu, 6 Oct 2022 12:21:43 +0530 Subject: [PATCH 23/30] Update structure and add css --- modules/images/webp-uploads/settings.php | 40 ++++++++++++++++++------ 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/modules/images/webp-uploads/settings.php b/modules/images/webp-uploads/settings.php index 6010f13ff3..16301b39a0 100644 --- a/modules/images/webp-uploads/settings.php +++ b/modules/images/webp-uploads/settings.php @@ -37,7 +37,7 @@ function webp_uploads_add_media_settings_field() { 'webp_uploads_generate_webp_jpeg_setting_callback', 'media', 'uploads', - array( 'class' => 'hidden' ) + array( 'class' => 'perflab-generate-webp-and-jpeg' ) ); } add_action( 'admin_init', 'webp_uploads_add_media_settings_field' ); @@ -49,14 +49,34 @@ function webp_uploads_add_media_settings_field() { */ function webp_uploads_generate_webp_jpeg_setting_callback() { ?> - - - -

- - + +

+ .form-table .perflab-generate-webp-and-jpeg th { + display: none; + } + .form-table .perflab-generate-webp-and-jpeg td { + width: auto; + padding-left: 0; + } + '; + } +} +add_action( 'admin_head', 'webp_uploads_media_setting_style' ); From 691f5a126ca2ec4d87bdae7b965cad4ce8b802c4 Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Thu, 6 Oct 2022 12:37:22 +0530 Subject: [PATCH 24/30] Update style --- modules/images/webp-uploads/settings.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/images/webp-uploads/settings.php b/modules/images/webp-uploads/settings.php index 16301b39a0..9b22de84cb 100644 --- a/modules/images/webp-uploads/settings.php +++ b/modules/images/webp-uploads/settings.php @@ -68,7 +68,8 @@ function webp_uploads_media_setting_style() { global $pagenow; if ( 'options-media.php' === $pagenow ) { - echo ''; + + Date: Thu, 6 Oct 2022 12:45:34 +0530 Subject: [PATCH 25/30] Revert some changes --- modules/images/webp-uploads/settings.php | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/modules/images/webp-uploads/settings.php b/modules/images/webp-uploads/settings.php index 9b22de84cb..cf4b54c80e 100644 --- a/modules/images/webp-uploads/settings.php +++ b/modules/images/webp-uploads/settings.php @@ -49,11 +49,13 @@ function webp_uploads_add_media_settings_field() { */ function webp_uploads_generate_webp_jpeg_setting_callback() { ?> - -

+ + + +

Date: Thu, 6 Oct 2022 13:19:56 +0530 Subject: [PATCH 26/30] Update tests/modules/images/webp-uploads/helper-tests.php --- tests/modules/images/webp-uploads/helper-tests.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/modules/images/webp-uploads/helper-tests.php b/tests/modules/images/webp-uploads/helper-tests.php index c0259eea80..af91385e16 100644 --- a/tests/modules/images/webp-uploads/helper-tests.php +++ b/tests/modules/images/webp-uploads/helper-tests.php @@ -421,7 +421,7 @@ function () { } /** - * Returns custom transforms array when overwritten by webp_uploads_upload_image_mime_transforms filter. + * Returns JPG and WebP transforms array when perflab_generate_webp_and_jpeg option is true. * * @test */ From d2a3a130924bb2edba5771149ee4e9dfffd6d49a Mon Sep 17 00:00:00 2001 From: Mehul Kaklotar Date: Thu, 6 Oct 2022 13:39:58 +0530 Subject: [PATCH 27/30] Update tests/modules/images/webp-uploads/helper-tests.php --- tests/modules/images/webp-uploads/helper-tests.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/modules/images/webp-uploads/helper-tests.php b/tests/modules/images/webp-uploads/helper-tests.php index af91385e16..c7f1de9564 100644 --- a/tests/modules/images/webp-uploads/helper-tests.php +++ b/tests/modules/images/webp-uploads/helper-tests.php @@ -428,7 +428,7 @@ function () { public function it_should_return_jpeg_and_webp_transforms_when_option_generate_webp_and_jpeg_set() { remove_all_filters( 'webp_uploads_get_upload_image_mime_transforms' ); - update_option( 'perflab_generate_webp_and_jpeg', '1' ); + update_option( 'perflab_generate_webp_and_jpeg', true ); $transforms = webp_uploads_get_upload_image_mime_transforms(); From c80ca0f6ce8566823b7ffc6ebb36e87f3e608281 Mon Sep 17 00:00:00 2001 From: Mehul Kaklotar Date: Thu, 6 Oct 2022 13:40:06 +0530 Subject: [PATCH 28/30] Update tests/modules/images/webp-uploads/load-tests.php --- tests/modules/images/webp-uploads/load-tests.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/modules/images/webp-uploads/load-tests.php b/tests/modules/images/webp-uploads/load-tests.php index a2dd3907bd..995eae7cc4 100644 --- a/tests/modules/images/webp-uploads/load-tests.php +++ b/tests/modules/images/webp-uploads/load-tests.php @@ -114,7 +114,7 @@ public function it_should_create_jpeg_and_webp_for_jpeg_images_if_opted_in() { * @test */ public function it_should_create_jpeg_and_webp_for_jpeg_images_if_generate_webp_and_jpeg_set() { - update_option( 'perflab_generate_webp_and_jpeg', '1' ); + update_option( 'perflab_generate_webp_and_jpeg', true ); $attachment_id = $this->factory->attachment->create_upload_object( TESTS_PLUGIN_DIR . '/tests/testdata/modules/images/leafs.jpg' ); From 25858c9c60e5207f63c12cfc99aab18055921263 Mon Sep 17 00:00:00 2001 From: Mukesh Panchal Date: Fri, 7 Oct 2022 10:21:31 +0530 Subject: [PATCH 29/30] Update add_action Co-authored-by: Felix Arntz --- modules/images/webp-uploads/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/images/webp-uploads/settings.php b/modules/images/webp-uploads/settings.php index cf4b54c80e..fab43a6817 100644 --- a/modules/images/webp-uploads/settings.php +++ b/modules/images/webp-uploads/settings.php @@ -80,4 +80,4 @@ function webp_uploads_media_setting_style() { Date: Fri, 7 Oct 2022 10:29:42 +0530 Subject: [PATCH 30/30] Remove global and condition --- modules/images/webp-uploads/settings.php | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/modules/images/webp-uploads/settings.php b/modules/images/webp-uploads/settings.php index fab43a6817..6e66b0f84e 100644 --- a/modules/images/webp-uploads/settings.php +++ b/modules/images/webp-uploads/settings.php @@ -63,21 +63,15 @@ function webp_uploads_generate_webp_jpeg_setting_callback() { * Adds custom style for media settings. * * @since n.e.x.t - * - * @global string $pagenow The filename of the current screen. */ function webp_uploads_media_setting_style() { - global $pagenow; - - if ( 'options-media.php' === $pagenow ) { - ?> - - + +