Subversion Repositories eFlore/Applications.cel

Rev

Rev 3662 | Rev 3799 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3662 Rev 3700
1
 <?php
1
 <?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Service affichant les dernières photo publiques du CEL ouvrable sous forme de diaporama.
4
 * Service affichant les dernières photo publiques du CEL ouvrable sous forme de diaporama.
5
 * Encodage en entrée : utf8
5
 * Encodage en entrée : utf8
6
 * Encodage en sortie : utf8
6
 * Encodage en sortie : utf8
7
 *
7
 *
8
 * Cas d'utilisation et documentation :
8
 * Cas d'utilisation et documentation :
9
 * @link http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=AideCELWidgetPhoto
9
 * @link http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=AideCELWidgetPhoto
10
 *
10
 *
11
 * Paramètres :
11
 * Paramètres :
12
 * ===> extra = booléen (1 ou 0)  [par défaut : 1]
12
 * ===> extra = booléen (1 ou 0)  [par défaut : 1]
13
 * Affiche / Cache la vignette en taille plus importante au bas du widget.
13
 * Affiche / Cache la vignette en taille plus importante au bas du widget.
14
 * ===> vignette = [0-9]+,[0-9]+  [par défaut : 4,3]
14
 * ===> vignette = [0-9]+,[0-9]+  [par défaut : 4,3]
15
 * Indique le nombre de vignette par ligne et le nombre de ligne.
15
 * Indique le nombre de vignette par ligne et le nombre de ligne.
16
 *
16
 *
17
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
17
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
18
 * @license	GPL v3 <http://www.gnu.org/licenses/gpl.txt>
18
 * @license	GPL v3 <http://www.gnu.org/licenses/gpl.txt>
19
 * @license	CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
19
 * @license	CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
20
 * @version	$Id$
20
 * @version	$Id$
21
 * @copyright	Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
21
 * @copyright	Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
22
 */
22
 */
