PluginProbe
Plus WebP or AVIF / 4.11
Plus WebP or AVIF v4.11
5.21 5.20 5.12 5.11 trunk 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11 1.12 1.13 2.00 2.01 2.02 2.03 2.04 2.05 All 47 releases
← All changes | lib/class-pluswebp.php +186 -293 2.024.11 View file →
@@ -57,17 +57,19 @@
57 57 public function __construct() {
58 58
59 59 list( $this->upload_dir, $this->upload_url, $this->upload_path ) = $this->upload_dir_url_path();
60 60
61 + /* Generate metadata */
61 62 add_filter( 'wp_generate_attachment_metadata', array( $this, 'generate_webp' ), 10, 2 );
62 - add_action( 'pluswebp_mail_send', array( $this, 'mail_send' ), 10, 1 );
63 + /* Original hook */
64 + add_filter( 'pluswebp_get_allimages', array( $this, 'get_allimages' ), 10, 1 );
65 + add_filter( 'pluswebp_mail_messages', array( $this, 'mail_messages' ), 10, 2 );
66 + add_action( 'pluswebp_mail_generate_message', array( $this, 'mail_generate_message' ), 10, 2 );
63 67
64 - /* Ajax */
65 - $action1 = 'bulkgeneratewebp-ajax-action';
66 - $action2 = 'bulkgeneratewebp_message';
67 - add_action( 'wp_ajax_' . $action1, array( $this, 'bulkgeneratewebp_update_callback' ) );
68 - add_action( 'wp_ajax_' . $action2, array( $this, 'bulkgeneratewebp_message_callback' ) );
69 -
68 + /* Raise memory */
69 + add_filter( 'pluswebp_memory_limit', array( $this, 'raise_memory_limit' ) );
70 + /* webp generation control */
71 + add_filter( 'wp_upload_image_mime_transforms', array( $this, 'control_mime_type' ), 10, 2 );
70 72 }
71 73
72 74 /** ==================================================
73 75 * Webp generate
@@ -86,32 +88,37 @@
86 88 if ( in_array( $mime_type, $pluswebp_settings['types'] ) ) {
87 89 $metadata_webp = $metadata;
88 90 $file_webp = $this->change_ext( $metadata['file'], 'webp', $pluswebp_settings['addext'] );
89 91 $metadata_webp['file'] = $file_webp;
92 + if ( '.' === dirname( $file_webp ) ) {
93 + $dir_name_url = '/';
94 + $dir_name_path = wp_normalize_path( '/' );
95 + } else {
96 + $dir_name_url = '/' . dirname( $file_webp ) . '/';
97 + $dir_name_path = wp_normalize_path( $dir_name_url );
98 + }
99 + $url = $this->upload_url . $dir_name_url;
100 + $path = $this->upload_dir . $dir_name_path;
101 +
90 102 foreach ( (array) $metadata['sizes'] as $key => $value ) {
91 103 $file_thumb = $value['file'];
92 104 $file_thumb_webp = $this->change_ext( $file_thumb, 'webp', $pluswebp_settings['addext'] );
93 - if ( '.' === dirname( $file_webp ) ) {
94 - $dir_name_url = '/';
95 - $dir_name_path = wp_normalize_path( '/' );
96 - } else {
97 - $dir_name_url = '/' . dirname( $file_webp ) . '/';
98 - $dir_name_path = wp_normalize_path( $dir_name_url );
99 - }
100 - $url = $this->upload_url . $dir_name_url;
101 - $path = $this->upload_dir . $dir_name_path;
102 105 $ret = $this->create_webp( $path . $file_thumb, $mime_type, $path . $file_thumb_webp );
103 106 if ( $ret ) {
104 107 $metadata_webp['sizes'][ $key ]['file'] = $file_thumb_webp;
105 108 $metadata_webp['sizes'][ $key ]['mime-type'] = 'image/webp';
109 + $webp_size = filesize( $path . wp_basename( $file_thumb_webp ) );
110 + $metadata_webp['sizes'][ $key ]['filesize'] = $webp_size;
106 111 if ( $replace ) {
107 - unlink( $path . $file_thumb );
112 + wp_delete_file( $path . $file_thumb );
108 113 $this->change_db( $url . $file_thumb, $url . $file_thumb_webp );
109 114 }
110 115 }
111 116 }
112 - if ( ! empty( $metadata['original_image'] ) ) {
113 - $org_img_file = wp_get_original_image_path( $attachment_id, false );
117 +
118 + $org_img_file = null;
119 + if ( array_key_exists( 'original_image', $metadata ) && ! empty( $metadata['original_image'] ) ) {
120 + $org_img_file = wp_normalize_path( wp_get_original_image_path( $attachment_id, false ) );
114 121 $org_webp_file = $this->change_ext( $org_img_file, 'webp', $pluswebp_settings['addext'] );
115 122 $ret = $this->create_webp( $org_img_file, $mime_type, $org_webp_file );
116 123 if ( $ret ) {
117 124 $metadata_webp['original_image'] = wp_basename( $org_webp_file );
@@ -117,9 +124,11 @@
117 124 $metadata_webp['original_image'] = wp_basename( $org_webp_file );
118 125 }
119 126 }
120 127
121 - $ret = $this->create_webp( $this->upload_dir . '/' . $metadata['file'], $mime_type, $this->upload_dir . '/' . $file_webp );
128 + $ret = $this->create_webp( $this->upload_dir . '/' . $metadata['file'], $mime_type, $path . wp_basename( $file_webp ) );
129 + $webp_size = filesize( $path . wp_basename( $file_webp ) );
130 + $metadata_webp['filesize'] = $webp_size;
122 131 if ( $ret ) {
123 132 if ( $replace ) {
124 133 $up_post = array(
125 134 'ID' => $attachment_id,
@@ -130,9 +139,12 @@
130 139 update_post_meta( $attachment_id, '_wp_attached_file', $file_webp );
131 140 /* for bulk generate */
132 141 update_post_meta( $attachment_id, '_wp_attachment_metadata', $metadata_webp );
133 142 /* delete org file */
134 - unlink( $this->upload_dir . '/' . $metadata['file'] );
143 + wp_delete_file( $this->upload_dir . '/' . $metadata['file'] );
144 + if ( $org_img_file ) {
145 + wp_delete_file( $org_img_file );
146 + }
135 147 /* Replace */
136 148 $this->change_db( $this->upload_url . '/' . $metadata['file'], $this->upload_url . '/' . $file_webp );
137 149 /* for hook */
138 150 $metadata = $metadata_webp;
@@ -139,9 +151,9 @@
139 151 /* for mail */
140 152 $attach_id = $attachment_id;
141 153 } else {
142 154 $post = get_post( $attachment_id );
143 - $title = get_the_title( $post );
155 + $title = $post->post_title;
144 156 $attachment = array(
145 157 'guid' => $this->upload_url . '/' . $file_webp,
146 158 'post_mime_type' => 'image/webp',
147 159 'post_title' => $title,
@@ -147,9 +159,15 @@
147 159 'post_title' => $title,
148 160 'post_content' => '',
149 161 'post_status' => 'inherit',
150 162 );
151 - $attach_id = wp_insert_attachment( $attachment, $this->upload_dir . '/' . $file_webp );
163 + $file = $this->upload_dir . '/' . $file_webp;
164 + $attach_id = wp_insert_attachment( $attachment, $file );
165 +
166 + /* for XAMPP [ get_attached_file( $attach_id ): Unable to get correct value ] */
167 + $metapath_name = str_replace( $this->upload_dir . '/', '', $file );
168 + update_post_meta( $attach_id, '_wp_attached_file', $metapath_name );
169 +
152 170 wp_update_attachment_metadata( $attach_id, $metadata_webp );
153 171
154 172 $author = get_userdata( $post->post_author );
155 173 $userid = $author->ID;
@@ -165,137 +183,23 @@
165 183 );
166 184 wp_update_post( $up_post );
167 185 }
168 186
169 - $ids = get_option( 'pluswebp_generate' );
170 - $ids[] = $attach_id;
171 - update_option( 'pluswebp_generate', $ids );
187 + update_option( 'pluswebp_generate', $attach_id );
172 188
173 - }
174 - }
189 + /* for Media Library folders term by Organize Media Folder */
190 + do_action( 'omf_folders_term_update', $metadata_webp, $attach_id );
175 191
176 - return $metadata;
192 + /* for Term filter update by Organize Media Folder */
193 + do_action( 'omf_term_filter_update' );
177 194
178 - }
179 -
180 - /** ==================================================
181 - * IDs Callback
182 - *
183 - * @since 2.00
184 - */
185 - public function bulkgeneratewebp_update_callback() {
186 -
187 - $action1 = 'bulkgeneratewebp-ajax-action';
188 - if ( check_ajax_referer( $action1, 'nonce', false ) ) {
189 - if ( current_user_can( 'manage_options' ) ) {
190 - if ( ! empty( $_POST['id'] ) ) {
191 - $id = absint( $_POST['id'] );
192 - } else {
193 - return;
194 - }
195 - if ( ! wp_get_attachment_url( $id ) ) {
196 - $error_string = __( 'No media!', 'plus-webp' );
197 - $output_html = '<div>ID: ' . $id . ' <span style="color: red;">' . $error_string . '</span></div>';
198 - } else {
199 - $output_html = $this->output_html( $id );
200 - }
201 - if ( ! empty( $output_html ) ) {
202 - header( 'Content-type: text/html; charset=UTF-8' );
203 - $allowed_output_html = array(
204 - 'a' => array(
205 - 'href' => array(),
206 - 'target' => array(),
207 - 'rel' => array(),
208 - 'style' => array(),
209 - ),
210 - 'img' => array(
211 - 'src' => array(),
212 - 'width' => array(),
213 - 'height' => array(),
214 - 'style' => array(),
215 - ),
216 - 'div' => array(
217 - 'style' => array(),
218 - 'class' => array(),
219 - ),
220 - 'font' => array(
221 - 'color' => array(),
222 - ),
223 - 'ul' => array(),
224 - 'li' => array(),
225 - 'span' => array(
226 - 'class' => array(),
227 - 'style' => array(),
228 - ),
229 - );
230 - echo wp_kses( $output_html, $allowed_output_html );
231 - }
232 195 }
233 - } else {
234 - status_header( '403' );
235 - echo 'Forbidden';
236 196 }
237 197
238 - wp_die();
239 -
198 + return $metadata;
240 199 }
241 200
242 201 /** ==================================================
243 - * Output html for Ajax
244 - *
245 - * @param array $attach_id attach_id.
246 - * @since 2.00
247 - */
248 - private function output_html( $attach_id ) {
249 -
250 - include_once ABSPATH . 'wp-admin/includes/image.php';
251 -
252 - /* Generate thumbnails */
253 - $metadata_org = wp_get_attachment_metadata( $attach_id );
254 - do_action( 'wp_generate_attachment_metadata', $metadata_org, $attach_id );
255 - if ( get_option( 'pluswebp_generate' ) ) {
256 - $ids = get_option( 'pluswebp_generate' );
257 - delete_option( 'pluswebp_generate' );
258 - $webp_id = $ids[0];
259 - $metadata = wp_get_attachment_metadata( $webp_id );
260 -
261 - /* Thumbnail urls */
262 - list( $image_thumbnail, $imagethumburls ) = $this->thumbnail_urls( $webp_id, $metadata, $this->upload_url );
263 - /* Output datas*/
264 - list( $attachment_link, $attachment_url, $original_image_url, $mime_type, $stamptime, $file_size ) = $this->output_datas( $webp_id );
265 -
266 - $output_html = '<div style="border-bottom: 1px solid; padding-top: 5px; padding-bottom: 5px;">';
267 - $output_html .= '<img width="40" height="40" src="' . $image_thumbnail . '" style="float: left; margin: 5px;">';
268 - $output_html .= '<div style="overflow: hidden;">';
269 - $output_html .= '<div>ID: ' . $webp_id . '</div>';
270 - $output_html .= '<div>' . __( 'Title' ) . ': ' . get_the_title( $webp_id ) . '</div>';
271 - $output_html .= '<div>' . __( 'Permalink:' ) . ' <a href="' . $attachment_link . '" target="_blank" rel="noopener noreferrer" style="text-decoration: none; word-break: break-all;">' . $attachment_link . '</a></div>';
272 - $output_html .= '<div>URL: <a href="' . $attachment_url . '" target="_blank" rel="noopener noreferrer" style="text-decoration: none; word-break: break-all;">' . $attachment_url . '</a></div>';
273 - $output_html .= '<div>' . __( 'File name:' ) . ' ' . wp_basename( $attachment_url ) . '</div>';
274 - if ( ! empty( $metadata['original_image'] ) ) {
275 - $output_html .= '<div>' . __( 'Original URL', 'plus-webp' ) . ': <a href="' . $original_image_url . '" target="_blank" rel="noopener noreferrer" style="text-decoration: none; word-break: break-all;">' . $original_image_url . '</a></div>';
276 - $output_html .= '<div>' . __( 'Original File name', 'plus-webp' ) . ': ' . wp_basename( $original_image_url ) . '</div>';
277 - }
278 - $output_html .= '<div>' . __( 'Date/Time' ) . ': ' . $stamptime . '</div>';
279 - $output_html .= '<div>' . __( 'File type:' ) . ' ' . $mime_type . '</div>';
280 - $output_html .= '<div>' . __( 'File size:' ) . ' ' . $file_size . '</div>';
281 - if ( ! empty( $imagethumburls ) ) {
282 - $output_html .= '<div>' . __( 'Images' ) . ': ';
283 - foreach ( $imagethumburls as $thumbsize => $imagethumburl ) {
284 - $output_html .= '[<a href="' . $imagethumburl . '" target="_blank" rel="noopener noreferrer" style="text-decoration: none; word-break: break-all;">' . $thumbsize . '</a>]';
285 - }
286 - $output_html .= '</div>';
287 - }
288 - $output_html .= '</div></div>';
289 - } else {
290 - $output_html = null;
291 - }
292 -
293 - return $output_html;
294 -
295 - }
296 -
297 - /** ==================================================
298 202 * Thumbnail urls
299 203 *
300 204 * @param int $attach_id attach_id.
301 205 * @param array $metadata metadata.
@@ -308,15 +212,14 @@
308 212 $image_attr_thumbnail = wp_get_attachment_image_src( $attach_id, 'thumbnail', true );
309 213 $image_thumbnail = $image_attr_thumbnail[0];
310 214
311 215 $imagethumburls = array();
312 - $media_path = get_post_meta( $attach_id, '_wp_attached_file', true );
313 - $media_paths = explode( DIRECTORY_SEPARATOR, $media_path );
314 - $str_length = strlen( end( $media_paths ) );
315 - $media_path = substr( $media_path, 0, -$str_length );
316 - $media_url = $upload_url . '/' . $media_path;
317 - if ( ! empty( $metadata ) ) {
318 - $thumbnails = $metadata['sizes'];
216 + if ( ! empty( $metadata ) && array_key_exists( 'sizes', $metadata ) ) {
217 + $thumbnails = $metadata['sizes'];
218 + $path_file = get_post_meta( $attach_id, '_wp_attached_file', true );
219 + $filename = wp_basename( $path_file );
220 + $media_path = str_replace( $filename, '', $path_file );
221 + $media_url = $upload_url . '/' . $media_path;
319 222 foreach ( $thumbnails as $key => $key2 ) {
320 223 $imagethumburls[ $key ] = $media_url . $key2['file'];
321 224 }
322 225 }
@@ -321,198 +224,157 @@
321 224 }
322 225 }
323 226
324 227 return array( $image_thumbnail, $imagethumburls );
325 -
326 228 }
327 229
328 230 /** ==================================================
329 231 * Output datas
330 232 *
331 - * @param int $attach_id attach_id.
332 - * @return array (string) $attachment_link, $attachment_url, $original_image_url, $mime_type(string), $stamptime, $file_size
233 + * @param int $attach_id attach_id.
234 + * @param array $metadata metadata.
235 + * @return array (string) $attachment_link, $attachment_url, $filename, $original_image_url, $original_filename, $mime_type(string), $stamptime, $file_size
333 236 * @since 2.00
334 237 */
335 - private function output_datas( $attach_id ) {
238 + private function output_datas( $attach_id, $metadata ) {
336 239
337 240 $attachment_link = get_attachment_link( $attach_id );
338 241 $attachment_url = wp_get_attachment_url( $attach_id );
339 - $original_image_url = wp_get_original_image_url( $attach_id );
340 - $filetype = wp_check_filetype( get_attached_file( $attach_id ) );
341 - $mime_type = $filetype['type'];
242 + $filename = wp_basename( $attachment_url );
243 + if ( ! empty( $metadata ) && array_key_exists( 'original_image', $metadata ) && ! empty( $metadata['original_image'] ) ) {
244 + $original_image_url = wp_get_original_image_url( $attach_id );
245 + $original_filename = wp_basename( $original_image_url );
246 + } else {
247 + $original_image_url = null;
248 + $original_filename = null;
249 + }
250 + $mime_type = get_post_mime_type( $attach_id );
342 251
343 252 $stamptime = get_the_time( 'Y-n-j ', $attach_id ) . get_the_time( 'G:i:s', $attach_id );
344 - if ( isset( $metadata['filesize'] ) ) {
253 + if ( ! empty( $metadata ) && array_key_exists( 'filesize', $metadata ) && ! empty( $metadata['filesize'] ) ) {
345 254 $file_size = $metadata['filesize'];
346 255 } else {
347 256 $file_size = @filesize( get_attached_file( $attach_id ) );
348 257 }
349 258 if ( ! $file_size ) {
350 - $file_size = '<font color="red">' . __( 'Could not retrieve.', 'plus-webp' ) . '</font>';
259 + $file_size = __( 'Could not retrieve.', 'plus-webp' );
351 260 } else {
352 261 $file_size = size_format( $file_size );
353 262 }
354 263
355 - return array( $attachment_link, $attachment_url, $original_image_url, $mime_type, $stamptime, $file_size );
356 -
264 + return array( $attachment_link, $attachment_url, $filename, $original_image_url, $original_filename, $mime_type, $stamptime, $file_size );
357 265 }
358 266
359 267 /** ==================================================
360 - * Messages Callback
268 + * Get All Images
361 269 *
270 + * @param array $types mime types.
362 271 * @since 2.00
363 272 */
364 - public function bulkgeneratewebp_message_callback() {
273 + public function get_allimages( $types ) {
365 274
366 - $action2 = 'bulkgeneratewebp_message';
367 - if ( check_ajax_referer( $action2, 'nonce', false ) ) {
368 - $error_count = 0;
369 - $error_update = null;
370 - $success_count = 0;
371 - if ( ! empty( $_POST['error_count'] ) ) {
372 - $error_count = absint( $_POST['error_count'] );
373 - }
374 - if ( ! empty( $_POST['error_update'] ) ) {
375 - $error_update = sanitize_text_field( wp_unslash( $_POST['error_update'] ) );
376 - }
377 - if ( ! empty( $_POST['success_count'] ) ) {
378 - $success_count = absint( $_POST['success_count'] );
379 - }
275 + $args = array(
276 + 'post_type' => 'attachment',
277 + 'post_status' => 'inherit',
278 + 'post_mime_type' => $types,
279 + 'posts_per_page' => -1,
280 + 'orderby' => 'date',
281 + 'order' => 'DESC',
282 + );
283 + $posts = get_posts( $args );
380 284
381 - $back_html = '<strong><a style="text-decoration: none;" href="' . admin_url( 'tools.php?page=pluswebp' ) . '">' . __( 'Back' ) . '</a></strong>';
285 + global $wpdb;
286 + $webp_titles = $wpdb->get_col(
287 + "
288 + SELECT post_title
289 + FROM {$wpdb->prefix}posts
290 + WHERE post_type = 'attachment'
291 + AND post_mime_type IN ( 'image/webp' )
292 + AND post_status = 'inherit'
293 + "
294 + );
382 295
383 - $output_html = null;
384 - if ( $error_count > 0 ) {
385 - /* translators: error message %1$d: media count %2$s: back link */
386 - $error_message = sprintf( __( 'Errored to the generation of %1$d medias.', 'plus-webp' ), $error_count, $back_html );
387 - $output_html .= '<div class="notice notice-error is-dismissible"><ul><li><div>' . $error_message . '</div>' . $error_update . '</li></ul></div>';
296 + $post_ids = array();
297 + $no_file_ids = array();
298 + $count = 0;
299 + foreach ( $posts as $post ) {
300 + if ( ! in_array( $post->post_title, $webp_titles ) ) {
301 + if ( file_exists( get_attached_file( $post->ID ) ) ) {
302 + $post_ids[] = $post->ID;
303 + } else {
304 + $no_file_ids[] = $post->ID;
305 + }
388 306 }
389 - if ( $success_count > 0 ) {
390 - /* translators: success message %1$d: media count %2$s: back link */
391 - $success_message = sprintf( __( 'Succeeded to the generation webp of %1$d medias for Media Library. %2$s', 'plus-webp' ), $success_count, $back_html );
392 - $output_html .= '<div class="notice notice-success is-dismissible"><ul><li><div>' . $success_message . '</li></ul></div>';
393 - }
394 -
395 - header( 'Content-type: text/html; charset=UTF-8' );
396 - $allowed_output_html = array(
397 - 'div' => array(
398 - 'class' => array(),
399 - ),
400 - 'ul' => array(),
401 - 'li' => array(),
402 - 'strong' => array(),
403 - 'a' => array(
404 - 'style' => array(),
405 - 'href' => array(),
406 - ),
407 - );
408 - echo wp_kses( $output_html, $allowed_output_html );
409 307 }
410 308
411 - wp_die();
412 -
309 + return array( $post_ids, $no_file_ids );
413 310 }
414 311
415 312 /** ==================================================
416 - * Mail send hook
313 + * Mail messages hook
417 314 *
418 - * @param string $to to.
419 - * @since 1.09
315 + * @param array $messages messages.
316 + * @param int $webp_id webp_id.
317 + *
318 + * @since 4.00
420 319 */
421 - public function mail_send( $to ) {
320 + public function mail_messages( $messages, $webp_id ) {
422 321
423 - $post_ids = get_option( 'pluswebp_generate' );
424 - delete_option( 'pluswebp_generate' );
322 + $metadata = wp_get_attachment_metadata( $webp_id );
425 323
426 - if ( function_exists( 'wp_date' ) ) {
427 - $now_date_time = wp_date( 'Y-m-d H:i:s' );
428 - } else {
429 - $now_date_time = date_i18n( 'Y-m-d H:i:s' );
430 - }
431 - $pluswebp_mail_send = array();
432 - $pluswebp_mail_send['datetime'] = $now_date_time;
324 + $message = null;
325 + if ( $metadata ) {
326 + /* Thumbnail urls */
327 + list( $image_thumbnail, $imagethumburls ) = $this->thumbnail_urls( $webp_id, $metadata, $this->upload_url );
328 + /* Output datas*/
329 + list( $attachment_link, $attachment_url, $filename, $original_image_url, $original_filename, $mime_type, $stamptime, $file_size ) = $this->output_datas( $webp_id, $metadata );
433 330
434 - /* translators: Date and Time */
435 - $message = sprintf( __( 'Plus WebP : %s', 'plus-webp' ), $now_date_time ) . "\r\n\r\n";
436 -
437 - if ( ! empty( $post_ids ) ) {
438 -
439 - $message .= __( 'Generation of WebP is complete.', 'plus-webp' ) . "\r\n\r\n";
440 - $pluswebp_mail_send['count'] = count( $post_ids );
441 -
442 - $count = 0;
443 - foreach ( $post_ids as $attach_id ) {
444 - $filename = get_attached_file( $attach_id );
445 - $metadata = wp_get_attachment_metadata( $attach_id );
446 - /* OutputMetaData */
447 - list( $imagethumburls, $stamptime, $file_size ) = $this->output_metadata( $attach_id, $metadata, $this->upload_url );
448 - $count++;
449 - $message .= __( 'Count' ) . ': ' . $count . "\n";
450 - $message .= 'ID: ' . $attach_id . "\n";
451 - $message .= __( 'Title' ) . ': ' . get_the_title( $attach_id ) . "\n";
452 - $message .= __( 'Permalink:' ) . ' ' . get_attachment_link( $attach_id ) . "\n";
453 - $message .= 'URL: ' . wp_get_attachment_url( $attach_id ) . "\n";
454 - $message .= __( 'File name:' ) . ' ' . wp_basename( wp_get_attachment_url( $attach_id ) ) . "\n";
455 - if ( ! empty( $metadata['original_image'] ) ) {
456 - $message .= __( 'Original URL:', 'plus-webp' ) . ' ' . wp_get_original_image_url( $attach_id ) . "\n";
457 - $message .= __( 'Original File name:', 'plus-webp' ) . ' ' . wp_basename( wp_get_original_image_url( $attach_id ) ) . "\n";
331 + $message = 'ID: ' . $webp_id . "\n";
332 + $message .= __( 'Title' ) . ': ' . get_the_title( $webp_id ) . "\n";
333 + $message .= __( 'Permalink:' ) . ' ' . $attachment_link . "\n";
334 + $message .= 'URL: ' . $attachment_url . "\n";
335 + $message .= __( 'File name:' ) . ' ' . $filename . "\n";
336 + if ( ! empty( $original_image_url ) ) {
337 + $message .= __( 'Original URL:', 'plus-webp' ) . ' ' . $original_image_url . "\n";
338 + $message .= __( 'Original File name:', 'plus-webp' ) . ' ' . $original_filename . "\n";
339 + }
340 + $message .= __( 'Date/Time' ) . ': ' . $stamptime . "\n";
341 + $message .= __( 'File size:' ) . ' ' . $file_size . "\n";
342 + if ( ! empty( $imagethumburls ) ) {
343 + foreach ( $imagethumburls as $thumbsize => $imagethumburl ) {
344 + $message .= $thumbsize . ': ' . $imagethumburl . "\n";
458 345 }
459 - $message .= __( 'Date/Time' ) . ': ' . $stamptime . "\n";
460 - if ( ! $file_size ) {
461 - $file_size = __( 'Could not retrieve.', 'plus-webp' );
462 - } else {
463 - $file_size = size_format( $file_size );
464 - }
465 - $message .= __( 'File size:' ) . ' ' . $file_size . "\n";
466 - if ( ! empty( $imagethumburls ) ) {
467 - foreach ( $imagethumburls as $thumbsize => $imagethumburl ) {
468 - $message .= $thumbsize . ': ' . $imagethumburl . "\n";
469 - }
470 - }
471 - $message .= "\n";
472 346 }
473 - } else {
474 - $message .= __( 'WebP was not generated. A file with the same name already exists.', 'plus-webp' ) . "\r\n\r\n";
475 - $pluswebp_mail_send['count'] = 0;
347 + $message .= "\n";
348 + $messages[] = $message;
476 349 }
477 350
478 - update_option( 'pluswebp_generate_mail', $pluswebp_mail_send );
479 -
480 - /* translators: blogname for subject */
481 - $subject = sprintf( __( '[%s] WebP generate', 'plus-webp' ), get_option( 'blogname' ) );
482 - wp_mail( $to, $subject, $message );
483 -
351 + return array( $message, $messages );
484 352 }
485 353
486 354 /** ==================================================
487 - * Output metadata
355 + * Mail sent for Generate Messages
488 356 *
489 - * @param int $attach_id attach_id.
490 - * @param array $metadata metadata.
491 - * @param string $upload_url upload_url.
492 - * @return array $imagethumburls(string), $stamptime(string), $file_size(string)
493 - * @since 1.09
357 + * @param array $messages mail messages.
358 + * @param int $count convert count.
359 + * @since 4.02
494 360 */
495 - private function output_metadata( $attach_id, $metadata, $upload_url ) {
361 + public function mail_generate_message( $messages, $count ) {
496 362
497 - $imagethumburls = array();
498 - $wp_attached_file = get_post_meta( $attach_id, '_wp_attached_file', true );
499 - $imagethumburl_base = $upload_url . '/' . rtrim( $wp_attached_file, wp_basename( $wp_attached_file ) );
500 - if ( ! empty( $metadata ) ) {
501 - foreach ( $metadata as $key1 => $key2 ) {
502 - if ( 'sizes' === $key1 ) {
503 - foreach ( $metadata[ $key1 ] as $key2 => $key3 ) {
504 - $imagethumburls[ $key2 ] = $imagethumburl_base . $metadata['sizes'][ $key2 ]['file'];
505 - }
506 - }
507 - }
363 + if ( function_exists( 'wp_date' ) ) {
364 + $now_date_time = wp_date( 'Y-m-d H:i:s' );
365 + } else {
366 + $now_date_time = date_i18n( 'Y-m-d H:i:s' );
508 367 }
368 + /* translators: Date and Time */
369 + $message_head = sprintf( __( 'Plus WebP : %s', 'plus-webp' ), $now_date_time ) . "\r\n\r\n";
370 + /* translators: Generated count */
371 + $message_head .= sprintf( __( 'Webp generated %d.', 'plus-webp' ), $count ) . "\r\n\r\n";
509 372
510 - $stamptime = get_the_time( 'Y-n-j ', $attach_id ) . get_the_time( 'G:i:s', $attach_id );
511 - $file_size = @filesize( get_attached_file( $attach_id, false ) );
512 -
513 - return array( $imagethumburls, $stamptime, $file_size );
514 -
373 + $to = get_option( 'admin_email' );
374 + /* translators: blogname for subject */
375 + $subject = sprintf( __( '[%s] WebP generate', 'plus-webp' ), get_option( 'blogname' ) );
376 + wp_mail( $to, $subject, $message_head . implode( $messages ) );
515 377 }
516 378
517 379 /** ==================================================
518 380 * Webp create
@@ -533,8 +395,9 @@
533 395 }
534 396
535 397 $pluswebp_settings = get_option( 'pluswebp' );
536 398 @set_time_limit( 60 );
399 + wp_raise_memory_limit( 'pluswebp' );
537 400
538 401 $ret = false;
539 402 switch ( $mime_type ) {
540 403 case 'image/jpeg':
@@ -539,9 +402,10 @@
539 402 switch ( $mime_type ) {
540 403 case 'image/jpeg':
541 404 $src = imagecreatefromjpeg( $filename );
542 405 $img = imagecreatetruecolor( imagesx( $src ), imagesy( $src ) );
543 - imagefill( $img, 0, 0, imagecolorallocate( $img, 255, 255, 255 ) );
406 + $bgcolor = imagecolorallocate( $img, 255, 255, 255 );
407 + imagefill( $img, 0, 0, $bgcolor );
544 408 imagealphablending( $img, true );
545 409 break;
546 410 case 'image/png':
547 411 $src = imagecreatefrompng( $filename );
@@ -547,8 +411,11 @@
547 411 $src = imagecreatefrompng( $filename );
548 412 $img = imagecreatetruecolor( imagesx( $src ), imagesy( $src ) );
549 413 imagealphablending( $img, false );
550 414 imagesavealpha( $img, true );
415 + $bgcolor = imagecolorallocatealpha( $img, 0, 0, 0, 127 );
416 + imagefill( $img, 0, 0, $bgcolor );
417 + imagecolortransparent( $img, $bgcolor );
551 418 break;
552 419 case 'image/bmp':
553 420 $src = imagecreatefrombmp( $filename );
554 421 $img = imagecreatetruecolor( imagesx( $src ), imagesy( $src ) );
@@ -567,9 +434,8 @@
567 434 $ret = imagewebp( $img, $filename_webp, $pluswebp_settings['quality'] );
568 435 imagedestroy( $img );
569 436
570 437 return $ret;
571 -
572 438 }
573 439
574 440 /** ==================================================
575 441 * Change ext
@@ -591,9 +457,8 @@
591 457 $after_file_name = str_replace( $before_ext, $after_ext, $before_file_name );
592 458 }
593 459
594 460 return $after_file_name;
595 -
596 461 }
597 462
598 463 /** ==================================================
599 464 * Change DB
@@ -608,14 +473,19 @@
608 473
609 474 /* Replace */
610 475 $wpdb->query(
611 476 $wpdb->prepare(
612 - "UPDATE `$wpdb->posts` SET post_content = replace(post_content, %s, %s)",
477 + "
478 + UPDATE {$wpdb->prefix}posts
479 + SET post_content = replace( post_content, %s, %s )
480 + ",
613 481 $before_url,
614 482 $after_url
615 483 )
616 484 );
617 485
486 + /* Advanced change database */
487 + list( $before_url, $after_url ) = apply_filters( 'plus_webp_advanced_change_db', $before_url, $after_url );
618 488 }
619 489
620 490 /** ==================================================
621 491 * Upload Path
@@ -652,9 +522,8 @@
652 522 $upload_url = untrailingslashit( $upload_url );
653 523 $upload_path = untrailingslashit( $upload_path );
654 524
655 525 return array( $upload_dir, $upload_url, $upload_path );
656 -
657 526 }
658 527
659 528 /** ==================================================
660 529 * Real Url
@@ -703,10 +572,34 @@
703 572 }
704 573 $path = implode( '/', $base_path );
705 574 return $parse['scheme'] . '://' . $parse['host'] . $path;
706 575 }
576 + }
707 577
578 + /** ==================================================
579 + * Filter Raise Memory limit
580 + *
581 + * @since 3.00
582 + *
583 + * @param string $filtered_limit Memory limit.
584 + */
585 + public function raise_memory_limit( $filtered_limit ) {
586 +
587 + return '256M';
708 588 }
709 589
710 -}
590 + /** ==================================================
591 + * Filter the output mime types for a given input mime type and image size.
592 + *
593 + * @since 3.00
594 + *
595 + * @param array $image_mime_transforms A map with the valid mime transforms where the key is the source file mime type
596 + * and the value is one or more mime file types to generate.
597 + * @param int $attachment_id The ID of the attachment where the hook was dispatched.
598 + */
599 + public function control_mime_type( $image_mime_transforms, $attachment_id ) {
711 600
601 + $image_mime_transforms = array();
712 602
603 + return $image_mime_transforms;
604 + }
605 +}