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 +53 -19 1.0.21.7.7 View file →
@@ -1,39 +1,61 @@
1 1 <?php
2 2
3 -namespace ImageOptimizer\Modules\Optimization\Components;
3 +namespace ImageOptimization\Modules\Optimization\Components;
4 4
5 -use ImageOptimizer\Classes\Async_Operation\{
5 +use ImageOptimization\Classes\Async_Operation\{
6 6 Async_Operation,
7 7 Async_Operation_Hook,
8 8 Async_Operation_Queue,
9 9 };
10 -use ImageOptimizer\Classes\Image\{
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 };
15 -use ImageOptimizer\Classes\Logger;
16 -use ImageOptimizer\Modules\Oauth\Classes\Exceptions\Quota_Exceeded_Error;
17 -use ImageOptimizer\Modules\Oauth\Components\Connect;
18 -use ImageOptimizer\Modules\Optimization\Classes\Optimize_Image;
19 -use ImageOptimizer\Modules\Settings\Classes\Settings;
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 +
25 +use ImageOptimization\Classes\Logger;
26 +use ImageOptimization\Classes\Exceptions\Quota_Exceeded_Error;
27 +use ImageOptimization\Modules\Connect\Classes\Exceptions\Connection_Error;
28 +use ImageOptimization\Modules\Settings\Classes\Settings;
29 +
20 30 use Throwable;
31 +use ImageOptimization\Plugin;
21 32
33 +if ( ! defined( 'ABSPATH' ) ) {
34 + exit; // Exit if accessed directly.
35 +}
36 +
22 37 class Upload_Optimization {
23 - 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 +
24 43 if ( ! Settings::get( Settings::OPTIMIZE_ON_UPLOAD_OPTION_NAME ) ) {
25 - return;
44 + return $metadata;
26 45 }
27 46
28 - if ( ! Connect::is_connected() || ! Connect::is_activated() ) {
29 - return;
47 + // @var ImageOptimizer/Modules/ConnectManager/Module
48 + $module = Plugin::instance()->modules_manager->get_modules( 'connect-manager' );
49 +
50 + if ( ! $module->connect_instance->is_connected() || ! $module->connect_instance->is_activated() ) {
51 + return $metadata;
30 52 }
31 53
32 - $attachment_post = get_post( $attachment_id );
33 -
34 - if ( ! wp_attachment_is_image( $attachment_post ) ) {
35 - return;
54 + try {
55 + Validate_Image::is_valid( $attachment_id );
56 + } catch ( Invalid_Image_Exception | Image_Validation_Error $iie ) {
57 + return $metadata;
36 58 }
37 59
38 60 $meta = new Image_Meta( $attachment_id );
39 61
@@ -51,8 +73,10 @@
51 73 $meta
52 74 ->set_status( Image_Status::OPTIMIZATION_FAILED )
53 75 ->save();
54 76 }
77 +
78 + return $metadata;
55 79 }
56 80
57 81 /** @async */
58 82 public function optimize_image_on_upload( int $image_id ) {
@@ -67,10 +91,20 @@
67 91 ( new Image_Meta( $image_id ) )
68 92 ->set_status( Image_Status::OPTIMIZATION_FAILED )
69 93 ->set_error_type( Image_Optimization_Error_Type::QUOTA_EXCEEDED )
70 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();
100 + } catch ( Image_File_Already_Exists_Error $fe ) {
101 + ( new Image_Meta( $image_id ) )
102 + ->set_status( Image_Status::OPTIMIZATION_FAILED )
103 + ->set_error_type( Image_Optimization_Error_Type::FILE_ALREADY_EXISTS )
104 + ->save();
71 105 } catch ( Throwable $t ) {
72 - Logger::log( Logger::LEVEL_ERROR, 'Optimization error. Reason: ' . $t->getMessage() );
106 + Logger::error( 'Upload optimization error. Reason: ' . $t->getMessage() );
73 107
74 108 ( new Image_Meta( $image_id ) )
75 109 ->set_status( Image_Status::OPTIMIZATION_FAILED )
76 110 ->set_error_type( Image_Optimization_Error_Type::GENERIC )
@@ -78,8 +112,8 @@
78 112 }
79 113 }
80 114
81 115 public function __construct() {
82 - add_action( 'add_attachment', [ $this, 'handle_upload' ] );
116 + add_action( 'wp_generate_attachment_metadata', [ $this, 'handle_upload' ], 10, 3 );
83 117 add_action( Async_Operation_Hook::OPTIMIZE_ON_UPLOAD, [ $this, 'optimize_image_on_upload' ] );
84 118 }
85 119 }