Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/jetpack/modules/shortcod...
File: soundcloud.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* SoundCloud Shortcode
[2] Fix | Delete
* Based on this plugin: https://wordpress.org/plugins/soundcloud-shortcode/
[3] Fix | Delete
*
[4] Fix | Delete
* Credits:
[5] Fix | Delete
* Original version: Johannes Wagener <johannes@soundcloud.com>
[6] Fix | Delete
* Options support: Tiffany Conroy <tiffany@soundcloud.com>
[7] Fix | Delete
* HTML5 & oEmbed support: Tim Bormans <tim@soundcloud.com>
[8] Fix | Delete
*
[9] Fix | Delete
* Examples:
[10] Fix | Delete
* [soundcloud]http://soundcloud.com/forss/flickermood[/soundcloud]
[11] Fix | Delete
* [soundcloud url="https://api.soundcloud.com/tracks/156661852" params="auto_play=false&amp;hide_related=false&amp;visual=false" width="100%" height="450" iframe="true" /]
[12] Fix | Delete
* [soundcloud url="https://api.soundcloud.com/tracks/156661852" params="auto_play=false&amp;hide_related=false&amp;visual=true" width="100%" height="450" iframe="true" /]
[13] Fix | Delete
* [soundcloud url="https://soundcloud.com/closetorgan/paul-is-dead" width=400 height=400]
[14] Fix | Delete
* [soundcloud url="https://soundcloud.com/closetorgan/sets/smells-like-lynx-africa-private"]
[15] Fix | Delete
* [soundcloud url="https://soundcloud.com/closetorgan/sets/smells-like-lynx-africa-private" color="00cc11"]
[16] Fix | Delete
* <iframe width="100%" height="450" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/150745932&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true"></iframe>
[17] Fix | Delete
*
[18] Fix | Delete
* @package automattic/jetpack
[19] Fix | Delete
*/
[20] Fix | Delete
[21] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[22] Fix | Delete
exit( 0 );
[23] Fix | Delete
}
[24] Fix | Delete
[25] Fix | Delete
/**
[26] Fix | Delete
* SoundCloud shortcode handler
[27] Fix | Delete
*
[28] Fix | Delete
* @param string|array $atts The attributes passed to the shortcode like [soundcloud attr1="value" /].
[29] Fix | Delete
* Is an empty string when no arguments are given.
[30] Fix | Delete
* @param string $content The content between non-self closing [soundcloud]...[/soundcloud] tags.
[31] Fix | Delete
*
[32] Fix | Delete
* @return string Widget embed code HTML
[33] Fix | Delete
*/
[34] Fix | Delete
function soundcloud_shortcode( $atts, $content = null ) {
[35] Fix | Delete
global $wp_embed;
[36] Fix | Delete
[37] Fix | Delete
// Custom shortcode options.
[38] Fix | Delete
$shortcode_options = array_merge(
[39] Fix | Delete
array( 'url' => trim( $content ) ),
[40] Fix | Delete
is_array( $atts ) ? $atts : array()
[41] Fix | Delete
);
[42] Fix | Delete
[43] Fix | Delete
// The "url" option is required.
[44] Fix | Delete
if ( empty( $shortcode_options['url'] ) ) {
[45] Fix | Delete
if ( current_user_can( 'edit_posts' ) ) {
[46] Fix | Delete
return esc_html__( 'Please specify a Soundcloud URL.', 'jetpack' );
[47] Fix | Delete
} else {
[48] Fix | Delete
return '<!-- Missing Soundcloud URL -->';
[49] Fix | Delete
}
[50] Fix | Delete
}
[51] Fix | Delete
[52] Fix | Delete
// If the shortcode is displayed in a WPCOM notification, display a simple link only.
[53] Fix | Delete
if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
[54] Fix | Delete
require_once WP_CONTENT_DIR . '/lib/display-context.php';
[55] Fix | Delete
$context = A8C\Display_Context\get_current_context();
[56] Fix | Delete
if ( A8C\Display_Context\NOTIFICATIONS === $context ) {
[57] Fix | Delete
return sprintf(
[58] Fix | Delete
'<a href="%1$s" target="_blank" rel="noopener noreferrer">%1$s</a>',
[59] Fix | Delete
esc_url( $shortcode_options['url'] )
[60] Fix | Delete
);
[61] Fix | Delete
}
[62] Fix | Delete
}
[63] Fix | Delete
[64] Fix | Delete
// Turn shortcode option "param" (param=value&param2=value) into array of params.
[65] Fix | Delete
$shortcode_params = array();
[66] Fix | Delete
if ( isset( $shortcode_options['params'] ) ) {
[67] Fix | Delete
parse_str( html_entity_decode( $shortcode_options['params'], ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 ), $shortcode_params );
[68] Fix | Delete
$shortcode_options = array_merge(
[69] Fix | Delete
$shortcode_options,
[70] Fix | Delete
$shortcode_params
[71] Fix | Delete
);
[72] Fix | Delete
unset( $shortcode_options['params'] );
[73] Fix | Delete
}
[74] Fix | Delete
[75] Fix | Delete
$options = shortcode_atts(
[76] Fix | Delete
// This list used to include an 'iframe' option. We don't include it anymore as we don't support the Flash player anymore.
[77] Fix | Delete
array(
[78] Fix | Delete
'url' => '',
[79] Fix | Delete
'width' => soundcloud_get_option( 'player_width' ),
[80] Fix | Delete
'height' => soundcloud_url_has_tracklist( $shortcode_options['url'] ) ? soundcloud_get_option( 'player_height_multi' ) : soundcloud_get_option( 'player_height' ),
[81] Fix | Delete
'auto_play' => soundcloud_get_option( 'auto_play' ),
[82] Fix | Delete
'hide_related' => false,
[83] Fix | Delete
'visual' => false,
[84] Fix | Delete
'show_comments' => soundcloud_get_option( 'show_comments' ),
[85] Fix | Delete
'color' => soundcloud_get_option( 'color' ),
[86] Fix | Delete
'show_user' => false,
[87] Fix | Delete
'show_reposts' => false,
[88] Fix | Delete
),
[89] Fix | Delete
$shortcode_options,
[90] Fix | Delete
'soundcloud'
[91] Fix | Delete
);
[92] Fix | Delete
[93] Fix | Delete
// "width" needs to be an integer.
[94] Fix | Delete
if ( ! empty( $options['width'] ) && ! preg_match( '/^\d+$/', $options['width'] ) ) {
[95] Fix | Delete
// set to 0 so oEmbed will use the default 100% and WordPress themes will leave it alone.
[96] Fix | Delete
$options['width'] = 0;
[97] Fix | Delete
}
[98] Fix | Delete
// Set default width if not defined.
[99] Fix | Delete
$width = ! empty( $options['width'] ) ? absint( $options['width'] ) : '100%';
[100] Fix | Delete
[101] Fix | Delete
// Set default height if not defined.
[102] Fix | Delete
if (
[103] Fix | Delete
empty( $options['height'] )
[104] Fix | Delete
|| (
[105] Fix | Delete
// "height" needs to be an integer.
[106] Fix | Delete
! empty( $options['height'] )
[107] Fix | Delete
&& ! preg_match( '/^\d+$/', $options['height'] )
[108] Fix | Delete
)
[109] Fix | Delete
) {
[110] Fix | Delete
if (
[111] Fix | Delete
soundcloud_url_has_tracklist( $options['url'] )
[112] Fix | Delete
|| 'true' === $options['visual']
[113] Fix | Delete
) {
[114] Fix | Delete
$height = 450;
[115] Fix | Delete
} else {
[116] Fix | Delete
$height = 166;
[117] Fix | Delete
}
[118] Fix | Delete
} else {
[119] Fix | Delete
$height = absint( $options['height'] );
[120] Fix | Delete
}
[121] Fix | Delete
[122] Fix | Delete
// Set visual to false when displaying the smallest player.
[123] Fix | Delete
if ( '20' === $options['height'] ) {
[124] Fix | Delete
$options['visual'] = false;
[125] Fix | Delete
}
[126] Fix | Delete
[127] Fix | Delete
if (
[128] Fix | Delete
class_exists( 'Jetpack_AMP_Support' )
[129] Fix | Delete
&& Jetpack_AMP_Support::is_amp_request()
[130] Fix | Delete
&& ! empty( $options['url'] )
[131] Fix | Delete
&& 'api.soundcloud.com' !== wp_parse_url( $options['url'], PHP_URL_HOST )
[132] Fix | Delete
) {
[133] Fix | Delete
// Defer to oEmbed if an oEmbeddable URL is provided.
[134] Fix | Delete
return $wp_embed->shortcode( $options, $options['url'] );
[135] Fix | Delete
}
[136] Fix | Delete
[137] Fix | Delete
// Build our list of Soundcloud parameters.
[138] Fix | Delete
$query_args = array(
[139] Fix | Delete
'url' => rawurlencode( $options['url'] ),
[140] Fix | Delete
);
[141] Fix | Delete
[142] Fix | Delete
// Add our options, if they are set to true or false.
[143] Fix | Delete
foreach ( $options as $name => $value ) {
[144] Fix | Delete
if ( 'true' === $value ) {
[145] Fix | Delete
$query_args[ $name ] = 'true';
[146] Fix | Delete
}
[147] Fix | Delete
[148] Fix | Delete
if ( 'false' === $value || false === $value ) {
[149] Fix | Delete
$query_args[ $name ] = 'false';
[150] Fix | Delete
}
[151] Fix | Delete
}
[152] Fix | Delete
[153] Fix | Delete
// Add the color parameter if it was specified and is a valid color.
[154] Fix | Delete
if ( ! empty( $options['color'] ) ) {
[155] Fix | Delete
$color = sanitize_hex_color_no_hash( $options['color'] );
[156] Fix | Delete
if ( ! empty( $color ) ) {
[157] Fix | Delete
$query_args['color'] = $color;
[158] Fix | Delete
}
[159] Fix | Delete
}
[160] Fix | Delete
[161] Fix | Delete
// Build final embed URL.
[162] Fix | Delete
$url = add_query_arg(
[163] Fix | Delete
$query_args,
[164] Fix | Delete
'https://w.soundcloud.com/player/'
[165] Fix | Delete
);
[166] Fix | Delete
[167] Fix | Delete
return sprintf(
[168] Fix | Delete
'<iframe width="%1$s" height="%2$d" scrolling="no" frameborder="no" src="%3$s"></iframe>',
[169] Fix | Delete
esc_attr( $width ),
[170] Fix | Delete
esc_attr( $height ),
[171] Fix | Delete
$url
[172] Fix | Delete
);
[173] Fix | Delete
}
[174] Fix | Delete
add_shortcode( 'soundcloud', 'soundcloud_shortcode' );
[175] Fix | Delete
[176] Fix | Delete
/**
[177] Fix | Delete
* Plugin options getter
[178] Fix | Delete
*
[179] Fix | Delete
* @param string|array $option Option name.
[180] Fix | Delete
* @param mixed $default Default value.
[181] Fix | Delete
*
[182] Fix | Delete
* @return mixed Option value
[183] Fix | Delete
*/
[184] Fix | Delete
function soundcloud_get_option( $option, $default = false ) {
[185] Fix | Delete
$value = get_option( 'soundcloud_' . $option );
[186] Fix | Delete
[187] Fix | Delete
return '' === $value ? $default : $value;
[188] Fix | Delete
}
[189] Fix | Delete
[190] Fix | Delete
/**
[191] Fix | Delete
* Decide if a url has a tracklist
[192] Fix | Delete
*
[193] Fix | Delete
* @param string $url Soundcloud URL.
[194] Fix | Delete
*
[195] Fix | Delete
* @return boolean
[196] Fix | Delete
*/
[197] Fix | Delete
function soundcloud_url_has_tracklist( $url ) {
[198] Fix | Delete
return preg_match( '/^(.+?)\/(sets|groups|playlists)\/(.+?)$/', $url );
[199] Fix | Delete
}
[200] Fix | Delete
[201] Fix | Delete
/**
[202] Fix | Delete
* SoundCloud Embed Reversal
[203] Fix | Delete
*
[204] Fix | Delete
* Converts a generic HTML embed code from SoundClound into a
[205] Fix | Delete
* WordPress.com-compatibly shortcode.
[206] Fix | Delete
*
[207] Fix | Delete
* @param string $content HTML content.
[208] Fix | Delete
*
[209] Fix | Delete
* @return string Parsed content.
[210] Fix | Delete
*/
[211] Fix | Delete
function jetpack_soundcloud_embed_reversal( $content ) {
[212] Fix | Delete
if ( ! is_string( $content ) || false === stripos( $content, 'w.soundcloud.com/player' ) ) {
[213] Fix | Delete
return $content;
[214] Fix | Delete
}
[215] Fix | Delete
[216] Fix | Delete
$regexes = array();
[217] Fix | Delete
[218] Fix | Delete
$regexes[] = '#<iframe[^>]+?src="((?:https?:)?//w\.soundcloud\.com/player/[^"\']++)"[^>]*+>\s*?</iframe>#i';
[219] Fix | Delete
$regexes[] = '#&lt;iframe(?:[^&]|&(?!gt;))+?src="((?:https?:)?//w\.soundcloud\.com/player/[^"\']++)"(?:[^&]|&(?!gt;))*+&gt;\s*?&lt;/iframe&gt;#i';
[220] Fix | Delete
[221] Fix | Delete
foreach ( $regexes as $regex ) {
[222] Fix | Delete
if ( ! preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) ) {
[223] Fix | Delete
continue;
[224] Fix | Delete
}
[225] Fix | Delete
[226] Fix | Delete
foreach ( $matches as $match ) {
[227] Fix | Delete
[228] Fix | Delete
// if pasted from the visual editor - prevent double encoding.
[229] Fix | Delete
$match[1] = str_replace( '&amp;amp;', '&amp;', $match[1] );
[230] Fix | Delete
[231] Fix | Delete
$args = wp_parse_url( html_entity_decode( $match[1], ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 ), PHP_URL_QUERY );
[232] Fix | Delete
$args = wp_parse_args( $args );
[233] Fix | Delete
[234] Fix | Delete
if ( ! preg_match( '#^(?:https?:)?//api\.soundcloud\.com/.+$#i', $args['url'], $url_matches ) ) {
[235] Fix | Delete
continue;
[236] Fix | Delete
}
[237] Fix | Delete
[238] Fix | Delete
if ( ! preg_match( '#height="(\d+)"#i', $match[0], $hmatch ) ) {
[239] Fix | Delete
$height = '';
[240] Fix | Delete
} else {
[241] Fix | Delete
$height = ' height="' . (int) $hmatch[1] . '"';
[242] Fix | Delete
}
[243] Fix | Delete
[244] Fix | Delete
unset( $args['url'] );
[245] Fix | Delete
$params = 'params="';
[246] Fix | Delete
if ( is_countable( $args ) && count( $args ) > 0 ) {
[247] Fix | Delete
foreach ( $args as $key => $value ) {
[248] Fix | Delete
$params .= esc_html( $key ) . '=' . esc_html( $value ) . '&amp;';
[249] Fix | Delete
}
[250] Fix | Delete
$params = substr( $params, 0, -5 );
[251] Fix | Delete
}
[252] Fix | Delete
$params .= '"';
[253] Fix | Delete
[254] Fix | Delete
$shortcode = '[soundcloud url="' . esc_url( $url_matches[0] ) . '" ' . $params . ' width="100%"' . $height . ' iframe="true" /]';
[255] Fix | Delete
[256] Fix | Delete
$replace_regex = sprintf( '#\s*%s\s*#', preg_quote( $match[0], '#' ) );
[257] Fix | Delete
$content = preg_replace( $replace_regex, sprintf( "\n\n%s\n\n", $shortcode ), $content );
[258] Fix | Delete
[259] Fix | Delete
/** This action is documented in modules/shortcodes/youtube.php */
[260] Fix | Delete
do_action( 'jetpack_embed_to_shortcode', 'soundcloud', $url_matches[0] );
[261] Fix | Delete
}
[262] Fix | Delete
}
[263] Fix | Delete
[264] Fix | Delete
return $content;
[265] Fix | Delete
}
[266] Fix | Delete
[267] Fix | Delete
if ( jetpack_shortcodes_should_hook_pre_kses() ) {
[268] Fix | Delete
add_filter( 'pre_kses', 'jetpack_soundcloud_embed_reversal' );
[269] Fix | Delete
}
[270] Fix | Delete
[271] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function