Subversion Repositories Applications.annuaire

Rev

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