PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.8.1
Jetpack – WP Security, Backup, Speed, & Growth v14.8.1
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 1 year ago images 2 years ago img 2 years ago js 1 year 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 2 years ago codepen.php 5 years ago crowdsignal.php 1 year ago dailymotion.php 3 years ago descript.php 4 years ago facebook.php 1 year ago flatio.php 5 years ago flickr.php 1 year ago getty.php 2 years ago gist.php 1 year ago googleapps.php 2 years ago googlemaps.php 2 years ago googleplus.php 5 years ago gravatar.php 2 years ago houzz.php 5 years ago inline-pdfs.php 4 years ago instagram.php 1 year ago kickstarter.php 3 years ago mailchimp.php 3 years ago medium.php 3 years ago mixcloud.php 2 years ago others.php 1 year ago pinterest.php 2 years ago presentations.php 2 years ago quiz.php 4 years ago recipe.php 1 year ago scribd.php 5 years ago sitemap.php 5 years ago slideshare.php 5 years ago slideshow.php 1 year ago smartframe.php 3 years ago soundcloud.php 3 years ago spotify.php 2 years ago ted.php 5 years ago tweet.php 2 years ago twitchtv.php 5 years ago twitter-timeline.php 5 years ago twitter.php 1 year ago unavailable.php 3 years ago untappd-menu.php 3 years ago upcoming-events.php 1 year ago ustream.php 5 years ago videopress.php 4 years ago vimeo.php 2 years ago vine.php 5 years ago vr.php 2 years ago wufoo.php 3 years ago youtube.php 1 year ago
flickr.php
323 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 ( str_contains( $content, '<div class="flickr_video"' ) && str_contains( $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 = str_contains( $content, 'controls' ) ? 'yes' : 'no';
95
96 $autoplay = str_contains( $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( "https://flickr.com/photo.gne?id=$video_param" );
192 // Bail if we do not get any info from Flickr.
193 if ( is_wp_error( $video_page_content ) ) {
194 return '';
195 }
196
197 // Extract the URL from the og:url meta tag.
198 preg_match( '/property=\"og:url\"\scontent=\"([^\"]+)\"/', $video_page_content['body'], $matches );
199 if ( empty( $matches[1] ) ) {
200 return '';
201 }
202 $video_url = $matches[1];
203 }
204
205 $provider = 'https://www.flickr.com/services/oembed/';
206 $oembed = _wp_oembed_get_object();
207 $data = (array) $oembed->fetch( $provider, $video_url );
208 if ( empty( $data['html'] ) ) {
209 return '';
210 }
211
212 // Get the embed url.
213 preg_match( '/src=\"([^\"]+)\"/', $data['html'], $matches );
214
215 if ( empty( $matches[1] ) ) {
216 return '';
217 }
218 $embed_url = $matches[1];
219
220 $embed_page = wp_remote_get( $embed_url );
221
222 // Bail if the request returns an error.
223 if ( ! is_array( $embed_page ) ) {
224 return '';
225 }
226
227 // Get the video url from embed html markup.
228
229 preg_match( '/video.+src=\"([^\"]+)\"/', $embed_page['body'], $matches );
230 if ( ! empty( $matches[1] ) ) {
231 $video_src = $matches[1];
232 set_transient( $transient_name, $video_src, 2592000 ); // 30 days transient.
233 }
234 }
235
236 $style = 'max-width: 100%;';
237
238 if ( ! empty( $atts['w'] ) && is_numeric( $atts['w'] ) ) {
239 $style .= sprintf( 'width: %dpx;', $atts['w'] );
240 }
241
242 if ( ! empty( $atts['h'] ) && is_numeric( $atts['h'] ) ) {
243 $style .= sprintf( 'height: %dpx;', $atts['h'] );
244 }
245
246 $controls = 'yes' === $atts['controls'] ? 'controls' : '';
247 $autoplay = 'yes' === $atts['autoplay'] ? 'autoplay' : '';
248
249 return sprintf(
250 '<div class="flick_video" style="%s"><video src="%s" %s %s /></div>',
251 esc_attr( $style ),
252 esc_attr( $video_src ),
253 $controls,
254 $autoplay
255 );
256 }
257
258 /**
259 * Extract the id of the flickr video from the video param.
260 *
261 * @param string $video_param Video parameter of the shortcode.
262 *
263 * @return string|boolean ID of the video or false in case the ID can not be extracted.
264 */
265 function flick_shortcode_video_id( $video_param ) {
266 if ( preg_match( '/^https?:\/\/(www\.)?flickr\.com\/.+/', $video_param ) || preg_match( '/^https?:\/\/flic\.kr\/.+/', $video_param ) ) {
267
268 // Extract the video id from the url.
269 preg_match( '/\d+/', $video_param, $matches );
270
271 if ( empty( $matches ) ) {
272 return false;
273 }
274
275 return $matches[0];
276
277 } elseif ( is_numeric( $video_param ) ) {
278 return $video_param;
279 }
280
281 return false;
282 }
283
284 add_shortcode( 'flickr', 'flickr_shortcode_handler' );
285
286 // Override core's Flickr support because Flickr oEmbed doesn't support web embeds.
287 wp_embed_register_handler( 'flickr', '#https?://(www\.)?flickr\.com/.*#i', 'jetpack_flickr_oembed_handler' );
288
289 /**
290 * Callback to modify output of embedded Vimeo video using Jetpack's shortcode.
291 *
292 * @since 3.9
293 *
294 * @param array $matches Regex partial matches against the URL passed.
295 * @param array $attr Attributes received in embed response.
296 * @param array $url Requested URL to be embedded.
297 *
298 * @return string Return output of Vimeo shortcode with the proper markup.
299 */
300 function jetpack_flickr_oembed_handler( $matches, $attr, $url ) {
301 /*
302 * Legacy slideshow embeds end with /show/
303 * e.g. https://www.flickr.com/photos/yarnaholic/sets/72157615194738969/show/
304 */
305 if ( '/show/' !== substr( $url, -strlen( '/show/' ) ) ) {
306 // These lookups need cached, as they don't use WP_Embed (which caches).
307 $cache_key = md5( $url . wp_json_encode( $attr ) );
308 $cache_group = 'oembed_flickr';
309
310 $html = wp_cache_get( $cache_key, $cache_group );
311
312 if ( false === $html ) {
313 $html = _wp_oembed_get_object()->get_html( $url, $attr );
314
315 wp_cache_set( $cache_key, $html, $cache_group, 60 * MINUTE_IN_SECONDS );
316 }
317
318 return $html;
319 }
320
321 return flickr_shortcode_handler( array( 'photo' => $url ) );
322 }
323