Subversion Repositories eFlore/Applications.coel-consultation

Rev

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

Rev Author Line No. Line
25 jpm 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
 * @copyright	2010 Tela-Botanica
10
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
11
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
12
 * @version		SVN: $Id$
13
 */
14
class Carte extends ColControleur {
15
 
16
	//+----------------------------------------------------------------------------------------------------------------+
17
	// Méthodes
18
	/**
19
	 * Fonction d'affichage par défaut, elle appelle la liste des administrateurs
20
	 */
21
	public function executerActionParDefaut() {
22
		return $this->cartographier();
23
	}
24
 
25
	/**
26
	 * Cartographier les collections.
27
	 * @return string la vue correspondante
28
	 */
29
	public function cartographier() {
30
		// Initialisation de variable
31
		$donnees = array();
32
		$structureDao = $this->getModele('StructureDao');
33
 
34
		// Construction des données à passer à la cartographie
35
		$zones = $this->chargerZonesGeo(Config::get('carte_base_nom'));
36
		$zones_infos = $structureDao->getStructureParZoneGeo('FRD');
37
		$zones = $this->chargerZonesNbre($zones, $zones_infos);
38
		$zones = $this->chargerZonesUrls($zones);
39
		Debug::printr($zones);
40
 
41
		// Création de la carte
42
		$options = array(
43
			'carte_nom' => 'france',
44
			'formule' => Cartographie::FORMULE_PROPORTIONNEL,
45
			'fond_fichier' => Config::get('carte_base_nom'),
46
			'fond_dossier' => Application::getChemin().Config::get('carte_chemin_fonds'),
47
			'stock_dossier' => Config::get('carte_chemin_sotckage'),
48
			'infos' => $zones);
49
		$cartographie = Composant::fabrique('cartographie', $options);
50
		$cartographie->creerCarte();
51
		$donnees['map'] = $cartographie->getImageMap();
52
 
53
		$resultat = $this->getVue('carte', $donnees);
54
		$this->setSortie(self::RENDU_CORPS, $resultat);
55
	}
56
 
57
	private function chargerZonesNbre($zones, $zones_infos) {
58
		foreach ($zones as $id => &$infos) {
59
			if (isset($zones_infos[$id])) {
60
				$nbre = $zones_infos[$id];
61
				$infos['info_nbre'] = $nbre;
62
			} else {
63
				$infos['info_nbre'] = 0;
64
			}
65
		}
66
		return $zones;
67
	}
68
 
69
	private function chargerZonesUrls($zones) {
70
		$this->url->setVariableRequete('module', 'Recherche');
71
		$this->url->setVariableRequete('action', 'rechercher');
72
		$this->url->setVariableRequete('recherche', 'd:%s');
73
		$url = $this->url->getURL();
74
		foreach ($zones as $id => &$infos) {
75
			$infos['url'] = sprintf($url, $id);
76
		}
77
		$this->url->unsetVariablesRequete(array('module', 'action', 'recherche'));
78
		return $zones;
79
	}
80
 
81
	/**
82
	 * Charge le fichier csv des zones géographique de la carte
83
	 */
84
	private function chargerZonesGeo($nom_carte) {
85
		$fichier_csv = Application::getChemin().Config::get('carte_chemin_fonds').$nom_carte.'.csv';
86
		$zones = array();
87
		if (($handle = fopen($fichier_csv, 'r')) !== false) {
88
			$ligne = 1;
89
			$cles = array();
90
			while (($donnees = fgetcsv($handle, 1000, ',')) !== false) {
91
				$cle = array_shift($donnees);
92
				if ($ligne == 1) {
93
					// Ligne 1 : les noms des champs
94
					$cles = $donnees;
95
				} else {
96
					// Ligne > 1 : traitements des données
97
					$zones[$cle] = array_combine($cles, $donnees);
98
				}
99
				$ligne++;
100
			}
101
			fclose($handle);
102
		}
103
		return $zones;
104
	}
105
}
106
?>