+<?php\r
+ /*\r
+ pData - Simplifying data population for pChart\r
+ Copyright (C) 2008 Jean-Damien POGOLOTTI\r
+ Version 1.13 last updated on 08/17/08\r
+\r
+ http://pchart.sourceforge.net\r
+\r
+ This program is free software: you can redistribute it and/or modify\r
+ it under the terms of the GNU General Public License as published by\r
+ the Free Software Foundation, either version 1,2,3 of the License, or\r
+ (at your option) any later version.\r
+\r
+ This program is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with this program. If not, see <http://www.gnu.org/licenses/>.\r
+\r
+ Class initialisation :\r
+ pData()\r
+ Data populating methods :\r
+ ImportFromCSV($FileName,$Delimiter=",",$DataColumns=-1,$HasHeader=FALSE,$DataName=-1)\r
+ AddPoint($Value,$Serie="Serie1",$Description="")\r
+ Series manipulation methods :\r
+ AddSerie($SerieName="Serie1")\r
+ AddAllSeries()\r
+ RemoveSerie($SerieName="Serie1")\r
+ SetAbsciseLabelSerie($SerieName = "Name")\r
+ SetSerieName($Name,$SerieName="Serie1")\r
+ + SetSerieSymbol($Name,$Symbol)\r
+ SetXAxisName($Name="X Axis")\r
+ SetYAxisName($Name="Y Axis")\r
+ SetXAxisFormat($Format="number")\r
+ SetYAxisFormat($Format="number")\r
+ SetXAxisUnit($Unit="")\r
+ SetYAxisUnit($Unit="")\r
+ removeSerieName($SerieName)\r
+ removeAllSeries()\r
+ Data retrieval methods :\r
+ GetData()\r
+ GetDataDescription()\r
+ */\r
+\r
+ /* pData class definition */\r
+ class pData\r
+ {\r
+ var $Data;\r
+ var $DataDescription;\r
+\r
+ function pData()\r
+ {\r
+ $this->Data = "";\r
+ $this->DataDescription = "";\r
+ $this->DataDescription["Position"] = "Name";\r
+ $this->DataDescription["Format"]["X"] = "number";\r
+ $this->DataDescription["Format"]["Y"] = "number";\r
+ $this->DataDescription["Unit"]["X"] = NULL;\r
+ $this->DataDescription["Unit"]["Y"] = NULL;\r
+ }\r
+\r
+ function ImportFromCSV($FileName,$Delimiter=",",$DataColumns=-1,$HasHeader=FALSE,$DataName=-1)\r
+ {\r
+ $handle = @fopen($FileName,"r");\r
+ if ($handle)\r
+ {\r
+ $HeaderParsed = FALSE;\r
+ while (!feof($handle))\r
+ {\r
+ $buffer = fgets($handle, 4096);\r
+ $buffer = str_replace(chr(10),"",$buffer);\r
+ $buffer = str_replace(chr(13),"",$buffer);\r
+ $Values = split($Delimiter,$buffer);\r
+\r
+ if ( $buffer != "" )\r
+ {\r
+ if ( $HasHeader == TRUE && $HeaderParsed == FALSE )\r
+ {\r
+ if ( $DataColumns == -1 )\r
+ {\r
+ $ID = 1;\r
+ foreach($Values as $key => $Value)\r
+ { $this->SetSerieName($Value,"Serie".$ID); $ID++; }\r
+ }\r
+ else\r
+ {\r
+ $SerieName = "";\r
+\r
+ foreach($DataColumns as $key => $Value)\r
+ $this->SetSerieName($Values[$Value],"Serie".$Value);\r
+ }\r
+ $HeaderParsed = TRUE;\r
+ }\r
+ else\r
+ {\r
+ if ( $DataColumns == -1 )\r
+ {\r
+ $ID = 1;\r
+ foreach($Values as $key => $Value)\r
+ { $this->AddPoint(intval($Value),"Serie".$ID); $ID++; }\r
+ }\r
+ else\r
+ {\r
+ $SerieName = "";\r
+ if ( $DataName != -1 )\r
+ $SerieName = $Values[$DataName];\r
+\r
+ foreach($DataColumns as $key => $Value)\r
+ $this->AddPoint($Values[$Value],"Serie".$Value,$SerieName);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ fclose($handle);\r
+ }\r
+ }\r
+\r
+ function AddPoint($Value,$Serie="Serie1",$Description="")\r
+ {\r
+ if (is_array($Value) && count($Value) == 1)\r
+ $Value = $Value[0];\r
+\r
+ $ID = 0;\r
+ for($i=0;$i<=count($this->Data);$i++)\r
+ { if(isset($this->Data[$i][$Serie])) { $ID = $i+1; } }\r
+\r
+ if ( count($Value) == 1 )\r
+ {\r
+ $this->Data[$ID][$Serie] = $Value;\r
+ if ( $Description != "" )\r
+ $this->Data[$ID]["Name"] = $Description;\r
+ elseif (!isset($this->Data[$ID]["Name"]))\r
+ $this->Data[$ID]["Name"] = $ID;\r
+ }\r
+ else\r
+ {\r
+ foreach($Value as $key => $Val)\r
+ {\r
+ $this->Data[$ID][$Serie] = $Val;\r
+ if (!isset($this->Data[$ID]["Name"]))\r
+ $this->Data[$ID]["Name"] = $ID;\r
+ $ID++;\r
+ }\r
+ }\r
+ }\r
+\r
+ function AddSerie($SerieName="Serie1")\r
+ {\r
+ if ( !isset($this->DataDescription["Values"]) )\r
+ {\r
+ $this->DataDescription["Values"][] = $SerieName;\r
+ }\r
+ else\r
+ {\r
+ $Found = FALSE;\r
+ foreach($this->DataDescription["Values"] as $key => $Value )\r
+ if ( $Value == $SerieName ) { $Found = TRUE; }\r
+\r
+ if ( !$Found )\r
+ $this->DataDescription["Values"][] = $SerieName;\r
+ }\r
+ }\r
+\r
+ function AddAllSeries()\r
+ {\r
+ unset($this->DataDescription["Values"]);\r
+\r
+ if ( isset($this->Data[0]) )\r
+ {\r
+ foreach($this->Data[0] as $Key => $Value)\r
+ {\r
+ if ( $Key != "Name" )\r
+ $this->DataDescription["Values"][] = $Key;\r
+ }\r
+ }\r
+ }\r
+\r
+ function RemoveSerie($SerieName="Serie1")\r
+ {\r
+ if ( !isset($this->DataDescription["Values"]) )\r
+ return(0);\r
+\r
+ $Found = FALSE;\r
+ foreach($this->DataDescription["Values"] as $key => $Value )\r
+ {\r
+ if ( $Value == $SerieName )\r
+ unset($this->DataDescription["Values"][$key]);\r
+ }\r
+ }\r
+\r
+ function SetAbsciseLabelSerie($SerieName = "Name")\r
+ {\r
+ $this->DataDescription["Position"] = $SerieName;\r
+ }\r
+\r
+ function SetSerieName($Name,$SerieName="Serie1")\r
+ {\r
+ $this->DataDescription["Description"][$SerieName] = $Name;\r
+ }\r
+\r
+ function SetXAxisName($Name="X Axis")\r
+ {\r
+ $this->DataDescription["Axis"]["X"] = $Name;\r
+ }\r
+\r
+ function SetYAxisName($Name="Y Axis")\r
+ {\r
+ $this->DataDescription["Axis"]["Y"] = $Name;\r
+ }\r
+\r
+ function SetXAxisFormat($Format="number")\r
+ {\r
+ $this->DataDescription["Format"]["X"] = $Format;\r
+ }\r
+\r
+ function SetYAxisFormat($Format="number")\r
+ {\r
+ $this->DataDescription["Format"]["Y"] = $Format;\r
+ }\r
+\r
+ function SetXAxisUnit($Unit="")\r
+ {\r
+ $this->DataDescription["Unit"]["X"] = $Unit;\r
+ }\r
+\r
+ function SetYAxisUnit($Unit="")\r
+ {\r
+ $this->DataDescription["Unit"]["Y"] = $Unit;\r
+ }\r
+\r
+ function SetSerieSymbol($Name,$Symbol)\r
+ {\r
+ $this->DataDescription["Symbol"][$Name] = $Symbol;\r
+ }\r
+\r
+ function removeSerieName($SerieName)\r
+ {\r
+ if ( isset($this->DataDescription["Description"][$SerieName]) )\r
+ unset($this->DataDescription["Description"][$SerieName]);\r
+ }\r
+\r
+ function removeAllSeries()\r
+ {\r
+ foreach($this->DataDescription["Values"] as $Key => $Value)\r
+ unset($this->DataDescription["Values"][$Key]);\r
+ }\r
+\r
+ function GetData()\r
+ {\r
+ return($this->Data);\r
+ }\r
+\r
+ function GetDataDescription()\r
+ {\r
+ return($this->DataDescription);\r
+ }\r
+ }\r
+?>
\ No newline at end of file