PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.0.3
Jetpack – WP Security, Backup, Speed, & Growth v12.0.3
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 4 years ago facebook-likebox 11 years ago flickr 4 years ago gallery 4 years ago goodreads 5 years ago google-translate 4 years ago image-widget 8 years ago instagram 6 years ago migrate-to-core 3 years ago milestone 3 years ago my-community 8 years ago simple-payments 4 years ago social-icons 4 years ago social-media-icons 5 years ago top-posts 8 years ago wordpress-post-widget 3 years ago authors.php 3 years ago blog-stats.php 3 years ago class-jetpack-eu-cookie-law-widget.php 3 years ago class-jetpack-instagram-widget.php 3 years ago contact-info.php 3 years ago customizer-controls.css 9 years ago customizer-utils.js 6 years ago facebook-likebox.php 3 years ago flickr.php 3 years ago gallery.php 3 years ago goodreads.php 3 years ago google-translate.php 3 years ago gravatar-profile.css 10 years ago gravatar-profile.php 3 years ago image-widget.php 3 years ago internet-defense-league.php 3 years ago mailchimp.php 3 years ago milestone.php 5 years ago my-community.php 3 years ago rsslinks-widget.php 3 years ago simple-payments.php 3 years ago social-icons.php 3 years ago social-media-icons.php 3 years ago top-posts.php 3 years ago twitter-timeline-admin.js 6 years ago twitter-timeline.php 3 years ago upcoming-events.php 3 years ago wordpress-post-widget.php 4 years ago
image-widget.php
290 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 if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) || is_customize_preview() ) {
42 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ) );
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 $output = '<img src="' . esc_url( $instance['img_url'] ) . '" ';
83
84 if ( '' !== (string) $instance['alt_text'] ) {
85 $output .= 'alt="' . esc_attr( $instance['alt_text'] ) . '" ';
86 }
87 if ( '' !== (string) $instance['img_title'] ) {
88 $output .= 'title="' . esc_attr( $instance['img_title'] ) . '" ';
89 }
90 if ( '' !== (string) $instance['caption'] ) {
91 $output .= 'class="align' . esc_attr( $instance['align'] ) . '" ';
92 }
93 if ( '' !== (string) $instance['img_width'] ) {
94 $output .= 'width="' . esc_attr( $instance['img_width'] ) . '" ';
95 }
96 if ( '' !== (string) $instance['img_height'] ) {
97 $output .= 'height="' . esc_attr( $instance['img_height'] ) . '" ';
98 }
99 $output .= '/>';
100
101 if ( class_exists( 'Jetpack_Photon' ) && Jetpack::is_module_active( 'photon' ) ) {
102 $output = Jetpack_Photon::filter_the_content( $output );
103 }
104
105 if ( $instance['link'] ) {
106 $target = ! empty( $instance['link_target_blank'] )
107 ? 'target="_blank"'
108 : '';
109 $output = '<a ' . $target . ' href="' . esc_url( $instance['link'] ) . '">' . $output . '</a>';
110 }
111 if ( '' !== (string) $instance['caption'] ) {
112 /** This filter is documented in core/src/wp-includes/default-widgets.php */
113 $caption = apply_filters( 'widget_text', $instance['caption'] );
114 $img_width = ( ! empty( $instance['img_width'] ) ? 'style="width: ' . esc_attr( $instance['img_width'] ) . 'px"' : '' );
115 $output = '<figure ' . $img_width . ' class="wp-caption align' . esc_attr( $instance['align'] ) . '">
116 ' . $output . '
117 <figcaption class="wp-caption-text">' . $caption . '</figcaption>
118 </figure>'; // wp_kses_post caption on update.
119 }
120 echo '<div class="jetpack-image-container">' . do_shortcode( $output ) . '</div>';
121 } elseif ( current_user_can( 'edit_theme_options' ) ) {
122 echo '<p>' . wp_kses(
123 sprintf(
124 /* translators: %s link to the widget settings page. */
125 __( 'Image missing or invalid URL. Please check the Image widget URL in your <a href="%s">widget settings</a>.', 'jetpack' ),
126 admin_url( 'widgets.php' )
127 ),
128 array(
129 'a' => array(
130 'href' => array(),
131 ),
132 )
133 ) . '</p>';
134 }
135
136 echo "\n" . $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
137
138 /** This action is documented in modules/widgets/gravatar-profile.php */
139 do_action( 'jetpack_stats_extra', 'widget_view', 'image' );
140 }
141
142 /**
143 * Sanitize widget form values as they are saved.
144 *
145 * @see WP_Widget::update()
146 *
147 * @param array $new_instance Values just sent to be saved.
148 * @param array $old_instance Previously saved values from database.
149 *
150 * @return array Updated safe values to be saved.
151 */
152 public function update( $new_instance, $old_instance ) {
153 $allowed_caption_html = array(
154 'a' => array(
155 'href' => array(),
156 'title' => array(),
157 ),
158 'b' => array(),
159 'em' => array(),
160 'i' => array(),
161 'p' => array(),
162 'strong' => array(),
163 );
164
165 $instance = $old_instance;
166
167 $instance['title'] = wp_strip_all_tags( $new_instance['title'] );
168 $instance['img_url'] = esc_url( trim( $new_instance['img_url'] ) );
169 $instance['alt_text'] = wp_strip_all_tags( $new_instance['alt_text'] );
170 $instance['img_title'] = wp_strip_all_tags( $new_instance['img_title'] );
171 $instance['caption'] = wp_kses( stripslashes( $new_instance['caption'] ), $allowed_caption_html );
172 $instance['align'] = $new_instance['align'];
173 $instance['link'] = esc_url( trim( $new_instance['link'] ) );
174 $instance['link_target_blank'] = isset( $new_instance['link_target_blank'] ) ? (bool) $new_instance['link_target_blank'] : false;
175
176 $new_img_width = absint( $new_instance['img_width'] );
177 $new_img_height = absint( $new_instance['img_height'] );
178
179 if ( ! empty( $instance['img_url'] ) && 0 === $new_img_width && 0 === $new_img_height ) {
180 // Download the url to a local temp file and then process it with getimagesize so we can optimize browser layout.
181 $tmp_file = download_url( $instance['img_url'], 10 );
182 if ( ! is_wp_error( $tmp_file ) ) {
183 $size = getimagesize( $tmp_file );
184
185 $width = $size[0];
186 $instance['img_width'] = absint( $width );
187
188 $height = $size[1];
189 $instance['img_height'] = absint( $height );
190
191 wp_delete_file( $tmp_file );
192 } else {
193 $instance['img_width'] = $new_img_width;
194 $instance['img_height'] = $new_img_height;
195 }
196 } else {
197 $instance['img_width'] = $new_img_width;
198 $instance['img_height'] = $new_img_height;
199 }
200
201 return $instance;
202 }
203
204 /**
205 * Back end widget form.
206 *
207 * @see WP_Widget::form()
208 *
209 * @param array $instance Previously saved values from database.
210 */
211 public function form( $instance ) {
212 // Defaults.
213 $instance = wp_parse_args(
214 (array) $instance,
215 array(
216 'title' => '',
217 'img_url' => '',
218 'alt_text' => '',
219 'img_title' => '',
220 'caption' => '',
221 'align' => 'none',
222 'img_width' => '',
223 'img_height' => '',
224 'link' => '',
225 'link_target_blank' => false,
226 )
227 );
228
229 $title = esc_attr( $instance['title'] );
230 $img_url = esc_url( $instance['img_url'], null, 'display' );
231 $alt_text = esc_attr( $instance['alt_text'] );
232 $img_title = esc_attr( $instance['img_title'] );
233 $caption = esc_textarea( $instance['caption'] );
234 $align = esc_attr( $instance['align'] );
235 $img_width = esc_attr( $instance['img_width'] );
236 $img_height = esc_attr( $instance['img_height'] );
237 $link_target_blank = checked( $instance['link_target_blank'], true, false );
238
239 $link = esc_url( $instance['link'], null, 'display' );
240
241 echo '<p><label for="' . esc_attr( $this->get_field_id( 'title' ) ) . '">' . esc_html__( 'Widget title:', 'jetpack' ) . '
242 <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 ) . '" />
243 </label></p>
244 <p><label for="' . esc_attr( $this->get_field_id( 'img_url' ) ) . '">' . esc_html__( 'Image URL:', 'jetpack' ) . '
245 <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 ) . '" />
246 </label></p>
247 <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>
248 <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 ) . '" />
249 </label></p>
250 <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>
251 <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 ) . '" />
252 </label></p>
253 <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>
254 <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>
255 </label></p>';
256
257 $alignments = array(
258 'none' => __( 'None', 'jetpack' ),
259 'left' => __( 'Left', 'jetpack' ),
260 'center' => __( 'Center', 'jetpack' ),
261 'right' => __( 'Right', 'jetpack' ),
262 );
263 echo '<p><label for="' . esc_attr( $this->get_field_id( 'align' ) ) . '">' . esc_html__( 'Image Alignment:', 'jetpack' ) . '
264 <select id="' . esc_attr( $this->get_field_id( 'align' ) ) . '" name="' . esc_attr( $this->get_field_name( 'align' ) ) . '">';
265 foreach ( $alignments as $alignment => $alignment_name ) {
266 echo '<option value="' . esc_attr( $alignment ) . '" ';
267 if ( $alignment === $align ) {
268 echo 'selected="selected" ';
269 }
270 echo '>' . esc_html( $alignment_name ) . "</option>\n";
271 }
272 echo '</select></label></p>';
273
274 echo '<p><label for="' . esc_attr( $this->get_field_id( 'img_width' ) ) . '">' . esc_html__( 'Width in pixels:', 'jetpack' ) . '
275 <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 ) . '" />
276 </label>
277 <label for="' . esc_attr( $this->get_field_id( 'img_height' ) ) . '">' . esc_html__( 'Height in pixels:', 'jetpack' ) . '
278 <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 ) . '" />
279 </label><br />
280 <small>' . esc_html__( 'If empty, we will attempt to determine the image size.', 'jetpack' ) . '</small></p>
281 <p><label for="' . esc_attr( $this->get_field_id( 'link' ) ) . '">' . esc_html__( 'Link URL (when the image is clicked):', 'jetpack' ) . '
282 <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 ) . '" />
283 </label>
284 <label for="' . esc_attr( $this->get_field_id( 'link_target_blank' ) ) . '">
285 <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 ) . '/>
286 ' . esc_html__( 'Open link in a new window/tab', 'jetpack' ) . '
287 </label></p>';
288 }
289 } // Class Jetpack_Image_Widget
290