New file |
0,0 → 1,197 |
<?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; |
} |
} |
?> |