Subversion Repositories eFlore/Applications.cel

Rev

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

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