PluginProbe
Image Optimization – Compress Images and Convert to WebP or AVIF / 1.1.0
Image Optimization – Compress Images and Convert to WebP or AVIF v1.1.0
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 1.6.6 All 32 releases
image-optimization / modules / optimization / classes / single-optimization.php

single-optimization.php in Image Optimization – Compress Images and Convert to WebP or AVIF 1.1.0, at modules/optimization/classes/single-optimization.php

88 lines 2.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace ImageOptimization\Modules\Optimization\Classes;
4
5 use ImageOptimization\Classes\Async_Operation\{
6 Async_Operation,
7 Async_Operation_Hook,
8 Async_Operation_Queue,
9 Exceptions\Async_Operation_Exception,
10 Queries\Image_Optimization_Operation_Query
11 };
12 use ImageOptimization\Classes\Image\{
13 Image_Meta,
14 Image_Status,
15 };
16 use ImageOptimization\Modules\Optimization\Classes\Exceptions\Image_Optimization_Already_In_Progress_Error;
17 use Throwable;
18
19 if ( ! defined( 'ABSPATH' ) ) {
20 exit; // Exit if accessed directly.
21 }
22
23 class Single_Optimization {
24 /**
25 * @throws Throwable|Async_Operation_Exception
26 */
27 public static function optimize_many( array $image_ids, bool $is_reoptimize = false ): void {
28 foreach ( $image_ids as $image_id ) {
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 }
36 }
37 }
38
39 /**
40 * @throws Throwable|Async_Operation_Exception|Image_Optimization_Already_In_Progress_Error
41 */
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
49 $meta = new Image_Meta( $image_id );
50
51 try {
52 $meta
53 ->set_status(
54 $is_reoptimize
55 ? Image_Status::REOPTIMIZING_IN_PROGRESS
56 : Image_Status::OPTIMIZATION_IN_PROGRESS
57 )
58 ->save();
59
60 Async_Operation::create(
61 $is_reoptimize ? Async_Operation_Hook::REOPTIMIZE_SINGLE : Async_Operation_Hook::OPTIMIZE_SINGLE,
62 [ 'attachment_id' => $image_id ],
63 Async_Operation_Queue::OPTIMIZE
64 );
65 } catch ( Throwable $t ) {
66 $meta
67 ->set_status( $is_reoptimize ? Image_Status::REOPTIMIZING_FAILED : Image_Status::OPTIMIZATION_FAILED )
68 ->save();
69
70 throw $t;
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;
86 }
87 }
88