Subversion Repositories Applications.annuaire

Rev

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