Rev 56 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** classe Controleur du module Carte.** @package Collection* @category Php5* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @author Aurélien Peronnet <aurelien@tela-botanica.org>* @copyright 2010 Tela-Botanica* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL* @version SVN: $Id$*/class CartoControleur extends Controleur {// identifiant de la france pour l'accès directprivate $id_france = 2;//+----------------------------------------------------------------------------------------------------------------+// Méthodes/*** Fonction d'affichage par défaut, elle appelle la cartographie*/public function executerActionParDefaut() {return $this->cartographier(1);}/*** Cartographier un annuaire.* @return string la vue correspondante*/public function cartographier($id_annuaire, $continent= null , $pays = null, $departement = null) {// Initialisation de variable$donnees = array();$niveau = $this->calculerNiveau($continent, $pays);$fond = $this->renvoyerTemplatePourNiveau($niveau);// Création de la carte$options = array('carte_nom' => $fond,'formule' => Cartographie::FORMULE_PROPORTIONNEL,'couleur_claire' => Config::get('carte_couleur_claire'),'couleur_foncee' => Config::get('carte_couleur_foncee'),'fond_fichier' => Config::get('carte_base_nom_'.$fond),'fond_dossier' => Application::getChemin().Config::get('carte_fonds_chemin'),'stock_dossier' => Config::get('carte_stockage_chemin'),'stock_url' => Config::get('carte_stockage_url'),'debug' => Config::get('carte_mode_debug'));$cartographie = Composant::fabrique('cartographie', $options);// Construction des données nécessaires à la cartographie$zones = $cartographie->getCarteZones();$this->chargerZonesNbre($id_annuaire, $zones, $continent, $pays, $niveau);$this->chargerZonesUrls($id_annuaire, $zones, $continent, $pays, $niveau);$cartographie->setCarteZones($zones);$cartographie->creerCarte();$donnees['map'] = $cartographie->getImageMap();$resultat = $this->getVue('cartes/'.$fond, $donnees);return $resultat;}private function chargerZonesNbre($id_annuaire, &$zones, $niveau = 0, $zone_id = 0) {$metaModele = $this->getModele('AnnuaireModele');$zones_infos = $this->chargerNombreInscritsParNiveauGeographique($id_annuaire, $niveau, $zone_id);foreach ($zones as $id => &$infos) {if (isset($zones_infos[$id])) {$nbre = $zones_infos[$id];$infos['info_nombre'] = $nbre;} else {$infos['info_nombre'] = 0;}}}private function chargerZonesUrls($id_annuaire, &$zones, $continent = null, $pays = null, $niveau = 0) {$url = new URL(Config::get('url_base'));$url->setVariableRequete('id_annuaire', $id_annuaire);$url->setVariableRequete('m', 'annuaire_recherche_inscrit_carto');foreach ($zones as $id => &$infos) {switch ($niveau) {// niveau 0 de la carte : on affiche tous les continents// l'url va pointer un continent en particuliercase 0:$url->setVariableRequete('m', 'annuaire_afficher_carte');$url->setVariableRequete('continent', $id);break;// niveau 1, on est sur un continent en particulier : on affiche le détail du continent demandé// l'url pointe sur des payscase 1:$url->setVariableRequete('continent', $continent);// si le pays c'est la france alors l'url pointera vers la carte des départementsif($id == $this->id_france) {$url->setVariableRequete('m', 'annuaire_afficher_carte');} else {// sinon l'url pointe vers la liste des inscrits de ce pays$url->setVariableRequete('m', 'annuaire_inscrits_carto');}$url->setVariableRequete('pays', $id);break;// niveau 2, si on a cliqué sur la france pour afficher les départements :case 1:$methode = 'annuaire_afficher_carte';$url->setVariableRequete('continent', $continent);$url->setVariableRequete('pays', $pays);$url->setVariableRequete('departement', $id);break;}$infos['url'] = sprintf($url, $id);}$url->unsetVariablesRequete(array('id_location','m','id_annuaire'));}private function calculerNiveau($continent, $pays) {// le niveau 0 c'est la carte de base$niveau = 0;// le niveau 1 on consulte un continent en particulier (ex. Amérique du Sud)if($continent != null) {$niveau++;}// le niveau 2 c'est un pays en particulier (ce cas là n'arrive que pour la france)if($pays != null) {$niveau++;}return $niveau;}private function renvoyerTemplatePourNiveau($niveau) {switch ($niveau) {case 0:$fond = 'continents';break;case 999:$fond = 'pays';break;case 2 :$fond = 'france';break;default:$fond = 'france';break;}return $fond;}private function chargerNombreInscritsParNiveauGeographique($id_annuaire, $niveau, $zone_id) {$nb_inscrits = array();$annuaire_controleur = new AnnuaireControleur();switch ($niveau) {case 0:$nb_inscrits = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParContinent($id_annuaire, $zone_id);break;case 999:$nb_inscrits = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $zone_id);break;case 2 :$nb_inscrits = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParDepartement($id_annuaire);break;default:$nb_inscrits = array();break;}return $nb_inscrits;}}?>