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 (experimental)

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

[edit] Usage

<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 transparent, if the color value is not given it defaults to a blue color

[edit] Requirements

  • player_mp3_mini.swf in your extensions/MiniMp3 directory

[edit] Install instructions

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');

[edit] PHP code (copy from here!)

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 50A6C2
        $Color = isset( $params['color'] ) ? $params['color'] : '50A6C2';
        if ( $Color == '') 
        {
                $Color = '50A6C2';
        }
 
        $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'] : ''; 
 
        //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;
        }
}

[edit] To DO

  • 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
Personal tools
Namespaces

Variants
Actions
Navigation
Support
Download
Development
Communication
Print/export
Toolbox