Subversion Repositories Applications.annuaire

Rev

Rev 120 | Rev 247 | 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
 
202
	public function ajouterEvenementStatistique($id_annuaire, $id_utilisateur, $type) {
203
 
204
		$this->chargerModele('StatistiqueModele');
205
		$this->StatistiqueModele->ajouterEvenementStatistique($id_annuaire, $id_utilisateur, $type);
206
 
207
	}
208
 
209
	public function obtenirDerniersEvenementsStatistique($id_annuaire, $type) {
210
 
211
		$this->chargerModele('StatistiqueModele');
212
		return $this->StatistiqueModele->obtenirDerniersEvenementsStatistique($id_annuaire, $type);
213
 
214
	}
215
 
216
	private function dessinerGraph($graph) {
217
		return $this->statistiques->dessinerGraph($graph);
218
	}
219
 
220
	private function convertirPourLegende($texte) {
61 aurelien 221
 
231 aurelien 222
		if(trim($texte) == '') {
223
			$texte = '' ;
224
		}
61 aurelien 225
 
231 aurelien 226
		$texte = str_replace(
227
			array(
228
				'à', 'â', 'ä', 'á', 'ã', 'å',
229
				'î', 'ï', 'ì', 'í',
230
				'ô', 'ö', 'ò', 'ó', 'õ', 'ø',
231
				'ù', 'û', 'ü', 'ú',
232
				'é', 'è', 'ê', 'ë',
233
				'ç', 'ÿ', 'ñ',
234
				'À', 'Â', 'Ä', 'Á', 'Ã', 'Å',
235
				'Î', 'Ï', 'Ì', 'Í',
236
				'Ô', 'Ö', 'Ò', 'Ó', 'Õ', 'Ø',
237
				'Ù', 'Û', 'Ü', 'Ú',
238
				'É', 'È', 'Ê', 'Ë',
239
				'Ç', 'Ÿ', 'Ñ',
240
			),
241
			array(
242
				'a', 'a', 'a', 'a', 'a', 'a',
243
				'i', 'i', 'i', 'i',
244
				'o', 'o', 'o', 'o', 'o', 'o',
245
				'u', 'u', 'u', 'u',
246
				'e', 'e', 'e', 'e',
247
				'c', 'y', 'n',
248
				'A', 'A', 'A', 'A', 'A', 'A',
249
				'I', 'I', 'I', 'I',
250
				'O', 'O', 'O', 'O', 'O', 'O',
251
				'U', 'U', 'U', 'U',
252
				'E', 'E', 'E', 'E',
253
				'C', 'Y', 'N',
254
			),$texte);
255
 
256
		return $texte;
61 aurelien 257
	}
258
}
259
?>