Subversion Repositories Applications.annuaire

Rev

Rev 31 | Rev 56 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 31 Rev 44
Line 14... Line 14...
14
 */
14
 */
15
class CartoControleur extends Controleur {
15
class CartoControleur extends Controleur {
Line 16... Line 16...
16
 
16
 
17
 
17
 
-
 
18
	// identifiant de la france pour l'accès direct
-
 
19
    private $id_france = 'fr';
-
 
20
 
Line 18... Line 21...
18
	// identifiant de la france pour l'accès direct
21
	// nom du fond de carte en cours
19
    private $id_france = 2;
22
    private $nom_fond = '';
Line 20... Line 23...
20
 
23
 
Line 28... Line 31...
28
        return $this->cartographier(1);
31
        return $this->cartographier(1);
29
    }
32
    }
Line 30... Line 33...
30
 
33
 
31
    /**
34
    /**
-
 
35
     * Cartographier un annuaire.
-
 
36
     * @param int $id_annuaire l'identitifiant de l'annuaire à cartographier
-
 
37
     * @param int $continent l'identitifiant du continent sur lequel on se trouve
32
     * Cartographier un annuaire.
38
     * @param string $pays l'identitifiant du pays sur lequel on se trouve (normalement seulement la france si présent)
33
     * @return string la vue correspondante
39
     * @return string la vue correspondante
34
     */
40
     */
35
    public function cartographier($id_annuaire, $continent= null , $pays = null, $departement = null) {
41
    public function cartographier($id_annuaire, $continent= null , $pays = null) {
36
        // Initialisation de variable
42
        // Initialisation de variable
Line -... Line 43...
-
 
43
        $donnees = array();
37
        $donnees = array();
44
 
-
 
45
		// la présence d'un pays (non) et d'un continent (ou non) détermine le niveau de carte à afficher
-
 
46
        $niveau = $this->calculerNiveau($continent, $pays);
38
 
47
 
-
 
48
        // suivant le niveau, continent et pays, on renvoie un template html différent
-
 
49
        $fond = $this->renvoyerPrefixePourNiveau($niveau, $continent, $pays);
-
 
50
 
-
 
51
		$carte = '';
-
 
52
 
-
 
53
		// chaque continent possède un fond de carte différent
-
 
54
		if($niveau == 1) {
Line 39... Line 55...
39
        $niveau = $this->calculerNiveau($continent, $pays);
55
        	$carte = $this->renvoyerSuffixePourContinent($niveau, $continent, $pays);
40
        $fond = $this->renvoyerTemplatePourNiveau($niveau);
56
		}
41
 
57
 
42
        // Création de la carte
58
        // Création de la carte
43
        $options = array(
59
        $options = array(
44
            'carte_nom' => $fond,
60
            'carte_nom' => $fond.$carte,
45
            'formule' => Cartographie::FORMULE_PROPORTIONNEL,
61
            'formule' => Cartographie::FORMULE_PROPORTIONNEL,
46
            'couleur_claire' => Config::get('carte_couleur_claire'),
62
            'couleur_claire' => Config::get('carte_couleur_claire'),
47
            'couleur_foncee' => Config::get('carte_couleur_foncee'),
63
            'couleur_foncee' => Config::get('carte_couleur_foncee'),
48
            'fond_fichier' => Config::get('carte_base_nom_'.$fond),
64
            'fond_fichier' => Config::get('carte_base_nom_'.$fond).$carte,
49
            'fond_dossier' => Application::getChemin().Config::get('carte_fonds_chemin'),
65
            'fond_dossier' => Application::getChemin().Config::get('carte_fonds_chemin'),
50
            'stock_dossier' => Config::get('carte_stockage_chemin'),
66
            'stock_dossier' => Config::get('carte_stockage_chemin'),
-
 
67
            'stock_url' => Config::get('carte_stockage_url'),
-
 
68
            'debug' => Config::get('carte_mode_debug'));
-
 
69
        $cartographie = Composant::fabrique('cartographie', $options);
51
            'stock_url' => Config::get('carte_stockage_url'),
70
 
52
            'debug' => Config::get('carte_mode_debug'));
71
        $this->nom_fond = Config::get('carte_base_nom_'.$fond).$carte;
53
        $cartographie = Composant::fabrique('cartographie', $options);
72
 
54
        // Construction des données nécessaires à la cartographie
73
        // Construction des données nécessaires à la cartographie
55
        $zones = $cartographie->getCarteZones();
74
        $zones = $cartographie->getCarteZones();
Line 56... Line 75...
56
        $this->chargerZonesNbre($id_annuaire, $zones, $continent, $pays, $niveau);
75
        $this->chargerZonesNbre($id_annuaire,$zones, $niveau);
57
        $this->chargerZonesUrls($id_annuaire, $zones, $continent, $pays, $niveau);
76
        $this->chargerZonesUrls($id_annuaire, $zones, $continent, $pays, $niveau);
Line 58... Line 77...
58
        $cartographie->setCarteZones($zones);
77
        $cartographie->setCarteZones($zones);
59
 
78
 
60
        $cartographie->creerCarte();
79
        $cartographie->creerCarte();
Line -... Line 80...
-
 
80
        $donnees['map'] = $cartographie->getImageMap();
-
 
81
 
-
 
82
        $resultat = $this->getVue('cartes/'.$fond, $donnees);
-
 
83
        return $resultat;
-
 
84
    }
-
 
85
 
61
        $donnees['map'] = $cartographie->getImageMap();
86
	/**
Line 62... Line 87...
62
 
87
	 * Charge le nombre d'inscrit par zone pour un annuaire donné
-
 
88
	 * @param int $id_annuaire l'identifiant de l'annuaire
63
        $resultat = $this->getVue('cartes/'.$fond, $donnees);
89
	 * @param array $zones les zones à cartographier (attention, passage par référence, donc les zones sont modifiées)
Line 64... Line 90...
64
        return $resultat;
90
	 * @param int $niveau le niveau de la carto (monde, continent, ou pays)
Line -... Line 91...
-
 
91
	 */
65
    }
