• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List

E:/E/GEAMP/www/openbiz/openbiz/bin/service/chartService.php

00001 <?php
00025 class chartService
00026 {
00032     public $m_PlotList;
00033 
00040     function __construct(&$xmlArr)
00041     {
00042     }
00043 
00050     Public function render($objName)
00051     {
00052         // get the value of the control that issues the call
00053         $chartName = BizSystem::clientProxy()->getFormInputs("__this");
00054 
00055         // get the current UI bizobj
00056         $formObj = BizSystem::getObject($objName);    // get the existing bizform object
00057         $bizDataObj = $formObj->getDataObj();
00058 
00059         // get chart config xml file
00060         $chartXmlFile = BizSystem::GetXmlFileWithPath($objName."_chart");
00061         $xmlArr = BizSystem::getXmlArray($chartXmlFile);
00062 
00063         ob_clean();
00064         // get the chart section from config xml file
00065         foreach($xmlArr["BIZFORM_CHART"]["CHARTLIST"]["CHART"] as $chart)
00066         {
00067             if (count($xmlArr["BIZFORM_CHART"]["CHARTLIST"]["CHART"]) == 1)
00068                 $chart = $xmlArr["BIZFORM_CHART"]["CHARTLIST"]["CHART"];
00069             // try to match the chartName, if no chartName given, always draw the first chart defined in xml file
00070             if (($chartName && $chart["ATTRIBUTES"]["NAME"] == $chartName) || !$chartName)
00071             {
00072                 if ($chart["ATTRIBUTES"]["GRAPHTYPE"] == 'XY')
00073                 {
00074                     $this->xyGraphRender($bizDataObj, $chart);
00075                     break;
00076                 }
00077                 if ($chart["ATTRIBUTES"]["GRAPHTYPE"] == 'Pie')
00078                 {
00079                     $this->pieGraphRender($bizDataObj, $chart);
00080                     break;
00081                 }
00082             }
00083         }
00084     }
00085 
00094     public function &getPlotData(&$bizObj, $fields, $labelField)
00095     {
00096         $oldCacheMode = $bizObj->GetCacheMode();
00097         $bizObj->SetCacheMode(0);    // turn off cache mode, not affect the current cache
00098         $bizObj->runSearch(-1);  // don't use page search
00099         while (1)
00100         {
00101             $recArray = $bizObj->GetRecord(1);
00102             if (!$recArray) break;
00103             $bizObj->UnformatInputRecArr($recArray);
00104 
00105             foreach($fields as $fld)
00106                 $recMatrix[$fld][] = $recArray[$fld];   // get data without format
00107             $recMatrix[$labelField][] = $recArray[$labelField];   // get symbol with format
00108         }
00109         $bizObj->SetCacheMode($oldCacheMode);
00110         return $recMatrix;
00111     }
00112 
00120     public function xyGraphRender(&$bizObj, &$xmlArr)
00121     {
00122         include_once (JPGRAPH_DIR.'/jpgraph.php');
00123 
00124         $graph = new Graph($xmlArr["ATTRIBUTES"]["WIDTH"],$xmlArr["ATTRIBUTES"]["HEIGHT"],"auto");
00125         //$graph->img->SetAntiAliasing();
00126         $graph->SetScale("textlin");
00127         $graph->yaxis->scale->SetGrace(10);
00128         list($m1, $m2, $m3, $m4) = explode(',', $xmlArr["ATTRIBUTES"]["MARGIN"]);
00129         $graph->img->SetMargin($m1, $m2, $m3, $m4);
00130 
00131         // get the data set
00132         foreach($xmlArr['DATASET']['DATA'] as $dtmp)
00133         {
00134             if ($xmlArr['DATASET']['DATA']['ATTRIBUTES'])
00135                 $dtmp = $xmlArr['DATASET']['DATA'];
00136             $fieldName = $dtmp["ATTRIBUTES"]["FIELD"];
00137             if ($fieldName)
00138                 $fields[$fieldName] = $fieldName;
00139         }
00140 
00141         $labelFld = $xmlArr['XAXIS']['ATTRIBUTES']['LABELFIELD'];
00142 
00143         $recArray = &$this->getPlotData($bizObj, $fields, $labelFld);
00144 
00145         $i = 0;
00146         foreach($xmlArr['DATASET']['DATA'] as $dtmp)
00147         {
00148             if ($xmlArr['DATASET']['DATA']['ATTRIBUTES'])
00149                 $dtmp = $xmlArr['DATASET']['DATA'];
00150             $data = $recArray[$dtmp["ATTRIBUTES"]["FIELD"]];
00151             $plot = $this->renderXYPlot($data, $dtmp);
00152             if ($plot)
00153                 $graph->Add($plot);
00154             $i++;
00155         }
00156 
00157         // render titles
00158         $graph->title->Set($xmlArr['TITLE']['ATTRIBUTES']['CAPTION']);
00159         $this->_drawString($graph->title,$xmlArr['TITLE']['ATTRIBUTES']['FONT'],$xmlArr['TITLE']['ATTRIBUTES']['COLOR']);
00160 
00161         // render xaxis
00162         $this->_drawAxis($graph->xaxis, $recArray[$labelFld],
00163                 $xmlArr['XAXIS']['ATTRIBUTES']['FONT'], $xmlArr['XAXIS']['ATTRIBUTES']['COLOR'],
00164                 $xmlArr['XAXIS']['ATTRIBUTES']['LABELANGLE'], $xmlArr['XAXIS']['ATTRIBUTES']['TITLE'],
00165                 $xmlArr['XAXIS']['ATTRIBUTES']['TITLEFONT'], $xmlArr['XAXIS']['ATTRIBUTES']['TITLECOLOR'],
00166                 $xmlArr['XAXIS']['ATTRIBUTES']['TITLEMARGIN']);
00167         // render yaxis
00168         $this->_drawAxis($graph->yaxis, null,
00169                 $xmlArr['YAXIS']['ATTRIBUTES']['FONT'], $xmlArr['YAXIS']['ATTRIBUTES']['COLOR'],
00170                 $xmlArr['YAXIS']['ATTRIBUTES']['LABELANGLE'], $xmlArr['YAXIS']['ATTRIBUTES']['TITLE'],
00171                 $xmlArr['YAXIS']['ATTRIBUTES']['TITLEFONT'], $xmlArr['YAXIS']['ATTRIBUTES']['TITLECOLOR'],
00172                 $xmlArr['YAXIS']['ATTRIBUTES']['TITLEMARGIN']);
00173 
00174         // render legend
00175         $this->_drawLegend($graph->legend,$xmlArr['LAGEND']['ATTRIBUTES']['POSITION'],
00176                 $xmlArr['LAGEND']['ATTRIBUTES']['LAYOUT'], $xmlArr['legend']['ATTRIBUTES']['FONT'],
00177                 $xmlArr['LAGEND']['ATTRIBUTES']['COLOR'], $xmlArr['legend']['ATTRIBUTES']['FILLCOLOR']);
00178         $graph->Stroke();
00179     }
00180 
00188     public function pieGraphRender(&$bizObj, &$xmlArr)
00189     {
00190         include_once (JPGRAPH_DIR.'/jpgraph.php');
00191         include_once (JPGRAPH_DIR.'/jpgraph_pie.php');
00192         include_once (JPGRAPH_DIR.'/jpgraph_pie3d.php');
00193 
00194         $graph = new PieGraph($xmlArr["ATTRIBUTES"]["WIDTH"],$xmlArr["ATTRIBUTES"]["HEIGHT"]);
00195         //$graph->SetAntiAliasing();
00196 
00197         // get the data set - only support one data
00198         $fields[0] = $xmlArr['DATASET']['DATAPIE']["ATTRIBUTES"]["FIELD"];
00199         $legendFld = $xmlArr['DATASET']['DATAPIE']["ATTRIBUTES"]["LEGENDFIELD"];
00200 
00201         $recArray = &$this->getPlotData($bizObj, $fields, $legendFld);
00202 
00203         $chartData = $xmlArr['DATASET']['DATAPIE'];
00204         $plot = $this->renderPiePlot($recArray[$fields[0]], $chartData);
00205         $plot->SetLegends($recArray[$legendFld]);
00206         $graph->Add($plot);
00207 
00208         // render titles
00209         $graph->title->Set($xmlArr['TITLE']['ATTRIBUTES']['CAPTION']);
00210         $this->_drawString($graph->title,$xmlArr['TITLE']['ATTRIBUTES']['FONT'],$xmlArr['TITLE']['ATTRIBUTES']['COLOR']);
00211 
00212         // render legend
00213         $this->_drawLegend($graph->legend,$xmlArr['LEGEND']['ATTRIBUTES']['POSITION'],
00214                 $xmlArr['LEGEND']['ATTRIBUTES']['LAYOUT'], $xmlArr['LEGEND']['ATTRIBUTES']['FONT'],
00215                 $xmlArr['LEGEND']['ATTRIBUTES']['COLOR'], $xmlArr['LEGEND']['ATTRIBUTES']['FILLCOLOR']);
00216         $graph->Stroke();
00217     }
00218 
00226     public function renderXYPlot(&$data, &$xmlArr)
00227     {
00228         $id = $xmlArr['ATTRIBUTES']['ID'];
00229         $field = $xmlArr['ATTRIBUTES']['FIELD'];
00230         $chartType = $xmlArr['ATTRIBUTES']['CHARTTYPE'];
00231         $pointType = $xmlArr['ATTRIBUTES']['POINTTYPE'];
00232         $weight = $xmlArr['ATTRIBUTES']['WEIGHT'];
00233         $color = $xmlArr['ATTRIBUTES']['COLOR'];
00234         $fillColor = $xmlArr['ATTRIBUTES']['FILLCOLOR'];
00235         $showVal = $xmlArr['ATTRIBUTES']['SHOWVALUE'];
00236         $legend = $xmlArr['ATTRIBUTES']['LEGENDFIELD'];
00237         $visible = $xmlArr['ATTRIBUTES']['VISIBLE'];
00238 
00239         if ($chartType == 'Line' or $chartType == 'Bar')
00240         {
00241             if ($chartType == 'Line')
00242             {
00243                 include_once (JPGRAPH_DIR.'/jpgraph_line.php');
00244                 $plot = new LinePlot($data);
00245                 $this->_drawMark($plot->mark,
00246                         $xmlArr['POINTMARK']['ATTRIBUTES']['TYPE'], $xmlArr['POINTMARK']['ATTRIBUTES']['COLOR'],
00247                         $xmlArr['POINTMARK']['ATTRIBUTES']['FILLCOLOR'], $xmlArr['POINTMARK']['ATTRIBUTES']['SIZE']);
00248                 $plot->SetBarCenter();
00249                 $plot->SetCenter();
00250             }
00251             else if ($chartType == 'Bar')
00252             {
00253                 include_once (JPGRAPH_DIR.'/jpgraph_bar.php');
00254                 $plot = new BarPlot($data);
00255                 $plot->SetAlign('center');
00256             }
00257             if ($color) $plot->SetColor($color);
00258             if ($fillColor) $plot->SetFillColor($fillColor);
00259             if ($weight) $plot->SetWeight($weight);
00260             if ($showVal == 1) $plot->value->Show();
00261             if ($legend) $plot->SetLegend($legend);
00262             $this->_drawString($plot->value,$xmlArr['VALUE']['ATTRIBUTES']['FONT'],$xmlArr['VALUE']['ATTRIBUTES']['COLOR']);
00263         }
00264 
00265         if ($chartType == 'GroupBar' or $chartType == 'AccBar')
00266         {
00267             $children = $xmlArr['ATTRIBUTES']['CHILDREN'];
00268             $childList = explode(",",$children);
00269             foreach($childList as $child)
00270             {
00271                 $childPlotList[] = $this->m_PlotList[$child];
00272             }
00273             if ($chartType == 'GroupBar')
00274                 $plot = new GroupBarPlot($childPlotList);
00275             else if ($chartType == 'AccBar')
00276                 $plot = new AccBarPlot($childPlotList);
00277         }
00278 
00279         $this->m_PlotList[$id] = $plot;
00280 
00281         if ($visible == 1)
00282             return $plot;
00283         return null;
00284     }
00285 
00293     public function renderPiePlot(&$data, &$xmlArr)
00294     {
00295         $id = $xmlArr['ATTRIBUTES']['ID'];
00296         $field = $xmlArr['ATTRIBUTES']['FIELD'];
00297         $chartType = $xmlArr['ATTRIBUTES']['CHARTTYPE'];
00298         $size = $xmlArr['ATTRIBUTES']['SIZE'];
00299         $center = $xmlArr['ATTRIBUTES']['CENTER'];
00300         $height = $xmlArr['ATTRIBUTES']['HEIGHT'];
00301         $angle = $xmlArr['ATTRIBUTES']['ANGLE'];
00302         $labelPos = $xmlArr['ATTRIBUTES']['LABELPOS'];
00303         $legendField = $xmlArr['ATTRIBUTES']['LAGENDFIELD'];
00304 
00305         if ($chartType == "Pie")
00306         {
00307             $plot = new PiePlot($data);
00308             $plot->SetLabelPos($labelPos);
00309         }
00310         else if ($chartType == "Pie3D")
00311         {
00312             $plot = new PiePlot3D($data);
00313             $plot->SetHeight($height);
00314             $plot->SetAngle($angle);
00315         }
00316         list($c1, $c2) = explode(',', $center);
00317         $plot->SetCenter($c1,$c2);
00318         $plot->SetSize($size);
00319 
00320         $this->_drawString($plot->value,$xmlArr['VALUE']['ATTRIBUTES']['FONT'],$xmlArr['VALUE']['ATTRIBUTES']['COLOR']);
00321 
00322         return $plot;
00323     }
00324 
00332     private function _drawString(&$g, $font=null, $color=null)
00333     {
00334         if ($font)
00335         {
00336             list($ft,$fs,$size) = explode(",",$font);
00337             $g->SetFont($this->_getFont($ft),$this->_getFontStyle($fs),$size);
00338         }
00339         if ($color) $g->SetColor($color);
00340     }
00341 
00349     private function _drawLegend(&$g, $pos, $layout, $font, $color, $fcolor)
00350     {
00351         $this->_drawString($g,$font,$color);
00352         if ($fcolor) $g->SetFillColor($fcolor);
00353         if ($pos)
00354         {
00355             list($x,$y,$hap,$vap) = explode(",",$pos);
00356             $g->SetPos($x,$y,$hap,$vap);
00357         }
00358         if ($layout && $layout == 'HOR')
00359         {
00360             $g->SetLayout(LEGEND_HOR);
00361         }
00362     }
00363 
00371     private function _drawAxis(&$g, $labels, $font, $color, $labelAng, $title, $titleFont, $titleColor, $titleMargin)
00372     {
00373         $this->_drawString($g,$font, $color);
00374         if ($title) $g->title->Set($title);
00375         $this->_drawString($g->title,$titleFont, $titleColor);
00376         if ($labels) $g->SetTickLabels($labels);
00377         if ($labelAng) $g->SetLabelAngle($labelAng);
00378         if ($titleMargin) $g->SetTitleMargin($titleMargin);
00379     }
00380 
00388     private function _drawMark(&$g, $type, $color, $fcolor, $size)
00389     {
00390         if ($type) $g->SetType($this->_getMark($type));
00391         if ($color) $g->SetColor($color);
00392         if ($fcolor) $g->SetFillColor($fcolor);
00393         if ($size) $g->SetSize($size);
00394     }
00395 
00403     private function _getMark($mark)
00404     {
00405         switch (strtoupper($mark))
00406         {
00407             case "SQUARE": return MARK_SQUARE;
00408             case "UTRIANGLE": return MARK_UTRIANGLE;
00409             case "DTRIANGLE": return MARK_DTRIANGLE;
00410             case "DIAMOND": return MARK_DIAMOND;
00411             case "CIRCLE": return MARK_CIRCLE;
00412             case "FILLEDCIRCLE": return MARK_FILLEDCIRCLE;
00413             case "CROSS": return MARK_CROSS;
00414             case "STAR": return MARK_STAR;
00415             case "X": return MARK_X;
00416             default: return 0;
00417         }
00418     }
00419 
00427     private function _getFont($font)
00428     {
00429         switch (strtoupper($font))
00430         {
00431             case "ARIAL": return FF_ARIAL;
00432             case "COURIER;": return FF_COURIER;
00433             case "TIMES": return FF_TIMES;
00434             case "VERDANA": return FF_VERDANA;
00435             case "COMIC": return FF_COMIC;
00436             case "GEORGIA": return FF_GEORGIA;
00437             default: return FF_FONT1;
00438         }
00439     }
00440 
00441     
00449     private function _getFontStyle($fontStyle)
00450     {
00451         switch (strtoupper($fontStyle))
00452         {
00453             case "NORMAL": return FS_NORMAL;
00454             case "BOLD": return FS_BOLD;
00455             case "ITALIC": return FS_ITALIC;
00456             case "BOLDITALIC": return FS_BOLDITALIC;
00457             default: return FS_NORMAL;
00458         }
00459     }
00460 }
00461 
00462 ?>

Generated on Thu Apr 19 2012 17:09:13 for openbiz by  doxygen 1.7.2