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 / shortcodes / slideshow.php
jetpack / modules / shortcodes Last commit date
css 4 years ago images 12 years ago img 13 years ago js 4 years ago archiveorg-book.php 5 years ago archiveorg.php 5 years ago archives.php 5 years ago bandcamp.php 5 years ago brightcove.php 5 years ago cartodb.php 5 years ago class.filter-embedded-html-objects.php 3 years ago codepen.php 5 years ago crowdsignal.php 3 years ago dailymotion.php 3 years ago descript.php 4 years ago facebook.php 3 years ago flatio.php 5 years ago flickr.php 5 years ago getty.php 3 years ago gist.php 5 years ago googleapps.php 3 years ago googlemaps.php 5 years ago googleplus.php 5 years ago gravatar.php 3 years ago houzz.php 5 years ago inline-pdfs.php 4 years ago instagram.php 3 years ago kickstarter.php 3 years ago mailchimp.php 3 years ago medium.php 3 years ago mixcloud.php 3 years ago others.php 3 years ago pinterest.php 5 years ago presentations.php 3 years ago quiz.php 4 years ago recipe.php 3 years ago scribd.php 5 years ago sitemap.php 5 years ago slideshare.php 5 years ago slideshow.php 3 years ago smartframe.php 4 years ago soundcloud.php 3 years ago spotify.php 4 years ago ted.php 5 years ago tweet.php 5 years ago twitchtv.php 5 years ago twitter-timeline.php 5 years ago unavailable.php 3 years ago untappd-menu.php 3 years ago upcoming-events.php 3 years ago ustream.php 5 years ago videopress.php 4 years ago vimeo.php 3 years ago vine.php 5 years ago vr.php 3 years ago wordads.php 5 years ago wufoo.php 3 years ago youtube.php 3 years ago
slideshow.php
307 lines
1 <?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
3 use Automattic\Jetpack\Assets;
4 use Automattic\Jetpack\Extensions\Slideshow;
5
6 /**
7 * Slideshow shortcode.
8 * Adds a new "slideshow" gallery type when adding a gallery using the classic editor.
9 *
10 * @package automattic/jetpack
11 */
12
13 /**
14 * Slideshow shortcode usage: [gallery type="slideshow"] or the older [slideshow]
15 */
16 class Jetpack_Slideshow_Shortcode {
17 /**
18 * Number of slideshows on a page.
19 *
20 * @var int
21 */
22 public $instance_count = 0;
23
24 /**
25 * Constructor
26 */
27 public function __construct() {
28 global $shortcode_tags;
29
30 // Only if the slideshow shortcode has not already been defined.
31 if ( ! array_key_exists( 'slideshow', $shortcode_tags ) ) {
32 add_shortcode( 'slideshow', array( $this, 'shortcode_callback' ) );
33 }
34
35 // Only if the gallery shortcode has not been redefined.
36 if ( isset( $shortcode_tags['gallery'] ) && 'gallery_shortcode' === $shortcode_tags['gallery'] ) {
37 add_filter( 'post_gallery', array( $this, 'post_gallery' ), 1002, 2 );
38 add_filter( 'jetpack_gallery_types', array( $this, 'add_gallery_type' ), 10 );
39 }
40 }
41
42 /**
43 * Responds to the [gallery] shortcode, but not an actual shortcode callback.
44 *
45 * @param string $value An empty string if nothing has modified the gallery output, the output html otherwise.
46 * @param array $attr The shortcode attributes array.
47 *
48 * @return string The (un)modified $value
49 */
50 public function post_gallery( $value, $attr ) {
51 // Bail if somebody else has done something.
52 if ( ! empty( $value ) ) {
53 return $value;
54 }
55
56 // If [gallery type="slideshow"] have it behave just like [slideshow].
57 if ( ! empty( $attr['type'] ) && 'slideshow' === $attr['type'] ) {
58 return $this->shortcode_callback( $attr );
59 }
60
61 return $value;
62 }
63
64 /**
65 * Add the Slideshow type to gallery settings
66 *
67 * @see Jetpack_Tiled_Gallery::media_ui_print_templates
68 *
69 * @param array $types An array of types where the key is the value, and the value is the caption.
70 *
71 * @return array
72 */
73 public function add_gallery_type( $types = array() ) {
74 $types['slideshow'] = esc_html__( 'Slideshow', 'jetpack' );
75
76 return $types;
77 }
78
79 /**
80 * Display shortcode.
81 *
82 * @param array $attr Shortcode attributes.
83 */
84 public function shortcode_callback( $attr ) {
85 $post_id = get_the_ID();
86
87 $attr = shortcode_atts(
88 array(
89 'trans' => 'fade',
90 'order' => 'ASC',
91 'orderby' => 'menu_order ID',
92 'id' => $post_id,
93 'include' => '',
94 'exclude' => '',
95 'autostart' => true,
96 'size' => '',
97 ),
98 $attr,
99 'slideshow'
100 );
101
102 if ( 'rand' === strtolower( $attr['order'] ) ) {
103 $attr['orderby'] = 'none';
104 }
105
106 $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
107 if ( ! $attr['orderby'] ) {
108 $attr['orderby'] = 'menu_order ID';
109 }
110
111 if ( ! $attr['size'] ) {
112 $attr['size'] = 'full';
113 }
114
115 // Don't restrict to the current post if include.
116 $post_parent = ( empty( $attr['include'] ) ) ? (int) $attr['id'] : null;
117
118 $attachments = get_posts(
119 array(
120 'post_status' => 'inherit',
121 'post_type' => 'attachment',
122 'post_mime_type' => 'image',
123 'posts_per_page' => - 1,
124 'post_parent' => $post_parent,
125 'order' => $attr['order'],
126 'orderby' => $attr['orderby'],
127 'include' => $attr['include'],
128 'exclude' => $attr['exclude'],
129 'suppress_filters' => false,
130 )
131 );
132
133 if ( count( $attachments ) < 1 ) {
134 return false;
135 }
136
137 $gallery_instance = sprintf( 'gallery-%d-%d', $attr['id'], ++$this->instance_count );
138
139 $gallery = array();
140 foreach ( $attachments as $attachment ) {
141 $attachment_image_src = wp_get_attachment_image_src( $attachment->ID, $attr['size'] );
142 $attachment_image_src = $attachment_image_src[0]; // [url, width, height].
143 $attachment_image_title = get_the_title( $attachment->ID );
144 $attachment_image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true );
145 /**
146 * Filters the Slideshow slide caption.
147 *
148 * @module shortcodes
149 *
150 * @since 2.3.0
151 *
152 * @param string wptexturize( strip_tags( $attachment->post_excerpt ) ) Post excerpt.
153 * @param string $attachment ->ID Attachment ID.
154 */
155 $caption = apply_filters( 'jetpack_slideshow_slide_caption', wptexturize( wp_strip_all_tags( $attachment->post_excerpt ) ), $attachment->ID );
156
157 $gallery[] = (object) array(
158 'src' => (string) esc_url_raw( $attachment_image_src ),
159 'id' => (string) $attachment->ID,
160 'title' => (string) esc_attr( $attachment_image_title ),
161 'alt' => (string) esc_attr( $attachment_image_alt ),
162 'caption' => (string) $caption,
163 'itemprop' => 'image',
164 );
165 }
166
167 $color = Jetpack_Options::get_option( 'slideshow_background_color', 'black' );
168 $autostart = $attr['autostart'] ? $attr['autostart'] : 'true';
169 $js_attr = array(
170 'gallery' => $gallery,
171 'selector' => $gallery_instance,
172 'trans' => $attr['trans'] ? $attr['trans'] : 'fade',
173 'autostart' => $autostart,
174 'color' => $color,
175 );
176
177 // Show a link to the gallery in feeds.
178 if ( is_feed() ) {
179 return sprintf(
180 '<a href="%s">%s</a>',
181 esc_url( get_permalink( $post_id ) . '#' . $gallery_instance . '-slideshow' ),
182 esc_html__( 'Click to view slideshow.', 'jetpack' )
183 );
184 }
185
186 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
187 // Load the styles and use the rendering method from the Slideshow block.
188 Jetpack_Gutenberg::load_styles_as_required( 'slideshow' );
189
190 $amp_args = array(
191 'ids' => wp_list_pluck( $gallery, 'id' ),
192 );
193
194 if ( 'true' == $autostart ) { // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual -- attribute can be stored as boolean or string.
195 $amp_args['autoplay'] = true;
196 }
197
198 return Slideshow\render_amp( $amp_args );
199 }
200
201 return $this->slideshow_js( $js_attr );
202 }
203
204 /**
205 * Render the slideshow js
206 *
207 * Returns the necessary markup and js to fire a slideshow.
208 *
209 * @param array $attr Attributes for the slideshow.
210 *
211 * @uses $this->enqueue_scripts()
212 *
213 * @return string HTML output.
214 */
215 public function slideshow_js( $attr ) {
216 // Enqueue scripts.
217 $this->enqueue_scripts();
218
219 $output = '<p class="jetpack-slideshow-noscript robots-nocontent">' . esc_html__( 'This slideshow requires JavaScript.', 'jetpack' ) . '</p>';
220
221 /*
222 * Checking for JSON_HEX_AMP and friends here allows us to get rid of
223 * '&quot;', that can sometimes be included in the JSON input in some languages like French.
224 */
225 $gallery_attributes = _wp_specialchars(
226 wp_check_invalid_utf8(
227 wp_json_encode( $attr['gallery'], JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT )
228 ),
229 ENT_QUOTES,
230 false,
231 true
232 );
233
234 $output .= sprintf(
235 '<div id="%s" class="jetpack-slideshow-window jetpack-slideshow jetpack-slideshow-%s" data-trans="%s" data-autostart="%s" data-gallery="%s" itemscope itemtype="https://schema.org/ImageGallery"></div>',
236 esc_attr( $attr['selector'] . '-slideshow' ),
237 esc_attr( $attr['color'] ),
238 esc_attr( $attr['trans'] ),
239 esc_attr( $attr['autostart'] ),
240 $gallery_attributes
241 );
242
243 return $output;
244 }
245
246 /**
247 * Actually enqueues the scripts and styles.
248 */
249 public function enqueue_scripts() {
250
251 wp_enqueue_script( 'jquery-cycle', plugins_url( '/js/jquery.cycle.min.js', __FILE__ ), array( 'jquery' ), '20161231', true );
252 wp_enqueue_script(
253 'jetpack-slideshow',
254 Assets::get_file_url_for_environment( '_inc/build/shortcodes/js/slideshow-shortcode.min.js', 'modules/shortcodes/js/slideshow-shortcode.js' ),
255 array( 'jquery', 'jquery-cycle' ),
256 '20160119.1',
257 true
258 );
259 wp_enqueue_style(
260 'jetpack-slideshow',
261 plugins_url( '/css/slideshow-shortcode.css', __FILE__ ),
262 array(),
263 JETPACK__VERSION
264 );
265 wp_style_add_data( 'jetpack-slideshow', 'rtl', 'replace' );
266
267 wp_localize_script(
268 'jetpack-slideshow',
269 'jetpackSlideshowSettings',
270 /**
271 * Filters the slideshow JavaScript spinner.
272 *
273 * @module shortcodes
274 *
275 * @since 2.1.0
276 * @since 4.7.0 Added the `speed` option to the array of options.
277 *
278 * @param array $args
279 * - string - spinner - URL of the spinner image.
280 * - string - speed - Speed of the slideshow. Defaults to 4000.
281 * - string - label_prev - Aria label for slideshow's previous button
282 * - string - label_stop - Aria label for slideshow's pause button
283 * - string - label_next - Aria label for slideshow's next button
284 */
285 apply_filters(
286 'jetpack_js_slideshow_settings',
287 array(
288 'spinner' => plugins_url( '/img/slideshow-loader.gif', __FILE__ ),
289 'speed' => '4000',
290 'label_prev' => __( 'Previous Slide', 'jetpack' ),
291 'label_stop' => __( 'Pause Slideshow', 'jetpack' ),
292 'label_next' => __( 'Next Slide', 'jetpack' ),
293 )
294 )
295 );
296 }
297
298 /**
299 * Instantiate shortcode.
300 */
301 public static function init() {
302 new Jetpack_Slideshow_Shortcode();
303 }
304 }
305
306 Jetpack_Slideshow_Shortcode::init();
307