HEX
Server: Apache
System: Linux webd003.cluster128.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: slyfwmm (169339)
PHP: 8.1.34
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/slyfwmm/pianob/wp-content/plugins/soundcloud-shortcode/soundcloud-shortcode.php
<?php
/*
 * Plugin Name: SoundCloud Shortcode
 * Plugin URI: http://wordpress.org/extend/plugins/soundcloud-shortcode/
 * Description: Converts SoundCloud WordPress shortcodes to a SoundCloud widget. Example: [soundcloud]http://soundcloud.com/forss/flickermood[/soundcloud]
 * Version: 3.1.0
 * Author: SoundCloud Inc.
 * Author URI: http://soundcloud.com
 * License: GPLv2
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 * Update URI:        https://example.com/my-plugin/
 * Text Domain:       soundcloud-shortcode
 * Domain Path:       /languages

Original version: Johannes Wagener <johannes@soundcloud.com>
Options support: Tiffany Conroy <tiffany@soundcloud.com>
HTML5 & oEmbed support: Tim Bormans <tim@soundcloud.com>
PHP8 & modern updates: Lawrie Malen <soundcloud@indextwo.net>

SoundCloud Shortcode is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
any later version.

SoundCloud Shortcode is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with SoundCloud Shortcode. If not, see https://www.gnu.org/licenses/gpl-2.0.html

*/


/* Register oEmbed provider
	 -------------------------------------------------------------------------- */

wp_oembed_add_provider('#https?://(?:api\.)?soundcloud\.com/.*#i', 'http://soundcloud.com/oembed', true);


/* Register SoundCloud shortcode
	 -------------------------------------------------------------------------- */

add_shortcode("soundcloud", "soundcloud_shortcode");


/**
 * SoundCloud shortcode handler
 * @param	{string|array}	$atts	The attributes passed to the shortcode like [soundcloud attr1="value" /].
 *									Is an empty string when no arguments are given.
 * @param	{string}				$content	The content between non-self closing [soundcloud]…[/soundcloud] tags.
 * @return {string}					Widget embed code HTML
 */

function soundcloud_shortcode($atts, $content = null) {
	// Custom shortcode options
	
	$shortcode_options = array_merge(array('url' => trim($content)), is_array($atts) ? $atts : array());
	
	// Turn shortcode option "param" (param=value&param2=value) into array
	
	$shortcode_params = array();
	
	if (isset($shortcode_options['params'])) {
		parse_str(html_entity_decode($shortcode_options['params']), $shortcode_params);
	}
	
	$shortcode_options['params'] = $shortcode_params;

	$player_type = soundcloud_get_option('player_type', 'visual');
	$isIframe		= $player_type !== 'flash';
	$isVisual		= !$player_type || $player_type === 'visual';


	// User preference options
	$plugin_options = array_filter(array(
		'iframe' => $isIframe,
		'width'	=> soundcloud_get_option('player_width'),
		'height' => soundcloud_url_has_tracklist($shortcode_options['url']) ? soundcloud_get_option('player_height_multi') : soundcloud_get_option('player_height'),
		'params' => array_filter(array(
			'auto_play'		 => soundcloud_get_option('auto_play'),
			'show_comments' => soundcloud_get_option('show_comments'),
			'color'				 => soundcloud_get_option('color'),
			'visual'				=> ($isVisual ? 'true' : 'false')
		)),
	));

	// Needs to be an array
	
	if (!isset($plugin_options['params'])) {
		$plugin_options['params'] = array();
	}

	// plugin options < shortcode options
	
	$options = array_merge(
		$plugin_options,
		$shortcode_options
	);

	// plugin params < shortcode params
	
	$options['params'] = array_merge(
		$plugin_options['params'],
		$shortcode_options['params']
	);

	// The "url" option is required
	
	if (!isset($options['url'])) {
		return '';
	} else {
		$options['url'] = trim($options['url']);
	}

	// Both "width" and "height" need to be integers
	
	if (isset($options['width']) && !preg_match('/^\d+$/', $options['width'])) {
		// set to 0 so oEmbed will use the default 100% and WordPress themes will leave it alone
		$options['width'] = 0;
	}

	if (isset($options['height']) && !preg_match('/^\d+$/', $options['height'])) { unset($options['height']); }

	// The "iframe" option must be true to load the iframe widget
	
	$iframe = soundcloud_booleanize($options['iframe']);

	// Remove visual parameter from Flash widget or when it's false because that's the default
	
	if ($options['params']['visual'] && (!$iframe || !soundcloud_booleanize($options['params']['visual']))) {
		unset($options['params']['visual']);
	}

	// Merge in "url" value
	
	$options['params'] = array_merge(array(
		'url' => $options['url']
	), $options['params']);

	//	Apply a filter to the options

	$options = apply_filters('soundcloud_shortcode_options', $options);

	// Return html embed code
	
	if ($iframe) {
		return soundcloud_iframe_widget($options);
	} else {
		return soundcloud_flash_widget($options);
	}

}

