PluginProbe
Image Optimizer – Compress Images and Convert to WebP or AVIF / 1.7.7
Image Optimizer – Compress Images and Convert to WebP or AVIF v1.7.7
1.7.7 1.7.6 1.7.5 1.7.4 trunk 1.0.0 1.0.1 1.0.2 1.1.0 1.2.0 1.2.1 1.3.0 1.4.0 1.4.1 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 All 33 releases
← All changes | modules/optimization/components/upload-optimization.php +33 -13 1.4.11.7.7 View file →
@@ -6,19 +6,28 @@
6 6 Async_Operation,
7 7 Async_Operation_Hook,
8 8 Async_Operation_Queue,
9 9 };
10 +
10 11 use ImageOptimization\Classes\Image\{
12 + Exceptions\Invalid_Image_Exception,
11 13 Image_Meta,
12 14 Image_Optimization_Error_Type,
13 - Image_Status
15 + Image_Status,
14 16 };
17 +
18 +use ImageOptimization\Modules\Optimization\Classes\{
19 + Exceptions\Image_File_Already_Exists_Error,
20 + Exceptions\Image_Validation_Error,
21 + Optimize_Image,
22 + Validate_Image,
23 +};
24 +
15 25 use ImageOptimization\Classes\Logger;
16 26 use ImageOptimization\Classes\Exceptions\Quota_Exceeded_Error;
17 -use ImageOptimization\Modules\Oauth\Components\Connect;
18 -use ImageOptimization\Modules\Optimization\Classes\Exceptions\Image_File_Already_Exists_Error;
19 -use ImageOptimization\Modules\Optimization\Classes\Optimize_Image;
27 +use ImageOptimization\Modules\Connect\Classes\Exceptions\Connection_Error;
20 28 use ImageOptimization\Modules\Settings\Classes\Settings;
29 +
21 30 use Throwable;
22 31 use ImageOptimization\Plugin;
23 32
24 33 if ( ! defined( 'ABSPATH' ) ) {
@@ -25,11 +34,15 @@
25 34 exit; // Exit if accessed directly.
26 35 }
27 36
28 37 class Upload_Optimization {
29 - public function handle_upload( int $attachment_id ) {
38 + public function handle_upload( array $metadata, int $attachment_id, string $context ) {
39 + if ( 'create' !== $context ) {
40 + return $metadata;
41 + }
42 +
30 43 if ( ! Settings::get( Settings::OPTIMIZE_ON_UPLOAD_OPTION_NAME ) ) {
31 - return;
44 + return $metadata;
32 45 }
33 46
34 47 // @var ImageOptimizer/Modules/ConnectManager/Module
35 48 $module = Plugin::instance()->modules_manager->get_modules( 'connect-manager' );
@@ -34,15 +47,15 @@
34 47 // @var ImageOptimizer/Modules/ConnectManager/Module
35 48 $module = Plugin::instance()->modules_manager->get_modules( 'connect-manager' );
36 49
37 50 if ( ! $module->connect_instance->is_connected() || ! $module->connect_instance->is_activated() ) {
38 - return;
51 + return $metadata;
39 52 }
40 53
41 - $attachment_post = get_post( $attachment_id );
42 -
43 - if ( ! wp_attachment_is_image( $attachment_post ) ) {
44 - return;
54 + try {
55 + Validate_Image::is_valid( $attachment_id );
56 + } catch ( Invalid_Image_Exception | Image_Validation_Error $iie ) {
57 + return $metadata;
45 58 }
46 59
47 60 $meta = new Image_Meta( $attachment_id );
48 61
@@ -60,8 +73,10 @@
60 73 $meta
61 74 ->set_status( Image_Status::OPTIMIZATION_FAILED )
62 75 ->save();
63 76 }
77 +
78 + return $metadata;
64 79 }
65 80
66 81 /** @async */
67 82 public function optimize_image_on_upload( int $image_id ) {
@@ -76,8 +91,13 @@
76 91 ( new Image_Meta( $image_id ) )
77 92 ->set_status( Image_Status::OPTIMIZATION_FAILED )
78 93 ->set_error_type( Image_Optimization_Error_Type::QUOTA_EXCEEDED )
79 94 ->save();
95 + } catch ( Connection_Error $ce ) {
96 + ( new Image_Meta( $image_id ) )
97 + ->set_status( Image_Status::OPTIMIZATION_FAILED )
98 + ->set_error_type( Image_Optimization_Error_Type::CONNECTION_ERROR )
99 + ->save();
80 100 } catch ( Image_File_Already_Exists_Error $fe ) {
81 101 ( new Image_Meta( $image_id ) )
82 102 ->set_status( Image_Status::OPTIMIZATION_FAILED )
83 103 ->set_error_type( Image_Optimization_Error_Type::FILE_ALREADY_EXISTS )
@@ -82,9 +102,9 @@
82 102 ->set_status( Image_Status::OPTIMIZATION_FAILED )
83 103 ->set_error_type( Image_Optimization_Error_Type::FILE_ALREADY_EXISTS )
84 104 ->save();
85 105 } catch ( Throwable $t ) {
86 - Logger::log( Logger::LEVEL_ERROR, 'Optimization error. Reason: ' . $t->getMessage() );
106 + Logger::error( 'Upload optimization error. Reason: ' . $t->getMessage() );
87 107
88 108 ( new Image_Meta( $image_id ) )
89 109 ->set_status( Image_Status::OPTIMIZATION_FAILED )
90 110 ->set_error_type( Image_Optimization_Error_Type::GENERIC )
@@ -92,8 +112,8 @@
92 112 }
93 113 }
94 114
95 115 public function __construct() {
96 - add_action( 'add_attachment', [ $this, 'handle_upload' ] );
116 + add_action( 'wp_generate_attachment_metadata', [ $this, 'handle_upload' ], 10, 3 );
97 117 add_action( Async_Operation_Hook::OPTIMIZE_ON_UPLOAD, [ $this, 'optimize_image_on_upload' ] );
98 118 }
99 119 }