164 lines
4.1 KiB
PHP
164 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace ImageOptimization\Classes\Image;
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
|
|
class Image_Meta {
|
|
public const IMAGE_OPTIMIZER_METADATA_KEY = 'image_optimizer_metadata';
|
|
private const INITIAL_META_VALUE = [
|
|
'status' => Image_Status::NOT_OPTIMIZED,
|
|
'error_type' => null,
|
|
'compression_level' => null,
|
|
'sizes_optimized' => [],
|
|
'backups' => [],
|
|
'original_data' => [
|
|
'sizes' => [],
|
|
],
|
|
];
|
|
|
|
private int $image_id;
|
|
private array $image_meta;
|
|
|
|
public function get_status(): string {
|
|
return $this->image_meta['status'];
|
|
}
|
|
|
|
public function set_status( string $status ): Image_Meta {
|
|
$this->image_meta['status'] = $status;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function get_error_type(): ?string {
|
|
return $this->image_meta['error_type'];
|
|
}
|
|
|
|
public function set_error_type( ?string $type ): Image_Meta {
|
|
$this->image_meta['error_type'] = $type;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function get_compression_level(): ?string {
|
|
return $this->image_meta['compression_level'];
|
|
}
|
|
|
|
public function set_compression_level( string $compression_level ): Image_Meta {
|
|
$this->image_meta['compression_level'] = $compression_level;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function get_optimized_sizes(): array {
|
|
return $this->image_meta['sizes_optimized'];
|
|
}
|
|
|
|
public function add_optimized_size( string $optimized_size ): Image_Meta {
|
|
$this->image_meta['sizes_optimized'][] = $optimized_size;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function clear_optimized_sizes(): Image_Meta {
|
|
$this->image_meta['sizes_optimized'] = [];
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function clear_backups(): Image_Meta {
|
|
$this->image_meta['backups'] = [];
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function get_image_backup_paths(): array {
|
|
return $this->image_meta['backups'];
|
|
}
|
|
|
|
public function get_image_backup_path( string $image_size ): ?string {
|
|
return $this->image_meta['backups'][ $image_size ] ?? null;
|
|
}
|
|
|
|
public function set_image_backup_path( string $image_size, string $backup_path ): Image_Meta {
|
|
$this->image_meta['backups'][ $image_size ] = $backup_path;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function remove_image_backup_path( string $image_size ): Image_Meta {
|
|
unset( $this->image_meta['backups'][ $image_size ] );
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function get_original_file_size( string $image_size ): ?int {
|
|
if ( ! isset( $this->image_meta['original_data']['sizes'][ $image_size ]['filesize'] ) ) {
|
|
return null;
|
|
}
|
|
|
|
return $this->image_meta['original_data']['sizes'][ $image_size ]['filesize'];
|
|
}
|
|
|
|
public function get_original_mime_type( string $image_size ): ?string {
|
|
if ( ! isset( $this->image_meta['original_data']['sizes'][ $image_size ] ) ) {
|
|
return null;
|
|
}
|
|
|
|
return $this->image_meta['original_data']['sizes'][ $image_size ]['mime-type'];
|
|
}
|
|
|
|
public function get_original_width( string $image_size ): ?string {
|
|
if ( ! isset( $this->image_meta['original_data']['sizes'][ $image_size ] ) ) {
|
|
return null;
|
|
}
|
|
|
|
return $this->image_meta['original_data']['sizes'][ $image_size ]['width'];
|
|
}
|
|
|
|
public function get_original_height( string $image_size ): ?string {
|
|
if ( ! isset( $this->image_meta['original_data']['sizes'][ $image_size ] ) ) {
|
|
return null;
|
|
}
|
|
|
|
return $this->image_meta['original_data']['sizes'][ $image_size ]['height'];
|
|
}
|
|
|
|
public function add_original_data( string $size, array $data ): Image_Meta {
|
|
$this->image_meta['original_data']['sizes'][ $size ] = $data;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function clear_original_data(): Image_Meta {
|
|
$this->image_meta['original_data'] = [ 'sizes' => [] ];
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function delete(): bool {
|
|
return delete_post_meta( $this->image_id, self::IMAGE_OPTIMIZER_METADATA_KEY );
|
|
}
|
|
|
|
public function save(): Image_Meta {
|
|
update_post_meta( $this->image_id, self::IMAGE_OPTIMIZER_METADATA_KEY, $this->image_meta );
|
|
|
|
$this->query_meta();
|
|
|
|
return $this;
|
|
}
|
|
|
|
private function query_meta(): void {
|
|
$meta = get_post_meta( $this->image_id, self::IMAGE_OPTIMIZER_METADATA_KEY, true );
|
|
$this->image_meta = $meta ? array_replace_recursive( self::INITIAL_META_VALUE, $meta ) : self::INITIAL_META_VALUE;
|
|
}
|
|
|
|
public function __construct( int $image_id ) {
|
|
$this->image_id = $image_id;
|
|
|
|
$this->query_meta();
|
|
}
|
|
}
|