| @@ -38,39 +38,44 @@ | ||
| 38 | 38 | public function __construct( $plugin_name, $version ) { |
| 39 | 39 | |
| 40 | 40 | $this->plugin_name = $plugin_name; |
| 41 | 41 | $this->version = $version; |
| 42 | - | |
| 43 | 42 | } |
| 44 | 43 | |
| 45 | - public function enqueue_scripts(){ | |
| 46 | - global $pagenow; | |
| 47 | - | |
| 48 | - if ( get_option('quickwebp_settings_paste_image', quickwebp_settings_default('quickwebp_settings_paste_image')) == '1' ){ | |
| 44 | + /** | |
| 45 | + * Enqueue scripts and styles for the media uploader | |
| 46 | + */ | |
| 47 | + public function enqueue_scripts( $hook_suffix ){ | |
| 48 | + global $post_type; | |
| 49 | 49 | |
| 50 | - $wp_media_extends_assets = include( QUICKWEBP_PLUGIN_PATH . 'public/assets/build/wp-media-extends.asset.php' ); | |
| 51 | - wp_enqueue_style( 'quickwebp-wp-media-extends', QUICKWEBP_PLUGIN_URL . 'public/assets/build/wp-media-extends.css', array(), $wp_media_extends_assets['version'], 'all' ); | |
| 52 | - wp_enqueue_script( 'quickwebp-wp-media-extends', QUICKWEBP_PLUGIN_URL . 'public/assets/build/wp-media-extends.js', $wp_media_extends_assets['dependencies'], $wp_media_extends_assets['version'], true ); | |
| 53 | - wp_localize_script( 'quickwebp-wp-media-extends', 'quickwebp_wp_media_extends', array( | |
| 54 | - 'is_upload_page' => $pagenow ? $pagenow === 'upload.php' : false, | |
| 55 | - 'nonce' => wp_create_nonce( 'media-form' ), | |
| 56 | - 'tmpl_tab_media_paste' => file_get_contents( QUICKWEBP_PLUGIN_PATH . 'admin/templates/tab-media-paste.php' ), | |
| 57 | - 'tmpl_button_media_paste' => file_get_contents( QUICKWEBP_PLUGIN_PATH . 'admin/templates/button-media-paste.php' ), | |
| 58 | - 'l10n' => array( | |
| 59 | - 'prompt_text' => __( 'Please enter the name of your image', QUICKWEBP_TEXT_DOMAIN ), | |
| 60 | - 'button_text' => __( 'Quickwebp paste image', QUICKWEBP_TEXT_DOMAIN ), | |
| 61 | - 'click_paste' => __( 'Click here, and paste your image.', QUICKWEBP_TEXT_DOMAIN ) | |
| 62 | - ) | |
| 50 | + if ( 'upload.php' === $hook_suffix || ( ! empty( $post_type ) && 'post.php' === $hook_suffix && 'attachment' === $post_type ) ) { | |
| 51 | + | |
| 52 | + if ( get_option('quickwebp_settings_paste_image', quickwebp_settings_default('quickwebp_settings_paste_image')) == '1' ){ | |
| 53 | + | |
| 54 | + $wp_media_extends_assets = include( QUICKWEBP_PLUGIN_PATH . 'public/assets/build/wp-media-extends.asset.php' ); | |
| 55 | + wp_enqueue_style( 'quickwebp-wp-media-extends', QUICKWEBP_PLUGIN_URL . 'public/assets/build/wp-media-extends.css', array(), $wp_media_extends_assets['version'], 'all' ); | |
| 56 | + wp_enqueue_script( 'quickwebp-wp-media-extends', QUICKWEBP_PLUGIN_URL . 'public/assets/build/wp-media-extends.js', $wp_media_extends_assets['dependencies'], $wp_media_extends_assets['version'], true ); | |
| 57 | + wp_localize_script( 'quickwebp-wp-media-extends', 'quickwebp_wp_media_extends', array( | |
| 58 | + 'is_upload_page' => $hook_suffix === 'upload.php', | |
| 59 | + 'nonce' => wp_create_nonce( 'media-form' ), | |
| 60 | + 'tmpl_tab_media_paste' => file_get_contents( QUICKWEBP_PLUGIN_PATH . 'admin/templates/tab-media-paste.php' ), | |
| 61 | + 'tmpl_button_media_paste' => file_get_contents( QUICKWEBP_PLUGIN_PATH . 'admin/templates/button-media-paste.php' ), | |
| 62 | + 'l10n' => array( | |
| 63 | + 'prompt_text' => __( 'Please enter the name of your image', 'quickwebp' ), | |
| 64 | + 'button_text' => __( 'Quickwebp paste image', 'quickwebp' ), | |
| 65 | + 'click_paste' => __( 'Click here, and paste your image.', 'quickwebp' ) | |
| 66 | + ) | |
| 67 | + )); | |
| 68 | + } | |
| 69 | + | |
| 70 | + $admin_attachment_assets = include( QUICKWEBP_PLUGIN_PATH . 'public/assets/build/admin-attachment.asset.php' ); | |
| 71 | + wp_enqueue_style( 'quickwebp-admin-attachment', QUICKWEBP_PLUGIN_URL . 'public/assets/build/admin-attachment.css', array(), $admin_attachment_assets['version'], 'all' ); | |
| 72 | + wp_enqueue_script( 'quickwebp-admin-attachment', QUICKWEBP_PLUGIN_URL . 'public/assets/build/admin-attachment.js', $admin_attachment_assets['dependencies'], $admin_attachment_assets['version'], true ); | |
| 73 | + wp_localize_script( 'quickwebp-admin-attachment', 'QUICKWEBP_ADMIN_ATTACHMENT', array( | |
| 74 | + 'nonce' => wp_create_nonce( 'quickwebp_admin_attachment' ), | |
| 75 | + 'ajaxUrl' => admin_url( 'admin-ajax.php' ) | |
| 63 | 76 | )); |
| 64 | 77 | } |
| 65 | - | |
| 66 | - $admin_attachment_assets = include( QUICKWEBP_PLUGIN_PATH . 'public/assets/build/admin-attachment.asset.php' ); | |
| 67 | - wp_enqueue_style( 'quickwebp-admin-attachment', QUICKWEBP_PLUGIN_URL . 'public/assets/build/admin-attachment.css', array(), $admin_attachment_assets['version'], 'all' ); | |
| 68 | - wp_enqueue_script( 'quickwebp-admin-attachment', QUICKWEBP_PLUGIN_URL . 'public/assets/build/admin-attachment.js', $admin_attachment_assets['dependencies'], $admin_attachment_assets['version'], true ); | |
| 69 | - wp_localize_script( 'quickwebp-admin-attachment', 'QUICKWEBP_ADMIN_ATTACHMENT', array( | |
| 70 | - 'nonce' => wp_create_nonce( 'quickwebp_admin_attachment' ), | |
| 71 | - 'ajaxUrl' => admin_url( 'admin-ajax.php' ) | |
| 72 | - )); | |
| 73 | 78 | } |
| 74 | 79 | |
| 75 | 80 | /** |
| 76 | 81 | * Add "Quickwebp" column in the Media Uploader |
| @@ -85,25 +90,47 @@ | ||
| 85 | 90 | if ( ! $this->valid_mimetype( $post->ID ) ) { |
| 86 | 91 | return $form_fields; |
| 87 | 92 | } |
| 88 | 93 | |
| 89 | - $data = get_post_meta( $post->ID, 'quickwebp_data', true ); | |
| 90 | - $has_error = get_post_meta( $post->ID, 'quickwebp_has_error', true ); | |
| 94 | + $image_optimizer = new Quickwebp_Image_Optimizer( $this->plugin_name, $this->version ); | |
| 95 | + $settings = $image_optimizer->get_settings(); | |
| 91 | 96 | |
| 92 | - if ( ! is_array( $data ) ) { | |
| 97 | + $html = ''; | |
| 98 | + $status = '0'; | |
| 99 | + $already_optimized = get_post_meta( $post->ID, 'quickwebp_already_optimized', true ); | |
| 100 | + $data = get_post_meta( $post->ID, 'quickwebp_data', true ); | |
| 93 | 101 | |
| 94 | - $html = $this->optimize_btn( $post->ID ); | |
| 102 | + $mode_enabled = $settings['quickwebp_settings_conversion']; | |
| 95 | 103 | |
| 96 | - if ( ! empty( $has_error ) ) { | |
| 97 | - $html .= '<br>' . esc_html__( 'Error attempting to optimize this image', QUICKWEBP_TEXT_DOMAIN ); | |
| 104 | + if ( '1' == $already_optimized && ( '1' == $mode_enabled || '0' == $mode_enabled ) ) { | |
| 105 | + if ( is_array( $data ) ) { | |
| 106 | + $status = '1'; | |
| 107 | + } else { | |
| 108 | + $status = '2'; | |
| 98 | 109 | } |
| 110 | + } | |
| 99 | 111 | |
| 100 | - } else { | |
| 112 | + if ( '2' == $already_optimized && ( '2' == $mode_enabled || '0' == $mode_enabled ) ) { | |
| 113 | + if ( is_array( $data ) ) { | |
| 114 | + $status = '1'; | |
| 115 | + } else { | |
| 116 | + $status = '2'; | |
| 117 | + } | |
| 118 | + } | |
| 101 | 119 | |
| 102 | - $html = $this->attachment_data( $data, $post->ID ); | |
| 120 | + switch ( $status ) { | |
| 121 | + case '0': | |
| 122 | + $html = $this->optimize_btn( $post->ID ); | |
| 123 | + break; | |
| 124 | + case '1': | |
| 125 | + $html = $this->attachment_data( $data, $post->ID ); | |
| 126 | + break; | |
| 127 | + case '2': | |
| 128 | + $html = '<br>' . esc_html__( 'Image already optimized.', 'quickwebp' ); | |
| 129 | + break; | |
| 103 | 130 | } |
| 104 | 131 | |
| 105 | - $form_fields['quickwebp'] = array( | |
| 132 | + $form_fields['wpmtk_media_encoder'] = array( | |
| 106 | 133 | 'label' => 'Quickwebp', |
| 107 | 134 | 'input' => 'html', |
| 108 | 135 | 'html' => $html, |
| 109 | 136 | 'show_in_edit' => true, |
| @@ -116,11 +143,9 @@ | ||
| 116 | 143 | /** |
| 117 | 144 | * Add "quickwebp" column in upload.php |
| 118 | 145 | */ |
| 119 | 146 | public function add_media_columns( $columns ) { |
| 120 | - | |
| 121 | - $columns['quickwebp'] = __( 'Quickwebp', QUICKWEBP_TEXT_DOMAIN ); | |
| 122 | - | |
| 147 | + $columns['quickwebp'] = 'QuickWebP'; | |
| 123 | 148 | return $columns; |
| 124 | 149 | } |
| 125 | 150 | |
| 126 | 151 | /** |
| @@ -132,26 +157,48 @@ | ||
| 132 | 157 | return; |
| 133 | 158 | } |
| 134 | 159 | |
| 135 | 160 | if ( ! $this->valid_mimetype( $attachment_id ) ) { |
| 136 | - echo __( 'Image type not supported', QUICKWEBP_TEXT_DOMAIN ); | |
| 161 | + echo esc_html__( 'Image type not supported', 'quickwebp' ); | |
| 137 | 162 | return; |
| 138 | 163 | } |
| 139 | 164 | |
| 140 | - $data = get_post_meta( $attachment_id, 'quickwebp_data', true ); | |
| 141 | - $has_error = get_post_meta( $attachment_id, 'quickwebp_has_error', true ); | |
| 165 | + $image_optimizer = new Quickwebp_Image_Optimizer( $this->plugin_name, $this->version ); | |
| 166 | + $settings = $image_optimizer->get_settings(); | |
| 142 | 167 | |
| 143 | - if ( ! is_array( $data ) ) { | |
| 168 | + $html = ''; | |
| 169 | + $status = '0'; | |
| 170 | + $already_optimized = get_post_meta( $attachment_id, 'quickwebp_already_optimized', true ); | |
| 171 | + $data = get_post_meta( $attachment_id, 'quickwebp_data', true ); | |
| 144 | 172 | |
| 145 | - echo $this->optimize_btn( $attachment_id ); | |
| 173 | + $mode_enabled = $settings['quickwebp_settings_conversion']; | |
| 146 | 174 | |
| 147 | - if ( ! empty( $has_error ) ) { | |
| 148 | - echo esc_html__( 'Error attempting to optimize this image', QUICKWEBP_TEXT_DOMAIN ); | |
| 175 | + if ( '1' == $already_optimized && ( '1' == $mode_enabled || '0' == $mode_enabled ) ) { | |
| 176 | + if ( is_array( $data ) ) { | |
| 177 | + $status = '1'; | |
| 178 | + } else { | |
| 179 | + $status = '2'; | |
| 149 | 180 | } |
| 181 | + } | |
| 150 | 182 | |
| 151 | - } else { | |
| 183 | + if ( '2' == $already_optimized && ( '2' == $mode_enabled || '0' == $mode_enabled ) ) { | |
| 184 | + if ( is_array( $data ) ) { | |
| 185 | + $status = '1'; | |
| 186 | + } else { | |
| 187 | + $status = '2'; | |
| 188 | + } | |
| 189 | + } | |
| 152 | 190 | |
| 153 | - echo $this->attachment_data( $data, $attachment_id ); | |
| 191 | + switch ( $status ) { | |
| 192 | + case '0': | |
| 193 | + echo wp_kses_post( $this->optimize_btn( $attachment_id ) ); | |
| 194 | + break; | |
| 195 | + case '1': | |
| 196 | + echo wp_kses_post( $this->attachment_data( $data, $attachment_id ) ); | |
| 197 | + break; | |
| 198 | + case '2': | |
| 199 | + echo wp_kses_post( '<br>' . esc_html__( 'Image already optimized.', 'quickwebp' ) ); | |
| 200 | + break; | |
| 154 | 201 | } |
| 155 | 202 | } |
| 156 | 203 | |
| 157 | 204 | /** |
| @@ -163,27 +210,47 @@ | ||
| 163 | 210 | if ( ! $this->valid_mimetype( $post->ID ) ) { |
| 164 | 211 | return; |
| 165 | 212 | } |
| 166 | 213 | |
| 167 | - $data = get_post_meta( $post->ID, 'quickwebp_data', true ); | |
| 168 | - $has_error = get_post_meta( $post->ID, 'quickwebp_has_error', true ); | |
| 214 | + $image_optimizer = new Quickwebp_Image_Optimizer( $this->plugin_name, $this->version ); | |
| 215 | + $settings = $image_optimizer->get_settings(); | |
| 169 | 216 | |
| 170 | - if ( ! is_array( $data ) ) { | |
| 217 | + $html = ''; | |
| 218 | + $status = '0'; | |
| 219 | + $already_optimized = get_post_meta( $post->ID, 'quickwebp_already_optimized', true ); | |
| 220 | + $data = get_post_meta( $post->ID, 'quickwebp_data', true ); | |
| 171 | 221 | |
| 172 | - echo '<table><tr><td>'; | |
| 173 | - echo $this->optimize_btn( $post->ID ); | |
| 222 | + $mode_enabled = $settings['quickwebp_settings_conversion']; | |
| 174 | 223 | |
| 175 | - if ( ! empty( $has_error ) ) { | |
| 176 | - echo esc_html__( 'Error attempting to optimize this image', QUICKWEBP_TEXT_DOMAIN ); | |
| 224 | + if ( '1' == $already_optimized && ( '1' == $mode_enabled || '0' == $mode_enabled ) ) { | |
| 225 | + if ( is_array( $data ) ) { | |
| 226 | + $status = '1'; | |
| 227 | + } else { | |
| 228 | + $status = '2'; | |
| 177 | 229 | } |
| 230 | + } | |
| 178 | 231 | |
| 179 | - echo '</td></tr></table>'; | |
| 232 | + if ( '2' == $already_optimized && ( '2' == $mode_enabled || '0' == $mode_enabled ) ) { | |
| 233 | + if ( is_array( $data ) ) { | |
| 234 | + $status = '1'; | |
| 235 | + } else { | |
| 236 | + $status = '2'; | |
| 237 | + } | |
| 238 | + } | |
| 180 | 239 | |
| 181 | - } else { | |
| 182 | - | |
| 183 | - echo '<table><tr><td>' . $this->attachment_data( $data, $post->ID ) . '</td></tr></table>'; | |
| 240 | + echo '<table><tr><td><div><strong>QuickWebP</strong></div>'; | |
| 241 | + switch ( $status ) { | |
| 242 | + case '0': | |
| 243 | + echo wp_kses_post( $this->optimize_btn( $post->ID ) ); | |
| 244 | + break; | |
| 245 | + case '1': | |
| 246 | + echo wp_kses_post( $this->attachment_data( $data, $post->ID ) ); | |
| 247 | + break; | |
| 248 | + case '2': | |
| 249 | + echo esc_html__( 'Image already optimized.', 'quickwebp' ); | |
| 250 | + break; | |
| 184 | 251 | } |
| 185 | - | |
| 252 | + echo '</td></tr></table>'; | |
| 186 | 253 | } |
| 187 | 254 | |
| 188 | 255 | /** |
| 189 | 256 | * Get all data to display for a specific media |
| @@ -188,31 +255,30 @@ | ||
| 188 | 255 | /** |
| 189 | 256 | * Get all data to display for a specific media |
| 190 | 257 | */ |
| 191 | 258 | public function attachment_data( $data, $attachment_id ) { |
| 259 | + $available_formats = array( '1' => 'WebP', '2' => 'AVIF' ); | |
| 260 | + $full_image_data = $data['full'] ?? array(); | |
| 261 | + $format = $available_formats[ $full_image_data['format'] ?? '' ] ?? ''; | |
| 192 | 262 | |
| 193 | - $full_image_data = $data['full'] ?? array(); | |
| 194 | - | |
| 195 | 263 | if ( ! empty( $full_image_data ) ) { |
| 196 | - | |
| 197 | 264 | ob_start(); |
| 198 | - | |
| 199 | 265 | ?> |
| 200 | 266 | <div> |
| 201 | - <strong><?php _e( 'Original Image: ', QUICKWEBP_TEXT_DOMAIN ); ?></strong> | |
| 202 | - <span><?php echo round( $full_image_data['original_size'] / 1024, 2 ) . 'KB'; ?></span> | |
| 267 | + <strong><?php esc_html_e( 'Original Image: ', 'quickwebp' ); ?></strong> | |
| 268 | + <span><?php echo esc_html( round( $full_image_data['original_size'] / 1024, 2 ) . 'KB' ); ?></span> | |
| 203 | 269 | </div> |
| 204 | 270 | <div> |
| 205 | - <strong><?php _e( 'Webp: ', QUICKWEBP_TEXT_DOMAIN ); ?></strong> | |
| 206 | - <span><?php echo round( $full_image_data['optimized_size'] / 1024, 2 ) . 'KB'; ?></span> | |
| 271 | + <strong><?php echo esc_html( $format ); ?>: </strong> | |
| 272 | + <span><?php echo esc_html( round( $full_image_data['optimized_size'] / 1024, 2 ) . 'KB' ); ?></span> | |
| 207 | 273 | </div> |
| 208 | 274 | <div> |
| 209 | - <strong><?php _e( 'Save: ', QUICKWEBP_TEXT_DOMAIN ); ?></strong> | |
| 210 | - <span><?php echo $full_image_data['percent'] . '%'; ?></span> | |
| 275 | + <strong><?php esc_html_e( 'Save: ', 'quickwebp' ); ?></strong> | |
| 276 | + <span><?php echo esc_html( $full_image_data['percent'] . '%' ); ?></span> | |
| 211 | 277 | </div> |
| 212 | 278 | <div> |
| 213 | 279 | <button class="button button-sacondary quickwebp-undo-single-optimization-btn" data-attachment-id="<?php echo esc_attr( $attachment_id ); ?>"> |
| 214 | - <?php _e( 'Undo optimization', QUICKWEBP_TEXT_DOMAIN ); ?> | |
| 280 | + <?php esc_html_e( 'Undo optimization', 'quickwebp' ); ?> | |
| 215 | 281 | <div class="spinner"></div> |
| 216 | 282 | </button> |
| 217 | 283 | <div class="quickwebp-undo-single-optimization-msg"></div> |
| 218 | 284 | </div> |
| @@ -219,9 +285,8 @@ | ||
| 219 | 285 | <?php |
| 220 | 286 | |
| 221 | 287 | return ob_get_clean(); |
| 222 | 288 | } |
| 223 | - | |
| 224 | 289 | } |
| 225 | 290 | |
| 226 | 291 | /** |
| 227 | 292 | * Display optimize button in the media uploader |
| @@ -226,14 +291,12 @@ | ||
| 226 | 291 | /** |
| 227 | 292 | * Display optimize button in the media uploader |
| 228 | 293 | */ |
| 229 | 294 | public function optimize_btn( $attachment_id ) { |
| 230 | - | |
| 231 | 295 | ob_start(); |
| 232 | - | |
| 233 | 296 | ?> |
| 234 | 297 | <button class="button button-sacondary quickwebp-single-optimization-btn" data-attachment-id="<?php echo esc_attr( $attachment_id ); ?>"> |
| 235 | - <?php _e( 'Optimize', QUICKWEBP_TEXT_DOMAIN ); ?> | |
| 298 | + <?php esc_html_e( 'Optimize', 'quickwebp' ); ?> | |
| 236 | 299 | <div class="spinner"></div> |
| 237 | 300 | </button> |
| 238 | 301 | <div class="quickwebp-single-optimization-msg"></div> |
| 239 | 302 | <?php |
| @@ -243,17 +306,12 @@ | ||
| 243 | 306 | |
| 244 | 307 | /** |
| 245 | 308 | * Check the mimetype of the file |
| 246 | 309 | */ |
| 247 | - public function valid_mimetype( $post_id ) { | |
| 310 | + private function valid_mimetype( $post_id ) { | |
| 311 | + $image_optimizer = new Quickwebp_Image_Optimizer( $this->plugin_name, $this->version ); | |
| 312 | + $allowed_mime_types = $image_optimizer->allowed_mime_types; | |
| 313 | + $post_mime_type = get_post_mime_type( $post_id ); | |
| 248 | 314 | |
| 249 | - // check the mime type | |
| 250 | - $image_optimizer = new Quickwebp_Image_Optimizer( $this->plugin_name, $this->version ); | |
| 251 | - $mime_types = $image_optimizer->allowed_mime_types; | |
| 252 | - $index = array_search( 'image/webp', $mime_types ); | |
| 253 | - unset( $mime_types[$index] ); | |
| 254 | - $mime_type = get_post_mime_type( $post_id ); | |
| 255 | - | |
| 256 | - return in_array( $mime_type, $mime_types ); | |
| 315 | + return in_array( $post_mime_type, $allowed_mime_types ); | |
| 257 | 316 | } |
| 258 | - | |
| 259 | -} | |
| 317 | +} | |