From OrganicDesign Wiki
(Redirected from
Flashlets.php)
<?php
# Flashlets Extension
# - Allows ActionScript code to render in the page a SWF using the MTASC (http://www.mtasc.org) SWF compiler
# - Version 1.02 (2007-05-05)
# - See http://www.mediawiki.org/wiki/Extension:Flashlets for installation and usage details
# - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
# - Author: http://www.organicdesign.co.nz/nad
define('FLASHLETS_VERSION','1.0.4, 2007-09-04');
$wgFlashletsMagic = "swf"; # The tag name for embedding a SWF
$wgFlashletsMTASC = dirname(__FILE__)."/mtasc/mtasc"; # Command used to launch the MTASC executable
$wgFlashletsCP = dirname(__FILE__)."/mtasc/std"; # Directory containing the MTASC class headers
$wgFlashletsPath = $wgUploadPath; # The client-side path to the directory containing the SWF's
$wgFlashletsDirectory = $wgUploadDirectory; # The server-side path to the directory containing the SWF's
$wgFlashletsExpandTemplates = true; # Expand mediawiki templates before compiling
$wgExtensionFunctions[] = 'wfSetupFlashlets';
$wgExtensionCredits['parserhook'][] = array(
'name' => 'Flashlets',
'description' => 'Actionscript rendering of SWF movies',
'url' => 'http://www.mediawiki.org/wiki/Extension:Flashlets',
'author' => '[http://www.organicdesign.co.nz/nad User:Nad]',
'version' => FLASHLETS_VERSION
);
class Flashlets {
var $version = FLASHLETS_VERSION;
var $expire = 100; # Number of minutes a generated SWF lives for without being accessed
var $container; # Location if the SWF container needed by the compiler
# Constructor
function Flashlets() {
global $IP,$wgParser, $wgFlashletsMagic;
$this->container = dirname(__FILE__).'/container.swf';
$wgParser->setHook($wgFlashletsMagic,array($this, 'tagHook'));
}
# Convert the $magic tags to client-side javascript request code from its stored parameters
function tagHook($actionscript, $argv, &$parser) {
global $wgFlashletsMTASC, $wgFlashletsCP, $wgFlashletsDirectory, $wgFlashletsPath, $wgFlashletsExpandTemplates;
# convert args to command-line switches
$width = isset($argv['width']) ? intval($argv['width']) : 300;
$height = isset($argv['height']) ? intval($argv['height']) : 200;
$fps = isset($argv['fps']) ? intval($argv['fps']) : 25;
$bgcolor = isset($argv['bgcolor']) ? $argv['bgcolor'] : '#ffffff';
$caption = isset($argv['caption']) ? $argv['caption'] : false;
$ver = isset($argv['ver']) ? $argv['ver'] : 6;
$quality = isset($argv['quality']) ? $argv['quality'] :'high';
if (isset($argv['src'])) {
$swf = $argv['src'];
$html = "\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
<tr><td><object type=\"application/x-shockwave-flash\" data=\"$swf\" width=\"$width\" height=\"$height\">
<param name=\"movie\" value=\"$swf\" />
<param name=\"bgcolor\" value=\"$bgcolor\"/>
<param name=\"quality\" value=\"$quality\"/>
</object></td></tr>\n";
if ($caption) $html .= "\n<tr><td align=\"center\"><a href=\"$swf\">$caption</a></td></tr>\n";
$html .= "</table>";
return $html;
}
if ($wgFlashletsMTASC == '') return "\n<br><b>SWF compiling is disabled!</b>";
/*
# delete swf's older than cache-expiry
$expiry = $now - $this->expire;
if ($handle = opendir($wgFlashletsDirectory)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$stat = stat($file);
#if ($stat[8] < $expire) unlink($file);
}
}
}
closedir($handle);
*/
# expand templates before compiling
if ($wgFlashletsExpandTemplates) $actionscript = $parser->replaceVariables($actionscript);
# create swf filename unique to the actionscript content and parameters
$swf = md5("$actionscript$ver$width$height$fps");
$file = "$wgFlashletsDirectory/$swf";
$path = "$wgFlashletsPath/$swf.swf";
# Compile the SWF if it doesn't already exist
if (!file_exists("$file.swf")) {
# Write the actionscript to a file for MTASC to compile from
if ($handle = fopen("$file.as", 'w+')) {
fwrite($handle,$actionscript);
fclose($handle);
$cont = $this->container;
$sh = "$wgFlashletsMTASC -cp $wgFlashletsCP -swf $cont -out $file.swf -main -version $ver -header $width:$height:$fps $file.as 2>&1";
$html = shell_exec($sh);
unlink("$file.as");
} else $html = "Could not open '$file.as' for writing!";
}
# If the SWF exists, return the HTMLcode to request and embed the SWF otherwise return error information
if (file_exists("$file.swf")) {
$html = "\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
<tr><td><object type=\"application/x-shockwave-flash\" data=\"$path\" width=\"$width\" height=\"$height\">
<param name=\"movie\" value=\"$path\" />
<param name=\"bgcolor\" value=\"$bgcolor\"/>
<param name=\"quality\" value=\"$quality\"/>
</object></td></tr>\n";
if ($caption) $html .= "\n<tr><td align=\"center\"><a href=\"$wgFlashletsPath/$swf.swf\">$caption</a></td></tr>\n";
$html .= "</table>";
} else $html = "\n<br><b>Error compiling SWF: </b>$html
\n";
return $html;
}
}
/**
* Called from $wgExtensionFunctions array when initialising extensions
*/
function wfSetupFlashlets() {
global $wgFlashlets;
$wgFlashlets = new Flashlets();
}