Subversion Repositories eFlore/Applications.coel

Rev

Rev 1574 | Rev 1576 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1574 Rev 1575
1
<?php
1
<?php
2
/**
2
/**
3
 * Service fournissant des urls vers des images de graphiques sur les statistiques de l'application COEL.
3
 * Service fournissant des urls vers des images de graphiques sur les statistiques de l'application COEL.
4
 * Encodage en entrée : utf8
4
 * Encodage en entrée : utf8
5
 * Encodage en sortie : utf8
5
 * Encodage en sortie : utf8
6
 * 
6
 * 
7
 * Cas d'utilisation :
7
 * Cas d'utilisation :
8
 * /CoelStatistique/MonTypeDeStat : retourne l'url du graphique pour le type de statistique demandé
8
 * /CoelStatistique/MonTypeDeStat : retourne la balise html image du graphique pour le type de statistique demandé
-
 
9
 * /CoelStatistique/MonTypeDeStat/MonIdProjet : retourne la balise html image du graphique pour le type de statistique 
-
 
10
 * demandé et le projet indiqué.
-
 
11
 * ?html=non : ce paramètre ajouté en fin d'url, force le retour de l'url du graphique sans la balise html img 
9
 * 
12
 * 
10
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
13
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
14
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
12
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
15
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
13
 * @version $Id$
16
 * @version $Id$
14
 * @copyright 2009
17
 * @copyright 2009
15
 */
18
 */