23
class Saisie extends WidgetCommun {
23
class Saisie extends WidgetCommun {
24
 
24
 
25
	const DS = DIRECTORY_SEPARATOR;
25
	const DS = DIRECTORY_SEPARATOR;
26
	const SERVICE_DEFAUT = 'saisie';
26
	const SERVICE_DEFAUT = 'saisie';
27
	const WS_SAISIE = 'CelWidgetSaisie';
27
	const WS_SAISIE = 'CelWidgetSaisie';
28
	const WS_UPLOAD = 'CelWidgetUploadImageTemp';
28
	const WS_UPLOAD = 'CelWidgetUploadImageTemp';
29
	const WS_OBS = 'CelObs';
29
	const WS_OBS = 'CelObs';
30
	const WS_COORD = 'CoordSearch';
30
	const WS_COORD = 'CoordSearch';
31
	const LANGUE_DEFAUT = 'fr';
31
	const LANGUE_DEFAUT = 'fr';
32
	const PROJET_DEFAUT = 'base';
32
	const PROJET_DEFAUT = 'base';
33
	const WS_NOM = 'noms';
33
	const WS_NOM = 'noms';
34
	const EFLORE_API_VERSION = '0.1';
34
	const EFLORE_API_VERSION = '0.1';
35
	const WIDGETS_SPECIAUX = ['tb_aupresdemonarbre','tb_streets','tb_lichensgo'];
35
	const WIDGETS_SPECIAUX = ['tb_aupresdemonarbre','tb_streets','tb_lichensgo'];
36
	const SQUELETTES_SPECIAUX = ['arbres','plantes','lichens'];
36
	const SQUELETTES_SPECIAUX = ['arbres','plantes','lichens'];
37
	const WS_OBS_LIST = 'InventoryObservationList';
37
	const WS_OBS_LIST = 'InventoryObservationList';
38
	const WS_IMG_LIST = 'celImage';
38
	const WS_IMG_LIST = 'celImage';
39
	private $cel_url_tpl = null;
39
	private $cel_url_tpl = null;
40
	/** Si spécifié, on ajoute une barre de navigation inter-applications */
40
	/** Si spécifié, on ajoute une barre de navigation inter-applications */
41
	private $bar;
41
	private $bar;
42
	//private $parametres_autorises = array('projet', 'type', 'langue', 'order');
42
	//private $parametres_autorises = array('projet', 'type', 'langue', 'order');
43
	private $parametres_autorises = array(
43
	private $parametres_autorises = array(
44
			'projet' => 'projet',
44
			'projet' => 'projet',
45
			'type' => 'type',
45
			'type' => 'type',
46
			'langue' => 'langue',
46
			'langue' => 'langue',
47
			'order' => 'order'
47
			'order' => 'order'
48
	);
48
	);
49
	/**
49
	/**
50
	 * Méthode appelée par défaut pour charger ce widget.
50
	 * Méthode appelée par défaut pour charger ce widget.
51
	 */
51
	 */
52
	public function executer() {
52
	public function executer() {
53
		$retour = null;
53
		$retour = null;
54
		// Pour la création de l'id du cache nous ne tenons pas compte du paramètre de l'url callback
54
		// Pour la création de l'id du cache nous ne tenons pas compte du paramètre de l'url callback
55
		unset($this->parametres['callback']);
55
		unset($this->parametres['callback']);
56
		extract($this->parametres);
56
		extract($this->parametres);
57
		$this->bar = (isset($bar)) ? $bar : false;
57
		$this->bar = (isset($bar)) ? $bar : false;
58
		/* Le fichier Framework.php du Framework de Tela Botanica doit être appelé avant tout autre chose dans l'application.
58
		/* Le fichier Framework.php du Framework de Tela Botanica doit être appelé avant tout autre chose dans l'application.
59
		 Sinon, rien ne sera chargé.
59
		 Sinon, rien ne sera chargé.
60
		 L'emplacement du Framework peut varier en fonction de l'environnement (test, prod...). Afin de faciliter la configuration
60
		 L'emplacement du Framework peut varier en fonction de l'environnement (test, prod...). Afin de faciliter la configuration
61
		 de l'emplacement du Framework, un fichier framework.defaut.php doit être renommé en framework.php et configuré pour chaque installation de
61
		 de l'emplacement du Framework, un fichier framework.defaut.php doit être renommé en framework.php et configuré pour chaque installation de
62
		 l'application.
62
		 l'application.
63
		 Chemin du fichier chargeant le framework requis */
63
		 Chemin du fichier chargeant le framework requis */
64
		$framework = dirname(__FILE__).'/framework.php';
64
		$framework = dirname(__FILE__).'/framework.php';
65
		if (!file_exists($framework)) {
65
		if (!file_exists($framework)) {
66
			$e = "Veuillez paramêtrer l'emplacement et la version du Framework dans le fichier $framework";
66
			$e = "Veuillez paramêtrer l'emplacement et la version du Framework dans le fichier $framework";
67
			trigger_error($e, E_USER_ERROR);
67
			trigger_error($e, E_USER_ERROR);
68
		} else {
68
		} else {
69
			// Inclusion du Framework
69
			// Inclusion du Framework
70
			require_once $framework;
70
			require_once $framework;
71
			// Ajout d'information concernant cette application
71
			// Ajout d'information concernant cette application
72
			Framework::setCheminAppli(__FILE__);// Obligatoire
72
			Framework::setCheminAppli(__FILE__);// Obligatoire
73
			Framework::setInfoAppli(Config::get('info'));// Optionnel
73
			Framework::setInfoAppli(Config::get('info'));// Optionnel
74
 
74
 
75
		}
75
		}
76
		$langue = (isset($langue)) ? $langue : self::LANGUE_DEFAUT;
76
		$langue = (isset($langue)) ? $langue : self::LANGUE_DEFAUT;
77
		$this->langue = I18n::setLangue($langue);
77
		$this->langue = I18n::setLangue($langue);
78
		$this->parametres['langue'] = $langue;
78
		$this->parametres['langue'] = $langue;
79
 
79
 
80
		if (!isset($mode)) {
80
		if (!isset($mode)) {
81
			$mode = self::SERVICE_DEFAUT;
81
			$mode = self::SERVICE_DEFAUT;
82
		}
82
		}
83
		if (!isset($projet)) {
83
		if (!isset($projet)) {
84
			$this->parametres['projet'] = self::PROJET_DEFAUT;
84
			$this->parametres['projet'] = self::PROJET_DEFAUT;
85
		}
85
		}
86
 
86
 
87
		$methode = $this->traiterNomMethodeExecuter($mode);
87
		$methode = $this->traiterNomMethodeExecuter($mode);
88
		if (method_exists($this, $methode)) {
88
		if (method_exists($this, $methode)) {
89
			$retour = $this->$methode();
89
			$retour = $this->$methode();
90
		} else {
90
		} else {
91
			$this->messages[] = "Ce type de service '$methode' n'est pas disponible.";
91
			$this->messages[] = "Ce type de service '$methode' n'est pas disponible.";
92
		}
92
		}
93
 
93
 
94
		$contenu = ''; //print_r($retour);exit;
94
		$contenu = ''; //print_r($retour);exit;
95
		if (is_null($retour)) {
95
		if (is_null($retour)) {
96
			$this->messages[] = 'La ressource demandée a retourné une valeur nulle.';
96
			$this->messages[] = 'La ressource demandée a retourné une valeur nulle.';
97
		} else {
97
		} else {
98
			if (isset($retour['donnees'])) {
98
			if (isset($retour['donnees'])) {
99
				// ne pas afficher le projet dans l'url si on est dans saisie de base
99
				// ne pas afficher le projet dans l'url si on est dans saisie de base
100
				$projet_dans_url = ( $this->parametres['projet'] !== 'base') ? '?projet='. $this->parametres['projet'].'&'.'langue='.$this->parametres['langue'] : '';
100
				$projet_dans_url = ( $this->parametres['projet'] !== 'base') ? '?projet='. $this->parametres['projet'].'&'.'langue='.$this->parametres['langue'] : '';
101
 
101
 
102
				$retour['donnees']['conf_mode'] = $this->config['parametres']['modeServeur'];
102
				$retour['donnees']['conf_mode'] = $this->config['parametres']['modeServeur'];
103
				$retour['donnees']['prod'] = ($this->config['parametres']['modeServeur'] === 'prod');
103
				$retour['donnees']['prod'] = ($this->config['parametres']['modeServeur'] === 'prod');
104
				$retour['donnees']['bar'] = $this->bar;
104
				$retour['donnees']['bar'] = $this->bar;
105
				$retour['donnees']['url_base'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], $this->config['manager']['cheminDos']);
105
				$retour['donnees']['url_base'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], $this->config['manager']['cheminDos']);
-
 
106
				$retour['donnees']['url_remarques'] = $this->config['chemins']['widgetRemarquesUrl'];
106
				$retour['donnees']['url_ws_annuaire'] = sprintf($this->config['chemins']['baseURLServicesAnnuaireTpl'], 'utilisateur/identite-par-courriel/');
107
				$retour['donnees']['url_ws_annuaire'] = sprintf($this->config['chemins']['baseURLServicesAnnuaireTpl'], 'utilisateur/identite-par-courriel/');
107
				$retour['donnees']['url_ws_saisie'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_SAISIE);
108
				$retour['donnees']['url_ws_saisie'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_SAISIE);
108
				$retour['donnees']['url_ws_obs'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_OBS);
109
				$retour['donnees']['url_ws_obs'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_OBS);
109
				$retour['donnees']['url_ws_upload'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_UPLOAD);
110
				$retour['donnees']['url_ws_upload'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_UPLOAD);
110
				$retour['donnees']['authTpl'] = $this->config['manager']['authTpl']. $projet_dans_url;
111
				$retour['donnees']['authTpl'] = $this->config['manager']['authTpl']. $projet_dans_url;
111
				$retour['donnees']['mode'] = $mode;
112
				$retour['donnees']['mode'] = $mode;
112
				$retour['donnees']['langue'] = $langue;
113
				$retour['donnees']['langue'] = $langue;
113
				$retour['donnees']['widgets_url'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'],'');
114
				$retour['donnees']['widgets_url'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'],'');
114
				$retour['donnees']['url_ws_obs_list'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_OBS_LIST);
115
				$retour['donnees']['url_ws_obs_list'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_OBS_LIST);
115
				$retour['donnees']['url_ws_cel_imgs'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_IMG_LIST) . '/liste-ids?obsId=';
116
				$retour['donnees']['url_ws_cel_imgs'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_IMG_LIST) . '/liste-ids?obsId=';
116
				$retour['donnees']['url_ws_cel_img_url'] = str_replace ( '%s.jpg', '{id}XS', $this->config['chemins']['celImgUrlTpl'] );
117
				$retour['donnees']['url_ws_cel_img_url'] = str_replace ( '%s.jpg', '{id}XS', $this->config['chemins']['celImgUrlTpl'] );
117
				$squelette = dirname(__FILE__).self::DS.'squelettes'.self::DS.$retour['squelette'].'.tpl.html';
118
				$squelette = dirname(__FILE__).self::DS.'squelettes'.self::DS.$retour['squelette'].'.tpl.html';
118
				switch ( $retour['squelette'] ) {
119
				switch ( $retour['squelette'] ) {
119
					case 'apa':
120
					case 'apa':
120
						$retour['donnees']['squelette'] = $this->parametres['projet'];
121
						$retour['donnees']['squelette'] = $this->parametres['projet'];
121
						break;
122
						break;
122
					case 'apaforms':
123
					case 'apaforms':
123
						$retour['donnees']['squelette'] = $this->parametres['squelette'];
124
						$retour['donnees']['squelette'] = $this->parametres['squelette'];
124
						break;
125
						break;
125
					default:
126
					default:
126
						$retour['donnees']['squelette'] = $retour['squelette'];
127
						$retour['donnees']['squelette'] = $retour['squelette'];
127
						break;
128
						break;
128
				}
129
				}
129
				$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']);
130
				$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']);
130
			} else {
131
			} else {
131
				$this->messages[] = 'Les données à transmettre au squelette sont nulles.';
132
				$this->messages[] = 'Les données à transmettre au squelette sont nulles.';
132
			}
133
			}
133
		}
134
		}
134
		$this->envoyer($contenu);
135
		$this->envoyer($contenu);
135
	}
136
	}
136
 
137
 
137
 
138
 
138
	private function executerSaisie() {
139
	private function executerSaisie() {
139
		$retour = array();
140
		$retour = array();
140
		if (in_array($this->parametres['projet'], self::WIDGETS_SPECIAUX) ) {
141
		if (in_array($this->parametres['projet'], self::WIDGETS_SPECIAUX) ) {
141
			if (isset($this->parametres['squelette']) && in_array($this->parametres['squelette'], self::SQUELETTES_SPECIAUX) ) {
142
			if (isset($this->parametres['squelette']) && in_array($this->parametres['squelette'], self::SQUELETTES_SPECIAUX) ) {
142
				$retour['squelette'] = 'apaforms';
143
				$retour['squelette'] = 'apaforms';
143
			} else {
144
			} else {
144
				$retour['squelette'] = 'apa';
145
				$retour['squelette'] = 'apa';
145
			}
146
			}
146
		} else {
147
		} else {
147
			$retour['squelette'] = 'saisie';
148
			$retour['squelette'] = 'saisie';
148
			$retour['donnees']['general']     = I18n::get('General');
149
			$retour['donnees']['general']     = I18n::get('General');
149
			$retour['donnees']['aide']        = I18n::get('Aide');
150
			$retour['donnees']['aide']        = I18n::get('Aide');
150
			$retour['donnees']['observateur'] = I18n::get('Observateur');
151
			$retour['donnees']['observateur'] = I18n::get('Observateur');
151
			$retour['donnees']['observation'] = I18n::get('Observation');
152
			$retour['donnees']['observation'] = I18n::get('Observation');
152
			$retour['donnees']['image']       = I18n::get('Image');
153
			$retour['donnees']['image']       = I18n::get('Image');
153
	 		$retour['donnees']['chpsupp']     = I18n::get('Chpsupp');
154
	 		$retour['donnees']['chpsupp']     = I18n::get('Chpsupp');
154
	 		$retour['donnees']['resume']      = I18n::get('Resume');
155
	 		$retour['donnees']['resume']      = I18n::get('Resume');
155
		}
156
		}
156
		$retour['donnees']['widget'] = $this->rechercherProjet();
157
		$retour['donnees']['widget'] = $this->rechercherProjet();
157
		return $retour;
158
		return $retour;
158
	}
159
	}
159
 
160
 
160
	/* Recherche si le projet existe sinon va chercher les infos de base */
161
	/* Recherche si le projet existe sinon va chercher les infos de base */
161
	private function rechercherProjet() {
162
	private function rechercherProjet() {
162
		// projet avec un squelette défini (et non juste un mot-clé d'observation)
163
		// projet avec un squelette défini (et non juste un mot-clé d'observation)
163
		$estProjetDefini = true;
164
		$estProjetDefini = true;
164
		$tab = array();
165
		$tab = array();
165
		$url = $this->config['manager']['celUrlTpl'].'?projet='.$this->parametres['projet'].'&langue='.$this->parametres['langue'];
166
		$url = $this->config['manager']['celUrlTpl'].'?projet='.$this->parametres['projet'].'&langue='.$this->parametres['langue'];
166
		$json = $this->getDao()->consulter($url);
167
		$json = $this->getDao()->consulter($url);
167
		if (!in_array($this->parametres['projet'], self::WIDGETS_SPECIAUX)){
168
		if (!in_array($this->parametres['projet'], self::WIDGETS_SPECIAUX)){
168
			if ( $json !== "[]") {
169
			if ( $json !== "[]") {
169
				$tab = $this->rechercherChampsSupp();
170
				$tab = $this->rechercherChampsSupp();
170
			} else {
171
			} else {
171
				$url = $this->config['manager']['celUrlTpl'].'?projet=base&langue='.$this->parametres['langue'];
172
				$url = $this->config['manager']['celUrlTpl'].'?projet=base&langue='.$this->parametres['langue'];
172
				$json = $this->getDao()->consulter($url);
173
				$json = $this->getDao()->consulter($url);
173
				$estProjetDefini = false;
174
				$estProjetDefini = false;
174
			}
175
			}
175
		}
176
		}
176
		$tableau = json_decode($json, true);
177
		$tableau = json_decode($json, true);
177
		$tableau = $this->traiterParametres($estProjetDefini, $tableau[0]);
178
		$tableau = $this->traiterParametres($estProjetDefini, $tableau[0]);
178
		if (
179
		if (
179
			isset($this->parametres['squelette']) &&
180
			isset($this->parametres['squelette']) &&
180
			($this->parametres['squelette'] === 'plantes' || $this->parametres['squelette'] === 'lichens')
181
			($this->parametres['squelette'] === 'plantes' || $this->parametres['squelette'] === 'lichens')
181
		) {
182
		) {
182
			$tableau['type_especes'] = 'liste';
183
			$tableau['type_especes'] = 'liste';
183
			if ( $this->parametres['squelette'] === 'lichens' ) {
184
			if ( $this->parametres['squelette'] === 'lichens' ) {
184
				$tableau['referentiel'] = 'taxref';
185
				$tableau['referentiel'] = 'taxref';
185
			}
186
			}
186
		}
187
		}
187
		$tableau['especes'] = $this->rechercherInfosEspeces($tableau);
188
		$tableau['especes'] = $this->rechercherInfosEspeces($tableau);
188
		if (isset($tableau['type_especes']) && 'fixe' === $tableau['type_especes']) {
189
		if (isset($tableau['type_especes']) && 'fixe' === $tableau['type_especes']) {
189
			// si on trouve ":" dans referentiel, referentiel = première partie
190
			// si on trouve ":" dans referentiel, referentiel = première partie
190
			$tableau['referentiel'] = (strstr($tableau['referentiel'],':',true)) ?: $tableau['referentiel'];
191
			$tableau['referentiel'] = (strstr($tableau['referentiel'],':',true)) ?: $tableau['referentiel'];
191
		}
192
		}
192
		$tableau['milieux'] = ($tableau['milieux'] != '') ? explode(';', $tableau['milieux']) : [];
193
		$tableau['milieux'] = ($tableau['milieux'] != '') ? explode(';', $tableau['milieux']) : [];
193
		if(!isset($this->parametres['id-obs'])) {
194
		if(!isset($this->parametres['id-obs'])) {
194
			if (isset($this->parametres['dept']) || isset($this->parametres['commune'],$this->parametres['dept']) || isset($this->parametres['code_insee'])) {
195
			if (isset($this->parametres['dept']) || isset($this->parametres['commune'],$this->parametres['dept']) || isset($this->parametres['code_insee'])) {
195
				$localisation = $this->traiterParamsLocalisation($this->parametres);
196
				$localisation = $this->traiterParamsLocalisation($this->parametres);
196
				// les paramètres dans l'url peuvent surcharger les données de localisation de la bdd
197
				// les paramètres dans l'url peuvent surcharger les données de localisation de la bdd
197
				if ($localisation) $tableau['localisation'] = $localisation;
198
				if ($localisation) $tableau['localisation'] = $localisation;
198
			}
199
			}
199
			if (isset($tableau['localisation'])) $tableau['localisation'] = $this->traiterLocalisation($tableau['localisation']);
200
			if (isset($tableau['localisation'])) $tableau['localisation'] = $this->traiterLocalisation($tableau['localisation']);
200
		}
201
		}
201
		if (isset($tableau['motscles'])) {
202
		if (isset($tableau['motscles'])) {
202
    		if (isset($tableau['tag-obs'])) {
203
    		if (isset($tableau['tag-obs'])) {
203
    		    $tableau['tag-obs'] .= $tableau['motscles'];
204
    		    $tableau['tag-obs'] .= $tableau['motscles'];
204
		    } else if (isset($tableau['tag-img'])) {
205
		    } else if (isset($tableau['tag-img'])) {
205
		        $tableau['tag-img'] .= $tableau['motscles'];
206
		        $tableau['tag-img'] .= $tableau['motscles'];
206
		    } else {
207
		    } else {
207
		        $tableau['tag-obs'] = $tableau['tag-img'] = $tableau['motscles'];
208
		        $tableau['tag-obs'] = $tableau['tag-img'] = $tableau['motscles'];
208
		    }
209
		    }
209
		    
210
		    
210
		}
211
		}
211
		$tableau['chpSupp'] = $tab;
212
		$tableau['chpSupp'] = $tab;
212
		$langue_projet_url = ( isset ( $this->parametres['langue'] ) && $this->parametres['langue'] !== 'fr' ) ? '_' . $this->parametres['langue'] : '';
213
		$langue_projet_url = ( isset ( $this->parametres['langue'] ) && $this->parametres['langue'] !== 'fr' ) ? '_' . $this->parametres['langue'] : '';
213
		$tableau['chemin_fichiers'] = sprintf( $this->config['chemins']['baseURLAbsoluDyn'], $this->config['manager']['imgProjet'] . $tableau['projet'] . $langue_projet_url . '/' );
214
		$tableau['chemin_fichiers'] = sprintf( $this->config['chemins']['baseURLAbsoluDyn'], $this->config['manager']['imgProjet'] . $tableau['projet'] . $langue_projet_url . '/' );
214
		return $tableau;
215
		return $tableau;
215
	}
216
	}
216
 
217
 
217
	/* Recherche si un projet a des champs de saisie supplémentaire */
218
	/* Recherche si un projet a des champs de saisie supplémentaire */
218
	private function rechercherChampsSupp() {
219
	private function rechercherChampsSupp() {
219
		$retour = array();
220
		$retour = array();
220
		$projet = $this->parametres['projet'];
221
		$projet = $this->parametres['projet'];
221
		$url = $this->config['manager']['celChpSupTpl'] .'?projet=' . $projet . '&langue=' . $this->parametres['langue'];
222
		$url = $this->config['manager']['celChpSupTpl'] .'?projet=' . $projet . '&langue=' . $this->parametres['langue'];
222
		$json = $this->getDao()->consulter($url);
223
		$json = $this->getDao()->consulter($url);
223
		$retour = json_decode($json, true);
224
		$retour = json_decode($json, true);
224
 
225
 
225
		foreach ( $retour[$projet]['champs-supp'] as $key => $chsup ) {
226
		foreach ( $retour[$projet]['champs-supp'] as $key => $chsup ) {
226
 
227
 
227
			$retour[$projet]['champs-supp'][$key]['name'] = $this->clean_string( $chsup['name'] );
228
			$retour[$projet]['champs-supp'][$key]['name'] = $this->clean_string( $chsup['name'] );
228
			$retour[$projet]['champs-supp'][$key]['description'] = $this->clean_string( $chsup['description']);
229
			$retour[$projet]['champs-supp'][$key]['description'] = $this->clean_string( $chsup['description']);
229
			$retour[$projet]['champs-supp'][$key]['unit'] = $this->clean_string( $chsup['unit'] );
230
			$retour[$projet]['champs-supp'][$key]['unit'] = $this->clean_string( $chsup['unit'] );
230
 
231
 
231
			if ( isset( $chsup['fieldValues'] ) ) {
232
			if ( isset( $chsup['fieldValues'] ) ) {
232
				$retour[$projet]['champs-supp'][$key]['fieldValues'] = json_decode( $this->clean_string( $chsup['fieldValues'] ), true );
233
				$retour[$projet]['champs-supp'][$key]['fieldValues'] = json_decode( $this->clean_string( $chsup['fieldValues'] ), true );
233
 
234
 
234
				if ( isset( $retour[$projet]['champs-supp'][$key]['fieldValues']['listValue'] ) ) {
235
				if ( isset( $retour[$projet]['champs-supp'][$key]['fieldValues']['listValue'] ) ) {
235
					foreach( $retour[$projet]['champs-supp'][$key]['fieldValues']['listValue'] as $list_key => $list_value_array ) {
236
					foreach( $retour[$projet]['champs-supp'][$key]['fieldValues']['listValue'] as $list_key => $list_value_array ) {
236
						// Obtenir une liste de valeurs utilisables dans les attributs for id ou name par exemple
237
						// Obtenir une liste de valeurs utilisables dans les attributs for id ou name par exemple
237
						$retour[$projet]['champs-supp'][$key]['fieldValues']['cleanListValue'][] = ($list_value_array !== 'other') ? 'val-' . preg_replace( '/[^A-Za-z0-9_\-]/', '', $this->remove_accents( strtolower($list_value_array[0] ) ) ) : '';
238
						$retour[$projet]['champs-supp'][$key]['fieldValues']['cleanListValue'][] = ($list_value_array !== 'other') ? 'val-' . preg_replace( '/[^A-Za-z0-9_\-]/', '', $this->remove_accents( strtolower($list_value_array[0] ) ) ) : '';
238
					}
239
					}
239
				}
240
				}
240
			}
241
			}
241
			$retour[$projet]['champs-supp'][$key]['mandatory'] = intval( $chsup['mandatory'] );
242
			$retour[$projet]['champs-supp'][$key]['mandatory'] = intval( $chsup['mandatory'] );
242
		}
243
		}
243
		return $retour;
244
		return $retour;
244
	}
245
	}
245
 
246
 
246
	// remplace certains parametres définis en bd par les parametres définis dans l'url
247
	// remplace certains parametres définis en bd par les parametres définis dans l'url
247
	private function traiterParametres($estProjetDefini, $tableau) {
248
	private function traiterParametres($estProjetDefini, $tableau) {
248
		$criteres = array('tag-obs', 'tag-img', 'projet', 'titre', 'logo');
249
		$criteres = array('tag-obs', 'tag-img', 'projet', 'titre', 'logo');
249
		$criteresProjetNonDefini = array('commune', 'num_nom', 'referentiel');
250
		$criteresProjetNonDefini = array('commune', 'num_nom', 'referentiel');
250
		foreach($this->parametres as $nom_critere => $valeur_critere) {
251
		foreach($this->parametres as $nom_critere => $valeur_critere) {
251
			if (($estProjetDefini == false || $tableau['projet'] == 'base') && in_array($nom_critere, $criteresProjetNonDefini)) {
252
			if (($estProjetDefini == false || $tableau['projet'] == 'base') && in_array($nom_critere, $criteresProjetNonDefini)) {
252
				$tableau[$nom_critere] = $valeur_critere;
253
				$tableau[$nom_critere] = $valeur_critere;
253
			} else if (in_array($nom_critere, $criteres)) {
254
			} else if (in_array($nom_critere, $criteres)) {
254
				$tableau[$nom_critere] = $valeur_critere;
255
				$tableau[$nom_critere] = $valeur_critere;
255
			}
256
			}
256
		}
257
		}
257
		return $tableau;
258
		return $tableau;
258
	}
259
	}
259
 
260
 
260
	private function traiterLocalisation( $infos_localisation ) {
261
	private function traiterLocalisation( $infos_localisation ) {
261
		$infos = explode(';', $infos_localisation);
262
		$infos = explode(';', $infos_localisation);
262
		$tableauTmp = array();
263
		$tableauTmp = array();
263
		$retour = array();
264
		$retour = array();
264
		foreach ($infos as $info) {
265
		foreach ($infos as $info) {
265
			$tableauTmp = explode(':', $info);
266
			$tableauTmp = explode(':', $info);
266
			$retour[$tableauTmp[0]] = $tableauTmp[1];
267
			$retour[$tableauTmp[0]] = $tableauTmp[1];
267
		}
268
		}
268
		return $retour;
269
		return $retour;
269
	}
270
	}
270
 
271
 
271
	private function traiterParamsLocalisation( $params ) {
272
	private function traiterParamsLocalisation( $params ) {
272
		$infos = array();
273
		$infos = array();
273
		$tableauTmp = array();
274
		$tableauTmp = array();
274
		$zoom = '12';
275
		$zoom = '12';
275
		if (isset($params['commune'])) {
276
		if (isset($params['commune'])) {
276
			$url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_COORD). '?zone='.$params['commune'].'&code='.$params['dept'];
277
			$url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_COORD). '?zone='.$params['commune'].'&code='.$params['dept'];
277
		} else if (isset($params['dept'])) {
278
		} else if (isset($params['dept'])) {
278
			// pas trouvé de manière simple de déterminer le centroïde du département
279
			// pas trouvé de manière simple de déterminer le centroïde du département
279
			// du coup on retrouve le code insee du chef lieu
280
			// du coup on retrouve le code insee du chef lieu
280
			$params['code_insee'] = $this->recupererChefLieuDept($params['dept']);
281
			$params['code_insee'] = $this->recupererChefLieuDept($params['dept']);
281
			$zoom = '9';
282
			$zoom = '9';
282
		}
283
		}
283
		// quoi qu'il arrive, s'il est défini, on donne la priorité au code insee (plus précis)
284
		// quoi qu'il arrive, s'il est défini, on donne la priorité au code insee (plus précis)
284
		if (isset($params['code_insee'])) {
285
		if (isset($params['code_insee'])) {
285
			$url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_COORD). '?code='.$params['code_insee'];
286
			$url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_COORD). '?code='.$params['code_insee'];
286
		}
287
		}
