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 direct
private $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 particulier
case 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 pays
case 1:
$url->setVariableRequete('continent', $continent);
// si le pays c'est la france alors l'url pointera vers la carte des départements
if($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;
}
}
?>