92
    private function chargerZonesNbre($id_annuaire, &$zones, $niveau = 0) {
Line 66... Line 93...
66
 
93
 
67
    private function chargerZonesNbre($id_annuaire, &$zones, $niveau = 0, $zone_id = 0) {
94
        $metaModele = $this->getModele('AnnuaireModele');
68
 
95
        // on charge les inscrits pour le niveau donné
-
 
96
        $zones_infos = $this->chargerNombreInscritsParNiveauGeographique($id_annuaire, $niveau);
69
        $metaModele = $this->getModele('AnnuaireModele');
97
 
70
        $zones_infos = $this->chargerNombreInscritsParNiveauGeographique($id_annuaire, $niveau, $zone_id);
98
        foreach ($zones as $id => &$infos) {
71
 
99
 
72
        foreach ($zones as $id => &$infos) {
100
			// si l'on a des données pour la zone, on renseigne le nombre d'inscrits
Line -... Line 101...
-
 
101
            if (isset($zones_infos[$id])) {
-
 
102
 
-
 
103
                $nbre = $zones_infos[$id];
-
 
104
                $infos['info_nombre'] = $nbre;
-
 
105
            } else {
-
 
106
            	// sinon on le met à 0
-
 
107
                $infos['info_nombre'] = 0;
-
 
108
            }
73
 
109
        }
Line 74... Line 110...
74
            if (isset($zones_infos[$id])) {
110
    }
75
 
111
 
Line 76... Line 112...
76
                $nbre = $zones_infos[$id];
112
	/**
77
                $infos['info_nombre'] = $nbre;
113
	 * Charge les des zones pour un annuaire donné
Line 78... Line 114...
78
            } else {
114
	 * @param int $id_annuaire l'identifiant de l'annuaire
79
                $infos['info_nombre'] = 0;
115
	 * @param array $zones les zones à cartographier (attention, passage par référence, donc les zones sont modifiées)
80
            }
116
	 * @param int $continent l'identitifiant du continent sur lequel on se trouve
81
        }
117
     * @param string $pays l'identitifiant du pays sur lequel on se trouve (normalement seulement la france si présent)
82
    }
-
 
83
 
-
 
84
    private function chargerZonesUrls($id_annuaire, &$zones, $continent = null, $pays = null, $niveau = 0) {
-
 
85
 
-
 
86
    	$url = new URL(Config::get('url_base'));
-
 
87
    	$url->setVariableRequete('id_annuaire', $id_annuaire);
-
 
88
 
-
 
89
        $url->setVariableRequete('m', 'annuaire_recherche_inscrit_carto');
-
 
90
        foreach ($zones as $id => &$infos) {
-
 
91
 
-
 
92
        	switch ($niveau) {
-
 
93
			// niveau 0 de la carte : on affiche tous les continents
118
	 * @param int $niveau le niveau de la carto (monde, continent, ou pays)
94
			// l'url va pointer un continent en particulier
-
 
95
			case 0:
-
 
96
				$url->setVariableRequete('m', 'annuaire_afficher_carte');
-
 
97
				$url->setVariableRequete('continent', $id);
-
 
98
			break;
119
	 */
99
 
-
 
100
			// niveau 1, on est sur un continent en particulier : on affiche le détail du continent demandé
120
    private function chargerZonesUrls($id_annuaire, &$zones, $continent = null, $pays = null, $niveau = 0) {
Line -... Line 121...
-
 
121
 
-
 
122
    	$url = new URL(Config::get('url_base'));
-
 
123
    	$url->setVariableRequete('id_annuaire', $id_annuaire);
-
 
124
 
-
 
125
        $url->setVariableRequete('m', 'annuaire_recherche_inscrit_carto');
-
 
126
        foreach ($zones as $id => &$infos) {
-
 
127
 
-
 
128
        	switch ($niveau) {
-
 
129
				// niveau 0 de la carte : on affiche tous les continents
-
 
130
				// l'url va pointer vers un continent en particulier
-
 
131
				case 0:
-
 
132
					$url->setVariableRequete('m', 'annuaire_afficher_carte');
-
 
133
					$url->setVariableRequete('continent', $id);
-
 
134
				break;
-
 
135
 
-
 
136
				// niveau 1, on est sur un continent en particulier : on affiche le détail du continent demandé
101
			// l'url pointe sur des pays
137
				// l'url pointe sur des pays
102
			case 1:
138
				case 1:
103
				$url->setVariableRequete('continent', $continent);
139
					$url->setVariableRequete('continent', $continent);
104
 
140
 
105
				// si le pays c'est la france alors l'url pointera vers la carte des départements
141
					// si le pays c'est la france alors l'url pointera vers la carte des départements
106
				if($id == $this->id_france) {
142
					if($id == $this->id_france) {
107
					$url->setVariableRequete('m', 'annuaire_afficher_carte');
143
						$url->setVariableRequete('m', 'annuaire_afficher_carte');
108
				} else {
144
					} else {
109
					// sinon l'url pointe vers la liste des inscrits de ce pays
145
						// sinon l'url pointe vers la liste des inscrits de ce pays
110
					$url->setVariableRequete('m', 'annuaire_inscrits_carto');
146
						$url->setVariableRequete('m', 'annuaire_inscrits_carto');
Line 111... Line 147...
111
				}
147
					}
112
				$url->setVariableRequete('pays', $id);
148
					$url->setVariableRequete('pays', $id);
Line -... Line 149...
-
 
149
 
-
 
150
				break;
-
 
151
 
-
 
152
				// niveau 2, si on a cliqué sur la france pour afficher les départements :
-
 
153
				case 1:
113
 
154
					$methode = 'annuaire_afficher_carte';
Line 114... Line 155...
114
			break;
155
					$url->setVariableRequete('continent', $continent);
115
 
156
					$url->setVariableRequete('pays', $pays);
Line 116... Line 157...
116
			// niveau 2, si on a cliqué sur la france pour afficher les départements :
157
					$url->setVariableRequete('departement', $id);
117
			case 1:
158
				break;
118
				$methode = 'annuaire_afficher_carte';
159
			}
119
				$url->setVariableRequete('continent', $continent);
160
            $infos['url'] = sprintf($url, $id);
Line 120... Line 161...
120
				$url->setVariableRequete('pays', $pays);
161
        }
121
				$url->setVariableRequete('departement', $id);
162
 
122
			break;
163
        $url->unsetVariablesRequete(array('id_location','m','id_annuaire'));
123
		}
164
    }
Line 124... Line 165...
124
            $infos['url'] = sprintf($url, $id);
165
 
125
        }
166
	/**
Line -... Line 167...
-
 
167
	 * Renvoie le niveau auquel on se trouve suivant la présence ou non de certains paramètres
-
 
168
	 * @param int $continent l'identitifiant du continent sur lequel on se trouve
-
 
169
     * @param string $pays l'identitifiant du pays sur lequel on se trouve (normalement seulement la france si présent)
-
 
170
	 */
-
 
171
    private function calculerNiveau($continent, $pays) {
126
 
172
 
127
        $url->unsetVariablesRequete(array('id_location','m','id_annuaire'));
173
		// le niveau 0 c'est la carte de base
128
    }
174
    	$niveau = 0;
129
 
175
 
130
    private function calculerNiveau($continent, $pays) {
176
		// le niveau 1 on consulte un continent en particulier (ex. Amérique du Sud)
Line 131... Line 177...
131
 
177
		if($continent != null) {
132
		// le niveau 0 c'est la carte de base
178
    		$niveau = 1;
133
    	$niveau = 0;
179
    	}
Line 134... Line 180...
134
 
180
 
135
		// le niveau 1 on consulte un continent en particulier (ex. Amérique du Sud)
181
		// le niveau 2 c'est un pays en particulier (ce cas là n'arrive que pour la france)
136
		if($continent != null) {
182
    	if($pays != null) {
Line 137... Line 183...
137
    		$niveau++;
183
    		$niveau = 2;
138
    	}
184
    	}
139
 
185
 
140
		// le niveau 2 c'est un pays en particulier (ce cas là n'arrive que pour la france)
186
    	return $niveau;
Line 141... Line 187...
141
    	if($pays != null) {
187
    }
142
    		$niveau++;
188
 
Line -... Line 189...
-
 
189
	/**
-
 
190
	 * Renvoie le type de template à utiliser suivant le niveau de certains paramètres
-
 
191
	 * @param int $niveau le niveau de la carto
-
 
192
	 * @return string le type de template
-
 
193
	 */
-
 
194
    private function renvoyerPrefixePourNiveau($niveau) {
-
 
195
    	switch ($niveau) {
-
 
196
    		case 0:
-
 
197
    			$fond = 'continents';
-
 
198
    		break;
-
 
199
 
-
 
200
    		case 1:
-
 
201
				$fond = 'pays';
-
 
202
    		break;
-
 
203
 
-
 
204
    		case 2 :
-
 
205
				$fond = 'france';
-
 
206
			break;
-
 
207
 
-
 
208
			default:
-
 
209
				$fond = '';
-
 
210
			break;
-
 
211
    	}
-
 
212
 
-
 
213
    	return $fond;
-
 
214
    }
-
 
215
 
-
 
216
	/**
-
 
217
	 * Renvoie le suffixe de fond de carte à utiliser pour un continent donné
-
 
218
	 * @param int $niveau le niveau de la carto
-
 
219
	 * @param int $niveau l'identifiant de continent
-
 
220
	 * @return string le suffixe
-
 
221
	 */
-
 
222
    private function renvoyerSuffixePourContinent($niveau, $continent) {
-
 
223
 
-
 
224
    	switch ($continent) {
-
 
225
    		case 1:
-
 
226
				$carte = '_afrique';
-
 
227
			break;
-
 
228
 
-
 
229
    		case 2:
-
 
230
				$carte = '_nord_amerique';
-
 
231
			break;
-
 
232
 
-
 
233
    		case 3:
-
 
234
				$carte = '_asie';
-
 
235
			break;
-
 
236
 
-
 
237
    		case 4:
-
 
238
				$carte = '_europe';
-
 
239
			break;
-
 
240
 
-
 
241
    		case 5:
-
 
242
				$carte = '_oceanie';
-
 
243
    		break;
-
 
244
 
-
 
245
    		case 6:
-
 
246
				$carte = '_sud_amerique';
-
 
247
    		break;
143
    	}
248
 
Line 144... Line 249...
144
 
249
    		case 7:
Line -... Line 250...
-
 
250
				$carte = '_moyen_orient';
-
 
251
    		break;
-
 
252
 
-
 
253
    		default:
-
 
254
    			$carte = '';
-
 
255
    		break;
-
 
256
    	}
-
 
257
 
-
 
258
    	return $carte;
-
 
259
    }
145
    	return $niveau;
260
 
Line 146... Line 261...
146
    }
