PluginProbe
QuickWebP – WebP & AVIF Image Optimizer, Compression & SEO for WordPress / 3.3.0
QuickWebP – WebP & AVIF Image Optimizer, Compression & SEO for WordPress v3.3.0
4.1.1 4.1.0 4.0.1 4.0.0 3.3.1 3.3.0 trunk 1.0.0 2.0.0 2.1.0 3.0.0 3.1.0 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8
quickwebp / admin / class-cron-job.php

class-cron-job.php in QuickWebP – WebP & AVIF Image Optimizer, Compression & SEO for WordPress 3.3.0, at admin/class-cron-job.php

258 lines 6.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * The admin-specific functionality of the plugin.
4 *
5 * @link http://webdeclic.com
6 * @since 1.0.0
7 *
8 * @package Quickwebp
9 * @subpackage Quickwebp/admin
10 */
11 class Quickwebp_Cron_Job {
12
13 /**
14 * The ID of this plugin.
15 *
16 * @since 1.0.0
17 * @access private
18 * @var string $plugin_name The ID of this plugin.
19 */
20 private $plugin_name;
21
22 /**
23 * The version of this plugin.
24 *
25 * @since 1.0.0
26 * @access private
27 * @var string $version The current version of this plugin.
28 */
29 private $version;
30
31 /**
32 * Initialize the class and set its properties.
33 *
34 * @since 1.0.0
35 * @param string $plugin_name The name of this plugin.
36 * @param string $version The version of this plugin.
37 */
38 public function __construct( $plugin_name, $version ) {
39 $this->plugin_name = $plugin_name;
40 $this->version = $version;
41 }
42
43 /**
44 * Register cron jobs
45 */
46 public function crons_registrations( $schedules ) {
47
48 $schedules['bulk_optimization'] = array(
49 'interval' => MINUTE_IN_SECONDS,
50 'display' => __( 'Every minute', QUICKWEBP_TEXT_DOMAIN )
51 );
52
53 return $schedules;
54 }
55
56 /**
57 * excute bulk optimization
58 */
59 public function excute_bulk_optimization() {
60
61 $time_start = microtime(true);
62
63 if ( ! $this->is_save_original_enabled() ) {
64 $this->end_cron_job();
65 }
66
67 $quickwebp_image_optimizer = new Quickwebp_Image_Optimizer( QUICKWEBP_TEXT_DOMAIN, QUICKWEBP_VERSION );
68 $media_ids = $quickwebp_image_optimizer->get_unoptimized_media_ids();
69
70 if ( empty( $media_ids ) ) {
71 $this->end_cron_job();
72 }
73
74 $status = get_option( 'quickwebp_bulk_optimize_status', 'finish' );
75
76 if ( $status != 'running' ) {
77 $this->end_cron_job();
78 }
79
80 $total = (int)get_option( 'quickwebp_bulk_optimize_total', 0 );
81 $current = (int)get_option( 'quickwebp_bulk_optimize_current', 0 );
82
83 foreach ( $media_ids as $id ) {
84
85 if ( $time_start + 55 < microtime(true) ) {
86 exit;
87 }
88
89 $sizes = $quickwebp_image_optimizer->get_media_files( $id );
90 $new_sizes = array();
91
92 foreach ( $sizes as $key => $size ) {
93
94 $result = $quickwebp_image_optimizer->optimize_local_file( $size );
95
96 if ( $result ) {
97 $new_sizes[$key] = $result;
98 }
99 }
100
101 if ( ! empty( $new_sizes ) ) {
102 update_post_meta( $id, 'quickwebp_already_optimized', '1' );
103 update_post_meta( $id, 'quickwebp_data', $new_sizes );
104 }
105
106 $current++;
107 update_option( 'quickwebp_bulk_optimize_current', $current );
108 }
109
110 $this->end_cron_job();
111
112 }
113
114 /**
115 * Start bulk optimization
116 */
117 public function start_bulk_optimization() {
118
119 if ( ! current_user_can( 'manage_options' ) ) {
120 wp_send_json_error( __( 'You are not allowed to manage plugin settings.', QUICKWEBP_TEXT_DOMAIN ), 403 );
121 }
122
123 // verify the nonce.
124 $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : '';
125 if( !wp_verify_nonce( $nonce, 'image_optimize_nonce' ) ) {
126 wp_send_json_error( __( 'Refresh the page and try again.', QUICKWEBP_TEXT_DOMAIN ) );
127 }
128
129 $quickwebp_image_optimizer = new Quickwebp_Image_Optimizer( QUICKWEBP_TEXT_DOMAIN, QUICKWEBP_VERSION );
130 $media_ids = $quickwebp_image_optimizer->get_unoptimized_media_ids();
131
132 if ( ! $this->is_save_original_enabled() ) {
133 wp_send_json_error( __( 'Bulk optimization is available only when "Save original images" is enabled.', QUICKWEBP_TEXT_DOMAIN ) );
134 }
135
136 if ( empty( $media_ids ) ) {
137 wp_send_json_error( __( 'No images to optimize.', QUICKWEBP_TEXT_DOMAIN ) );
138 }
139
140 $status = get_option( 'quickwebp_bulk_optimize_status', 'finish' );
141 if ( $status != 'finish' ) {
142 wp_send_json_error( __( 'Bulk optimization is already running.', QUICKWEBP_TEXT_DOMAIN ) );
143 }
144
145 if ( !wp_next_scheduled( 'quickwebp_bulk_optimization_hook' ) ) {
146 wp_schedule_event( time(), 'bulk_optimization', 'quickwebp_bulk_optimization_hook' );
147
148 $total = count( $media_ids );
149 $current = 0;
150
151 update_option( 'quickwebp_bulk_optimize_total', count( $media_ids ) );
152 update_option( 'quickwebp_bulk_optimize_current', $current );
153 update_option( 'quickwebp_bulk_optimize_status', 'running' );
154
155 $data = array(
156 'progress' => $current . '/' . $total,
157 'percent' => $total ? round( abs( ( $current / $total ) ) * 100 ) . '%' : '0%'
158 );
159 wp_send_json_success( $data );
160 }
161
162 wp_send_json_error( __( 'Refresh the page and try again.', QUICKWEBP_TEXT_DOMAIN ) );
163
164 }
165
166 /**
167 * Stop bulk optimization
168 */
169 public function stop_bulk_optimization() {
170
171 if ( ! current_user_can( 'manage_options' ) ) {
172 wp_send_json_error( __( 'You are not allowed to manage plugin settings.', QUICKWEBP_TEXT_DOMAIN ), 403 );
173 }
174
175 // verify the nonce.
176 $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : '';
177 if( !wp_verify_nonce( $nonce, 'image_optimize_nonce' ) ) {
178 wp_send_json_error( __( 'Refresh the page and try again.', QUICKWEBP_TEXT_DOMAIN ) );
179 }
180
181 if ( $this->clear_bulk_optimization() ) {
182 wp_send_json_success( __( 'Bulk optimization stopped.', QUICKWEBP_TEXT_DOMAIN ) );
183 }
184
185 wp_send_json_error( __( 'Refresh the page and try again.', QUICKWEBP_TEXT_DOMAIN ) );
186
187 }
188
189 /**
190 * Check bulk optimization progress
191 */
192 public function check_bulk_optimization_progress() {
193
194 if ( ! current_user_can( 'manage_options' ) ) {
195 wp_send_json_error( __( 'You are not allowed to manage plugin settings.', QUICKWEBP_TEXT_DOMAIN ), 403 );
196 }
197
198 // verify the nonce.
199 $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : '';
200 if( !wp_verify_nonce( $nonce, 'image_optimize_nonce' ) ) {
201 wp_send_json_error( __( 'Refresh the page and try again.', QUICKWEBP_TEXT_DOMAIN ) );
202 }
203
204 $status = get_option( 'quickwebp_bulk_optimize_status', '' );
205 $total = (int)get_option( 'quickwebp_bulk_optimize_total', 0 );
206 $current = (int)get_option( 'quickwebp_bulk_optimize_current', 0 );
207 $is_running = $status == 'running' ? true : false;
208
209 $data = array(
210 'running' => $is_running,
211 'progress' => $current . '/' . $total,
212 'percent' => $total ? round( abs( ( $current / $total ) ) * 100 ) . '%' : '0%'
213 );
214 wp_send_json_success( $data );
215
216 }
217
218 /**
219 * Clear bulk optimization
220 */
221 public function clear_bulk_optimization() {
222
223 update_option( 'quickwebp_bulk_optimize_status', 'finish' );
224
225 if ( wp_next_scheduled( 'quickwebp_bulk_optimization_hook' ) ) {
226 wp_clear_scheduled_hook( 'quickwebp_bulk_optimization_hook' );
227 return true;
228 }
229
230 return false;
231 }
232
233 /**
234 * End cron job
235 */
236 public function end_cron_job() {
237
238 $this->clear_bulk_optimization();
239 exit;
240 }
241
242 /**
243 * Check whether the plugin preserves original images.
244 */
245 private function is_save_original_enabled() {
246
247 $save_original = get_option(
248 'quickwebp_settings_conversion_save_original',
249 quickwebp_settings_default( 'quickwebp_settings_conversion_save_original' )
250 );
251
252 $save_original = is_array( $save_original ) ? $save_original : array();
253
254 return in_array( 'checked', $save_original, true );
255 }
256
257 }
258