Rajout d'un composant de génération de graphiques
[zf2.biz/galerie.git] / vendor / zf2biz / Custom / Graph / Pie.php
1 <?php
2
3 /**
4  * ZF2BIZ
5  *
6  * PHP version 5.3
7  *
8  * @category  Components
9  * @package   Custom\Graph
10  * @author    Sébastien Chazallet <sebastien.chazallet@laposte.net>
11  * @copyright 2011 InsPyration
12  * @license   GNU GPL http://www.gnu.org/licenses/gpl.html
13  * @link      http://zf2.biz
14  * @since     0.0.1
15  *
16  */
17
18 namespace Custom\Graph;
19
20 /**
21  * @see jpgraph
22  */
23
24 require_once 'jpgraph/jpgraph.php';
25 require_once 'jpgraph/jpgraph_pie.php';
26 require_once 'jpgraph/jpgraph_pie3d.php';
27
28 /**
29  * Cette classe permet de créer aisément un diagramme.
30  *
31  * Elle rajoute des facilités telles que :
32  * > la gestion des métadonnées du graphique est laissé à la classe fille
33  * > la gestion des particularités offertes par la librairie dans des hooks
34  * > le passage automatisé à la case suivante  (celle de droite)
35  * > le passage automatisé à la ligne suivante (celle du dessous)
36  * > la gestion des formats
37  *
38  * 
39  * Elle permet d'aider à générer facilement des exports Excel,
40  * mais ne contient PAS de logique de présentation,
41  * conformément aux principes de séparation du code
42  *
43  * @category  Components
44  * @package   Custom\Export
45  * @author    Sébastien Chazallet <sebastien.chazallet@laposte.net>
46  * @copyright 2011 InsPyration
47  * @license   GNU GPL http://www.gnu.org/licenses/gpl.html
48  * @link      http://zf2.biz
49  * @since     0.0.1
50  *
51  */
52 class Pie
53 {
54
55     /**
56      * Données affichées par le diagramme de gantt
57      * @var array
58      */
59     protected $datas = array();
60
61     /**
62      * Titre du graphique, si la méthode getTitle n'est pas surchargée
63      * @var string
64      */
65     protected $title = "Titre du graphique";
66
67     /**
68      * Légendes accompagnant chaque donnée
69      * @var array
70      */
71     protected $legends = array();
72
73     /**
74      * Permet de déterminer la largeur du graphique
75      * @var int
76      */
77     protected $x = 600;
78
79     /**
80      * Permet de déterminer la hauteur du graphique
81      * @var int
82      */
83     protected $y = 400;
84
85     /**
86      * Permet de déterminer si le graphiques est à plat ou 3D
87      * @var bool
88      */
89     protected $dim3D = false;
90
91
92     /**
93      * Constructeur
94      *
95      * @param array $datas données de base
96      * @param array $infos données textuelles
97      *
98      * @return null
99      */
100     public function __construct ($datas, $legends)
101     {
102         $this->datas = $datas;
103         $this->legends = $legends;
104
105         $this->createDiagram();
106     }
107
108     /**
109      * Méthode de création du diagramme
110      *
111      * @return null
112      */
113     protected function createDiagram()
114     {
115         // Create the basic graph
116         $graph  = new \PieGraph($this->x, $this->y);
117         if ($this->dim3D) {
118             $graph->SetShadow();
119         }
120         $graph->title->Set($this->getTitle());
121
122         // Create a pie
123         if ($this->dim3D) {
124             $oPie = new \PiePlot3D($this->datas);
125         } else {
126             $oPie = new \PiePlot($this->datas);
127         }
128         foreach($this->getSlices() as $s) {
129             $oPie->ExplodeSlice($s);
130         }
131         if ($this->getColors()) {
132             $oPie->SetSliceColors($this->getColors());
133         }
134         $oPie->SetLegends($this->legends);
135         $oPie->SetCenter(0.5);
136         $oPie->SetValueType(PIE_VALUE_ABS);
137         $oPie->value->SetFormat($this->getFormat());
138
139         // Add pie to graph
140         $graph->add($oPie);
141         $graph->legend->SetPos(0.5, 0.98, 'center', 'bottom');
142
143         // ... and stroke the graph
144         //$this->content = $graph->Stroke(_IMG_HANDLER);
145         $graph->Stroke();
146     }
147
148
149     /**
150      * Méthode à surcharger pour définir des données à mettre en évidence
151      *
152      * @return array
153      */
154     protected function getSlices()
155     {
156         return array();
157     }
158
159     /**
160      * Méthode à surcharger pour définir des couleurs personnalisées
161      *
162      * @return array
163      */
164     protected function getColors()
165     {
166         return array();
167     }
168
169     /**
170      * Méthode à surcharger pour définir une format de données particulier
171      * pour la légende.
172      *
173      * Par défaut, c'est '%d', mais cela peut être 'total de %d parts'
174      *
175      * @return string
176      */
177     protected function getFormat()
178     {
179         return '%d';
180     }
181
182     /**
183      * Méthode à surcharger pour définir un titre.
184      *
185      * Utile lorsque le titre dépend de données variables.
186      * Si le titre est statique, autant se contenter de modifier la propriété
187      *
188      * @return string
189      */
190     protected function getTitle()
191     {
192         return $this->title;
193     }
194
195     /**
196      * Méthode alternative permettant de définir un titre
197      *
198      * Utile lorsque l'on ne souhaite pas surcharger la classe courante.
199      *
200      * @return string
201      */
202     public function setTitle($title)
203     {
204         $this->title = $title;
205     }
206
207 }