From bd2524521dc20b3152ebc33b6d9800a866b0446a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Dec 2006 00:28:04 +0000 Subject: [PATCH] =?UTF-8?q?New:=20On=20d=E9finit=20la=20constante=20MAIN?= =?UTF-8?q?=5FGRAPH=5FLIBRARY=20qui=20pourra=20etre=20utilis=E9=20pour=20c?= =?UTF-8?q?hoisir=20la=20librairie=20graphique=20utilis=E9e.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/conf/conf.class.php | 7 + htdocs/dolgraph.class.php | 939 +++++++++++++++++++------------------ 2 files changed, 479 insertions(+), 467 deletions(-) diff --git a/htdocs/conf/conf.class.php b/htdocs/conf/conf.class.php index 507adc74aca..9690b855818 100644 --- a/htdocs/conf/conf.class.php +++ b/htdocs/conf/conf.class.php @@ -426,6 +426,13 @@ class Conf $this->adherent->email_new_subject=MAIN_MAIL_NEW_SUBJECT; } + // Defini MAIN_GRAPH_LIBRARY + if (! in_array($this->global->MAIN_GRAPH_LIBRARY, array('phplot','artichow'))) + { + $this->global->MAIN_GRAPH_LIBRARY='phplot'; + // $this->global->MAIN_GRAPH_LIBRARY = 'artichow'; + } + // Format de la date // \todo Mettre les 4 formats dans fichier langue $this->format_date_short="%d/%m/%Y"; diff --git a/htdocs/dolgraph.class.php b/htdocs/dolgraph.class.php index 163767a65d0..f6f1d823977 100644 --- a/htdocs/dolgraph.class.php +++ b/htdocs/dolgraph.class.php @@ -46,499 +46,504 @@ class DolGraph { - //! Type du graphique - var $type='bars'; - //! Tableau de donnees - var $data; - var $width=380; - var $height=200; - var $MaxValue=0; - var $MinValue=0; - var $SetShading=0; - var $PrecisionY=-1; - var $SetHorizTickIncrement=-1; - var $SetNumXTicks=-1; - - var $graph; // Objet PHPlot - var $error; - - var $library; - - function DolGraph() - { - global $conf; - global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; - - $this->library = 'phplot'; + //! Type du graphique + var $type='bars'; + //! Tableau de donnees + var $data; + var $width=380; + var $height=200; + var $MaxValue=0; + var $MinValue=0; + var $SetShading=0; + var $PrecisionY=-1; + var $SetHorizTickIncrement=-1; + var $SetNumXTicks=-1; - // Test si module GD présent - $modules_list = get_loaded_extensions(); - $isgdinstalled=0; - foreach ($modules_list as $module) - { - if ($module == 'gd') { $isgdinstalled=1; } - } - if (! $isgdinstalled) { - $this->error="Erreur: Le module GD pour php ne semble pas disponible. Il est requis pour générer les graphiques."; - return -1; - } - - // Vérifie que chemin vers PHPLOT_PATH est connu et definie $graphpath - $graphpathdir=DOL_DOCUMENT_ROOT."/includes/phplot"; - if (defined('PHPLOT_PATH')) $graphpathdir=PHPLOT_PATH; - if ($conf->global->PHPLOT_PATH) $graphpathdir=$conf->global->PHPLOT_PATH; - if (! eregi('[\\\/]$',$graphpathdir)) $graphpathdir.='/'; - - include_once($graphpathdir.'phplot.php'); - - - // Défini propriétés de l'objet graphe - $this->bordercolor = array(235,235,224); - $this->datacolor = array(array(120,130,150), array(160,160,180), array(190,190,220)); - $this->bgcolor = array(235,235,224); - - $color_file = DOL_DOCUMENT_ROOT."/theme/".$conf->theme."/graph-color.php"; - if (is_readable($color_file)) - { - include_once($color_file); - if (isset($theme_bordercolor)) $this->bordercolor = $theme_bordercolor; - if (isset($theme_datacolor)) $this->datacolor = $theme_datacolor; - if (isset($theme_bgcolor)) $this->bgcolor = $theme_bgcolor; - } - //print 'bgcolor: '.join(',',$this->bgcolor).'
'; - return 1; - } - - - function isGraphKo() - { - return $this->error; - } - - /** - * \brief Génère le fichier graphique sur le disque - * \param file Nom du fichier image - */ - function draw($file) - { - $call = "draw_".$this->library; - $this->$call($file); - } - - function prepare($file) - { - $call = "prepare_".$this->library; - $this->$call($file); - } + var $graph; // Objet Graph (PHPlot ou Artichow...) + var $error; - function generate($file) - { - $call = "generate_".$this->library; - $this->$call($file); - } - - /** - * Artichow - * - * - * - */ - function draw_artichow($file) - { - require_once DOL_DOCUMENT_ROOT."/../external-libs/Artichow/BarPlot.class.php"; - - $graph = new Graph($this->width, $this->height); - if (isset($this->title)) $graph->title->set($this->title); - - $graph->border->hide(); - - $color = new Color(244,244,244); - - $graph->setAntiAliasing(TRUE); - - $graph->setBackgroundColor( $color ); - - $i = 0; - foreach($this->data as $key => $value) - { - $values[$i] = $value[1]; - $legends[$i] = $value[0]; - $i++; - } - - $plot = new BarPlot($values); - $plot->setSize(1, 0.96); - $plot->setCenter(0.5, 0.52); - - $plot->setBarColor( new LightGreen(25) ); - - $plot->xAxis->setLabelText($legends); - $plot->xAxis->label->setFont(new Tuffy(7)); - - $graph->add($plot); - - $graph->draw($file); - } - - /** - * \brief Génère le fichier graphique sur le disque - * \param file Nom du fichier image - */ - function draw_phplot($file) - { - // Prepare parametres - $this->prepare_phplot($file); - - $this->generate_phplot(); - } - - function generate_phplot() - { - // Génère le fichier $file - $this->graph->DrawGraph(); - } - - /** - * \brief Prépare l'objet PHPlot - * \param file Nom du fichier image à générer - */ - function prepare_phplot($file) - { - // Define the object - $this->graph = new PHPlot($this->width, $this->height); - - $phplotversion=4; - if (defined('TOTY')) $phplotversion=5; - - $this->graph->SetIsInline(1); - - $this->graph->SetPlotType($this->type); - $this->graph->SetDataValues($this->data); - - // Precision axe y (pas de decimal si 3 chiffres ou plus) - if ($this->PrecisionY > -1) - { - $this->graph->SetPrecisionY($this->PrecisionY); - if ($this->PrecisionY == 0) // Si precision de 0 - { - // Determine un nombre de ticks qui permet decoupage qui tombe juste - $maxval=$this->getMaxValue(); - $minval=$this->getMinValue(); - if ($maxval * $minval >= 0) // Si du meme signe - { - $plage=$maxval; - } - else - { - $plage=$maxval-$minval; - } - if (abs($plage) <= 2) - { - $this->SetMaxValue(2); - $maxticks=2; - } - else - { - $maxticks=10; - if (substr($plage,0,1) == 3 || substr($plage,0,1) == 6) - { - $maxticks=min(6,$plage); - } - elseif (substr($plage,0,1) == 4 || substr($plage,0,1) == 8) - { - $maxticks=min(8,$plage); - } - elseif (substr($plage,0,1) == 7) - { - $maxticks=min(7,$plage); - } - elseif (substr($plage,0,1) == 9) - { - $maxticks=min(9,$plage); - } - } - $this->graph->SetNumVertTicks($maxticks); - // print 'minval='.$minval.' - maxval='.$maxval.' - plage='.$plage.' - maxticks='.$maxticks.'
'; - } - } - else - { - $this->graph->SetPrecisionY(3-strlen(round($this->GetMaxValueInData()))); - } - $this->graph->SetPrecisionX(0); - - // Set areas - $top_space=40; - if ($phplotversion >= 5) $top_space=25; - $left_space=80; // For y labels - $right_space=10; // If no legend - if (isset($this->Legend)) - { - foreach($this->Legend as $key => $val) - { - $maxlen=max($maxlen,$val); - } - $right_space=50+strlen($maxlen)*6; // For legend - } - - $this->graph->SetNewPlotAreaPixels($left_space, $top_space, $this->width-$right_space, $this->height-40); - if (isset($this->MaxValue)) - { - $this->graph->SetPlotAreaWorld(0,$this->MinValue,sizeof($this->data),$this->MaxValue); - } - - // Define title - if (isset($this->title)) $this->graph->SetTitle($this->title); - - // Défini position du graphe (et legende) au sein de l'image - if (isset($this->Legend)) - { - $this->graph->SetLegendPixels($this->width-$right_space+8,40,''); - $this->graph->SetLegend($this->Legend); - } - - if (isset($this->SetShading)) - { - $this->graph->SetShading($this->SetShading); - } - $this->graph->SetTickLength(6); - - $this->graph->SetBackgroundColor($this->bgcolor); - $this->graph->SetDataColors($this->datacolor, $this->bordercolor); - - if ($this->SetNumXTicks > -1) - { - if ($phplotversion >= 5) // If PHPlot 5, for compatibility - { - $this->graph->SetXLabelType(''); - $this->graph->SetNumXTicks($this->SetNumXTicks); - } - else - { - $this->graph->SetNumHorizTicks($this->SetNumXTicks); - } - } - if ($this->SetHorizTickIncrement > -1) - { - // Les ticks sont en mode forcé - $this->graph->SetHorizTickIncrement($this->SetHorizTickIncrement); - if ($phplotversion >= 5) // If PHPlot 5, for compatibility - { - $this->graph->SetXLabelType(''); - $this->graph->SetXTickLabelPos('none'); - } - } - else - { - // Les ticks sont en mode automatique - if ($phplotversion >= 5) // If PHPlot 5, for compatibility - { - $this->graph->SetXDataLabelPos('none'); - } - } - - if ($phplotversion >= 5) - { - // Ne gere pas la transparence - // $this->graph->SetBgImage(DOL_DOCUMENT_ROOT.'/theme/dolibarr_logo_2.png','tile'); - $this->graph->SetDrawPlotAreaBackground(array(255,255,255)); - } - - $this->graph->SetPlotBorderType("left"); // Affiche axe y a gauche uniquement - $this->graph->SetVertTickPosition('plotleft'); // Affiche tick axe y a gauche uniquement - - $this->graph->SetOutputFile($file); - } - - function SetPrecisionY($which_prec) - { - $this->PrecisionY = $which_prec; - return true; - } - - /* - \remarks Utiliser SetNumTicks ou SetHorizTickIncrement mais pas les 2 - */ - function SetHorizTickIncrement($xi) - { - $this->SetHorizTickIncrement = $xi; - return true; - } - - /* - \remarks Utiliser SetNumTicks ou SetHorizTickIncrement mais pas les 2 - */ - function SetNumXTicks($xt) - { - $this->SetNumXTicks = $xt; - return true; - } + var $library=''; // Par defaut on utiliser PHPlot - function SetYLabel($label) - { - $this->YLabel = $label; - } + function DolGraph() + { + global $conf; + global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; - function SetWidth($w) - { - $this->width = $w; - } + // Test si module GD présent + $modules_list = get_loaded_extensions(); + $isgdinstalled=0; + foreach ($modules_list as $module) + { + if ($module == 'gd') { $isgdinstalled=1; } + } + if (! $isgdinstalled) + { + $this->error="Erreur: Le module GD pour php ne semble pas disponible. Il est requis pour générer les graphiques."; + return -1; + } - function SetTitle($title) - { - $this->title = $title; - } + // Défini propriétés de l'objet graphe + $this->library=$conf->global->MAIN_GRAPH_LIBRARY; - function SetData($data) - { - $this->data = $data; - } + $this->bordercolor = array(235,235,224); + $this->datacolor = array(array(120,130,150), array(160,160,180), array(190,190,220)); + $this->bgcolor = array(235,235,224); - function SetType($type) - { - $this->type = $type; - } + $color_file = DOL_DOCUMENT_ROOT."/theme/".$conf->theme."/graph-color.php"; + if (is_readable($color_file)) + { + include_once($color_file); + if (isset($theme_bordercolor)) $this->bordercolor = $theme_bordercolor; + if (isset($theme_datacolor)) $this->datacolor = $theme_datacolor; + if (isset($theme_bgcolor)) $this->bgcolor = $theme_bgcolor; + } + //print 'bgcolor: '.join(',',$this->bgcolor).'
'; + return 1; + } - function SetLegend($legend) - { - $this->Legend = $legend; - } - function SetMaxValue($max) - { - $this->MaxValue = $max; - } - function GetMaxValue() - { - return $this->MaxValue; - } + function isGraphKo() + { + return $this->error; + } - function SetMinValue($min) - { - $this->MinValue = $min; - } - function GetMinValue() - { - return $this->MinValue; - } + /** + * \brief Génère le fichier graphique sur le disque + * \param file Nom du fichier image + */ + function draw($file) + { + $call = "draw_".$this->library; + $this->$call($file); + } - function SetHeight($h) - { - $this->height = $h; - } + function prepare($file) + { + $call = "prepare_".$this->library; + $this->$call($file); + } - function SetShading($s) - { - $this->SetShading = $s; - } + function generate($file) + { + $call = "generate_".$this->library; + $this->$call($file); + } - function ResetBgColor() - { - unset($this->bgcolor); - } + /** + * Artichow + * + * + * + */ + function draw_artichow($file) + { + require_once DOL_DOCUMENT_ROOT."/../external-libs/Artichow/BarPlot.class.php"; - /** - * \brief Definie la couleur de fond du graphique - * \param bg_color array(R,G,B) ou 'onglet' ou 'default' - */ - function SetBgColor($bg_color = array(255,255,255)) - { - global $theme_bgcolor,$theme_bgcoloronglet; - if (! is_array($bg_color)) - { - if ($bg_color == 'onglet') - { - //print 'ee'.join(',',$theme_bgcoloronglet); - $this->bgcolor = $theme_bgcoloronglet; - } - else - { - $this->bgcolor = $theme_bgcolor; - } - } - else - { - $this->bgcolor = $bg_color; - } - } + $graph = new Graph($this->width, $this->height); + if (isset($this->title)) $graph->title->set($this->title); - function ResetDataColor() - { - unset($this->datacolor); - } + $graph->border->hide(); - function GetMaxValueInData() - { - $k = 0; - $vals = array(); + $color = new Color(244,244,244); - $nblines = sizeof($this->data); - $nbvalues = sizeof($this->data[0]) - 1; + $graph->setAntiAliasing(TRUE); - for ($j = 0 ; $j < $nblines ; $j++) - { - for ($i = 0 ; $i < $nbvalues ; $i++) - { - $vals[$k] = $this->data[$j][$i+1]; - $k++; - } - } - rsort($vals); - return $vals[0]; - } + $graph->setBackgroundColor( $color ); - function GetMinValueInData() - { - $k = 0; - $vals = array(); + $i = 0; + foreach($this->data as $key => $value) + { + $values[$i] = $value[1]; + $legends[$i] = $value[0]; + $i++; + } - $nblines = sizeof($this->data); - $nbvalues = sizeof($this->data[0]) - 1; + $plot = new BarPlot($values); + $plot->setSize(1, 0.96); + $plot->setCenter(0.5, 0.52); - for ($j = 0 ; $j < $nblines ; $j++) - { - for ($i = 0 ; $i < $nbvalues ; $i++) - { - $vals[$k] = $this->data[$j][$i+1]; - $k++; - } - } - sort($vals); - return $vals[0]; - } + $plot->setBarColor( new LightGreen(25) ); - function GetCeilMaxValue() - { - $max = $this->GetMaxValueInData(); - if ($max != 0) $max++; - $size=strlen(abs(ceil($max))); - $factor=1; - for ($i=0; $i < ($size-1); $i++) - { - $factor*=10; - } - $res=ceil($max/$factor)*$factor; + $plot->xAxis->setLabelText($legends); + $plot->xAxis->label->setFont(new Tuffy(7)); - //print "max=".$max." res=".$res; - return $res; - } + $graph->add($plot); - function GetFloorMinValue() - { - $min = $this->GetMinValueInData(); - if ($min != 0) $min--; - $size=strlen(abs(floor($min))); - $factor=1; - for ($i=0; $i < ($size-1); $i++) - { - $factor*=10; - } - $res=floor($min/$factor)*$factor; + $graph->draw($file); + } - //print "min=".$min." res=".$res; - return $res; - } + /** + * \brief Génère le fichier graphique sur le disque + * \param file Nom du fichier image + */ + function draw_phplot($file) + { + // Prepare parametres + $this->prepare_phplot($file); + + $this->generate_phplot(); + } + + /** + * \brief Prépare l'objet PHPlot + * \param file Nom du fichier image à générer + */ + function prepare_phplot($file) + { + // Vérifie que chemin vers PHPLOT_PATH est connu et on definie $graphpathdir + $graphpathdir=DOL_DOCUMENT_ROOT."/includes/phplot"; + if (defined('PHPLOT_PATH')) $graphpathdir=PHPLOT_PATH; + if ($conf->global->PHPLOT_PATH) $graphpathdir=$conf->global->PHPLOT_PATH; + if (! eregi('[\\\/]$',$graphpathdir)) $graphpathdir.='/'; + include_once($graphpathdir.'phplot.php'); + + // Define the object + $this->graph = new PHPlot($this->width, $this->height); + + $phplotversion=4; + if (defined('TOTY')) $phplotversion=5; + + $this->graph->SetIsInline(1); + + $this->graph->SetPlotType($this->type); + $this->graph->SetDataValues($this->data); + + // Precision axe y (pas de decimal si 3 chiffres ou plus) + if ($this->PrecisionY > -1) + { + $this->graph->SetPrecisionY($this->PrecisionY); + if ($this->PrecisionY == 0) // Si precision de 0 + { + // Determine un nombre de ticks qui permet decoupage qui tombe juste + $maxval=$this->getMaxValue(); + $minval=$this->getMinValue(); + if ($maxval * $minval >= 0) // Si du meme signe + { + $plage=$maxval; + } + else + { + $plage=$maxval-$minval; + } + if (abs($plage) <= 2) + { + $this->SetMaxValue(2); + $maxticks=2; + } + else + { + $maxticks=10; + if (substr($plage,0,1) == 3 || substr($plage,0,1) == 6) + { + $maxticks=min(6,$plage); + } + elseif (substr($plage,0,1) == 4 || substr($plage,0,1) == 8) + { + $maxticks=min(8,$plage); + } + elseif (substr($plage,0,1) == 7) + { + $maxticks=min(7,$plage); + } + elseif (substr($plage,0,1) == 9) + { + $maxticks=min(9,$plage); + } + } + $this->graph->SetNumVertTicks($maxticks); + // print 'minval='.$minval.' - maxval='.$maxval.' - plage='.$plage.' - maxticks='.$maxticks.'
'; + } + } + else + { + $this->graph->SetPrecisionY(3-strlen(round($this->GetMaxValueInData()))); + } + $this->graph->SetPrecisionX(0); + + // Set areas + $top_space=40; + if ($phplotversion >= 5) $top_space=25; + $left_space=80; // For y labels + $right_space=10; // If no legend + if (isset($this->Legend)) + { + foreach($this->Legend as $key => $val) + { + $maxlen=max($maxlen,$val); + } + $right_space=50+strlen($maxlen)*6; // For legend + } + + $this->graph->SetNewPlotAreaPixels($left_space, $top_space, $this->width-$right_space, $this->height-40); + if (isset($this->MaxValue)) + { + $this->graph->SetPlotAreaWorld(0,$this->MinValue,sizeof($this->data),$this->MaxValue); + } + + // Define title + if (isset($this->title)) $this->graph->SetTitle($this->title); + + // Défini position du graphe (et legende) au sein de l'image + if (isset($this->Legend)) + { + $this->graph->SetLegendPixels($this->width-$right_space+8,40,''); + $this->graph->SetLegend($this->Legend); + } + + if (isset($this->SetShading)) + { + $this->graph->SetShading($this->SetShading); + } + $this->graph->SetTickLength(6); + + $this->graph->SetBackgroundColor($this->bgcolor); + $this->graph->SetDataColors($this->datacolor, $this->bordercolor); + + if ($this->SetNumXTicks > -1) + { + if ($phplotversion >= 5) // If PHPlot 5, for compatibility + { + $this->graph->SetXLabelType(''); + $this->graph->SetNumXTicks($this->SetNumXTicks); + } + else + { + $this->graph->SetNumHorizTicks($this->SetNumXTicks); + } + } + if ($this->SetHorizTickIncrement > -1) + { + // Les ticks sont en mode forc + $this->graph->SetHorizTickIncrement($this->SetHorizTickIncrement); + if ($phplotversion >= 5) // If PHPlot 5, for compatibility + { + $this->graph->SetXLabelType(''); + $this->graph->SetXTickLabelPos('none'); + } + } + else + { + // Les ticks sont en mode automatique + if ($phplotversion >= 5) // If PHPlot 5, for compatibility + { + $this->graph->SetXDataLabelPos('none'); + } + } + + if ($phplotversion >= 5) + { + // Ne gere pas la transparence + // $this->graph->SetBgImage(DOL_DOCUMENT_ROOT.'/theme/dolibarr_logo_2.png','tile'); + $this->graph->SetDrawPlotAreaBackground(array(255,255,255)); + } + + $this->graph->SetPlotBorderType("left"); // Affiche axe y a gauche uniquement + $this->graph->SetVertTickPosition('plotleft'); // Affiche tick axe y a gauche uniquement + + $this->graph->SetOutputFile($file); + } + + /** + * \brief Génère le graph dans fichier préparer dans $graph + * \param file Nom du fichier image + */ + function generate_phplot() + { + $this->graph->DrawGraph(); + } + + + + function SetPrecisionY($which_prec) + { + $this->PrecisionY = $which_prec; + return true; + } + + /* + \remarks Utiliser SetNumTicks ou SetHorizTickIncrement mais pas les 2 + */ + function SetHorizTickIncrement($xi) + { + $this->SetHorizTickIncrement = $xi; + return true; + } + + /* + \remarks Utiliser SetNumTicks ou SetHorizTickIncrement mais pas les 2 + */ + function SetNumXTicks($xt) + { + $this->SetNumXTicks = $xt; + return true; + } + + + function SetYLabel($label) + { + $this->YLabel = $label; + } + + function SetWidth($w) + { + $this->width = $w; + } + + function SetTitle($title) + { + $this->title = $title; + } + + function SetData($data) + { + $this->data = $data; + } + + function SetType($type) + { + $this->type = $type; + } + + function SetLegend($legend) + { + $this->Legend = $legend; + } + + function SetMaxValue($max) + { + $this->MaxValue = $max; + } + function GetMaxValue() + { + return $this->MaxValue; + } + + function SetMinValue($min) + { + $this->MinValue = $min; + } + function GetMinValue() + { + return $this->MinValue; + } + + function SetHeight($h) + { + $this->height = $h; + } + + function SetShading($s) + { + $this->SetShading = $s; + } + + function ResetBgColor() + { + unset($this->bgcolor); + } + + /** + * \brief Definie la couleur de fond du graphique + * \param bg_color array(R,G,B) ou 'onglet' ou 'default' + */ + function SetBgColor($bg_color = array(255,255,255)) + { + global $theme_bgcolor,$theme_bgcoloronglet; + if (! is_array($bg_color)) + { + if ($bg_color == 'onglet') + { + //print 'ee'.join(',',$theme_bgcoloronglet); + $this->bgcolor = $theme_bgcoloronglet; + } + else + { + $this->bgcolor = $theme_bgcolor; + } + } + else + { + $this->bgcolor = $bg_color; + } + } + + function ResetDataColor() + { + unset($this->datacolor); + } + + function GetMaxValueInData() + { + $k = 0; + $vals = array(); + + $nblines = sizeof($this->data); + $nbvalues = sizeof($this->data[0]) - 1; + + for ($j = 0 ; $j < $nblines ; $j++) + { + for ($i = 0 ; $i < $nbvalues ; $i++) + { + $vals[$k] = $this->data[$j][$i+1]; + $k++; + } + } + rsort($vals); + return $vals[0]; + } + + function GetMinValueInData() + { + $k = 0; + $vals = array(); + + $nblines = sizeof($this->data); + $nbvalues = sizeof($this->data[0]) - 1; + + for ($j = 0 ; $j < $nblines ; $j++) + { + for ($i = 0 ; $i < $nbvalues ; $i++) + { + $vals[$k] = $this->data[$j][$i+1]; + $k++; + } + } + sort($vals); + return $vals[0]; + } + + function GetCeilMaxValue() + { + $max = $this->GetMaxValueInData(); + if ($max != 0) $max++; + $size=strlen(abs(ceil($max))); + $factor=1; + for ($i=0; $i < ($size-1); $i++) + { + $factor*=10; + } + $res=ceil($max/$factor)*$factor; + + //print "max=".$max." res=".$res; + return $res; + } + + function GetFloorMinValue() + { + $min = $this->GetMinValueInData(); + if ($min != 0) $min--; + $size=strlen(abs(floor($min))); + $factor=1; + for ($i=0; $i < ($size-1); $i++) + { + $factor*=10; + } + $res=floor($min/$factor)*$factor; + + //print "min=".$min." res=".$res; + return $res; + } } ?>