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)
Last version tested on 1.18 but probably on earlier version too
License No license specified
Download see below
Check usage and version matrix

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.

Contents

Usage [edit]

<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>
[[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]

  • player_mp3_mini.swf in your extensions/MiniMp3 directory

Install instructions [edit]

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]

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]

  • 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