PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.6.4
Jetpack – WP Security, Backup, Speed, & Growth v12.6.4
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 / flickr.php
jetpack / modules / shortcodes Last commit date
css 3 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 3 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 3 years ago getty.php 3 years ago gist.php 3 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 2 years ago quiz.php 4 years ago recipe.php 2 years ago scribd.php 5 years ago sitemap.php 5 years ago slideshare.php 5 years ago slideshow.php 3 years ago smartframe.php 3 years ago soundcloud.php 3 years ago spotify.php 4 years ago ted.php 5 years ago tweet.php 2 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
flickr.php
321 lines
1 <?php
2 /**
3 * Flickr Short Code
4 * Author: kellan
5 * License: BSD/GPL/public domain (take your pick)
6 *
7 * [flickr video=www.flickr.com/photos/kalakeli/49931239842]
8 * [flickr video=49931239842]
9 * [flickr video=49931239842 w=200 h=150]
10 * [flickr video=49931239842 autoplay="yes" controls="no"]
11 * [flickr video=49931239842 autoplay="no" controls="yes" w=200 h=150]
12 *
13 * <div class="flick_video" style="max-width: 100%;width: 500px;height: 300px;"><video src="https://www.flickr.com/photos/kalakeli/49931239842/play/360p/183f75d545/" controls autoplay ></video></div>
14 *
15 * @package automattic/jetpack
16 */
17
18 /**
19 * Transform embed to shortcode on save.
20 *
21 * @param string $content Post content.
22 *
23 * @return string Shortcode or the embed content itself.
24 */
25 function flickr_embed_to_shortcode( $content ) {
26 if ( ! is_string( $content ) ) {
27 return $content;
28 }
29
30 if ( false !== strpos( $content, '<div class="flickr_video"' ) && false !== strpos( $content, '<video' ) ) {
31 return jetpack_flickr_video_to_shortcode( $content );
32 } elseif ( preg_match( '/<iframe src="(https?:)?\/\/([\da-z\-]+\.)*?((static)?flickr\.com|flic\.kr)\/[^\"]+\"/', $content ) ) {
33 return jetpack_flickr_photo_to_shortcode( $content );
34 }
35
36 return $content;
37 }
38
39 /**
40 * Transforms embed to shortcode on save when the photo param is used.
41 * If embed content can not be transformed to a valid shortcode,
42 * the embed content itself is returned.
43 *
44 * @param string $content Embed output.
45 *
46 * @return string Shortcode or the embed content.
47 */
48 function jetpack_flickr_photo_to_shortcode( $content ) {
49 preg_match( '/<iframe src=\"([^\"]+)\"(\s+height=\"([^\"]*)\")?(\s+width=\"([^\"]*)\")?/', $content, $matches );
50
51 if ( empty( $matches[1] ) ) {
52 return $content;
53 }
54
55 $src = esc_attr( str_replace( 'player/', '', $matches[1] ) );
56 $height = empty( $matches[3] ) ? '' : esc_attr( $matches[3] );
57 $width = empty( $matches[5] ) ? '' : esc_attr( $matches[5] );
58
59 /** This action is documented in modules/shortcodes/youtube.php */
60 do_action( 'jetpack_embed_to_shortcode', 'flickr_photo', $src );
61
62 return '[flickr photo="' . $src . '" w=' . $width . ' h=' . $height . ']';
63 }
64
65 /**
66 * Transforms embed to shortcode on save when the video param is used.
67 * If embed content can not be transformed to a valid shortcode,
68 * the embed content itself is returned.
69 *
70 * @param string $content Embed output.
71 *
72 * @return string Shortcode or the embed content.
73 */
74 function jetpack_flickr_video_to_shortcode( $content ) {
75 // Get video src.
76 preg_match( '/<video src=\"([^\"]+)\"/', $content, $matches );
77
78 if ( empty( $matches[1] ) ) {
79 return $content;
80 }
81
82 preg_match( '/(https?:)?\/\/([\da-z\-]+\.)*?((static)?flickr\.com|flic\.kr)\/photos\/([^\/]+)\/\d+\//', $matches[1], $matches );
83
84 $video_src = esc_attr( $matches[0] );
85
86 // Get width and height.
87
88 preg_match( '/style=\"max-width: 100%;(width:\s(\d+)px;)?(height:\s(\d+)px;)?/', $content, $matches );
89
90 $width = empty( $matches[2] ) ? '' : 'w=' . esc_attr( $matches[2] );
91
92 $height = empty( $matches[4] ) ? '' : 'h=' . esc_attr( $matches[4] );
93
94 $controls = false !== strpos( $content, 'controls' ) ? 'yes' : 'no';
95
96 $autoplay = false !== strpos( $content, 'autoplay' ) ? 'yes' : 'no';
97
98 /** This action is documented in modules/shortcodes/youtube.php */
99 do_action( 'jetpack_embed_to_shortcode', 'flickr_video', $video_src );
100
101 return '[flickr video="' . $video_src . '" ' . $width . ' ' . $height . ' controls="' . $controls . '" autoplay="' . $autoplay . '"]';
102 }
103
104 add_filter( 'pre_kses', 'flickr_embed_to_shortcode' );
105
106 /**
107 * Flickr Shortcode handler.
108 *
109 * @param array $atts Shortcode attributes.
110 *
111 * @return string Shortcode Output.
112 */
113 function flickr_shortcode_handler( $atts ) {
114 $atts = shortcode_atts(
115 array(
116 'video' => 0,
117 'photo' => 0,
118 'w' => '',
119 'h' => '',
120 'controls' => 'yes',
121 'autoplay' => '',
122 ),
123 $atts,
124 'flickr'
125 );
126
127 if ( ! empty( $atts['video'] ) ) {
128 $showing = 'video';
129 $src = $atts['video'];
130 } elseif ( ! empty( $atts['photo'] ) ) {
131 $showing = 'photo';
132 $src = $atts['photo'];
133 } else {
134 return '';
135 }
136
137 $src = str_replace( 'http://', 'https://', $src );
138
139 if ( 'video' === $showing ) {
140
141 $video_id = flick_shortcode_video_id( $src );
142
143 if ( empty( $video_id ) ) {
144 return '';
145 }
146
147 $atts = array_map( 'esc_attr', $atts );
148 return flickr_shortcode_video_markup( $atts, $video_id, $src );
149 } elseif ( 'photo' === $showing ) {
150
151 if ( ! preg_match( '~^(https?:)?//([\da-z\-]+\.)*?((static)?flickr\.com|flic\.kr)/.*~i', $src ) ) {
152 return '';
153 }
154
155 $height = empty( $atts['h'] ) ? 'auto' : esc_attr( $atts['h'] );
156
157 $src = sprintf( '%s/player/', untrailingslashit( $src ) );
158
159 $allow_full_screen = 'allowfullscreen webkitallowfullscreen mozallowfullscreen oallowfullscreen msallowfullscreen';
160
161 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
162 $allow_full_screen = str_replace( ' oallowfullscreen msallowfullscreen', '', $allow_full_screen );
163 }
164
165 return sprintf( '<iframe src="%s" height="%s" width="%s" frameborder="0" %s></iframe>', esc_url( $src ), $height, esc_attr( $atts['w'] ), $allow_full_screen );
166 }
167
168 return false;
169 }
170
171 /**
172 * Return HTML markup for a Flickr embed.
173 *
174 * @param array $atts Shortcode attributes.
175 * @param string $id Video ID.
176 * @param string $video_param video param of the shortcode.
177 *
178 * @return string Shortcode ouput for video.
179 */
180 function flickr_shortcode_video_markup( $atts, $id, $video_param ) {
181
182 $transient_name = "flickr_video_$id";
183 $video_src = get_transient( $transient_name );
184
185 if ( empty( $video_src ) ) {
186 $video_url = '';
187 if ( ! is_numeric( $video_param ) ) {
188 $video_url = $video_param;
189 } else {
190 // Get the URL of the video from the page of the video.
191 $video_page_content = wp_remote_get( "http://flickr.com/photo.gne?id=$video_param" );
192
193 // Bail if we do not get any info from Flickr.
194 if ( is_wp_error( $video_page_content ) ) {
195 return '';
196 }
197
198 // Extract the URL from the og:url meta tag.
199 preg_match( '/property=\"og:url\"\scontent=\"([^\"]+)\"/', $video_page_content['body'], $matches );
200 if ( empty( $matches[1] ) ) {
201 return '';
202 }
203 $video_url = $matches[1];
204 }
205
206 $provider = 'https://www.flickr.com/services/oembed/';
207 $oembed = _wp_oembed_get_object();
208 $data = (array) $oembed->fetch( $provider, $video_url );
209 if ( empty( $data['html'] ) ) {
210 return '';
211 }
212
213 // Get the embed url.
214 preg_match( '/src=\"([^\"]+)\"/', $data['html'], $matches );
215
216 $embed_url = $matches[1];
217
218 $embed_page = wp_remote_get( $embed_url );
219
220 // Bail if the request returns an error.
221 if ( ! is_array( $embed_page ) ) {
222 return '';
223 }
224
225 // Get the video url from embed html markup.
226
227 preg_match( '/video.+src=\"([^\"]+)\"/', $embed_page['body'], $matches );
228
229 $video_src = $matches[1];
230
231 set_transient( $transient_name, $video_src, 2592000 ); // 30 days transient.
232 }
233
234 $style = 'max-width: 100%;';
235
236 if ( ! empty( $atts['w'] ) && is_numeric( $atts['w'] ) ) {
237 $style .= sprintf( 'width: %dpx;', $atts['w'] );
238 }
239
240 if ( ! empty( $atts['h'] ) && is_numeric( $atts['h'] ) ) {
241 $style .= sprintf( 'height: %dpx;', $atts['h'] );
242 }
243
244 $controls = 'yes' === $atts['controls'] ? 'controls' : '';
245 $autoplay = 'yes' === $atts['autoplay'] ? 'autoplay' : '';
246
247 return sprintf(
248 '<div class="flick_video" style="%s"><video src="%s" %s %s /></div>',
249 esc_attr( $style ),
250 esc_attr( $video_src ),
251 $controls,
252 $autoplay
253 );
254 }
255
256 /**
257 * Extract the id of the flickr video from the video param.
258 *
259 * @param string $video_param Video parameter of the shortcode.
260 *
261 * @return string|boolean ID of the video or false in case the ID can not be extracted.
262 */
263 function flick_shortcode_video_id( $video_param ) {
264 if ( preg_match( '/^https?:\/\/(www\.)?flickr\.com\/.+/', $video_param ) || preg_match( '/^https?:\/\/flic\.kr\/.+/', $video_param ) ) {
265
266 // Extract the video id from the url.
267 preg_match( '/\d+/', $video_param, $matches );
268
269 if ( empty( $matches ) ) {
270 return false;
271 }
272
273 return $matches[0];
274
275 } elseif ( is_numeric( $video_param ) ) {
276 return $video_param;
277 }
278
279 return false;
280 }
281
282 add_shortcode( 'flickr', 'flickr_shortcode_handler' );
283
284 // Override core's Flickr support because Flickr oEmbed doesn't support web embeds.
285 wp_embed_register_handler( 'flickr', '#https?://(www\.)?flickr\.com/.*#i', 'jetpack_flickr_oembed_handler' );
286
287 /**
288 * Callback to modify output of embedded Vimeo video using Jetpack's shortcode.
289 *
290 * @since 3.9
291 *
292 * @param array $matches Regex partial matches against the URL passed.
293 * @param array $attr Attributes received in embed response.
294 * @param array $url Requested URL to be embedded.
295 *
296 * @return string Return output of Vimeo shortcode with the proper markup.
297 */
298 function jetpack_flickr_oembed_handler( $matches, $attr, $url ) {
299 /*
300 * Legacy slideshow embeds end with /show/
301 * e.g. http://www.flickr.com/photos/yarnaholic/sets/72157615194738969/show/
302 */
303 if ( '/show/' !== substr( $url, -strlen( '/show/' ) ) ) {
304 // These lookups need cached, as they don't use WP_Embed (which caches).
305 $cache_key = md5( $url . wp_json_encode( $attr ) );
306 $cache_group = 'oembed_flickr';
307
308 $html = wp_cache_get( $cache_key, $cache_group );
309
310 if ( false === $html ) {
311 $html = _wp_oembed_get_object()->get_html( $url, $attr );
312
313 wp_cache_set( $cache_key, $html, $cache_group, 60 * MINUTE_IN_SECONDS );
314 }
315
316 return $html;
317 }
318
319 return flickr_shortcode_handler( array( 'photo' => $url ) );
320 }
321