Subversion Repositories Applications.annuaire

Rev

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