Subversion Repositories Applications.annuaire

Rev

Rev 44 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 aurelien 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
 * classe Controleur du module Carte.
5
 *
6
 * @package     Collection
7
 * @category    Php5
8
 * @author      Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
 * @author      Aurélien Peronnet <aurelien@tela-botanica.org>
10
 * @copyright   2010 Tela-Botanica
11
 * @license     http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
12
 * @license     http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
13
 * @version     SVN: $Id$
14
 */
15
class CartoControleur extends Controleur {
16
 
17
 
18
	// identifiant de la france pour l'accès direct
19
    private $id_france = 2;
20
 
21
    //+----------------------------------------------------------------------------------------------------------------+
22
    // Méthodes
23
 
24
    /**
25
     * Fonction d'affichage par défaut, elle appelle la cartographie
26
     */
27
    public function executerActionParDefaut() {
28
        return $this->cartographier(1);
29
    }
30
 
31
    /**
32
     * Cartographier un annuaire.
33
     * @return string la vue correspondante
34
     */
35
    public function cartographier($id_annuaire, $continent= null , $pays = null, $departement = null) {
36
        // Initialisation de variable
37
        $donnees = array();
38
 
39
        $niveau = $this->calculerNiveau($continent, $pays);
40
        $fond = $this->renvoyerTemplatePourNiveau($niveau);
41
 
42
        // Création de la carte
43
        $options = array(
44
            'carte_nom' => $fond,
45
            'formule' => Cartographie::FORMULE_PROPORTIONNEL,
46
            'couleur_claire' => Config::get('carte_couleur_claire'),
47
            'couleur_foncee' => Config::get('carte_couleur_foncee'),
48
            'fond_fichier' => Config::get('carte_base_nom_'.$fond),
49
            'fond_dossier' => Application::getChemin().Config::get('carte_fonds_chemin'),
50
            'stock_dossier' => Config::get('carte_stockage_chemin'),
51
            'stock_url' => Config::get('carte_stockage_url'),
52
            'debug' => Config::get('carte_mode_debug'));
53
        $cartographie = Composant::fabrique('cartographie', $options);
54
        // Construction des données nécessaires à la cartographie
55
        $zones = $cartographie->getCarteZones();
56
        $this->chargerZonesNbre($id_annuaire, $zones, $continent, $pays, $niveau);
57
        $this->chargerZonesUrls($id_annuaire, $zones, $continent, $pays, $niveau);
58
        $cartographie->setCarteZones($zones);
59
 
60
        $cartographie->creerCarte();
61
        $donnees['map'] = $cartographie->getImageMap();
62
 
63
        $resultat = $this->getVue('cartes/'.$fond, $donnees);
64
        return $resultat;
65
    }
66
 
67
    private function chargerZonesNbre($id_annuaire, &$zones, $niveau = 0, $zone_id = 0) {
68
 
69
        $metaModele = $this->getModele('AnnuaireModele');
70
        $zones_infos = $this->chargerNombreInscritsParNiveauGeographique($id_annuaire, $niveau, $zone_id);
71
 
72
        foreach ($zones as $id => &$infos) {
73
 
74
            if (isset($zones_infos[$id])) {
75
 
76
                $nbre = $zones_infos[$id];
77
                $infos['info_nombre'] = $nbre;
78
            } else {
79
                $infos['info_nombre'] = 0;
80
            }
81
        }
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
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;
99
 
100
			// niveau 1, on est sur un continent en particulier : on affiche le détail du continent demandé
101
			// l'url pointe sur des pays
102
			case 1:
103
				$url->setVariableRequete('continent', $continent);
104
 
105
				// si le pays c'est la france alors l'url pointera vers la carte des départements
106
				if($id == $this->id_france) {
107
					$url->setVariableRequete('m', 'annuaire_afficher_carte');
108
				} else {
109
					// sinon l'url pointe vers la liste des inscrits de ce pays
110
					$url->setVariableRequete('m', 'annuaire_inscrits_carto');
111
				}
112
				$url->setVariableRequete('pays', $id);
113
 
114
			break;
115
 
116
			// niveau 2, si on a cliqué sur la france pour afficher les départements :
117
			case 1:
118
				$methode = 'annuaire_afficher_carte';
119
				$url->setVariableRequete('continent', $continent);
120
				$url->setVariableRequete('pays', $pays);
121
				$url->setVariableRequete('departement', $id);
122
			break;
123
		}
124
            $infos['url'] = sprintf($url, $id);
125
        }
126
 
127
        $url->unsetVariablesRequete(array('id_location','m','id_annuaire'));
128
    }
129
 
130
    private function calculerNiveau($continent, $pays) {
131
 
132
		// le niveau 0 c'est la carte de base
133
    	$niveau = 0;
134
 
135
		// le niveau 1 on consulte un continent en particulier (ex. Amérique du Sud)
136
		if($continent != null) {
137
    		$niveau++;
138
    	}
139
 
140
		// le niveau 2 c'est un pays en particulier (ce cas là n'arrive que pour la france)
141
    	if($pays != null) {
142
    		$niveau++;
143
    	}
144
 
145
    	return $niveau;
146
    }
147
 
148
    private function renvoyerTemplatePourNiveau($niveau) {
149
    	switch ($niveau) {
150
    		case 0:
151
    			$fond = 'continents';
152
    		break;
153
 
154
    		case 999:
155
				$fond = 'pays';
156
    		break;
157
 
158
    		case 2 :
159
				$fond = 'france';
160
			break;
161
 
162
			default:
163
				$fond = 'france';
164
			break;
165
    	}
166
 
167
    	return $fond;
168
    }
169
 
170
    private function chargerNombreInscritsParNiveauGeographique($id_annuaire, $niveau, $zone_id) {
171
 
172
		$nb_inscrits = array();
173
 
174
		$annuaire_controleur = new AnnuaireControleur();
175
 
176
		switch ($niveau) {
177
    		case 0:
178
    			$nb_inscrits = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParContinent($id_annuaire, $zone_id);
179
    		break;
180
 
181
    		case 999:
182
				$nb_inscrits = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $zone_id);
183
    		break;
184
 
185
    		case 2 :
186
				$nb_inscrits = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParDepartement($id_annuaire);
187
			break;
188
 
189
			default:
190
				$nb_inscrits = array();
191
			break;
192
		}
193
 
194
    	return $nb_inscrits;
195
    }
196
}
197
?>