PluginProbe ʕ •ᴥ•ʔ
Robin Image Optimizer – Unlimited Image Optimization, WebP & AVIF / trunk
Robin Image Optimizer – Unlimited Image Optimization, WebP & AVIF vtrunk
2.0.5 trunk 1.3.7 1.4.0 1.4.1 1.4.2 1.4.6 1.5.0 1.5.3 1.5.6 1.5.8 1.6.5 1.6.6 1.6.9 1.7.0 1.7.4 1.8.1 1.8.2 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4
robin-image-optimizer / libs / addons / includes / classes / class.image-statistic-nextgen.php
robin-image-optimizer / libs / addons / includes / classes Last commit date
format 3 months ago helpers 5 months ago models 5 months ago webp 3 months ago class.backup.php 5 months ago class.custom-folders.php 5 months ago class.folder-image.php 5 months ago class.folder.php 5 months ago class.folders-list-table.php 5 months ago class.gallery-nextgen.php 5 months ago class.image-nextgen.php 5 months ago class.image-statistic-folders.php 5 months ago class.image-statistic-nextgen.php 5 months ago class.wpcli-optimize.php 5 months ago index.php 5 months ago
class.image-statistic-nextgen.php
247 lines
1 <?php
2
3 // Exit if accessed directly
4 if ( ! defined( 'ABSPATH' ) ) {
5 exit;
6 }
7
8 /**
9 * Класс для работы со статистическими данными по оптимизации изображений
10 *
11 * @version 1.0
12 */
13 class WRIO_Image_Statistic_Nextgen extends WRIO_Image_Statistic {
14
15 /**
16 * The single instance of the class.
17 *
18 * @since 1.3.0
19 * @access protected
20 * @var static
21 */
22 protected static $_instance;
23
24 /**
25 * Со�
26 ранение статистики
27 */
28 public function save() {
29 WRIO_Plugin::app()->updateOption( 'nextgen_original_size', $this->statistic['original_size'] );
30 WRIO_Plugin::app()->updateOption( 'nextgen_optimized_size', $this->statistic['optimized_size'] );
31 }
32
33 /**
34 * Загрузка статистики и расчёт некоторы�
35 параметров
36 *
37 * @return array
38 */
39 public function load() {
40 $original_size = WRIO_Plugin::app()->getOption( 'nextgen_original_size', 0 );
41 $optimized_size = WRIO_Plugin::app()->getOption( 'nextgen_optimized_size', 0 );
42 global $wpdb;
43 $io_db_table = RIO_Process_Queue::table_name();
44
45 $sql_unoptimized = "SELECT COUNT(*)
46 FROM {$wpdb->prefix}ngg_pictures as t1 LEFT JOIN {$io_db_table} as t2
47 ON t2.item_type = 'nextgen' and t1.pid = t2.object_id
48 WHERE t2.result_status Is Null or ( t2.result_status != 'success' and t2.result_status != 'error' )";
49
50 $error_count = RIO_Process_Queue::count_by_type_status( 'nextgen', 'error' );
51 $total_images = $this->getTotalCount();
52 if ( ! $total_images ) {
53 $total_images = 0;
54 if ( $original_size || $optimized_size ) {
55 // если нет картинок, то и размеров не должно быть
56 $original_size = $this->statistic['original_size'] = 0;
57 $optimized_size = $this->statistic['optimized_size'] = 0;
58 $this->save();
59 }
60 }
61 $unoptimized = $wpdb->get_var( $sql_unoptimized );
62 if ( $optimized_size and $original_size ) {
63 $percent_diff = round( ( $original_size - $optimized_size ) * 100 / $original_size, 1 );
64 $percent_diff_line = round( $optimized_size * 100 / $original_size, 0 );
65 } else {
66 $percent_diff = 0;
67 $percent_diff_line = 100;
68 }
69 $optimized_exists_images_count = $total_images - $unoptimized - $error_count; // оптимизированные картинки, которые сейчас есть в медиабиблиотеке
70 if ( $total_images ) {
71 $optimized_images_percent = round( $optimized_exists_images_count * 100 / $total_images );
72 } else {
73 $optimized_images_percent = 0;
74 }
75
76 return [
77 'original' => $total_images,
78 'optimized' => $optimized_exists_images_count,
79 'optimized_percent' => $optimized_images_percent,
80 'percent_line' => $percent_diff_line,
81 'unoptimized' => $unoptimized,
82 'optimized_size' => $optimized_size,
83 'original_size' => $original_size,
84 'save_size_percent' => $percent_diff,
85 'error' => $error_count,
86 ];
87 }
88
89 /**
90 * Общее кол-во изображений nextgen
91 */
92 public function getTotalCount() {
93 global $wpdb;
94 $sql_total = "SELECT COUNT(*) FROM {$wpdb->prefix}ngg_pictures";
95 $total_images = $wpdb->get_var( $sql_total );
96
97 return $total_images;
98 }
99
100 /**
101 * Кол-во неоптимизированны�
102 изображений
103 */
104 public function getUnoptimizedCount() {
105 global $wpdb;
106 $io_db_table = RIO_Process_Queue::table_name();
107 $sql_unoptimized = "SELECT COUNT(*)
108 FROM {$wpdb->prefix}ngg_pictures as t1 LEFT JOIN {$io_db_table} as t2
109 ON t2.item_type = 'nextgen' and t1.pid = t2.object_id
110 WHERE t2.result_status Is Null or ( t2.result_status != 'success' and t2.result_status != 'error' )";
111 $total_images = $wpdb->get_var( $sql_unoptimized );
112
113 return $total_images;
114 }
115
116 /**
117 * Возвращает неоптимизированные изображения
118 *
119 * @param string $limit ограничение выборки
120 *
121 * @return array
122 */
123 public function getUnoptimized( $limit = 10 ) {
124 global $wpdb;
125 $io_db_table = RIO_Process_Queue::table_name();
126 $sql_unoptimized = "SELECT *
127 FROM {$wpdb->prefix}ngg_pictures as t1 LEFT JOIN {$io_db_table} as t2
128 ON t2.item_type = 'nextgen' and t1.pid = t2.object_id
129 WHERE t2.result_status Is Null or ( t2.result_status != 'success' and t2.result_status != 'error' )
130 LIMIT " . intval( $limit );
131 $unoptimized = $wpdb->get_results( $sql_unoptimized );
132
133 return $unoptimized;
134 }
135
136 /**
137 * Returns the result of the last optimized images.
138 *
139 * @param int $limit Limit.
140 *
141 * @return array<int, array{
142 * id: int|string,
143 * file_name: string,
144 * url: string,
145 * thumbnail_url: string,
146 * original_size: string,
147 * optimized_size: string,
148 * webp_size?: string,
149 * original_saving: string,
150 * thumbnails_count: int,
151 * total_saving: string,
152 * type?: string,
153 * error_msg?: string
154 * }>
155 */
156 public function get_last_optimized_images( $limit = 100 ) {
157 global $wpdb;
158 $logs = [];
159 $db_table = RIO_Process_Queue::table_name();
160 $sql = $wpdb->prepare(
161 "SELECT t1.*,t2.filename as file_name, t3.path as gallery_path
162 FROM {$db_table} as t1
163 LEFT JOIN {$wpdb->prefix}ngg_pictures as t2 ON t1.object_id = t2.pid
164 LEFT JOIN {$wpdb->prefix}ngg_gallery as t3 ON t2.galleryid = t3.gid
165 WHERE t1.item_type = 'nextgen' AND t1.result_status IN (%s, %s)
166 ORDER BY id DESC
167 LIMIT %d ;",
168 RIO_Process_Queue::STATUS_SUCCESS,
169 RIO_Process_Queue::STATUS_ERROR,
170 $limit
171 );
172 $optimized_images = $wpdb->get_results( $sql );
173
174 if ( empty( $optimized_images ) ) {
175 return [];
176 }
177
178 foreach ( $optimized_images as $row ) {
179 $log = [];
180
181 $optimization_data = new RIO_Process_Queue( $row );
182
183 /**
184 * @var WRIO_Nextgen_Extra_Data $extra_data
185 */
186 $extra_data = $optimization_data->get_extra_data();
187
188 $original_main_size = 0;
189
190 if ( ! empty( $extra_data ) ) {
191 $original_main_size = $extra_data->get_original_main_size();
192 $webp_size = $extra_data->get_webp_main_size();
193 if ( ! empty( $webp_size ) ) {
194 $log['webp_size'] = size_format( $webp_size, 2 );
195 } else {
196 $log['webp_size'] = '-';
197 }
198
199 $error = $extra_data->get_error();
200
201 if ( $row->result_status == RIO_Process_Queue::STATUS_ERROR || ! empty( $error ) ) {
202 $log['type'] = 'error';
203
204 $error_message = $extra_data->get_error_msg();
205
206 $log['error_msg'] = ! empty( $error_message ) ? $error_message : esc_html__( 'Unknown error', 'robin-image-optimizer' );
207 }
208 }
209
210 $main_file = trailingslashit( ABSPATH ) . trailingslashit( $row->gallery_path ) . $row->file_name;
211 $main_file_optimized_size = $main_saving = $total_saving = 0;
212
213 if ( file_exists( $main_file ) ) {
214 $main_file_optimized_size = filesize( $main_file );
215 }
216
217 if ( $original_main_size ) {
218 $main_saving = ( $original_main_size - $main_file_optimized_size ) * 100 / $original_main_size;
219 }
220
221 if ( $row->original_size ) {
222 $total_saving = ( $row->original_size - $row->final_size ) * 100 / $row->original_size;
223 }
224
225 $image_url = site_url( trailingslashit( $row->gallery_path ) . $row->file_name );
226 $thumbnail_url = site_url( trailingslashit( $row->gallery_path ) . 'thumbs/thumbs-' . $row->file_name );
227
228 $logs[] = array_merge(
229 $log,
230 [
231 'id' => $row->id,
232 'url' => $image_url,
233 'thumbnail_url' => $thumbnail_url,
234 'file_name' => preg_replace( '/^.+[\\\\\\/]/', '', $main_file ),
235 'original_size' => size_format( $row->original_size, 2 ),
236 'optimized_size' => size_format( $row->final_size, 2 ),
237 'original_saving' => round( $main_saving ) . '%',
238 'thumbnails_count' => 1,
239 'total_saving' => round( $total_saving ) . '%',
240 ]
241 );
242 }
243
244 return $logs;
245 }
246 }
247