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 / bandcamp.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
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