From: Sébastien CHAZALLET Date: Thu, 29 Nov 2012 15:28:55 +0000 (+0100) Subject: Rajout d'un composant de génération de graphiques X-Git-Url: http://git.inspyration.org/?p=zf2.biz%2Fgalerie.git;a=commitdiff_plain;h=394ed57b78faba491284a90a7f509bac3e146c30 Rajout d'un composant de génération de graphiques --- diff --git a/vendor/zf2biz/Custom/Graph/Pie.php b/vendor/zf2biz/Custom/Graph/Pie.php new file mode 100755 index 0000000..6c33189 --- /dev/null +++ b/vendor/zf2biz/Custom/Graph/Pie.php @@ -0,0 +1,207 @@ + + * @copyright 2011 InsPyration + * @license GNU GPL http://www.gnu.org/licenses/gpl.html + * @link http://zf2.biz + * @since 0.0.1 + * + */ + +namespace Custom\Graph; + +/** + * @see jpgraph + */ + +require_once 'jpgraph/jpgraph.php'; +require_once 'jpgraph/jpgraph_pie.php'; +require_once 'jpgraph/jpgraph_pie3d.php'; + +/** + * Cette classe permet de créer aisément un diagramme. + * + * Elle rajoute des facilités telles que : + * > la gestion des métadonnées du graphique est laissé à la classe fille + * > la gestion des particularités offertes par la librairie dans des hooks + * > le passage automatisé à la case suivante (celle de droite) + * > le passage automatisé à la ligne suivante (celle du dessous) + * > la gestion des formats + * + * + * Elle permet d'aider à générer facilement des exports Excel, + * mais ne contient PAS de logique de présentation, + * conformément aux principes de séparation du code + * + * @category Components + * @package Custom\Export + * @author Sébastien Chazallet + * @copyright 2011 InsPyration + * @license GNU GPL http://www.gnu.org/licenses/gpl.html + * @link http://zf2.biz + * @since 0.0.1 + * + */ +class Pie +{ + + /** + * Données affichées par le diagramme de gantt + * @var array + */ + protected $datas = array(); + + /** + * Titre du graphique, si la méthode getTitle n'est pas surchargée + * @var string + */ + protected $title = "Titre du graphique"; + + /** + * Légendes accompagnant chaque donnée + * @var array + */ + protected $legends = array(); + + /** + * Permet de déterminer la largeur du graphique + * @var int + */ + protected $x = 600; + + /** + * Permet de déterminer la hauteur du graphique + * @var int + */ + protected $y = 400; + + /** + * Permet de déterminer si le graphiques est à plat ou 3D + * @var bool + */ + protected $dim3D = false; + + + /** + * Constructeur + * + * @param array $datas données de base + * @param array $infos données textuelles + * + * @return null + */ + public function __construct ($datas, $legends) + { + $this->datas = $datas; + $this->legends = $legends; + + $this->createDiagram(); + } + + /** + * Méthode de création du diagramme + * + * @return null + */ + protected function createDiagram() + { + // Create the basic graph + $graph = new \PieGraph($this->x, $this->y); + if ($this->dim3D) { + $graph->SetShadow(); + } + $graph->title->Set($this->getTitle()); + + // Create a pie + if ($this->dim3D) { + $oPie = new \PiePlot3D($this->datas); + } else { + $oPie = new \PiePlot($this->datas); + } + foreach($this->getSlices() as $s) { + $oPie->ExplodeSlice($s); + } + if ($this->getColors()) { + $oPie->SetSliceColors($this->getColors()); + } + $oPie->SetLegends($this->legends); + $oPie->SetCenter(0.5); + $oPie->SetValueType(PIE_VALUE_ABS); + $oPie->value->SetFormat($this->getFormat()); + + // Add pie to graph + $graph->add($oPie); + $graph->legend->SetPos(0.5, 0.98, 'center', 'bottom'); + + // ... and stroke the graph + //$this->content = $graph->Stroke(_IMG_HANDLER); + $graph->Stroke(); + } + + + /** + * Méthode à surcharger pour définir des données à mettre en évidence + * + * @return array + */ + protected function getSlices() + { + return array(); + } + + /** + * Méthode à surcharger pour définir des couleurs personnalisées + * + * @return array + */ + protected function getColors() + { + return array(); + } + + /** + * Méthode à surcharger pour définir une format de données particulier + * pour la légende. + * + * Par défaut, c'est '%d', mais cela peut être 'total de %d parts' + * + * @return string + */ + protected function getFormat() + { + return '%d'; + } + + /** + * Méthode à surcharger pour définir un titre. + * + * Utile lorsque le titre dépend de données variables. + * Si le titre est statique, autant se contenter de modifier la propriété + * + * @return string + */ + protected function getTitle() + { + return $this->title; + } + + /** + * Méthode alternative permettant de définir un titre + * + * Utile lorsque l'on ne souhaite pas surcharger la classe courante. + * + * @return string + */ + public function setTitle($title) + { + $this->title = $title; + } + +}