Extension:PChartWiki

MediaWiki extensions manual
pChartWiki
Release status: unmaintained
Implementation Tag
Description Adds <pchart> tag for creating pCharts
Author(s) Ripley Jonez
MediaWiki
License GNU General Public License 2.0
Download No link

What can this extension do?

edit

The pChartWiki feature produces an embedded image from wikitext, much in the same way as Erik Zachte's EasyTimeline. It works as a wrapper for the pChart php class (Version 1.27d), http://pchart.sourceforge.net/

What isn't in this extension?

edit

The following methods have not been carried over from the original pChart class, but that doesn't mean they wont in the future.

  • ImportFromCSV
  • drawFromPNG
  • drawFromGIF
  • drawFromJPG
  • Stroke
  • setImageMap
  • getImageMap

Usage

edit

This code is INCOMPLETE and will only render a radar graph. It has NOT been TESTED for any vulnerabilities either.

Download instructions

edit

Please cut and paste the code found below and place it in $IP/extensions/ExtensionName/ExtensionName.php. Note: $IP stands for the root directory of your MediaWiki installation, the same directory that holds LocalSettings.php.

Installation

edit

To install this extension, add the following to LocalSettings.php:

#add configuration parameters here
#setup user rights here
require_once("$IP/extensions/pChartWiki/pChart.php");

Configuration parameters

edit

User rights

edit

Code

edit
<?php
/**
 * pChartWiki - pChart extension
 * To use, include this file from your LocalSettings.php
 * To configure, set members of $pChartWikiSettings after the inclusion
 *
 * @file
 * @ingroup Extensions
 * @author Ripley Jonez <xxx@gmail.com (nospam: xxx=endofzero)>
 * @license GNU General Public License version 2
 * @link http://www.mediawiki.org/wiki/Extension:pChartWiki Documentation
 */

//$fontPath = $IP.'/extensions/pChartWiki/pChart/Fonts';
$fontPath = '/usr/share/fonts/truetype/freefont';

require("$IP/extensions/pChartWiki/pChart/pData.class");
require("$IP/extensions/pChartWiki/pChart/pChart.class");

class pChartWikiSettings {
	// Update this timestamp to force older rendered timelines
	// to be generated when the page next gets rendered.
	// Can help to resolve old image-generation bugs.
	var $epochTimestamp = '20010115000000';
};

$pChartWikiSettings = new pChartWikiSettings;

$wgHooks['ParserFirstCallInit'][] = 'pChartWikiExtension';
$wgExtensionCredits['parserhook'][] = array(
	'path' => __FILE__,
	'name' => 'pChartWiki',
	'author' => 'Ripley Jonez',
	'url' => 'http://www.mediawiki.org/wiki/Extension:pChartWiki',
	'descriptionmsg' => 'pchart-desc',
	'license-name' => 'GPL-2.0',
);
$wgExtensionMessagesFiles['pChart'] = dirname(__FILE__) . '/pChart.i18n.php';

function pChartWikiExtension( &$parser ) {
	$parser->setHook( 'pchart', 'renderpChart' );
	return true;
}

