PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
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 / archiveorg.php
jetpack / modules / shortcodes Last commit date
css 1 month ago images 1 year ago img 2 months ago js 7 months ago archiveorg-book.php 7 months ago archiveorg.php 1 month ago archives.php 1 week ago bandcamp.php 7 months ago brightcove.php 6 months ago cartodb.php 7 months ago class.filter-embedded-html-objects.php 7 months ago codepen.php 7 months ago crowdsignal.php 6 months ago dailymotion.php 7 months ago descript.php 7 months ago facebook.php 7 months ago flatio.php 7 months ago flickr.php 7 months ago getty.php 7 months ago gist.php 7 months ago googleapps.php 7 months ago googlemaps.php 1 month ago googleplus.php 7 months ago gravatar.php 7 months ago houzz.php 7 months ago inline-pdfs.php 7 months ago instagram.php 7 months ago kickstarter.php 7 months ago mailchimp.php 1 month ago medium.php 7 months ago mixcloud.php 7 months ago others.php 7 months ago pinterest.php 7 months ago presentations.php 7 months ago quiz.php 7 months ago recipe.php 2 weeks ago scribd.php 7 months ago shortcode-utils.php 7 months ago sitemap.php 7 months ago slideshare.php 7 months ago slideshow.php 2 weeks ago smartframe.php 7 months ago soundcloud.php 1 month ago spotify.php 7 months ago ted.php 7 months ago tweet.php 7 months ago twitchtv.php 2 weeks ago twitter-timeline.php 7 months ago twitter.php 7 months ago unavailable.php 7 months ago untappd-menu.php 7 months ago upcoming-events.php 7 months ago ustream.php 7 months ago videopress.php 7 months ago vimeo.php 1 month ago vine.php 7 months ago vr.php 1 month ago wufoo.php 7 months ago youtube.php 4 months ago
archiveorg.php
194 lines
1 <?php
2 /**
3 * Archive.org book shortcode.
4 *
5 * Usage:
6 * [archiveorg Experime1940]
7 * [archiveorg http://archive.org/details/Experime1940 poster=http://archive.org/images/map.png]
8 * [archiveorg id=Experime1940 width=640 height=480 autoplay=1]
9
10 * <iframe src="http://archive.org/embed/Experime1940&autoplay=1&poster=http://archive.org/images/map.png" width="640" height="480" frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen></iframe>
11 *
12 * @package automattic/jetpack
13 */
14
15 if ( ! defined( 'ABSPATH' ) ) {
16 exit( 0 );
17 }
18
19 /**
20 * Get ID of requested archive.org embed.
21 *
22 * @since 4.5.0
23 *
24 * @param array $atts Shortcode attributes.
25 *
26 * @return int|string
27 */
28 function jetpack_shortcode_get_archiveorg_id( $atts ) {
29 if ( isset( $atts[0] ) ) {
30 $atts[0] = trim( $atts[0], '=' );
31 if ( preg_match( '#archive.org/(details|embed)/(.+)/?$#i', $atts[0], $match ) ) {
32 $id = $match[2];
33 } else {
34 $id = $atts[0];
35 }
36 return $id;
37 }
38 return 0;
39 }
40
41 /**
42 * Convert an archive.org shortcode into an embed code.
43 *
44 * @since 4.5.0
45 *
46 * @param array $atts An array of shortcode attributes.
47 * @return string The embed code for the archive.org video.
48 */
49 function jetpack_archiveorg_shortcode( $atts ) {
50 global $content_width;
51
52 if ( isset( $atts[0] ) && empty( $atts['id'] ) ) {
53 $atts['id'] = jetpack_shortcode_get_archiveorg_id( $atts );
54 }
55
56 $atts = shortcode_atts(
57 array(
58 'id' => '',
59 'width' => 640,
60 'height' => 480,
61 'autoplay' => 0,
62 'poster' => '',
63 'playlist' => 0,
64 ),
65 $atts
66 );
67
68 if ( ! $atts['id'] ) {
69 return '<!-- error: missing archive.org ID -->';
70 }
71
72 $id = $atts['id'];
73
74 // Allow extra query parameters to be baked into the identifier, e.g. "myitem&playlist=1" or "myitem?playlist=1".
75 // In some environments a the_content filter encodes "&" to "&amp;" before do_shortcode runs, so the
76 // parser receives "myitem&amp;playlist=1" — normalize that back before splitting. The sibling function
77 // jetpack_archiveorg_embed_to_shortcode() splits on "&amp;" for the same reason.
78 $id = str_replace( '&amp;', '&', $id );
79 $id_extra_args = array();
80 if ( preg_match( '/^([^?&]*)[?&](.*)$/', $id, $id_match ) ) {
81 $id = $id_match[1];
82 wp_parse_str( $id_match[2], $id_extra_args );
83 }
84
85 // Re-check after the split — an identifier that's only a query string (e.g. "?playlist=1") leaves $id empty
86 // and would otherwise produce an item-less embed URL.
87 if ( '' === $id ) {
88 return '<!-- error: missing archive.org ID -->';
89 }
90
91 if ( ! $atts['width'] ) {
92 $width = absint( $content_width );
93 } else {
94 $width = (int) $atts['width'];
95 }
96
97 if ( ! $atts['height'] ) {
98 $height = round( ( $width / 640 ) * 360 );
99 } else {
100 $height = (int) $atts['height'];
101 }
102
103 $query_args = array();
104 if ( $atts['autoplay'] ) {
105 $query_args['autoplay'] = 1;
106 }
107 if ( $atts['poster'] ) {
108 $query_args['poster'] = $atts['poster'];
109 }
110 if ( $atts['playlist'] ) {
111 $query_args['playlist'] = 1;
112 }
113
114 // Explicit shortcode attributes take precedence over query parameters baked into the identifier.
115 $query_args = array_merge( $id_extra_args, $query_args );
116
117 $url = 'https://archive.org/embed/' . $id;
118 if ( ! empty( $query_args ) ) {
119 $url = add_query_arg( $query_args, $url );
120 }
121
122 return sprintf(
123 '<div class="embed-archiveorg" style="text-align:center;"><iframe title="%s" src="%s" width="%s" height="%s" style="border:0;" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen></iframe></div>',
124 esc_attr__( 'Archive.org', 'jetpack' ),
125 esc_url( $url ),
126 esc_attr( $width ),
127 esc_attr( $height )
128 );
129 }
130
131 add_shortcode( 'archiveorg', 'jetpack_archiveorg_shortcode' );
132
133 /**
134 * Compose shortcode from archive.org iframe.
135 *
136 * @since 4.5.0
137 *
138 * @param string $content Post content.
139 *
140 * @return mixed
141 */
142 function jetpack_archiveorg_embed_to_shortcode( $content ) {
143 if ( ! is_string( $content ) || false === stripos( $content, 'archive.org/embed/' ) ) {
144 return $content;
145 }
146
147 $regexp = '!<iframe\s+src=[\'"]https?://archive\.org/embed/([^\'"]+)[\'"]((?:\s+\w+(=[\'"][^\'"]*[\'"])?)*)></iframe>!i';
148
149 if ( ! preg_match_all( $regexp, $content, $matches, PREG_SET_ORDER ) ) {
150 return $content;
151 }
152
153 foreach ( $matches as $match ) {
154 $url = explode( '&amp;', $match[1] );
155 $id = 'id=' . $url[0];
156
157 $autoplay = '';
158 $poster = '';
159 $url_count = count( $url );
160
161 for ( $ii = 1; $ii < $url_count; $ii++ ) {
162 if ( 'autoplay=1' === $url[ $ii ] ) {
163 $autoplay = ' autoplay="1"';
164 }
165
166 $map_matches = array();
167 if ( preg_match( '/^poster=(.+)$/', $url[ $ii ], $map_matches ) ) {
168 $poster = " poster=\"{$map_matches[1]}\"";
169 }
170 }
171
172 $params = $match[2];
173
174 $params = wp_kses_hair( $params, array( 'http' ) );
175
176 $width = isset( $params['width'] ) ? (int) $params['width']['value'] : 0;
177 $height = isset( $params['height'] ) ? (int) $params['height']['value'] : 0;
178
179 $wh = '';
180 if ( $width && $height ) {
181 $wh = ' width=' . $width . ' height=' . $height;
182 }
183
184 $shortcode = '[archiveorg ' . $id . $wh . $autoplay . $poster . ']';
185 $content = str_replace( $match[0], $shortcode, $content );
186 }
187
188 return $content;
189 }
190
191 if ( jetpack_shortcodes_should_hook_pre_kses() ) {
192 add_filter( 'pre_kses', 'jetpack_archiveorg_embed_to_shortcode' );
193 }
194