PluginProbe
QuickWebP – WebP & AVIF Image Optimizer, Compression & SEO for WordPress / 4.1.1
QuickWebP – WebP & AVIF Image Optimizer, Compression & SEO for WordPress v4.1.1
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 / components / media.php

media.php in QuickWebP – WebP & AVIF Image Optimizer, Compression & SEO for WordPress 4.1.1, at admin/components/media.php

122 lines 5.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
4 /**
5 * Media component for the settings page
6 */
7
8 $quickwebp_key_option = sanitize_key( $data['name'] );
9 //phpcs:ignore WordPress.Security.NonceVerification.Missing
10 if( isset( $quickwebp_key_option, $_POST[ $quickwebp_key_option ] ) ) {
11 //phpcs:ignore WordPress.Security.NonceVerification.Missing
12 $quickwebp_raw_value = sanitize_text_field( wp_unslash( $_POST[ $quickwebp_key_option ] ) );
13 $quickwebp_media_ids = array_filter( array_map( 'absint', explode( ',', $quickwebp_raw_value ) ) );
14 update_option( $quickwebp_key_option, implode( ',', $quickwebp_media_ids ) );
15 }
16
17 wp_enqueue_media();
18 $quickwebp_is_multiple = isset( $data['multiple'] ) && $data['multiple'] === true ? 'true' : 'false';
19 $quickwebp_image_preview_template = '<img src="%1$s" title="%2$s" class="media-preview-image">';
20
21 $quickwebp_medias_string = isset( $quickwebp_key_option ) ? get_option( $quickwebp_key_option, '' ) : '';
22 $quickwebp_medias = $quickwebp_medias_string ? explode( ',', $quickwebp_medias_string ) : array();
23 ?>
24 <div class="quickwebp-media-input-container">
25 <div id="<?php echo esc_attr( $quickwebp_key_option ?? '' ); ?>_is_empty" class="quickwebp-media-input--is-empty" style="display: <?php echo esc_attr( ! empty( $quickwebp_medias ) ? 'none' : 'block' ); ?>">
26 <?php esc_html_e( 'No image selected', 'quickwebp' ); ?>
27 </div>
28 <input
29 type="hidden"
30 name="<?php echo esc_attr( $quickwebp_key_option ?? '' ); ?>"
31 id="<?php echo esc_attr( $quickwebp_key_option ?? '' ); ?>"
32 value="<?php echo esc_attr( $quickwebp_medias_string ); ?>"
33 >
34 <div id="<?php echo esc_attr( $quickwebp_key_option ?? '' ); ?>_medias-selected" class="quickwebp-medias-selected-container">
35 <?php
36 foreach( $quickwebp_medias as $quickwebp_media_id ) {
37 $quickwebp_media_id = absint( $quickwebp_media_id );
38 $quickwebp_media = get_post( $quickwebp_media_id );
39 if( $quickwebp_media ) {
40 if( wp_attachment_is_image( $quickwebp_media_id ) ) {
41 echo wp_kses_post( sprintf( $quickwebp_image_preview_template, esc_url( wp_get_attachment_image_url( $quickwebp_media_id, 'thumbnail' ) ), esc_attr( $quickwebp_media->post_title ) ) );
42 } else {
43 echo wp_kses_post( sprintf( $quickwebp_image_preview_template, esc_url( wp_mime_type_icon( $quickwebp_media->post_mime_type ) ), esc_attr( $quickwebp_media->post_title ) ) );
44 }
45 }
46 }
47 ?>
48 </div>
49 <input type="button"
50 name="<?php echo esc_attr( $quickwebp_key_option ?? '' ); ?>_button"
51 id="<?php echo esc_attr( $quickwebp_key_option ?? '' ); ?>_button"
52 class="button button-secondary"
53 value="<?php echo esc_attr( $data['button_text'] ?? __( 'Select media', 'quickwebp' ) ); ?>"
54 >
55 <input type="button"
56 name="<?php echo esc_attr( $quickwebp_key_option ?? '' ); ?>_remove_button"
57 id="<?php echo esc_attr( $quickwebp_key_option ?? '' ); ?>_remove_button"
58 class="button button-secondary button-remove-media"
59 value="<?php echo esc_attr( $data['remove_button_text'] ?? __( 'Remove medias', 'quickwebp' ) ); ?>"
60 <?php echo empty( $quickwebp_medias ) ? 'disabled' : ''; ?>
61 >
62 </div>
63
64 <script type="text/javascript">
65 jQuery(document).ready(function($){
66 const id = <?php echo wp_json_encode( $quickwebp_key_option ?? '' ); ?>;
67 const media_template_preview = <?php echo wp_json_encode( $quickwebp_image_preview_template ); ?>;
68 jQuery( "#" + id + "_button" ).click(function(e) {
69 e.preventDefault();
70 var image = wp.media({
71 title: <?php echo wp_json_encode( $data['button_text'] ?? __( 'Select media', 'quickwebp' ) ); ?>,
72 multiple: <?php echo esc_attr( $quickwebp_is_multiple ); ?>
73 })
74
75 image.on('select', function(e){
76 const medias = image.state().get('selection').toJSON();
77 let selected_medias_preview = '';
78 let medias_ids = '';
79 medias.forEach( media => {
80 medias_ids = medias_ids === '' ? media.id : medias_ids + ',' + media.id;
81 let preview_image = '';
82 if( media.type === 'image' ) {
83 preview_image = media.sizes.thumbnail.url;
84 } else {
85 preview_image = media.icon;
86 }
87 selected_medias_preview += media_template_preview.replace( '%s', preview_image ).replace( '%s', media.title );
88 });
89 jQuery( "#" + id + "_medias-selected" ).html( selected_medias_preview );
90 jQuery( "#" + id ).val( medias_ids );
91
92 jQuery( "#" + id + "_remove_button" ).prop( 'disabled', false );
93 jQuery( '#' + id + "_is_empty" ).hide();
94 });
95
96 image.on('open', function(e){
97 const medias_ids = jQuery( "#" + id ).val();
98 if( medias_ids !== '' ) {
99 const medias = medias_ids.split(',');
100 const selection = image.state().get('selection');
101 medias.forEach( media_id => {
102 const media = wp.media.attachment( media_id );
103 media.fetch();
104 selection.add( media ? [ media ] : [] );
105 });
106 }
107 });
108
109 image.open();
110
111 });
112
113 jQuery( "#" + id + "_remove_button" ).click(function(e) {
114 e.preventDefault();
115 jQuery( "#" + id + "_medias-selected" ).html( '' );
116 jQuery( "#" + id ).val( '' );
117
118 jQuery( "#" + id + "_remove_button" ).attr( 'disabled', 'disabled' );
119 jQuery( '#' + id + "_is_empty" ).show();
120 });
121 });
122 </script>