Subversion Repositories eFlore/Applications.coel

Rev

Rev 1582 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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