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 / flickr.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
flickr.php
316 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 // Get the video url from embed html markup.
221
222 preg_match( '/video.+src=\"([^\"]+)\"/', $embed_page['body'], $matches );
223
224 $video_src = $matches[1];
225
226 set_transient( $transient_name, $video_src, 2592000 ); // 30 days transient.
227 }
228
229 $style = 'max-width: 100%;';
230
231 if ( ! empty( $atts['w'] ) && is_numeric( $atts['w'] ) ) {
232 $style .= sprintf( 'width: %dpx;', $atts['w'] );
233 }
234
235 if ( ! empty( $atts['h'] ) && is_numeric( $atts['h'] ) ) {
236 $style .= sprintf( 'height: %dpx;', $atts['h'] );
237 }
238
239 $controls = 'yes' === $atts['controls'] ? 'controls' : '';
240 $autoplay = 'yes' === $atts['autoplay'] ? 'autoplay' : '';
241
242 return sprintf(
243 '<div class="flick_video" style="%s"><video src="%s" %s %s /></div>',
244 esc_attr( $style ),
245 esc_attr( $video_src ),
246 $controls,
247 $autoplay
248 );
249 }
250
251 /**
252 * Extract the id of the flickr video from the video param.
253 *
254 * @param string $video_param Video parameter of the shortcode.
255 *
256 * @return string|boolean ID of the video or false in case the ID can not be extracted.
257 */
258 function flick_shortcode_video_id( $video_param ) {
259 if ( preg_match( '/^https?:\/\/(www\.)?flickr\.com\/.+/', $video_param ) || preg_match( '/^https?:\/\/flic\.kr\/.+/', $video_param ) ) {
260
261 // Extract the video id from the url.
262 preg_match( '/\d+/', $video_param, $matches );
263
264 if ( empty( $matches ) ) {
265 return false;
266 }
267
268 return $matches[0];
269
270 } elseif ( is_numeric( $video_param ) ) {
271 return $video_param;
272 }
273
274 return false;
275 }
276
277 add_shortcode( 'flickr', 'flickr_shortcode_handler' );
278
279 // Override core's Flickr support because Flickr oEmbed doesn't support web embeds.
280 wp_embed_register_handler( 'flickr', '#https?://(www\.)?flickr\.com/.*#i', 'jetpack_flickr_oembed_handler' );
281
282 /**
283 * Callback to modify output of embedded Vimeo video using Jetpack's shortcode.
284 *
285 * @since 3.9
286 *
287 * @param array $matches Regex partial matches against the URL passed.
288 * @param array $attr Attributes received in embed response.
289 * @param array $url Requested URL to be embedded.
290 *
291 * @return string Return output of Vimeo shortcode with the proper markup.
292 */
293 function jetpack_flickr_oembed_handler( $matches, $attr, $url ) {
294 /*
295 * Legacy slideshow embeds end with /show/
296 * e.g. http://www.flickr.com/photos/yarnaholic/sets/72157615194738969/show/
297 */
298 if ( '/show/' !== substr( $url, -strlen( '/show/' ) ) ) {
299 // These lookups need cached, as they don't use WP_Embed (which caches).
300 $cache_key = md5( $url . wp_json_encode( $attr ) );
301 $cache_group = 'oembed_flickr';
302
303 $html = wp_cache_get( $cache_key, $cache_group );
304
305 if ( false === $html ) {
306 $html = _wp_oembed_get_object()->get_html( $url, $attr );
307
308 wp_cache_set( $cache_key, $html, $cache_group, 60 * MINUTE_IN_SECONDS );
309 }
310
311 return $html;
312 }
313
314 return flickr_shortcode_handler( array( 'photo' => $url ) );
315 }
316