PluginProbe
Image Optimizer – Compress Images and Convert to WebP or AVIF / 1.7.4
Image Optimizer – Compress Images and Convert to WebP or AVIF v1.7.4
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
image-optimization / classes / image / image-meta.php

image-meta.php in Image Optimizer – Compress Images and Convert to WebP or AVIF 1.7.4, at classes/image/image-meta.php

183 lines 4.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace ImageOptimization\Classes\Image;
4
5 if ( ! defined( 'ABSPATH' ) ) {
6 exit; // Exit if accessed directly.
7 }
8
9 class Image_Meta {
10 public const IMAGE_OPTIMIZER_METADATA_KEY = 'image_optimizer_metadata';
11 private const INITIAL_META_VALUE = [
12 'status' => Image_Status::NOT_OPTIMIZED,
13 'error_type' => null,
14 'compression_level' => null,
15 'retry_count' => null,
16 'sizes_optimized' => [],
17 'backups' => [],
18 'original_data' => [
19 'sizes' => [],
20 ],
21 ];
22
23 private int $image_id;
24 private array $image_meta;
25
26 public function get_status(): string {
27 return $this->image_meta['status'];
28 }
29
30 public function set_status( string $status ): Image_Meta {
31 $this->image_meta['status'] = $status;
32
33 return $this;
34 }
35
36 public function get_error_type(): ?string {
37 return $this->image_meta['error_type'];
38 }
39
40 public function set_error_type( ?string $type ): Image_Meta {
41 $this->image_meta['error_type'] = $type;
42
43 return $this;
44 }
45
46 public function get_compression_level(): ?string {
47 return $this->image_meta['compression_level'];
48 }
49
50 public function set_compression_level( string $compression_level ): Image_Meta {
51 $this->image_meta['compression_level'] = $compression_level;
52
53 return $this;
54 }
55
56 public function get_retry_count(): ?int {
57 return $this->image_meta['retry_count'];
58 }
59
60 public function set_retry_count( ?int $retry_count ): Image_Meta {
61 $this->image_meta['retry_count'] = $retry_count;
62
63 return $this;
64 }
65
66 public function get_optimized_sizes(): array {
67 return $this->image_meta['sizes_optimized'];
68 }
69
70 public function add_optimized_size( string $optimized_size ): Image_Meta {
71 if ( ! in_array( $optimized_size, $this->image_meta['sizes_optimized'], true ) ) {
72 $this->image_meta['sizes_optimized'][] = $optimized_size;
73 }
74
75 return $this;
76 }
77
78 public function clear_optimized_sizes(): Image_Meta {
79 $this->image_meta['sizes_optimized'] = [];
80
81 return $this;
82 }
83
84 public function set_optimized_size( array $optimized_size ): Image_Meta {
85 $this->image_meta['sizes_optimized'] = $optimized_size;
86
87 return $this;
88 }
89
90 public function clear_backups(): Image_Meta {
91 $this->image_meta['backups'] = [];
92
93 return $this;
94 }
95
96 public function get_image_backup_paths(): array {
97 return $this->image_meta['backups'];
98 }
99
100 public function get_image_backup_path( string $image_size ): ?string {
101 return $this->image_meta['backups'][ $image_size ] ?? null;
102 }
103
104 public function set_image_backup_path( string $image_size, string $backup_path ): Image_Meta {
105 $this->image_meta['backups'][ $image_size ] = $backup_path;
106
107 return $this;
108 }
109
110 public function remove_image_backup_path( string $image_size ): Image_Meta {
111 unset( $this->image_meta['backups'][ $image_size ] );
112
113 return $this;
114 }
115
116 public function get_original_file_size( string $image_size ): ?int {
117 if ( ! isset( $this->image_meta['original_data']['sizes'][ $image_size ]['filesize'] ) ) {
118 return null;
119 }
120
121 return $this->image_meta['original_data']['sizes'][ $image_size ]['filesize'];
122 }
123
124 public function get_original_mime_type( string $image_size ): ?string {
125 if ( ! isset( $this->image_meta['original_data']['sizes'][ $image_size ] ) ) {
126 return null;
127 }
128
129 return $this->image_meta['original_data']['sizes'][ $image_size ]['mime-type'];
130 }
131
132 public function get_original_width( string $image_size ): ?string {
133 if ( ! isset( $this->image_meta['original_data']['sizes'][ $image_size ] ) ) {
134 return null;
135 }
136
137 return $this->image_meta['original_data']['sizes'][ $image_size ]['width'];
138 }
139
140 public function get_original_height( string $image_size ): ?string {
141 if ( ! isset( $this->image_meta['original_data']['sizes'][ $image_size ] ) ) {
142 return null;
143 }
144
145 return $this->image_meta['original_data']['sizes'][ $image_size ]['height'];
146 }
147
148 public function add_original_data( string $size, array $data ): Image_Meta {
149 $this->image_meta['original_data']['sizes'][ $size ] = $data;
150
151 return $this;
152 }
153
154 public function clear_original_data(): Image_Meta {
155 $this->image_meta['original_data'] = [ 'sizes' => [] ];
156
157 return $this;
158 }
159
160 public function delete(): bool {
161 return delete_post_meta( $this->image_id, self::IMAGE_OPTIMIZER_METADATA_KEY );
162 }
163
164 public function save(): Image_Meta {
165 update_post_meta( $this->image_id, self::IMAGE_OPTIMIZER_METADATA_KEY, $this->image_meta );
166
167 $this->query_meta();
168
169 return $this;
170 }
171
172 private function query_meta(): void {
173 $meta = get_post_meta( $this->image_id, self::IMAGE_OPTIMIZER_METADATA_KEY, true );
174 $this->image_meta = $meta ? array_replace_recursive( self::INITIAL_META_VALUE, $meta ) : self::INITIAL_META_VALUE;
175 }
176
177 public function __construct( int $image_id ) {
178 $this->image_id = $image_id;
179
180 $this->query_meta();
181 }
182 }
183