Subversion Repositories Applications.annuaire

Rev

Rev 442 | 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';
442 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
 
442 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
 
442 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');
442 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]);
442 jpm 63
		$nb_inscrits_par_code = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $codes_zones_europe);
231 aurelien 64
 
442 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(930, 900));
82
		$graph = $this->statistiques->combinerGraphiques($graph_france, $graph_autres, array(940, 1110));
231 aurelien 83
 
84
		return $this->dessinerGraph($graph);
85
	}
61 aurelien 86
 
231 aurelien 87
	public function obtenirStatistiquesParPays($id_annuaire) {
442 jpm 88
		$controleur = new AnnuaireControleur();
61 aurelien 89
 
442 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
 
442 jpm 101
		foreach ($valeurs as $valeur) {
61 aurelien 102
			$valeurs_a_stat_code[$valeur['amv_valeur']] = $valeur['nb'];
103
		}
104
 
442 jpm 105
		foreach ($legendes as $legende) {
106
			$legende_nom = $legende['amo_nom'];
107
			$legende_code = $legende['amo_id_ontologie'];
61 aurelien 108
 
442 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];
442 jpm 111
			}
112
		}
61 aurelien 113
 
231 aurelien 114
		$graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_CAMEMBERT,$valeurs_a_stat_legende);
442 jpm 115
		return $this->dessinerGraph($graph);
61 aurelien 116
	}
117
 
231 aurelien 118
	public function obtenirStatistiquesParCritere($id_annuaire, $code_champ, $titre = '') {
442 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();
442 jpm 128
 
231 aurelien 129
		$titre = $this->convertirPourLegende($titre);
61 aurelien 130
 
442 jpm 131
		foreach ($valeurs as $valeur) {
61 aurelien 132
			$valeurs_a_stat_code[$valeur['amv_valeur']] = $valeur['nb'];
133
		}
442 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];
442 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");
442 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;
442 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);
442 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 = '') {
442 jpm 192
		$annuaire_modele = new AnnuaireModele();
61 aurelien 193
 
194
		$valeurs_a_stat_code = array();
195
		$valeurs_a_stat_legende = array();
442 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;
442 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;
442 jpm 211
		while ($tps_courant <= $tps_fin) {
231 aurelien 212
			if (($mois)/12 > 1) {
213
				$mois = 1;
214
				$annee = $annee+1;
215
			}
442 jpm 216
 
231 aurelien 217
			$tps_mois_suivant = mktime(0,0,0,$mois+1,1,$annee);
442 jpm 218
 
231 aurelien 219
			$nb_inscrits_dans_intervalle = $annuaire_modele->obtenirNombreInscriptionsDansIntervalleDate($id_annuaire, $tps_debut, $tps_courant);
442 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';
442 jpm 229
 
231 aurelien 230
		$graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_COURBE,$valeurs_a_stat_legende, '', array(500,490), $nom_axeX, '');
442 jpm 231
		return $this->dessinerGraph($graph);
231 aurelien 232
	}
233
 
247 aurelien 234
	public function obtenirStatistiquesModificationsProfil($id_annuaire, $annee_fin = '') {
442 jpm 235
		$modele = new StatistiqueModele();
247 aurelien 236
 
237
		$valeurs_a_stat_code = array();
238
		$valeurs_a_stat_legende = array();
442 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;
442 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'));
442 jpm 250
 
247 aurelien 251
			$annee_fin_today = $today['year'];
252
			$mois_fin_today = $today['month'];
442 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
		}
442 jpm 260
 
247 aurelien 261
		//Requete par mois
262
		$i = 1;
442 jpm 263
		while ($tps_courant <= $tps_fin) {
247 aurelien 264
			if (($mois)/12 > 1) {
265
				$mois = 1;
266
				$annee = $annee+1;
267
			}
442 jpm 268
 
247 aurelien 269
			$tps_mois_suivant = mktime(0,0,0,$mois+1,1,$annee);
442 jpm 270
 
247 aurelien 271
			$nb_modif_dans_intervalle = $modele->obtenirEvenementsDansIntervalle($id_annuaire,'modification', $tps_debut, $tps_courant);
442 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';
442 jpm 281
 
247 aurelien 282
		$graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_COURBE,$valeurs_a_stat_legende, '', array(500,490), $nom_axeX, '');
442 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
 
442 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
 
442 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
?>