summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jetpack/modules/shortcodes/soundcloud.php')
-rw-r--r--plugins/jetpack/modules/shortcodes/soundcloud.php60
1 files changed, 60 insertions, 0 deletions
diff --git a/plugins/jetpack/modules/shortcodes/soundcloud.php b/plugins/jetpack/modules/shortcodes/soundcloud.php
new file mode 100644
index 00000000..8aa35380
--- /dev/null
+++ b/plugins/jetpack/modules/shortcodes/soundcloud.php
@@ -0,0 +1,60 @@
+<?php
+
+/*
+Plugin Name: SoundCloud Shortcode
+Plugin URI: http://www.soundcloud.com
+Description: SoundCloud Shortcode. Usage in your posts: [soundcloud]http://soundcloud.com/TRACK_PERMALINK[/soundcloud] . Works also with set or group instead of track. You can provide optional parameters height/width/params like that [soundcloud height="82" params="auto_play=true"]http....
+Version: 1.1.5
+Author: Johannes Wagener <johannes@soundcloud.com> added to wpcom by tott
+Author URI: http://johannes.wagener.cc
+
+[soundcloud url="http://api.soundcloud.com/tracks/9408008"]
+<object height="81" width="100%"> <param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F8781356"></param> <param name="allowscriptaccess" value="always"></param> <embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F8781356" type="application/x-shockwave-flash" width="100%"></embed> </object> <span><a href="http://soundcloud.com/robokopbeats/robokop-we-move-at-midnight-preview-forthcoming-on-mwm-recordings">Robokop - We move at midnight preview ( FORTHCOMING ON MWM recordings)</a> by <a href="http://soundcloud.com/robokopbeats">Robokop</a></span>
+*/
+
+add_filter( "pre_kses", "soundcloud_reverse_shortcode" );
+
+function soundcloud_reverse_shortcode_preg_replace_callback( $a ) {
+ $pattern = '/([a-zA-Z0-9\-_%=&]*)&?url=([^&]+)&?([a-zA-Z0-9\-_%&=]*)/';
+ preg_match( $pattern, str_replace( "&amp;", "&", $a[3] ), $params );
+
+ return '[soundcloud width="' . esc_attr( $a[2] ) . '" height="' . esc_attr( $a[1] ) . '" params="' . esc_attr( $params[1] . $params[3] ) . '" url="' . urldecode( $params[2] ) . '"]';
+}
+
+function soundcloud_reverse_shortcode( $content ){
+ if ( false === stripos( $content, 'http://player.soundcloud.com/player.swf' ) )
+ return $content;
+
+ $pattern = '!<object\s*height="(\d+%?)"\s*width="(\d+%?)".*?src="http://.*?soundcloud\.com/player.swf\?([^"]+)".*?</object>.*?</span>!';
+ $pattern_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $pattern, ENT_NOQUOTES ) );
+
+ if ( preg_match( $pattern_ent, $content ) )
+ return( preg_replace_callback( $pattern_ent, 'soundcloud_reverse_shortcode_preg_replace_callback', $content ) );
+ else
+ return( preg_replace_callback( $pattern, 'soundcloud_reverse_shortcode_preg_replace_callback', $content ) );
+}
+
+add_shortcode( "soundcloud", "soundcloud_shortcode" );
+
+function soundcloud_shortcode( $atts, $url = '' ) {
+ if ( empty( $url ) )
+ extract( shortcode_atts( array( 'url' => '', 'params' => '', 'height' => '', 'width' => '100%' ), $atts ) );
+ else
+ extract( shortcode_atts( array( 'params' => '', 'height' => '', 'width' => '100%' ), $atts ) );
+
+ $encoded_url = urlencode( $url );
+ if ( $url = parse_url( $url ) ) {
+ $splitted_url = split( "/", $url['path'] );
+ $media_type = $splitted_url[ count( $splitted_url ) - 2 ];
+
+ if ( '' == $height ){
+ if ( in_array( $media_type, array( 'groups', 'sets' ) ) )
+ $height = 225;
+ else
+ $height = 81;
+ }
+ $player_params = "url=$encoded_url&g=1&$params";
+
+ return '<object height="' . esc_attr( $height ) . '" width="' . esc_attr( $width ) . '"><param name="movie" value="' . esc_url( "http://player.soundcloud.com/player.swf?$player_params" ) . '"></param><embed height="' . esc_attr( $height ) . '" src="' . esc_url( "http://player.soundcloud.com/player.swf?$player_params" ) . '" type="application/x-shockwave-flash" width="' . esc_attr( $width ) . '"> </embed> </object>';
+ }
+}