Subversion Repositories Applications.annuaire

Rev

Rev 437 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
61 aurelien 1
<?php
2
/**
3
* PHP Version 5
4
*
5
* @category  PHP
6
* @package   annuaire
7
* @author    aurelien <aurelien@tela-botanica.org>
8
* @copyright 2010 Tela-Botanica
9
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
* @version   SVN: <svn_id>
11
* @link      /doc/annuaire/
12
*/
13
 
231 aurelien 14
class StatistiqueControleur extends AppControleur {
61 aurelien 15
 
16
	private $statistiques = null;
17
 
429 aurelien 18
	private $champ_pays = '12';
19
	private $champ_rapport_activite_bota = '102';
20
	private $champ_experience_bota = '4';
440 jpm 21
	private $tab_mois = array('Jan','Fev','Mar','Avr','Mai','Juin','Juil','Aout','Sep','Oct','Nov','Dec');
22
 
231 aurelien 23
	public function StatistiqueControleur() {
24
		$this->__construct();
61 aurelien 25
		$this->statistiques = Composant::fabrique('statistiques', array());
26
	}
231 aurelien 27
 
28
	public function obtenirStatistiquesInscritsParContinents($id_annuaire) {
29
		$cartographe = new CartoControleur();
30
		$annuaire_controleur = new AnnuaireControleur();
31
 
440 jpm 32
		$continents = array(
33
			'Afrique (%1.2f%%)' => 'pays_afrique',
34
			'Amerique du nord (%1.2f%%)' => 'pays_nord_amerique',
35
			'Asie (%1.2f%%)' => 'pays_asie',
36
			'Europe (%1.2f%%)' => 'pays_europe',
37
			'Oceanie (%1.2f%%)' => 'pays_oceanie',
38
			'Amerique du sud (%1.2f%%)' => 'pays_sud_amerique',
39
			'Moyen Orient (%1.2f%%)' => 'pays_moyen_orient');
294 aurelien 40
 
440 jpm 41
		// pour chacun des continents, on fait la somme des membres de sa zone
42
		foreach($continents as $id_continent => $continent) {
43
			$zones_continent_ids = $cartographe->chargerInformationsPaysDuContinentsCsv($continent);
44
			$zones_continent_ids = array_map(array($this,'miniQuote'), array_keys($zones_continent_ids));
45
			$nb_inscrits[$id_continent] = array_sum($annuaire_controleur->chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $zones_continent_ids));
46
		}
47
 
48
		$graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_CAMEMBERT,$nb_inscrits,'', array(650, 500));
49
 
50
		return $this->dessinerGraph($graph);
61 aurelien 51
	}
231 aurelien 52
 
53
	public function obtenirStatistiquesInscritsEurope($id_annuaire) {
54
		$cartographe = new CartoControleur();
55
		$annuaire_controleur = new AnnuaireControleur();
56
		$cartographe = new CartoControleur();
57
 
58
		$ids_zones_europe = $cartographe->chargerInformationsPaysDuContinentsCsv('pays_europe');
440 jpm 59
 
60
		$codes_zones_europe = array_map(array($this, 'miniQuote'), array_keys($ids_zones_europe));
294 aurelien 61
 
231 aurelien 62
		$titre_zone = $this->convertirPourLegende($zone[2]);
440 jpm 63
		$nb_inscrits_par_code = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $codes_zones_europe);
231 aurelien 64
 
440 jpm 65
		$nb_inscrits_par_legende = array();
66
 
67
		$inscrits_france = $nb_inscrits_par_code['fr'];
68
 
69
		unset($nb_inscrits_par_code['fr']);
70
		$somme_autres_pays = 0;
71
 
72
		foreach ($nb_inscrits_par_code as $code_pays => $inscrits_pays) {
73
			$label_pays = $this->convertirPourLegende($ids_zones_europe[$code_pays][2].' (%1.2f%%)');
74
			$nb_inscrits_par_legende[$label_pays] = $inscrits_pays;
75
			$somme_autres_pays += $inscrits_pays;
76
		}
77
 
78
		$tableau_france_autres = array('France (%1.2f%%)' => $inscrits_france, 'Autres (%1.2f%%)' => $somme_autres_pays);
79
 
80
		$graph_france = $this->statistiques->genererGraphique(Statistiques::GRAPH_CAMEMBERT, $tableau_france_autres, '', array(320, 200));
