Subversion Repositories eFlore/Applications.cel

Rev

Rev 1359 | Rev 2143 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
2
/**
3
 * Service fournissant des urls vers des images de graphiques sur les statistiques de l'application CEL.
4
 * Encodage en entrée : utf8
5
 * Encodage en sortie : utf8
6
 *
7
 * Cas d'utilisation :
8
 * /CelStatistique/TypeDeGraph : retourne le graphique demandé
562 jpm 9
 * Paramêtres :
10
 * serveur=[0-9] : retourne le graphique demandé sur le serveur numéro 0 à 9 (voir http://code.google.com/intl/fr/apis/chart/docs/making_charts.html#enhancements )
416 aurelien 11
 *
12
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
13
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
14
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
15
 * @version $Id$
16
 * @copyright 2009
17
 */
18
class CelStatistique extends Cel {
19
 
20
	/**
21
	 * Méthode appelée avec une requête de type GET.
22
	 */
23
	public function getElement($param) {
24
		$graph = null;
25
		$serveur = '';
26
 
27
		if (isset($param[0])) {
28
			$graph_demande = array_shift($param);
29
			$methode = 'get'.$graph_demande;
30
			if (method_exists($this, $methode)) {
31
				$graph = $this->$methode($param);
32
			} else {
33
				$this->messages[] = "Ce type de graphique '$graph_demande' n'est pas disponible.";
34
			}
35
		} else {
36
			$this->messages[] = "Le premier paramêtre du service CEL Statistique doit correspondre au type de graphique.";
37
		}
38
 
39
		if (!is_null($graph)) {
562 jpm 40
			$serveur = (isset($_GET['serveur']) && preg_match('/^[0-9]$/', $_GET['serveur'])) ? $_GET['serveur'].'.' : '';
416 aurelien 41
			$url = "http://{$serveur}chart.apis.google.com/chart";
42
			$contexte = stream_context_create(
43
				array('http' => array(
44
      				'method' => 'POST',
1359 aurelien 45
      				'content' => http_build_query($graph),
46
					'header' => 'Content-Type: application/x-www-form-urlencoded')));
416 aurelien 47
			$image = file_get_contents($url, false, $contexte);
48
			$this->envoyer($image, 'image/png', null, false);
49
		} else {
50
			$info = 'Un problème est survenu : '.print_r($this->messages, true);
51
			$this->envoyer($info);
52
		}
53
	}
54
 
55
	private function getEvolImgLieesParMois($param) {
1765 raphael 56
		$utilisateur = isset($_GET['utilisateur']) ? Cel::db()->quote($_GET['utilisateur']) : null;
563 jpm 57
 
416 aurelien 58
		// Récupération des données
1359 aurelien 59
		$requete = 	"SELECT DATE_FORMAT(date_creation, '%Y%m') AS periode, COUNT(ci.id_image) AS nbre ".
60
			"FROM cel_obs_images coi LEFT JOIN cel_images ci ON (coi.id_image = ci.id_image) ".
61
			"WHERE date_creation != '0000-00-00 00:00:00' ".
62
			((isset($utilisateur)) ? " AND courriel_utilisateur = $utilisateur " : '').
416 aurelien 63
			'GROUP BY periode '.
64
			'ORDER BY periode ';
1359 aurelien 65
 
1765 raphael 66
		$resulats = Cel::db()->executerRequete($requete);
416 aurelien 67
 
68
		$img_totale = array();
69
		foreach ($resulats as $info) {
70
			$img_totale[$info['periode']] = $info['nbre'];
71
		}
72
 
73
		// Trie des dates pour les étiquettes des axes
74
		$dates = array();
75
		$annees = array();
76
		$les_mois = array();
1359 aurelien 77
		$pas = 1; // intervalle de mois entre deux étiquettes
416 aurelien 78
		$periode = 0;
79
		$cumul = 0;
80
		$img_totale_cumul = array();
81
		foreach ($img_totale as $annee_mois => $nbre) {
82
			$annee = substr($annee_mois, 0, 4);
83
			$mois = substr($annee_mois, 4, 2);
1359 aurelien 84
			$mois_fmt_B = strftime('%b', strtotime("0000-$mois-01"));
416 aurelien 85
			$cumul += $nbre;
86
			$img_totale_cumul[$annee_mois] = $cumul;
87
 
88
			if (!isset($dates[$annee][$mois])) {
89
				$annees[] = (!isset($dates[$annee]) ? $annee : '');
90
				$les_mois[] = is_int($periode++ / $pas) ? $mois_fmt_B : '';
91
				// Ajouter au tableau dates tjrs à la fin
92
				$dates[$annee][$mois] = 1;
93
			}
94
		}
95
 
96
		// Post traitement des données
97
		$titre = "Évolution des images liées aux observations par mois";
98
		$valeurs_y = implode(',', $img_totale);
99
		$valeurs_r = implode(',', $img_totale_cumul);
1359 aurelien 100
		$valeurs_max_y = max($img_totale);
101
		$valeurs_max_r = max($img_totale_cumul);
416 aurelien 102
		$y_val_fin = $valeurs_max_y;
1359 aurelien 103
		$y_pas = 200;
416 aurelien 104
		$r_val_fin = $valeurs_max_r;
1359 aurelien 105
		$r_pas = 1000;
416 aurelien 106
		$etiquettes_x1 = implode('|', $les_mois);
107
		$etiquettes_x2 = implode('|', $annees);
108
		$etiquettes_y = 'Images';
1359 aurelien 109
 
416 aurelien 110
		// Construire de l'url de l'image
111
		$graph = array('cht' => 'lc',
112
			'chtt'	=> $titre,
113
			'chs'	=> '600x200',
114
			'chco'	=> '007F00,99CC00',
115
			'chd'	=> 't:'.$valeurs_y.'|'.$valeurs_r,
116
			'chds'	=> "0,$valeurs_max_y,0,$valeurs_max_r",
1359 aurelien 117
			'chxt'	=> 'y,y,x,x,r',
118
			'chxl'	=> '1:|'.$etiquettes_y.'|3:|'.$etiquettes_x2.'|2:|'.$etiquettes_x1.'',
119
			'chxp'	=> '1,50|3,0',
416 aurelien 120
			'chxr'	=> "0,0,$y_val_fin,$y_pas|4,0,$r_val_fin,$r_pas",
121
			'chm'	=> 'N ** ,000000,0,-1,8,1.0,ht',
1359 aurelien 122
			'chxs'	=> '0,007F00|4,99CC00');
416 aurelien 123
		return $graph;
124
	}
125
 
126
	private function getEvolImgParMois($param) {
1765 raphael 127
		$utilisateur = isset($_GET['utilisateur']) ? Cel::db()->quote($_GET['utilisateur']) : null;
563 jpm 128
 
416 aurelien 129
		// Récupération des données
1359 aurelien 130
		$requete = 	"SELECT DATE_FORMAT(date_creation, '%Y%m') AS periode, COUNT(id_image) AS nbre ".
416 aurelien 131
			"FROM cel_images ".
1359 aurelien 132
			"WHERE date_creation != '0000-00-00 00:00:00' ".
133
			((isset($utilisateur)) ? " AND courriel_utilisateur = $utilisateur " : '').
416 aurelien 134
			'GROUP BY periode '.
135
			'ORDER BY periode ';
1359 aurelien 136
 
1765 raphael 137
		$resulats = Cel::db()->executerRequete($requete);
416 aurelien 138
 
139
		$img_totale = array();
140
		foreach ($resulats as $info) {
141
			$img_totale[$info['periode']] = $info['nbre'];
142
		}
143
 
144
		// Trie des dates pour les étiquettes des axes
145
		$dates = array();
146
		$annees = array();
147
		$les_mois = array();
1359 aurelien 148
		$pas = 1; // intervalle de mois entre deux étiquettes
416 aurelien 149
		$periode = 0;
150
		$cumul = 0;
151
		$img_totale_cumul = array();
152
		foreach ($img_totale as $annee_mois => $nbre) {
153
			$annee = substr($annee_mois, 0, 4);
154
			$mois = substr($annee_mois, 4, 2);
1359 aurelien 155
			$mois_fmt_B = strftime('%b', strtotime("0000-$mois-01"));
416 aurelien 156
			$cumul += $nbre;
157
			$img_totale_cumul[$annee_mois] = $cumul;
158
 
159
			if (!isset($dates[$annee][$mois])) {
160
				$annees[] = (!isset($dates[$annee]) ? $annee : '');
161
				$les_mois[] = is_int($periode++ / $pas) ? $mois_fmt_B : '';
162
				// Ajouter au tableau dates tjrs à la fin
163
				$dates[$annee][$mois] = 1;
164
			}
165
		}
166
 
167
		// Post traitement des données
168
		$titre = "Évolution du dépôt d'images par mois";
169
		$valeurs_y = implode(',', $img_totale);
170
		$valeurs_r = implode(',', $img_totale_cumul);
1359 aurelien 171
		$valeurs_max_y = max($img_totale);
172
		$valeurs_max_r = max($img_totale_cumul);
416 aurelien 173
		$y_val_fin = $valeurs_max_y;
1359 aurelien 174
		$y_pas = 500;
416 aurelien 175
		$r_val_fin = $valeurs_max_r;
1359 aurelien 176
		$r_pas = 1000;
416 aurelien 177
		$etiquettes_x1 = implode('|', $les_mois);
178
		$etiquettes_x2 = implode('|', $annees);
179
		$etiquettes_y = 'Images';
1359 aurelien 180
 
416 aurelien 181
		// Construire de l'url de l'image
182
		$graph = array('cht' => 'lc',
183
			'chtt'	=> $titre,
184
			'chs'	=> '600x200',
185
			'chco'	=> '007F00,99CC00',
186
			'chd'	=> 't:'.$valeurs_y.'|'.$valeurs_r,
187
			'chds'	=> "0,$valeurs_max_y,0,$valeurs_max_r",
1359 aurelien 188
			'chxt'	=> 'y,y,x,x,r',
189
			'chxl'	=> '1:|'.$etiquettes_y.'|3:|'.$etiquettes_x2.'|2:|'.$etiquettes_x1.'',
190
			'chxp'	=> '1,50|3,0',
416 aurelien 191
			'chxr'	=> "0,0,$y_val_fin,$y_pas|4,0,$r_val_fin,$r_pas",
192
			'chm'	=> 'h,C3C3C3,0,0.5,1,-1|N ** ,000000,0,-1,8,1.0,ht',
1359 aurelien 193
			'chxs'	=> '0,007F00|4,99CC00');
416 aurelien 194
		return $graph;
195
	}
196
 
197
	private function getEvolUtilisateurParMois($param) {
198
		// Récupération des données
1359 aurelien 199
		$requete = 	'SELECT  DISTINCT courriel_utilisateur , '.
416 aurelien 200
					'	MIN(date_creation) AS date_min, MAX(date_creation) AS date_max, '.
1359 aurelien 201
					'	COUNT(id_observation) AS obs_nbre '.
202
					'FROM cel_obs '.
416 aurelien 203
					"WHERE date_creation != '0000-00-00 00:00:00' ".
1359 aurelien 204
					"	AND courriel_utilisateur LIKE '%@%' ".
205
					'GROUP BY courriel_utilisateur '.
416 aurelien 206
					'ORDER BY date_min ASC ';
1765 raphael 207
		$resultats = Cel::db()->executerRequete($requete);
416 aurelien 208
 
209
		// Trie des données et des dates pour les étiquettes des axes
210
		$dates = array();
211
		$annees = array();
212
		$utilisateurs = array();
213
		$les_mois = array();
1359 aurelien 214
		$pas = 2; // intervalle de mois entre deux étiquettes
416 aurelien 215
		$periode = 0;
216
		foreach ($resultats as $enrg) {
217
			$annee = substr($enrg['date_min'], 0, 4);
218
			$mois = substr($enrg['date_min'], 5, 2);
1359 aurelien 219
			$mois_fmt_B = strftime('%b', strtotime("0000-$mois-01"));
416 aurelien 220
 
221
			if (!isset($dates[$annee][$mois])) {
222
				$annees[] = (!isset($dates[$annee]) ? $annee : '');
223
				$les_mois[] = is_int($periode++ / $pas) ? $mois_fmt_B : '';
224
				$utilisateurs["$annee-$mois"] = 1;
225
				// Ajouter au tableau dates tjrs à la fin
226
				$dates[$annee][$mois] = 1;
227
			} else {
228
				$utilisateurs["$annee-$mois"]++;
229
			}
230
		}
231
 
232
		// Post traitement des données
233
		$titre = 'Évolution des utilisateurs par mois';
234
		$valeurs = implode(',', $utilisateurs);
235
		$valeurs_max = max($utilisateurs);
236
		$y_val_fin = $valeurs_max;
560 jpm 237
		$y_pas = 5;
416 aurelien 238
		$etiquettes_x1 = implode('|', $les_mois);
239
		$etiquettes_x2 = implode('|', $annees);
560 jpm 240
		$etiquettes_y = 'Utilisateurs';
416 aurelien 241
 
242
		// Construire de l'url de l'image
243
		$graph = array('cht' => 'lc',
244
			'chtt'	=> $titre,
245
			'chs'	=> '600x200',
246
			'chco'	=> '0000FF',//4D89F9
247
			'chd'	=> 't:'.$valeurs,
248
			'chds'	=> '0,'.$valeurs_max,
249
			'chxt'	=> 'y,y,x,x',
250
			'chxl'	=> '1:|'.$etiquettes_y.'|3:|'.$etiquettes_x2.'|2:|'.$etiquettes_x1.'',
251
			'chxp'	=> '1,50|3,0',
252
			'chxr'	=> "0,0,$y_val_fin,$y_pas",
560 jpm 253
			'chm'	=> 'h,C3C3C3,0,0.5,1,-1|N ** ,000000,0,2::2,8,1.0,ht',
254
			'chxs'	=> '0,0000FF|1,0000FF');
416 aurelien 255
		return $graph;
256
	}
257
 
258
	private function getEvolObsParMoisGlissant($param) {
259
		// Récupération des données
260
		$format_date = '%Y%m%d';
261
		$where = 'date_creation > DATE_SUB(NOW(), INTERVAL 31 DAY)';
1359 aurelien 262
		$obs_totale = $this->executerRequeteEvol('cel_obs', 'id_observation', $format_date, $where);
263
 
264
		// Tri des dates pour les étiquettes des axes
416 aurelien 265
		$dates = array();
266
		$annees = array();
267
		$annees_mois = array();
268
		$jours = array();
269
		foreach ($obs_totale as $annee_mois_jours => $nbre) {
270
			$annee = substr($annee_mois_jours, 0, 4);
271
			$mois = substr($annee_mois_jours, 4, 2);
272
			$jour = substr($annee_mois_jours, 6, 2);
560 jpm 273
			$annee_mois_fmt_B = strftime('%B %Y', mktime(0, 0, 0, $mois, 1, $annee));
274
 
416 aurelien 275
			if (!isset($dates[$annee][$mois][$jour])) {
276
				$annees_mois[] = (!isset($dates[$annee][$mois]) ? $annee_mois_fmt_B : '');
277
				$jours[] = $jour;
278
				// Ajouter au tableau dates tjrs à la fin
279
				$dates[$annee][$mois][$jour] = 1;
280
			}
281
		}
560 jpm 282
 
416 aurelien 283
		// Post traitement des données
284
		$titre = 'Évolution des observations sur un mois glissant';
1359 aurelien 285
		$valeurs_max = max($obs_totale);
416 aurelien 286
		$valeurs = implode(',', $obs_totale);
287
		$y_val_fin = $valeurs_max;
560 jpm 288
		$y_pas = round($valeurs_max / 6);
416 aurelien 289
		$etiquettes_x1 = implode('|', $jours);
290
		$etiquettes_x2 = implode('|', $annees_mois);
560 jpm 291
		$etiquettes_y2 = 'Observations';
416 aurelien 292
 
1359 aurelien 293
		// Construire de l'url de l'image
416 aurelien 294
		$graph = array('cht' => 'lc',
295
			'chtt'	=>	$titre,
296
			'chs'	=>	'600x200',
297
			'chco'	=>	'822013',
298
			'chd'	=>	't:'.$valeurs,
299
			'chds'	=>	'0,'.$valeurs_max,
300
			'chxt'	=>	'y,y,x,x',
560 jpm 301
			'chxl'	=>	'1:|'.$etiquettes_y2.'|2:|'.$etiquettes_x1.'|3:|'.$etiquettes_x2,
416 aurelien 302
			'chxp'	=>	'0,0|1,50',
303
			'chxr'	=>	"0,0,$y_val_fin,$y_pas",
560 jpm 304
			'chm'	=> 'h,C3C3C3,0,0.5,1,-1|N,000000,0,1::1,8,1.0,ht',
305
			'chxs'	=> '0,822013|1,822013');
1359 aurelien 306
 
416 aurelien 307
		return $graph;
308
	}
309
 
310
	private function getEvolObsParMois($param) {
311
		// Récupération des données
1359 aurelien 312
		$obs_totale = $this->executerRequeteEvol('cel_obs', 'id_observation');
416 aurelien 313
 
314
		// Trie des dates pour les étiquettes des axes
315
		$dates = array();
316
		$annees = array();
317
		$les_mois = array();
560 jpm 318
		$pas = 3; // intervalle de mois entre deux étiquettes
416 aurelien 319
		$periode = 0;
320
		$cumul = 0;
321
		$obs_totale_cumul = array();
322
		foreach ($obs_totale as $annee_mois => $nbre) {
323
			$annee = substr($annee_mois, 0, 4);
324
			$mois = substr($annee_mois, 4, 2);
1359 aurelien 325
			$mois_fmt_B = strftime('%b', strtotime("0000-$mois-01"));
416 aurelien 326
			$cumul += $nbre;
327
			$obs_totale_cumul[$annee_mois] = $cumul;
328
 
329
			if (!isset($dates[$annee][$mois])) {
330
				$annees[] = (!isset($dates[$annee]) ? $annee : '');
331
				$les_mois[] = is_int($periode++ / $pas) ? $mois_fmt_B : '';
332
				// Ajouter au tableau dates tjrs à la fin
333
				$dates[$annee][$mois] = 1;
334
			}
335
		}
336
 
337
		// Post traitement des données
338
		$titre = 'Évolution des observations par mois';
339
		$valeurs_y = implode(',', $obs_totale);
340
		$valeurs_r = implode(',', $obs_totale_cumul);
1359 aurelien 341
		$valeurs_max_y = max($obs_totale);
342
		$valeurs_max_r = max($obs_totale_cumul);
416 aurelien 343
		$y_val_fin = $valeurs_max_y;
560 jpm 344
		$y_pas = round(($valeurs_max_y / 6), 0);
416 aurelien 345
		$r_val_fin = $valeurs_max_r;
560 jpm 346
		$r_pas = round(($valeurs_max_r / 6), 0);
416 aurelien 347
		$etiquettes_x1 = implode('|', $les_mois);
348
		$etiquettes_x2 = implode('|', $annees);
560 jpm 349
		$etiquettes_y2 = 'Observations';
1359 aurelien 350
		$etiquettes_r2 = 'Cumul obs.';
416 aurelien 351
 
352
		// Construire de l'url de l'image
353
		$graph = array('cht' => 'lc',
354
			'chtt'	=> $titre,
355
			'chs'	=> '600x200',
356
			'chco'	=> '822013,F1841D',
357
			'chd'	=> 't:'.$valeurs_y.'|'.$valeurs_r,
358
			'chds'	=> "0,$valeurs_max_y,0,$valeurs_max_r",
560 jpm 359
			'chxt'	=> 'y,y,x,x,r,r',
360
			'chxl'	=> '1:|'.$etiquettes_y2.'|2:|'.$etiquettes_x1.'|3:|'.$etiquettes_x2.'|5:|'.$etiquettes_r2.'',
361
			'chxp'	=> '1,50|3,0|5,50',
416 aurelien 362
			'chxr'	=> "0,0,$y_val_fin,$y_pas|4,0,$r_val_fin,$r_pas",
363
			'chm'	=> 'N ** ,000000,0,2::2,8,1.0,ht',
560 jpm 364
			'chxs'	=> '0,822013|1,822013|4,F1841D|5,F1841D');
416 aurelien 365
		return $graph;
366
	}
367
 
368
	private function getEvolObsParAn($param) {
369
		// Récupération des données
1359 aurelien 370
		$obs_totale = $this->executerRequeteEvol('cel_obs', 'id_observation', '%Y');
416 aurelien 371
 
372
		// Trie des dates pour les étiquettes des axes
373
		$dates = array();
374
		$annees = array();
375
		foreach ($obs_totale as $annee => $nbre) {
376
			if (!isset($dates[$annee])) {
377
				$annees[] = $annee;
378
				$dates[$annee] = 1;
379
			}
380
		}
381
 
382
		// Post traitement des données
383
		$titre = 'Évolution des observations par année';
384
		$valeurs = implode(',', $obs_totale);
1359 aurelien 385
		$valeurs_max = max($obs_totale);
386
		$valeurs_min = min($obs_totale);
416 aurelien 387
		$y_val_deb = preg_replace('/[0-9]{2}$/', '00', $valeurs_min);
388
		$y_val_fin = $valeurs_max;
560 jpm 389
		$y_pas = round(($valeurs_max / 6), 0);
416 aurelien 390
		$etiquettes_x = implode('|', $annees);;
560 jpm 391
		$etiquettes_y = 'Observations';
416 aurelien 392
 
393
		// Construire de l'url de l'image
394
		$graph = array('cht' => 'lc',
395
			'chtt'	=> $titre,
396
			'chs'	=> '600x200',
397
			'chco'	=> '822013',
398
			'chd'	=> 't:'.$valeurs,
399
			'chds'	=> "$valeurs_min,$valeurs_max",
400
			'chxt'	=> 'y,y,x',
401
			'chxl'	=> '1:|'.$etiquettes_y.'|2:|'.$etiquettes_x.'',
402
			'chxp'	=> '0,0|1,50|2,0',
403
			'chxr'	=> "0,$y_val_deb,$y_val_fin,$y_pas",
560 jpm 404
			'chm'	=> 'h,C3C3C3,0,0.5,1,-1|N,000000,0,1::1,8,1.0,ht',
405
			'chxs'	=> '0,822013|1,822013');
416 aurelien 406
		return $graph;
407
	}
408
 
409
	private function getEvolObsHisto($param) {
410
		// Récupération des données
1359 aurelien 411
		$obs_totale = $this->executerRequeteEvol('cel_obs', 'id_observation');
412
		$obs_identifiee = $this->executerRequeteEvol('cel_obs', 'id_observation', "courriel_utilisateur LIKE '%@%' ");
416 aurelien 413
		$lignes = array('total', 'obs. identifiée');
414
 
415
		// Post traitement des données
416
		$titre = 'Évolution des observations';
417
		$valeurs = implode(',', $obs_totale).'|'.implode(',', $obs_identifiee);
1359 aurelien 418
		$valeurs_max = max($obs_totale);
416 aurelien 419
		$etiquettes = implode('|', array_keys($lignes));
420
 
421
		// Construire de l'url de l'image
422
		$graph = array('cht' => 'lc',
423
			'chtt'	=> $titre,
424
			'chs'	=> '500x300',
425
			'chco'	=> 'FF0000,00FF00',
426
			'chd'	=> 't:'.$valeurs,
427
			'chds'	=> "0,$valeurs_max",
428
			'chxt'	=> 'y',
429
			'chxl'	=> '0:|'.$etiquettes.'',
430
			'chm'	=> 'N,000000,0,-1,10');
431
		return $graph;
432
	}
433
 
434
	private function getNbreObsIdVsTest($param) {
435
		// Récupération des données
1359 aurelien 436
		$obs_totale = $this->executerRequeteNombre('cel_obs', 'id_observation');
437
		$obs_identifiee = $this->executerRequeteNombre('cel_obs', 'id_observation', "courriel_utilisateur LIKE '%@%' ");
416 aurelien 438
		$obs_test = $obs_totale - $obs_identifiee;
439
		$pourcent_identifiee = round(($obs_identifiee / ($obs_totale / 100)), 2).'%';
440
		$pourcent_anonyme = round(($obs_test / ($obs_totale / 100)), 2).'%';
441
 
442
		// Post traitement des données de la base de données
443
		$titre = "Nombre d'observations|tests vs. identifiées";
444
		$etiquette_obs_test = "tests ($obs_test - $pourcent_anonyme)";
445
		$etiquette_obs_id = "identifiées ($obs_identifiee - $pourcent_identifiee)";
446
		$donnees = array($etiquette_obs_test => $obs_test, $etiquette_obs_id => $obs_identifiee);
447
		$valeurs = implode(',', $donnees);
448
		$etiquettes = implode('|', array_keys($donnees));
449
 
450
		// Construire les paramêtres de l'url de l'image
451
		$graph = array('cht' => 'p3',
452
			'chtt'	=> $titre,
453
			'chs'	=> '250x200',
454
			'chco'	=> 'FF0000,00FF00',
455
			'chd'	=> 't:'.$valeurs,
456
			'chds'	=> "0,$obs_totale",
457
			'chdl'	=> $etiquettes,
458
			'chdlp'	=> 'bv|r',
459
			'chts'	=> '000000,12');
460
		return $graph;
461
	}
462
 
463
	private function getNbreObsPublicVsPrivee($param) {
464
		// Récupération des données
1359 aurelien 465
		$obs_totale = $this->executerRequeteNombre('cel_obs', 'id_observation');
466
		$obs_public = $this->executerRequeteNombre('cel_obs', 'id_observation', 'transmission = 1');
416 aurelien 467
		$obs_privee = $obs_totale - $obs_public;
468
		$pourcent_privee = round(($obs_privee / ($obs_totale / 100)), 2).'%';
469
		$pourcent_public = round(($obs_public / ($obs_totale / 100)), 2).'%';
470
 
471
		// Post traitement des données de la base de données
472
		$titre = "Nombre d'observations|publiques vs. privées";
473
		$etiquette_obs_public = "publiques ($obs_public - $pourcent_public)";
474
		$etiquette_obs_privee = "privées ($obs_privee - $pourcent_privee)";
475
		$donnees = array($etiquette_obs_privee => $obs_privee, $etiquette_obs_public => $obs_public);
476
		$valeurs = implode(',', $donnees);
477
		$etiquettes = implode('|', array_keys($donnees));
478
 
479
		// Construire les paramêtres du graph
480
		$graph = array('cht' => 'p3',
481
			'chtt'	=> $titre,
482
			'chs'	=> '250x200',
483
			'chco'	=> 'FF0000,00FF00',
484
			'chd'	=> 't:'.$valeurs,
485
			'chds'	=> "0,$obs_totale",
486
			'chdl'	=> $etiquettes,
487
			'chdlp'	=> 'bv|r',
488
			'chts'	=> '000000,12');
489
		return $graph;
490
	}
491
 
492
	private function getNbreObsDetermineeVsInconnue($param) {
493
		// Récupération des données
1359 aurelien 494
		$obs_totale = $this->executerRequeteNombre('cel_obs', 'id_observation');
495
		$obs_determinee = $this->executerRequeteNombre('cel_obs', 'id_observation', 'nom_sel_nn != 0');
416 aurelien 496
		$obs_inconnue = $obs_totale - $obs_determinee;
497
		$pourcent_determinee = round(($obs_determinee / ($obs_totale / 100)), 2).'%';
498
		$pourcent_inconnue = round(($obs_inconnue / ($obs_totale / 100)), 2).'%';
499
 
500
		// Post traitement des données de la base de données
501
		$titre = "Nombre d'observations|determinées vs. inconnues";
502
		$etiquette_obs_determinee = "determinées ($obs_determinee - $pourcent_determinee)";
503
		$etiquette_obs_inconnue = "non déterminées ($obs_inconnue - $pourcent_inconnue)";
504
		$donnees = array($etiquette_obs_inconnue => $obs_inconnue, $etiquette_obs_determinee => $obs_determinee);
505
		$valeurs = implode(',', $donnees);
506
		$etiquettes = implode('|', array_keys($donnees));
507
 
508
		// Construire les paramêtres du graph
509
		$graph = array('cht' => 'p3',
510
			'chtt'	=> $titre,
511
			'chs'	=> '250x200',
512
			'chco'	=> 'FF0000,00FF00',
513
			'chd'	=> 't:'.$valeurs,
514
			'chds'	=> "0,$obs_totale",
515
			'chdl'	=> $etiquettes,
516
			'chdlp'	=> 'bv|r',
517
			'chts'	=> '000000,12');
518
		return $graph;
519
	}
520
 
521
	private function getNbreObsAvecIndicationGeo($param) {
522
		// Récupération des données
1359 aurelien 523
		$total = $this->executerRequeteNombre('cel_obs', 'id_observation');
524
		$where_commune = $this->creerWhereIndicationGeo('zone_geo');
525
		$obs['commune'] = $this->executerRequeteNombre('cel_obs', 'id_observation', $where_commune);
526
		$where_commune_id = $this->creerWhereIndicationGeo('ce_zone_geo');
527
		$obs['commune identifiée'] = $this->executerRequeteNombre('cel_obs', 'id_observation', $where_commune_id);
563 jpm 528
		$where_lieudit = $this->creerWhereIndicationGeo('lieudit');
1359 aurelien 529
		$obs['lieu-dit'] = $this->executerRequeteNombre('cel_obs', 'id_observation', $where_lieudit);
563 jpm 530
		$where_station = $this->creerWhereIndicationGeo('station');
1359 aurelien 531
		$obs['station'] = $this->executerRequeteNombre('cel_obs', 'id_observation', $where_station);
563 jpm 532
		$where_milieu = $this->creerWhereIndicationGeo('milieu');
1359 aurelien 533
		$obs['milieu'] = $this->executerRequeteNombre('cel_obs', 'id_observation', $where_milieu);
534
		$where_xy = $this->creerWhereIndicationGeo('latitude').' AND '.$this->creerWhereIndicationGeo('longitude');
535
		$obs['coordonnée'] = $this->executerRequeteNombre('cel_obs', 'id_observation', $where_xy);
416 aurelien 536
 
537
		$donnees = array();
538
		$num = 1;
539
		foreach ($obs as $etiquette => $nbre) {
540
			$pourcent = round(($obs[$etiquette] / ($total / 100)), 1).'%';
541
			$legende = "$num : $etiquette ($nbre - $pourcent)";
542
			$donnees['valeurs'][] = $nbre;
543
			$donnees['etiquettes'][] = $num++;
544
			$donnees['legendes'][] = $legende;
545
		}
546
 
547
 
548
		// Post traitement des données de la base de données
549
		$titre = "Nombre d'observations|avec indications géographiques";
550
		$valeurs = implode(',', $donnees['valeurs']);
551
		$etiquettes = implode('|', $donnees['etiquettes']);
552
		$legendes = implode('|', $donnees['legendes']);
553
 
554
		// Construire les paramêtres du graph
555
		$graph = array('cht' => 'rs',
556
			'chtt'	=> $titre,
557
			'chs'	=> '600x300',
558
			'chco'	=> 'FFFFFF',
559
			'chd'	=> 't:'.$valeurs,
560
			'chds'	=> "0,$total",
561
			'chdl'	=> $legendes,
562
			'chxt'	=> 'x',
563
			'chxl'	=> "0:|$etiquettes",
564
			//'chxp'	=> '1,0,20,40,60,80,100',// Grille sous forme de cible
565
			'chm'	=> 'B,FF000080,0,1.0,5.0');
566
		return $graph;
567
	}
563 jpm 568
 
569
	private function creerWhereIndicationGeo($champ) {
570
		$where = null;
571
		if (isset($champ)) {
572
			$where = "$champ != '000null' ".
573
				"AND $champ != '' ".
574
				"AND $champ IS NOT NULL ";
575
		}
576
		return $where;
577
	}
416 aurelien 578
 
579
	private function getUtilisationJournaliere($param) {
580
		// Sur quel jour, voulons nous estimer l'utilisation
581
		$aujourdhui = date('Y-m-d');
582
		if (isset($param[0]) && preg_match('/^[0-9]{4}(?:-[0-9]{2}){2}$/', $param[0])) {
583
			$aujourdhui = $param[0];
584
		}
585
		$aujourdhui_fmt = strftime('%d %b %Y', strtotime($aujourdhui));
586
 
587
		// Récupération des données
588
		$max_obs = array();
1359 aurelien 589
		$max_obs[] = $this->executerRequeteEvol('cel_obs', 'id_observation', '%Y%m%d',
416 aurelien 590
			"date_creation NOT LIKE '$aujourdhui%' ", 'date_creation');
1359 aurelien 591
		$max_obs[] = $this->executerRequeteEvol('cel_obs', 'id_observation', '%Y%m%d',
416 aurelien 592
			"date_modification NOT LIKE '$aujourdhui%' ", 'date_modification');
1359 aurelien 593
		$max_obs[] = $this->executerRequeteEvol('cel_obs', 'id_observation', '%Y%m%d',
416 aurelien 594
			"date_transmission NOT LIKE '$aujourdhui%' ", 'date_transmission');
1359 aurelien 595
		$obs_aujourdhui = $this->executerRequeteNombre('cel_obs', 'id_observation',
563 jpm 596
			"(date_creation LIKE '$aujourdhui%'
416 aurelien 597
				OR date_modification LIKE '$aujourdhui%'
563 jpm 598
				OR date_transmission LIKE '$aujourdhui%') ");
599
 
416 aurelien 600
		// Cummul des obs crées, modifiées, transmises par jour
601
		$donnees = array();
602
		foreach ($max_obs as $obs_par_jour) {
603
			foreach ($obs_par_jour as $annee_mois_jour => $nbre) {
604
				if (!isset($donnees[$annee_mois_jour])) {
605
					$donnees[$annee_mois_jour] = $nbre;
606
				} else {
607
					$donnees[$annee_mois_jour] += $nbre;
608
				}
609
			}
610
		}
611
 
612
		// Post traitement des données
613
		$valeur = $obs_aujourdhui;
563 jpm 614
		$valeur_max = 400;
416 aurelien 615
		if ($valeur > $valeur_max) {
616
			$pourcentage = 100;
617
		} else {
618
			$pourcentage = round(($valeur / ($valeur_max / 100)), 0);
619
		}
620
		$etiquettes_x = $aujourdhui_fmt;
621
		$etiquettes_y = "faible|moyenne|forte";
622
		$titre = "Intensité d'utilisation pour le $aujourdhui_fmt";
623
		$legende = "$valeur changements";
624
 
625
		// Construire de l'url de l'image
626
		$graph = array('cht' => 'gom',
627
			'chtt'	=> $titre,
628
			'chdl'	=> "$legende",
629
			'chdlp'	=> 'b',
630
			'chs'	=> '350x200',
631
			'chco'	=> 'FFFF00,0A7318',
632
			'chls'	=> '3|10',
633
			'chma'	=> '0,0,0,0|300,40',
634
			'chd'	=> 't:'.$pourcentage,
635
			'chxt'	=> 'x,y',
636
			'chxl'	=> '0:|'.$etiquettes_x.'|1:|'.$etiquettes_y.'',
637
			'chxp'	=> '0,50');
638
		return $graph;
639
	}
640
 
641
	private function getNbreObsParUtilisateur($param) {
642
		// Récupération des données
1359 aurelien 643
		$requete = 	'SELECT courriel_utilisateur, COUNT(id_observation) AS nbre '.
644
					'FROM cel_obs '.
645
					'GROUP BY courriel_utilisateur ';
1765 raphael 646
		$utilisateurs = Cel::db()->executerRequete($requete);
416 aurelien 647
 
648
		// Création des classes d'utilisateurs
649
		$classes = array('00->10' => 0, '11->50' => 0, '51->100' => 0, '101->500' => 0, '500->∞' => 0);
650
		$donnees['Utilisateurs'] = $classes;
651
		$valeur_max = 0;
652
		foreach ($utilisateurs as $utilisateur) {
1359 aurelien 653
			$id = $utilisateur['courriel_utilisateur'];
416 aurelien 654
			$nbre = $utilisateur['nbre'];
655
 
656
			// Détermination de la classe
657
			$classe = '';
658
			if (0 < $nbre && $nbre <= 10) {
659
				$classe = '00->10';
660
			} else if (10 < $nbre && $nbre <= 50) {
661
				$classe = '11->50';
662
			} else if (50 < $nbre && $nbre <= 100) {
663
				$classe = '51->100';
664
			} else if (100 < $nbre && $nbre <= 500) {
665
				$classe = '101->500';
666
			} else if (500 < $nbre) {
667
				$classe = '500->∞';
668
			}
669
 
670
			// Détermination du type d'utilisateur
671
			if (strstr($id, '@')) {
672
				$type = 'Utilisateurs';
673
				// Incrémentation du tableau de données et récupration de la valeur max
674
				$donnees[$type][$classe]++;
675
				if ($donnees[$type][$classe] > $valeur_max) {
676
					$valeur_max = $donnees[$type][$classe];
677
				}
678
			}
679
		}
680
 
681
		// Post traitement des données
682
		$titre = "Nombre d'observations par utilisateur";
683
		$y1_val_fin = $valeur_max;
684
		$y1_pas = '100';
685
		$valeurs = implode(',', $donnees['Utilisateurs']);
686
		$etiquettes_x1 = implode('|', array_keys($classes));
687
		$etiquettes_x2 = 'Observations';
688
		$etiquettes_y2 = 'Utilisateurs';
689
		$legendes = implode('|', array_keys($donnees));
690
 
691
		// Construire de l'url de l'image
692
		$graph = array('cht' => 'bvg',
693
			'chtt'	=> $titre,
694
			'chs'	=> '400x200',
695
			'chco'	=> '00FF00,FF0000',
696
			'chbh'	=> 'r,0.3,1',
697
			'chd'	=> 't:'.$valeurs,
698
			'chds'	=> "0,$valeur_max",
699
			'chxt'	=> 'x,x,y,y',
700
			'chxl'	=> '0:|'.$etiquettes_x1.'|1:|'.$etiquettes_x2.'|3:|'.$etiquettes_y2.'',
701
			'chxp'	=> '1,100|3,100',
702
			'chxr'	=> "2,0,$y1_val_fin,$y1_pas",
703
			'chm'	=> 'h,C3C3C3,0,0.5,1,-1|N,000000,0,0::1,8,1.0,e');
704
		//echo '<pre>'.print_r($graph,true).'</pre>';
705
		return $graph;
706
	}
707
 
708
	private function getNbreObsParUtilisateurEtTest($param) {
709
		// Récupération des données
1359 aurelien 710
		$requete = 	'SELECT courriel_utilisateur, COUNT(id_observation) AS nbre '.
711
					'FROM cel_obs '.
712
					'GROUP BY courriel_utilisateur ';
1765 raphael 713
		$utilisateurs = Cel::db()->executerRequete($requete);
416 aurelien 714
 
715
		// Création des classes d'utilisateurs
716
		$classes = array('00->10' => 0, '11->50' => 0, '51->100' => 0, '101->500' => 0, '500->∞' => 0);
717
		$donnees['Utilisateurs'] = $classes;
718
		$donnees['Tests'] = $classes;
719
		$valeur_max = 0;
720
		foreach ($utilisateurs as $utilisateur) {
1359 aurelien 721
			$id = $utilisateur['courriel_utilisateur'];
416 aurelien 722
			$nbre = $utilisateur['nbre'];
723
 
724
			// Détermination de la classe
725
			$classe = '';
726
			if (0 < $nbre && $nbre <= 10) {
727
				$classe = '00->10';
728
			} else if (10 < $nbre && $nbre <= 50) {
729
				$classe = '11->50';
730
			} else if (50 < $nbre && $nbre <= 100) {
731
				$classe = '51->100';
732
			} else if (100 < $nbre && $nbre <= 500) {
733
				$classe = '101->500';
734
			} else if (500 < $nbre) {
735
				$classe = '500->∞';
736
			}
737
 
738
			// Détermination du type d'utilisateur
739
			if (strstr($id, '@')) {
740
				$type = 'Utilisateurs';
741
			} else {
742
				$type = 'Tests';
743
			}
744
 
745
			// Incrémentation du tableau de données et récupration de la valeur max
746
			$donnees[$type][$classe]++;
747
			if ($donnees[$type][$classe] > $valeur_max) {
748
				$valeur_max = $donnees[$type][$classe];
749
			}
750
		}
751
 
752
		// Post traitement des données
753
		$titre = "Nombre d'observations par utilisateur et test";
754
		$y1_val_fin = $valeur_max;
755
		$y1_pas = '100';
756
		$valeurs = implode(',', $donnees['Utilisateurs']).'|'.implode(',', $donnees['Tests']);
757
		$etiquettes_x1 = implode('|', array_keys($classes));
758
		$etiquettes_x2 = 'Observations';
759
		$etiquettes_y2 = 'Utilisateurs';
760
		$legendes = implode('|', array_keys($donnees));
761
 
762
		// Construire de l'url de l'image
763
		$graph = array('cht' => 'bvg',
764
			'chtt'	=> $titre,
765
			'chs'	=> '400x200',
766
			'chco'	=> '00FF00,FF0000',
767
			'chbh'	=> 'r,0.3,1',
768
			'chd'	=> 't:'.$valeurs,
769
			'chds'	=> "0,$valeur_max",
770
			'chxt'	=> 'x,x,y,y',
771
			'chxl'	=> '0:|'.$etiquettes_x1.'|1:|'.$etiquettes_x2.'|3:|'.$etiquettes_y2.'',
772
			'chxp'	=> '1,100|3,100',
773
			'chxr'	=> "2,0,$y1_val_fin,$y1_pas",
774
			'chm'	=> 'h,C3C3C3,0,0.5,1,-1|N,000000,0,0::1,8,1.0,e|N,000000,1,0::1,8,1.0,e',
775
			'chdl'	=> $legendes,
776
			'chdlp'	=> 'b');
777
		//echo '<pre>'.print_r($graph,true).'</pre>';
778
		return $graph;
779
	}
780
 
781
	private function getNuagePointsObsParHeureEtJourSemaine($param) {
1765 raphael 782
		$utilisateur = isset($_GET['utilisateur']) ? Cel::db()->quote($_GET['utilisateur']) : false;
562 jpm 783
 
416 aurelien 784
		// Récupération des données de la base
1359 aurelien 785
		$requete = 	'SELECT courriel_utilisateur, DATE_FORMAT(date_creation, "%w-%H") AS periode, (ROUND(LOG10(COUNT(id_observation))) + 1) AS nbre '.
786
					'FROM cel_obs '.
562 jpm 787
					'WHERE date_creation != "0000-00-00 00:00:00" '.
1359 aurelien 788
					'	AND courriel_utilisateur '.($utilisateur ? "= $utilisateur " : 'LIKE "%@%" ').
789
					'GROUP BY periode, courriel_utilisateur ';
1765 raphael 790
		$infos = Cel::db()->executerRequete($requete);
562 jpm 791
 
792
		// Traitement résulat requête
793
		$observations = array();
794
		foreach ($infos as $info) {
795
			if (isset($observations[$info['periode']])) {
796
				$observations[$info['periode']] += $info['nbre'];
797
			} else {
798
				$observations[$info['periode']] = $info['nbre'];
799
			}
800
		}
801
 
416 aurelien 802
		// Postraitement des données
803
		// Jour de la semaine
804
		$donnees['joursSemaine'] = array();
805
		for ($njs = 0; $njs < 7; $njs++) {
806
			$donnees['joursSemaine'][] = strftime('%A', strtotime('2010-05-'.(16+$njs)));
807
		}
808
		// Heure
809
		$donnees['heures'] = array();
810
		for ($h = 0; $h < 24; $h++) {
811
			$heure_fmt = sprintf('%02s', $h);// Format numérique 00
812
			$donnees['heures'][] = strftime('%H', strtotime("0000-00-00 $heure_fmt:00:00"));
813
		}
814
		// Nbre
815
		$valeur_max = max($observations);
816
		for ($njs = 0; $njs < 7; $njs++) {
817
			for ($h = 0; $h < 24; $h++) {
818
				$hfmt = sprintf('%02s', $h);// Format numérique 00
819
				$periode = $njs.'-'.$hfmt;
820
				$donnees['valeurs_x'][] = round(($h + 1) * (100 / 24), 0);
821
				$donnees['valeurs_y'][] = round(($njs + 1) * (100 / 7), 0);
822
				$ps = 0;
823
				if (isset($observations[$periode])) {
824
					$ps = round($observations[$periode] * (100 / $valeur_max), 0);
825
				}
826
				$donnees['valeurs_ps'][] = $ps;
827
			}
828
		}
829
		//echo '<pre>'.print_r($donnees,true).'</pre>';
830
		// Préparation des paramêtres du graph
831
		$titre = "Nombre de création d'observation|par heure et jour de la semaine";
832
		$valeurs = implode(',', $donnees['valeurs_x'])."|".implode(',', $donnees['valeurs_y'])."|".implode(',', $donnees['valeurs_ps']);
833
		$etiquettes_x1 = '|'.implode('|', $donnees['heures']);
834
		$etiquettes_x2 = 'Heures';
835
		$etiquettes_y1 = '|'.implode('|', $donnees['joursSemaine']);
836
		$x_axis_step_size = str_replace(',', '.', (100 / 24));
837
		$y_axis_step_size = str_replace(',', '.', (100 / 7));
838
 
839
		// Construction du tableau des paramêtres du graph
840
		$graph = array('cht' => 's',
841
			'chtt'	=> $titre,
842
			'chs'	=> '400x200',
843
			'chco'	=> '00FF00',
844
			'chd'	=> 't:'.$valeurs,
845
			'chxt'	=> 'x,x,y',
846
			'chxr'	=> "0,-1,23,1|2,-1,6,1",
847
			'chxp'	=> '1,100',
848
			'chxl'	=> '0:|'.$etiquettes_x1.'|1:|'.$etiquettes_x2.'|2:|'.$etiquettes_y1.'',
849
			'chg'	=> "$x_axis_step_size,$y_axis_step_size,1,5");
850
		//echo '<pre>'.print_r($graph,true).'</pre>';
851
		return $graph;
852
	}
853
 
854
	private function getNuagePointsObsAnciennete($param) {
855
		// Récupération des données de la base
1359 aurelien 856
		$requete = 	'SELECT  DISTINCT courriel_utilisateur , '.
416 aurelien 857
					'	MIN(date_creation) AS date_min, MAX(date_creation) AS date_max, '.
1359 aurelien 858
					'	COUNT(id_observation) AS obs_nbre '.
859
					'FROM cel_obs '.
416 aurelien 860
					"WHERE date_creation != '0000-00-00 00:00:00' ".
1359 aurelien 861
					"	AND courriel_utilisateur LIKE '%@%' ".
862
					'GROUP BY courriel_utilisateur '.
416 aurelien 863
					'ORDER BY date_min ASC ';
1765 raphael 864
		$resultats = Cel::db()->executerRequete($requete);
416 aurelien 865
 
866
		// Trie des données
867
		$max_obs = 0;
868
		$max_obs_log = 0;
869
		$max_anciennete = 0;
870
		$donnees = array();
871
		foreach ($resultats as $enrg) {
872
			$tps_deb = strtotime($enrg['date_min']);
873
			$tps_fin = strtotime($enrg['date_max']);
874
 
875
			$donnee = array();
876
			if (($tps_fin - $tps_deb) == 0) {
877
				$donnee['anciennete'] = 1;
878
			} else {
879
				$donnee['anciennete'] = round((($tps_fin - $tps_deb) / 86400), 0);
880
			}
881
			$donnee['obs'] = $enrg['obs_nbre'];
882
			$donnee['obs_log'] = log10($enrg['obs_nbre']);
883
			$donnees[] = $donnee;
884
 
885
			$max_obs_log = ($donnee['obs_log'] > $max_obs_log) ? $donnee['obs_log'] : $max_obs_log;
886
			$max_obs = ($donnee['obs'] > $max_obs) ? $donnee['obs'] : $max_obs;
887
			$max_anciennete = ($donnee['anciennete'] > $max_anciennete) ? $donnee['anciennete'] : $max_anciennete;
888
		}
889
 
890
		// Postraitement des données
891
		foreach ($donnees as $donnee) {
892
			$donnees['valeurs_x'][] = round($donnee['anciennete'] * (100 / $max_anciennete), 0);
893
			$donnees['valeurs_y'][] = round($donnee['obs_log'] * (100 / $max_obs_log), 0);
894
			$donnees['valeurs_ps'][] = 20;
895
		}
896
 
897
		// Échelle log des obs
898
		$donnees['echelle_y1'] = array();
899
		$pas = $max_obs_log / 100 ;
900
		for ($i = 0 ; $i < 5 ; $i++) {
901
			$donnees['echelle_y1'][] = round(pow(10, (($i*20) * $pas)), 0);
902
		}
903
		$donnees['echelle_y1'][] = $max_obs;
904
 
905
		//echo '<pre>'.print_r($donnees['valeurs_x'],true).'</pre>';
906
		// Préparation des paramêtres du graph
907
		$titre = "Répartition des utilisateurs en fonction|du nombre d'observations et de l'ancienneté";
908
		$valeurs = implode(',', $donnees['valeurs_x'])."|".implode(',', $donnees['valeurs_y'])."|".implode(',', $donnees['valeurs_ps']);
909
		$etiquettes_x2 = 'Ancienneté en jours';
910
		$etiquettes_y1 = implode('|', $donnees['echelle_y1']);
911
		$etiquettes_y2 = 'Observations';
912
		$x_axis_step_size = $max_anciennete;
913
 
914
		// Construction du tableau des paramêtres du graph
915
		$graph = array('cht' => 's',
916
			'chtt'	=> $titre,
917
			'chs'	=> '400x200',
918
			'chco'	=> '0000FF',
919
			'chxt'	=> 'x,x,y,y',
920
			'chd'	=> 't:'.$valeurs,
921
			'chxr'	=> "0,0,$x_axis_step_size|2,0,$max_obs",//|2,0,$y_axis_step_size,$pas
922
			'chxp'	=> '1,100|3,100',
923
			'chm'	=> 'h,C3C3C3,0,-0.2,0.2,-1',
924
			'chxl'	=> '1:|'.$etiquettes_x2.'|2:|'.$etiquettes_y1.'|3:|'.$etiquettes_y2.'');//
925
		//echo '<pre>'.print_r($graph,true).'</pre>';
926
		return $graph;
927
	}
928
 
929
	private function executerRequeteEvol($table, $champ, $format_date = '%Y%m', $where = null, $champ_date = 'date_creation', $order_by = null, $limit = null) {
1765 raphael 930
		$utilisateur = isset($_GET['utilisateur']) ? Cel::db()->quote($_GET['utilisateur']) : false;
562 jpm 931
 
416 aurelien 932
		$requete = 	"SELECT DATE_FORMAT($champ_date, '$format_date') AS periode, COUNT($champ) AS nbre ".
933
					"FROM $table ".
934
					"WHERE $champ_date != '0000-00-00 00:00:00' ".
1359 aurelien 935
					(($utilisateur != false) ? " AND courriel_utilisateur = $utilisateur " : '').
416 aurelien 936
					((is_null($where)) ? '' : " AND $where ").
937
					'GROUP BY periode '.
938
					((is_null($order_by)) ? '' : "ORDER BY $order_by ");
939
					((is_null($limit)) ? '' : "LIMIT $limit ");
1359 aurelien 940
 
1765 raphael 941
		$evolution = Cel::db()->executerRequete($requete);
416 aurelien 942
 
943
		// Traitement du tableau
944
		$donnees_traitees = array();
1359 aurelien 945
		foreach ($evolution as $info) {
946
			$donnees_traitees[$info['periode']] = $info['nbre'];
416 aurelien 947
		}
1359 aurelien 948
 
416 aurelien 949
		return $donnees_traitees;
950
	}
951
 
952
	private function executerRequeteNombre($table, $champ, $where = null) {
563 jpm 953
		$utilisateur = null;
954
		if (isset($_GET['utilisateur'])) {
1765 raphael 955
			$utilisateur = Cel::db()->quote($_GET['utilisateur']);
566 jpm 956
			$where = isset($where) ? $where.' AND ' : '';
1359 aurelien 957
			$where .= "courriel_utilisateur = $utilisateur ";
563 jpm 958
		}
959
 
416 aurelien 960
		$requete = 	"SELECT COUNT($champ) AS nbre ".
961
					"FROM $table ".
563 jpm 962
					((isset($where)) ? "WHERE $where " : '');
1359 aurelien 963
 
1765 raphael 964
		$nbre = Cel::db()->executerRequete($requete, 'Column');
416 aurelien 965
		return $nbre;
966
	}
1359 aurelien 967
}
968
?>