From 3674096f29c75c5f3f32f17338138c7c77932f53 Mon Sep 17 00:00:00 2001 From: Gael Robin Date: Fri, 23 Feb 2024 05:33:28 +0100 Subject: [PATCH 1/7] Closes #796: Add the `-scaled` version to backup so we can convert it --- classes/Optimization/File.php | 16 ++++++++++++++++ classes/Optimization/Process/AbstractProcess.php | 7 +++++++ 2 files changed, 23 insertions(+) diff --git a/classes/Optimization/File.php b/classes/Optimization/File.php index e5c183333..72c17f00e 100644 --- a/classes/Optimization/File.php +++ b/classes/Optimization/File.php @@ -423,6 +423,22 @@ public function backup( $backup_path = null, $backup_source = null ) { ) ); } + // Check if a '-scaled' version of the image exists. + $scaled_path = preg_replace('/(\.)([^\.]+)$/', '-scaled.$2', $backup_source); + if ($this->filesystem->exists($scaled_path)) { + // Create a backup path for the scaled image. + $scaled_backup_path = preg_replace('/(\.)([^\.]+)$/', '-scaled.$2', $backup_path); + // Copy the '-scaled' version to the backup. + $this->filesystem->copy( $scaled_path, $scaled_backup_path, $overwrite, FS_CHMOD_FILE ); + + if ( ! $this->filesystem->exists( $scaled_backup_path ) ) { + return new \WP_Error( 'backup_doesnt_exist', __( 'The file could not be saved.', 'imagify' ), array( + 'file_path' => $this->filesystem->make_path_relative( $scaled_path ), + 'backup_path' => $this->filesystem->make_path_relative( $scaled_backup_path ), + ) ); + } + } + return true; } diff --git a/classes/Optimization/Process/AbstractProcess.php b/classes/Optimization/Process/AbstractProcess.php index 22a4751a7..77944424f 100644 --- a/classes/Optimization/Process/AbstractProcess.php +++ b/classes/Optimization/Process/AbstractProcess.php @@ -1009,6 +1009,13 @@ public function delete_backup() { if ( $backup_path ) { $this->filesystem->delete( $backup_path ); + + // Check for the -scaled version in the backup. + $scaled_backup_path = preg_replace('/(\.)([^\.]+)$/', '-scaled.$2', $backup_path); + if ($this->filesystem->exists($scaled_backup_path)) { + // Delete the -scaled version from the backup. + $this->filesystem->delete($scaled_backup_path); + } } } From e489f1e59d3ce7a519aacf348ff2d27e8304d0e3 Mon Sep 17 00:00:00 2001 From: Gael Robin Date: Fri, 23 Feb 2024 05:37:33 +0100 Subject: [PATCH 2/7] fix linter --- classes/Optimization/File.php | 6 +++--- classes/Optimization/Process/AbstractProcess.php | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/classes/Optimization/File.php b/classes/Optimization/File.php index 72c17f00e..be70858d3 100644 --- a/classes/Optimization/File.php +++ b/classes/Optimization/File.php @@ -424,10 +424,10 @@ public function backup( $backup_path = null, $backup_source = null ) { } // Check if a '-scaled' version of the image exists. - $scaled_path = preg_replace('/(\.)([^\.]+)$/', '-scaled.$2', $backup_source); - if ($this->filesystem->exists($scaled_path)) { + $scaled_path = preg_replace( '/(\.)([^\.]+)$/', '-scaled.$2', $backup_source ); + if ( $this->filesystem->exists( $scaled_path ) ) { // Create a backup path for the scaled image. - $scaled_backup_path = preg_replace('/(\.)([^\.]+)$/', '-scaled.$2', $backup_path); + $scaled_backup_path = preg_replace( '/(\.)([^\.]+)$/', '-scaled.$2', $backup_path ); // Copy the '-scaled' version to the backup. $this->filesystem->copy( $scaled_path, $scaled_backup_path, $overwrite, FS_CHMOD_FILE ); diff --git a/classes/Optimization/Process/AbstractProcess.php b/classes/Optimization/Process/AbstractProcess.php index 77944424f..443888b06 100644 --- a/classes/Optimization/Process/AbstractProcess.php +++ b/classes/Optimization/Process/AbstractProcess.php @@ -1011,10 +1011,10 @@ public function delete_backup() { $this->filesystem->delete( $backup_path ); // Check for the -scaled version in the backup. - $scaled_backup_path = preg_replace('/(\.)([^\.]+)$/', '-scaled.$2', $backup_path); - if ($this->filesystem->exists($scaled_backup_path)) { + $scaled_backup_path = preg_replace( '/(\.)([^\.]+)$/', '-scaled.$2', $backup_path ); + if ( $this->filesystem->exists( $scaled_backup_path ) ) { // Delete the -scaled version from the backup. - $this->filesystem->delete($scaled_backup_path); + $this->filesystem->delete( $scaled_backup_path ); } } } From a3e791d057ed0acff4f2af03a943c322a3d3465c Mon Sep 17 00:00:00 2001 From: Gael Robin Date: Mon, 26 Feb 2024 14:06:42 +0100 Subject: [PATCH 3/7] Delete only the version we are optimizing while doing a bulk --- classes/Optimization/Process/AbstractProcess.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/Optimization/Process/AbstractProcess.php b/classes/Optimization/Process/AbstractProcess.php index 443888b06..5125424a5 100644 --- a/classes/Optimization/Process/AbstractProcess.php +++ b/classes/Optimization/Process/AbstractProcess.php @@ -1454,7 +1454,7 @@ protected function delete_nextgen_file( $file_path ) { $next_gen_file = new File( $file_path ); // Delete next-gen images. - foreach ( $this->extensions as $extension ) { + foreach ( imagify_nextgen_images_formats() as $extension ) { $this->delete_file( $next_gen_file->get_path_to_nextgen( $extension ) ); } } From 0f7940503a0eadb6e6d97b0b6749a8fb87080288 Mon Sep 17 00:00:00 2001 From: Gael Robin Date: Tue, 27 Feb 2024 15:01:39 +0100 Subject: [PATCH 4/7] Fix Adds a parameters to delete next-gen files with all format or current one. Fix the button `Delete permanently` --- classes/Optimization/Process/AbstractProcess.php | 14 ++++++++++---- inc/classes/class-imagify-admin-ajax-post.php | 2 +- inc/common/attachments.php | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/classes/Optimization/Process/AbstractProcess.php b/classes/Optimization/Process/AbstractProcess.php index 5125424a5..9a9e97873 100644 --- a/classes/Optimization/Process/AbstractProcess.php +++ b/classes/Optimization/Process/AbstractProcess.php @@ -1387,10 +1387,11 @@ private function get_mime_type( $format ) { * @since 2.2 * * @param bool $keep_full Set to true to keep the full size. + * @param bool $all_next_gen True: will delete every next-gen format. False: will delete only the current enabled format. * * @return bool|WP_Error True on success. A WP_Error object on failure. */ - public function delete_nextgen_files( $keep_full = false ) { + public function delete_nextgen_files( $keep_full = false, $all_next_gen = false ) { if ( ! $this->is_valid() ) { return new WP_Error( 'invalid_media', __( 'This media is not valid.', 'imagify' ) ); } @@ -1415,7 +1416,7 @@ public function delete_nextgen_files( $keep_full = false ) { foreach ( $files as $file ) { if ( 0 === strpos( $file['mime-type'], 'image/' ) ) { - $deleted = $this->delete_nextgen_file( $file['path'] ); + $deleted = $this->delete_nextgen_file( $file['path'], $all_next_gen ); if ( is_wp_error( $deleted ) ) { ++$error_count; @@ -1444,17 +1445,22 @@ public function delete_nextgen_files( $keep_full = false ) { * @since 2.2 * * @param string $file_path Path to the non-next-gen file. + * @param bool $all_next_gen True: will delete every next-gen format. False: will delete only the current enabled format. * @return void|WP_Error A \WP_Error object on failure. */ - protected function delete_nextgen_file( $file_path ) { + protected function delete_nextgen_file( $file_path, $all_next_gen = false ) { if ( ! $file_path ) { return new WP_Error( 'no_path', __( 'Path to non-next-gen file not provided.', 'imagify' ) ); } $next_gen_file = new File( $file_path ); + $formats = $this->extensions; + if ( ! $all_next_gen ) { + $formats = imagify_nextgen_images_formats(); + } // Delete next-gen images. - foreach ( imagify_nextgen_images_formats() as $extension ) { + foreach ( $formats as $extension ) { $this->delete_file( $next_gen_file->get_path_to_nextgen( $extension ) ); } } diff --git a/inc/classes/class-imagify-admin-ajax-post.php b/inc/classes/class-imagify-admin-ajax-post.php index fe16ca7f4..420ebbcb4 100755 --- a/inc/classes/class-imagify-admin-ajax-post.php +++ b/inc/classes/class-imagify-admin-ajax-post.php @@ -233,7 +233,7 @@ protected function delete_nextgen_versions( $media_id, $context ) { } $data->delete_optimization_data(); - $deleted = $process->delete_nextgen_files(); + $deleted = $process->delete_nextgen_files( false, true ); if ( is_wp_error( $deleted ) ) { return new WP_Error( 'nextgen_not_deleted', __( 'Previous next-gen files could not be deleted.', 'imagify' ) ); diff --git a/inc/common/attachments.php b/inc/common/attachments.php index 74bfb56ae..ddf34d612 100755 --- a/inc/common/attachments.php +++ b/inc/common/attachments.php @@ -38,7 +38,7 @@ function imagify_cleanup_after_media_deletion( $process ) { * The optimization data will be automatically deleted by WP (post metas). * Delete the Nextgen versions and the backup file. */ - $process->delete_nextgen_files(); + $process->delete_nextgen_files( false, true ); $process->delete_backup(); } From 7ec715c2354e5788d4d6c32892690a5156ce7b3d Mon Sep 17 00:00:00 2001 From: Gael Robin Date: Tue, 27 Feb 2024 15:15:53 +0100 Subject: [PATCH 5/7] Comply phpcs --- classes/Optimization/Process/AbstractProcess.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/classes/Optimization/Process/AbstractProcess.php b/classes/Optimization/Process/AbstractProcess.php index 9a9e97873..3b0f2d1a7 100644 --- a/classes/Optimization/Process/AbstractProcess.php +++ b/classes/Optimization/Process/AbstractProcess.php @@ -1445,7 +1445,7 @@ public function delete_nextgen_files( $keep_full = false, $all_next_gen = false * @since 2.2 * * @param string $file_path Path to the non-next-gen file. - * @param bool $all_next_gen True: will delete every next-gen format. False: will delete only the current enabled format. + * @param bool $all_next_gen True: will delete every next-gen format. False: will delete only the current enabled format. * @return void|WP_Error A \WP_Error object on failure. */ protected function delete_nextgen_file( $file_path, $all_next_gen = false ) { @@ -1454,11 +1454,11 @@ protected function delete_nextgen_file( $file_path, $all_next_gen = false ) { } $next_gen_file = new File( $file_path ); - $formats = $this->extensions; + $formats = $this->extensions; - if ( ! $all_next_gen ) { - $formats = imagify_nextgen_images_formats(); - } + if ( ! $all_next_gen ) { + $formats = imagify_nextgen_images_formats(); + } // Delete next-gen images. foreach ( $formats as $extension ) { $this->delete_file( $next_gen_file->get_path_to_nextgen( $extension ) ); From da145db62145b1a78b12133ad29c441acdbf24cc Mon Sep 17 00:00:00 2001 From: Gael Robin Date: Tue, 27 Feb 2024 16:06:23 +0100 Subject: [PATCH 6/7] Fix delete_nextgen_file --- classes/Optimization/Process/AbstractProcess.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/classes/Optimization/Process/AbstractProcess.php b/classes/Optimization/Process/AbstractProcess.php index 3b0f2d1a7..711bc1159 100644 --- a/classes/Optimization/Process/AbstractProcess.php +++ b/classes/Optimization/Process/AbstractProcess.php @@ -1461,7 +1461,13 @@ protected function delete_nextgen_file( $file_path, $all_next_gen = false ) { } // Delete next-gen images. foreach ( $formats as $extension ) { - $this->delete_file( $next_gen_file->get_path_to_nextgen( $extension ) ); + $path = $next_gen_file->get_path_to_nextgen( $extension ); + + if ( ! $path ) { + continue; + } + + $this->delete_file( $path ); } } From 81aae2cce4f4d3606852ad375f06c1d8d939c86b Mon Sep 17 00:00:00 2001 From: Gael Robin Date: Tue, 27 Feb 2024 16:19:43 +0100 Subject: [PATCH 7/7] Fix Codacy --- classes/Optimization/Process/AbstractProcess.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/classes/Optimization/Process/AbstractProcess.php b/classes/Optimization/Process/AbstractProcess.php index f923767d3..48fc03088 100644 --- a/classes/Optimization/Process/AbstractProcess.php +++ b/classes/Optimization/Process/AbstractProcess.php @@ -1462,11 +1462,11 @@ protected function delete_nextgen_file( $file_path, $all_next_gen = false ) { } // Delete next-gen images. foreach ( $formats as $extension ) { - $path = $next_gen_file->get_path_to_nextgen( $extension ); + $path = $next_gen_file->get_path_to_nextgen( $extension ); - if ( ! $path ) { - continue; - } + if ( ! $path ) { + continue; + } $this->delete_file( $path ); }