81
		$graph_autres = $this->statistiques->genererGraphique(Statistiques::GRAPH_CAMEMBERT, $nb_inscrits_par_legende, '', array(950, 900));
82
		$graph = $this->statistiques->combinerGraphiques($graph_france, $graph_autres, array(920, 1100));
231 aurelien 83
 
84
		return $this->dessinerGraph($graph);
85
	}
61 aurelien 86
 
231 aurelien 87
	public function obtenirStatistiquesParPays($id_annuaire) {
440 jpm 88
		$controleur = new AnnuaireControleur();
61 aurelien 89
 
440 jpm 90
		//$controleur = new AnnuaireControleur();
91
		$modele_meta = new MetadonneeModele();
92
		$modele_onto = new OntologieModele();
93
		$id_champ = 12;
94
		$valeurs = $modele_meta->obtenirNombreValeurMetadonnee($id_champ);
95
		$id_onto = $modele_meta->obtenirOntologieLieeAChampParId($id_champ);
96
		$legendes = $modele_onto->chargerListeOntologie($id_onto);
61 aurelien 97
 
98
		$valeurs_a_stat_code = array();
99
		$valeurs_a_stat_legende = array();
100
 
440 jpm 101
		foreach ($valeurs as $valeur) {
61 aurelien 102
			$valeurs_a_stat_code[$valeur['amv_valeur']] = $valeur['nb'];
103
		}
104
 
440 jpm 105
		foreach ($legendes as $legende) {
106
			$legende_nom = $legende['amo_nom'];
107
			$legende_code = $legende['amo_id_ontologie'];
61 aurelien 108
 
440 jpm 109
			if (isset($valeurs_a_stat_code[$legende_code])) {
61 aurelien 110
				$valeurs_a_stat_legende[$legende_nom] = $valeurs_a_stat_code[$legende_code];
440 jpm 111
			}
112
		}
61 aurelien 113
 
231 aurelien 114
		$graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_CAMEMBERT,$valeurs_a_stat_legende);
440 jpm 115
		return $this->dessinerGraph($graph);
61 aurelien 116
	}
117
 
231 aurelien 118
	public function obtenirStatistiquesParCritere($id_annuaire, $code_champ, $titre = '') {
440 jpm 119
		$modele_meta = new MetadonneeModele();
120
		$modele_onto = new OntologieModele();
121
		$id_champ = $modele_meta->renvoyerIdChampMetadonneeParAbreviation($id_annuaire, $code_champ);
122
		$valeurs = $modele_meta->obtenirNombreValeurMetadonnee($id_champ);
123
		$id_onto = $modele_meta->obtenirOntologieLieeAChampParId($id_champ);
124
		$legendes = $modele_onto->chargerListeOntologie($id_onto);
61 aurelien 125
 
126
		$valeurs_a_stat_code = array();
127
		$valeurs_a_stat_legende = array();
440 jpm 128
 
231 aurelien 129
		$titre = $this->convertirPourLegende($titre);
61 aurelien 130
 
440 jpm 131
		foreach ($valeurs as $valeur) {
61 aurelien 132
			$valeurs_a_stat_code[$valeur['amv_valeur']] = $valeur['nb'];
133
		}
440 jpm 134
 
135
		foreach ($legendes as $legende) {
136
			$legende_nom = $this->convertirPourLegende($legende['amo_nom']);
137
			$legende_code = $legende['amo_id_ontologie'];
138
 
139
			if (isset($valeurs_a_stat_code[$legende_code])) {
61 aurelien 140
				$valeurs_a_stat_legende[$legende_nom] = $valeurs_a_stat_code[$legende_code];
440 jpm 141
			}
142
		}
143
 
231 aurelien 144
		$graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_CAMEMBERT,$valeurs_a_stat_legende, $titre, array(650, 400));
145
		return $this->dessinerGraph($graph);
61 aurelien 146
	}
429 aurelien 147
 
