Subversion Repositories Applications.annuaire

Compare Revisions

No changes between revisions

Ignore whitespace Rev 472 → Rev 473

/trunk/controleurs/AnnuaireControleur.php
166,6 → 166,7
if ($this->annuaireAvoirFormulaireInscription($annuaire['informations']['aa_code'])) {
$formulaire_inscription = $this->GetVue(Config::get('dossier_squelettes_formulaires').$annuaire['informations']['aa_code'].'_inscription',$donnees);
} else {
 
$tableau_nom_mappage = $this->obtenirNomsChampsMappageAnnuaire($id_annuaire);
$donnees['mappage_nom_champs'] = $tableau_nom_mappage;
 
1200,8 → 1201,9
$valeur = $valeurs_recherchees['departement'];
$champ_critere = $tableau_mappage[0]['champ_code_postal'];
 
$criteres = array($tableau_mappage[0]['champ_pays'] => $valeurs_recherchees['pays'],
$tableau_mappage[0]['champ_code_postal'] => $valeurs_recherchees['departement']
$criteres = array(
$tableau_mappage[0]['champ_pays'] => $valeurs_recherchees['pays'],
$tableau_mappage[0]['champ_code_postal'] => $valeurs_recherchees['departement']
);
}
 
1432,4 → 1434,3
return $this->AnnuaireModele->chargerNombreAnnuaireListeInscritsParDepartement($id_annuaire);
}
}
?>
Property changes:
Added: svnkit:entry:sha1-checksum
+944bd9cfcd47b6193f55d5774b921b5d4a220ca4
\ No newline at end of property
/trunk/controleurs/CartoControleur.php
3,106 → 3,104
/**
* 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>
* @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$
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
*/
class CartoControleur extends AppControleur {
 
 
// identifiant de la france pour l'accès direct
private $id_france = 'fr';
private $id_france = 'fr';
 
// nom du fond de carte en cours
private $nom_fond = '';
private $niveau = 0;
// contient le tableau de données sur les continents une fois chargé
private $donnees_continents = array();
// contient le tableau de données sur les pays une fois chargé
private $donnees_pays = array();
// contient le tableau de données sur les departements une fois chargé
private $donnees_departements = array();
// contient le nombre total d'inscrits dans la zone en cours de consultation
private $total_inscrits_zone = 0;
private $nom_fond = '';
 
//+----------------------------------------------------------------------------------------------------------------+
// Méthodes
private $niveau = 0;
 
/**
* Fonction d'affichage par défaut, elle appelle la cartographie
*/
public function executerActionParDefaut() {
return $this->cartographier(1);
}
// contient le tableau de données sur les continents une fois chargé
private $donnees_continents = array();
 
/**
* Cartographier un annuaire.
* @param int $id_annuaire l'identitifiant de l'annuaire à cartographier
* @param int $continent l'identitifiant du continent sur lequel on se trouve
* @param string $pays l'identitifiant du pays sur lequel on se trouve (normalement seulement la france si présent)
* @return string la vue correspondante
*/
public function cartographier($id_annuaire, $continent= null , $pays = null) {
// Initialisation de variable
$donnees = array();
// contient le tableau de données sur les pays une fois chargé
private $donnees_pays = array();
 
// contient le tableau de données sur les departements une fois chargé
private $donnees_departements = array();
 
// contient le nombre total d'inscrits dans la zone en cours de consultation
private $total_inscrits_zone = 0;
 
//+----------------------------------------------------------------------------------------------------------------+
// Méthodes
 
/**
* Fonction d'affichage par défaut, elle appelle la cartographie
*/
public function executerActionParDefaut() {
return $this->cartographier(1);
}
 
/**
* Cartographier un annuaire.
* @param int $id_annuaire l'identitifiant de l'annuaire à cartographier
* @param int $continent l'identitifiant du continent sur lequel on se trouve
* @param string $pays l'identitifiant du pays sur lequel on se trouve (normalement seulement la france si présent)
* @return string la vue correspondante
*/
public function cartographier($id_annuaire, $continent= null , $pays = null) {
// Initialisation de variable
$donnees = array();
 
// la présence d'un pays (non) et d'un continent (ou non) détermine le niveau de carte à afficher
$this->niveau = $this->calculerNiveau($continent, $pays);
$this->niveau = $this->calculerNiveau($continent, $pays);
 
// suivant le niveau, continent et pays, on renvoie un template html différent
$fond = $this->renvoyerPrefixePourNiveau($this->niveau, $continent, $pays);
// suivant le niveau, continent et pays, on renvoie un template html différent
$fond = $this->renvoyerPrefixePourNiveau($this->niveau, $continent, $pays);
 
$carte = '';
 
// chaque continent possède un fond de carte différent
if($this->niveau == 1) {
$carte = $this->renvoyerSuffixePourContinent($this->niveau, $continent, $pays);
if ($this->niveau == 1) {
$carte = $this->renvoyerSuffixePourContinent($this->niveau, $continent, $pays);
}
 
// Création de la carte
$options = array(
'carte_nom' => $fond.$carte,
'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).$carte,
'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);
// Création de la carte
$options = array(
'carte_nom' => $fond.$carte,
'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).$carte,
'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);
 
$this->nom_fond = Config::get('carte_base_nom_'.$fond).$carte;
$this->nom_fond = Config::get('carte_base_nom_'.$fond).$carte;
 
// Construction des données nécessaires à la cartographie
$zones = $cartographie->getCarteZones();
$this->chargerZonesNbre($id_annuaire,$zones, $this->niveau);
$this->chargerZonesUrls($id_annuaire, $zones, $continent, $pays, $this->niveau);
// Construction des données nécessaires à la cartographie
$zones = $cartographie->getCarteZones();
$this->chargerZonesNbre($id_annuaire,$zones, $this->niveau);
$this->chargerZonesUrls($id_annuaire, $zones, $continent, $pays, $this->niveau);
 
$navigation = new NavigationControleur();
$navigation = new NavigationControleur();
$donnees_navigation = $this->obtenirUrlsNavigation($id_annuaire, $continent, $pays, null);
$donnees['infos_pays'] = $donnees_navigation;
$donnees['navigation'] = $navigation->afficherBandeauNavigationCartographie($donnees_navigation);
$donnees['nb_resultats'] = $this->total_inscrits_zone;
 
$cartographie->setCarteZones($zones);
$cartographie->setCarteZones($zones);
 
$cartographie->creerCarte();
$donnees['map'] = $cartographie->getImageMap();
$cartographie->creerCarte();
$donnees['map'] = $cartographie->getImageMap();
 
$resultat = $this->getVue('cartes/'.$fond, $donnees);
return $resultat;
}
$resultat = $this->getVue('cartes/'.$fond, $donnees);
return $resultat;
}
 
/**
* Charge le nombre d'inscrit par zone pour un annuaire donné
110,46 → 108,41
* @param array $zones les zones à cartographier (attention, passage par référence, donc les zones sont modifiées)
* @param int $niveau le niveau de la carto (monde, continent, ou pays)
*/
private function chargerZonesNbre($id_annuaire, &$zones, $niveau = 0) {
private function chargerZonesNbre($id_annuaire, &$zones, $niveau = 0) {
$metaModele = $this->getModele('AnnuaireModele');
// on charge les inscrits pour le niveau donné
$zones_infos = $this->chargerNombreInscritsParNiveauGeographique($id_annuaire, $niveau);
 
$metaModele = $this->getModele('AnnuaireModele');
// on charge les inscrits pour le niveau donné
$zones_infos = $this->chargerNombreInscritsParNiveauGeographique($id_annuaire, $niveau);
 
foreach ($zones as $id => &$infos) {
 
foreach ($zones as $id => &$infos) {
// si l'on a des données pour la zone, on renseigne le nombre d'inscrits
if (isset($zones_infos[$id])) {
if (isset($zones_infos[$id])) {
$nbre = $zones_infos[$id];
$infos['info_nombre'] = $nbre;
$this->total_inscrits_zone += $nbre;
} else {
// sinon on le met à 0
$infos['info_nombre'] = 0;
}
}
}
 
$nbre = $zones_infos[$id];
$infos['info_nombre'] = $nbre;
$this->total_inscrits_zone += $nbre;
} else {
// sinon on le met à 0
$infos['info_nombre'] = 0;
}
}
}
 
/**
* Charge les des zones pour un annuaire donné
* @param int $id_annuaire l'identifiant de l'annuaire
* @param array $zones les zones à cartographier (attention, passage par référence, donc les zones sont modifiées)
* @param int $continent l'identitifiant du continent sur lequel on se trouve
* @param string $pays l'identitifiant du pays sur lequel on se trouve (normalement seulement la france si présent)
* @param string $pays l'identitifiant du pays sur lequel on se trouve (normalement seulement la france si présent)
* @param int $niveau le niveau de la carto (monde, continent, ou pays)
*/
private function chargerZonesUrls($id_annuaire, &$zones, $continent = null, $pays = null, $niveau = 0) {
private function chargerZonesUrls($id_annuaire, &$zones, $continent = null, $pays = null, $niveau = 0) {
 
$url = new URL(Config::get('url_base'));
$url = new URL(Config::get('url_base'));
 
$url->setVariableRequete('id_annuaire', $id_annuaire);
$url->setVariableRequete('id_annuaire', $id_annuaire);
 
foreach ($zones as $id => &$infos) {
foreach ($zones as $id => &$infos) {
 
switch ($niveau) {
switch ($niveau) {
// niveau 0 de la carte : on affiche tous les continents
// l'url va pointer vers un continent en particulier
case 0:
181,32 → 174,32
$url->setVariableRequete('departement', $id);
break;
}
$infos['url'] = sprintf($url, $id);
}
}
$infos['url'] = sprintf($url, $id);
}
}
 
/**
* Renvoie le niveau auquel on se trouve suivant la présence ou non de certains paramètres
* @param int $continent l'identitifiant du continent sur lequel on se trouve
* @param string $pays l'identitifiant du pays sur lequel on se trouve (normalement seulement la france si présent)
* @param string $pays l'identitifiant du pays sur lequel on se trouve (normalement seulement la france si présent)
*/
private function calculerNiveau($continent, $pays) {
private function calculerNiveau($continent, $pays) {
 
// le niveau 0 c'est la carte de base
$niveau = 0;
$niveau = 0;
 
// le niveau 1 on consulte un continent en particulier (ex. Amérique du Sud)
if($continent != null) {
$niveau = 1;
}
$niveau = 1;
}
 
// le niveau 2 c'est un pays en particulier (ce cas là n'arrive que pour la france)
if($pays != null) {
$niveau = 2;
}
if($pays != null) {
$niveau = 2;
}
 
return $niveau;
}
return $niveau;
}
 
/**
* Renvoie le type de template à utiliser suivant le niveau de certains paramètres
213,17 → 206,17
* @param int $niveau le niveau de la carto
* @return string le type de template
*/
private function renvoyerPrefixePourNiveau($niveau) {
switch ($niveau) {
case 0:
$fond = 'continents';
break;
private function renvoyerPrefixePourNiveau($niveau) {
switch ($niveau) {
case 0:
$fond = 'continents';
break;
 
case 1:
case 1:
$fond = 'pays';
break;
break;
 
case 2 :
case 2 :
$fond = 'france';
break;
 
230,10 → 223,10
default:
$fond = '';
break;
}
}
 
return $fond;
}
return $fond;
}
 
/**
* Renvoie le suffixe de fond de carte à utiliser pour un continent donné
241,52 → 234,52
* @param int $niveau l'identifiant de continent
* @return string le suffixe
*/
private function renvoyerSuffixePourContinent($niveau, $continent) {
private function renvoyerSuffixePourContinent($niveau, $continent) {
 
switch ($continent) {
case 1:
switch ($continent) {
case 1:
$carte = '_afrique';
break;
 
case 2:
case 2:
$carte = '_nord_amerique';
break;
 
case 3:
case 3:
$carte = '_asie';
break;
 
case 4:
case 4:
$carte = '_europe';
break;
 
case 5:
case 5:
$carte = '_oceanie';
break;
break;
 
case 6:
case 6:
$carte = '_sud_amerique';
break;
break;
 
case 7:
case 7:
$carte = '_moyen_orient';
break;
break;
 
default:
$carte = '';
break;
}
default:
$carte = '';
break;
}
 
return $carte;
}
return $carte;
}
 
/**
* renvoie tous les noms templates pour chaque zone du monde
* @return array un tableau associatif indexé par les identifiants de zone et contenant les noms de templates
*/
private function renvoyerTousTemplates() {
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');
}
private function renvoyerTousTemplates() {
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');
}
 
/**
* Charge la liste des inscrits par zone pour un niveau géographique donné
294,11 → 287,8
* @param int $niveau le niveau où l'on se situe
* @return array un tableau associatif indexé par les identifiants de zone et contenant le nombre d'inscrits pour chaque zone
*/
private function chargerNombreInscritsParNiveauGeographique($id_annuaire, $niveau) {
 
$nb_inscrits = array();
 
if($niveau == 0) {
private function chargerNombreInscritsParNiveauGeographique($id_annuaire, $niveau) {
if ($niveau == 0) {
// si on est au niveau des continents
$zones_ids = array();
// il faut faire la somme des inscrits par zones géographique
309,65 → 299,50
}
 
$annuaire_controleur = new AnnuaireControleur();
 
$nb_inscrits = array();
switch ($niveau) {
// niveau de la carte du monde
case 0:
// pour chacun des continents, on fait la somme des membres de sa zone
foreach($templates as $id_continent => $template) {
$zones_continent_ids = $this->chargerZonesParCsv(Application::getChemin().Config::get('carte_fonds_chemin').$template);
$nb_inscrits[$id_continent] = array_sum($annuaire_controleur->chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $zones_continent_ids));
}
break;
 
// niveau de la carte des pays d'un continent
case 1:
case 0 : // niveau de la carte du monde
// pour chacun des continents, on fait la somme des membres de sa zone
foreach ($templates as $id_continent => $template) {
$zones_continent_ids = $this->chargerZonesParCsv(Application::getChemin().Config::get('carte_fonds_chemin').$template);
$nb_inscrits[$id_continent] = array_sum($annuaire_controleur->chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $zones_continent_ids));
}
break;
case 1 : // niveau de la carte des pays d'un continent
$nb_inscrits = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $zones_ids);
break;
 
// détail d'un pays
case 2 :
break;
case 2 : // détail d'un pays
$nb_inscrits = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParDepartement($id_annuaire);
break;
 
// action par défaut
default:
// on renvoie un tableau vide
$nb_inscrits = array();
break;
break;
}
return $nb_inscrits;
}
 
return $nb_inscrits;
}
public function obtenirUrlsNavigation($id_annuaire ,$continent = null, $pays = null, $departement = null) {
$donnees = array();
$url_carte_monde = new URL(Config::get('url_base'));
$url_carte_monde->setVariableRequete('id_annuaire', $id_annuaire);
public function obtenirUrlsNavigation($id_annuaire ,$continent = null, $pays = null, $departement = null) {
$url_carte_monde = new URL(Config::get('url_base'));
$url_carte_monde->setVariableRequete('id_annuaire', $id_annuaire);
$url_carte_monde->setVariableRequete('m', 'annuaire_afficher_carte');
$donnees['url_carte_monde'] = $url_carte_monde;
$donnees['nom_carte_monde'] = 'Carte du monde';
if($continent != null && trim($continent) != '') {
$infos_continents = $this->chargerInformationsContinentCsv();
$url_continent = new URL(Config::get('url_base'));
$url_continent->setVariableRequete('id_annuaire', $id_annuaire);
$donnees = array();
$donnees['url_carte_monde'] = $url_carte_monde;
$donnees['nom_carte_monde'] = 'Carte du monde';
 
if ($continent != null && trim($continent) != '') {
$infos_continents = $this->chargerInformationsContinentCsv();
$url_continent = new URL(Config::get('url_base'));
$url_continent->setVariableRequete('id_annuaire', $id_annuaire);
$url_continent->setVariableRequete('m', 'annuaire_afficher_carte');
$url_continent->setVariableRequete('continent', $continent);
$donnees['url_continent'] = $url_continent;
$donnees['nom_continent'] = $infos_continents[$continent][2];
}
if($pays != null && trim($pays) != '') {
$templates_continents = $this->renvoyerTousTemplates();
$infos_continents = $this->chargerInformationsPaysDuContinentsCsv($templates_continents[$continent]);
$infos_pays = $infos_continents[$pays];
$url_pays = new URL(Config::get('url_base'));
$url_pays->setVariableRequete('id_annuaire', $id_annuaire);
if($pays == $this->id_france) {
$donnees['url_continent'] = $url_continent;
$donnees['nom_continent'] = $infos_continents[$continent][2];
}
 
if ($pays != null && trim($pays) != '') {
$templates_continents = $this->renvoyerTousTemplates();
$infos_continents = $this->chargerInformationsPaysDuContinentsCsv($templates_continents[$continent]);
$infos_pays = $infos_continents[$pays];
$url_pays = new URL(Config::get('url_base'));
$url_pays->setVariableRequete('id_annuaire', $id_annuaire);
if ($pays == $this->id_france) {
$url_pays->setVariableRequete('m', 'annuaire_afficher_carte');
} else {
// sinon l'url pointe vers la liste des inscrits de ce pays
375,59 → 350,49
}
$url_pays->setVariableRequete('continent', $continent);
$url_pays->setVariableRequete('pays', $pays);
$donnees['url_pays'] = $url_pays;
$donnees['nom_pays'] = $infos_pays[2];
}
if($departement != null && trim($departement) != '') {
$infos_departement = $this->chargerInformationsDepartementsFranceCsv();
$url_departement = new URL(Config::get('url_base'));
$url_departement->setVariableRequete('id_annuaire', $id_annuaire);
$donnees['url_pays'] = $url_pays;
$donnees['nom_pays'] = $infos_pays[2];
}
 
if ($departement != null && trim($departement) != '') {
$infos_departement = $this->chargerInformationsDepartementsFranceCsv();
$url_departement = new URL(Config::get('url_base'));
$url_departement->setVariableRequete('id_annuaire', $id_annuaire);
$url_departement->setVariableRequete('m', 'annuaire_afficher_carte');
$url_departement->setVariableRequete('continent', $continent);
$url_departement->setVariableRequete('departement', $departement);
$url_departement->setVariableRequete('pays', $pays);
$donnees['url_departement'] = $url_departement;
$donnees['nom_departement'] = $infos_departement[$departement][2];
}
$donnees['url_departement'] = $url_departement;
$donnees['nom_departement'] = $infos_departement[$departement][2];
}
 
$donnees['nb_resultats'] = $this->total_inscrits_zone;
$donnees['nb_resultats'] = $this->total_inscrits_zone;
return $donnees;
}
 
return $donnees;
}
public function chargerInformationsContinentCsv() {
$nom_csv = Application::getChemin().Config::get('carte_fonds_chemin').'continents';
return $this->chargerInformationsCompletesParCsv($nom_csv);
}
public function chargerInformationsPaysDuContinentsCsv($continent) {
$nom_csv = Application::getChemin().Config::get('carte_fonds_chemin').$continent;
public function chargerInformationsContinentCsv() {
$nom_csv = Application::getChemin().Config::get('carte_fonds_chemin').'continents';
return $this->chargerInformationsCompletesParCsv($nom_csv);
}
 
return $this->chargerInformationsCompletesParCsv($nom_csv);
}
public function chargerInformationsDepartementsFranceCsv() {
$nom_csv = Application::getChemin().Config::get('carte_fonds_chemin').'france';
return $this->chargerInformationsCompletesParCsv($nom_csv);
}
public function chargerInformationsCompletesParCsv($nom_csv) {
$fichier_csv = $nom_csv.'.csv';
$infos = array();
public function chargerInformationsPaysDuContinentsCsv($continent) {
$nom_csv = Application::getChemin().Config::get('carte_fonds_chemin').$continent;
return $this->chargerInformationsCompletesParCsv($nom_csv);
}
 
public function chargerInformationsDepartementsFranceCsv() {
$nom_csv = Application::getChemin().Config::get('carte_fonds_chemin').'france';
return $this->chargerInformationsCompletesParCsv($nom_csv);
}
 
public function chargerInformationsCompletesParCsv($nom_csv) {
$fichier_csv = $nom_csv.'.csv';
$infos = array();
 
if (($handle = fopen($fichier_csv, 'r')) !== false) {
$ligne = 0;
 
while (($donnees = fgetcsv($handle, 1000, ',')) !== false) {
if($ligne != 0 && trim($donnees[0]) != '') {
$infos[$donnees[0]] = $donnees;
}
$ligne++;
434,10 → 399,8
}
fclose($handle);
}
 
return $infos;
}
}
 
/**
* Récupère les identifiants de zone dans un fichier csv donné
444,16 → 407,12
* @param string $nom_csv chemin vers le fichier csv (sans extension) qui contient les données
* @return array un tableau contenant les identifiants des zones
*/
private function chargerZonesParCsv($nom_csv) {
 
private function chargerZonesParCsv($nom_csv) {
$fichier_csv = $nom_csv.'.csv';
$zones_id = array();
 
if (($handle = fopen($fichier_csv, 'r')) !== false) {
$ligne = 0;
 
while (($donnees = fgetcsv($handle, 1000, ',')) !== false) {
if($ligne != 0 && trim($donnees[0]) != '') {
$zones_id[] = "'".$donnees[0]."'";
}
461,8 → 420,6
}
fclose($handle);
}
 
return $zones_id;
}
}
?>
}
}
Property changes:
Added: svnkit:entry:sha1-checksum
+be06e5e37b1d0280628ea8db298296154bfefe64
\ No newline at end of property