diff --git a/htdocs/bargraph.class.php b/htdocs/bargraph.class.php index 24051b2faba..718770e9923 100644 --- a/htdocs/bargraph.class.php +++ b/htdocs/bargraph.class.php @@ -1,6 +1,6 @@ - * Copyright (c) 2004 Laurent Destailleur + * Copyright (c) 2004-2005 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,95 +32,72 @@ include_once(DOL_DOCUMENT_ROOT."/graph.class.php"); /** \class BarGraph \brief Classe permettant la gestion des graphs phplot + \remarks Utilisation: + $px = new BarGraph(); + $graph_data = array("1"=>10,"2"=>20); + $px->SetData($graph_data); + $px->SetTitle("title"); + $px->SetLegend(array("Val1","Val2")); + $px->width = 380; + $px->height = 200; + $px->draw("fichier.png"); + */ class BarGraph extends Graph { - var $db; - var $errorstr; + var $db; + var $error; - /** - * \brief Initialisation - * \return int Retour: 0 si ko, 1 si ok - */ - function BarGraph($data=array()) { + /** + * \brief Initialisation graphe + * \return int <0 si ko, >0 si ok + */ + function BarGraph() + { + // 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; + } - $modules_list = get_loaded_extensions(); - $isgdinstalled=0; - foreach ($modules_list as $module) - { - if ($module == 'gd') { $isgdinstalled=1; } - } - if (! $isgdinstalled) { - $this->errorstr="Erreur: Le module GD pour php ne semble pas disponible. Il est requis pour générer les graphiques."; - return; - } - - $this->data = $data; + // Défini propriétés de l'objet graphe + $this->data = $data; // En general data non defini qd on crée objet - $this->bgcolor = array(235,235,224); - //$this->bgcolor = array(235,235,200); - $this->bordercolor = array(235,235,224); - $this->datacolor = array(array(204,204,179), - array(187,187,136), - array(235,235,224)); + $this->bordercolor = array(235,235,224); + $this->datacolor = array(array(204,204,179), array(187,187,136), array(235,235,224)); + $this->bgcolor = array(235,235,224); + $color_file = DOL_DOCUMENT_ROOT."/theme/".$conf->theme."/graph-color.php"; + if (is_readable($color_file)) + { + include($color_file); + $this->bgcolor = $theme_bgcolor; + } - $color_file = DOL_DOCUMENT_ROOT."/theme/".$conf->theme."/graph-color.php"; - if (is_readable($color_file)) - { - include($color_file); - $this->bgcolor = $theme_bgcolor; - } + $this->precision_y = 0; - $this->precision_y = 0; - - $this->width = 400; - $this->height = 200; - - $this->PlotType = 'bars'; - - return; - } - - function isGraphKo() { - return $this->errorstr; - } - - /** - * \brief Génère le fichier graphique sur le disque - * \param file Nom du fichier image - * \param data Tableau des données - * \param title Titre de l'image - */ - function draw($file, $data, $title='') { - $this->prepare($file, $data, $title); + $this->width = 400; + $this->height = 200; - if (substr($this->MaxValue,0,1) == 1) - { - $this->graph->SetNumVertTicks(10); - } - elseif (substr($this->MaxValue,0,1) == 2) - { - $this->graph->SetNumVertTicks(4); - } - elseif (substr($this->MaxValue,0,1) == 3) - { - $this->graph->SetNumVertTicks(6); - } - elseif (substr($this->MaxValue,0,1) == 4) - { - $this->graph->SetNumVertTicks(8); - } - else - { - $this->graph->SetNumVertTicks(substr($this->MaxValue,0,1)); - } + $this->PlotType = 'bars'; - // Génère le fichier $file - $this->graph->DrawGraph(); - } + return 1; + } + + + function isGraphKo() + { + return $this->error; + } + } ?> diff --git a/htdocs/comm/propal/stats/index.php b/htdocs/comm/propal/stats/index.php index 2c1ec887f20..3980d789d87 100644 --- a/htdocs/comm/propal/stats/index.php +++ b/htdocs/comm/propal/stats/index.php @@ -44,14 +44,15 @@ if (! is_dir($conf->propal->dir_images)) { mkdir($conf->propal->dir_images); } $filename = $conf->propal->dir_images."/nbpropale2year-$year.png"; $fileurl = DOL_URL_ROOT.'/viewimage.php?modulepart=propalstats&file=nbpropale2year-'.$year.'.png'; -$px = new BarGraph($data); +$px = new BarGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { - $px->SetMaxValue($px->GetMaxValue()); + $px->SetData($data); $px->SetLegend(array($year - 1, $year)); + $px->SetMaxValue($px->GetMaxValue()); $px->SetWidth(450); $px->SetHeight(280); - $px->draw($filename, $data, $year); + $px->draw($filename); } $sql = "SELECT count(*), date_format(datep,'%Y') as dm, sum(price) FROM ".MAIN_DB_PREFIX."propal WHERE fk_statut > 0 GROUP BY dm DESC "; diff --git a/htdocs/comm/propal/stats/month.php b/htdocs/comm/propal/stats/month.php index 2b15601cf79..a39f3dc9fc9 100644 --- a/htdocs/comm/propal/stats/month.php +++ b/htdocs/comm/propal/stats/month.php @@ -57,13 +57,14 @@ if (! is_dir($conf->propal->dir_images)) { mkdir($conf->propal->dir_images); } $filename = $conf->propal->dir_images."/propale".$year.".png"; $fileurl = DOL_URL_ROOT.'/viewimage.php?modulepart=propalstats&file=propale'.$year.'.png'; -$px = new BarGraph($data); +$px = new BarGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { + $px->SetData($data); $px->SetMaxValue($px->GetMaxValue()); $px->SetWidth($WIDTH); $px->SetHeight($HEIGHT); - $px->draw($filename, $data, $year); + $px->draw($filename); } $res = $stats->getAmountByMonth($year); @@ -78,9 +79,10 @@ for ($i = 1 ; $i < 13 ; $i++) $filename_amount = $conf->propal->dir_images."/propaleamount".$year.".png"; $fileurl_amount = DOL_URL_ROOT.'/viewimage.php?modulepart=propalstats&file=propaleamount'.$year.'.png'; -$px = new BarGraph($data); +$px = new BarGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { + $px->SetData($data); $px->SetYLabel($langs->trans("AmountTotal")); $px->SetMaxValue($px->GetAmountMaxValue()); $px->SetWidth($WIDTH); @@ -98,14 +100,15 @@ for ($i = 1 ; $i < 13 ; $i++) $filename_avg = $conf->propal->dir_images."/propaleaverage".$year.".png"; $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=propalstats&file=propaleaverage'.$year.'.png'; -$px = new BarGraph($data); +$px = new BarGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { + $px->SetData($data); $px->SetYLabel($langs->trans("AmountAverage")); $px->SetMaxValue($px->GetAmountMaxValue()); $px->SetWidth($WIDTH); $px->SetHeight($HEIGHT); - $px->draw($filename_avg, $data, $year); + $px->draw($filename_avg); } print ''; diff --git a/htdocs/commande/stats/index.php b/htdocs/commande/stats/index.php index 3f7f8cec267..a35efd6bbdc 100644 --- a/htdocs/commande/stats/index.php +++ b/htdocs/commande/stats/index.php @@ -63,14 +63,15 @@ if (! is_dir($conf->commande->dir_images)) $filename = $conf->commande->dir_images."/nbcommande2year-".$year.".png"; $fileurl = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=nbcommande2year-'.$year.'.png'; -$px = new BarGraph($data); +$px = new BarGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { + $px->SetData($data); $px->SetMaxValue($px->GetMaxValue()); $px->SetWidth(450); $px->SetHeight(280); $px->SetYLabel("Nombre de commande"); - $px->draw($filename, $data, $year); + $px->draw($filename); } $rows = $stats->getNbByYear(); $num = sizeof($rows); diff --git a/htdocs/commande/stats/month.php b/htdocs/commande/stats/month.php index 0bdac2260c6..de444a320fa 100644 --- a/htdocs/commande/stats/month.php +++ b/htdocs/commande/stats/month.php @@ -67,14 +67,15 @@ if (! is_dir($conf->commande->dir_images)) { mkdir($conf->commande->dir_images); $filename = $conf->commande->dir_images."/commande".$year.".png"; $fileurl = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=commande'.$year.'.png'; -$px = new BarGraph($data); +$px = new BarGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { + $px->SetData($data); $px->SetMaxValue($px->GetMaxValue()); $px->SetWidth($WIDTH); $px->SetHeight($HEIGHT); $px->SetYLabel("Nombre de commande"); - $px->draw($filename, $data, $year); + $px->draw($filename); } $res = $stats->getCommandeAmountByMonth($year); @@ -89,14 +90,15 @@ for ($i = 1 ; $i < 13 ; $i++) $filename_amount = $conf->commande->dir_images."/commandeamount".$year.".png"; $fileurl_amount = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=commandeamount'.$year.'.png'; -$px = new BarGraph($data); +$px = new BarGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { + $px->SetData($data); $px->SetMaxValue($px->GetAmountMaxValue()); $px->SetWidth($WIDTH); $px->SetHeight($HEIGHT); $px->SetYLabel($langs->trans("AmountTotal")); - $px->draw($filename_amount, $data, $year); + $px->draw($filename_amount); } $res = $stats->getCommandeAverageByMonth($year); @@ -110,14 +112,15 @@ for ($i = 1 ; $i < 13 ; $i++) $filename_avg = $conf->commande->dir_images."/commandeaverage".$year.".png"; $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=commandeaverage'.$year.'.png'; -$px = new BarGraph($data); +$px = new BarGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { + $px->SetData($data); $px->SetMaxValue($px->GetAmountMaxValue()); $px->SetWidth($WIDTH); $px->SetHeight($HEIGHT); $px->SetYLabel($langs->trans("AmountAverage")); - $px->draw($filename_avg, $data, $year); + $px->draw($filename_avg); } print '
'; diff --git a/htdocs/compta/facture/stats/index.php b/htdocs/compta/facture/stats/index.php index deb7acfc193..0b238c1e5c6 100644 --- a/htdocs/compta/facture/stats/index.php +++ b/htdocs/compta/facture/stats/index.php @@ -56,14 +56,15 @@ if (! is_dir($conf->facture->dir_images)) { mkdir($conf->facture->dir_images); } $filename = $conf->facture->dir_images."/nbfacture2year-".$year.".png"; $fileurl = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=nbfacture2year-'.$year.'.png'; -$px = new BarGraph($data); +$px = new BarGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { + $px->SetData($data); $px->SetMaxValue($px->GetMaxValue()); $px->SetLegend(array($year - 1, $year)); $px->SetWidth($WIDTH); $px->SetHeight($HEIGHT); - $px->draw($filename, $data, $year); + $px->draw($filename); } $sql = "SELECT count(*), date_format(datef,'%Y') as dm, sum(total) FROM ".MAIN_DB_PREFIX."facture WHERE fk_statut > 0 "; diff --git a/htdocs/compta/facture/stats/month.php b/htdocs/compta/facture/stats/month.php index 94481995b9d..05758f91889 100644 --- a/htdocs/compta/facture/stats/month.php +++ b/htdocs/compta/facture/stats/month.php @@ -60,13 +60,14 @@ if (! is_dir($conf->facture->dir_images)) { mkdir($conf->facture->dir_images); } $filename = $conf->facture->dir_images."/facture".$year.".png"; $fileurl = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=facture'.$year.'.png'; -$px = new BarGraph($data); +$px = new BarGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { + $px->SetData($data); $px->SetMaxValue($px->GetMaxValue()); $px->SetWidth($GRAPHWIDTH); $px->SetHeight($GRAPHHEIGHT); - $px->draw($filename, $data, $year); + $px->draw($filename); } $res = $stats->getAmountByMonth($year); @@ -81,14 +82,15 @@ for ($i = 1 ; $i < 13 ; $i++) $filename_amount = $conf->facture->dir_images."/factureamount".$year.".png"; $fileurl_amount = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=factureamount'.$year.'.png'; -$px = new BarGraph($data); +$px = new BarGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { + $px->SetData($data); $px->SetYLabel($langs->trans("AmountTotal")); $px->SetMaxValue($px->GetAmountMaxValue()); $px->SetWidth($GRAPHWIDTH); $px->SetHeight($GRAPHHEIGHT); - $px->draw($filename_amount, $data, $year); + $px->draw($filename_amount); } $res = $stats->getAverageByMonth($year); @@ -102,14 +104,14 @@ for ($i = 1 ; $i < 13 ; $i++) $filename_avg = $conf->facture->dir_images."/factureaverage".$year.".png"; $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=factureaverage'.$year.'.png'; -$px = new BarGraph($data); +$px = new BarGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { $px->SetYLabel($langs->trans("AmountAverage")); $px->SetMaxValue($px->GetAmountMaxValue()); $px->SetWidth($GRAPHWIDTH); $px->SetHeight($GRAPHHEIGHT); - $px->draw($filename_avg, $data, $year); + $px->draw($filename_avg); } print '
'; diff --git a/htdocs/expedition/stats/month.php b/htdocs/expedition/stats/month.php index 0696e067c31..db7487539cf 100644 --- a/htdocs/expedition/stats/month.php +++ b/htdocs/expedition/stats/month.php @@ -46,11 +46,12 @@ if (! is_dir($conf->expedition->dir_images)) { mkdir($conf->expedition->dir_imag $filename = $conf->expedition->dir_images."/expedition".$year.".png"; $fileurl = DOL_URL_ROOT.'/viewimage.php?modulepart=expeditionstats&file=expedition'.$year.'.png'; -$px = new BarGraph($data); +$px = new BarGraph(); +$px->SetData($data); $px->SetMaxValue($px->GetMaxValue()); $px->SetWidth(600); $px->SetHeight(280); -$px->draw($filename, $data, $_GET["year"]); +$px->draw($filename); print '
'; print ''; diff --git a/htdocs/graph.class.php b/htdocs/graph.class.php index 1e292cef550..1e508507784 100644 --- a/htdocs/graph.class.php +++ b/htdocs/graph.class.php @@ -1,5 +1,6 @@ +/* Copyright (c) 2003 Rodolphe Quiedeville + * Copyright (c) 2004-2005 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,101 +36,137 @@ include_once(DOL_DOCUMENT_ROOT."/includes/phplot/phplot.php"); class Graph { - var $db; - var $errorstr; + var $db; + var $errorstr; - /** - * \brief Prépare le graphique - * \param file Nom du fichier image - * \param data Tableau des données - * \param title Titre de l'image - */ - function prepare($file, $data, $title='') - { - //Define the object - $this->graph = new PHPlot($this->width, $this->height); - $this->graph->SetIsInline(1); + var $graph; // Objet PHPlot + + + /** + * \brief Génère le fichier graphique sur le disque + * \param file Nom du fichier image + * \param data Tableau des données + * \param title Titre de l'image + */ + function draw($file) + { + // Prepare parametres + $this->prepare($file); - $this->graph->SetPlotType( $this->PlotType ); + // Génère le fichier $file + $this->graph->DrawGraph(); + } + + /** + * \brief Prépare l'objet PHPlot + * \param file Nom du fichier image à générer + * \param data Tableau des données + * \param title Titre de l'image + */ + function prepare($file) + { + // Define the object + $this->graph = new PHPlot($this->width, $this->height); + $this->graph->SetIsInline(1); + + $this->graph->SetPlotType( $this->PlotType ); + + //Set some data + $this->graph->SetDataValues($this->data); - if (isset($this->MaxValue)) - { - $nts = array(); - $this->MaxValue = $this->MaxValue + 1; - $max = $this->MaxValue; - if (($max % 2) <> 0) - { - $this->MaxValue = $this->MaxValue + 1; - $max++; - } + if (isset($this->MaxValue)) + { + $nts = array(); + $this->MaxValue = $this->MaxValue + 1; + $max = $this->MaxValue; + if (($max % 2) <> 0) + { + $this->MaxValue = $this->MaxValue + 1; + $max++; + } + + $this->graph->SetPlotAreaWorld(0,0,12,$this->MaxValue); + + $j = 0; + for ($i = 1 ; $i < 11 ; $i++) + { + $res = $max % $i; + $cal = $max / $i; + + if ($res == 0 && $cal <= 11) + { + $nts[$j] = $cal; + $j++; + } + + } + rsort($nts); + + $this->graph->SetNumVertTicks($nts[0]); + } + else + { + $this->graph->SetPlotAreaPixels(60, 10, $this->width-10, $this->height - 30) ; + } + + $this->graph->SetBackgroundColor($this->bgcolor); + $this->graph->SetDataColors($this->datacolor, $this->bordercolor); + + // Define title + if (strlen($this->title)) $this->graph->SetTitle($this->title); + + // TODO + //$this->graph->SetPrecisionY($this->precision_Y); + // $this->graph->SetVertTickIncrement(0); + // $this->graph->SetSkipBottomTick(1); - $this->graph->SetPlotAreaWorld(0,0,12,$this->MaxValue); + $this->graph->SetVertTickPosition('plotleft'); + + $this->graph->SetYGridLabelType("data"); + + $this->graph->SetDrawYGrid(1); + + // Affiche les valeurs + //$this->graph->SetDrawDataLabels('1'); + //$this->graph->SetLabelScalePosition('1'); - $j = 0; - for ($i = 1 ; $i < 11 ; $i++) - { - $res = $max % $i; - $cal = $max / $i; - - if ($res == 0 && $cal <= 11) - { - $nts[$j] = $cal; - $j++; - } + $this->graph->SetOutputFile($file); + + // Défini position du graphe (et legende) au sein de l'image + if (isset($this->Legend)) + { + $this->graph->SetMarginsPixels(60,100,10,30); - } - rsort($nts); - - $this->graph->SetNumVertTicks($nts[0]); - } - else - { - $this->graph->SetPlotAreaPixels(60, 10, $this->width-10, $this->height - 30) ; - } - - $this->graph->SetBackgroundColor($this->bgcolor); - - // TODO - //$this->graph->SetPrecisionY($this->precision_Y); - - $this->graph->SetDataColors($this->datacolor, $this->bordercolor); - - $this->graph->SetYGridLabelType("data"); - - $this->graph->SetOutputFile($file); - - //Set some data - $this->graph->SetDataValues($data); - - // $this->graph->SetVertTickIncrement(0); - - $this->graph->SetDrawYGrid(1); - - // - if (strlen($title)) - { - $this->graph->SetTitle = $title; - } - - // $this->graph->SetSkipBottomTick(1); - - // Affiche les valeurs - //$this->graph->SetDrawDataLabels('1'); - //$this->graph->SetLabelScalePosition('1'); - - $this->graph->SetVertTickPosition('plotleft'); - - $this->graph->SetMarginsPixels(100,50,10,30); - - if (isset($this->Legend)) - { - $this->graph->SetLegend($this->Legend); - $this->graph->SetLegendWorld(12,$this->MaxValue); - } - - //Draw it - // $this->graph->DrawGraph(); - } + $this->graph->SetLegend($this->Legend); + $this->graph->SetLegendWorld(13,$this->MaxValue); + } + else + { + $this->graph->SetMarginsPixels(60,10,10,30); + } + + if (substr($this->MaxValue,0,1) == 1) + { + $this->graph->SetNumVertTicks(10); + } + elseif (substr($this->MaxValue,0,1) == 2) + { + $this->graph->SetNumVertTicks(4); + } + elseif (substr($this->MaxValue,0,1) == 3) + { + $this->graph->SetNumVertTicks(6); + } + elseif (substr($this->MaxValue,0,1) == 4) + { + $this->graph->SetNumVertTicks(8); + } + else + { + $this->graph->SetNumVertTicks(substr($this->MaxValue,0,1)); + } + + } function SetPrecisionY($which_prec) { @@ -147,6 +184,16 @@ class Graph $this->width = $w; } + function SetTitle($title) + { + $this->title = $title; + } + + function SetData($data) + { + $this->data = $data; + } + function SetLegend($legend) { $this->Legend = $legend; diff --git a/htdocs/product/stats/fiche.php b/htdocs/product/stats/fiche.php index 0808622a494..08f7b7d754f 100644 --- a/htdocs/product/stats/fiche.php +++ b/htdocs/product/stats/fiche.php @@ -88,20 +88,35 @@ if ($_GET["id"]) $filenbvente = $dir . "/vente12mois.png"; $filenbpiece = $dir . "/vendu12mois.png"; + $WIDTH=380; + $HEIGHT=200; + $px = new BarGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { $graph_data = $product->get_num_vente($socid); - $px->draw($filenbvente, $graph_data); + $px->SetData($graph_data); + $px->SetMaxValue($px->GetMaxValue()); + $px->SetWidth($WIDTH); + $px->SetHeight($HEIGHT); + $px->draw($filenbvente); $px = new BarGraph(); $graph_data = $product->get_nb_vente($socid); - $px->draw($filenbpiece, $graph_data); + $px->SetData($graph_data); + $px->SetMaxValue($px->GetMaxValue()); + $px->SetWidth($WIDTH); + $px->SetHeight($HEIGHT); + $px->draw($filenbpiece); $px = new BarGraph(); $graph_data = $product->get_num_propal($socid); - $px->draw($filenbpropal, $graph_data); + $px->SetData($graph_data); + $px->SetMaxValue($px->GetMaxValue()); + $px->SetWidth($WIDTH); + $px->SetHeight($HEIGHT); + $px->draw($filenbpropal); $mesg = $langs->trans("ChartGenerated"); } @@ -246,7 +261,9 @@ if ($_GET["id"]) $file=$product->id.'/'.$img_propal_name; print 'Nombre de propales sur les 12 derniers mois'; - print ''; if (file_exists($filenbpropal) && filemtime($filenbpropal)) diff --git a/htdocs/rapport/Atome.class.php b/htdocs/rapport/Atome.class.php index 779a5b5e2fc..e7f6f637b1d 100644 --- a/htdocs/rapport/Atome.class.php +++ b/htdocs/rapport/Atome.class.php @@ -100,10 +100,11 @@ class Atome $bgraph = new BarGraph(); + $bgraph->SetData($this->graph_values); $bgraph->bgcolor = array(255,255,255); - $bgraph->width = 600; - $bgraph->height = 400; - $bgraph->draw($filename, $this->graph_values); + $bgraph->SetWidth(600); + $bgraph->SetHeight(400); + $bgraph->draw($filename); return $filename; }
Nombre d\'expédition par moisTODO AUTRE GRAPHIQUE'; + print ' '; + + // Place pour autre graphique print '