287
		if(!empty($url)) $json = $this->getDao()->consulter($url);
288
		if(!empty($url)) $json = $this->getDao()->consulter($url);
288
		if(!empty($json)) $infos = json_decode($json, true);
289
		if(!empty($json)) $infos = json_decode($json, true);
289
		if(!empty($infos)) {
290
		if(!empty($infos)) {
290
			$infos['lat'] = str_replace(',','.',strval(round($infos['lat'],5)));
291
			$infos['lat'] = str_replace(',','.',strval(round($infos['lat'],5)));
291
			$infos['lng'] = str_replace(',','.',strval(round($infos['lng'],5)));
292
			$infos['lng'] = str_replace(',','.',strval(round($infos['lng'],5)));
292
			return 'latitude:'.$infos['lat'].';longitude:'.$infos['lng'].';zoom:'.$zoom;
293
			return 'latitude:'.$infos['lat'].';longitude:'.$infos['lng'].';zoom:'.$zoom;
293
		} else {
294
		} else {
294
			return false;
295
			return false;
295
		}
296
		}
296
	}
297
	}
297
 
298
 
298
	private function rechercherInfosEspeces( $infos_projets ) {
299
	private function rechercherInfosEspeces( $infos_projets ) {
299
		$retour = array();
300
		$retour = array();
300
		$referentiel = $infos_projets['referentiel'];
301
		$referentiel = $infos_projets['referentiel'];
301
		$urlWsNsTpl = $this->config['chemins']['baseURLServicesEfloreTpl'];
302
		$urlWsNsTpl = $this->config['chemins']['baseURLServicesEfloreTpl'];
302
		$retour['url_ws_autocompletion_ns'] = sprintf( $urlWsNsTpl, self::EFLORE_API_VERSION, $referentiel, self::WS_NOM );;
303
		$retour['url_ws_autocompletion_ns'] = sprintf( $urlWsNsTpl, self::EFLORE_API_VERSION, $referentiel, self::WS_NOM );;
303
		$retour['url_ws_autocompletion_ns_tpl'] = sprintf( $urlWsNsTpl, self::EFLORE_API_VERSION, '{referentiel}', self::WS_NOM );
304
		$retour['url_ws_autocompletion_ns_tpl'] = sprintf( $urlWsNsTpl, self::EFLORE_API_VERSION, '{referentiel}', self::WS_NOM );
304
		$retour['ns_referentiel'] = $referentiel;
305
		$retour['ns_referentiel'] = $referentiel;
305
 
306
 
306
		if ( isset( $infos_projets['type_especes'] ) ) {
307
		if ( isset( $infos_projets['type_especes'] ) ) {
307
 
308
 
308
			switch ( $infos_projets['type_especes'] ) {
309
			switch ( $infos_projets['type_especes'] ) {
309
				case 'fixe' :
310
				case 'fixe' :
310
					$info_taxon = explode(':', $referentiel);
311
					$info_taxon = explode(':', $referentiel);
311
					if (!empty($info_taxon) && count((array) $info_taxon) === 2) {
312
					if (!empty($info_taxon) && count((array) $info_taxon) === 2) {
312
						$retour = $this->chargerInfosTaxon( $info_taxon[0], $info_taxon[1] );
313
						$retour = $this->chargerInfosTaxon( $info_taxon[0], $info_taxon[1] );
313
					}
314
					}
314
					break;
315
					break;
315
				case 'referentiel' : break;
316
				case 'referentiel' : break;
316
				case 'liste' :
317
				case 'liste' :
317
					$retour['taxons'] = $this->recupererListeNomsSci();
318
					$retour['taxons'] = $this->recupererListeNomsSci();
318
					break;
319
					break;
319
			}
320
			}
320
		} else if ( isset( $referentiel ) ) {
321
		} else if ( isset( $referentiel ) ) {
321
			if ( isset($infos_projets['num_nom'] ) ) {
322
			if ( isset($infos_projets['num_nom'] ) ) {
322
				$retour = $this->chargerInfosTaxon( $referentiel, $infos_projets['num_nom'] );
323
				$retour = $this->chargerInfosTaxon( $referentiel, $infos_projets['num_nom'] );
323
			}
324
			}
324
		}
325
		}
325
		return $retour;
326
		return $retour;
326
	}
327
	}