/**
 * Plugin options getter
 * @param	{string|array}	$option	 Option name
 * @param	{mixed}			$default	Default value
 * @return {mixed}			Option value
 */

function soundcloud_get_option($option, $default = false) {
	$value = get_option('soundcloud_' . $option);
	return $value === '' ? $default : $value;
}

/**
 * Booleanize a value
 * @param	{boolean|string}	$value
 * @return {boolean}
 */

function soundcloud_booleanize($value) {
	return (is_bool($value) ? $value : $value === 'true') ? true : false;
}

/**
 * Decide if a url has a tracklist
 * @param	{string}	 $url
 * @return {boolean}
 */

function soundcloud_url_has_tracklist($url) {
	return preg_match('/^(.+?)\/(sets|groups|playlists)\/(.+?)$/', $url);
}

/**
 * Parameterize url
 * @param	{array}	$match	Matched regex
 * @return {string}					Parameterized url
 */

function soundcloud_oembed_params_callback($match) {
	global $soundcloud_oembed_params;

	// Convert URL to array
	$url = parse_url(urldecode($match[1]));
	// Convert URL query to array
	parse_str($url['query'], $query_array);
	// Build new query string
	$query = http_build_query(array_merge($query_array, $soundcloud_oembed_params));

	return 'src="' . $url['scheme'] . '://' . $url['host'] . $url['path'] . '?' . $query;
}

/**
 * Iframe widget embed code
 * @param	{array}	 $options	Parameters
 * @return {string}						Iframe embed code
 */

function soundcloud_iframe_widget($options) {
	// Build URL
	$url = 'https://w.soundcloud.com/player?' . http_build_query($options['params']);
	// Set default width if not defined
	$width = isset($options['width']) && $options['width'] !== 0 ? $options['width'] : '100%';
	// Set default height if not defined

	$height = isset($options['height']) && $options['height'] !== 0
							? $options['height']
							: (soundcloud_url_has_tracklist($options['url']) || (isset($options['params']['visual']) && soundcloud_booleanize($options['params']['visual'])) ? '450' : '166');

	return sprintf('<iframe width="%s" height="%s" scrolling="no" frameborder="no" src="%s"></iframe>', $width, $height, $url);
}

/**
 * Legacy Flash widget embed code
 * @param	{array}	 $options	Parameters
 * @return {string}						Flash embed code
 */

