Subversion Repositories eFlore/Applications.cel

Rev

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

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