PluginProbe
Imagify Image Optimization: Optimize Images | Compress & Convert to WebP/AVIF / 1.9.4
Imagify Image Optimization: Optimize Images | Compress & Convert to WebP/AVIF v1.9.4
2.3.4 2.3.3 2.3.2 2.3.1 2.3.0 2.2.9 2.2.8 trunk 1.10 1.3.3 1.3.4 1.3.5 1.3.5.1 1.3.5.2 1.3.6 1.3.6.1 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.5 All 103 releases
imagify / classes / Optimization / Data / WP.php

WP.php in Imagify Image Optimization: Optimize Images | Compress & Convert to WebP/AVIF 1.9.4, at classes/Optimization/Data/WP.php

144 lines 3.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Imagify\Optimization\Data;
3
4 defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
6 /**
7 * Optimization data class for the medias in the WP library.
8 * This class constructor accepts:
9 * - A post ID (int).
10 * - A \WP_Post object.
11 * - A \Imagify\Media\MediaInterface object.
12 *
13 * @since 1.9
14 * @author Grégory Viguier
15 */
16 class WP extends AbstractData {
17
18 /**
19 * Get the whole media optimization data.
20 *
21 * @since 1.9
22 * @access public
23 * @author Grégory Viguier
24 *
25 * @return array The data. See parent method for details.
26 */
27 public function get_optimization_data() {
28 if ( ! $this->is_valid() ) {
29 return $this->default_optimization_data;
30 }
31
32 $id = $this->get_media()->get_id();
33
34 $data = get_post_meta( $id, '_imagify_data', true );
35 $data = is_array( $data ) ? $data : [];
36
37 if ( isset( $data['sizes'] ) && ! is_array( $data['sizes'] ) ) {
38 $data['sizes'] = [];
39 }
40
41 if ( isset( $data['stats'] ) && ! is_array( $data['stats'] ) ) {
42 $data['stats'] = [];
43 }
44
45 $data = array_merge( $this->default_optimization_data, $data );
46
47 $data['status'] = get_post_meta( $id, '_imagify_status', true );
48 $data['status'] = is_string( $data['status'] ) ? $data['status'] : '';
49
50 $data['level'] = get_post_meta( $id, '_imagify_optimization_level', true );
51 $data['level'] = is_numeric( $data['level'] ) ? (int) $data['level'] : false;
52
53 return $data;
54 }
55
56 /**
57 * Update the optimization data, level, and status for a size.
58 *
59 * @since 1.9
60 * @access public
61 * @author Grégory Viguier
62 *
63 * @param string $size The size name.
64 * @param array $data The optimization data. See parent method for details.
65 */
66 public function update_size_optimization_data( $size, array $data ) {
67 if ( ! $this->is_valid() ) {
68 return;
69 }
70
71 $id = $this->get_media()->get_id();
72
73 if ( 'full' === $size ) {
74 // Optimization level.
75 update_post_meta( $id, '_imagify_optimization_level', $data['level'] );
76 // Optimization status.
77 update_post_meta( $id, '_imagify_status', $data['status'] );
78 }
79
80 // Size data and stats.
81 $old_data = get_post_meta( $id, '_imagify_data', true );
82 $old_data = is_array( $old_data ) ? $old_data : [];
83
84 if ( ! isset( $old_data['sizes'] ) || ! is_array( $old_data['sizes'] ) ) {
85 $old_data['sizes'] = [];
86 }
87
88 if ( ! isset( $old_data['stats'] ) || ! is_array( $old_data['stats'] ) ) {
89 $old_data['stats'] = [];
90 }
91
92 $old_data['stats'] = array_merge( [
93 'original_size' => 0,
94 'optimized_size' => 0,
95 'percent' => 0,
96 ], $old_data['stats'] );
97
98 if ( ! $data['success'] ) {
99 /**
100 * Error.
101 */
102 $old_data['sizes'][ $size ] = [
103 'success' => false,
104 'error' => $data['error'],
105 ];
106 } else {
107 /**
108 * Success.
109 */
110 $old_data['sizes'][ $size ] = [
111 'success' => true,
112 'original_size' => $data['original_size'],
113 'optimized_size' => $data['optimized_size'],
114 'percent' => round( ( ( $data['original_size'] - $data['optimized_size'] ) / $data['original_size'] ) * 100, 2 ),
115 ];
116
117 $old_data['stats']['original_size'] += $data['original_size'];
118 $old_data['stats']['optimized_size'] += $data['optimized_size'];
119 $old_data['stats']['percent'] = round( ( ( $old_data['stats']['original_size'] - $old_data['stats']['optimized_size'] ) / $old_data['stats']['original_size'] ) * 100, 2 );
120 }
121
122 update_post_meta( $id, '_imagify_data', $old_data );
123 }
124
125 /**
126 * Delete the media optimization data, level, and status.
127 *
128 * @since 1.9
129 * @access public
130 * @author Grégory Viguier
131 */
132 public function delete_optimization_data() {
133 if ( ! $this->is_valid() ) {
134 return;
135 }
136
137 $id = $this->get_media()->get_id();
138
139 delete_post_meta( $id, '_imagify_data' );
140 delete_post_meta( $id, '_imagify_status' );
141 delete_post_meta( $id, '_imagify_optimization_level' );
142 }
143 }
144