PluginProbe
QuickWebP – WebP & AVIF Image Optimizer, Compression & SEO for WordPress / 3.2.6
QuickWebP – WebP & AVIF Image Optimizer, Compression & SEO for WordPress v3.2.6
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.2.6, at admin/class-cron-job.php

223 lines 5.7 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 $quickwebp_image_optimizer = new Quickwebp_Image_Optimizer( QUICKWEBP_TEXT_DOMAIN, QUICKWEBP_VERSION );
64 $media_ids = $quickwebp_image_optimizer->get_unoptimized_media_ids();
65
66 if ( empty( $media_ids ) ) {
67 $this->end_cron_job();
68 }
69
70 $status = get_option( 'quickwebp_bulk_optimize_status', 'finish' );
71
72 if ( $status != 'running' ) {
73 $this->end_cron_job();
74 }
75
76 $total = (int)get_option( 'quickwebp_bulk_optimize_total', 0 );
77 $current = (int)get_option( 'quickwebp_bulk_optimize_current', 0 );
78
79 foreach ( $media_ids as $id ) {
80
81 if ( $time_start + 55 < microtime(true) ) {
82 exit;
83 }
84
85 $sizes = $quickwebp_image_optimizer->get_media_files( $id );
86 $new_sizes = array();
87
88 foreach ( $sizes as $key => $size ) {
89
90 $result = $quickwebp_image_optimizer->optimize_local_file( $size );
91
92 if ( $result ) {
93 $new_sizes[$key] = $result;
94 }
95 }
96
97 if ( ! empty( $new_sizes ) ) {
98 update_post_meta( $id, 'quickwebp_already_optimized', '1' );
99 update_post_meta( $id, 'quickwebp_data', $new_sizes );
100 }
101
102 $current++;
103 update_option( 'quickwebp_bulk_optimize_current', $current );
104 }
105
106 $this->end_cron_job();
107
108 }
109
110 /**
111 * Start bulk optimization
112 */
113 public function start_bulk_optimization() {
114
115 // verify the nonce.
116 $nonce = isset($_POST['nonce']) ? $_POST['nonce'] : '';
117 if( !wp_verify_nonce( $nonce, 'image_optimize_nonce' ) ) {
118 wp_send_json_error( __( 'Refresh the page and try again.', QUICKWEBP_TEXT_DOMAIN ) );
119 }
120
121 $quickwebp_image_optimizer = new Quickwebp_Image_Optimizer( QUICKWEBP_TEXT_DOMAIN, QUICKWEBP_VERSION );
122 $media_ids = $quickwebp_image_optimizer->get_unoptimized_media_ids();
123
124 if ( empty( $media_ids ) ) {
125 wp_send_json_error( __( 'No images to optimize.', QUICKWEBP_TEXT_DOMAIN ) );
126 }
127
128 $status = get_option( 'quickwebp_bulk_optimize_status', 'finish' );
129 if ( $status != 'finish' ) {
130 wp_send_json_error( __( 'Bulk optimization is already running.', QUICKWEBP_TEXT_DOMAIN ) );
131 }
132
133 if ( !wp_next_scheduled( 'quickwebp_bulk_optimization_hook' ) ) {
134 wp_schedule_event( time(), 'bulk_optimization', 'quickwebp_bulk_optimization_hook' );
135
136 $total = count( $media_ids );
137 $current = 0;
138
139 update_option( 'quickwebp_bulk_optimize_total', count( $media_ids ) );
140 update_option( 'quickwebp_bulk_optimize_current', $current );
141 update_option( 'quickwebp_bulk_optimize_status', 'running' );
142
143 $data = array(
144 'progress' => $current . '/' . $total,
145 'percent' => $total ? round( abs( ( $current / $total ) ) * 100 ) . '%' : '0%'
146 );
147 wp_send_json_success( $data );
148 }
149
150 wp_send_json_error( __( 'Refresh the page and try again.', QUICKWEBP_TEXT_DOMAIN ) );
151
152 }
153
154 /**
155 * Stop bulk optimization
156 */
157 public function stop_bulk_optimization() {
158
159 // verify the nonce.
160 $nonce = isset($_POST['nonce']) ? $_POST['nonce'] : '';
161 if( !wp_verify_nonce( $nonce, 'image_optimize_nonce' ) ) {
162 wp_send_json_error( __( 'Refresh the page and try again.', QUICKWEBP_TEXT_DOMAIN ) );
163 }
164
165 if ( $this->clear_bulk_optimization() ) {
166 wp_send_json_success( __( 'Bulk optimization stopped.', QUICKWEBP_TEXT_DOMAIN ) );
167 }
168
169 wp_send_json_error( __( 'Refresh the page and try again.', QUICKWEBP_TEXT_DOMAIN ) );
170
171 }
172
173 /**
174 * Check bulk optimization progress
175 */
176 public function check_bulk_optimization_progress() {
177
178 // verify the nonce.
179 $nonce = isset($_POST['nonce']) ? $_POST['nonce'] : '';
180 if( !wp_verify_nonce( $nonce, 'image_optimize_nonce' ) ) {
181 wp_send_json_error( __( 'Refresh the page and try again.', QUICKWEBP_TEXT_DOMAIN ) );
182 }
183
184 $status = get_option( 'quickwebp_bulk_optimize_status', '' );
185 $total = (int)get_option( 'quickwebp_bulk_optimize_total', 0 );
186 $current = (int)get_option( 'quickwebp_bulk_optimize_current', 0 );
187 $is_running = $status == 'running' ? true : false;
188
189 $data = array(
190 'running' => $is_running,
191 'progress' => $current . '/' . $total,
192 'percent' => $total ? round( abs( ( $current / $total ) ) * 100 ) . '%' : '0%'
193 );
194 wp_send_json_success( $data );
195
196 }
197
198 /**
199 * Clear bulk optimization
200 */
201 public function clear_bulk_optimization() {
202
203 update_option( 'quickwebp_bulk_optimize_status', 'finish' );
204
205 if ( wp_next_scheduled( 'quickwebp_bulk_optimization_hook' ) ) {
206 wp_clear_scheduled_hook( 'quickwebp_bulk_optimization_hook' );
207 return true;
208 }
209
210 return false;
211 }
212
213 /**
214 * End cron job
215 */
216 public function end_cron_job() {
217
218 $this->clear_bulk_optimization();
219 exit;
220 }
221
222 }
223