PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 15.9-a.7
Jetpack – WP Security, Backup, Speed, & Growth v15.9-a.7
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 / gallery.php
jetpack / modules / widgets Last commit date
authors 6 months ago contact-info 6 months ago eu-cookie-law 6 months ago facebook-likebox 10 years ago flickr 6 months ago gallery 6 months ago goodreads 6 months ago google-translate 1 year ago image-widget 6 months ago instagram 3 months ago internet-defense-league 1 year ago milestone 3 months ago my-community 6 months ago social-icons 3 months ago social-media-icons 6 months ago top-posts 6 months ago wordpress-post-widget 2 days ago authors.php 6 months ago blog-stats.php 6 months ago class-jetpack-eu-cookie-law-widget.php 1 week ago class-jetpack-instagram-widget.php 5 months ago contact-info.php 1 week ago customizer-controls.css 6 months ago customizer-utils.js 1 year ago facebook-likebox.php 1 week ago flickr.php 6 months ago gallery.php 1 week ago goodreads.php 1 week ago google-translate.php 1 week ago gravatar-profile.css 6 months ago gravatar-profile.php 1 week ago image-widget.php 6 months ago internet-defense-league.php 6 months ago mailchimp.php 6 months ago milestone.php 6 months ago my-community.php 1 week ago rsslinks-widget.php 1 week ago simple-payments.php 6 months ago social-icons.php 2 weeks ago social-media-icons.php 6 months ago top-posts.php 1 week ago twitter-timeline-admin.js 1 year ago twitter-timeline.php 1 week ago upcoming-events.php 6 months ago wordpress-post-widget.php 6 months ago
gallery.php
527 lines
1 <?php // phpcs:ignore eWordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Module Name: Gallery widget
4 *
5 * @package automattic/jetpack
6 */
7
8 // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move classes to appropriately-named class files.
9
10 use Automattic\Jetpack\Assets;
11 use Automattic\Jetpack\Image_CDN\Image_CDN_Core;
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit( 0 );
15 }
16
17 /**
18 * Jetpack_Gallery_Widget main class.
19 */
20 class Jetpack_Gallery_Widget extends WP_Widget {
21 const THUMB_SIZE = 45;
22 const DEFAULT_WIDTH = 265;
23
24 /**
25 * The width of the gallery widget.
26 * May be customized by the 'gallery_widget_content_width' filter.
27 *
28 * @var int
29 */
30 protected $instance_width;
31
32 /**
33 * Jetpack_Gallery_Widget constructor.
34 */
35 public function __construct() {
36 $widget_ops = array(
37 'classname' => 'widget-gallery',
38 'description' => __( 'Display a photo gallery or slideshow', 'jetpack' ),
39 'customize_selective_refresh' => true,
40 );
41
42 add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
43
44 parent::__construct(
45 'gallery',
46 /** This filter is documented in modules/widgets/facebook-likebox.php */
47 apply_filters( 'jetpack_widget_name', __( 'Gallery', 'jetpack' ) ),
48 $widget_ops
49 );
50
51 if ( is_customize_preview() ) {
52 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_frontend_scripts' ) );
53
54 if ( class_exists( 'Jetpack_Tiled_Gallery' ) ) {
55 add_action( 'wp_enqueue_scripts', array( 'Jetpack_Tiled_Gallery', 'default_scripts_and_styles' ) );
56 }
57
58 if ( class_exists( 'Jetpack_Slideshow_Shortcode' ) ) {
59 $slideshow = new Jetpack_Slideshow_Shortcode();
60 add_action( 'wp_enqueue_scripts', array( $slideshow, 'enqueue_scripts' ) );
61 }
62
63 if ( class_exists( 'Jetpack_Carousel' ) ) {
64 $carousel = new Jetpack_Carousel();
65 add_action( 'wp_enqueue_scripts', array( $carousel, 'enqueue_assets' ) );
66 }
67 }
68 }
69
70 /**
71 * Display the widget.
72 *
73 * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.
74 * @param array $instance The settings for the particular instance of the widget.
75 */
76 public function widget( $args, $instance ) {
77 $instance = wp_parse_args( (array) $instance, $this->defaults() );
78
79 $this->enqueue_frontend_scripts();
80
81 $before_widget = $args['before_widget'] ?? '';
82 $before_title = $args['before_title'] ?? '';
83 $after_title = $args['after_title'] ?? '';
84 $after_widget = $args['after_widget'] ?? '';
85
86 $instance['attachments'] = $this->get_attachments( $instance );
87
88 $classes = array();
89
90 $classes[] = 'widget-gallery-' . $instance['type'];
91
92 /*
93 * Due to a bug in the carousel plugin,
94 * carousels will be triggered for all tiled galleries that exist on a page with other tiled galleries,
95 * regardless of whether or not the widget was set to Carousel mode.
96 * The onClick selector is simply too broad, since it was not written with widgets in mind.
97 * This special class prevents that behavior, via an override handler in gallery.js.
98 */
99 if ( 'carousel' !== $instance['link'] && 'slideshow' !== $instance['type'] ) {
100 $classes[] = 'no-carousel';
101 } else {
102 $classes[] = 'carousel';
103 }
104
105 $classes = implode( ' ', $classes );
106
107 if ( 'carousel' === $instance['link'] ) {
108 require_once plugin_dir_path( realpath( __DIR__ . '/../carousel/jetpack-carousel.php' ) ) . 'jetpack-carousel.php';
109
110 if ( class_exists( 'Jetpack_Carousel' ) ) {
111 // Create new carousel so we can use the enqueue_assets() method. Not ideal, but there is a decent amount
112 // of logic in that method that shouldn't be duplicated.
113 $carousel = new Jetpack_Carousel();
114
115 $carousel->enqueue_assets();
116 }
117 }
118
119 echo $before_widget . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
120
121 /** This filter is documented in core/src/wp-includes/default-widgets.php */
122 $title = apply_filters( 'widget_title', $instance['title'] );
123
124 if ( $title ) {
125 echo $before_title . $title . $after_title . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
126 }
127
128 echo '<div class="' . esc_attr( $classes ) . '">' . "\n";
129
130 $method = $instance['type'] . '_widget';
131
132 /**
133 * Allow the width of a gallery to be altered by themes or other code.
134 *
135 * @module widgets
136 *
137 * @since 2.5.0
138 *
139 * @param int self::DEFAULT_WIDTH Default gallery width. Default is 265.
140 * @param string $args Display arguments including before_title, after_title, before_widget, and after_widget.
141 * @param array $instance The settings for the particular instance of the widget.
142 */
143 $this->instance_width = apply_filters( 'gallery_widget_content_width', self::DEFAULT_WIDTH, $args, $instance );
144
145 // Register a filter to modify the tiled_gallery_content_width, so Jetpack_Tiled_Gallery
146 // can appropriately size the tiles.
147 add_filter( 'tiled_gallery_content_width', array( $this, 'tiled_gallery_content_width' ) );
148
149 if ( method_exists( $this, $method ) ) {
150 echo $this->$method( $args, $instance ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
151 }
152
153 // Remove the stored $instance_width, as it is no longer needed.
154 $this->instance_width = null;
155
156 // Remove the filter, so any Jetpack_Tiled_Gallery in a post is not affected.
157 remove_filter( 'tiled_gallery_content_width', array( $this, 'tiled_gallery_content_width' ) );
158
159 echo "\n" . '</div>'; // .widget-gallery-$type
160
161 echo "\n" . $after_widget; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
162
163 /** This action is documented in modules/widgets/gravatar-profile.php */
164 do_action( 'jetpack_stats_extra', 'widget_view', 'gallery' );
165 }
166
167 /**
168 * Fetch the images attached to the gallery Widget
169 *
170 * @param array $instance The Widget instance for which you'd like attachments.
171 * @return array Array of attachment objects for the Widget in $instance
172 */
173 public function get_attachments( $instance ) {
174 $ids = explode( ',', $instance['ids'] );
175
176 if ( isset( $instance['random'] ) && 'on' === $instance['random'] ) {
177 shuffle( $ids );
178 }
179
180 $attachments_query = new WP_Query(
181 array(
182 'post__in' => $ids,
183 'post_status' => 'inherit',
184 'post_type' => 'attachment',
185 'post_mime_type' => 'image',
186 'posts_per_page' => -1,
187 'orderby' => 'post__in',
188 )
189 );
190
191 $attachments = $attachments_query->get_posts();
192
193 wp_reset_postdata();
194
195 return $attachments;
196 }
197
198 /**
199 * Generate HTML for a rectangular, tiled Widget
200 *
201 * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.
202 * @param array $instance The Widget instance to generate HTML for.
203 * @return string String of HTML representing a rectangular gallery
204 */
205 public function rectangular_widget( $args, $instance ) {
206 if ( ! class_exists( 'Jetpack_Tiled_Gallery' )
207 && ! class_exists( 'Jetpack_Tiled_Gallery_Layout_Rectangular' ) ) {
208 return;
209 }
210
211 Jetpack_Tiled_Gallery::default_scripts_and_styles();
212
213 $layout = new Jetpack_Tiled_Gallery_Layout_Rectangular( $instance['attachments'], $instance['link'], false, 3 );
214 return $layout->HTML();
215 }
216
217 /**
218 * Generate HTML for a square (grid style) Widget
219 *
220 * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.
221 * @param array $instance The Widget instance to generate HTML for.
222 * @return string String of HTML representing a square gallery
223 */
224 public function square_widget( $args, $instance ) {
225 if ( ! class_exists( 'Jetpack_Tiled_Gallery' )
226 && ! class_exists( 'Jetpack_Tiled_Gallery_Layout_Square' ) ) {
227 return;
228 }
229
230 Jetpack_Tiled_Gallery::default_scripts_and_styles();
231
232 $layout = new Jetpack_Tiled_Gallery_Layout_Square( $instance['attachments'], $instance['link'], false, 3 );
233 return $layout->HTML();
234 }
235
236 /**
237 * Generate HTML for a circular (grid style) Widget
238 *
239 * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.
240 * @param array $instance The Widget instance to generate HTML for.
241 * @return string String of HTML representing a circular gallery
242 */
243 public function circle_widget( $args, $instance ) {
244 if ( ! class_exists( 'Jetpack_Tiled_Gallery' )
245 && ! class_exists( 'Jetpack_Tiled_Gallery_Layout_Circle' ) ) {
246 return;
247 }
248
249 Jetpack_Tiled_Gallery::default_scripts_and_styles();
250
251 $layout = new Jetpack_Tiled_Gallery_Layout_Circle( $instance['attachments'], $instance['link'], false, 3 );
252 return $layout->HTML();
253 }
254
255 /**
256 * Generate HTML for a slideshow Widget
257 *
258 * @todo Is slideshow_widget() still used?
259 *
260 * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.
261 * @param array $instance The Widget instance to generate HTML for.
262 * @return string String of HTML representing a slideshow gallery
263 */
264 public function slideshow_widget( $args, $instance ) {
265 global $content_width;
266
267 require_once plugin_dir_path( realpath( __DIR__ . '/../shortcodes/slideshow.php' ) ) . 'slideshow.php';
268
269 if ( ! class_exists( 'Jetpack_Slideshow_Shortcode' ) ) {
270 return;
271 }
272
273 if ( count( $instance['attachments'] ) < 1 ) {
274 return;
275 }
276
277 $slideshow = new Jetpack_Slideshow_Shortcode();
278
279 $slideshow->enqueue_scripts();
280
281 $gallery_instance = 'widget-' . $args['widget_id'];
282
283 $gallery = array();
284
285 foreach ( $instance['attachments'] as $attachment ) {
286 $attachment_image_src = wp_get_attachment_image_src( $attachment->ID, 'full' );
287 $attachment_image_src = Image_CDN_Core::cdn_url( $attachment_image_src[0], array( 'w' => $this->instance_width ) ); /** [url, width, height] */
288
289 $caption = wptexturize( wp_strip_all_tags( $attachment->post_excerpt ) );
290
291 $gallery[] = (object) array(
292 'src' => (string) esc_url_raw( $attachment_image_src ),
293 'id' => (string) $attachment->ID,
294 'caption' => (string) $caption,
295 );
296 }
297
298 $max_width = (int) get_option( 'large_size_w' );
299 $max_height = 175;
300
301 if ( (int) $content_width > 0 ) {
302 $max_width = min( (int) $content_width, $max_width );
303 }
304
305 $color = Jetpack_Options::get_option( 'slideshow_background_color', 'black' );
306 $js_attr = array(
307 'gallery' => $gallery,
308 'selector' => $gallery_instance,
309 'width' => $max_width,
310 'height' => $max_height,
311 'trans' => 'fade',
312 'color' => $color,
313 'autostart' => true,
314 );
315
316 $html = $slideshow->slideshow_js( $js_attr );
317
318 return $html;
319 }
320
321 /**
322 * Used to adjust the content width of Jetpack_Tiled_Gallery's in sidebars
323 *
324 * $this->instance_width is filtered in widget() and this filter is added then removed in widget()
325 *
326 * @return int The filtered width
327 */
328 public function tiled_gallery_content_width() {
329 return $this->instance_width;
330 }
331
332 /**
333 * Outputs the widget settings form.
334 *
335 * @html-template-var array $instance
336 * @html-template-var array<string,array<string|int,string|int>> $allowed_values
337 *
338 * @param array $instance Current settings.
339 * @return string|void
340 */
341 public function form( $instance ) {
342 $defaults = $this->defaults();
343 $allowed_values = $this->allowed_values(); // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable -- Used in included form template.
344
345 $instance = wp_parse_args( (array) $instance, $defaults );
346
347 include __DIR__ . '/gallery/templates/form.php';
348 }
349
350 /**
351 * Save the widget options.
352 *
353 * @param array $new_instance The new instance options.
354 * @param array $old_instance The old instance options.
355 * @return array The saved options.
356 */
357 public function update( $new_instance, $old_instance ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
358 $instance = $this->sanitize( $new_instance );
359
360 return $instance;
361 }
362
363 /**
364 * Sanitize the $instance's values to the set of allowed values. If a value is not acceptable,
365 * it is set to its default.
366 *
367 * Helps keep things nice and secure by listing only allowed values.
368 *
369 * @param array $instance The Widget instance to sanitize values for.
370 * @return array $instance The Widget instance with values sanitized
371 */
372 public function sanitize( $instance ) {
373 $allowed_values = $this->allowed_values();
374 $defaults = $this->defaults();
375
376 foreach ( $instance as $key => $value ) {
377 if ( ! is_scalar( $value ) ) {
378 // $instance may hold an Array value type for the Jetpack widget visibility feature.
379 continue;
380 }
381
382 $value = trim( $value );
383
384 if ( isset( $allowed_values[ $key ] ) && $allowed_values[ $key ] && ! array_key_exists( $value, $allowed_values[ $key ] ) ) {
385 $instance[ $key ] = $defaults[ $key ];
386 } else {
387 $instance[ $key ] = sanitize_text_field( $value );
388 }
389 }
390
391 return $instance;
392 }
393
394 /**
395 * Return a multi-dimensional array of allowed values (and their labels) for all widget form
396 * elements
397 *
398 * To allow all values on an input, omit it from the returned array
399 *
400 * @return array Array of allowed values for each option
401 */
402 public function allowed_values() {
403 $max_columns = 5;
404
405 // Create an associative array of allowed column values. This just automates the generation of
406 // column <option>s, from 1 to $max_columns.
407 $allowed_columns = array_combine( range( 1, $max_columns ), range( 1, $max_columns ) );
408
409 return array(
410 'type' => array(
411 'rectangular' => __( 'Tiles', 'jetpack' ),
412 'square' => __( 'Square Tiles', 'jetpack' ),
413 'circle' => __( 'Circles', 'jetpack' ),
414 'slideshow' => __( 'Slideshow', 'jetpack' ),
415 ),
416 'columns' => $allowed_columns,
417 'link' => array(
418 'carousel' => __( 'Carousel', 'jetpack' ),
419 'post' => __( 'Attachment Page', 'jetpack' ),
420 'file' => __( 'Media File', 'jetpack' ),
421 ),
422 );
423 }
424
425 /**
426 * Return an associative array of default values
427 *
428 * These values are used in new widgets as well as when sanitizing input. If a given value is not allowed,
429 * as defined in allowed_values(), that input is set to the default value defined here.
430 *
431 * @return array Array of default values for the Widget's options
432 */
433 public function defaults() {
434 return array(
435 'title' => '',
436 'type' => 'rectangular',
437 'ids' => '',
438 'columns' => 3,
439 'link' => 'carousel',
440 );
441 }
442
443 /**
444 * Enqueue frontend scripts.
445 */
446 public function enqueue_frontend_scripts() {
447 wp_register_script(
448 'gallery-widget',
449 Assets::get_file_url_for_environment(
450 '_inc/build/widgets/gallery/js/gallery.min.js',
451 'modules/widgets/gallery/js/gallery.js'
452 ),
453 array( 'jquery' ),
454 JETPACK__VERSION,
455 false
456 );
457
458 wp_enqueue_script( 'gallery-widget' );
459 }
460
461 /**
462 * Enqueue admin scripts and styles.
463 */
464 public function enqueue_admin_scripts() {
465 global $pagenow;
466
467 if ( 'widgets.php' === $pagenow || 'customize.php' === $pagenow ) {
468 wp_enqueue_media();
469
470 wp_enqueue_script(
471 'gallery-widget-admin',
472 Assets::get_file_url_for_environment(
473 '_inc/build/widgets/gallery/js/admin.min.js',
474 'modules/widgets/gallery/js/admin.js'
475 ),
476 array(
477 'jquery',
478 'media-models',
479 'media-views',
480 ),
481 '20150501',
482 false
483 );
484
485 $js_settings = array(
486 'thumbSize' => self::THUMB_SIZE,
487 );
488
489 wp_localize_script( 'gallery-widget-admin', '_wpGalleryWidgetAdminSettings', $js_settings );
490 wp_enqueue_style(
491 'gallery-widget-admin',
492 plugins_url( '/gallery/css/admin.css', __FILE__ ),
493 array(),
494 JETPACK__VERSION
495 );
496 wp_style_add_data( 'gallery-widget-admin', 'rtl', 'replace' );
497 }
498 }
499 }
500
501 add_action( 'widgets_init', 'jetpack_gallery_widget_init' );
502
503 /**
504 * Jetpack Gallery widget init; the widget is conditionally registered.
505 */
506 function jetpack_gallery_widget_init() {
507 /**
508 * Allow the Gallery Widget to be enabled even when Core supports the Media Gallery Widget
509 *
510 * @module widgets
511 *
512 * @since 5.5.0
513 *
514 * @param bool false Whether to force-enable the gallery widget
515 */
516 if (
517 ! apply_filters( 'jetpack_force_enable_gallery_widget', false )
518 && class_exists( 'WP_Widget_Media_Gallery' )
519 && Jetpack_Options::get_option( 'gallery_widget_migration' )
520 ) {
521 return;
522 }
523 if ( ! method_exists( 'Jetpack', 'is_module_active' ) || Jetpack::is_module_active( 'tiled-gallery' ) ) {
524 register_widget( 'Jetpack_Gallery_Widget' );
525 }
526 }
527