Subversion Repositories eFlore/Applications.cel

Rev

Rev 3002 | Details | Compare with Previous | Last modification | View Log | RSS feed

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