PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.9.2
Jetpack – WP Security, Backup, Speed, & Growth v14.9.2
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / widgets / image-widget.php
jetpack / modules / widgets Last commit date
authors 1 year ago contact-info 1 year ago eu-cookie-law 1 year ago facebook-likebox 11 years ago flickr 2 years ago gallery 1 year ago goodreads 1 year ago google-translate 1 year ago image-widget 1 year ago instagram 1 year ago internet-defense-league 2 years ago milestone 1 year ago my-community 1 year ago social-icons 1 year ago social-media-icons 1 year ago top-posts 1 year ago wordpress-post-widget 2 years ago authors.php 1 year ago blog-stats.php 1 year ago class-jetpack-eu-cookie-law-widget.php 1 year ago class-jetpack-instagram-widget.php 1 year ago contact-info.php 1 year ago customizer-controls.css 1 year ago customizer-utils.js 1 year ago facebook-likebox.php 1 year ago flickr.php 1 year ago gallery.php 1 year ago goodreads.php 1 year ago google-translate.php 1 year ago gravatar-profile.css 1 year ago gravatar-profile.php 1 year ago image-widget.php 1 year ago internet-defense-league.php 1 year ago mailchimp.php 1 year ago milestone.php 5 years ago my-community.php 1 year ago rsslinks-widget.php 3 years ago simple-payments.php 1 year ago social-icons.php 1 year ago social-media-icons.php 1 year ago top-posts.php 1 year ago twitter-timeline-admin.js 1 year ago twitter-timeline.php 1 year ago upcoming-events.php 1 year ago wordpress-post-widget.php 1 year ago
image-widget.php
288 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Module Name: Image Widget
4 * Module Description: Easily add images to your theme's sidebar.
5 * Sort Order: 20
6 * First Introduced: 1.2
7 */
8
9 // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move classes to appropriately-named class files.
10
11 add_action( 'widgets_init', 'jetpack_image_widget_init', 11 );
12 /**
13 * Register the widget for use in Appearance -> Widgets
14 */
15 function jetpack_image_widget_init() {
16 if ( class_exists( 'WP_Widget_Media_Image' ) && Jetpack_Options::get_option( 'image_widget_migration' ) ) {
17 return;
18 }
19 register_widget( 'Jetpack_Image_Widget' );
20 }
21
22 /**
23 * Jetpack_Image_Widget main class.
24 */
25 class Jetpack_Image_Widget extends WP_Widget {
26 /**
27 * Register widget with WordPress.
28 */
29 public function __construct() {
30 parent::__construct(
31 'image',
32 /** This filter is documented in modules/widgets/facebook-likebox.php */
33 apply_filters( 'jetpack_widget_name', esc_html__( 'Image', 'jetpack' ) ),
34 array(
35 'classname' => 'widget_image',
36 'description' => __( 'Display an image in your sidebar', 'jetpack' ),
37 'customize_selective_refresh' => true,
38 )
39 );
40 }
41
42 /**
43 * Loads file for front-end widget style.
44 *
45 * @uses wp_enqueue_style(), plugins_url()
46 */
47 public function enqueue_style() {
48 wp_enqueue_style( 'jetpack_image_widget', plugins_url( 'image-widget/style.css', __FILE__ ), array(), '20140808' );
49 }
50
51 /**
52 * Front-end display of widget.
53 *
54 * @see WP_Widget::widget()
55 *
56 * @param array $args Widget arguments.
57 * @param array $instance Saved values from database.
58 */
59 public function widget( $args, $instance ) {
60 echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
61
62 $instance = wp_parse_args(
63 $instance,
64 array(
65 'title' => '',
66 'img_url' => '',
67 )
68 );
69
70 /** This filter is documented in core/src/wp-includes/default-widgets.php */
71 $title = apply_filters( 'widget_title', $instance['title'] );
72 if ( $title ) {
73 echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
74 }
75
76 if ( $instance['img_url'] ) {
77
78 // Enqueue front end assets.
79 $this->enqueue_style();
80
81 $output = '<img src="' . esc_url( $instance['img_url'] ) . '" ';
82
83 if ( '' !== (string) $instance['alt_text'] ) {
84 $output .= 'alt="' . esc_attr( $instance['alt_text'] ) . '" ';
85 }
86 if ( '' !== (string) $instance['img_title'] ) {
87 $output .= 'title="' . esc_attr( $instance['img_title'] ) . '" ';
88 }
89 if ( '' !== (string) $instance['caption'] ) {
90 $output .= 'class="align' . esc_attr( $instance['align'] ) . '" ';
91 }
92 if ( '' !== (string) $instance['img_width'] ) {
93 $output .= 'width="' . esc_attr( $instance['img_width'] ) . '" ';
94 }
95 if ( '' !== (string) $instance['img_height'] ) {
96 $output .= 'height="' . esc_attr( $instance['img_height'] ) . '" ';
97 }
98 $output .= '/>';
99
100 $output = apply_filters( 'jetpack_image_cdn_content', $output );
101
102 if ( $instance['link'] ) {
103 $target = ! empty( $instance['link_target_blank'] )
104 ? 'target="_blank"'
105 : '';
106 $output = '<a ' . $target . ' href="' . esc_url( $instance['link'] ) . '">' . $output . '</a>';
107 }
108 if ( '' !== (string) $instance['caption'] ) {
109 /** This filter is documented in core/src/wp-includes/default-widgets.php */
110 $caption = apply_filters( 'widget_text', $instance['caption'] );
111 $img_width = ( ! empty( $instance['img_width'] ) ? 'style="width: ' . esc_attr( $instance['img_width'] ) . 'px"' : '' );
112 $output = '<figure ' . $img_width . ' class="wp-caption align' . esc_attr( $instance['align'] ) . '">
113 ' . $output . '
114 <figcaption class="wp-caption-text">' . $caption . '</figcaption>
115 </figure>'; // wp_kses_post caption on update.
116 }
117 echo '<div class="jetpack-image-container">' . do_shortcode( $output ) . '</div>';
118 } elseif ( current_user_can( 'edit_theme_options' ) ) {
119 echo '<p>' . wp_kses(
120 sprintf(
121 /* translators: %s link to the widget settings page. */
122 __( 'Image missing or invalid URL. Please check the Image widget URL in your <a href="%s">widget settings</a>.', 'jetpack' ),
123 admin_url( 'widgets.php' )
124 ),
125 array(
126 'a' => array(
127 'href' => array(),
128 ),
129 )
130 ) . '</p>';
131 }
132
133 echo "\n" . $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
134
135 /** This action is documented in modules/widgets/gravatar-profile.php */
136 do_action( 'jetpack_stats_extra', 'widget_view', 'image' );
137 }
138
139 /**
140 * Sanitize widget form values as they are saved.
141 *
142 * @see WP_Widget::update()
143 *
144 * @param array $new_instance Values just sent to be saved.
145 * @param array $old_instance Previously saved values from database.
146 *
147 * @return array Updated safe values to be saved.
148 */
149 public function update( $new_instance, $old_instance ) {
150 $allowed_caption_html = array(
151 'a' => array(
152 'href' => array(),
153 'title' => array(),
154 ),
155 'b' => array(),
156 'em' => array(),
157 'i' => array(),
158 'p' => array(),
159 'strong' => array(),
160 );
161
162 $instance = $old_instance;
163
164 $instance['title'] = wp_strip_all_tags( $new_instance['title'] );
165 $instance['img_url'] = esc_url( trim( $new_instance['img_url'] ) );
166 $instance['alt_text'] = wp_strip_all_tags( $new_instance['alt_text'] );
167 $instance['img_title'] = wp_strip_all_tags( $new_instance['img_title'] );
168 $instance['caption'] = wp_kses( stripslashes( $new_instance['caption'] ), $allowed_caption_html );
169 $instance['align'] = $new_instance['align'];
170 $instance['link'] = esc_url( trim( $new_instance['link'] ) );
171 $instance['link_target_blank'] = isset( $new_instance['link_target_blank'] ) ? (bool) $new_instance['link_target_blank'] : false;
172
173 $new_img_width = absint( $new_instance['img_width'] );
174 $new_img_height = absint( $new_instance['img_height'] );
175
176 if ( ! empty( $instance['img_url'] ) && 0 === $new_img_width && 0 === $new_img_height ) {
177 // Download the url to a local temp file and then process it with getimagesize so we can optimize browser layout.
178 $tmp_file = download_url( $instance['img_url'], 10 );
179 if ( ! is_wp_error( $tmp_file ) ) {
180 $size = getimagesize( $tmp_file );
181
182 $width = $size[0];
183 $instance['img_width'] = absint( $width );
184
185 $height = $size[1];
186 $instance['img_height'] = absint( $height );
187
188 wp_delete_file( $tmp_file );
189 } else {
190 $instance['img_width'] = $new_img_width;
191 $instance['img_height'] = $new_img_height;
192 }
193 } else {
194 $instance['img_width'] = $new_img_width;
195 $instance['img_height'] = $new_img_height;
196 }
197
198 return $instance;
199 }
200
201 /**
202 * Back end widget form.
203 *
204 * @see WP_Widget::form()
205 *
206 * @param array $instance Previously saved values from database.
207 * @return string|void
208 */
209 public function form( $instance ) {
210 // Defaults.
211 $instance = wp_parse_args(
212 (array) $instance,
213 array(
214 'title' => '',
215 'img_url' => '',
216 'alt_text' => '',
217 'img_title' => '',
218 'caption' => '',
219 'align' => 'none',
220 'img_width' => '',
221 'img_height' => '',
222 'link' => '',
223 'link_target_blank' => false,
224 )
225 );
226
227 $title = esc_attr( $instance['title'] );
228 $img_url = esc_url( $instance['img_url'], null, 'display' );
229 $alt_text = esc_attr( $instance['alt_text'] );
230 $img_title = esc_attr( $instance['img_title'] );
231 $caption = esc_textarea( $instance['caption'] );
232 $align = esc_attr( $instance['align'] );
233 $img_width = esc_attr( $instance['img_width'] );
234 $img_height = esc_attr( $instance['img_height'] );
235 $link_target_blank = checked( $instance['link_target_blank'], true, false );
236
237 $link = esc_url( $instance['link'], null, 'display' );
238
239 echo '<p><label for="' . esc_attr( $this->get_field_id( 'title' ) ) . '">' . esc_html__( 'Widget title:', 'jetpack' ) . '
240 <input class="widefat" id="' . esc_attr( $this->get_field_id( 'title' ) ) . '" name="' . esc_attr( $this->get_field_name( 'title' ) ) . '" type="text" value="' . esc_attr( $title ) . '" />
241 </label></p>
242 <p><label for="' . esc_attr( $this->get_field_id( 'img_url' ) ) . '">' . esc_html__( 'Image URL:', 'jetpack' ) . '
243 <input class="widefat" id="' . esc_attr( $this->get_field_id( 'img_url' ) ) . '" name="' . esc_attr( $this->get_field_name( 'img_url' ) ) . '" type="text" value="' . esc_attr( $img_url ) . '" />
244 </label></p>
245 <p><label for="' . esc_attr( $this->get_field_id( 'alt_text' ) ) . '">' . esc_html__( 'Alternate text:', 'jetpack' ) . ' <a href="https://support.wordpress.com/widgets/image-widget/#image-widget-alt-text" target="_blank">( ? )</a>
246 <input class="widefat" id="' . esc_attr( $this->get_field_id( 'alt_text' ) ) . '" name="' . esc_attr( $this->get_field_name( 'alt_text' ) ) . '" type="text" value="' . esc_attr( $alt_text ) . '" />
247 </label></p>
248 <p><label for="' . esc_attr( $this->get_field_id( 'img_title' ) ) . '">' . esc_html__( 'Image title:', 'jetpack' ) . ' <a href="https://support.wordpress.com/widgets/image-widget/#image-widget-title" target="_blank">( ? )</a>
249 <input class="widefat" id="' . esc_attr( $this->get_field_id( 'img_title' ) ) . '" name="' . esc_attr( $this->get_field_name( 'img_title' ) ) . '" type="text" value="' . esc_attr( $img_title ) . '" />
250 </label></p>
251 <p><label for="' . esc_attr( $this->get_field_id( 'caption' ) ) . '">' . esc_html__( 'Caption:', 'jetpack' ) . ' <a href="https://support.wordpress.com/widgets/image-widget/#image-widget-caption" target="_blank">( ? )</a>
252 <textarea class="widefat" id="' . esc_attr( $this->get_field_id( 'caption' ) ) . '" name="' . esc_attr( $this->get_field_name( 'caption' ) ) . '" rows="2" cols="20">' . esc_textarea( $caption ) . '</textarea>
253 </label></p>';
254
255 $alignments = array(
256 'none' => __( 'None', 'jetpack' ),
257 'left' => __( 'Left', 'jetpack' ),
258 'center' => __( 'Center', 'jetpack' ),
259 'right' => __( 'Right', 'jetpack' ),
260 );
261 echo '<p><label for="' . esc_attr( $this->get_field_id( 'align' ) ) . '">' . esc_html__( 'Image Alignment:', 'jetpack' ) . '
262 <select id="' . esc_attr( $this->get_field_id( 'align' ) ) . '" name="' . esc_attr( $this->get_field_name( 'align' ) ) . '">';
263 foreach ( $alignments as $alignment => $alignment_name ) {
264 echo '<option value="' . esc_attr( $alignment ) . '" ';
265 if ( $alignment === $align ) {
266 echo 'selected="selected" ';
267 }
268 echo '>' . esc_html( $alignment_name ) . "</option>\n";
269 }
270 echo '</select></label></p>';
271
272 echo '<p><label for="' . esc_attr( $this->get_field_id( 'img_width' ) ) . '">' . esc_html__( 'Width in pixels:', 'jetpack' ) . '
273 <input size="3" id="' . esc_attr( $this->get_field_id( 'img_width' ) ) . '" name="' . esc_attr( $this->get_field_name( 'img_width' ) ) . '" type="text" value="' . esc_attr( $img_width ) . '" />
274 </label>
275 <label for="' . esc_attr( $this->get_field_id( 'img_height' ) ) . '">' . esc_html__( 'Height in pixels:', 'jetpack' ) . '
276 <input size="3" id="' . esc_attr( $this->get_field_id( 'img_height' ) ) . '" name="' . esc_attr( $this->get_field_name( 'img_height' ) ) . '" type="text" value="' . esc_attr( $img_height ) . '" />
277 </label><br />
278 <small>' . esc_html__( 'If empty, we will attempt to determine the image size.', 'jetpack' ) . '</small></p>
279 <p><label for="' . esc_attr( $this->get_field_id( 'link' ) ) . '">' . esc_html__( 'Link URL (when the image is clicked):', 'jetpack' ) . '
280 <input class="widefat" id="' . esc_attr( $this->get_field_id( 'link' ) ) . '" name="' . esc_attr( $this->get_field_name( 'link' ) ) . '" type="text" value="' . esc_attr( $link ) . '" />
281 </label>
282 <label for="' . esc_attr( $this->get_field_id( 'link_target_blank' ) ) . '">
283 <input type="checkbox" name="' . esc_attr( $this->get_field_name( 'link_target_blank' ) ) . '" id="' . esc_attr( $this->get_field_id( 'link_target_blank' ) ) . '" value="1"' . esc_attr( $link_target_blank ) . '/>
284 ' . esc_html__( 'Open link in a new window/tab', 'jetpack' ) . '
285 </label></p>';
286 }
287 } // Class Jetpack_Image_Widget
288