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-pluswebpadmin.php +241 -299 1.09 → 4.11 View file →
@@ -32,15 +32,15 @@
32 32 * @since 1.00
33 33 */
34 34 public function __construct() {
35 35
36 + add_action( 'admin_init', array( $this, 'register_settings' ) );
37 +
36 38 add_action( 'admin_menu', array( $this, 'plugin_menu' ) );
37 - add_action( 'admin_enqueue_scripts', array( $this, 'load_custom_wp_admin_style' ) );
38 39 add_filter( 'plugin_action_links', array( $this, 'settings_link' ), 10, 2 );
39 - add_action( 'admin_notices', array( $this, 'generate_notice' ) );
40 40
41 - add_action( 'AllImagesRegenerateHook', array( $this, 'allimages_regenerate' ), 10, 1 );
42 -
41 + add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ), 10, 1 );
42 + add_action( 'rest_api_init', array( $this, 'register_rest' ) );
43 43 }
44 44
45 45 /** ==================================================
46 46 * Add a "Settings" link to the plugins page
@@ -55,9 +55,9 @@
55 55 if ( empty( $this_plugin ) ) {
56 56 $this_plugin = 'plus-webp/pluswebp.php';
57 57 }
58 58 if ( $file === $this_plugin ) {
59 - $links[] = '<a href="' . admin_url( 'tools.php?page=pluswebp' ) . '">' . esc_html__( 'Bulk Generate', 'plus-webp' ) . '</a>';
59 + $links[] = '<a href="' . admin_url( 'upload.php?page=plus-webp' ) . '">' . esc_html__( 'Settings' ) . ' & ' . esc_html__( 'Bulk Generate', 'plus-webp' ) . '</a>';
60 60 }
61 61 return $links;
62 62 }
63 63
@@ -66,191 +66,235 @@
66 66 *
67 67 * @since 1.00
68 68 */
69 69 public function plugin_menu() {
70 - add_management_page( 'Plus WebP', 'Plus WebP', 'manage_options', 'pluswebp', array( $this, 'plugin_options' ) );
70 +
71 + add_media_page(
72 + 'Plus WebP',
73 + 'Plus WebP',
74 + 'manage_options',
75 + 'plus-webp',
76 + array( $this, 'plus_webp_generate_setteings' )
77 + );
71 78 }
72 79
73 80 /** ==================================================
74 - * Add Css and Script
81 + * Generate and Settings page
75 82 *
76 - * @since 1.00
83 + * @since 4.00
77 84 */
78 - public function load_custom_wp_admin_style() {
79 - if ( $this->is_my_plugin_screen() ) {
80 - wp_enqueue_style( 'jquery-responsiveTabs', plugin_dir_url( __DIR__ ) . 'css/responsive-tabs.css', array(), '1.4.0' );
81 - wp_enqueue_style( 'jquery-responsiveTabs-style', plugin_dir_url( __DIR__ ) . 'css/style.css', array(), '1.4.0' );
82 - wp_enqueue_script( 'jquery' );
83 - wp_enqueue_script( 'jquery-responsiveTabs', plugin_dir_url( __DIR__ ) . 'js/jquery.responsiveTabs.min.js', array(), '1.4.0', false );
84 - wp_enqueue_script( 'pluswebp-admin-js', plugin_dir_url( __DIR__ ) . 'js/jquery.pluswebp.admin.js', array( 'jquery' ), array(), '1.00', false );
85 - }
85 + public function plus_webp_generate_setteings() {
86 +
87 + echo '<div id="plus-webp-page"></div>';
86 88 }
87 89
88 90 /** ==================================================
89 - * For only admin style
91 + * Load script
90 92 *
91 - * @since 1.00
93 + * @param string $hook_suffix hook_suffix.
94 + * @since 4.00
92 95 */
93 - private function is_my_plugin_screen() {
94 - $screen = get_current_screen();
95 - if ( is_object( $screen ) && 'tools_page_pluswebp' === $screen->id ) {
96 - return true;
97 - } else {
98 - return false;
96 + public function admin_scripts( $hook_suffix ) {
97 +
98 + if ( 'media_page_plus-webp' !== $hook_suffix ) {
99 + return;
99 100 }
101 +
102 + $asset_file = include plugin_dir_path( __DIR__ ) . 'guten/dist/plus-webp.asset.php';
103 +
104 + wp_enqueue_style(
105 + 'plus-webp-style',
106 + plugin_dir_url( __DIR__ ) . 'guten/dist/plus-webp.css',
107 + array( 'wp-components' ),
108 + '1.0.0',
109 + );
110 +
111 + wp_enqueue_script(
112 + 'plus-webp',
113 + plugin_dir_url( __DIR__ ) . 'guten/dist/plus-webp.js',
114 + $asset_file['dependencies'],
115 + $asset_file['version'],
116 + true
117 + );
118 +
119 + $pluswebp_settings = get_option( 'pluswebp' );
120 +
121 + list( $post_ids, $no_file_ids ) = apply_filters( 'pluswebp_get_allimages', $pluswebp_settings['types'] );
122 +
123 + $non_generate_description = null;
124 + if ( ! empty( $no_file_ids ) ) {
125 + /* translators: Count of no file Media */
126 + $non_generate_description = sprintf( __( 'Found %1$d media(id: %2$s), exists in the database, but the file does not, so the conversion is not performed.', 'plus-webp' ), count( $no_file_ids ), implode( ',', $no_file_ids ) );
127 + }
128 +
129 + wp_localize_script(
130 + 'plus-webp',
131 + 'pluswebpgenerate_data',
132 + array(
133 + 'bulk_label' => __( 'Bulk Generate', 'plus-webp' ),
134 + 'description_label' => __( 'To perform "Bulk Generate" after changing the following settings, press "Check" and then press "Generate".', 'plus-webp' ),
135 + 'wp_cli_label' => __( 'WP-CLI commands are available. If you have a large number of files, WP-CLI commands is more reliable. Command line options allow you to specify whether or not email is sent and the source media ID.', 'plus-webp' ),
136 + 'generate_label' => __( 'Generate', 'plus-webp' ),
137 + 'generate_description_label' => __( 'Notified by email with details of the generate results.', 'plus-webp' ),
138 + 'generate_end_label' => __( 'Generation has been completed.', 'plus-webp' ),
139 + 'stop_label' => __( 'Stop', 'plus-webp' ),
140 + 'check_label' => __( 'Check', 'plus-webp' ),
141 + /* translators: Count of Media */
142 + 'generate_description' => sprintf( __( 'Found %1$d media that can be generated.', 'plus-webp' ), count( $post_ids ) ),
143 + 'non_description' => __( 'Cannot find any media that can be generated.', 'plus-webp' ),
144 + 'non_generate_description' => $non_generate_description,
145 + 'title_label' => __( 'Title' ) . ': ',
146 + 'filename_label' => __( 'File name:' ) . ' ',
147 + 'datetime_label' => __( 'Date/Time' ) . ': ',
148 + 'filesize_label' => __( 'File size:' ) . ' ',
149 + 'post_ids' => wp_json_encode( $post_ids, JSON_UNESCAPED_SLASHES ),
150 + )
151 + );
152 +
153 + wp_localize_script(
154 + 'plus-webp',
155 + 'pluswebpsettings_data',
156 + array(
157 + 'settings_label' => __( 'Settings' ),
158 + 'quality_label' => __( 'Quality', 'plus-webp' ),
159 + 'lowreso_label' => __( 'low resolution', 'plus-webp' ),
160 + 'highreso_label' => __( 'high resolution', 'plus-webp' ),
161 + 'quality_description_label' => __( 'Specifies the quality of WebP. The higher the number, the better the quality and the larger the file size.', 'plus-webp' ),
162 + 'type_label' => __( 'Type' ),
163 + 'type_description_label' => __( 'Check the images you want to convert to WebP.', 'plus-webp' ),
164 + 'append_label' => __( 'Append the webp extension to the original filename', 'plus-webp' ),
165 + 'apply_label' => __( 'Apply' ),
166 + 'append_description_label' => __( 'Checking this setting, the extension webp will be appended to the name of the file, including the extension. Not checking, only the extension is changed.', 'plus-webp' ),
167 + 'replace_label' => __( 'WebP replacement of images and contents', 'plus-webp' ),
168 + 'replace_description_label' => __( 'Checking this setting will replace image files with WebP when adding new media, and delete the original image file. Also, when generating all images, the original image file ID will be overwritten as WebP and the original image file will be deleted. All URLs in the content are also replaced.', 'plus-webp' ),
169 + 'replace_advanced_description_label' => __( 'If you want to replace other databases besides content, use the "plus_webp_advanced_change_db" filter hook.', 'plus-webp' ),
170 + 'replace_advanced_link' => __( 'https://wordpress.org/plugins/plus-webp/', 'plus-webp' ),
171 + 'replace_advanced_text' => __( '"plus_webp_advanced_change_db" filter hook', 'plus-webp' ),
172 + 'settings' => wp_json_encode( $pluswebp_settings, JSON_UNESCAPED_SLASHES ),
173 + )
174 + );
175 +
176 + $this->credit_gutenberg( 'plus-webp' );
100 177 }
101 178
102 179 /** ==================================================
103 - * Settings page
180 + * Register Rest API
104 181 *
105 - * @since 1.00
182 + * @since 4.00
106 183 */
107 - public function plugin_options() {
184 + public function register_rest() {
108 185
109 - if ( ! current_user_can( 'manage_options' ) ) {
110 - wp_die( esc_html__( 'You do not have sufficient permissions to access this page.' ) );
111 - }
186 + register_rest_route(
187 + 'rf/plus-webp-generate_api',
188 + '/token',
189 + array(
190 + 'methods' => 'POST',
191 + 'callback' => array( $this, 'generate_api_save' ),
192 + 'permission_callback' => array( $this, 'rest_permission' ),
193 + ),
194 + );
112 195
113 - $pluswebp_settings = get_option( 'pluswebp' );
196 + register_rest_route(
197 + 'rf/plus-webp-settings_api',
198 + '/token',
199 + array(
200 + 'methods' => 'POST',
201 + 'callback' => array( $this, 'settings_api_save' ),
202 + 'permission_callback' => array( $this, 'rest_permission' ),
203 + ),
204 + );
205 + }
114 206
115 - if ( isset( $_POST['Generatewebp'] ) && ! empty( $_POST['Generatewebp'] ) ) {
116 - if ( check_admin_referer( 'pwp_gnt', 'pluswebp_gnt' ) ) {
117 - if ( ! empty( $pluswebp_settings['types'] ) ) {
118 - $user = wp_get_current_user();
119 - $to = $user->user_email;
120 - $userid = $user->ID;
121 - if ( ! wp_next_scheduled( 'AllImagesRegenerateHook', array( $to ) ) ) {
122 - /* 30seconds */
123 - wp_schedule_single_event( time() + 30, 'AllImagesRegenerateHook', array( $to ) );
124 - echo '<div class="notice notice-success is-dismissible"><ul><li>' . esc_html__( 'After 30 seconds background generation starts.', 'plus-webp' ) . '</li></ul></div>';
125 - } else {
126 - echo '<div class="notice notice-error is-dismissible"><ul><li>' . esc_html__( 'Currently, there is a process that is being bulk generated.', 'plus-webp' ) . '</li></ul></div>';
127 - }
128 - } else {
129 - echo '<div class="notice notice-error is-dismissible"><ul><li>' . esc_html__( 'The image type for creating WebP is not specified.', 'plus-webp' ) . '</li></ul></div>';
130 - }
131 - }
132 - }
207 + /** ==================================================
208 + * Rest Permission
209 + *
210 + * @since 4.00
211 + */
212 + public function rest_permission() {
133 213
134 - $this->options_updated();
214 + return current_user_can( 'manage_options' );
215 + }
135 216
136 - $scriptname = admin_url( 'tools.php?page=pluswebp' );
217 + /** ==================================================
218 + * Rest API save for Generate
219 + *
220 + * @param object $request changed data.
221 + * @since 4.00
222 + */
223 + public function generate_api_save( $request ) {
137 224
138 - ?>
139 - <div class="wrap">
140 - <h2>Plus WebP</h2>
225 + $args = json_decode( $request->get_body(), true );
141 226
142 - <div id="pluswebp-admin-tabs">
143 - <ul>
144 - <li><a href="#pluswebp-admin-tabs-1"><?php esc_html_e( 'Bulk Generate', 'plus-webp' ); ?></a></li>
145 - <li><a href="#pluswebp-admin-tabs-2"><?php esc_html_e( 'Settings' ); ?></a></li>
146 - <li><a href="#pluswebp-admin-tabs-3"><?php esc_html_e( 'Donate to this plugin &#187;' ); ?></a></li>
147 - </ul>
148 - <div id="pluswebp-admin-tabs-1">
149 - <div class="wrap">
150 - <h2><?php esc_html_e( 'Bulk Generate', 'plus-webp' ); ?></h2>
227 + $count = absint( $args['count'] );
228 + $max_count = absint( $args['max_count'] );
229 + $attach_id = absint( $args['post_id'] );
230 + $messages = get_option( 'pluswebp_messages', array() );
151 231
152 - <div style="margin: 5px; padding: 5px;">
153 - <p class="description">
154 - <?php esc_html_e( 'Press the following button to start WebP generation after 30 seconds in the background. When finished, you will receive an email.', 'plus-webp' ); ?>
155 - </p>
156 - </div>
232 + if ( $args['generate'] ) {
233 + $metadata_org = wp_get_attachment_metadata( $attach_id );
157 234
158 - <form method="post" action="<?php echo esc_url( $scriptname ); ?>">
159 - <?php wp_nonce_field( 'pwp_gnt', 'pluswebp_gnt' ); ?>
160 - <?php submit_button( __( 'Generate', 'plus-webp' ), 'primary', 'Generatewebp', true ); ?>
161 - </form>
162 - </div>
163 - </div>
235 + delete_option( 'pluswebp_generate' );
236 + do_action( 'wp_generate_attachment_metadata', $metadata_org, $attach_id );
237 + $webp_id = get_option( 'pluswebp_generate' );
238 + delete_option( 'pluswebp_generate' );
164 239
165 - <div id="pluswebp-admin-tabs-2">
166 - <div class="wrap">
167 - <h2><?php esc_html_e( 'Settings' ); ?></h2>
240 + if ( $webp_id ) {
241 + list( $tmp, $messages ) = apply_filters( 'pluswebp_mail_messages', $messages, $webp_id );
242 + update_option( 'pluswebp_messages', $messages );
243 + }
244 + if ( $count === $max_count ) {
245 + do_action( 'pluswebp_mail_generate_message', $messages, $max_count );
246 + delete_option( 'pluswebp_messages' );
247 + }
248 + } else {
249 + do_action( 'pluswebp_mail_generate_message', $messages, count( $messages ) );
250 + delete_option( 'pluswebp_messages' );
251 + }
168 252
169 - <form method="post" action="<?php echo esc_url( $scriptname ) . '#pluswebp-admin-tabs-2'; ?>">
170 - <?php wp_nonce_field( 'pwp_set', 'pluswebp_set' ); ?>
253 + return new WP_REST_Response( $args, 200 );
254 + }
171 255
172 - <div style="width: 100%; height: 100%; margin: 5px; padding: 5px; border: #CCC 2px solid;">
173 - <h3><?php esc_html_e( 'Quality', 'plus-webp' ); ?></h3>
174 - <div style="margin: 5px; padding: 5px;">
175 - <?php esc_html_e( 'low resolution', 'plus-webp' ); ?>
176 - <input type="range" style="vertical-align:middle;" name="quality" value="<?php echo esc_attr( $pluswebp_settings['quality'] ); ?>" min="0" max="100" step="1">
177 - <?php esc_html_e( 'high resolution', 'plus-webp' ); ?>
178 - <div style="margin: 5px; padding: 5px;">
179 - <p class="description">
180 - <?php esc_html_e( 'Specifies the quality of WebP. The higher the resolution, the larger the file size.', 'plus-webp' ); ?>
181 - </p>
182 - </div>
183 - </div>
184 - </div>
256 + /** ==================================================
257 + * Rest API save for Settings
258 + *
259 + * @param object $request changed data.
260 + * @since 4.00
261 + */
262 + public function settings_api_save( $request ) {
185 263
186 - <div style="width: 100%; height: 100%; margin: 5px; padding: 5px; border: #CCC 2px solid;">
187 - <h3><?php esc_html_e( 'Type' ); ?></h3>
188 - <?php
189 - $list_types = array(
190 - 'image/jpeg',
191 - 'image/png',
192 - 'image/bmp',
193 - 'image/gif',
194 - );
195 - foreach ( $list_types as $value ) {
196 - if ( in_array( $value, $pluswebp_settings['types'] ) ) {
197 - $check = 1;
198 - } else {
199 - $check = 0;
200 - }
201 - ?>
202 - <div style="display: block;padding:5px 5px"><input type="checkbox" name="list_types[<?php echo esc_attr( $value ); ?>]" value="1" <?php checked( '1', $check ); ?> /><?php echo esc_html( $value ); ?></div>
203 - <?php
204 - }
205 - ?>
206 - <div style="margin: 5px; padding: 5px;">
207 - <p class="description">
208 - <?php esc_html_e( 'Check the images you want to convert to WebP.', 'plus-webp' ); ?>
209 - </p>
210 - </div>
211 - </div>
264 + $args = json_decode( $request->get_body(), true );
212 265
213 - <div style="width: 100%; height: 100%; margin: 5px; padding: 5px; border: #CCC 2px solid;">
214 - <h3><?php esc_html_e( 'WebP replacement of images and contents', 'plus-webp' ); ?></h3>
215 - <div style="margin: 5px; padding: 5px;">
216 - <input type="checkbox" name="replace" value="1" <?php checked( '1', $pluswebp_settings['replace'] ); ?>><?php esc_html_e( 'Apply' ); ?>
217 - <div style="margin: 5px; padding: 5px;">
218 - <p class="description">
219 - <?php esc_html_e( 'Checking this setting will replace image files with WebP when adding new media, and delete the original image file. Also, when generating all images, the original image file ID will be overwritten as WebP and the original image file will be deleted. All URLs in the content are also replaced.', 'plus-webp' ); ?>
220 - </p>
221 - </div>
222 - </div>
223 - </div>
266 + $options = array();
267 + $options['quality'] = intval( $args['quality'] );
268 + $options['types'] = filter_var(
269 + wp_unslash( $args['types'] ),
270 + FILTER_CALLBACK,
271 + array(
272 + 'options' => function ( $value ) {
273 + return sanitize_text_field( $value );
274 + },
275 + )
276 + );
277 + $options['addext'] = boolval( $args['addext'] );
278 + $options['replace'] = boolval( $args['replace'] );
224 279
225 - <?php submit_button( __( 'Save Changes' ), 'large', 'Manageset', false ); ?>
226 - </form>
227 - </div>
228 - </div>
280 + update_option( 'pluswebp', $options );
229 281
230 - <div id="pluswebp-admin-tabs-3">
231 - <div class="wrap">
232 - <?php $this->credit(); ?>
233 - </div>
234 - </div>
235 -
236 - </div>
237 -
238 - </div>
239 - <?php
282 + return new WP_REST_Response( $args, 200 );
240 283 }
241 284
242 285 /** ==================================================
243 - * Credit
286 + * Credit for Gutenberg
244 287 *
245 - * @since 1.00
288 + * @param string $handle handle.
289 + * @since 4.00
246 290 */
247 - private function credit() {
291 + private function credit_gutenberg( $handle ) {
248 292
249 293 $plugin_name = null;
250 294 $plugin_ver_num = null;
251 295 $plugin_path = plugin_dir_path( __DIR__ );
252 - $plugin_dir = untrailingslashit( $plugin_path );
296 + $plugin_dir = untrailingslashit( wp_normalize_path( $plugin_path ) );
253 297 $slugs = explode( '/', $plugin_dir );
254 298 $slug = end( $slugs );
255 299 $files = scandir( $plugin_dir );
256 300 foreach ( $files as $file ) {
@@ -274,170 +318,68 @@
274 318 }
275 319 }
276 320 }
277 321 }
278 - $plugin_version = __( 'Version:' ) . ' ' . $plugin_ver_num;
279 - /* translators: FAQ Link & Slug */
280 - $faq = sprintf( esc_html__( 'https://wordpress.org/plugins/%s/faq', '%s' ), $slug );
281 - $support = 'https://wordpress.org/support/plugin/' . $slug;
282 - $review = 'https://wordpress.org/support/view/plugin-reviews/' . $slug;
283 - $translate = 'https://translate.wordpress.org/projects/wp-plugins/' . $slug;
284 - $facebook = 'https://www.facebook.com/katsushikawamori/';
285 - $twitter = 'https://twitter.com/dodesyo312';
286 - $youtube = 'https://www.youtube.com/channel/UC5zTLeyROkvZm86OgNRcb_w';
287 - $donate = sprintf( esc_html__( 'https://shop.riverforest-wp.info/donate/', '%s' ), $slug );
288 322
289 - ?>
290 - <span style="font-weight: bold;">
291 - <div>
292 - <?php echo esc_html( $plugin_version ); ?> |
293 - <a style="text-decoration: none;" href="<?php echo esc_url( $faq ); ?>" target="_blank"><?php esc_html_e( 'FAQ' ); ?></a> | <a style="text-decoration: none;" href="<?php echo esc_url( $support ); ?>" target="_blank"><?php esc_html_e( 'Support Forums' ); ?></a> | <a style="text-decoration: none;" href="<?php echo esc_url( $review ); ?>" target="_blank"><?php sprintf( esc_html_e( 'Reviews', '%s' ), $slug ); ?></a>
294 - </div>
295 - <div>
296 - <a style="text-decoration: none;" href="<?php echo esc_url( $translate ); ?>" target="_blank">
297 - <?php
298 - /* translators: Plugin translation link */
299 - echo sprintf( esc_html__( 'Translations for %s' ), esc_html( $plugin_name ) );
300 - ?>
301 - </a> | <a style="text-decoration: none;" href="<?php echo esc_url( $facebook ); ?>" target="_blank"><span class="dashicons dashicons-facebook"></span></a> | <a style="text-decoration: none;" href="<?php echo esc_url( $twitter ); ?>" target="_blank"><span class="dashicons dashicons-twitter"></span></a> | <a style="text-decoration: none;" href="<?php echo esc_url( $youtube ); ?>" target="_blank"><span class="dashicons dashicons-video-alt3"></span></a>
302 - </div>
303 - </span>
304 -
305 - <div style="width: 250px; height: 180px; margin: 5px; padding: 5px; border: #CCC 2px solid;">
306 - <h3><?php sprintf( esc_html_e( 'Please make a donation if you like my work or would like to further the development of this plugin.', '%s' ), $slug ); ?></h3>
307 - <div style="text-align: right; margin: 5px; padding: 5px;"><span style="padding: 3px; color: #ffffff; background-color: #008000">Plugin Author</span> <span style="font-weight: bold;">Katsushi Kawamori</span></div>
308 - <button type="button" style="margin: 5px; padding: 5px;" onclick="window.open('<?php echo esc_url( $donate ); ?>')"><?php esc_html_e( 'Donate to this plugin &#187;' ); ?></button>
309 - </div>
310 -
311 - <?php
312 -
323 + wp_localize_script(
324 + $handle,
325 + 'credit',
326 + array(
327 + 'links' => __( 'Various links of this plugin', 'plus-webp' ),
328 + 'plugin_version' => __( 'Version:' ) . ' ' . $plugin_ver_num,
329 + /* translators: FAQ Link & Slug */
330 + 'faq' => sprintf( __( 'https://wordpress.org/plugins/%1$s/faq', 'plus-webp' ), $slug ),
331 + 'support' => 'https://wordpress.org/support/plugin/' . $slug,
332 + 'review' => 'https://wordpress.org/support/view/plugin-reviews/' . $slug,
333 + 'translate' => 'https://translate.wordpress.org/projects/wp-plugins/' . $slug,
334 + /* translators: Plugin translation link */
335 + 'translate_text' => sprintf( __( 'Translations for %s' ), $plugin_name ),
336 + 'facebook' => 'https://www.facebook.com/katsushikawamori/',
337 + 'twitter' => 'https://twitter.com/dodesyo312',
338 + 'youtube' => 'https://www.youtube.com/channel/UC5zTLeyROkvZm86OgNRcb_w',
339 + 'donate' => __( 'https://shop.riverforest-wp.info/donate/', 'plus-webp' ),
340 + 'donate_text' => __( 'Please make a donation if you like my work or would like to further the development of this plugin.', 'plus-webp' ),
341 + 'donate_button' => __( 'Donate to this plugin &#187;' ),
342 + )
343 + );
313 344 }
314 345
315 346 /** ==================================================
316 - * Regenerate All Images
347 + * Settings register
317 348 *
318 - * @param string $to mail address.
319 349 * @since 1.00
320 350 */
321 - public function allimages_regenerate( $to ) {
351 + public function register_settings() {
322 352
323 - $pluswebp_settings = get_option( 'pluswebp' );
324 -
325 - global $wpdb;
326 -
327 - $mime_types = null;
328 - foreach ( $pluswebp_settings['types'] as $value ) {
329 - $mime_types .= "'" . $value . "'" . ',';
330 - }
331 - $mime_types = rtrim( $mime_types, ',' );
332 -
333 - $wpdb->plus_webp_mime_type = 'AND post_mime_type IN (' . $mime_types . ')';
334 -
335 - $post_ids = $wpdb->get_col(
336 - "
337 - SELECT ID
338 - FROM $wpdb->posts
339 - WHERE post_type = 'attachment'
340 - $wpdb->plus_webp_mime_type
341 - AND post_status = 'inherit'
342 - "
343 - );
344 -
345 - if ( ! empty( $post_ids ) ) {
346 - delete_option( 'pluswebp_generate' );
347 - include_once ABSPATH . 'wp-admin/includes/image.php';
348 - /* Generate WebP */
349 - foreach ( $post_ids as $attach_id ) {
350 - $metadata = wp_get_attachment_metadata( $attach_id );
351 - do_action( 'wp_generate_attachment_metadata', $metadata, $attach_id );
353 + if ( get_option( 'pluswebp' ) ) {
354 + $pluswebp_settings = get_option( 'pluswebp' );
355 + /* 'types' from ver 1.08 */
356 + if ( ! array_key_exists( 'types', $pluswebp_settings ) ) {
357 + $pluswebp_settings['types'] = array(
358 + 'image/jpeg',
359 + 'image/png',
360 + 'image/bmp',
361 + 'image/gif',
362 + );
363 + update_option( 'pluswebp', $pluswebp_settings );
352 364 }
353 - /* Mail send */
354 - do_action( 'pluswebp_mail_send', $to );
355 - } else {
356 - ?>
357 - <div class="notice notice-error is-dismissible"><ul><li><?php esc_html_e( 'There are no images to convert. Generation stopped.', 'plus-webp' ); ?></li></ul></div>';
358 - <?php
359 - }
360 -
361 - wp_clear_scheduled_hook( 'AllImagesRegenerateHook' );
362 -
363 - }
364 -
365 - /** ==================================================
366 - * Update wp_options table.
367 - *
368 - * @since 1.02
369 - */
370 - private function options_updated() {
371 -
372 - if ( isset( $_POST['Manageset'] ) && ! empty( $_POST['Manageset'] ) ) {
373 - if ( check_admin_referer( 'pwp_set', 'pluswebp_set' ) ) {
374 - $pluswebp_settings = get_option( 'pluswebp' );
375 - $list_types = array();
376 - if ( isset( $_POST['list_types'] ) && ! empty( $_POST['list_types'] ) ) {
377 - $tmps = filter_var(
378 - wp_unslash( $_POST['list_types'] ),
379 - FILTER_CALLBACK,
380 - [
381 - 'options' => function( $value ) {
382 - return sanitize_text_field( $value );
383 - },
384 - ]
385 - );
386 - foreach ( $tmps as $key => $value ) {
387 - $list_types[] = $key;
388 - }
389 - $pluswebp_settings['types'] = $list_types;
390 - } else {
391 - $pluswebp_settings['types'] = $list_types;
392 - }
393 - if ( isset( $_POST['replace'] ) && ! empty( $_POST['replace'] ) ) {
394 - $pluswebp_settings['replace'] = true;
395 - } else {
396 - $pluswebp_settings['replace'] = false;
397 - }
398 - if ( isset( $_POST['quality'] ) ) {
399 - $pluswebp_settings['quality'] = intval( $_POST['quality'] );
400 - }
365 + /* 'addext' from ver 1.13 */
366 + if ( ! array_key_exists( 'addext', $pluswebp_settings ) ) {
367 + $pluswebp_settings['addext'] = false;
401 368 update_option( 'pluswebp', $pluswebp_settings );
402 - echo '<div class="notice notice-success is-dismissible"><ul><li>' . esc_html__( 'Settings' ) . ' --> ' . esc_html__( 'Settings saved.' ) . '</li></ul></div>';
403 369 }
370 + } else {
371 + $pswp_tbl = array(
372 + 'quality' => 80,
373 + 'replace' => false,
374 + 'addext' => false,
375 + 'types' => array(
376 + 'image/jpeg',
377 + 'image/png',
378 + 'image/bmp',
379 + 'image/gif',
380 + ),
381 + );
382 + update_option( 'pluswebp', $pswp_tbl );
404 383 }
405 -
406 384 }
407 -
408 - /** ==================================================
409 - * Generate notice
410 - *
411 - * @since 1.09
412 - */
413 - public function generate_notice() {
414 -
415 - if ( get_option( 'pluswebp_generate_mail' ) ) {
416 - $pluswebp_mail_send = get_option( 'pluswebp_generate_mail' );
417 - if ( 0 < $pluswebp_mail_send['count'] ) {
418 - ?>
419 - <div class="notice notice-success is-dismissible"><ul><li><strong>Plus WebP</strong>
420 - <?php
421 - /* translators: %1$s Date Time, %2$d File Count */
422 - echo wp_kses_post( sprintf( __( ' : %1$s : %2$d WebP files and their thumbnails have been generated. Details have been sent by e-mail.', 'plus-webp' ), $pluswebp_mail_send['datetime'], $pluswebp_mail_send['count'] ) );
423 - ?>
424 - </li></ul></div>
425 - <?php
426 - } else {
427 - ?>
428 - <div class="notice notice-error is-dismissible"><ul><li><strong>Plus WebP</strong>
429 - <?php
430 - /* translators: %1$s Date Time %2$s error message */
431 - echo wp_kses_post( sprintf( __( ' : %1$s : %2$s', 'plus-webp' ), $pluswebp_mail_send['datetime'], __( 'WebP was not generated. A file with the same name already exists.', 'plus-webp' ) ) );
432 - ?>
433 - </li></ul></div>
434 - <?php
435 - }
436 - delete_option( 'pluswebp_generate_mail' );
437 - }
438 -
439 - }
440 -
441 385 }
442 -
443 -