Subversion Repositories eFlore/Applications.coel

Rev

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

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