327
 
328
 
328
	/**
329
	/**
329
	 * Consulte un webservice pour obtenir des informations sur le taxon dont le
330
	 * Consulte un webservice pour obtenir des informations sur le taxon dont le
330
	 * numéro nomenclatural est $num_nom (ce sont donc plutôt des infos sur le nom
331
	 * numéro nomenclatural est $num_nom (ce sont donc plutôt des infos sur le nom
331
	 * et non le taxon?)
332
	 * et non le taxon?)
332
	 * @param string|int $num_nom
333
	 * @param string|int $num_nom
333
	 * @return array
334
	 * @return array
334
	 */
335
	 */
335
	protected function chargerInfosTaxon( $referentiel, $num_nom ) {
336
	protected function chargerInfosTaxon( $referentiel, $num_nom ) {
336
		$url_service_infos = sprintf( $this->config['chemins']['infosTaxonUrl'], $referentiel, $num_nom );
337
		$url_service_infos = sprintf( $this->config['chemins']['infosTaxonUrl'], $referentiel, $num_nom );
337
		$infos = json_decode( file_get_contents( $url_service_infos ) );
338
		$infos = json_decode( file_get_contents( $url_service_infos ) );
338
		// trop de champs injectés dans les infos espèces peuvent
339
		// trop de champs injectés dans les infos espèces peuvent
339
		// faire planter javascript
340
		// faire planter javascript
340
		$champs_a_garder = array( 'id', 'nom_sci','nom_sci_complet', 'nom_complet', 'famille','nom_retenu.id', 'nom_retenu_complet', 'num_taxonomique' );
341
		$champs_a_garder = array( 'id', 'nom_sci','nom_sci_complet', 'nom_complet', 'famille','nom_retenu.id', 'nom_retenu_complet', 'num_taxonomique' );
341
		$resultat = array();
342
		$resultat = array();
342
		$retour = array();
343
		$retour = array();
343
		if ( isset( $infos ) && !empty( $infos ) ) {
344
		if ( isset( $infos ) && !empty( $infos ) ) {
344
			$infos = (array) $infos;
345
			$infos = (array) $infos;
345
			if ( isset( $infos['nom_sci'] ) && $infos['nom_sci'] !== '' ) {
346
			if ( isset( $infos['nom_sci'] ) && $infos['nom_sci'] !== '' ) {
346
				$resultat = array_intersect_key( $infos, array_flip($champs_a_garder ) );
347
				$resultat = array_intersect_key( $infos, array_flip($champs_a_garder ) );
347
				$resultat['retenu'] = ( $infos['id'] == $infos['nom_retenu.id'] ) ? 'true' : 'false';
348
				$resultat['retenu'] = ( $infos['id'] == $infos['nom_retenu.id'] ) ? 'true' : 'false';
348
				$retour['espece_imposee'] = true;
349
				$retour['espece_imposee'] = true;
349
				$retour['nn_espece_defaut'] = $nnEspeceImposee;
350
				$retour['nn_espece_defaut'] = $nnEspeceImposee;
350
				$retour['nom_sci_espece_defaut'] = $resultat['nom_complet'];
351
				$retour['nom_sci_espece_defaut'] = $resultat['nom_complet'];
351
				$retour['infos_espece'] = $this->array2js( $resultat, true );
352
				$retour['infos_espece'] = $this->array2js( $resultat, true );
352
			}
353
			}
353
		}
354
		}
354
		return $retour;
355
		return $retour;
355
	}
356
	}
