Subversion Repositories eFlore/Applications.cel

Rev

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

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