function renderpChart( $pchartsrc ){
	global  $wgUploadDirectory, $wgUploadPath, $IP, $pChartWikiSettings, $wgArticlePath, $wgTmpDirectory, $wgRenderHashAppend, $fontPath;


$debug = FALSE;

// Class initialisation
$DataSet = new pData;

//Parse source into array based on lines
	$pChartArray = explode("\n", $pchartsrc);
//Create hash based on tag source
	$hash = md5( $pchartsrc );
//Create a filename based on the hash
	if ($wgRenderHashAppend != "")
		$hash = md5( $hash . $wgRenderHashAppend );
	$dest = $wgUploadDirectory."/pchart/";
	if ( ! is_dir( $dest ) ) { mkdir( $dest, 0777 ); }
	if ( ! is_dir( $wgTmpDirectory ) ) { mkdir( $wgTmpDirectory, 0777 ); }
	$fname = $dest . $hash;
	$previouslyFailed = file_exists( $fname.".err" );
	$previouslyRendered = file_exists( $fname.".png" );
	$expired = $previouslyRendered &&
		( filemtime( $fname.".png" ) <
			wfTimestamp( TS_UNIX, $wgTimelineSettings->epochTimestamp ) );

	if ( $expired || ( !$previouslyRendered && !$previouslyFailed ) ){

	// This time, make a list of attributes and their values,
	// and dump them, along with the user input
//Parse through array and create chart
foreach( $pChartArray as $name => $value ){
//Only process if $value isn't blank
	if (trim($value) != ""){
//Separate command with values
		$parseString = explode(":",$value);

		switch (strtolower(trim($parseString[0]))){
			case debug:
				$debug=True;
				$attr[] = htmlspecialchars( "ON Debug" );
			break;

			case addpoint:
				$inputSplit = explode(";",$parseString[1]);
				if (count($inputSplit)==1){
					$DataSet->AddPoint((explode("," , trim($inputSplit[0]))));
					$attr[] = htmlspecialchars( "\$DataSet->AddPoint(array(".$inputSplit[0]."))" );
				}elseif (count($inputSplit)==2){
					$DataSet->AddPoint((explode("," , trim($inputSplit[0]))),trim($inputSplit[1]));
					$attr[] = htmlspecialchars( "\$DataSet->AddPoint(array(".$inputSplit[0]."),".trim($inputSplit[1]).")");
				}elseif (count($inputSplit)==3){
					$DataSet->AddPoint((explode("," , trim($inputSplit[0]))),trim($inputSplit[1]),trim($inputSplit[2]));
					$attr[] = htmlspecialchars( "\$DataSet->AddPoint(array(".$inputSplit[0]."),".trim($inputSplit[1]).",".trim($inputSplit[2]).")");
				}else{
					$attr[] = '<strong>ERR: ' . htmlspecialchars( $name ) . '</strong> = ' . htmlspecialchars( $parseString[0]." -> ".$parseString[1] );
				}	
			break;

			case addserie:
				$DataSet->AddSerie(trim($parseString[1]));
				$attr[] = htmlspecialchars( "\$DataSet->AddSerie(".trim($parseString[1]).")" );
			break;

			case addallseries:
				$DataSet->AddAllSeries();
				$attr[] = htmlspecialchars( "\$DataSet->AddAllSeries()");
			break;

			case removeserie:
				$DataSet->RemoveSerie(trim($parseString[1]));
				$attr[] = htmlspecialchars( "\$DataSet->RemoveSerie(".trim($parseString[1]).")" );
			break;

			case setabsciselabelserie:
				$inputSplit = explode(";",$parseString[1]);
				if (count($inputSplit)==0){
					$DataSet->SetAbsciseLabelSerie();
					$attr[] = htmlspecialchars( "\$DataSet->SetAbsciseLabelSerie()");
				}elseif (count($inputSplit)==1){
					$DataSet->SetAbsciseLabelSerie(trim($parseString[1]));
					$attr[] = htmlspecialchars( "\$DataSet->SetAbsciseLabelSerie(".trim($parseString[1]).")");
				}
			break;

			case setseriename:
				$inputSplit = explode(";",$parseString[1]);
				if (count($inputSplit)==1){
					$DataSet->SetSerieName(trim($inputSplit[0]));
					$attr[] = htmlspecialchars( "\$DataSet->SetSerieName($inputSplit[0])");
				}elseif (count($inputSplit)==2){
					$DataSet->SetSerieName(trim($inputSplit[0]),trim($inputSplit[1]));
					$attr[] = htmlspecialchars( "\$DataSet->SetSerieName($inputSplit[0],$inputSplit[1])");
				}else{
					$attr[] = '<strong>ERR: ' . htmlspecialchars( $name ) . '</strong> = ' . htmlspecialchars( $parseString[0]." -> ".$parseString[1] );
				}
			break;

			case setyaxisname:
				$DataSet->SetYAxisName(trim($parseString[1]));
				$attr[] = htmlspecialchars( "\$DataSet->SetYAxisName($parseString[1])");
			break;

			case setxaxisname:
				$DataSet->SetXAxisName(trim($parseString[1]));
				$attr[] = htmlspecialchars( "\$DataSet->SetXAxisName($parseString[1])");
			break;

			case setyaxisformat:
				$DataSet->SetYAxisFormat(trim($parseString[1]));
				$attr[] = htmlspecialchars( "\$DataSet->SetYAxisFormat($parseString[1])");
			break;

			case setxaxisformat:
				$DataSet->SetXAxisFormat(trim($parseString[1]));
				$attr[] = htmlspecialchars( "\$DataSet->SetXAxisFormat($parseString[1])");
			break;

			case setyaxisunit:
				$DataSet->SetYAxisUnit(trim($parseString[1]));
				$attr[] = htmlspecialchars( "\$DataSet->SetYAxisUnit($parseString[1])");
			break;

			case setxaxisunit:
				$DataSet->SetXAxisUnit(trim($parseString[1]));
				$attr[] = htmlspecialchars( "\$DataSet->SetXAxisUnit(".trim($parseString[1]).")");
			break;

			case removeseriename:
				$DataSet->removeSerieName(trim($parseString[1]));
				$attr[] = htmlspecialchars( "\$DataSet->removeSerieName(".trim($parseString[1]).")");
			break;


			case pchart:
				$inputSplit = explode(",",$parseString[1]);
				$Test = new pChart(trim($inputSplit[0]),trim($inputSplit[1]));
				$attr[] = htmlspecialchars( "\$Test = new pChart($inputSplit[0],$inputSplit[1])");
			break;

			case drawbackground:
				$inputSplit = explode(",",$parseString[1]);
				if (count($inputSplit)==3){
					$Test->drawBackground(trim($inputSplit[0]),trim($inputSplit[1]),trim($inputSplit[2]));
					$attr[] = htmlspecialchars( "\$Test->drawBackground($inputSplit[0],$inputSplit[1],$inputSplit[2])");
				}else{
					$attr[] = '<strong>ERR: ' . htmlspecialchars( $name ) . '</strong> = ' . htmlspecialchars( $parseString[0]." -> ".$parseString[1] );
				}
			break;

			case setfontproperties:
				$inputSplit = explode(",",$parseString[1]);
				$Test->setFontProperties("$fontPath/$inputSplit[0]",$inputSplit[1]);
				$attr[] = htmlspecialchars( "\$Test->setFontProperties($fontPath/$inputSplit[0],$inputSplit[1])");
			break;

			case drawfilledroundedrectangle:
				$inputSplit = explode(",",$parseString[1]);
				$Test->drawFilledRoundedRectangle($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6],$inputSplit[7]);
				$attr[] = htmlspecialchars( "\$Test->drawFilledRoundedRectangle($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6],$inputSplit[7])");
			break;

			case drawroundedrectangle:
				$inputSplit = explode(",",$parseString[1]);
				$Test->drawRoundedRectangle($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6],$inputSplit[7]);
				$attr[] = htmlspecialchars( "\$Test->drawRoundedRectangle($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6],$inputSplit[7])");
			break;

			case setgrapharea:
				$inputSplit = explode(",",$parseString[1]);
				if (count($inputSplit)==4){
					$Test->setGraphArea($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3]);
					$attr[] = htmlspecialchars( "\$Test->setGraphArea($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3])");
				}else{
					$attr[] = '<strong>ERR: ' . htmlspecialchars( $name ) . '</strong> = ' . htmlspecialchars( $parseString[0]." -> ".$parseString[1] );
				}
			break;

			case drawtreshold:
				$inputSplit = explode(",",$parseString[1]);
				if (count($inputSplit)==4){
					$Test->drawTreshold($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3]);
					$attr[] = htmlspecialchars( "\$Test->drawTreshold($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3])");
				}elseif (count($inputSplit)==5){
					$Test->drawTreshold($inputSplit[0],$inputSplit[1],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4]);
					$attr[] = htmlspecialchars( "\$Test->drawTreshold($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4])");
				}elseif (count($inputSplit)==6){
					$Test->drawTreshold($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5]);
					$attr[] = htmlspecialchars( "\$Test->drawTreshold($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5])");
				}elseif (count($inputSplit)==7){
					$Test->SetSerieName($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6]);
					$attr[] = htmlspecialchars( "\$Test->drawTreshold($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6])");
				}elseif (count($inputSplit)==8){
					$Test->SetSerieName($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6],$inputSplit[7]);
					$attr[] = htmlspecialchars( "\$Test->drawTreshold($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6],$inputSplit[7])");
				}else{
					$attr[] = '<strong>ERR: ' . htmlspecialchars( $name ) . '</strong> = ' . htmlspecialchars( $parseString[0]." -> ".$parseString[1] );
				}
			break;

			case drawradaraxis:
				$inputSplit = explode(",",$parseString[1]);
				$Test->drawRadarAxis($DataSet->GetData(),$DataSet->GetDataDescription(),$inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6],$inputSplit[7]);
				$attr[] = htmlspecialchars( "\$Test->drawRadarAxis(\$DataSet->GetData(),\$DataSet->GetDataDescription(),$inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6],$inputSplit[7])");
			break;

			case drawfilledradar:
				$inputSplit = explode(",",$parseString[1]);
				$Test->drawFilledRadar($DataSet->GetData(),$DataSet->GetDataDescription(),$inputSplit[0],$inputSplit[1]);
				$attr[] = htmlspecialchars( "\$Test->drawFilledRadar(\$DataSet->GetData(),\$DataSet->GetDataDescription(),$inputSplit[0],$inputSplit[1])");
			break;

			case drawlegend:
				$inputSplit = explode(",",$parseString[1]);
				$Test->drawLegend($inputSplit[0],$inputSplit[1],$DataSet->GetDataDescription(),$inputSplit[2],$inputSplit[3],$inputSplit[4]);
				$attr[] = htmlspecialchars( "\$Test->drawLegend($inputSplit[0],$inputSplit[1],\$DataSet->GetDataDescription(),$inputSplit[2],$inputSplit[3],$inputSplit[4])");
			break;

			case drawtitle:
				$inputSplit = explode(",",$parseString[1]);
				$Test->drawTitle($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6]);
				$attr[] = htmlspecialchars( "\$Test->drawTitle($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6])");
			break;

			case drawbargraph:
			$inputSplit = explode(",",$parseString[1]);
				if ($inputSplit[0]=="TRUE"){
					$Test->drawBarGraph($DataSet->GetData(),$DataSet->GetDataDescription(),TRUE);
				}else{
					$Test->drawBarGraph($DataSet->GetData(),$DataSet->GetDataDescription(),FALSE);
				}
					$attr[] = htmlspecialchars( "\$Test->drawBarGraph($inputSplit[0])");
			break;

			case drawstackedbargraph:
			$inputSplit = explode(",",$parseString[1]);
				if ($inputSplit[0]=="TRUE"){
					$Test->drawStackedBarGraph($DataSet->GetData(),$DataSet->GetDataDescription(),TRUE);
				}else{
					$Test->drawStackedBarGraph($DataSet->GetData(),$DataSet->GetDataDescription(),FALSE);
				}
					$attr[] = htmlspecialchars( "\$Test->drawStackedBarGraph($inputSplit[0])");
			break;

			case drawplotgraph:
				$inputSplit = explode(",",$parseString[1]);
				$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,2,255,255,255); 
				$attr[] = htmlspecialchars( "\$Test->drawTitle($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6])");
			break;

			case setyaxisname:
				$DataSet->SetYAxisName("$parseString[1]");
				$attr[] = htmlspecialchars( "\$DataSet->SetYAxisName($parseString[1])");
			break;

			case setyaxisunit:
				$DataSet->SetYAxisUnit("$parseString[1]");
				$attr[] = htmlspecialchars( "\$DataSet->SetYAxisUnit($parseString[1])");
			break;

			case drawgrapharea:
				$inputSplit = explode(",",$parseString[1]);
				if (trim($inputSplit[3])=="TRUE"){
					$Test->drawGraphArea($inputSplit[0],$inputSplit[1],$inputSplit[2],TRUE);
					$attr[] = htmlspecialchars( "\$Test->drawGraphArea($inputSplit[0],$inputSplit[1],$inputSplit[2],TRUE)");
				}else{
					$Test->drawGraphArea($inputSplit[0],$inputSplit[1],$inputSplit[2],FALSE);				
					$attr[] = htmlspecialchars( "\$Test->drawGraphArea($inputSplit[0],$inputSplit[1],$inputSplit[2],FALSE)");
				}
			break;

			case drawscale:
				$inputSplit = explode(",",$parseString[1]);
				if (count($inputSplit)==8){
					if ($inputSplit[0]=="SCALE_NORMAL"){
						if ($inputSplit[4]=="TRUE"){
							if ($inputSplit[7]=="TRUE"){
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,$inputSplit[1],$inputSplit[2],$inputSplit[3],TRUE,$inputSplit[5],$inputSplit[6],TRUE);
							}else{
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,$inputSplit[1],$inputSplit[2],$inputSplit[3],TRUE,$inputSplit[5],$inputSplit[6],FALSE);			
							}
						}else{
							if ($inputSplit[7]=="TRUE"){
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,$inputSplit[1],$inputSplit[2],$inputSplit[3],FALSE,$inputSplit[5],$inputSplit[6],TRUE);
							}else{
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,$inputSplit[1],$inputSplit[2],$inputSplit[3],FALSE,$inputSplit[5],$inputSplit[6],FALSE);			
							}
						}
					}elseif ($inputSplit[0]=="SCALE_START0"){
						if ($inputSplit[4]=="TRUE"){
							if ($inputSplit[7]=="TRUE"){
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_START0,$inputSplit[1],$inputSplit[2],$inputSplit[3],TRUE,$inputSplit[5],$inputSplit[6],TRUE);
							}else{
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_START0,$inputSplit[1],$inputSplit[2],$inputSplit[3],TRUE,$inputSplit[5],$inputSplit[6],FALSE);			
							}
						}else{
							if ($inputSplit[7]=="TRUE"){
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_START0,$inputSplit[1],$inputSplit[2],$inputSplit[3],FALSE,$inputSplit[5],$inputSplit[6],TRUE);
							}else{
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_START0,$inputSplit[1],$inputSplit[2],$inputSplit[3],FALSE,$inputSplit[5],$inputSplit[6],FALSE);			
							}
						}
				        }elseif ($inputSplit[0]=="SCALE_ADDALL"){
						if ($inputSplit[4]=="TRUE"){
							if ($inputSplit[7]=="TRUE"){
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_ADDALL,$inputSplit[1],$inputSplit[2],$inputSplit[3],TRUE,$inputSplit[5],$inputSplit[6],TRUE);
							}else{
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_ADDALL,$inputSplit[1],$inputSplit[2],$inputSplit[3],TRUE,$inputSplit[5],$inputSplit[6],FALSE);			
							}
						}else{
							if ($inputSplit[7]=="TRUE"){
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_ADDALL,$inputSplit[1],$inputSplit[2],$inputSplit[3],FALSE,$inputSplit[5],$inputSplit[6],TRUE);
							}else{
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_ADDALL,$inputSplit[1],$inputSplit[2],$inputSplit[3],FALSE,$inputSplit[5],$inputSplit[6],FALSE);			
							}
						}
					}elseif ($inputSplit[0]=="SCALE_ADDALLSTART0"){
						if ($inputSplit[4]=="TRUE"){
							if ($inputSplit[7]=="TRUE"){
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_ADDALLSTART0,$inputSplit[1],$inputSplit[2],$inputSplit[3],TRUE,$inputSplit[5],$inputSplit[6],TRUE);
							}else{
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_ADDALLSTART0,$inputSplit[1],$inputSplit[2],$inputSplit[3],TRUE,$inputSplit[5],$inputSplit[6],FALSE);			
							}
						}else{
							if ($inputSplit[7]=="TRUE"){
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_ADDALLSTART0,$inputSplit[1],$inputSplit[2],$inputSplit[3],FALSE,$inputSplit[5],$inputSplit[6],TRUE);
							}else{
								$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_ADDALLSTART0,$inputSplit[1],$inputSplit[2],$inputSplit[3],FALSE,$inputSplit[5],$inputSplit[6],FALSE);			
							}
						}
					}
				}else{
					$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,$inputSplit[1],$inputSplit[2],$inputSplit[3],TRUE,$inputSplit[5],$inputSplit[6]);
				}
				$attr[] = htmlspecialchars( "\$Test->drawScale(\$DataSet->GetData(),\$DataSet->GetDataDescription(),$inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6])");
			break;

			case drawrightscale:
				$inputSplit = explode(",",$parseString[1]);
				$Test->drawRightScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,$inputSplit[1],$inputSplit[2],$inputSplit[3],TRUE,$inputSplit[5],$inputSplit[6]);
				$attr[] = htmlspecialchars( "\$Test->drawRightScale(\$DataSet->GetData(),\$DataSet->GetDataDescription(),$inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5],$inputSplit[6])");
			break;

			case drawgrid:
				$inputSplit = explode(",",$parseString[1]);
				$Test->drawGrid($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5]);
				$attr[] = htmlspecialchars( "\$Test->drawGrid($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5])");
			break;

			case drawlinegraph:
				$inputSplit = explode(",",$parseString[1]);
				$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
				$attr[] = htmlspecialchars( "\$Test->drawLineGraph(\$DataSet->GetData(),\$DataSet->GetDataDescription())");
			break;
	
			case drawcubiccurve:
				$inputSplit = explode(",",$parseString[1]);
				$Test->drawCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription());
				$attr[] = htmlspecialchars( "\$Test->drawCubicCurve(\$DataSet->GetData(),\$DataSet->GetDataDescription())");
			break;

			case drawfilledcubiccurve:
				$inputSplit = explode(",",$parseString[1]);
				$Test->drawFilledCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription(),trim($inputSplit[0]),trim($inputSplit[1]));
				$attr[] = htmlspecialchars( "\$Test->drawFilledCubicCurve(\$DataSet->GetData(),\$DataSet->GetDataDescription(),$inputSplit[0],$inputSplit[1])");
			break;

			case setfixedscale:
				$inputSplit = explode(",",$parseString[1]);
				if (count($inputSplit)==2){
					$Test->setFixedScale($inputSplit[0],$inputSplit[1]);
					$attr[] = htmlspecialchars( "\$Test->setFixedScale($inputSplit[0],$inputSplit[1])");
				}elseif (count($inputSplit)==5){
					$Test->setFixedScale($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5]);
					$attr[] = htmlspecialchars( "\$Test->setFixedScale($inputSplit[0],$inputSplit[1],$inputSplit[2],$inputSplit[3],$inputSplit[4],$inputSplit[5])");
				}
			break;

			default:
				$attr[] = '<strong>ERR: ' . htmlspecialchars( $name ) . '</strong> = ' . htmlspecialchars( $parseString[0]." -> ".$parseString[1] );
		}			
	} // if
} // foreach

//$Test->setLabel($DataSet->GetData(),$DataSet->GetDataDescription(),"Serie1",3,"Test");
//$Test->reportWarnings("GD");
$Test->Render($fname.".png");

//echo $fname;

		if (wfIsWindows()) {
			$ext = "gif";
		} else {
			$ext = "png";
		}

		$url = "{$wgUploadPath}/pchart/{$hash}.{$ext}";
		$txt = "<img src=\"" . htmlspecialchars( $url ) . "\">";
		if( $expired ) {
			// Replacing an older file, we may need to purge the old one.
			global $wgUseSquid;
			if( $wgUseSquid ) {
				$u = new SquidUpdate( array( $url ) );
				$u->doUpdate();
			}
		}
	}
	if ($debug==True){
	return $txt . implode( '<br />', $attr ) . "\n\n" . htmlspecialchars( $input );
	}else{
	return $txt;
	}
}

?>
edit