356
 
357
 
357
	protected function getReferentielImpose() {
358
	protected function getReferentielImpose() {
358
		$referentiel_impose = true;
359
		$referentiel_impose = true;
359
		if (!empty($_GET['referentiel']) && $_GET['referentiel'] !== 'autre') {
360
		if (!empty($_GET['referentiel']) && $_GET['referentiel'] !== 'autre') {
360
			$this->ns_referentiel = $_GET['referentiel'];
361
			$this->ns_referentiel = $_GET['referentiel'];
361
		} else if (isset($this->configProjet['referentiel'])) {
362
		} else if (isset($this->configProjet['referentiel'])) {
362
			$this->ns_referentiel = $this->configProjet['referentiel'];
363
			$this->ns_referentiel = $this->configProjet['referentiel'];
363
		} else if (isset($this->configMission['referentiel'])) {
364
		} else if (isset($this->configMission['referentiel'])) {
364
			$this->ns_referentiel = $this->configMission['referentiel'];
365
			$this->ns_referentiel = $this->configMission['referentiel'];
365
		} else {
366
		} else {
366
			$referentiel_impose = false;
367
			$referentiel_impose = false;
367
		}
368
		}
368
		return $referentiel_impose;
369
		return $referentiel_impose;
369
	}
370
	}