404 aurelien 148
	public function obtenirStatistiquesPourAnnee($id_annuaire, $annee = null) {
149
		$annee = ($annee == null) ? date("Y") : $annee;
150
		$annuaire_modele = new AnnuaireModele();
151
 
152
		$valeurs_a_stat_code = array();
153
		$valeurs_a_stat_legende = array();
154
 
155
		$annee_debut = $annee;
156
		$mois = 1;
157
		$annee = $annee;
158
		$tps_debut = mktime(0,0,0,1,1,$annee);
159
		$tps_courant = $tps_debut;
160
 
161
		$annee_courante = date("Y");
440 jpm 162
		if ($annee_fin == $annee_courante) {
404 aurelien 163
			$tps_fin = time();// jour courant
164
		} else {
165
			$tps_fin = mktime(0,0,0,1,1,$annee+1);
166
		}
167
 
168
		//Requete par mois
169
		$i = 1;
440 jpm 170
		while ($tps_courant <= $tps_fin) {
171
			if ($mois/12 > 1) {
404 aurelien 172
				$mois = 1;
173
				$annee = $annee+1;
174
			}
175
 
176
			$tps_mois_suivant = mktime(0,0,0,$mois+1,1,$annee);
177
			$nb_inscrits_dans_intervalle = $annuaire_modele->obtenirNombreInscriptionsDansIntervalleDate($id_annuaire, $tps_debut, $tps_courant);
440 jpm 178
			$valeurs_a_stat_legende[$this->tab_mois[$mois-1].' '.$annee] = $nb_inscrits_dans_intervalle;
404 aurelien 179
 
180
			$tps_courant = $tps_mois_suivant;
181
			$mois++;
182
			$i++;
183
		}
184
 
185
		$nom_axeX = 'Mois depuis le 1er janvier '.$annee;
186
 
187
		$graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_COURBE,$valeurs_a_stat_legende, '', array(500,490), $nom_axeX, '');
188
		return $this->dessinerGraph($graph);
189
	}
61 aurelien 190
 
231 aurelien 191
	public function obtenirStatistiquesParAnnees($id_annuaire, $annee_fin = '') {
440 jpm 192
		$annuaire_modele = new AnnuaireModele();
61 aurelien 193
 
194
		$valeurs_a_stat_code = array();
195
		$valeurs_a_stat_legende = array();
440 jpm 196
 
231 aurelien 197
		$annee_debut = 2002;
198
		$mois = 4;
199
		$annee = 2002;
200
		$tps_debut = mktime(0,0,0,$mois,1,$annee);
201
		$tps_courant = $tps_debut;
440 jpm 202
 
203
		if ($annee_fin != '') {
231 aurelien 204
			$tps_fin = mktime(0,0,0,1,1,$annee_fin);
205
		} else {
206
			$tps_fin = time();// jour courant
207
		}
61 aurelien 208
 
231 aurelien 209
		//Requete par mois
210
		$i = 1;
440 jpm 211
		while ($tps_courant <= $tps_fin) {
231 aurelien 212
			if (($mois)/12 > 1) {
213
				$mois = 1;
214
				$annee = $annee+1;
215
			}
440 jpm 216
 
231 aurelien 217
			$tps_mois_suivant = mktime(0,0,0,$mois+1,1,$annee);
440 jpm 218
 
231 aurelien 219
			$nb_inscrits_dans_intervalle = $annuaire_modele->obtenirNombreInscriptionsDansIntervalleDate($id_annuaire, $tps_debut, $tps_courant);
440 jpm 220
 
221
			$valeurs_a_stat_legende[$this->tab_mois[$mois-1].' '.$annee] = $nb_inscrits_dans_intervalle;
222
 
231 aurelien 223
			$tps_courant = $tps_mois_suivant;
224
			$mois++;
225
			$i++;
61 aurelien 226
		}
227
 
231 aurelien 228
		$nom_axeX = 'Mois depuis le 1er avril 2002';
440 jpm 229
 
231 aurelien 230
		$graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_COURBE,$valeurs_a_stat_legende, '', array(500,490), $nom_axeX, '');
440 jpm 231
		return $this->dessinerGraph($graph);
231 aurelien 232
	}
233
 
