Extension:MiniMp3

From MediaWiki.org
Jump to: navigation, search
MediaWiki extensions manual - list
Crystal Clear action run.png
MiniMp3

Release status: unknown

Implementation Tag
Description Streams MP3s
Author(s) Reddo (Redekopmarktalk)
Latest version tested on 1.18 but probably on earlier version too
License No license specified
Download see below

Translate the MiniMp3 extension if possible

Check usage and version matrix; code metrics

This Mp3 extension inserts a really light Flash player which streams an uploaded (or external) MP3 file. It's based on Extension:Mp3 but uses a different flash player and has more options and is compatible with newer versions of Mediawiki.

You can download the player from flash-mp3-player.net.

Usage[edit | edit source]

<mp3 bg="00FF00" color="FF0000">702 Promo.mp3</mp3>
<mp3 bg="00FF00" color="FF0000">http://www.aiowiki.com/w/images/4/40/702_Promo.mp3</mp3>
{{#tag:mp3|bg="00FF00"|color="FF0000"|{{{Mp3FileName}}} }} (this way allows usage of template variables)
[[file:702 Promo.mp3]] - can't use custom colors

If the bg (background) value is not given it will default to silver, if the color value is not given it defaults to black

Requirements[edit | edit source]

  • player_mp3_mini.swf in your extensions/MiniMp3 directory

Install instructions[edit | edit source]

require_once( "$IP/extensions/MiniMp3/MiniMp3.php");
  • If you want to accept mp3 uploads, add .mp3 in the extension list:
$wgFileExtensions = array('png','gif',...,'mp3');

PHP code (copy from here!)[edit | edit source]

save the below code as MiniMp3.php and save it in your extensions/MiniMp3 directory

<?php
# Stream MP3 with http://flash-mp3-player.net/players/mini/ mini mp3 player
# 
# Requires :
#   player_mp3_mini.swf in the extensions/MiniMp3 directory
# 
 
$wgHooks['ParserFirstCallInit'][] = 'wfMp3';
$wgMediaHandlers['audio/mp3'] = 'MiniMp3Handler';
$wgFileExtensions[] = 'mp3';
 
$wgExtensionCredits['parserhook'][] = array(
	'name' => 'MiniMp3',
	'description' => 'Uses a very small flash player to stream your mp3 files',
	'author' => array( 'Sylvain Machefert', 'Sam J Watkins', 'Reddo' ),
	'version' => '0.2',
	'url' => 'http://www.mediawiki.org/wiki/Extension:MiniMp3'
);
 
function wfMp3( Parser &$parser ) {
	$parser->setHook('mp3', 'renderMp3');
	return true;
}
 
# The callback function for converting the input text to HTML output
function renderMp3( $input, $params ) {
	global $wgScriptPath;
	$output= '';
 
	//get params
	//if no color param given for specific element default to general color param
	//if no general color param given default to 000000
	$Color = isset( $params['color'] ) ? $params['color'] : '000000';
	if ( $Color == '') 
	{
		$Color = '000000';
	}
 
	$slidColor = isset( $params['slidcolor'] ) ? $params['slidcolor'] : $Color ;
	$loadColor = isset( $params['loadcolor'] ) ? $params['loadcolor'] : $Color ;
	$buttColor = isset( $params['buttoncolor'] ) ? $params['buttoncolor'] : $Color ;
 
	$bg = isset( $params['bg'] ) ? $params['bg'] : 'C0C0C0'; 
        if ( $bg == '')
        {
                $bg = 'C0C0C0';
        }
 
	//do background code
	$backgroundCode = Html::element( 'param', array( 'name' => "wmode", 'value' => "transparent" ) );
	if ($bg != ''){
		$backgroundCode = Html::element( 'param', array( 'name' => "bgcolor", 'value' => "#{$bg}" ) );
	}
 
	//File uploaded or external link ?
	$img = wfFindFile($input);
	if (!$img) { 
		$mp3 = $input;
	} 
	else { 
		$mp3 = $img->getFullURL();
	}
 
	unset($img);
 
	$flashFile = $wgScriptPath.'/extensions/MiniMp3/player_mp3_mini.swf';
 
	$output .= '<object type="application/x-shockwave-flash" data="'.$flashFile.'" width="200" height="20">'
	. Html::element( 'param', array( 'name' => "movie", 'value' => "{$flashFile}" ) )
	. $backgroundCode
	. Html::element( 'param', array( 'name' => "buttoncolor", 'value' => "#{$buttColor}" ) )
	. Html::element( 'param', array( 'name' => "slidercolor", 'value' => "#{$slidColor}" ) )
	. Html::element( 'param', array( 'name' => "FlashVars", 'value' => wfArrayToCGI( array( 'mp3' => $mp3, 'bgcolor' => $bg, 'loadingcolor' => $loadColor, 'buttoncolor' => $buttColor, 'slidercolor' => $slidColor ) ) ) )
	. '</object>';
 
	return $output;
}
 
class MiniMp3Handler extends MediaHandler {
 
	function validateParam( $name, $value ) { return true; }
	function makeParamString( $params ) { return ''; }
	function parseParamString( $string ) { return array(); }
	function normaliseParams( $file, &$params ) { return true; }
	function getImageSize( $file, $path ) { return false; }
 
	function getParamMap() {
		return array(
			'mp3_color' => 'color',
			'mp3_slidecolor' => 'slidcolor',
			'mp3_loadcolor' => 'loadcolor',
			'mp3_buttoncolor' => 'buttoncolor',
			'mp3_backColor' => 'bg',
		);
	}
 
	# Prevent "no higher resolution" message.
	function mustRender( $file ) { return true; }
 
	function doTransform ( $file, $dstPath, $dstUrl, $params, $flags = 0 ) {
		return new Mp3Output( $this->getParamMap (), $file->getFullUrl () );
	}
}
 
class Mp3Output extends MediaTransformOutput {
var $buttColor, $slidColor, $loadColor, $bg, $mp3;
 
	function __construct( $params, $mp3 ){
		$Color = isset( $params['color'] ) ? $params['color'] : '50A6C2';
		if ( $Color == '') 
		{
			$Color = '50A6C2';
		}
 
		$this->slidColor = isset( $params['mp3_slidecolor'] ) ? $params['mp3_slidecolor'] : $Color ;
		$this->loadColor = isset( $params['mp3_loadcolor'] ) ? $params['mp3_loadcolor'] : $Color ;
		$this->buttColor = isset( $params['mp3_buttoncolor'] ) ? $params['mp3_buttoncolor'] : $Color ;
		$this->bg = isset( $params['mp3_backColor'] ) ? $params['mp3_backColor'] : ''; 
 
		$this->mp3 = $mp3;
	}
 
	function toHtml( $options=array () ) {
		$backgroundCode = Html::element( 'param', array( 'name' => "wmode", 'value' => "transparent" ) );
		if ($bg != ''){
			$backgroundCode = Html::element( 'param', array( 'name' => "bgcolor", 'value' => "#{$bg}" ) );
		}
 
		$flashFile = '/w/extensions/MiniMp3/player_mp3_mini.swf';
 
		$output .= '<object type="application/x-shockwave-flash" data="'.$flashFile.'" width="200" height="20">'
		. Html::element( 'param', array( 'name' => "movie", 'value' => "{$flashFile}" ) )
		. $backgroundCode
		. Html::element( 'param', array( 'name' => "buttoncolor", 'value' => "#{$this->buttColor}" ) )
		. Html::element( 'param', array( 'name' => "slidercolor", 'value' => "#{$this->slidColor}" ) )
		. Html::element( 'param', array( 'name' => "loadingcolor", 'value' => "#{$this->loadColor}" ) )
		. Html::element( 'param', array( 'name' => "FlashVars", 'value' => wfArrayToCGI( array( 'mp3' => $this->mp3, 'bgcolor' => $this->bg, 'loadingcolor' => $this->loadColor, 'buttoncolor' => $this->buttColor, 'slidercolor' => $this->slidColor ) ) ) )
		. '</object>';
 
		return $output;
	}
}

To DO[edit | edit source]

  • fix any XSS problems
  • get [[File:blah.mp3|color=00FF00]] to work, although I've been told on IRC it can't be done without changes to the core