370
 
371
 
371
	/**
372
	/**
372
	 * Trie par nom français les taxons lus dans le fichier csv/tsv
373
	 * Trie par nom français les taxons lus dans le fichier csv/tsv
373
	 */
374
	 */
374
	protected function recupererListeNomsSci() {
375
	protected function recupererListeNomsSci() {
375
		$taxons = $this->recupererListeTaxon();
376
		$taxons = $this->recupererListeTaxon();
376
		if (is_array($taxons)) {
377
		if (is_array($taxons)) {
377
			$taxons = self::trierTableauMd($taxons, array('nom_fr' => SORT_ASC));
378
			$taxons = self::trierTableauMd($taxons, array('nom_fr' => SORT_ASC));
378
		}
379
		}
379
		return $taxons;
380
		return $taxons;
380
	}
381
	}
381
 
382
 
382
	/**
383
	/**
383
	 * @TODO documenter
384
	 * @TODO documenter
384
	 * @return array
385
	 * @return array
385
	 */
386
	 */
386
	protected function recupererListeNoms() {
387
	protected function recupererListeNoms() {
387
		$taxons = $this->recupererListeTaxon();
388
		$taxons = $this->recupererListeTaxon();
388
		$nomsAAfficher = array();
389
		$nomsAAfficher = array();
389
		$nomsSpeciaux = array();
390
		$nomsSpeciaux = array();
390
		if (is_array($taxons)) {
391
		if (is_array($taxons)) {
391
			foreach ($taxons as $taxon) {
392
			foreach ($taxons as $taxon) {
392
				$nomSciTitle = $taxon['nom_ret'].
393
				$nomSciTitle = $taxon['nom_ret'].
393
				($taxon['nom_fr'] != '' ? ' - '.$taxon['nom_fr'] : '' ).
394
				($taxon['nom_fr'] != '' ? ' - '.$taxon['nom_fr'] : '' ).
394
				($taxon['nom_fr_autre'] != '' ? ' - '.$taxon['nom_fr_autre'] : '' );
395
				($taxon['nom_fr_autre'] != '' ? ' - '.$taxon['nom_fr_autre'] : '' );
395
				$nomFrTitle = $taxon['nom_sel'].
396
				$nomFrTitle = $taxon['nom_sel'].
396
				($taxon['nom_ret'] != $taxon['nom_sel']? ' - '.$taxon['nom_ret'] : '' ).
397
				($taxon['nom_ret'] != $taxon['nom_sel']? ' - '.$taxon['nom_ret'] : '' ).
397
				($taxon['nom_fr_autre'] != '' ? ' - '.$taxon['nom_fr_autre'] : '' );
398
				($taxon['nom_fr_autre'] != '' ? ' - '.$taxon['nom_fr_autre'] : '' );
398
 
399
 
399
				if ($taxon['groupe'] == 'special') {
400
				if ($taxon['groupe'] == 'special') {
400
					$nomsSpeciaux[] = array(
401
					$nomsSpeciaux[] = array(
401
							'num_nom' => $taxon['num_nom_sel'],
402
							'num_nom' => $taxon['num_nom_sel'],
402
							'nom_a_afficher' => $taxon['nom_fr'],
403
							'nom_a_afficher' => $taxon['nom_fr'],
403
							'nom_a_sauver' => $taxon['nom_sel'],
404
							'nom_a_sauver' => $taxon['nom_sel'],
404
							'nom_title' => $nomSciTitle,
405
							'nom_title' => $nomSciTitle,
405
							'nom_type' => 'nom-special');
406
							'nom_type' => 'nom-special');
406
				} else {
407
				} else {
407
					$nomsAAfficher[] = array(
408
					$nomsAAfficher[] = array(
408
							'num_nom' => $taxon['num_nom_sel'],
409
							'num_nom' => $taxon['num_nom_sel'],
409
							'nom_a_afficher' => $taxon['nom_sel'],
410
							'nom_a_afficher' => $taxon['nom_sel'],
410
							'nom_a_sauver' => $taxon['nom_sel'],
411
							'nom_a_sauver' => $taxon['nom_sel'],
411
							'nom_title' => $nomSciTitle,
412
							'nom_title' => $nomSciTitle,
412
							'nom_type' => 'nom-sci');
413
							'nom_type' => 'nom-sci');
413
					$nomsAAfficher[] = array(
414
					$nomsAAfficher[] = array(
414
							'num_nom' => $taxon['num_nom_sel'],
415
							'num_nom' => $taxon['num_nom_sel'],
415
							'nom_a_afficher' => $taxon['nom_fr'],
416
							'nom_a_afficher' => $taxon['nom_fr'],
416
							'nom_a_sauver' => $taxon['nom_fr'],
417
							'nom_a_sauver' => $taxon['nom_fr'],
417
							'nom_title' => $nomFrTitle,
418
							'nom_title' => $nomFrTitle,
418
							'nom_type' => 'nom-fr');
419
							'nom_type' => 'nom-fr');
419
				}
420
				}
420
			}
421
			}
421
			$nomsAAfficher = self::trierTableauMd($nomsAAfficher, array('nom_a_afficher' => SORT_ASC));
422
			$nomsAAfficher = self::trierTableauMd($nomsAAfficher, array('nom_a_afficher' => SORT_ASC));
422
			$nomsSpeciaux = self::trierTableauMd($nomsSpeciaux, array('nom_a_afficher' => SORT_ASC));
423
			$nomsSpeciaux = self::trierTableauMd($nomsSpeciaux, array('nom_a_afficher' => SORT_ASC));
423
		}
424
		}
424
		return array('speciaux' => $nomsSpeciaux, 'sci-et-fr' => $nomsAAfficher);
425
		return array('speciaux' => $nomsSpeciaux, 'sci-et-fr' => $nomsAAfficher);
425
	}
426
	}