247 aurelien 234
	public function obtenirStatistiquesModificationsProfil($id_annuaire, $annee_fin = '') {
440 jpm 235
		$modele = new StatistiqueModele();
247 aurelien 236
 
237
		$valeurs_a_stat_code = array();
238
		$valeurs_a_stat_legende = array();
440 jpm 239
 
247 aurelien 240
		$annee_debut = 2010;
294 aurelien 241
		$mois = 1;
247 aurelien 242
		$annee = 2010;
243
		$tps_debut = mktime(0,0,0,$mois,1,$annee);
244
		$tps_courant = $tps_debut;
440 jpm 245
 
247 aurelien 246
		if($annee_fin != '') {
247
			$tps_fin = mktime(0,0,0,1,1,$annee_fin);
248
		} else {
249
			$today = date_parse(date('Y-m-d H:i:s'));
440 jpm 250
 
247 aurelien 251
			$annee_fin_today = $today['year'];
252
			$mois_fin_today = $today['month'];
440 jpm 253
 
247 aurelien 254
			if($annee_debut == $annee_fin_today) {
255
				$tps_fin = mktime(0,0,0,$mois_fin_today+1,1,$annee_fin_today);
256
			} else {
257
				$tps_fin = time();// jour courant
258
			}
259
		}
440 jpm 260
 
247 aurelien 261
		//Requete par mois
262
		$i = 1;
440 jpm 263
		while ($tps_courant <= $tps_fin) {
247 aurelien 264
			if (($mois)/12 > 1) {
265
				$mois = 1;
266
				$annee = $annee+1;
267
			}
440 jpm 268
 
247 aurelien 269
			$tps_mois_suivant = mktime(0,0,0,$mois+1,1,$annee);
440 jpm 270
 
247 aurelien 271
			$nb_modif_dans_intervalle = $modele->obtenirEvenementsDansIntervalle($id_annuaire,'modification', $tps_debut, $tps_courant);
440 jpm 272
 
273
			$valeurs_a_stat_legende[$this->tab_mois[$mois-1].' '.$annee] = $nb_modif_dans_intervalle;
274
 
247 aurelien 275
			$tps_courant = $tps_mois_suivant;
276
			$mois++;
277
			$i++;
278
		}
279
 
280
		$nom_axeX = 'Mois depuis le 1er juillet 2010';
440 jpm 281
 
247 aurelien 282
		$graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_COURBE,$valeurs_a_stat_legende, '', array(500,490), $nom_axeX, '');
440 jpm 283
		return $this->dessinerGraph($graph);
247 aurelien 284
	}
285
 
231 aurelien 286
	public function ajouterEvenementStatistique($id_annuaire, $id_utilisateur, $type) {
287
		$this->chargerModele('StatistiqueModele');
288
		$this->StatistiqueModele->ajouterEvenementStatistique($id_annuaire, $id_utilisateur, $type);
289
 
290
	}
291
 
292
	public function obtenirDerniersEvenementsStatistique($id_annuaire, $type) {
293
		$this->chargerModele('StatistiqueModele');
294
		return $this->StatistiqueModele->obtenirDerniersEvenementsStatistique($id_annuaire, $type);
295
 
296
	}
297
 
298
	private function dessinerGraph($graph) {
299
		return $this->statistiques->dessinerGraph($graph);
300
	}
301
 
440 jpm 302
	private function convertirPourLegende($texte) {
303
		if (trim($texte) == '') {
231 aurelien 304
			$texte = '' ;
305
		}
61 aurelien 306
 
231 aurelien 307
		$texte = str_replace(
308
			array(
309
				'à', 'â', 'ä', 'á', 'ã', 'å',
310
				'î', 'ï', 'ì', 'í',
311
				'ô', 'ö', 'ò', 'ó', 'õ', 'ø',
312
				'ù', 'û', 'ü', 'ú',
313
				'é', 'è', 'ê', 'ë',
314
				'ç', 'ÿ', 'ñ',
315
				'À', 'Â', 'Ä', 'Á', 'Ã', 'Å',
316
				'Î', 'Ï', 'Ì', 'Í',
317
				'Ô', 'Ö', 'Ò', 'Ó', 'Õ', 'Ø',
318
				'Ù', 'Û', 'Ü', 'Ú',
319
				'É', 'È', 'Ê', 'Ë',
320
				'Ç', 'Ÿ', 'Ñ',
321
			),
322
			array(
323
				'a', 'a', 'a', 'a', 'a', 'a',
324
				'i', 'i', 'i', 'i',
325
				'o', 'o', 'o', 'o', 'o', 'o',
326
				'u', 'u', 'u', 'u',
327
				'e', 'e', 'e', 'e',
328
				'c', 'y', 'n',
329
				'A', 'A', 'A', 'A', 'A', 'A',
330
				'I', 'I', 'I', 'I',
331
				'O', 'O', 'O', 'O', 'O', 'O',
332
				'U', 'U', 'U', 'U',
333
				'E', 'E', 'E', 'E',
334
				'C', 'Y', 'N',
335
			),$texte);
336
 
440 jpm 337
		return $texte;
61 aurelien 338
	}
294 aurelien 339
 
340
	private function miniQuote($chaine) {
341
		return "'".$chaine."'";
342
	}
61 aurelien 343
}
294 aurelien 344
?>