PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.4.2
Jetpack – WP Security, Backup, Speed, & Growth v14.4.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 8 years ago contact-info 5 years ago eu-cookie-law 1 year ago facebook-likebox 11 years ago flickr 2 years ago gallery 1 year ago goodreads 2 years ago google-translate 1 year ago image-widget 8 years ago instagram 6 years ago internet-defense-league 2 years ago milestone 1 year ago my-community 8 years ago simple-payments 1 year ago social-icons 1 year ago social-media-icons 5 years ago top-posts 8 years 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 9 years ago customizer-utils.js 1 year ago facebook-likebox.php 2 years 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 3 years ago mailchimp.php 3 years 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 3 years ago upcoming-events.php 2 years ago wordpress-post-widget.php 1 year ago
image-widget.php
287 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 */
208 public function form( $instance ) {
209 // Defaults.
210 $instance = wp_parse_args(
211 (array) $instance,
212 array(
213 'title' => '',
214 'img_url' => '',
215 'alt_text' => '',
216 'img_title' => '',
217 'caption' => '',
218 'align' => 'none',
219 'img_width' => '',
220 'img_height' => '',
221 'link' => '',
222 'link_target_blank' => false,
223 )
224 );
225
226 $title = esc_attr( $instance['title'] );
227 $img_url = esc_url( $instance['img_url'], null, 'display' );
228 $alt_text = esc_attr( $instance['alt_text'] );
229 $img_title = esc_attr( $instance['img_title'] );
230 $caption = esc_textarea( $instance['caption'] );
231 $align = esc_attr( $instance['align'] );
232 $img_width = esc_attr( $instance['img_width'] );
233 $img_height = esc_attr( $instance['img_height'] );
234 $link_target_blank = checked( $instance['link_target_blank'], true, false );
235
236 $link = esc_url( $instance['link'], null, 'display' );
237
238 echo '<p><label for="' . esc_attr( $this->get_field_id( 'title' ) ) . '">' . esc_html__( 'Widget title:', 'jetpack' ) . '
239 <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 ) . '" />
240 </label></p>
241 <p><label for="' . esc_attr( $this->get_field_id( 'img_url' ) ) . '">' . esc_html__( 'Image URL:', 'jetpack' ) . '
242 <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 ) . '" />
243 </label></p>
244 <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>
245 <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 ) . '" />
246 </label></p>
247 <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>
248 <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 ) . '" />
249 </label></p>
250 <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>
251 <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>
252 </label></p>';
253
254 $alignments = array(
255 'none' => __( 'None', 'jetpack' ),
256 'left' => __( 'Left', 'jetpack' ),
257 'center' => __( 'Center', 'jetpack' ),
258 'right' => __( 'Right', 'jetpack' ),
259 );
260 echo '<p><label for="' . esc_attr( $this->get_field_id( 'align' ) ) . '">' . esc_html__( 'Image Alignment:', 'jetpack' ) . '
261 <select id="' . esc_attr( $this->get_field_id( 'align' ) ) . '" name="' . esc_attr( $this->get_field_name( 'align' ) ) . '">';
262 foreach ( $alignments as $alignment => $alignment_name ) {
263 echo '<option value="' . esc_attr( $alignment ) . '" ';
264 if ( $alignment === $align ) {
265 echo 'selected="selected" ';
266 }
267 echo '>' . esc_html( $alignment_name ) . "</option>\n";
268 }
269 echo '</select></label></p>';
270
271 echo '<p><label for="' . esc_attr( $this->get_field_id( 'img_width' ) ) . '">' . esc_html__( 'Width in pixels:', 'jetpack' ) . '
272 <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 ) . '" />
273 </label>
274 <label for="' . esc_attr( $this->get_field_id( 'img_height' ) ) . '">' . esc_html__( 'Height in pixels:', 'jetpack' ) . '
275 <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 ) . '" />
276 </label><br />
277 <small>' . esc_html__( 'If empty, we will attempt to determine the image size.', 'jetpack' ) . '</small></p>
278 <p><label for="' . esc_attr( $this->get_field_id( 'link' ) ) . '">' . esc_html__( 'Link URL (when the image is clicked):', 'jetpack' ) . '
279 <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 ) . '" />
280 </label>
281 <label for="' . esc_attr( $this->get_field_id( 'link_target_blank' ) ) . '">
282 <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 ) . '/>
283 ' . esc_html__( 'Open link in a new window/tab', 'jetpack' ) . '
284 </label></p>';
285 }
286 } // Class Jetpack_Image_Widget
287