426
 
427
 
427
	/**
428
	/**
428
	 * Lit une liste de taxons depuis un fichier csv ou tsv fourni
429
	 * Lit une liste de taxons depuis un fichier csv ou tsv fourni
429
	 */
430
	 */
430
	protected function recupererListeTaxon() {
431
	protected function recupererListeTaxon() {
431
		$taxons = array();
432
		$taxons = array();
432
		$langue_projet_url = ( isset ( $this->parametres['langue'] ) && $this->parametres['langue'] !== 'fr' ) ? '_' . $this->parametres['langue'] : '';
433
		$langue_projet_url = ( isset ( $this->parametres['langue'] ) && $this->parametres['langue'] !== 'fr' ) ? '_' . $this->parametres['langue'] : '';
433
		$chemin_images = dirname(__FILE__) . self::DS . '..' . self::DS . 'manager' . self::DS . 'squelettes' . self::DS . 'img' . self::DS . 'images_projets' . self::DS;
434
		$chemin_images = dirname(__FILE__) . self::DS . '..' . self::DS . 'manager' . self::DS . 'squelettes' . self::DS . 'img' . self::DS . 'images_projets' . self::DS;
434
		$nom_fichier = ($this->parametres['squelette'] === 'lichens') ? 'lichens_taxons' : 'especes';
435
		$nom_fichier = ($this->parametres['squelette'] === 'lichens') ? 'lichens_taxons' : 'especes';
435
		$chemin_taxon = $chemin_images . $this->parametres['projet'] . $langue_projet_url . self::DS . $nom_fichier. '.';
436
		$chemin_taxon = $chemin_images . $this->parametres['projet'] . $langue_projet_url . self::DS . $nom_fichier. '.';
436
 
437
 
437
		if ( file_exists( $chemin_taxon . 'csv' ) && is_readable( $chemin_taxon . 'csv' ) ) {
438
		if ( file_exists( $chemin_taxon . 'csv' ) && is_readable( $chemin_taxon . 'csv' ) ) {
438
			$taxons = $this->decomposerFichierCsv( $chemin_taxon . 'csv' );
439
			$taxons = $this->decomposerFichierCsv( $chemin_taxon . 'csv' );
439
		} else if ( file_exists( $chemin_taxon . 'tsv' ) && is_readable( $chemin_taxon . 'tsv' ) ) {
440
		} else if ( file_exists( $chemin_taxon . 'tsv' ) && is_readable( $chemin_taxon . 'tsv' ) ) {
440
			$taxons = $this->decomposerFichierCsv( $chemin_taxon . 'tsv' );
441
			$taxons = $this->decomposerFichierCsv( $chemin_taxon . 'tsv' );
441
		} else {
442
		} else {
442
			$this->debug[] = "Impossible d'ouvrir le fichier '$nom_fichier'.";
443
			$this->debug[] = "Impossible d'ouvrir le fichier '$nom_fichier'.";
443
		}
444
		}
444
		return $taxons;
445
		return $taxons;
445
	}
446
	}
