| Current Path : /var/www/element/data/www/wiki.element.ru/extensions/MediawikiPlayer/ |
| Current File : /var/www/element/data/www/wiki.element.ru/extensions/MediawikiPlayer/MediawikiPlayer.php |
<?php
/***********************************************************
* Name: MediawikiPlayer
* Desc: Embedds a mediaplayer into a wiki page
*
* Version: 0.2.0
*
* Author: Andrew Fitzgerald (contact@swiftlytilting.com)
* Homepage: http://www.mediawiki.org/wiki/Extension:MediawikiPlayer
* http://www.swiftlytilting.com/
*
* License: GNU GPL
*
***********************************************************
*/
$wgExtensionCredits['parserhook'][] = array(
'name' => 'MediawikiPlayer',
'author' =>'<a href="http://swiftlytilting.com">Andrew Fitzgerald</a>',
'url' => 'http://www.mediawiki.org/wiki/Extension:MediawikiPlayer',
'description' => 'Embedds a mediaplayer into a wiki page',
'descriptionmsg' => "mediawikiplayer-desc", // Same as above but name of a message, for i18n - string, added in 1.12.0
'version' => '0.2.0',
'path' => __FILE__,
);
//Avoid unstubbing $wgParser on setHook() too early on modern (1.12+) MW versions, as per r35980
if ( defined( 'MW_SUPPORTS_PARSERFIRSTCALLINIT' ) ) {
$wgHooks['ParserFirstCallInit'][] = 'efMWPlayerSetup';
} else { // Otherwise do things the old fashioned way
$wgExtensionFunctions[] = 'efMWPlayerSetup';
}
function efMWPlayerSetup() {
global $wgParser, $MWPlayerID;
$MWPlayerID = 0;
$wgParser->setHook( 'mediaplayer', 'efMWPlayerRender' );
$wgParser->setHook( 'mp3player', 'efMWPlayerRenderMP3' );
return true;
}
function efMWPlayerRenderMP3( $input, $args, $parser ) {
$args['height'] = '20';
return efMWPlayerRender( $input, $args, $parser);
}
function efMWPlayerRender( $input, $args, $parser ) {
global $wgMWPlayerID, $wgScriptPath;
$wgMWPlayerID++;
if (!isset($wgMWPlayerDir))
{ $wgMWPlayerDir = $wgScriptPath . '/extensions/MediawikiPlayer';
}
if (strtolower(substr($input,0,5)) == 'file:')
{
$image = new Image(Title::makeTitleSafe("Image",$input));
$input = $image->getViewURL(false);
}
$playerUrl = $wgMWPlayerDir. '/player.swf';
$scriptUrl = $wgMWPlayerDir . '/swfobject.js';
$paramArr = array('allowfullscreen', 'allowscriptaccess', 'wmode', 'flashvars');
if (isset($wgMWPlayerConfig)
&& array_key_exists('MWPlayerConfig', $args)
&& array_key_exists($args['MWPlayerConfig'], $wgMWPlayerConfig))
{
$wgMWPlayerDefaultSettings = $wgMWPlayerConfig[$args['MWPlayerConfig']];
unset($args['MWPlayerConfig']);
} else if (!isset($wgMWPlayerDefaultSettings))
{
$wgMWPlayerDefaultSettings = array(
'width' => '400',
'height' => '300',
'allowfullscreen' => 'true',
'backcolor' => 'eeeeee',
);
}
foreach ($wgMWPlayerDefaultSettings as $n => $v)
{
if (!array_key_exists($n, $args))
{ $args[$n] = $v;
}
}
if ((!array_key_exists('file',$args)) && (trim($input) != ''))
{ $args['file'] = $input;
}
$code = "<span id='MWPlayer-$wgMWPlayerID'>The player will show in this paragraph</span>\n";
if ($wgMWPlayerID ==1 )
{ $code .= "<script type='text/javascript' src='$scriptUrl'></script>\n";
}
$code .= "<script type='text/javascript'>\n";
$code .= "// <![CDATA[\n";
$code .= "var s1 = new SWFObject('$playerUrl','player','$args[width]','$args[height]','9');\n";
foreach( $args as $name => $value )
{
$value = str_replace(array( ':PLAYERDIR:'), array( $wgMWPlayerDir ), $value);
// Escape output to prevent XSS
$name = efMWPlayerEscape($name);
$value = efMWPlayerEscape($value);
if (in_array($name,$paramArr))
{
$code .= "s1.addParam('$name','$value');\n";
} else
{
$code .= "s1.addVariable('$name','$value');\n";
}
}
$code .= "s1.write('MWPlayer-$wgMWPlayerID');\n";
$code .= "// ]]>\n";
$code .= "</script>";
return $code;
}
function efMWPlayerEscape($string)
{
return preg_replace_callback('%([^A-Za-z0-9 ])%',
create_function('$matches', 'return "\\x" . str_pad(dechex(ord($matches[1])), 2, "0", STR_PAD_LEFT);'),
$string);
}