single series, 2=> multi-series, 5=>Gantt ( # For Future Use : 3=> scatter and bubble, 4=> MSStacked var $seriesType; # Charts Atribute array var $chartParams = array(); #List of Chart Parameters var $chartParamsCounter; #Number of Chart parameters var $categoriesParam; # Categories Parameter Setting var $categoryNames = array(); # Category array for storing Category set var $categoryNamesCounter; # Category array counter var $dataset = array(); # dataset array var $datasetParam = array(); # dataset parameter setting array var $datasetCounter; # dataset array counter var $setCounter; # set array counter # trendLines array var $trendLines = array(); # trendLines array var $tLineCounter; # trendLines array counter #chart messages var $chartMSG; var $chartSWF = array(); # Charts SWF array var $arr_FCColors = array(); # Color Set to be applied to dataplots #############============ For Gantt Chart ============================ # Gantt categories var $GT_categories = array(); var $GT_categories_Counter; var $GT_categoriesParam = array(); var $GT_subcategories_Counter; # Gantt processes var $GT_processes = array(); var $GT_processes_Counter; var $GT_processes_Param; # Gantt Tasks var $GT_Tasks = array(); var $GT_Tasks_Counter; var $GT_Tasks_Param; # Gantt Connectors var $GT_Connectors = array(); var $GT_Connectors_Counter; var $GT_Connectors_Param; # Gantt Milestones var $GT_Milestones = array(); var $GT_Milestones_Counter; var $GT_Milestones_Param; # Gantt datatable var $GT_datatable = array(); var $GT_datatable_Counter; var $GT_datatableParam; var $GT_dataColumnParam = array(); var $GT_subdatatable_Counter; #------- For Futute Use (start)---------------- # Gantt legend var $GT_legend = array(); var $GT_legend_Counter; var $GT_legend_Param; #------- For Futute Use (end)---------------- # JS Constrator var $debugMode; var $registerWithJS; var $bgColor; var $scaleMode; var $lang; #############============ For Future Use (start)============================ # dataset for MSStackedColumn2D var $MSSDataset = array(); # dataset array for MSStackedColumn2D var $MSSDatasetParams = array(); # MSSDataset parameter setting var $MSSDatasetCounter; # MSSDataset array counter var $MSSSubDatasetCounter; # ms sub dataset array counter var $MSSSetCounter; # msset array counter # lineset var $lineSet = array(); # lineSet array var $lineSetParam = array(); # lineSet Parameter setting array var $lineCounter; # line array counter var $lineSetCounter; # lineset array counter var $lineIDCounter; # lineID counter; # vtrendLines array var $vtrendLines = array(); # vtrendLines array var $vtLineCounter; # vtrendLines array counter # style array var $styles = array(); # styles array var $styleDefCounter; # define counter var $styleAppCounter; # apply counter #############============ For Future Use (end)============================ # FusionCharts Constructor, its take 4 Parameters. # when we create object of FusionCharts, then Constructor will auto run and initialize # chats array parameter like chartType, width, height, chartsID function FusionCharts($chartType,$width,$height,$chartID=""){ # Setting All Charts Array $this->setChartArrays(); #initialise colorList $this->colorInit(); # Setting Chart name $this->chartType=strtolower($chartType); # Getting Charts Series Type $this->getSeriesType(); # Setting Charts Width and Height $this->width=$width; $this->height=$height; # Setting ChartID, Defult is Charts Name if ($chartID==""){ $chartCounter=@$_SESSION['chartcount']; if($chartCounter<=0 || $chartCounter==NULL){ $chartCounter=1; } $this->chartID=$chartType . $chartCounter; $_SESSION['chartcount']=++$chartCounter; }else{ $this->chartID=$chartID; } # Setting Defult Parameter Delimiter to ';' $this->del=";"; # Setting Default SWF Path $this->SWFPath=""; $this->SWFFile=$this->SWFPath . "FCF_" . $this->chartSWF[$this->chartType][0] . ".swf"; # Initialize categoriesParam $this->categoriesParam=""; $this->categoryNamesCounter=1; # Creating Category Array $this->createCategory($this->categoryNamesCounter); # Initialize Dataset Variables $this->datasetCounter=0; $this->setCounter= 0; if($this->seriesType>1){ $this->setCounter++; } # Initialize MSSDataset Variables if($this->seriesType==4){ $this->MSSDatasetCounter=0; $this->MSSSubDatasetCounter=0; $this->MSSSetCounter=0; $this->lineCounter=0; $this->lineSetCounter=0; $this->lineIDCounter=0; } # vTrendLines Array inisialize if($this->seriesType==3){ $this->vtLineCounter=1; $this->createvTrendLines($this->vtLineCounter); } # TrendLines Array inisialize $this->tLineCounter=1; $this->createTrendLines($this->tLineCounter); # Styles Array inisialize $this->styleDefCounter=1; $this->styleAppCounter=1; $this->createStyles("definition"); $this->createSubStyles("definition","style"); $this->createSubStylesParam("definition","style",$this->styleDefCounter); $this->GT_categories_Counter=0; $this->GT_subcategories_Counter=0; $this->GT_processes_Counter=0; $this->GT_processes_Param=""; $this->GT_Tasks_Counter=0; $this->GT_Tasks_Param=""; # Gantt Connectors $this->GT_Connectors_Counter=0; $this->GT_Connectors_Param=""; # Gantt datatable $this->GT_datatable_Counter=0; $this->GT_datatableParam=""; $this->GT_subdatatable_Counter=0; # Gantt legend $this->GT_legend_Counter=0; $this->GT_legend_Param=""; # JS Constractor $this->debugMode=false; $this->registerWithJS=false; $this->bgColor=""; $this->scaleMode=""; $this->lang=""; $this->chartMSG=""; # XML store Variables $this->strXML=""; } ##------------ PUBLIC FUNCTIONS ---------------------------------------------------------------- # Setting Parameter Delimiter, Defult Parameter Separator is ";" function setParamDelimiter($strDel){ $this->del=$strDel; } # Setting path of SWF file. file name like FCF_Column3D.swf. where FCF_ is common for all SWF file function setSWFPath($SWFPath){ $this->SWFPath=$SWFPath; $this->SWFFile=$this->SWFPath . "FCF_" . $this->chartSWF[$this->chartType][0] . ".swf"; } # We can add or change single Chart parameter by setChartParam function # its take Parameter Name and its Value function setChartParam($paramName, $paramValue){ $this->chartParams[$paramName]=$this->encodeSpecialChars($paramValue); } # We can add or change Chart parameter sets by setChartParams function # its take parameterset [ caption=xyz caption;subCaption=abcd abcd abcd;xAxisName=x axis;yAxisName=y's axis;bgColor=f2fec0;animation=1 ] # Defult Parameter Separator is ";" function setChartParams($strParam){ $listArray=explode($this->del,$strParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $this->chartParams[$paramValue[0]]=$this->encodeSpecialChars($paramValue[1]); } } } # Setting Categories Parameter into categoriesParam variables function setCategoriesParams($strParam){ $listArray=explode($this->del,$strParam); # Fetching all value and converting into xml attribute foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $this->categoriesParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # Function addCategoryFromDatabase adding Category from dataset function addCategoryFromDatabase($query_result, $categoryColumn){ # fetching recordset till eof while($row = mysql_fetch_array($query_result)){ # adding category $this->addCategory($row[$categoryColumn],"","" ); } } # Function addCategoryFromArray adding Category from Array function addCategoryFromArray($categoryArray){ # convert array to category set foreach ($categoryArray as $value) { # adding category $this->addCategory($value); } } # Function for create set and catagory, dataset , set from array function addChartDataFromArray($dataArray, $dataCatArray=""){ if(is_array($dataArray)){ if ($this->seriesType==1){ # Single series Array # aa[..][..]="name" aa[..][..]="value" foreach($dataArray as $arrayvalue){ if(is_array($arrayvalue)){ $this->addChartData($arrayvalue[1],"name=" . $arrayvalue[0] ); } } }else{ # Multi series Array if(is_array($dataCatArray)){ foreach($dataCatArray as $value){ $this->addCategory($value); } } foreach($dataArray as $arrayvalue){ if(is_array($arrayvalue)){ $i=0; $aaa[0]="";$aaa[1]=""; foreach($arrayvalue as $value){ if($i>=2){ $this->addChartData($value); }else{ $aaa[$i]=$value; } if($i==1){ $this->addDataset($aaa[0],$aaa[1]); } $i++; } } } } } } # Function addCategory adding Category and vLine element function addCategory($label="",$catParam="",$vlineParam = "" ){ $strCatXML=""; $strParam=""; # cheking vlineParam equal blank if($vlineParam==""){ # cheking catParam not blank if($catParam!=""){ $listArray=explode($this->del,$catParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ # creating parameter set $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # adding label and parameter set to category $strCatXML =""; }else{ $listArray=explode($this->del,$vlineParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ # creating parameter set $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } # adding parameter set to vLine $strCatXML=""; } # storing into categoryNames array $this->categoryNames[$this->categoryNamesCounter]=$strCatXML; # Increase Counter $this->categoryNamesCounter++; } # adding dataset array element function addDataset($seriesName, $strParam=""){ $this->datasetCounter++; $this->createDataset($this->datasetCounter); $this->setCounter++; $this->createDataValues($this->datasetCounter,"_" . $this->setCounter); # creating seriesName and dataset parameter set $tempParam=""; $tempParam ="seriesName='" . $seriesName . "' "; $listArray=explode($this->del,$strParam); $color=0; foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ if(strtolower(trim($paramValue[0]))=="color"){ $color=1; } $tempParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } # setting datasetParam array $colorParam=""; if($color==0){ $colorParam=" color='" . $this->getColor($this->datasetCounter-1) . "'"; } $this->datasetParam[$this->datasetCounter]=$tempParam . $colorParam; } # Function addChartData adding set data element function addChartData($value="",$setParam="",$vlineParam = "" ){ $strSetXML=""; # Choosing dataset depend on seriesType and getting XML set if($this->seriesType>=1 and $this->seriesType<=2){ if($this->seriesType>=1){ if(gettype(strpos($this->chartType,"line"))!="boolean"){ $colorSet=$this->getColor(0); $this->setChartParams("lineColor=" . $colorSet ); } if(gettype(strpos($this->chartType,"area"))!="boolean"){ $colorSet=$this->getColor(0); $this->setChartParams("areaBgColor=" . $colorSet ); } } $strSetXML=$this->setSSMSDataArray($value,$setParam,$vlineParam); }elseif ($this->seriesType==3){ $strSetXML=$this->setScatterBubbleDataArray($value,$setParam,$vlineParam); }elseif (($this->seriesType==4)){ $strSetXML=$this->setSSMSDataArray($value,$setParam,$vlineParam); } # Adding xml set to dataset array and Increase set counter if ($this->seriesType==1){ $this->dataset[$this->setCounter]=$strSetXML; $this->setCounter++; }elseif($this->seriesType>1 and $this->seriesType<4){ $this->dataset[$this->datasetCounter]["_" . $this->setCounter]=$strSetXML; $this->setCounter++; }elseif($this->seriesType==4){ $this->MSSDataset[$this->MSSDatasetCounter][$this->MSSSubDatasetCounter][$this->MSSSetCounter]=$strSetXML; $this->MSSSetCounter++; } } # Function addDatasetsFromDatabase adding dataset and set element by mysql recordset function addDatasetsFromDatabase($query_result, $ctrlField, $valueField,$datsetParamArray="",$LinkPlaceHolder=""){ # Initialize variables $paramset=""; $tempContrl=""; if(is_array($datsetParamArray)==false){ $datsetParamArray=array(); } # Calculate total no of array elements in datsetParamArray $arrLimit=count($datsetParamArray); $i=1; $tempParam=""; # fetching recordset till eof while($row = mysql_fetch_array($query_result)){ # Creating Control break depending on ctrlField # if ctrlField value change then dataset will be Generate if ($tempContrl!=$row[$ctrlField]){ if($i<=$arrLimit){ $tempParam = $datsetParamArray[$i-1]; }else{ $tempParam=""; } # Adding Dataset $this->addDataset($row[$ctrlField],$tempParam); $tempContrl=$row[$ctrlField]; $i++; } # Generating URL link if($LinkPlaceHolder==""){ $paramset=""; }else{ # Generating URL link from getLinkFromPattern $paramset="link=" . urlencode($this->getLinkFromPattern($row,$LinkPlaceHolder)); } # Adding set into dataset $this->addChartData($row[$valueField], $paramset, ""); } } # addDataFromDatabase funcion take 5 parameter like query_result, label field, value field # and initialize dataset variables and link function addDataFromDatabase($query_result, $db_field_ChartData,$db_field_CategoryNames="", $strParam="",$LinkPlaceHolder=""){ $paramset=""; # fetching recordset till eof while($row = mysql_fetch_array($query_result)){ if($LinkPlaceHolder==""){ $paramset=""; }else{ # Getting link $paramset="link=" . urlencode($this->getLinkFromPattern($row,$LinkPlaceHolder)); } if ($strParam=""){ $strParam=$paramset; }else{ $strParam .= ";" . $paramset; } # covert to set element and save to $partXML if($db_field_CategoryNames==""){ $data=@$row[$db_field_ChartData]; if($strParam!="") $this->addChartData($this->encodeSpecialChars($data),$strParam,"" ); else $this->addChartData($this->encodeSpecialChars($data)); } else{ $data=@$row[$db_field_ChartData]; $label=@$row[$db_field_CategoryNames]; $this->addChartData($this->encodeSpecialChars($data),"name=" . $this->encodeSpecialChars($label) . ";" .$strParam,"" ); } } } # setTLine create TrendLine parameter function addTrendLine($strParam){ $listArray=explode($this->del,$strParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $this->trendLines[$this->tLineCounter][$paramValue[0]]=$this->encodeSpecialChars($paramValue[1]); } } $this->tLineCounter++; } #this function sets chart messages function setChartMessage($strParam){ $this->chartMSG="?"; $listArray=explode($this->del,$strParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $this->chartMSG.=$paramValue[0] . "=" . $this->encodeSpecialChars($paramValue[1]) . "&"; } } $this->chartMSG=substr($this->chartMSG,0,strlen($this->chartMSG)-1); } #### - This function is mostly for Future USE ----------------------------- # set JS constructor of FusionCharts.js function setAddChartParams($debugMode, $registerWithJS=0, $c="", $scaleMode="", $lang=""){ $this->debugMode=$debugMode; $this->registerWithJS=$registerWithJS; $this->bgColor=$c; $this->scaleMode=$scaleMode; $this->lang=$lang; } # getXML render all class arrays to XML output function getXML(){ $this->strXML=""; # calling getChartParamsXML function for chart parameter $this->strXML = "getChartParamsXML() . " >"; if ($this->seriesType >= 0 and $this->seriesType <= 4) { # calling getCategoriesXML function for Category element $this->strXML .= $this->getCategoriesXML(); # calling getDatasetXML function for set element $this->strXML .= $this->getDatasetXML(); # calling getvTrendLinesXML function for vTrendLines element if($this->seriesType==3){ $this->strXML .= $this->getvTrendLinesXML(); } # Calling getLinesetXML if($this->seriesType==4){ $this->strXML .= $this->getLinesetXML(); } # calling getTrendLinesXML function for TrendLines element $this->strXML .= $this->getTrendLinesXML(); # calling getStylesXML function for Styles element $this->strXML .= $this->getStylesXML(); }else if($this->seriesType == 5) { $this->strXML .= $this->getGanttCategoriesXML(); $this->strXML .= $this->getProcessesXML(); $this->strXML .= $this->getGanttDatatableXML(); $this->strXML .= $this->getTasksXML(); $this->strXML .= $this->getConnectorsXML(); $this->strXML .= $this->getMilestonesXML(); # calling getTrendLinesXML function for TrendLines element $this->strXML .= $this->getTrendLinesXML(); # calling getStylesXML function for Styles element $this->strXML .= $this->getStylesXML(); $this->strXML .= $this->getLegendXML(); } # Closing Chart element $this->strXML .= ""; # Return XML output return $this->strXML; } # Function getXML render all class arrays to XML output function renderChart(){ $this->strXML=$this->getXML(); $this->SWFFile=$this->SWFPath . "FCF_" . $this->chartSWF[$this->chartType][0] . ".swf"; # print the charts print renderChart($this->SWFFile . $this->chartMSG,"",$this->strXML,$this->chartID, $this->width, $this->height,$this->debugMode,$this->registerWithJS,$this->bgColor,$this->scaleMode,$this->lang); } # Renders Chart form External XML data source function renderChartFromExtXML($dataXML){ print renderChart($this->SWFFile,"",$dataXML,$this->chartID, $this->width, $this->height,$this->debugMode,$this->registerWithJS,$this->bgColor,$this->scaleMode,$this->lang); } ##------------ PRIVATE FUNCTIONS ---------------------------------------------------------------- # getDatasetXML create set chart xml function getDatasetXML(){ # Calling dataset function depending on seriesType switch ($this->seriesType){ case 1 : return $this->getSSDatasetXML(); break; case 2 : return $this->getMSDatasetXML(); break; case 3 : return $this->getMSDatasetXML(); break; case 4 : return $this->getMSStackedDatasetXML(); break; } } # By getChartParamsXML, we can fetch charts array and convert into XML # and return like "caption='xyz' xAxisName='x side' ............ function getChartParamsXML(){ $partXML=""; # feching charts each array and converting into chat parameter foreach($this->chartParams as $part_type => $part_name){ if($part_name!=""){ $partXML .= $part_type . "='" . $this->encodeSpecialChars($part_name) . "' "; } } # Return Chart Parameter return $partXML; } # Function getCategoriesXML for getting Category part XML function getCategoriesXML(){ if($this->seriesType>1){ $partXML=""; # adding categories parameter $partXML="categoriesParam . " >"; if($this->categoryNamesCounter>1){ foreach($this->categoryNames as $part_type => $part_name){ if($part_name!=""){ # adding elements if($part_name!="Array"){ $partXML .= $part_name; } } } } # Closing $partXML .=""; return $partXML; } } # creating single set element # # function getSSDatasetXML(){ if($this->seriesType==1){ $partXML=""; foreach($this->dataset as $part_type => $part_name){ if($part_name!=""){ # adding elements if($part_name!="Array"){ $partXML .= $part_name; } } } return $partXML; } } # getMSDatasetXML for getting datset part XML # # # # function getMSDatasetXML(){ if($this->seriesType>1){ $partXML=""; foreach($this->dataset as $part_type => $part_name){ $partXML .="datasetParam[$part_type] . " >"; foreach($this->dataset[$part_type] as $part_type1 => $part_name1){ if($part_name1!=""){ # Adding elements if($part_name1!="Array"){ $partXML .= $part_name1; } } } $partXML .=""; } return $partXML; } } # getTrendLinesXML create XML output depending on trendLines array # # # function getTrendLinesXML(){ $partXML=""; $lineXML=""; # fetching trendLines array foreach($this->trendLines as $l_type => $l_name){ # staring line element $lineXML .="trendLines[$l_type] as $part_type => $part_name){ if($part_name!=""){ $lineXML .= $part_type . "='" . $this->encodeSpecialChars($part_name) . "' "; } } # close line element $lineXML .=" />"; } # if line element present then adding $lineXML with in trendLines element $pos = strpos($lineXML, "="); if ($pos!==false){ $partXML = "" . $lineXML . ""; }else{ # return nothing $partXML=""; } # return trendLines xml return $partXML; } # adding set element to dataset element for seriesType 1 and 2 function setSSMSDataArray($value="",$setParam="",$vlineParam = "" ){ $strSetXML=""; $strParam=""; $color=0; if($vlineParam==""){ if($setParam!=""){ $listArray=explode($this->del,$setParam); # parameter creating foreach ($listArray as $valueArray) { if(trim($valueArray)!=""){ $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; if(strtolower(trim($paramValue[0]))=="color"){ $color=1; } } } } } $colorSet=""; if($this->seriesType==1 && (gettype(strpos($this->chartType,"pie"))=="boolean" && gettype(strpos($this->chartType,"line"))=="boolean" && gettype(strpos($this->chartType,"area"))=="boolean")){ if($color==0){ $colorSet=" color='" . $this->getColor($this->setCounter) . "' "; } } # setting set parameter $strSetXML =""; }else{ $listArray=explode($this->del,$vlineParam); foreach ($listArray as $valueArray) { if(trim($valueArray)!=""){ $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # setting vline parameter $strSetXML=""; } return $strSetXML; } ## - - - - - - Array Init Functions - - --- - -- - - - - - - -- - - - - - # Function createCategory create array element with in Categories function createCategory($catID){ $this->categoryNames[$catID]= array(); } # createDataset dataset array element function createDataset($dataID){ $this->dataset[$dataID]= array(); } # creating set dataset array element function createDataValues($datasetID, $dataID){ $this->dataset[$datasetID][$dataID]= array(); } # createTrendLines create TrendLines array function createTrendLines($lineID){ $this->trendLines[$lineID] = array(); } # setTLine create TrendLine parameter function setTLine($lineID,$paramName, $paramValue){ $this->trendLines[$lineID][$paramName]=$paramValue; } # ----- ---------- ----- Misc utility functions ---- ------ ----------- # converting ' and " to %26apos; and " function encodeSpecialChars($strValue){ $strValue=str_replace("'","%26apos;",$strValue); $strValue=str_replace("\"",""",$strValue); $strValue=str_replace("<","<",$strValue); $strValue=str_replace(">",">",$strValue); return $strValue; } # Its convert pattern link to original link # abcd.php?cid=##Field_name_1##&pname=##Field_name_2## function getLinkFromPattern($row,$tempLink){ # convert link into array break on '##' $aa=explode("##",$tempLink); # Reading array foreach($aa as $v){ # Finding '=' into array $pos = strpos($v, "="); # not found '=' if($pos === false){ if($v!=""){ $pet="##" . $v . "##"; $tempLink=str_replace($pet,$row[$v],$tempLink); } } } return $tempLink; } function validateParam($paramValue){ if(count($paramValue)>=2){ if(trim($paramValue[0])==""){ return false; } if(trim($paramValue[1])==""){ return false; } return true; }else{ return false; } } # Getting Charts series type from charts array. 1 => single series, 2=> multi-series, 3=> scatter and bubble, 4=> MSStacked. defult 1 => single series function getSeriesType(){ $sValue=1; if(is_array($this->chartSWF[$this->chartType])){ $sValue=$this->chartSWF[$this->chartType][1]; }else{ $sValue=1; } $this->seriesType=$sValue; } #this function returns a color from a list of colors function getColor($counter){ return $this->arr_FCColors[$counter % count($this->arr_FCColors)]; } ### ----- Pupulate Color and Chart SWF array ------ ------- --------------------- function colorInit(){ $this->arr_FCColors[] = "AFD8F8"; $this->arr_FCColors[] = "F6BD0F"; $this->arr_FCColors[] = "8BBA00"; $this->arr_FCColors[] = "A66EDD"; $this->arr_FCColors[] = "F984A1" ; $this->arr_FCColors[] = "CCCC00" ;//Chrome Yellow+Green $this->arr_FCColors[] = "999999" ;//Grey $this->arr_FCColors[] = "0099CC" ;//Blue Shade $this->arr_FCColors[] = "FF0000" ;//Bright Red $this->arr_FCColors[] = "006F00" ;//Dark Green $this->arr_FCColors[] = "0099FF"; //Blue (Light) $this->arr_FCColors[] = "FF66CC" ;//Dark Pink $this->arr_FCColors[] = "669966" ;//Dirty green $this->arr_FCColors[] = "7C7CB4" ;//Violet shade of blue $this->arr_FCColors[] = "FF9933" ;//Orange $this->arr_FCColors[] = "9900FF" ;//Violet $this->arr_FCColors[] = "99FFCC" ;//Blue+Green Light $this->arr_FCColors[] = "CCCCFF" ;//Light violet $this->arr_FCColors[] = "669900" ;//Shade of green $this->arr_FCColors[] = "1941A5" ;//Dark Blue } # Setting FusionCharts SWF file array list and series function setChartArrays(){ $this->chartSWF['area2d'][0]="Area2D"; $this->chartSWF['area2d'][1]=1; $this->chartSWF['bar2d'][0]="Bar2D"; $this->chartSWF['bar2d'][1]=1; $this->chartSWF['column2d'][0]="Column2D"; $this->chartSWF['column2d'][1]=1; $this->chartSWF['column3d'][0]="Column3D"; $this->chartSWF['column3d'][1]=1; $this->chartSWF['doughnut2d'][0]="Doughnut2D"; $this->chartSWF['doughnut2d'][1]=1; $this->chartSWF['doughnut3d'][0]="Doughnut3D"; $this->chartSWF['doughnut3d'][1]=1; $this->chartSWF['line'][0]="Line"; $this->chartSWF['line'][1]=1; $this->chartSWF['pie2d'][0]="Pie2D"; $this->chartSWF['pie2d'][1]=1; $this->chartSWF['pie3d'][0]="Pie3D"; $this->chartSWF['pie3d'][1]=1; $this->chartSWF['funnel'][0]="Funnel"; $this->chartSWF['funnel'][1]=1; $this->chartSWF['msarea'][0]="MSArea"; $this->chartSWF['msarea'][1]=2; $this->chartSWF['msarea2d'][0]="MSArea2D"; $this->chartSWF['msarea2d'][1]=2; $this->chartSWF['msbar2d'][0]="MSBar2D"; $this->chartSWF['msbar2d'][1]=2; $this->chartSWF['mscolumn2d'][0]="MSColumn2D"; $this->chartSWF['mscolumn2d'][1]=2; $this->chartSWF['mscolumn3d'][0]="MSColumn3D"; $this->chartSWF['mscolumn3d'][1]=2; $this->chartSWF['mscolumn3dlinedy'][0]="MSColumn3DLineDY"; $this->chartSWF['mscolumn3dlinedy'][1]=2; $this->chartSWF['mscolumnLine3D'][0]="MSColumnLine3D"; $this->chartSWF['mscolumnLine3D'][1]=2; $this->chartSWF['mscombi2d'][0]="MSCombi2D"; $this->chartSWF['mscombi2d'][1]=2; $this->chartSWF['mscombidy2d'][0]="MSCombiDY2D"; $this->chartSWF['mscombidy2d'][1]=2; $this->chartSWF['msline'][0]="MSLine"; $this->chartSWF['msline'][1]=2; $this->chartSWF['scrollarea2d'][0]="ScrollArea2D"; $this->chartSWF['scrollarea2d'][1]=2; $this->chartSWF['scrollcolumn2d'][0]="ScrollColumn2D"; $this->chartSWF['scrollcolumn2d'][1]=2; $this->chartSWF['scrollcombi2d'][0]="ScrollCombi2D"; $this->chartSWF['scrollcombi2d'][1]=2; $this->chartSWF['scrollcombidy2d'][0]="ScrollCombiDY2D"; $this->chartSWF['scrollcombidy2d'][1]=2; $this->chartSWF['scrollline2d'][0]="ScrollLine2D"; $this->chartSWF['scrollline2d'][1]=2; $this->chartSWF['scrollstackedcolumn2d'][0]="ScrollStackedColumn2D"; $this->chartSWF['scrollstackedcolumn2d'][1]=2; $this->chartSWF['stackedarea2d'][0]="StackedArea2D"; $this->chartSWF['stackedarea2d'][1]=2; $this->chartSWF['stackedbar2d'][0]="StackedBar2D"; $this->chartSWF['stackedbar2d'][1]=2; $this->chartSWF['stackedbar3d'][0]="StackedBar3D"; $this->chartSWF['stackedbar3d'][1]=2; $this->chartSWF['stackedcolumn2d'][0]="StackedColumn2D"; $this->chartSWF['stackedcolumn2d'][1]=2; $this->chartSWF['stackedcolumn3d'][0]="StackedColumn3D"; $this->chartSWF['stackedcolumn3d'][1]=2; $this->chartSWF['stackedcolumn3dlinedy'][0]="StackedColumn3DLineDY"; $this->chartSWF['stackedcolumn3dlinedy'][1]=2; $this->chartSWF['mscolumn2dlinedy'][0]="MSColumn2DLineDY"; $this->chartSWF['mscolumn2dlinedy'][1]=2; $this->chartSWF['bubble'][0]="Bubble"; $this->chartSWF['bubble'][1]=3; $this->chartSWF['scatter'][0]="Scatter"; $this->chartSWF['scatter'][1]=3; $this->chartSWF['msstackedcolumn2dlinedy'][0]="MSStackedColumn2DLineDY"; $this->chartSWF['msstackedcolumn2dlinedy'][1]=4; $this->chartSWF['msstackedcolumn2d'][0]="MSStackedColumn2D"; $this->chartSWF['msstackedcolumn2d'][1]=2; $this->chartSWF['gantt'][0]="Gantt"; $this->chartSWF['gantt'][1]=5; } ####################### GANTT CHART (start) ###################################### # ----------- Public Functions ----------------------------------------------- # Function addCategory adding Category and vLine element function addGanttCategorySet($catParam=""){ $this->GT_categories_Counter++; $this->GT_categories[$this->GT_categories_Counter]= array(); $strParam=""; # cheking catParam not blank if($catParam!=""){ $listArray=explode($this->del,$catParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ # creating parameter set $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } $this->GT_categoriesParam[$this->GT_categories_Counter]=$strParam; } # Function addGanttCategory adding Category function addGanttCategory($label="",$catParam=""){ $strCatXML=""; $strParam=""; # cheking catParam not blank if($catParam!=""){ $listArray=explode($this->del,$catParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ # creating parameter set $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # adding label and parameter set to category $strCatXML =""; # storing into GT_categories array $this->GT_categories[$this->GT_categories_Counter][$this->GT_subcategories_Counter]=$strCatXML; # Increase Counter $this->GT_subcategories_Counter++; } # Setting Process Parameter into categoriesParam variables function setGanttProcessesParams($strParam){ $listArray=explode($this->del,$strParam); # Fetching all value and converting into xml attribute foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $this->GT_processes_Param .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # Function addGanttProcess adding Process function addGanttProcess($label="",$catParam=""){ $strCatXML=""; $strParam=""; # cheking catParam not blank if($catParam!=""){ $listArray=explode($this->del,$catParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ # creating parameter set $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # adding label and parameter set to category $strCatXML =""; # storing into categoryNames array $this->GT_processes[$this->GT_processes_Counter]=$strCatXML; # Increase Counter $this->GT_processes_Counter++; } # Setting Tasks Parameter into TaskParam variables function setGanttTasksParams($strParam){ $listArray=explode($this->del,$strParam); # Fetching all value and converting into xml attribute foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $this->GT_Tasks_Param .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # Function addGanttTasks adding Tasks function addGanttTask($label="",$catParam=""){ $strCatXML=""; $strParam=""; # cheking catParam not blank if($catParam!=""){ $listArray=explode($this->del,$catParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ # creating parameter set if(trim(strtolower($paramValue[0]))=="link"){ $strParam .= $paramValue[0] . "='" . urldecode($paramValue[1]) . "' "; }else{ $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } } # adding label and parameter set to category $strCatXML =""; # storing into GT_Tasks array $this->GT_Tasks[$this->GT_Tasks_Counter]=$strCatXML; # Increase Counter $this->GT_Tasks_Counter++; } # Setting Tasks Parameter into ConnectorsParam variables function setGanttConnectorsParams($strParam){ $listArray=explode($this->del,$strParam); # Fetching all value and converting into xml attribute foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $this->GT_Connectors_Param .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # Function addGanttConnector adding Connector function addGanttConnector($From,$To,$catParam=""){ $strCatXML=""; $strParam=""; # cheking catParam not blank if($catParam!=""){ $listArray=explode($this->del,$catParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ # creating parameter set $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # adding label and parameter set to category $strCatXML =""; # storing into GT_Connectors array $this->GT_Connectors[$this->GT_Connectors_Counter]=$strCatXML; # Increase Counter $this->GT_Connectors_Counter++; } # Setting Milestones Parameter into MilestonesParam variables function setGanttMilestonesParams($strParam){ $listArray=explode($this->del,$strParam); # Fetching all value and converting into xml attribute foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $this->GT_Milestones_Param .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # Function addGanttMilestones adding Milestones function addGanttMilestone($taskID,$catParam=""){ $strCatXML=""; $strParam=""; # cheking catParam not blank if($catParam!=""){ $listArray=explode($this->del,$catParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ # creating parameter set $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # adding label and parameter set to Milestones $strCatXML =""; # storing into GT_Milestones array $this->GT_Milestones[$this->GT_Milestones_Counter]=$strCatXML; # Increase Counter $this->GT_Milestones_Counter++; } # Setting Legend Parameter into LegendParam variables function setGanttLegendParams($strParam){ $listArray=explode($this->del,$strParam); # Fetching all value and converting into xml attribute foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $this->GT_legend_Param .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # Function addGanttLegendItem adding LegendItem function addGanttLegendItem($label,$catParam=""){ $strCatXML=""; $strParam=""; # cheking catParam not blank if($catParam!=""){ $listArray=explode($this->del,$catParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ # creating parameter set $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # adding label and parameter set to LegendItem $strCatXML =""; # storing into GT_legend array $this->GT_legend[$this->GT_legend_Counter]=$strCatXML; # Increase Counter $this->GT_legend_Counter++; } # Setting Datatable Parameter into DatatableParam variables function setGanttDatatableParams($strParam){ $listArray=explode($this->del,$strParam); # Fetching all value and converting into xml attribute foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $this->GT_datatableParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # Function addGanttDatacolumn adding Datacolumn function addGanttDatacolumn($catParam=""){ $this->GT_datatable_Counter++; $this->GT_datatable[$this->GT_datatable_Counter]= array(); $strParam=""; # cheking catParam not blank if($catParam!=""){ $listArray=explode($this->del,$catParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ # creating parameter set $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } $this->GT_dataColumnParam[$this->GT_datatable_Counter]=$strParam; } # Function addGanttColumnText adding ColumnText function addGanttColumnText($label="",$catParam=""){ $strCatXML=""; $strParam=""; # cheking catParam not blank if($catParam!=""){ $listArray=explode($this->del,$catParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ # creating parameter set $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } } # adding label and parameter set to category $strCatXML =""; # storing into GT_datatable array $this->GT_datatable[$this->GT_datatable_Counter][$this->GT_subdatatable_Counter]=$strCatXML; # Increase Counter $this->GT_subdatatable_Counter++; } ### ------------- Gantt Private Functoins ---------------------------------------------------------------------- #-- Gantt array init ------------------------------------------------ # Function createCategory create array element with in Categories function createGanttCategory($catID){ $this->GT_categories[$catID]= array(); } # Function createGanttDatatable create array element with in Datatable function createGanttDatatable($catID){ $this->GT_datatable[$catID]= array(); } #-- GANTT XML genetators ------------------------------------------- # Function getCategoriesXML for getting Category part XML function getGanttCategoriesXML(){ $partXML=""; foreach($this->GT_categories as $part_type => $part_name){ # adding categories parameter $partXML .="GT_categoriesParam[$part_type] . " >"; foreach($this->GT_categories[$part_type] as $part_type1 => $part_name1){ if($part_name1!=""){ # adding elements $partXML .= $part_name1; } } # Closing $partXML .=""; } return $partXML; } # Function getProcessesXML for getting Processes part XML function getProcessesXML(){ $partXML=""; # adding processes parameter $partXML="GT_processes_Param . " >"; foreach($this->GT_processes as $part_type => $part_name){ if($part_name!=""){ # adding elements $partXML .= $part_name; } } # Closing $partXML .=""; return $partXML; } # Function getProcessesXML for getting Processes part XML function getTasksXML(){ $partXML=""; # adding processes parameter $partXML="GT_Tasks_Param . " >"; foreach($this->GT_Tasks as $part_type => $part_name){ if($part_name!=""){ # adding elements $partXML .= $part_name; } } # Closing $partXML .=""; return $partXML; } # Function getConnectorsXML for getting Connectors part XML function getConnectorsXML(){ $c=0; $partXML=""; # adding connectors parameter $partXML="GT_Connectors_Param . " >"; foreach($this->GT_Connectors as $part_type => $part_name){ if($part_name!=""){ # adding elements $partXML .= $part_name; $c++; } } # Closing $partXML .=""; if ($c>0){ return $partXML; }else{ return ""; } } # Function getMilestonesXML for getting Milestones part XML function getMilestonesXML(){ $c=0; $partXML=""; # adding Milestones parameter $partXML="GT_Milestones_Param . " >"; foreach($this->GT_Milestones as $part_type => $part_name){ if($part_name!=""){ # adding elements $partXML .= $part_name; $c++; } } # Closing $partXML .=""; if ($c>0) { return $partXML; }else{ return ""; } } # Function getLegendXML for getting Legend part XML function getLegendXML(){ $c=0; $partXML=""; # adding Legend parameter $partXML="GT_legend_Param . " >"; foreach($this->GT_legend as $part_type => $part_name){ if($part_name!=""){ # adding elements $partXML .= $part_name; $c++; } } # Closing $partXML .=""; if ($c>0) { return $partXML; }else{ return ""; } } # Function getGanttDatatableXML for getting Category part XML function getGanttDatatableXML(){ $partXML=""; foreach($this->GT_datatable as $part_type => $part_name){ # adding dataColumn parameter $partXML .="GT_dataColumnParam[$part_type] . " >"; foreach($this->GT_datatable[$part_type] as $part_type1 => $part_name1){ if($part_name1!=""){ # adding elements $partXML .= $part_name1; } } # Closing $partXML .=""; } $allPart="GT_datatableParam . " >" . $partXML . ""; return $allPart; } ####################### GANTT CHART (end) ###################################### #====================== For Future Use (start) ===================================== ##---------PUBLIC functions ---------------------------------------------------- # adding Lineset array and parameter to it function addLineset($seriesName, $strParam){ $this->createLineset(); $this->lineSetCounter++; $this->lineSet[$this->lineCounter][$this->lineSetCounter]= array(); $tempParam=""; $tempParam ="seriesName='" . $seriesName . "' "; $listArray=explode($this->del,$strParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ # adding parameter $tempParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } $this->lineIDCounter++; # setting lineSetParam array with Parameter set $this->lineSetParam [$this->lineSetCounter]=$tempParam; } # adding Line's Set data function addLinesetData($value="",$setParam="",$vlineParam = "" ){ $strSetXML=""; # getting parameter set $strSetXML=$this->setSSMSDataArray($value,$setParam,$vlineParam); # setting paramter to lineSet array $this->lineSet[$this->lineCounter][$this->lineSetCounter][$this->lineIDCounter]=$strSetXML; # Increase lineIDCounter $this->lineIDCounter++; } # adding ms dataset and parameter function addMSSSubDataset($seriesName, $strParam){ $this->MSSSubDatasetCounter++; $this->MSSDataset[$this->MSSDatasetCounter][$this->MSSSubDatasetCounter]= array(); $tempParam=""; # creating seriesName $tempParam ="seriesName='" . $seriesName . "' "; $listArray=explode($this->del,$strParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ # creatting MSSDataset parameter set $tempParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } $this->MSSSetCounter++; # adding Parameter to MSSDatasetParams array $this->MSSDatasetParams[$this->MSSDatasetCounter][$this->MSSSubDatasetCounter]=$tempParam; // $this->createMSSSetData(); } # adding set element to dataset element for seriesType 3 function setScatterBubbleDataArray($value="",$setParam="",$vlineParam = "" ){ $strSetXML=""; $strParam=""; if($vlineParam==""){ if($setParam!=""){ # parameter for set $listArray=explode($this->del,$setParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); # creating parameter sets $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } # adding Parameter into set elements $strSetXML =""; }else{ # Parameter for vLine $listArray=explode($this->del,$vlineParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $strParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; } } # adding vLine element $strSetXML=""; } return $strSetXML; } # setvTLine create TrendLine parameter function setVTrendLines($strParam){ $listArray=explode($this->del,$strParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $this->vtrendLines[$this->vtLineCounter][$paramValue[0]]=$this->encodeSpecialChars($paramValue[1]); } } $this->vtLineCounter++; } # setSubStylesParam create sub styles array to store parameters function addStyleDef($styleName,$styleType,$strParam){ $this->styles["definition"]["style"][$this->styleDefCounter]["name"]= $styleName; $this->styles["definition"]["style"][$this->styleDefCounter]["type"]= $styleType; $listArray=explode($this->del,$strParam); foreach ($listArray as $valueArray) { $paramValue=explode("=",$valueArray); if($this->validateParam($paramValue)==true){ $this->styles["definition"]["style"][$this->styleDefCounter][$paramValue[0]]= $this->encodeSpecialChars($paramValue[1]); } } $this->styleDefCounter++; } # apply styles function addStyleApp($toObject,$styles){ $this->styles["application"]["apply"][$this->styleAppCounter]["toObject"]= $toObject; $this->styles["application"]["apply"][$this->styleAppCounter]["styles"]= $styles; $this->styleAppCounter++; } ##---------PRIVATE functions ---------------------------------------------------- ## - -- - - XML generators - - - - ---- - -- - - - - # Function getLinesetXML for getting Lineset XML function getLinesetXML(){ # if seriesType MSStackedColumn2DLineDY (4) then linset element will be Generate if($this->seriesType==4){ $partXML=""; # Fetching lineSet array and Generating lineset xml element foreach($this->lineSet as $part_type => $part_name){ $partXML .= "lineSetParam[$part_type] . " >"; foreach($this->lineSet[$part_type] as $part_type1 => $part_name1){ foreach($this->lineSet[$part_type][$part_type1] as $part_type2 => $part_name2){ if ($part_type2!=""){ $partXML .= $part_name2; } } } $partXML .= ""; } return $partXML; } } # Function getMSStackedDatasetXML for getting datset part XML from ms stacked chart dataset array # # # # # # function getMSStackedDatasetXML(){ if($this->seriesType==4){ $partXML=""; foreach($this->MSSDataset as $part_type => $part_name){ $partXML .= ""; foreach($this->MSSDataset[$part_type] as $part_type1 => $part_name1){ $partXML .= "MSSDatasetParams[$part_type][$part_type1] . " >"; foreach($this->MSSDataset[$part_type][$part_type1] as $part_type2 => $part_name2){ if ($part_type2!=""){ $partXML .= $part_name2; } } $partXML .= ""; } $partXML .= ""; } return $partXML; } } # getvTrendLinesXML create XML output depending on trendLines array # # # function getvTrendLinesXML(){ $partXML=""; $lineXML=""; # fetching vtrendLines array foreach($this->vtrendLines as $l_type => $l_name){ # staring line element $lineXML .="vtrendLines[$l_type] as $part_type => $part_name){ if($part_name!=""){ $lineXML .= $part_type . "='" . $this->encodeSpecialChars($part_name) . "' "; } } # close line element $lineXML .=" />"; } # if line element present then adding $lineXML with in vtrendLines element $pos = strpos($lineXML, "="); if ($pos !== false) { $partXML = "" . $lineXML . ""; }else{ # return nothing $partXML=""; } # return vtrendLines xml return $partXML; } # getStylesXML create the styles XML from styles array /*