function soundcloud_flash_widget($options) {

	// Build URL
	$url = 'https://player.soundcloud.com/player.swf?' . http_build_query($options['params']);
	// Set default width if not defined
	$width = isset($options['width']) && $options['width'] !== 0 ? $options['width'] : '100%';
	// Set default height if not defined
	$height = isset($options['height']) && $options['height'] !== 0 ? $options['height'] : (soundcloud_url_has_tracklist($options['url']) ? '255' : '81');

	return preg_replace('/\s\s+/', "", sprintf('<object width="%s" height="%s">
																<param name="movie" value="%s"></param>
																<param name="allowscriptaccess" value="always"></param>
																<embed width="%s" height="%s" src="%s" allowscriptaccess="always" type="application/x-shockwave-flash"></embed>
															</object>', $width, $height, $url, $width, $height, $url));
}



/* Settings */

/* Add settings link on plugin page */

function soundcloud_settings_link($links) {
	$settings_link = '<a href="options-general.php?page=soundcloud-shortcode">Settings</a>';
	array_unshift($links, $settings_link);
	return $links;
}

add_filter("plugin_action_links_" . plugin_basename(__FILE__), 'soundcloud_settings_link');

/* Add admin menu */
function soundcloud_shortcode_options_menu() {
	add_options_page('SoundCloud Options', 'SoundCloud', 'manage_options', 'soundcloud-shortcode', 'soundcloud_shortcode_options');
	add_action('admin_init', 'register_soundcloud_settings');
}

add_action('admin_menu', 'soundcloud_shortcode_options_menu');

/*
	Register settings
 */

function register_soundcloud_settings() {
	register_setting('soundcloud-settings', 'soundcloud_player_height');
	register_setting('soundcloud-settings', 'soundcloud_player_height_multi');
	register_setting('soundcloud-settings', 'soundcloud_player_width ');
	register_setting('soundcloud-settings', 'soundcloud_player_type');
	register_setting('soundcloud-settings', 'soundcloud_auto_play');
	register_setting('soundcloud-settings', 'soundcloud_show_comments');
	register_setting('soundcloud-settings', 'soundcloud_color');
}

function soundcloud_shortcode_options() {
	if (!current_user_can('manage_options')) {
		wp_die( __('You do not have sufficient permissions to access this page.') );
	}

	?>

	<div class="wrap">
		<h2>SoundCloud Shortcode Default Settings</h2>
		<p>These settings will become the new defaults used by the SoundCloud Shortcode throughout your blog.</p>
		<p>You can always override these settings on a per-shortcode basis. Setting the 'params' attribute in a shortcode overrides these defaults individually.</p>

		<form method="post" action="options.php">
			<?php settings_fields('soundcloud-settings'); ?>
			<table class="form-table">

				<tr valign="top">
					<th scope="row">Widget Type</th>
					<td>
						<input type="radio" id="player_type_visual" name="soundcloud_player_type" value="visual" <?php if (!get_option('soundcloud_player_type') || strtolower(get_option('soundcloud_player_type')) === 'visual')	echo 'checked'; ?> />
						<label for="player_type_visual" style="margin-right: 1em;">Visual</label>
						<input type="radio" id="player_type_html5" name="soundcloud_player_type" value="html5" <?php if (strtolower(get_option('soundcloud_player_type')) === 'html5')	echo 'checked'; ?> />
						<label for="player_type_html5" style="margin-right: 1em;">HTML5</label>
						<input type="radio" id="player_type_flash" name="soundcloud_player_type" value="flash" <?php if (strtolower(get_option('soundcloud_player_type')) === 'flash')	echo 'checked'; ?> />
						<label for="player_type_flash" style="margin-right: 1em;">Flash</label>
					</td>
				</tr>

				<tr valign="top">
					<th scope="row">Player Height for Tracks</th>
					<td>
						<input type="text" name="soundcloud_player_height" value="<?php echo get_option('soundcloud_player_height'); ?>" /> (no unit, or %)<br />
						Leave blank to use the default.
					</td>
				</tr>

				<tr valign="top">
					<th scope="row">Player Height for Groups/Sets</th>
					<td>
						<input type="text" name="soundcloud_player_height_multi" value="<?php echo get_option('soundcloud_player_height_multi'); ?>" /> (no unit, or %)<br />
						Leave blank to use the default.
					</td>
				</tr>

				<tr valign="top">
					<th scope="row">Player Width</th>
					<td>
						<input type="text" name="soundcloud_player_width" value="<?php echo get_option('soundcloud_player_width'); ?>" /> (no unit, or %)<br />
						Leave blank to use the default.
					</td>
				</tr>

				<tr valign="top">
					<th scope="row">Current Default 'params'</th>
					<td>
						<?php echo http_build_query(array_filter(array(
							'auto_play'		 => get_option('soundcloud_auto_play'),
							'show_comments' => get_option('soundcloud_show_comments'),
							'color'				 => get_option('soundcloud_color')
						))) ?>
					</td>
				</tr>

				<tr valign="top">
					<th scope="row">Auto Play</th>
					<td>
						<input type="radio" id="auto_play_none" name="soundcloud_auto_play" value=""<?php if (get_option('soundcloud_auto_play') == '') echo 'checked'; ?> />
						<label for="auto_play_none"	style="margin-right: 1em;">Default</label>
						<input type="radio" id="auto_play_true"	name="soundcloud_auto_play" value="true"<?php if (get_option('soundcloud_auto_play') == 'true') echo 'checked'; ?> />
						<label for="auto_play_true"	style="margin-right: 1em;">Yes</label>
						<input type="radio" id="auto_play_false" name="soundcloud_auto_play" value="false" <?php if (get_option('soundcloud_auto_play') == 'false') echo 'checked'; ?> />
						<label for="auto_play_false" style="margin-right: 1em;">No</label>
					</td>
				</tr>

				<tr valign="top">
					<th scope="row">Show Comments</th>
					<td>
						<input type="radio" id="show_comments_none"	name="soundcloud_show_comments" value=""<?php if (get_option('soundcloud_show_comments') == '') echo 'checked'; ?> />
						<label for="show_comments_none" style="margin-right: 1em;">Default</label>
						<input type="radio" id="show_comments_true"	name="soundcloud_show_comments" value="true"<?php if (get_option('soundcloud_show_comments') == 'true') echo 'checked'; ?> />
						<label for="show_comments_true"	style="margin-right: 1em;">Yes</label>
						<input type="radio" id="show_comments_false" name="soundcloud_show_comments" value="false" <?php if (get_option('soundcloud_show_comments') == 'false') echo 'checked'; ?> />
						<label for="show_comments_false" style="margin-right: 1em;">No</label>
					</td>
				</tr>

				<tr valign="top">
					<th scope="row">Color</th>
					<td>
						<input type="text" name="soundcloud_color" value="<?php echo get_option('soundcloud_color'); ?>" /> (color hex code e.g. ff6699)<br />
						Defines the color to paint the play button, waveform and selections.
					</td>
				</tr>

			</table>

				<p class="submit">
					<input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
				</p>

		</form>
	</div>

	<?php
}