Subversion Repositories eFlore/Applications.cel

Rev

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

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