446
 
447
 
447
	/**
448
	/**
448
	 * Lit une liste de taxons depuis un fichier csv ou tsv fourni
449
	 * Lit une liste de taxons depuis un fichier csv ou tsv fourni
449
	 */
450
	 */
450
	protected function recupererChefLieuDept($dept) {
451
	protected function recupererChefLieuDept($dept) {
451
		$infosDepts = array();
452
		$infosDepts = array();
452
		$code_insee = '';
453
		$code_insee = '';
453
		$chemin_fichier = dirname(__FILE__).self::DS.'squelettes'.self::DS.'dept.csv';
454
		$chemin_fichier = dirname(__FILE__).self::DS.'squelettes'.self::DS.'dept.csv';
454
 
455
 
455
		if (file_exists($chemin_fichier ) && is_readable($chemin_fichier)) {
456
		if (file_exists($chemin_fichier ) && is_readable($chemin_fichier)) {
456
			$infosDepts = $this->decomposerFichierCsv( $chemin_fichier,"," );
457
			$infosDepts = $this->decomposerFichierCsv( $chemin_fichier,"," );
457
			if(!empty($infosDepts) && is_array($infosDepts)) {
458
			if(!empty($infosDepts) && is_array($infosDepts)) {
458
				foreach ($infosDepts as $key => $infosDept) {
459
				foreach ($infosDepts as $key => $infosDept) {
459
					if($dept == $infosDept['dep']) {
460
					if($dept == $infosDept['dep']) {
460
						return $code_insee = $infosDept['cheflieu'];
461
						return $code_insee = $infosDept['cheflieu'];
461
					}
462
					}
462
				}
463
				}
463
			}
464
			}
464
		} else {
465
		} else {
465
			$this->debug[] = "Impossible d'ouvrir le fichier '$nom_fichier'.";
466
			$this->debug[] = "Impossible d'ouvrir le fichier '$nom_fichier'.";
466
		}
467
		}
467
	}
468
	}
468
 
469
 
469
	/**
470
	/**
470
	 * Découpe un fihcier csv/tsv
471
	 * Découpe un fihcier csv/tsv
471
	 */
472
	 */
472
	protected function decomposerFichierCsv($fichier, $delimiter = "\t"){
473
	protected function decomposerFichierCsv($fichier, $delimiter = "\t"){
473
		$header = null;
474
		$header = null;
474
		$data = array();
475
		$data = array();
475
		if (($handle = fopen($fichier, "r")) !== FALSE) {
476
		if (($handle = fopen($fichier, "r")) !== FALSE) {
476
			while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
477
			while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
477
				if (!$header) {
478
				if (!$header) {
478
					$header = $row;
479
					$header = $row;
479
				} else {
480
				} else {
480
					$data[] = array_combine($header, $row);
481
					$data[] = array_combine($header, $row);
481
				}
482
				}
482
			}
483
			}
483
			fclose($handle);
484
			fclose($handle);
484
		}
485
		}
485
		return $data;
486
		return $data;
486
	}
487
	}
487
 
488
 
488
	/**
489
	/**
489
	 * Convertit un tableau PHP en Javascript - @WTF pourquoi ne pas faire un json_encode ?
490
	 * Convertit un tableau PHP en Javascript - @WTF pourquoi ne pas faire un json_encode ?
490
	 * @param array $array
491
	 * @param array $array
491
	 * @param boolean $show_keys
492
	 * @param boolean $show_keys
492
	 * @return une portion de JSON représentant le tableau
493
	 * @return une portion de JSON représentant le tableau
493
	 */
494
	 */
494
	protected function array2js($array,$show_keys) {
495
	protected function array2js($array,$show_keys) {
495
		$tableauJs = '{}';
496
		$tableauJs = '{}';
496
		if (!empty($array)) {
497
		if (!empty($array)) {
497
			$total = count($array) - 1;
498
			$total = count($array) - 1;
498
			$i = 0;
499
			$i = 0;
499
			$dimensions = array();
500
			$dimensions = array();
500
			foreach ($array as $key => $value) {
501
			foreach ($array as $key => $value) {
501
				if (is_array($value)) {
502
				if (is_array($value)) {
502
					$dimensions[$i] = array2js($value,$show_keys);
503
					$dimensions[$i] = array2js($value,$show_keys);
503
					if ($show_keys) {
504
					if ($show_keys) {
504
						$dimensions[$i] = '\"'.$key.'\":'.$dimensions[$i];
505
						$dimensions[$i] = '\"'.$key.'\":'.$dimensions[$i];
505
					}
506
					}
506
				} else {
507
				} else {
507
					$dimensions[$i] = '\"'.addslashes($value).'\"';
508
					$dimensions[$i] = '\"'.addslashes($value).'\"';
508
					if ($show_keys) {
509
					if ($show_keys) {
509
						$dimensions[$i] = '\"'.$key.'\":'.$dimensions[$i];
510
						$dimensions[$i] = '\"'.$key.'\":'.$dimensions[$i];
510
					}
511
					}
511
				}
512
				}
512
				if ($i == 0) {
513
				if ($i == 0) {
513
					$dimensions[$i] = '{'.$dimensions[$i];
514
					$dimensions[$i] = '{'.$dimensions[$i];
514
				}
515
				}
515
				if ($i == $total) {
516
				if ($i == $total) {
516
					$dimensions[$i].= '}';
517
					$dimensions[$i].= '}';
517
				}
518
				}
518
				$i++;
519
				$i++;
519
			}
520
			}
520
			$tableauJs = implode(',', $dimensions);
521
			$tableauJs = implode(',', $dimensions);
521
		}
522
		}
522
		return $tableauJs;
523
		return $tableauJs;
523
	}
524
	}
524
}
525
}
525
?>
526
?>