16
class CoelStatistique extends Coel {
19
class CoelStatistique extends Coel {
17
	
20
	
18
	const META_CODE_FRANCE = 2654;
21
	const META_CODE_FRANCE = 2654;
19
	const META_LISTE_SIECLE = 1040;// Liste des siècles pour les collections naturalistes
22
	const META_LISTE_SIECLE = 1040;// Liste des siècles pour les collections naturalistes
20
	const META_LISTE_TYPE_HERBIER = 1083;// Liste des types de collection botanique 
23
	const META_LISTE_TYPE_HERBIER = 1083;// Liste des types de collection botanique 
21
	private $parametres = array();
24
	private $parametres = array();
-
 
25
	private $url_serveur_graph_tpl = 'http://%s.chart.apis.google.com/chart';
22
	
26
	
23
	/**
27
	/**
24
	 * Méthode appelée avec une requête de type GET.
28
	 * Méthode appelée avec une requête de type GET.
25
	 */
29
	 */
26
	public function getElement($param) {
30
	public function getElement($param) {
27
		$html = null;
31
		$graph = null;
28
		
32
		
29
		if (isset($param[0])) {
33
		if (isset($param[0])) {
30
			$service_demande = array_shift($param);
34
			$service_demande = array_shift($param);
31
			$this->parametres = $param;
35
			$this->parametres = $param;
32
			$methode = 'get'.$service_demande;
36
			$methode = 'get'.$service_demande;
33
			if (method_exists($this, $methode)) {
37
			if (method_exists($this, $methode)) {
34
				$html = $this->$methode();
38
				$graph = $this->$methode();
35
			}
39
			}
36
		} else {
40
		} else {
37
			$this->messages[] = "Le service COEL Statistique nécessite un paramètre.";
41
			$this->messages[] = "Le service COEL Statistique nécessite un paramètre.";
38
		}
42
		}
-
 
43
		
-
 
44
		if (!is_null($graph)) {
-
 
45
			if ((!isset($_GET['html']) || $_GET['html'] == 'oui')) {
-
 
46
				// Nous retournons une balise HTML img
-
 
47
				$url = $this->construireUrlGraph($graph);
39
		
48
				$html = '<img src="'.$url.'"/>';
-
 
49
				$this->envoyerHTML($html);
-
 
50
			} else {
-
 
51
				// Nous retournons une image
-
 
52
				$contexte = stream_context_create(
-
 
53
					array('http' => array(
-
 
54
	      				'method' => 'POST',
-
 
55
	      				'content' => http_build_query($graph))));
-
 
56
				$image = file_get_contents($this->getUrlServeurGraph(), false, $contexte);
-
 
57
				$this->envoyer($image, 'image/png', null, false);
-
 
58
			}
-
 
59
		} else {
-
 
60
			$info = 'Un problème est survenu : '.print_r($this->messages, true);
-
 
61
			$this->envoyerHTML($info);
40
		$this->envoyerHTML($html);
62
		}
41
	}
63
	}
-
 
64
	
-
 
65
	private function getUrlServeurGraph() {
-
 
66
		$url = sprintf($this->url_serveur_graph_tpl, rand(0, 9));
-
 
67
		return $url;
-
 
68
	}
-
 
69
	private function construireUrlGraph($graph) {
42
	
70
		$graph = $this->protegerGraphPourUrl($graph);
-
 
71
		
43
	private function getAccueil() {
72
		$url_parametres = array();
-
 
73
		foreach ($graph as $cle => $valeur) {
-
 
74
			$url_parametres[] = "$cle=$valeur";
44
		$html = '<h2>Bienvenue</h2>'.
75
		}
-
 
76
		$url = $this->getUrlServeurGraph().'?'.implode('&', $url_parametres);
-
 
77
		return $url;
-
 
78
	}
-
 
79
	
-
 
80
	private function protegerGraphPourUrl($graph) {
-
 
81
		if (isset($graph['chtt'])) {
-
 
82
			$graph['chtt'] = str_replace(' ', '+', $graph['chtt']);
45
			'<p>Vous utilisez Coel</p>';
83
		}
46
		return $html;
84
		return $graph;
47
	}
85
	}
48
	
86
	
49
	private function getNombreDonnees() {
87
	private function getNombreDonnees() {
50
		// Récupération des données
88
		// Récupération des données
51
		$types = array(	array('Commentaires', 'commentaire', 'ccm'),
89
		$types = array(	array('Commentaires', 'commentaire', 'ccm'),
52
						array('Publications', 'publication', 'cpu'),
90
						array('Publications', 'publication', 'cpu'),
53
						array('Personnes', 'personne', 'cp'),
91
						array('Personnes', 'personne', 'cp'),
54
						array('Collections', 'collection', 'cc'),
92
						array('Collections', 'collection', 'cc'),
55
						array('Structures', 'structure', 'cs'));
93
						array('Structures', 'structure', 'cs'));
56
		$donnees = array();
94
		$donnees = array();
57
		foreach ($types as $info) {
95
		foreach ($types as $info) {
58
			list($type, $table, $champ) = $info;
96
			list($type, $table, $champ) = $info;
59
			$donnees[$type] = $this->executerRequeteNombre($table, $champ);
97
			$donnees[$type] = $this->executerRequeteNombre($table, $champ);
60
		}
98
		}
61
		
99
		
62
		// Post traitement des données de la base de données
100
		// Post traitement des données de la base de données
63
		$titre = str_replace(' ', '+', 'Nombre de données');
-
 
64
		asort($donnees);
101
		asort($donnees);
65
		$valeurs = implode(',', $donnees);
102
		$valeurs = implode(',', $donnees);
66
		arsort($donnees);
103
		arsort($donnees);
67
		$etiquettes = implode('|', array_keys($donnees));
104
		$etiquettes = implode('|', array_keys($donnees));
68
		
105
		
69
		// Construire de l'url de l'image
106
		// Paramètres du graphique
70
		$url = 'http://chart.apis.google.com/chart?'.
107
		$graph = array(
71
			'cht=bhs'.
108
			'cht' => 'bhs',
72
			'&chs=250x180'.
109
			'chs' => '250x180',
73
			'&chco=4D89F9'.
110
			'chco' => '4D89F9',
74
			'&chd=t:'.$valeurs.
111
			'chd' => "t:$valeurs",
75
			'&chds=0,'.max($donnees).
112
			'chds' => '0,'.max($donnees),
76
			'&chxt=y'.
113
			'chxt' => 'y',
77
			'&chxl='.'0	:|'.$etiquettes.'|'.
114
			'chxl' => "0	:|$etiquettes|",
78
			'&chm=N ** ,000000,0,-1,10'.
-
 
79
			'&chtt='.$titre;
-
 
80
		
-
 
81
		// Retour du html contenant l'image
115
			'chm' => 'N ** ,000000,0,-1,10',
82
		$sortie = '<img src="'.$url.'"/>';
116
			'chtt' => 'Nombre de données');
83
		return $sortie;
117
		return $graph;
84
	}
118
	}
85
	
119
	
86
	private function executerRequeteNombre($entite, $abr) {
120
	private function executerRequeteNombre($entite, $abr) {
87
		$table = 'coel_'.$entite;
121
		$table = 'coel_'.$entite;
88
		$champ_id = $abr.'_id_'.$entite;
122
		$champ_id = $abr.'_id_'.$entite;
89
		$champ_projet = $abr.'_ce_projet';
123
		$champ_projet = $abr.'_ce_projet';
90
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
124
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
91
		
125
		
92
		$requete = "SELECT COUNT($champ_id) AS nbre ".
126
		$requete = "SELECT COUNT($champ_id) AS nbre ".
93
			"FROM $table ".
127
			"FROM $table ".
94
			(is_null($projet_id) ? '' : "WHERE $champ_projet = $projet_id ");
128
			(is_null($projet_id) ? '' : "WHERE $champ_projet = $projet_id ");
95
		try {
129
		try {
96
			$nbre = $this->bdd->query($requete)->fetchColumn();
130
			$nbre = $this->bdd->query($requete)->fetchColumn();
97
			if ($nbre === false) {
131
			if ($nbre === false) {
98
				$this->messages[] = "La requête a retourné aucun résultat.";
132
				$this->messages[] = "La requête a retourné aucun résultat.";
99
			}
133
			}
100
		} catch (PDOException $e) {
134
		} catch (PDOException $e) {
101
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
135
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
102
		}
136
		}
103
		return $nbre;
137
		return $nbre;
104
	}
138
	}
105
 
139
 
106
	private function getMesDonnees() {
140
	private function getMesDonnees() {
107
		$personne_id = (isset($this->parametres[0]) ? $this->parametres[0] : null);
141
		$personne_id = (isset($this->parametres[0]) ? $this->parametres[0] : null);
108
		// Récupération des données
142
		// Récupération des données
109
		$types = array(	'Commentaires' => '107',
143
		$types = array(	'Commentaires' => '107',
110
						'Publications' => '118, 119',
144
						'Publications' => '118, 119',
111
						'Personnes' => '113, 114',
145
						'Personnes' => '113, 114',
112
						'Collections' => '101, 102, 103, 104, 105, 106',
146
						'Collections' => '101, 102, 103, 104, 105, 106',
113
						'Structures' => '120, 121, 122, 123');
147
						'Structures' => '120, 121, 122, 123');
114
		$etats = array(1 => 'Ajouts',
148
		$etats = array(1 => 'Ajouts',
115
						2 => 'Modifications',
149
						2 => 'Modifications',
116
						3 => 'Suppressions');
150
						3 => 'Suppressions');
117
		$donnees = array();
151
		$donnees = array();
118
		foreach ($types as $type => $table_identifiants) {
152
		foreach ($types as $type => $table_identifiants) {
119
			foreach ($etats as $etat_id => $etat_type) {
153
			foreach ($etats as $etat_id => $etat_type) {
120
				$donnees[$etat_type][$type] = $this->executerRequeteNombreDansHistorique($table_identifiants, $etat_id, $personne_id);
154
				$donnees[$etat_type][$type] = $this->executerRequeteNombreDansHistorique($table_identifiants, $etat_id, $personne_id);
121
			}
155
			}
122
		}
156
		}
123
		
157
		
124
		// Post traitement des données de la base de données
158
		// Post traitement des données de la base de données
125
		$titre = str_replace(' ', '+', 'Ma participation tous projets confondus');
-
 
126
		$max_global = array();
159
		$max_global = array();
127
		$ensembles_donnees = array();
160
		$ensembles_donnees = array();
128
		foreach ($donnees as $ensemble_donnees) {
161
		foreach ($donnees as $ensemble_donnees) {
129
			$ensembles_donnees[] = implode(',', array_reverse($ensemble_donnees));
162
			$ensembles_donnees[] = implode(',', array_reverse($ensemble_donnees));
130
			
163
			
131
			// Gestion de l'échelle
164
			// Gestion de l'échelle
132
			foreach ($ensemble_donnees as $type => $val) {
165
			foreach ($ensemble_donnees as $type => $val) {
133
				if (!isset($max_global[$type])) {
166
				if (!isset($max_global[$type])) {
134
					$max_global[$type] = 0;
167
					$max_global[$type] = 0;
135
				}
168
				}
136
				$max_global[$type] += $val;
169
				$max_global[$type] += $val;
137
			}
170
			}
138
		}
171
		}
139
		$maximum = max($max_global);
172
		$maximum = max($max_global);
140
		$moitier = round(($maximum / 2), 1);
173
		$moitier = round(($maximum / 2), 1);
141
		$valeurs = implode('|', $ensembles_donnees);
174
		$valeurs = implode('|', $ensembles_donnees);
142
		$etiquettes = implode('|', array_keys($types));
175
		$etiquettes = implode('|', array_keys($types));
143
		$legende = implode('|', $etats);
176
		$legende = implode('|', $etats);
144
		$etiquettes_x = "0|$moitier|$maximum";
177
		$etiquettes_x = "0|$moitier|$maximum";
145
		
178
		
146
		// Construire de l'url de l'image
179
		// Paramètres du graphique
147
		$url = 'http://chart.apis.google.com/chart?'.
180
		$graph = array(
148
			'cht=bhs'.
181
			'cht' => 'bhs',
149
			'&chs=320x180'.
182
			'chs' => '320x180',
150
			'&chbh=a,2,4'.
183
			'chbh' => 'a,2,4',
151
			'&chco=66B032,FABC02,FE2712'.
184
			'chco' => '66B032,FABC02,FE2712',
152
			'&chdl='.$legende.
185
			'chdl' => $legende,
153
			'&chdlp=b'.
186
			'chdlp' => 'b',
154
			'&chd=t:'.$valeurs.
187
			'chd' => "t:$valeurs",
155
			'&chds=0,'.$maximum.
188
			'chds' => "0,$maximum",
156
			'&chxt=y,x'.
189
			'chxt' => 'y,x',
157
			'&chxl='.'0:|'.$etiquettes.'|1:|'.$etiquettes_x.
190
			'chxl' => "0:|$etiquettes|1:|$etiquettes_x",
158
			'&chm=N,000000,0,-1,10,1|N,000000,1,-1,10,1|N,000000,2,-1,10,1'.
191
			'chm' => 'N,000000,0,-1,10,1|N,000000,1,-1,10,1|N,000000,2,-1,10,1',
159
			'&chtt='.$titre;
192
			'chtt' => 'Ma participation tous projets confondus');
160
		
-
 
161
		// Retour du html contenant l'image
-
 
162
		$sortie = '<img src="'.$url.'"/>';
193
		
163
		return $sortie;
194
		return $graph;
164
	}
195
	}
165
	
196
	
166
	private function executerRequeteNombreDansHistorique($table_identifiants, $etat, $personne_id = null) {
197
	private function executerRequeteNombreDansHistorique($table_identifiants, $etat, $personne_id = null) {
167
		$requete = 	"SELECT COUNT(cmhl_date_modification) AS nbre ".
198
		$requete = 	"SELECT COUNT(cmhl_date_modification) AS nbre ".
168
					"FROM coel_meta_historique_ligne ".
199
					"FROM coel_meta_historique_ligne ".
169
					"WHERE cmhl_ce_table IN ($table_identifiants) ".
200
					"WHERE cmhl_ce_table IN ($table_identifiants) ".
170
					"	AND cmhl_ce_etat = $etat ".
201
					"	AND cmhl_ce_etat = $etat ".
171
					(isset($personne_id) ? "	AND cmhl_ce_modifier_par = $personne_id " : '');
202
					(isset($personne_id) ? "	AND cmhl_ce_modifier_par = $personne_id " : '');
172
		try {
203
		try {
173
			$nbre = $this->bdd->query($requete)->fetchColumn();
204
			$nbre = $this->bdd->query($requete)->fetchColumn();
174
			if ($nbre === false) {
205
			if ($nbre === false) {
175
				$this->messages[] = "La requête a retourné aucun résultat.";
206
				$this->messages[] = "La requête a retourné aucun résultat.";
176
			}
207
			}
177
		} catch (PDOException $e) {
208
		} catch (PDOException $e) {
178
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
209
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
179
		}
210
		}
180
		return $nbre;
211
		return $nbre;
181
	}
212
	}
182
	
213
	
183
	private function getTypeDepot() {
214
	private function getTypeDepot() {
184
		// Récupération des paramêtres
215
		// Récupération des paramêtres
185
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
216
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
186
		
217
		
187
		// Récupération des données
218
		// Récupération des données
188
		$requete = 	'SELECT cmlv_nom AS type, COUNT(cc_ce_type_depot) AS nbre '.
219
		$requete = 	'SELECT cmlv_nom AS type, COUNT(cc_ce_type_depot) AS nbre '.
189
					'FROM coel_collection '.
220
					'FROM coel_collection '.
190
					'	LEFT JOIN coel_meta_liste_valeur ON (cc_ce_type_depot = cmlv_id_valeur) '.
221
					'	LEFT JOIN coel_meta_liste_valeur ON (cc_ce_type_depot = cmlv_id_valeur) '.
191
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ").
222
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ").
192
					'GROUP BY cc_ce_type_depot';
223
					'GROUP BY cc_ce_type_depot';
193
		try {
224
		try {
194
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
225
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
195
			if ($infos === false) {
226
			if ($infos === false) {
196
				$this->messages[] = "La requête a retourné aucun résultat.";
227
				$this->messages[] = "La requête a retourné aucun résultat.";
197
			}
228
			}
198
		} catch (PDOException $e) {
229
		} catch (PDOException $e) {
199
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
230
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
200
		}
231
		}
201
		
232
		
202
		// Post traitement des données de la base de données
233
		// Post traitement des données de la base de données
203
		$titre = str_replace(' ', '+', 'Type de dépôt|des collections');
-
 
204
		$donnees = array();
234
		$donnees = array();
205
		foreach ($infos as $info) {
235
		foreach ($infos as $info) {
206
			if ($info['type'] != '') {
236
			if ($info['type'] != '') {
207
				$cle = $info['type'];
237
				$cle = $info['type'];
208
			} else {
238
			} else {
209
				$cle = 'Non renseigné';
239
				$cle = 'Non renseigné';
210
			}
240
			}
211
			$donnees[$cle] = $info['nbre'];
241
			$donnees[$cle] = $info['nbre'];
212
		}
242
		}
213
		asort($donnees);
243
		asort($donnees);
214
		$valeurs = implode(',', $donnees);
244
		$valeurs = implode(',', $donnees);
215
		arsort($donnees);
245
		arsort($donnees);
216
		$etiquettes = implode('|', array_keys($donnees));
246
		$etiquettes = implode('|', array_keys($donnees));
217
		
247
		
218
		// Construire de l'url de l'image
248
		// Paramètres du graphique
219
		$url = 'http://chart.apis.google.com/chart?'.
249
		$graph = array(
220
			'cht=bhs'.
250
			'cht' => 'bhs',
221
			'&chs=250x170'.
251
			'chs' => '250x170',
222
			'&chco=4D89F9'.
252
			'chco' => '4D89F9',
223
			'&chd=t:'.$valeurs.
253
			'chd' => "t:$valeurs",
224
			'&chds=0,'.(max($donnees)+5).
254
			'chds' => '0,'.(max($donnees)+5),
225
			'&chxt=y'.
255
			'chxt' => 'y',
226
			'&chxl='.'0	:|'.$etiquettes.'|'.
256
			'chxl' => "0	:|$etiquettes|",
227
			'&chm=N *,000000,0,-1,10'.
257
			'chm' => 'N *,000000,0,-1,10',
228
			'&chtt='.$titre.
258
			'chtt' => 'Type de dépôt|des collections',
229
			'&chts=000000,12';
259
			'chts' => '000000,12');
230
		
-
 
231
		// Retour du html contenant l'image
-
 
232
		$sortie = '<img src="'.$url.'"/>';
260
		
233
		return $sortie;
261
		return $graph;
234
	}
262
	}
235
	
263
	
236
	private function getNombreCollectionParStructure() {
264
	private function getNombreCollectionParStructure() {
237
		// Récupération des paramêtres
265
		// Récupération des paramêtres
238
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
266
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
239
		
267
		
240
		// Récupération des données
268
		// Récupération des données
241
		$requete = 	'SELECT COUNT(cc_id_collection) AS nbre '.
269
		$requete = 	'SELECT COUNT(cc_id_collection) AS nbre '.
242
					'FROM coel_collection '.
270
					'FROM coel_collection '.
243
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ").
271
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ").
244
					'GROUP BY cc_ce_structure ';
272
					'GROUP BY cc_ce_structure ';
245
		
273
		
246
		try {
274
		try {
247
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
275
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
248
			if ($infos === false) {
276
			if ($infos === false) {
249
				$this->messages[] = "La requête a retourné aucun résultat.";
277
				$this->messages[] = "La requête a retourné aucun résultat.";
250
			} else if (count($infos) == 0) {
278
			} else if (count($infos) == 0) {
251
				$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
279
				$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
252
			}
280
			}
253
		} catch (PDOException $e) {
281
		} catch (PDOException $e) {
254
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
282
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
255
		}
283
		}
256
		
284
		
257
		// Post traitement des données de la base de données
285
		// Post traitement des données de la base de données
258
		$titre = str_replace(' ', '+', 'Nombre de collections|par institution');
-
 
259
		$donnees = array(	'1 collection' => 0, 
286
		$donnees = array(	'1 collection' => 0, 
260
							'2 collections' => 0, 
287
							'2 collections' => 0, 
261
							'Entre 3 et 10' => 0,
288
							'Entre 3 et 10' => 0,
262
							'Entre 11 et 50' => 0,
289
							'Entre 11 et 50' => 0,
263
							'Plus de 50' => 0);
290
							'Plus de 50' => 0);
264
		foreach ($infos as $info) {
291
		foreach ($infos as $info) {
265
			$nbre = $info['nbre'];
292
			$nbre = $info['nbre'];
266
			if ($nbre == 1) {
293
			if ($nbre == 1) {
267
				$donnees['1 collection']++;
294
				$donnees['1 collection']++;
268
			} else if ($nbre == 2) {
295
			} else if ($nbre == 2) {
269
				$donnees['2 collections']++;
296
				$donnees['2 collections']++;
270
			} else if ($nbre >= 3 && $nbre <= 10) {
297
			} else if ($nbre >= 3 && $nbre <= 10) {
271
				$donnees['Entre 3 et 10']++;
298
				$donnees['Entre 3 et 10']++;
272
			} else if ($nbre >= 11 && $nbre <= 50) {
299
			} else if ($nbre >= 11 && $nbre <= 50) {
273
				$donnees['Entre 11 et 50']++;
300
				$donnees['Entre 11 et 50']++;
274
			} else if ($nbre > 50) {
301
			} else if ($nbre > 50) {
275
				$donnees['Plus de 50']++;
302
				$donnees['Plus de 50']++;
276
			}
303
			}
277
			
304
			
278
		}
305
		}
279
		
306
		
280
		$donnees_tmp = $donnees;
307
		$donnees_tmp = $donnees;
281
		$donnees = array();
308
		$donnees = array();
282
		foreach ($donnees_tmp as $cle => $valeur) {
309
		foreach ($donnees_tmp as $cle => $valeur) {
283
			$donnees[$cle.' ('.$valeur.')'] = $valeur;
310
			$donnees[$cle.' ('.$valeur.')'] = $valeur;
284
		}
311
		}
285
		asort($donnees);
312
		asort($donnees);
286
		$valeurs = implode(',', $donnees);
313
		$valeurs = implode(',', $donnees);
287
		//arsort($donnees);
314
		//arsort($donnees);
288
		$etiquettes = implode('|', array_keys($donnees));
315
		$etiquettes = implode('|', array_keys($donnees));
289
		//$legende = implode('|', array_keys($donnees));
316
		//$legende = implode('|', array_keys($donnees));
290
		
317
		
291
		// Construire de l'url de l'image
318
		// Paramètres du graphique
292
		$url = 'http://chart.apis.google.com/chart?'.
319
		$graph = array(
293
			'cht=p3'.
320
			'cht' => 'p3',
294
			'&chs=350x200'.
321
			'chs' => '350x200',
295
			'&chco=4D89F9'.
322
			'chco' => 'EDC951|DEB0DB|DEC9B0|B0DEB3|B0C4DE|B0B0DE|927CBA',
296
			'&chd=t:'.$valeurs.
323
			'chd' => "t:$valeurs",
297
			'&chds=0,'.max($donnees).
324
			'chds' => '0,'.max($donnees),
298
			'&chdl='.$etiquettes.
325
			'chdl' => $etiquettes,
299
			'&chtt='.$titre.
326
			'chtt' => 'Nombre de collections|par institution',
300
			'&chts=000000,12';
327
			'chts' => '000000,12');
301
		
-
 
302
		// Retour du html contenant l'image
-
 
303
		$sortie = '<img src="'.$url.'"/>';
328
		
304
		return $sortie;
329
		return $graph;
305
	}
330
	}
306
	
331
	
307
	private function getNombrePartParStructure() {
332
	private function getNombrePartParStructure() {
308
		// Récupération des paramêtres
333
		// Récupération des paramêtres
309
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
334
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
310
		
335
		
311
		// Récupération des données
336
		// Récupération des données
312
		$requete = 	'SELECT cc_ce_structure, ccb_truk_unite_base '.
337
		$requete = 	'SELECT cc_ce_structure, ccb_truk_unite_base '.
313
					'FROM coel_collection_botanique '.
338
					'FROM coel_collection_botanique '.
314
					'	LEFT JOIN coel_collection ON (ccb_id_collection = cc_id_collection) '.
339
					'	LEFT JOIN coel_collection ON (ccb_id_collection = cc_id_collection) '.
315
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ");
340
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ");
316
		
341
		
317
		try {
342
		try {
318
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
343
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
319
			if ($infos === false) {
344
			if ($infos === false) {
320
				$this->messages[] = "La requête a retourné aucun résultat.";
345
				$this->messages[] = "La requête a retourné aucun résultat.";
321
			} else if (count($infos) == 0) {
346
			} else if (count($infos) == 0) {
322
				$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
347
				$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
323
			}
348
			}
324
		} catch (PDOException $e) {
349
		} catch (PDOException $e) {
325
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
350
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
326
		}
351
		}
327
		
352
		
328
		// Post traitement des données de la base de données
353
		// Post traitement des données de la base de données
329
		// Extraction du nombre de part
354
		// Extraction du nombre de part
330
		$structures = array();
355
		$structures = array();
331
		foreach ($infos as $info) {
356
		foreach ($infos as $info) {
332
			if (!isset($structures[$info['cc_ce_structure']])) {
357
			if (!isset($structures[$info['cc_ce_structure']])) {
333
				$structures[$info['cc_ce_structure']] = 0;
358
				$structures[$info['cc_ce_structure']] = 0;
334
			}
359
			}
335
			$structures[$info['cc_ce_structure']] += UtilTruck::extraireNbrePart($info['ccb_truk_unite_base']);
360
			$structures[$info['cc_ce_structure']] += UtilTruck::extraireNbrePart($info['ccb_truk_unite_base']);
336
		}
361
		}
337
 
362
 
338
		// Triage par classe
363
		// Triage par classe
339
		$donnees = array(	'0 part' => 0, 
364
		$donnees = array(	'0 part' => 0, 
340
							'Entre 1 et 100' => 0, 
365
							'Entre 1 et 100' => 0, 
341
							'Entre 101 et 1000' => 0,
366
							'Entre 101 et 1000' => 0,
342
							'Entre 1001 et 10.000' => 0,
367
							'Entre 1001 et 10.000' => 0,
343
							'Entre 10.001 et 100.000' => 0,
368
							'Entre 10.001 et 100.000' => 0,
344
							'Entre 100.001 et 300.000' => 0,
369
							'Entre 100.001 et 300.000' => 0,
345
							'Supérieur à 300.000' => 0);
370
							'Supérieur à 300.000' => 0);
346
		foreach ($structures as $nbre) {
371
		foreach ($structures as $nbre) {
347
			if ($nbre == 0) {
372
			if ($nbre == 0) {
348
				$donnees['0 part']++;
373
				$donnees['0 part']++;
349
			} else if ($nbre >= 1 && $nbre <= 100) {
374
			} else if ($nbre >= 1 && $nbre <= 100) {
350
				$donnees['Entre 1 et 100']++;
375
				$donnees['Entre 1 et 100']++;
351
			} else if ($nbre >= 101 && $nbre <= 1000) {
376
			} else if ($nbre >= 101 && $nbre <= 1000) {
352
				$donnees['Entre 101 et 1000']++;
377
				$donnees['Entre 101 et 1000']++;
353
			} else if ($nbre >= 1001 && $nbre <= 10000) {
378
			} else if ($nbre >= 1001 && $nbre <= 10000) {
354
				$donnees['Entre 1001 et 10.000']++;
379
				$donnees['Entre 1001 et 10.000']++;
355
			} else if ($nbre >= 10001 && $nbre <= 100000) {
380
			} else if ($nbre >= 10001 && $nbre <= 100000) {
356
				$donnees['Entre 10.001 et 100.000']++;
381
				$donnees['Entre 10.001 et 100.000']++;
357
			} else if ($nbre >= 100001 && $nbre <= 300000) {
382
			} else if ($nbre >= 100001 && $nbre <= 300000) {
358
				$donnees['Entre 100.001 et 300.000']++;
383
				$donnees['Entre 100.001 et 300.000']++;
359
			} else if ($nbre >= 300001) {
384
			} else if ($nbre >= 300001) {
360
				$donnees['Supérieur à 300.000']++;
385
				$donnees['Supérieur à 300.000']++;
361
			}
386
			}
362
		}
387
		}
363
		
388
		
364
		$donnees_tmp = $donnees;
389
		$donnees_tmp = $donnees;
365
		$donnees = array();
390
		$donnees = array();
366
		foreach ($donnees_tmp as $cle => $valeur) {
391
		foreach ($donnees_tmp as $cle => $valeur) {
367
			$donnees[$cle.' ('.$valeur.')'] = $valeur;
392
			$donnees[$cle.' ('.$valeur.')'] = $valeur;
368
		}
393
		}
369
		$donnees = array_reverse($donnees, true);
394
		$donnees = array_reverse($donnees, true);
370
		$legende = implode('|', array_keys($donnees));
395
		$legende = implode('|', array_keys($donnees));
371
		$valeurs = implode(',', $donnees);
396
		$valeurs = implode(',', $donnees);
372
		$titre = str_replace(' ', '+', 'Nombre de parts conservées |par institution');
-
 
373
				
397
				
374
		// Construire de l'url de l'image
398
		// Paramètres du graphique
375
		$url = 'http://chart.apis.google.com/chart?'.
399
		$graph = array(
376
			'cht=p3'.
400
			'cht' => 'p3',
377
			'&chs=400x225'.
-
 
-
 
401
			'chs' => '400x225',
378
			'&chco=4D89F9'.
402
			'chco' => 'EDC951|DEB0DB|DEC9B0|B0DEB3|B0C4DE|B0B0DE|927CBA',//4D89F9 ou EDC951|DEB0DB|DEC9B0|B0DEB3|B0C4DE|B0B0DE|DEBAB0 ou B02B2C|D15600|C79810|73880A|6BBA70|3F4C6B|356AA0
379
			'&chd=t:'.$valeurs.
403
			'chd' => "t:$valeurs",
380
			'&chds=0,'.max($donnees).
404
			'chds' => '0,'.max($donnees),
381
			'&chdl='.$legende.
405
			'chdl' => $legende,
382
			'&chdlp=r,0,1,2,3,4,5'.
406
			'chdlp' => 'r,0,1,2,3,4,5',
383
			'&chtt='.$titre.
407
			'chtt' => 'Nombre de parts conservées |par institution',
384
			'&chts=000000,11.5'.
408
			'chts' => '000000,11.5',
385
			'&chts=000000,12';
409
			'chts' => '000000,12');
386
		
-
 
387
		// Retour du html contenant l'image
-
 
388
		$sortie = '<img src="'.$url.'"/>';
410
		
389
		return $sortie;
411
		return $graph;
390
	}
412
	}
391
	
413
	
392
	private function getNombrePartParCollection() {
414
	private function getNombrePartParCollection() {
393
		// Récupération des paramêtres
415
		// Récupération des paramêtres
394
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
416
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
395
		
417
		
396
		// Récupération des données
418
		// Récupération des données
397
		$requete = 	'SELECT ccb_truk_unite_base '.
419
		$requete = 	'SELECT ccb_truk_unite_base '.
398
					'FROM coel_collection_botanique '.
420
					'FROM coel_collection_botanique '.
399
					( is_null($projet_id) ? '' : '	LEFT JOIN coel_collection ON (ccb_id_collection = cc_id_collection) ').
421
					( is_null($projet_id) ? '' : '	LEFT JOIN coel_collection ON (ccb_id_collection = cc_id_collection) ').
400
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ");
422
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ");
401
		
423
		
402
		try {
424
		try {
403
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
425
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
404
			if ($infos === false) {
426
			if ($infos === false) {
405
				$this->messages[] = "La requête a retourné aucun résultat.";
427
				$this->messages[] = "La requête a retourné aucun résultat.";
406
			} else if (count($infos) == 0) {
428
			} else if (count($infos) == 0) {
407
				$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
429
				$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
408
				$infos == false;
430
				$infos == false;
409
			}
431
			}
410
		} catch (PDOException $e) {
432
		} catch (PDOException $e) {
411
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
433
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
412
		}
434
		}
413
		
435
		
414
		$sortie = null;
436
		$graph = null;
415
		if ($infos !== false) {
437
		if ($infos !== false) {
416
			// Post traitement des données de la base de données
438
			// Post traitement des données de la base de données
417
			// Extraction du nombre de part
439
			// Extraction du nombre de part
418
			$collections = array();
440
			$collections = array();
419
			foreach ($infos as $info) {
441
			foreach ($infos as $info) {
420
				$collections[] = UtilTruck::extraireNbrePart($info['ccb_truk_unite_base']);
442
				$collections[] = UtilTruck::extraireNbrePart($info['ccb_truk_unite_base']);
421
			}
443
			}
422
	
444
	
423
			// Triage par classe
445
			// Triage par classe
424
			$donnees = array(	'0 part' => 0, 
446
			$donnees = array(	'0 part' => 0, 
425
								'Entre 1 et 100' => 0, 
447
								'Entre 1 et 100' => 0, 
426
								'Entre 101 et 1000' => 0,
448
								'Entre 101 et 1000' => 0,
427
								'Entre 1001 et 10.000' => 0,
449
								'Entre 1001 et 10.000' => 0,
428
								'Entre 10.001 et 100.000' => 0,
450
								'Entre 10.001 et 100.000' => 0,
429
								'Entre 100.001 et 300.000' => 0,
451
								'Entre 100.001 et 300.000' => 0,
430
								'Supérieur à 301.000' => 0);
452
								'Supérieur à 301.000' => 0);
431
			foreach ($collections as $nbre) {
453
			foreach ($collections as $nbre) {
432
				if ($nbre == 0) {
454
				if ($nbre == 0) {
433
					$donnees['0 part']++;
455
					$donnees['0 part']++;
434
				} else if ($nbre >= 1 && $nbre <= 100) {
456
				} else if ($nbre >= 1 && $nbre <= 100) {
435
					$donnees['Entre 1 et 100']++;
457
					$donnees['Entre 1 et 100']++;
436
				} else if ($nbre >= 101 && $nbre <= 1000) {
458
				} else if ($nbre >= 101 && $nbre <= 1000) {
437
					$donnees['Entre 101 et 1000']++;
459
					$donnees['Entre 101 et 1000']++;
438
				} else if ($nbre >= 1001 && $nbre <= 10000) {
460
				} else if ($nbre >= 1001 && $nbre <= 10000) {
439
					$donnees['Entre 1001 et 10.000']++;
461
					$donnees['Entre 1001 et 10.000']++;
440
				} else if ($nbre >= 10001 && $nbre <= 100000) {
462
				} else if ($nbre >= 10001 && $nbre <= 100000) {
441
					$donnees['Entre 10.001 et 100.000']++;
463
					$donnees['Entre 10.001 et 100.000']++;
442
				} else if ($nbre >= 100001 && $nbre <= 300000) {
464
				} else if ($nbre >= 100001 && $nbre <= 300000) {
443
					$donnees['Entre 100.001 et 300.000']++;
465
					$donnees['Entre 100.001 et 300.000']++;
444
				} else if ($nbre >= 300001) {
466
				} else if ($nbre >= 300001) {
445
					$donnees['Supérieur à 301.000']++;
467
					$donnees['Supérieur à 301.000']++;
446
				}
468
				}
447
			}
469
			}
448
			
470
			
449
			$donnees_tmp = $donnees;
471
			$donnees_tmp = $donnees;
450
			$donnees = array();
472
			$donnees = array();
451
			foreach ($donnees_tmp as $cle => $valeur) {
473
			foreach ($donnees_tmp as $cle => $valeur) {
452
				$donnees[$cle.' ('.$valeur.')'] = $valeur;
474
				$donnees[$cle.' ('.$valeur.')'] = $valeur;
453
			}
475
			}
454
			$donnees = array_reverse($donnees, true);
476
			$donnees = array_reverse($donnees, true);
455
			$legende = implode('|', array_keys($donnees));
477
			$legende = implode('|', array_keys($donnees));
456
			$valeurs = implode(',', $donnees);
478
			$valeurs = implode(',', $donnees);
457
			$titre = str_replace(' ', '+', 'Nombre de parts conservées |par collection');
-
 
458
					
479
					
459
			// Construire de l'url de l'image
480
			// Paramètres du graphique
460
			$url = 'http://chart.apis.google.com/chart?'.
481
			$graph = array(
461
				'cht=p3'.
482
				'cht' => 'p3',
462
				'&chs=400x225'.
483
				'chs' => '400x225',
463
				'&chco=4D89F9'.
484
				'chco' => 'EDC951|DEB0DB|DEC9B0|B0DEB3|B0C4DE|B0B0DE|927CBA',
464
				'&chd=t:'.$valeurs.
485
				'chd' => "t:$valeurs",
465
				'&chds=0,'.max($donnees).
486
				'chds' => '0,'.max($donnees),
466
				'&chdl='.$legende.
487
				'chdl' => $legende,
467
				'&chdlp=r,0,1,2,3,4,5'.
488
				'chdlp' => 'r,0,1,2,3,4,5',
468
				'&chtt='.$titre.
489
				'chtt' => 'Nombre de parts conservées |par collection',
469
				'&chts=000000,11.5'.
490
				'chts' => '000000,11.5',
470
				'&chts=000000,12';
-
 
471
			
-
 
472
			// Retour du html contenant l'image
-
 
473
			$sortie = '<img src="'.$url.'"/>';
491
				'chts' => '000000,12');
474
		}
492
		}
475
		return $sortie;
493
		return $graph;
476
	}
494
	}
477
	
495
	
478
	private function getNombreCollectionParDepartement() {
496
	private function getNombreCollectionParDepartement() {
479
		// Récupération des paramêtres
497
		// Récupération des paramêtres
480
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
498
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
481
		if ($projet_id !== null) {
499
		if ($projet_id !== null) {
482
			// Récupération des données
500
			// Récupération des données
483
			$requete = 	'SELECT cs_code_postal '.
501
			$requete = 	'SELECT cs_code_postal '.
484
						'FROM coel_collection '.
502
						'FROM coel_collection '.
485
						'	LEFT JOIN coel_structure ON (cc_ce_structure = cs_id_structure) '.
503
						'	LEFT JOIN coel_structure ON (cc_ce_structure = cs_id_structure) '.
486
						'WHERE cs_ce_truk_pays = '.self::META_CODE_FRANCE.' '.
504
						'WHERE cs_ce_truk_pays = '.self::META_CODE_FRANCE.' '.
487
						( is_null($projet_id) ? '' : "	AND cc_ce_projet = $projet_id ");
505
						( is_null($projet_id) ? '' : "	AND cc_ce_projet = $projet_id ");
488
			
506
			
489
			try {
507
			try {
490
				$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
508
				$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
491
				if ($infos === false) {
509
				if ($infos === false) {
492
					$this->messages[] = "La requête a retourné aucun résultat.";
510
					$this->messages[] = "La requête a retourné aucun résultat.";
493
				} else if (count($infos) == 0) {
511
				} else if (count($infos) == 0) {
494
					$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
512
					$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
495
					$infos == false;
513
					$infos == false;
496
				}
514
				}
497
			} catch (PDOException $e) {
515
			} catch (PDOException $e) {
498
				$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
516
				$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
499
			}
517
			}
500
			
518
			
501
			$sortie = null;
519
			$graph = null;
502
			if ($infos !== false) {
520
			if ($infos !== false) {
503
				// Post traitement des données de la base de données
521
				// Post traitement des données de la base de données
504
				// Extraction du nombre de part
522
				// Extraction du nombre de part
505
				$donnees = array();
523
				$donnees = array();
506
				foreach ($infos as $info) {
524
				foreach ($infos as $info) {
507
					if (preg_match('/^([0-8][0-9]|9[0-5]|97[1-4]|976)/', $info['cs_code_postal'], $match)) {
525
					if (preg_match('/^([0-8][0-9]|9[0-5]|97[1-4]|976)/', $info['cs_code_postal'], $match)) {
508
						if (! isset($donnees[$match[1]])) {
526
						if (! isset($donnees[$match[1]])) {
509
							$donnees[$match[1]] = 1; 
527
							$donnees[$match[1]] = 1; 
510
						} else {
528
						} else {
511
							$donnees[$match[1]]++;
529
							$donnees[$match[1]]++;
512
						}
530
						}
513
					}
531
					}
514
				}
532
				}
515
				
533
				
516
				$donnees_tmp = $donnees;
534
				$donnees_tmp = $donnees;
517
				$donnees = array();
535
				$donnees = array();
518
				foreach ($donnees_tmp as $cle => $valeur) {
536
				foreach ($donnees_tmp as $cle => $valeur) {
519
					$donnees[$cle.' ('.$valeur.' collections)'] = $valeur;
537
					$donnees[$cle.' ('.$valeur.' collections)'] = $valeur;
520
				}
538
				}
521
				
539
				
522
				asort($donnees);
540
				asort($donnees);
523
				$valeurs = implode(',', $donnees);
541
				$valeurs = implode(',', $donnees);
524
				$titre = str_replace(' ', '+', 'Nombre de collections conservées |par département');
-
 
525
				$legende = implode('|', array_keys($donnees));		
542
				$legende = implode('|', array_keys($donnees));		
526
				// Construire de l'url de l'image
-
 
527
				$url = 'http://chart.apis.google.com/chart?'.
-
 
528
					'cht=p3'.
-
 
529
					'&chs=400x225'.
-
 
530
					'&chco=4D89F9'.
-
 
531
					'&chd=t:'.$valeurs.
-
 
532
					'&chds=0,'.max($donnees).
-
 
533
					'&chdl='.$legende.
-
 
534
					'&chtt='.$titre.
-
 
535
					'&chts=000000,11.5'.
-
 
536
					'&chts=000000,12';
-
 
537
				
543
				
-
 
544
				// Paramètres du graphique
-
 
545
				$graph = array(
-
 
546
					'cht' => 'p3',
-
 
547
					'chs' => '400x225',
-
 
548
					'chco' => 'EDC951|DEB0DB|DEC9B0|B0DEB3|B0C4DE|B0B0DE|927CBA',
-
 
549
					'chd' => "t:$valeurs",
-
 
550
					'chds' => '0,'.max($donnees),
-
 
551
					'chdl' => $legende,
538
				// Retour du html contenant l'image
552
					'chtt' => 'Nombre de collections conservées |par département',
-
 
553
					'chts' => '000000,11.5',
539
				$sortie = '<img src="'.$url.'"/>';
554
					'chts' => '000000,12');
540
			}
555
			}
541
		} else {
556
		} else {
542
			$this->messages[] = "Veuillez sélectionner un projet pour voir le graphique.";
557
			$this->messages[] = "Veuillez sélectionner un projet pour voir le graphique.";
543
		}
558
		}
544
		return $sortie;
559
		return $graph;
545
	}
560
	}
546
	
561
	
547
	private function getNombreCollectionParTypeStructure() {
562
	private function getNombreCollectionParTypeStructure() {
548
		// Récupération des paramêtres
563
		// Récupération des paramêtres
549
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
564
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
550
 
565
 
551
		// Récupération des données
566
		// Récupération des données
552
		$requete = 	'SELECT cmlv_prive.cmlv_nom AS type_prive, cmlv_public.cmlv_nom  AS type_public '.
567
		$requete = 	'SELECT cmlv_prive.cmlv_nom AS type_prive, cmlv_public.cmlv_nom  AS type_public '.
553
					'FROM coel_collection '.
568
					'FROM coel_collection '.
554
					'	LEFT JOIN coel_structure ON (cc_ce_structure = cs_id_structure) '.
569
					'	LEFT JOIN coel_structure ON (cc_ce_structure = cs_id_structure) '.
555
					'	LEFT JOIN coel_meta_liste_valeur AS cmlv_prive ON (cs_ce_truk_type_prive = cmlv_prive.cmlv_id_valeur) '.
570
					'	LEFT JOIN coel_meta_liste_valeur AS cmlv_prive ON (cs_ce_truk_type_prive = cmlv_prive.cmlv_id_valeur) '.
556
					'	LEFT JOIN coel_meta_liste_valeur AS cmlv_public ON (cs_ce_truk_type_public = cmlv_public.cmlv_id_valeur) '.
571
					'	LEFT JOIN coel_meta_liste_valeur AS cmlv_public ON (cs_ce_truk_type_public = cmlv_public.cmlv_id_valeur) '.
557
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ");
572
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ");
558
		
573
		
559
		try {
574
		try {
560
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
575
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
561
			if ($infos === false) {
576
			if ($infos === false) {
562
				$this->messages[] = "La requête a retourné aucun résultat.";
577
				$this->messages[] = "La requête a retourné aucun résultat.";
563
			} else if (count($infos) == 0) {
578
			} else if (count($infos) == 0) {
564
				$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
579
				$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
565
				$infos == false;
580
				$infos == false;
566
			}
581
			}
567
		} catch (PDOException $e) {
582
		} catch (PDOException $e) {
568
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
583
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
569
		}
584
		}
570
		//Coel::debug($infos);
585
		//Coel::debug($infos);
571
		$sortie = null;
586
		$graph = null;
572
		if ($infos !== false) {
587
		if ($infos !== false) {
573
			// Post traitement des données de la base de données
588
			// Post traitement des données de la base de données
574
			// Extraction du nombre de part
589
			// Extraction du nombre de part
575
			$donnees = array();
590
			$donnees = array();
576
			foreach ($infos as $info) {
591
			foreach ($infos as $info) {
577
				if ($info['type_prive'] != '') {
592
				if ($info['type_prive'] != '') {
578
					$cle = $info['type_prive'].' [privé]'; 
593
					$cle = $info['type_prive'].' [privé]'; 
579
				} else if ($info['type_public'] != '') {
594
				} else if ($info['type_public'] != '') {
580
					$cle = $info['type_public'].' [public]';
595
					$cle = $info['type_public'].' [public]';
581
				} else {
596
				} else {
582
					$cle = 'Non renseignées';
597
					$cle = 'Non renseignées';
583
				}
598
				}
584
				if (! isset($donnees[$cle])) {
599
				if (! isset($donnees[$cle])) {
585
					$donnees[$cle] = 1;
600
					$donnees[$cle] = 1;
586
				} else {
601
				} else {
587
					$donnees[$cle]++;
602
					$donnees[$cle]++;
588
				}
603
				}
589
			}
604
			}
590
			
605
			
591
			$donnees_tmp = $donnees;
606
			$donnees_tmp = $donnees;
592
			$donnees = array();
607
			$donnees = array();
593
			foreach ($donnees_tmp as $cle => $valeur) {
608
			foreach ($donnees_tmp as $cle => $valeur) {
594
				$donnees[$cle.' ('.$valeur.')'] = $valeur;
609
				$donnees[$cle.' ('.$valeur.')'] = $valeur;
595
			}
610
			}
596
			
611
			
597
			asort($donnees);
612
			asort($donnees);
598
			$valeurs = implode(',', $donnees);
613
			$valeurs = implode(',', $donnees);
599
			$titre = str_replace(' ', '+', "Collections conservées |par type d'institution");
-
 
600
			$legende = implode('|', array_keys($donnees));		
614
			$legende = implode('|', array_keys($donnees));		
601
			// Construire de l'url de l'image
-
 
602
			$url = 'http://chart.apis.google.com/chart?'.
-
 
603
				'cht=p3'.
-
 
604
				'&chs=400x225'.
-
 
605
				'&chco=4D89F9'.
-
 
606
				'&chd=t:'.$valeurs.
-
 
607
				'&chds=0,'.max($donnees).
-
 
608
				'&chdl='.$legende.
-
 
609
				'&chtt='.$titre.
-
 
610
				'&chts=000000,11.5'.
-
 
611
				'&chts=000000,12';
-
 
612
			
615
			
-
 
616
			// Paramètres du graphique
-
 
617
			$graph = array(
-
 
618
				'cht' => 'p3',
-
 
619
				'chs' => '400x225',
-
 
620
				'chco' => 'EDC951|DEB0DB|DEC9B0|B0DEB3|B0C4DE|B0B0DE|927CBA',
613
			// Retour du html contenant l'image
621
				'chd' => "t:$valeurs",
-
 
622
				'chds' => '0,'.max($donnees),
-
 
623
				'chdl' => $legende,
-
 
624
				'chtt' => "Collections conservées |par type d'institution",
-
 
625
				'chts' => '000000,11.5',
614
			$sortie = '<img src="'.$url.'"/>';
626
				'chts' => '000000,12');
615
		}
627
		}
616
		return $sortie;
628
		return $graph;
617
	}
629
	}
618
	
630
	
619
	private function getNombreCollectionParPeriode() {
631
	private function getNombreCollectionParPeriode() {
620
		// Récupération des paramêtres
632
		// Récupération des paramêtres
621
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
633
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
622
 
634
 
623
		// Récupération des données
635
		// Récupération des données
624
		$requete = 	'SELECT cc_truk_periode_constitution '.
636
		$requete = 	'SELECT cc_truk_periode_constitution '.
625
					'FROM coel_collection '.
637
					'FROM coel_collection '.
626
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ");
638
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ");
627
		try {
639
		try {
628
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
640
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
629
			if ($infos === false) {
641
			if ($infos === false) {
630
				$this->messages[] = "La requête a retourné aucun résultat.";
642
				$this->messages[] = "La requête a retourné aucun résultat.";
631
			} else if (count($infos) == 0) {
643
			} else if (count($infos) == 0) {
632
				$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
644
				$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
633
				$infos == false;
645
				$infos == false;
634
			}
646
			}
635
		} catch (PDOException $e) {
647
		} catch (PDOException $e) {
636
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
648
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
637
		}
649
		}
638
		//Coel::debug($infos);
650
		//Coel::debug($infos);
639
		
651
		
640
		// Récupération des métadonnées nécessaires
652
		// Récupération des métadonnées nécessaires
641
		$requete = 	'SELECT cmlv_id_valeur, cmlv_nom, cmlv_abreviation '.
653
		$requete = 	'SELECT cmlv_id_valeur, cmlv_nom, cmlv_abreviation '.
642
					'FROM coel_meta_liste_valeur '.
654
					'FROM coel_meta_liste_valeur '.
643
					'WHERE cmlv_ce_parent = '.self::META_LISTE_SIECLE.' ';
655
					'WHERE cmlv_ce_parent = '.self::META_LISTE_SIECLE.' ';
644
		try {
656
		try {
645
			$metadonnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
657
			$metadonnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
646
			if ($metadonnees === false) {
658
			if ($metadonnees === false) {
647
				$this->messages[] = "La requête de recherche des métadonnées a retourné aucun résultat.";
659
				$this->messages[] = "La requête de recherche des métadonnées a retourné aucun résultat.";
648
			}
660
			}
649
		} catch (PDOException $e) {
661
		} catch (PDOException $e) {
650
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
662
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
651
		}
663
		}
652
		
664
		
653
		$sortie = null;
665
		$graph = null;
654
		if ($infos !== false) {
666
		if ($infos !== false) {
655
			// Traitement des métadonées
667
			// Traitement des métadonées
656
			$periodes = array(0 => array('nom' => 'Non renseigné', 'abr' => 0));
668
			$periodes = array(0 => array('nom' => 'Non renseigné', 'abr' => 0));
657
			foreach ($metadonnees as $meta) {
669
			foreach ($metadonnees as $meta) {
658
				$periodes[$meta['cmlv_id_valeur']] = array('nom' => $meta['cmlv_nom'], 'abr' => $meta['cmlv_abreviation']);
670
				$periodes[$meta['cmlv_id_valeur']] = array('nom' => $meta['cmlv_nom'], 'abr' => $meta['cmlv_abreviation']);
659
			}
671
			}
660
			
672
			
661
			// Post traitement des données de la base de données
673
			// Post traitement des données de la base de données
662
			$donnees = array();
674
			$donnees = array();
663
			foreach ($infos as $info) {
675
			foreach ($infos as $info) {
664
				// Récupération de la période de début de constitution
676
				// Récupération de la période de début de constitution
665
				$truk_periodes = explode(';;', $info['cc_truk_periode_constitution']);
677
				$truk_periodes = explode(';;', $info['cc_truk_periode_constitution']);
666
				$periode_abr_mini = 10;
678
				$periode_abr_mini = 10;
667
				$periode_id_mini = 0;
679
				$periode_id_mini = 0;
668
				foreach ($truk_periodes as $periode_id) {
680
				foreach ($truk_periodes as $periode_id) {
669
					if (! empty($periode_id)) {
681
					if (! empty($periode_id)) {
670
						if ($periode_abr_mini > $periodes[$periode_id]['abr']) {
682
						if ($periode_abr_mini > $periodes[$periode_id]['abr']) {
671
							$periode_abr_mini = $periodes[$periode_id]['abr'];
683
							$periode_abr_mini = $periodes[$periode_id]['abr'];
672
							$periode_id_mini = $periode_id;
684
							$periode_id_mini = $periode_id;
673
						}
685
						}
674
					}
686
					}
675
				}
687
				}
676
				
688
				
677
				// Augmentation du nombre de collection par période 
689
				// Augmentation du nombre de collection par période 
678
				if (! isset($donnees[$periodes[$periode_id_mini]['nom']])) {
690
				if (! isset($donnees[$periodes[$periode_id_mini]['nom']])) {
679
					$donnees[$periodes[$periode_id_mini]['nom']] = 1;
691
					$donnees[$periodes[$periode_id_mini]['nom']] = 1;
680
				} else {
692
				} else {
681
					$donnees[$periodes[$periode_id_mini]['nom']]++;
693
					$donnees[$periodes[$periode_id_mini]['nom']]++;
682
				}
694
				}
683
			}
695
			}
684
			
696
			
685
			$donnees_tmp = $donnees;
697
			$donnees_tmp = $donnees;
686
			$donnees = array();
698
			$donnees = array();
687
			foreach ($donnees_tmp as $cle => $valeur) {
699
			foreach ($donnees_tmp as $cle => $valeur) {
688
				$donnees[$cle.' ('.$valeur.')'] = $valeur;
700
				$donnees[$cle.' ('.$valeur.')'] = $valeur;
689
			}
701
			}
690
			
702
			
691
			asort($donnees);
703
			asort($donnees);
692
			$valeurs = implode(',', $donnees);
704
			$valeurs = implode(',', $donnees);
693
			$titre = str_replace(' ', '+', "Collections recensées par|siècle de constitution");
-
 
694
			$legende = implode('|', array_keys($donnees));
705
			$legende = implode('|', array_keys($donnees));
695
			// Construire de l'url de l'image
-
 
696
			$url = 'http://chart.apis.google.com/chart?'.
-
 
697
				'cht=p3'.
-
 
698
				'&chs=400x225'.
-
 
699
				'&chco=4D89F9'.
-
 
700
				'&chd=t:'.$valeurs.
-
 
701
				'&chds=0,'.max($donnees).
-
 
702
				'&chdl='.$legende.
-
 
703
				'&chtt='.$titre.
-
 
704
				'&chts=000000,11.5'.
-
 
705
				'&chts=000000,12';
-
 
706
			
706
			
-
 
707
			// Paramètres du graphique
-
 
708
			$graph = array(
-
 
709
				'cht' => 'p3',
-
 
710
				'chs' => '400x225',
-
 
711
				'chco' => 'EDC951|DEB0DB|DEC9B0|B0DEB3|B0C4DE|B0B0DE|927CBA',
707
			// Retour du html contenant l'image
712
				'chd' => "t:$valeurs",
-
 
713
				'chds' => '0,'.max($donnees),
-
 
714
				'chdl' => $legende,
-
 
715
				'chtt' => "Collections recensées par|siècle de constitution",
-
 
716
				'chts' => '000000,11.5',
708
			$sortie = '<img src="'.$url.'"/>';
717
				'chts' => '000000,12');
709
		}
718
		}
710
		return $sortie;
719
		return $graph;
711
	}
720
	}
712
	
721
	
713
	private function getNombreHerbierParType() {
722
	private function getNombreHerbierParType() {
714
		// Récupération des paramêtres
723
		// Récupération des paramêtres
715
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
724
		$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null);
716
 
725
 
717
		// Récupération des données
726
		// Récupération des données
718
		$requete = 	'SELECT ccb_ce_truk_type '.
727
		$requete = 	'SELECT ccb_ce_truk_type '.
719
					'FROM coel_collection_botanique '.
728
					'FROM coel_collection_botanique '.
720
					( is_null($projet_id) ? '' : '	LEFT JOIN coel_collection ON (ccb_id_collection = cc_id_collection) ').
729
					( is_null($projet_id) ? '' : '	LEFT JOIN coel_collection ON (ccb_id_collection = cc_id_collection) ').
721
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ");
730
					( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id ");
722
		try {
731
		try {
723
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
732
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
724
			if ($infos === false) {
733
			if ($infos === false) {
725
				$this->messages[] = "La requête a retourné aucun résultat.";
734
				$this->messages[] = "La requête a retourné aucun résultat.";
726
			} else if (count($infos) == 0) {
735
			} else if (count($infos) == 0) {
727
				$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
736
				$this->messages[] = "Aucune collection n'est référencée dans ce projet.";
728
				$infos == false;
737
				$infos == false;
729
			}
738
			}
730
		} catch (PDOException $e) {
739
		} catch (PDOException $e) {
731
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
740
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
732
		}
741
		}
733
		//Coel::debug($infos);
742
		//Coel::debug($infos);
734
		
743
		
735
		// Récupération des métadonnées nécessaires
744
		// Récupération des métadonnées nécessaires
736
		$requete = 	'SELECT cmlv_id_valeur, cmlv_nom, cmlv_abreviation '.
745
		$requete = 	'SELECT cmlv_id_valeur, cmlv_nom, cmlv_abreviation '.
737
					'FROM coel_meta_liste_valeur '.
746
					'FROM coel_meta_liste_valeur '.
738
					'WHERE cmlv_ce_parent = '.self::META_LISTE_TYPE_HERBIER.' ';
747
					'WHERE cmlv_ce_parent = '.self::META_LISTE_TYPE_HERBIER.' ';
739
		try {
748
		try {
740
			$metadonnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
749
			$metadonnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
741
			if ($metadonnees === false) {
750
			if ($metadonnees === false) {
742
				$this->messages[] = "La requête de recherche des métadonnées a retourné aucun résultat.";
751
				$this->messages[] = "La requête de recherche des métadonnées a retourné aucun résultat.";
743
			}
752
			}
744
		} catch (PDOException $e) {
753
		} catch (PDOException $e) {
745
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
754
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
746
		}
755
		}
747
		
756
		
748
		$sortie = null;
757
		$graph = null;
749
		if ($infos !== false) {
758
		if ($infos !== false) {
750
			// Traitement des métadonées
759
			// Traitement des métadonées
751
			$types = array(0 => array('nom' => 'Non renseigné', 'abr' => 'NR'));
760
			$types = array(0 => array('nom' => 'Non renseigné', 'abr' => 'NR'));
752
			foreach ($metadonnees as $meta) {
761
			foreach ($metadonnees as $meta) {
753
				$types[$meta['cmlv_id_valeur']] = array('nom' => $meta['cmlv_nom'], 'abr' => $meta['cmlv_abreviation']);
762
				$types[$meta['cmlv_id_valeur']] = array('nom' => $meta['cmlv_nom'], 'abr' => $meta['cmlv_abreviation']);
754
			}
763
			}
755
			
764
			
756
			// Post traitement des données de la base de données
765
			// Post traitement des données de la base de données
757
			$donnees = array();
766
			$donnees = array();
758
			foreach ($infos as $info) {
767
			foreach ($infos as $info) {
759
				// Récupération du type d'herbier
768
				// Récupération du type d'herbier
760
				$type_id = ($info['ccb_ce_truk_type'] != '') ? $info['ccb_ce_truk_type'] : 0;
769
				$type_id = ($info['ccb_ce_truk_type'] != '') ? $info['ccb_ce_truk_type'] : 0;
761
 
770
 
762
				// Augmentation du nombre de collection par période 
771
				// Augmentation du nombre de collection par période 
763
				if (! isset($donnees[$types[$type_id]['nom']])) {
772
				if (! isset($donnees[$types[$type_id]['nom']])) {
764
					$donnees[$types[$type_id]['nom']] = 1;
773
					$donnees[$types[$type_id]['nom']] = 1;
765
				} else {
774
				} else {
766
					$donnees[$types[$type_id]['nom']]++;
775
					$donnees[$types[$type_id]['nom']]++;
767
				}
776
				}
768
			}
777
			}
769
			
778
			
770
			$donnees_tmp = $donnees;
779
			$donnees_tmp = $donnees;
771
			$donnees = array();
780
			$donnees = array();
772
			foreach ($donnees_tmp as $cle => $valeur) {
781
			foreach ($donnees_tmp as $cle => $valeur) {
773
				$donnees[$cle.' ('.$valeur.')'] = $valeur;
782
				$donnees[$cle.' ('.$valeur.')'] = $valeur;
774
			}
783
			}
775
			
784
			
776
			asort($donnees);
785
			asort($donnees);
777
			$valeurs = implode(',', $donnees);
786
			$valeurs = implode(',', $donnees);
778
			$titre = str_replace(' ', '+', "Nombre d'herbier par type");
-
 
779
			$legende = implode('|', array_keys($donnees));
787
			$legende = implode('|', array_keys($donnees));
780
			// Construire de l'url de l'image
-
 
781
			$url = 'http://chart.apis.google.com/chart?'.
-
 
782
				'cht=p3'.
-
 
783
				'&chs=300x350'.
-
 
784
				'&chco=4D89F9'.
-
 
785
				'&chd=t:'.$valeurs.
-
 
786
				'&chds=0,'.max($donnees).
-
 
787
				'&chdl='.$legende.
-
 
788
				'&chdlp=bv'.
-
 
789
				'&chtt='.$titre.
-
 
790
				'&chts=000000,11.5'.
-
 
791
				'&chts=000000,12';
-
 
792
			
788
			
-
 
789
			// Paramètres du graphique
-
 
790
			$graph = array(
-
 
791
				'cht' => 'p3',
-
 
792
				'chs' => '300x350',
-
 
793
				'chco' => 'EDC951|DEB0DB|DEC9B0|B0DEB3|B0C4DE|B0B0DE|927CBA',
-
 
794
				'chd' => "t:$valeurs",
-
 
795
				'chds' => '0,'.max($donnees),
-
 
796
				'chdl' => $legende,
793
			// Retour du html contenant l'image
797
				'chdlp' => 'bv',
-
 
798
				'chtt' => "Nombre d'herbier par type",
-
 
799
				'chts' => '000000,11.5',
794
			$sortie = '<img src="'.$url.'"/>';
800
				'chts' => '000000,12');
795
		}
801
		}
796
		return $sortie;
802
		return $graph;
797
	}
803
	}
798
}
804
}