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