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/classes/single-optimization.php +41 -8 1.0.01.7.7 View file →
@@ -1,16 +1,20 @@
1 1 <?php
2 2
3 -namespace ImageOptimizer\Modules\Optimization\Classes;
3 +namespace ImageOptimization\Modules\Optimization\Classes;
4 4
5 -use ImageOptimizer\Classes\Async_Operation\{Async_Operation,
5 +use ImageOptimization\Classes\Async_Operation\{
6 + Async_Operation,
6 7 Async_Operation_Hook,
7 8 Async_Operation_Queue,
8 - Exceptions\Async_Operation_Exception};
9 -use ImageOptimizer\Classes\Image\{
9 + Exceptions\Async_Operation_Exception,
10 + Queries\Image_Optimization_Operation_Query
11 +};
12 +use ImageOptimization\Classes\Image\{
10 13 Image_Meta,
11 14 Image_Status,
12 15 };
16 +use ImageOptimization\Modules\Optimization\Classes\Exceptions\Image_Optimization_Already_In_Progress_Error;
13 17 use Throwable;
14 18
15 19 if ( ! defined( 'ABSPATH' ) ) {
16 20 exit; // Exit if accessed directly.
@@ -16,18 +20,33 @@
16 20 exit; // Exit if accessed directly.
17 21 }
18 22
19 23 class Single_Optimization {
20 - public static function optimize_many( array $image_ids, bool $is_reoptimize = false ) {
24 + /**
25 + * @throws Throwable|Async_Operation_Exception
26 + */
27 + public static function optimize_many( array $image_ids, bool $is_reoptimize = false ): void {
21 28 foreach ( $image_ids as $image_id ) {
22 - self::schedule_single_optimization( $image_id, $is_reoptimize );
29 + try {
30 + self::schedule_single_optimization( $image_id, $is_reoptimize );
31 + } catch ( Image_Optimization_Already_In_Progress_Error $ioe ) {
32 + continue;
33 + } catch ( Throwable $t ) {
34 + throw $t;
35 + }
23 36 }
24 37 }
25 38
26 39 /**
27 - * @throws Throwable|Async_Operation_Exception
40 + * @throws Throwable|Async_Operation_Exception|Image_Optimization_Already_In_Progress_Error
28 41 */
29 - public static function schedule_single_optimization( int $image_id, bool $is_reoptimize = false ) {
42 + public static function schedule_single_optimization( int $image_id, bool $is_reoptimize = false ): void {
43 + if ( self::is_optimization_in_progress( $image_id ) ) {
44 + throw new Image_Optimization_Already_In_Progress_Error(
45 + esc_html__( 'Optimization is already in progress', 'image-optimization' )
46 + );
47 + }
48 +
30 49 $meta = new Image_Meta( $image_id );
31 50
32 51 try {
33 52 $meta
@@ -49,6 +68,20 @@
49 68 ->save();
50 69
51 70 throw $t;
52 71 }
72 + }
73 +
74 + /**
75 + * @throws Async_Operation_Exception
76 + */
77 + private static function is_optimization_in_progress( int $image_id ): bool {
78 + $query = ( new Image_Optimization_Operation_Query() )
79 + ->set_status( [ Async_Operation::OPERATION_STATUS_PENDING, Async_Operation::OPERATION_STATUS_RUNNING ] )
80 + ->set_image_id( $image_id )
81 + ->return_ids();
82 +
83 + $operations = Async_Operation::get( $query );
84 +
85 + return count( $operations ) > 0;
53 86 }
54 87 }