PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
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 7 months ago contact-info 7 months ago eu-cookie-law 7 months ago facebook-likebox 11 years ago flickr 7 months ago gallery 7 months ago goodreads 7 months ago google-translate 1 year ago image-widget 7 months ago instagram 4 months ago internet-defense-league 1 year ago milestone 4 months ago my-community 7 months ago social-icons 4 months ago social-media-icons 7 months ago top-posts 7 months ago wordpress-post-widget 2 weeks ago authors.php 7 months ago blog-stats.php 7 months ago class-jetpack-eu-cookie-law-widget.php 1 month ago class-jetpack-instagram-widget.php 6 months ago contact-info.php 1 month ago customizer-controls.css 7 months ago customizer-utils.js 1 year ago facebook-likebox.php 1 month ago flickr.php 7 months ago gallery.php 1 month ago goodreads.php 1 month ago google-translate.php 1 month ago gravatar-profile.css 7 months ago gravatar-profile.php 1 month ago image-widget.php 7 months ago internet-defense-league.php 7 months ago mailchimp.php 7 months ago milestone.php 7 months ago my-community.php 1 month ago rsslinks-widget.php 2 weeks ago simple-payments.php 7 months ago social-icons.php 1 month ago social-media-icons.php 7 months ago top-posts.php 1 month ago twitter-timeline-admin.js 1 year ago twitter-timeline.php 2 weeks ago upcoming-events.php 7 months ago wordpress-post-widget.php 7 months ago
image-widget.php
292 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 if ( ! defined( 'ABSPATH' ) ) {
10 exit( 0 );
11 }
12
13 // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move classes to appropriately-named class files.
14
15 add_action( 'widgets_init', 'jetpack_image_widget_init', 11 );
16 /**
17 * Register the widget for use in Appearance -> Widgets
18 */
19 function jetpack_image_widget_init() {
20 if ( class_exists( 'WP_Widget_Media_Image' ) && Jetpack_Options::get_option( 'image_widget_migration' ) ) {
21 return;
22 }
23 register_widget( 'Jetpack_Image_Widget' );
24 }
25
26 /**
27 * Jetpack_Image_Widget main class.
28 */
29 class Jetpack_Image_Widget extends WP_Widget {
30 /**
31 * Register widget with WordPress.
32 */
33 public function __construct() {
34 parent::__construct(
35 'image',
36 /** This filter is documented in modules/widgets/facebook-likebox.php */
37 apply_filters( 'jetpack_widget_name', esc_html__( 'Image', 'jetpack' ) ),
38 array(
39 'classname' => 'widget_image',
40 'description' => __( 'Display an image in your sidebar', 'jetpack' ),
41 'customize_selective_refresh' => true,
42 )
43 );
44 }
45
46 /**
47 * Loads file for front-end widget style.
48 *
49 * @uses wp_enqueue_style(), plugins_url()
50 */
51 public function enqueue_style() {
52 wp_enqueue_style( 'jetpack_image_widget', plugins_url( 'image-widget/style.css', __FILE__ ), array(), '20140808' );
53 }
54
55 /**
56 * Front-end display of widget.
57 *
58 * @see WP_Widget::widget()
59 *
60 * @param array $args Widget arguments.
61 * @param array $instance Saved values from database.
62 */
63 public function widget( $args, $instance ) {
64 echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
65
66 $instance = wp_parse_args(
67 $instance,
68 array(
69 'title' => '',
70 'img_url' => '',
71 )
72 );
73
74 /** This filter is documented in core/src/wp-includes/default-widgets.php */
75 $title = apply_filters( 'widget_title', $instance['title'] );
76 if ( $title ) {
77 echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
78 }
79
80 if ( $instance['img_url'] ) {
81
82 // Enqueue front end assets.
83 $this->enqueue_style();
84
85 $output = '<img src="' . esc_url( $instance['img_url'] ) . '" ';
86
87 if ( '' !== (string) $instance['alt_text'] ) {
88 $output .= 'alt="' . esc_attr( $instance['alt_text'] ) . '" ';
89 }
90 if ( '' !== (string) $instance['img_title'] ) {
91 $output .= 'title="' . esc_attr( $instance['img_title'] ) . '" ';
92 }
93 if ( '' !== (string) $instance['caption'] ) {
94 $output .= 'class="align' . esc_attr( $instance['align'] ) . '" ';
95 }
96 if ( '' !== (string) $instance['img_width'] ) {
97 $output .= 'width="' . esc_attr( $instance['img_width'] ) . '" ';
98 }
99 if ( '' !== (string) $instance['img_height'] ) {
100 $output .= 'height="' . esc_attr( $instance['img_height'] ) . '" ';
101 }
102 $output .= '/>';
103
104 $output = apply_filters( 'jetpack_image_cdn_content', $output );
105
106 if ( $instance['link'] ) {
107 $target = ! empty( $instance['link_target_blank'] )
108 ? 'target="_blank"'
109 : '';
110 $output = '<a ' . $target . ' href="' . esc_url( $instance['link'] ) . '">' . $output . '</a>';
111 }
112 if ( '' !== (string) $instance['caption'] ) {
113 /** This filter is documented in core/src/wp-includes/default-widgets.php */
114 $caption = apply_filters( 'widget_text', $instance['caption'] );
115 $img_width = ( ! empty( $instance['img_width'] ) ? 'style="width: ' . esc_attr( $instance['img_width'] ) . 'px"' : '' );
116 $output = '<figure ' . $img_width . ' class="wp-caption align' . esc_attr( $instance['align'] ) . '">
117 ' . $output . '
118 <figcaption class="wp-caption-text">' . $caption . '</figcaption>
119 </figure>'; // wp_kses_post caption on update.
120 }
121 echo '<div class="jetpack-image-container">' . do_shortcode( $output ) . '</div>';
122 } elseif ( current_user_can( 'edit_theme_options' ) ) {
123 echo '<p>' . wp_kses(
124 sprintf(
125 /* translators: %s link to the widget settings page. */
126 __( 'Image missing or invalid URL. Please check the Image widget URL in your <a href="%s">widget settings</a>.', 'jetpack' ),
127 admin_url( 'widgets.php' )
128 ),
129 array(
130 'a' => array(
131 'href' => array(),
132 ),
133 )
134 ) . '</p>';
135 }
136
137 echo "\n" . $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
138
139 /** This action is documented in modules/widgets/gravatar-profile.php */
140 do_action( 'jetpack_stats_extra', 'widget_view', 'image' );
141 }
142
143 /**
144 * Sanitize widget form values as they are saved.
145 *
146 * @see WP_Widget::update()
147 *
148 * @param array $new_instance Values just sent to be saved.
149 * @param array $old_instance Previously saved values from database.
150 *
151 * @return array Updated safe values to be saved.
152 */
153 public function update( $new_instance, $old_instance ) {
154 $allowed_caption_html = array(
155 'a' => array(
156 'href' => array(),
157 'title' => array(),
158 ),
159 'b' => array(),
160 'em' => array(),
161 'i' => array(),
162 'p' => array(),
163 'strong' => array(),
164 );
165
166 $instance = $old_instance;
167
168 $instance['title'] = wp_strip_all_tags( $new_instance['title'] );
169 $instance['img_url'] = esc_url( trim( $new_instance['img_url'] ) );
170 $instance['alt_text'] = wp_strip_all_tags( $new_instance['alt_text'] );
171 $instance['img_title'] = wp_strip_all_tags( $new_instance['img_title'] );
172 $instance['caption'] = wp_kses( stripslashes( $new_instance['caption'] ), $allowed_caption_html );
173 $instance['align'] = $new_instance['align'];
174 $instance['link'] = esc_url( trim( $new_instance['link'] ) );
175 $instance['link_target_blank'] = isset( $new_instance['link_target_blank'] ) ? (bool) $new_instance['link_target_blank'] : false;
176
177 $new_img_width = absint( $new_instance['img_width'] );
178 $new_img_height = absint( $new_instance['img_height'] );
179
180 if ( ! empty( $instance['img_url'] ) && 0 === $new_img_width && 0 === $new_img_height ) {
181 // Download the url to a local temp file and then process it with getimagesize so we can optimize browser layout.
182 $tmp_file = download_url( $instance['img_url'], 10 );
183 if ( ! is_wp_error( $tmp_file ) ) {
184 $size = getimagesize( $tmp_file );
185
186 $width = $size[0];
187 $instance['img_width'] = absint( $width );
188
189 $height = $size[1];
190 $instance['img_height'] = absint( $height );
191
192 wp_delete_file( $tmp_file );
193 } else {
194 $instance['img_width'] = $new_img_width;
195 $instance['img_height'] = $new_img_height;
196 }
197 } else {
198 $instance['img_width'] = $new_img_width;
199 $instance['img_height'] = $new_img_height;
200 }
201
202 return $instance;
203 }
204
205 /**
206 * Back end widget form.
207 *
208 * @see WP_Widget::form()
209 *
210 * @param array $instance Previously saved values from database.
211 * @return string|void
212 */
213 public function form( $instance ) {
214 // Defaults.
215 $instance = wp_parse_args(
216 (array) $instance,
217 array(
218 'title' => '',
219 'img_url' => '',
220 'alt_text' => '',
221 'img_title' => '',
222 'caption' => '',
223 'align' => 'none',
224 'img_width' => '',
225 'img_height' => '',
226 'link' => '',
227 'link_target_blank' => false,
228 )
229 );
230
231 $title = esc_attr( $instance['title'] );
232 $img_url = esc_url( $instance['img_url'], null, 'display' );
233 $alt_text = esc_attr( $instance['alt_text'] );
234 $img_title = esc_attr( $instance['img_title'] );
235 $caption = esc_textarea( $instance['caption'] );
236 $align = esc_attr( $instance['align'] );
237 $img_width = esc_attr( $instance['img_width'] );
238 $img_height = esc_attr( $instance['img_height'] );
239 $link_target_blank = checked( $instance['link_target_blank'], true, false );
240
241 $link = esc_url( $instance['link'], null, 'display' );
242
243 echo '<p><label for="' . esc_attr( $this->get_field_id( 'title' ) ) . '">' . esc_html__( 'Widget title:', 'jetpack' ) . '
244 <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 ) . '" />
245 </label></p>
246 <p><label for="' . esc_attr( $this->get_field_id( 'img_url' ) ) . '">' . esc_html__( 'Image URL:', 'jetpack' ) . '
247 <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 ) . '" />
248 </label></p>
249 <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>
250 <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 ) . '" />
251 </label></p>
252 <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>
253 <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 ) . '" />
254 </label></p>
255 <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>
256 <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>
257 </label></p>';
258
259 $alignments = array(
260 'none' => __( 'None', 'jetpack' ),
261 'left' => __( 'Left', 'jetpack' ),
262 'center' => __( 'Center', 'jetpack' ),
263 'right' => __( 'Right', 'jetpack' ),
264 );
265 echo '<p><label for="' . esc_attr( $this->get_field_id( 'align' ) ) . '">' . esc_html__( 'Image Alignment:', 'jetpack' ) . '
266 <select id="' . esc_attr( $this->get_field_id( 'align' ) ) . '" name="' . esc_attr( $this->get_field_name( 'align' ) ) . '">';
267 foreach ( $alignments as $alignment => $alignment_name ) {
268 echo '<option value="' . esc_attr( $alignment ) . '" ';
269 if ( $alignment === $align ) {
270 echo 'selected="selected" ';
271 }
272 echo '>' . esc_html( $alignment_name ) . "</option>\n";
273 }
274 echo '</select></label></p>';
275
276 echo '<p><label for="' . esc_attr( $this->get_field_id( 'img_width' ) ) . '">' . esc_html__( 'Width in pixels:', 'jetpack' ) . '
277 <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 ) . '" />
278 </label>
279 <label for="' . esc_attr( $this->get_field_id( 'img_height' ) ) . '">' . esc_html__( 'Height in pixels:', 'jetpack' ) . '
280 <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 ) . '" />
281 </label><br />
282 <small>' . esc_html__( 'If empty, we will attempt to determine the image size.', 'jetpack' ) . '</small></p>
283 <p><label for="' . esc_attr( $this->get_field_id( 'link' ) ) . '">' . esc_html__( 'Link URL (when the image is clicked):', 'jetpack' ) . '
284 <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 ) . '" />
285 </label>
286 <label for="' . esc_attr( $this->get_field_id( 'link_target_blank' ) ) . '">
287 <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 ) . '/>
288 ' . esc_html__( 'Open link in a new window/tab', 'jetpack' ) . '
289 </label></p>';
290 }
291 } // Class Jetpack_Image_Widget
292