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 / bandcamp.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
bandcamp.php
245 lines
1 <?php
2 /**
3 * Shortcode handler for [bandcamp], which inserts a bandcamp.com
4 * music player (iframe, html5)
5 *
6 * [bandcamp album=119385304]
7 * [bandcamp album=3462839126 bgcol=FFFFFF linkcol=4285BB size=venti]
8 * [bandcamp track=2446959313]
9 *
10 * @package automattic/jetpack
11 */
12
13 /**
14 * Display the Bandcamp shortcode.
15 *
16 * @param array $atts Shortcode attributes.
17 */
18 function shortcode_handler_bandcamp( $atts ) {
19 // there are no default values, but specify here anyway to explicitly list supported atts.
20 $attributes = shortcode_atts(
21 array(
22 'album' => null, // integer album id.
23 'track' => null, // integer track id.
24 'video' => null, // integer track id for video player.
25 'size' => 'venti', // one of the supported sizes.
26 'bgcol' => 'FFFFFF', // hex, no '#' prefix.
27 'linkcol' => null, // hex, no '#' prefix.
28 'layout' => null, // encoded layout url.
29 'width' => null, // integer with optional "%".
30 'height' => null, // integer with optional "%".
31 'notracklist' => null, // may be string "true" (defaults false).
32 'tracklist' => null, // may be string "false" (defaults true).
33 // phpcs:ignore Squiz.PHP.CommentedOutCode.Found -- false positive
34 'artwork' => null, // may be string "false" (alternately: "none") or "small" (default is large).
35 'minimal' => null, // may be string "true" (defaults false).
36 'theme' => null, // may be theme identifier string ("light"|"dark" so far).
37 'package' => null, // integer package id.
38 't' => null, // integer track number.
39 'tracks' => null, // comma separated list of allowed tracks.
40 'esig' => null, // hex, no '#' prefix.
41 ),
42 $atts,
43 'bandcamp'
44 );
45
46 $sizes = array(
47 'venti' => array(
48 'width' => 400,
49 'height' => 100,
50 ),
51 'grande' => array(
52 'width' => 300,
53 'height' => 100,
54 ),
55 'grande2' => array(
56 'width' => 300,
57 'height' => 355,
58 ),
59 'grande3' => array(
60 'width' => 300,
61 'height' => 415,
62 ),
63 'tall_album' => array(
64 'width' => 150,
65 'height' => 295,
66 ),
67 'tall_track' => array(
68 'width' => 150,
69 'height' => 270,
70 ),
71 'tall2' => array(
72 'width' => 150,
73 'height' => 450,
74 ),
75 'short' => array(
76 'width' => 46,
77 'height' => 23,
78 ),
79 'large' => array(
80 'width' => 350,
81 'height' => 470,
82 ),
83 'medium' => array(
84 'width' => 450,
85 'height' => 120,
86 ),
87 'small' => array(
88 'width' => 350,
89 'height' => 42,
90 ),
91 );
92
93 $sizekey = $attributes['size'];
94 $height = null;
95 $width = null;
96
97 $is_video = false;
98
99 /*
100 * Build iframe url. For audio players, args are appended as
101 * extra path segments for historical reasons having to
102 * do with an IE-only flash bug which required this URL
103 * to contain no querystring. Delay the actual joining
104 * of args into a string until after we decide if it's
105 * a video player or an audio player
106 */
107 $argparts = array();
108
109 if ( ! isset( $attributes['album'] ) && ! isset( $attributes['track'] ) && ! isset( $attributes['video'] ) ) {
110 return "[bandcamp: shortcode must include 'track', 'album', or 'video' param]";
111 }
112
113 if ( isset( $attributes['track'] ) && is_numeric( $attributes['track'] ) ) {
114 $track = esc_attr( $attributes['track'] );
115 array_push( $argparts, "track={$track}" );
116 } elseif ( isset( $attributes['video'] ) && is_numeric( $attributes['video'] ) ) {
117 $track = esc_attr( $attributes['video'] ); // videos are referenced by track id.
118 $url = '//bandcamp.com/EmbeddedPlayer/v=2';
119 $is_video = true;
120 array_push( $argparts, "track={$track}" );
121 }
122 if ( isset( $attributes['album'] ) && is_numeric( $attributes['album'] ) ) {
123 $album = esc_attr( $attributes['album'] );
124 array_push( $argparts, "album={$album}" );
125 }
126
127 if ( 'tall' === $sizekey ) {
128 if ( isset( $attributes['album'] ) ) {
129 $sizekey .= '_album';
130 } else {
131 $sizekey .= '_track';
132 }
133 }
134
135 // if size specified that we don't recognize, fall back on venti.
136 if ( empty( $sizes[ $sizekey ] ) ) {
137 $sizekey = 'venti';
138 $attributes['size'] = 'venti';
139 }
140
141 /*
142 * use strict regex for digits + optional % instead of absint for height/width
143 * 'width' and 'height' params in the iframe url get the exact string from the shortcode
144 * args, whereas the inline style attribute must have "px" added to it if it has no "%"
145 */
146 if ( isset( $attributes['width'] ) && preg_match( '|^([0-9]+)(%)?$|', $attributes['width'], $matches ) ) {
147 $width = $attributes['width'];
148 $csswidth = $attributes['width'];
149 if ( count( $matches ) < 3 ) {
150 $csswidth .= 'px';
151 }
152 }
153 if ( isset( $attributes['height'] ) && preg_match( '|^([0-9]+)(%)?$|', $attributes['height'], $matches ) ) {
154 $height = $attributes['height'];
155 $cssheight = $attributes['height'];
156 if ( count( $matches ) < 3 ) {
157 $cssheight .= 'px';
158 }
159 }
160
161 if ( ! $height ) {
162 $height = $sizes[ $sizekey ]['height'];
163 $cssheight = $height . 'px';
164 }
165
166 if ( ! $width ) {
167 $width = $sizes[ $sizekey ]['width'];
168 $csswidth = $width . 'px';
169 }
170
171 if ( isset( $attributes['layout'] ) ) {
172 array_push( $argparts, "layout={$attributes['layout']}" );
173 } elseif ( isset( $attributes['size'] ) && preg_match( '|^[a-zA-Z0-9]+$|', $attributes['size'] ) ) {
174 array_push( $argparts, "size={$attributes['size']}" );
175 }
176
177 if ( isset( $attributes['bgcol'] ) && preg_match( '|^[0-9A-Fa-f]+$|', $attributes['bgcol'] ) ) {
178 array_push( $argparts, "bgcol={$attributes['bgcol']}" );
179 }
180
181 if ( isset( $attributes['linkcol'] ) && preg_match( '|^[0-9A-Fa-f]+$|', $attributes['linkcol'] ) ) {
182 array_push( $argparts, "linkcol={$attributes['linkcol']}" );
183 }
184
185 if ( isset( $attributes['package'] ) && preg_match( '|^[0-9]+$|', $attributes['package'] ) ) {
186 array_push( $argparts, "package={$attributes['package']}" );
187 }
188
189 if ( isset( $attributes['t'] ) && preg_match( '|^[0-9]+$|', $attributes['t'] ) ) {
190 array_push( $argparts, "t={$attributes['t']}" );
191 }
192
193 if ( 'true' === $attributes['notracklist'] ) {
194 array_push( $argparts, 'notracklist=true' );
195 }
196
197 // 'tracklist' arg deprecates 'notracklist=true' to be less weird. note, behavior
198 // if both are specified is undefined
199 switch ( $attributes['tracklist'] ) {
200 case 'false':
201 case 'none':
202 array_push( $argparts, 'tracklist=false' );
203 break;
204 }
205
206 switch ( $attributes['artwork'] ) {
207 case 'false':
208 case 'none':
209 case 'small':
210 array_push( $argparts, 'artwork=' . $attributes['artwork'] );
211 break;
212 }
213
214 if ( 'true' === $attributes['minimal'] ) {
215 array_push( $argparts, 'minimal=true' );
216 }
217
218 if ( isset( $attributes['theme'] ) && preg_match( '|^[a-zA-Z_]+$|', $attributes['theme'] ) ) {
219 array_push( $argparts, "theme={$attributes['theme']}" );
220 }
221
222 // param 'tracks' is signed digest param 'esig'.
223 if ( isset( $attributes['tracks'] ) && preg_match( '|^[0-9\,]+$|', $attributes['tracks'] ) ) {
224 if ( isset( $attributes['esig'] ) && preg_match( '|^[0-9A-Fa-f]+$|', $attributes['esig'] ) ) {
225 array_push( $argparts, "tracks={$attributes['tracks']}" );
226 array_push( $argparts, "esig={$attributes['esig']}" );
227 }
228 }
229
230 if ( $is_video ) {
231 $url = '//bandcamp.com/VideoEmbed?' . join( '&', $argparts );
232 $extra_attrs = " mozallowfullscreen='1' webkitallowfullscreen='1' allowfullscreen='1'";
233 } else {
234 $url = '//bandcamp.com/EmbeddedPlayer/v=2/' . join( '/', $argparts ) . '/';
235 $extra_attrs = '';
236 }
237
238 $iframe = '<iframe width="%s" height="%s" style="position: relative; display: block; width: %s; height: %s;" src="%s" allowtransparency="true" frameborder="0"%s></iframe>';
239 $iframe = sprintf( $iframe, esc_attr( $width ), esc_attr( $height ), esc_attr( $csswidth ), esc_attr( $cssheight ), esc_url( $url ), $extra_attrs );
240
241 return $iframe;
242 }
243
244 add_shortcode( 'bandcamp', 'shortcode_handler_bandcamp' );
245