261
	/**
-
 
262
	 * renvoie tous les noms templates pour chaque zone du monde
147
 
263
	 * @return array un tableau associatif indexé par les identifiants de zone et contenant les noms de templates
-
 
264
	 */
-
 
265
    private function renvoyerTousTemplates() {
-
 
266
    	return array(1 => 'pays_afrique', 2 => 'pays_nord_amerique', 3 => 'pays_asie', 4 => 'pays_europe', 5 => 'pays_oceanie', 6 => 'pays_sud_amerique', 7 => 'pays_moyen_orient');
148
    private function renvoyerTemplatePourNiveau($niveau) {
267
    }
-
 
268
 
149
    	switch ($niveau) {
269
	/**
Line -... Line 270...
-
 
270
	 * Charge la liste des inscrits par zone pour un niveau géographique donné
150
    		case 0:
271
	 * @param int $id_annuaire l'identifiant de l'annuaire
151
    			$fond = 'continents';
272
	 * @param int $niveau le niveau où l'on se situe
152
    		break;
273
	 * @return array un tableau associatif indexé par les identifiants de zone et contenant le nombre d'inscrits pour chaque zone
Line -... Line 274...
-
 
274
	 */
153
 
275
    private function chargerNombreInscritsParNiveauGeographique($id_annuaire, $niveau) {
154
    		case 999:
276
 
155
				$fond = 'pays';
277
		$nb_inscrits = array();
Line -... Line 278...
-
 
278
 
-
 
279
		if($niveau == 0) {
156
    		break;
280
			// si on est au niveau des continents
157
 
281
			$zones_ids = array();
-
 
282
			// il faut faire la somme des inscrits par zones géographique
158
    		case 2 :
283
			$templates = $this->renvoyerTousTemplates();
159
				$fond = 'france';
284
		} else {
Line 160... Line 285...
160
			break;
285
			// sinon on appelle la fonction pour la zone demandée
161
 
286
			$zones_ids = $this->chargerZonesParCsv(Application::getChemin().Config::get('carte_fonds_chemin').$this->nom_fond);
-
 
287
		}
-
 
288
 
-
 
289
		$annuaire_controleur = new AnnuaireControleur();
-
 
290
 
-
 
291
		switch ($niveau) {
-
 
292
			// niveau de la carte du monde
-
 
293
    		case 0:
-
 
294
    			// pour chacun des continents, on fait la somme des membres de sa zone
-
 
295
    			foreach($templates as $id_continent => $template) {
-
 
296
    				$zones_continent_ids = $this->chargerZonesParCsv(Application::getChemin().Config::get('carte_fonds_chemin').$template);
-
 
297
    				$nb_inscrits[$id_continent] = array_sum($annuaire_controleur->chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $zones_continent_ids));
-
 
298
    			}
-
 
299
    		break;
-
 
300
 
-
 
301
			// niveau de la carte des pays d'un continent
-
 
302
    		case 1:
-
 
303
				$nb_inscrits = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $zones_ids);
-
 
304
    		break;
-
 
305
 
-
 
306
			// détail d'un pays
-
 
307
    		case 2 :
-
 
308
				$nb_inscrits = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParDepartement($id_annuaire);
-
 
309
			break;
-
 
310
 
-
 
311
			// action par défaut, on renvoie les departements
-
 
312
			// TODO: changer ça, ça n'a pas de sens
162
			default:
313
			default:
163
				$fond = 'france';
314
				$nb_inscrits = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParDepartement($id_annuaire);