Subversion Repositories eFlore/Applications.cel

Rev

Rev 3377 | Rev 3543 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3377 Rev 3425
Line 25... Line 25...
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 LANGUE_DEFAUT = 'fr';
31
	const LANGUE_DEFAUT = 'fr';
31
	const PROJET_DEFAUT = 'base';
32
	const PROJET_DEFAUT = 'base';
32
	const WS_NOM = 'noms';
33
	const WS_NOM = 'noms';
33
	const EFLORE_API_VERSION = '0.1';
34
	const EFLORE_API_VERSION = '0.1';
-
 
35
	const WIDGETS_SPECIAUX = ['tb_aupresdemonarbre','tb_streets','tb_lichensgo'];
-
 
36
	const SQUELETTES_SPECIAUX = ['arbres','plantes','lichens'];
-
 
37
	const WS_OBS_LIST = 'InventoryObservationList';
-
 
38
	const WS_IMG_LIST = 'celImage';
34
	private $cel_url_tpl = null;
39
	private $cel_url_tpl = null;
35
	/** Si spécifié, on ajoute une barre de navigation inter-applications */
40
	/** Si spécifié, on ajoute une barre de navigation inter-applications */
36
	private $bar;
41
	private $bar;
37
	//private $parametres_autorises = array('projet', 'type', 'langue', 'order');
42
	//private $parametres_autorises = array('projet', 'type', 'langue', 'order');
38
	private $parametres_autorises = array(
43
	private $parametres_autorises = array(
Line 102... Line 107...
102
				$retour['donnees']['url_ws_saisie'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_SAISIE);
107
				$retour['donnees']['url_ws_saisie'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_SAISIE);
103
				$retour['donnees']['url_ws_obs'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_OBS);
108
				$retour['donnees']['url_ws_obs'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_OBS);
104
				$retour['donnees']['url_ws_upload'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_UPLOAD);
109
				$retour['donnees']['url_ws_upload'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_UPLOAD);
105
				$retour['donnees']['authTpl'] = $this->config['manager']['authTpl']. $projet_dans_url;
110
				$retour['donnees']['authTpl'] = $this->config['manager']['authTpl']. $projet_dans_url;
106
				$retour['donnees']['mode'] = $mode;
111
				$retour['donnees']['mode'] = $mode;
107
				if( isset( $this->parametres['squelette'] ) ) {
112
				$retour['donnees']['langue'] = $langue;
-
 
113
				$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_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'] );
108
					$squelette = dirname(__FILE__).self::DS.'squelettes'.self::DS. $this->parametres['squelette'].'.tpl.html';
117
				$squelette = dirname(__FILE__).self::DS.'squelettes'.self::DS.$retour['squelette'].'.tpl.html';
-
 
118
				switch ( $retour['squelette'] ) {
-
 
119
					case 'apa':
-
 
120
						$retour['donnees']['squelette'] = $this->parametres['projet'];
-
 
121
						break;
-
 
122
					case 'apaforms':
-
 
123
						$retour['donnees']['squelette'] = $this->parametres['squelette'];
-
 
124
						break;
109
				} else {
125
					default:
110
					$squelette = dirname(__FILE__).self::DS.'squelettes'.self::DS.$retour['squelette'].'.tpl.html';
126
						$retour['donnees']['squelette'] = $retour['squelette'];
-
 
127
						break;
111
				}
128
				}
112
				$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']);
129
				$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']);
113
			} else {
130
			} else {
114
				$this->messages[] = 'Les données à transmettre au squelette sont nulles.';
131
				$this->messages[] = 'Les données à transmettre au squelette sont nulles.';
115
			}
132
			}
Line 118... Line 135...
118
	}
135
	}
Line 119... Line 136...
119
 
136
 
120
 
137
 
-
 
138
	private function executerSaisie() {
-
 
139
		$retour = array();
-
 
140
		if (in_array($this->parametres['projet'], self::WIDGETS_SPECIAUX) ) {
-
 
141
			if (isset($this->parametres['squelette']) && in_array($this->parametres['squelette'], self::SQUELETTES_SPECIAUX) ) {
-
 
142
				$retour['squelette'] = 'apaforms';
-
 
143
			} else {
-
 
144
				$retour['squelette'] = 'apa';
121
	private function executerSaisie() {
145
			}
122
		$retour = array();
146
		} else {
123
		$retour['squelette'] = 'saisie';
147
			$retour['squelette'] = 'saisie';
124
		$retour['donnees']['general'] = I18n::get('General');
148
			$retour['donnees']['general']     = I18n::get('General');
125
		$retour['donnees']['aide'] = I18n::get('Aide');
149
			$retour['donnees']['aide']        = I18n::get('Aide');
126
		$retour['donnees']['observateur'] = I18n::get('Observateur');
150
			$retour['donnees']['observateur'] = I18n::get('Observateur');
127
		$retour['donnees']['observation'] = I18n::get('Observation');
151
			$retour['donnees']['observation'] = I18n::get('Observation');
128
		$retour['donnees']['image'] = I18n::get('Image');
152
			$retour['donnees']['image']       = I18n::get('Image');
-
 
153
	 		$retour['donnees']['chpsupp']     = I18n::get('Chpsupp');
129
 		$retour['donnees']['chpsupp'] = I18n::get('Chpsupp');
154
	 		$retour['donnees']['resume']      = I18n::get('Resume');
130
 		$retour['donnees']['resume'] = I18n::get('Resume');
155
		}
131
		$retour['donnees']['widget'] = $this->rechercherProjet();
156
		$retour['donnees']['widget'] = $this->rechercherProjet();
Line 132... Line 157...
132
		return $retour;
157
		return $retour;
Line 137... Line 162...
137
		// projet avec un squelette défini (et non juste un mot-clé d'observation)
162
		// projet avec un squelette défini (et non juste un mot-clé d'observation)
138
		$estProjetDefini = true;
163
		$estProjetDefini = true;
139
		$tab = array();
164
		$tab = array();
140
		$url = $this->config['manager']['celUrlTpl'].'?projet='.$this->parametres['projet'].'&langue='.$this->parametres['langue'];
165
		$url = $this->config['manager']['celUrlTpl'].'?projet='.$this->parametres['projet'].'&langue='.$this->parametres['langue'];
141
		$json = $this->getDao()->consulter($url);
166
		$json = $this->getDao()->consulter($url);
142
 
-
 
-
 
167
		if (!in_array($this->parametres['projet'], self::WIDGETS_SPECIAUX)){
143
		if ( $json !== "[]" ) {
168
			if ( $json !== "[]") {
144
			$tab = $this->rechercherChampsSupp();
169
				$tab = $this->rechercherChampsSupp();
145
		} else {
170
			} else {
146
			$url = $this->config['manager']['celUrlTpl'].'?projet=base&langue='.$this->parametres['langue'];
171
				$url = $this->config['manager']['celUrlTpl'].'?projet=base&langue='.$this->parametres['langue'];
147
			$json = $this->getDao()->consulter($url);
172
				$json = $this->getDao()->consulter($url);
148
			$estProjetDefini = false;
173
				$estProjetDefini = false;
-
 
174
			}
149
		}
175
		}
150
		$tableau = json_decode($json, true);
176
		$tableau = json_decode($json, true);
151
		$tableau = $this->traiterParametres($estProjetDefini, $tableau[0]);
177
		$tableau = $this->traiterParametres($estProjetDefini, $tableau[0]);
-
 
178
		if (
-
 
179
			isset($this->parametres['squelette']) &&
-
 
180
			($this->parametres['squelette'] === 'plantes' || $this->parametres['squelette'] === 'lichens')
-
 
181
		) {
-
 
182
			$tableau['type_especes'] = 'liste';
-
 
183
			if ( $this->parametres['squelette'] === 'lichens' ) {
-
 
184
				$tableau['referentiel'] = 'taxref';
-
 
185
			}
-
 
186
		}
152
		$tableau['especes'] = $this->rechercherInfosEspeces($tableau);
187
		$tableau['especes'] = $this->rechercherInfosEspeces($tableau);
153
		if (isset($tableau['type_especes']) && 'fixe' === $tableau['type_especes']) {
188
		if (isset($tableau['type_especes']) && 'fixe' === $tableau['type_especes']) {
154
			// si on trouve ":" dans referentiel, referentiel = première partie
189
			// si on trouve ":" dans referentiel, referentiel = première partie
155
			$tableau['referentiel'] = (strstr($tableau['referentiel'],':',true)) ?: $tableau['referentiel'];
190
			$tableau['referentiel'] = (strstr($tableau['referentiel'],':',true)) ?: $tableau['referentiel'];
156
		}
191
		}
157
		$tableau['milieux'] = ($tableau['milieux'] != '') ? explode(';', $tableau['milieux']) : [];
192
		$tableau['milieux'] = ($tableau['milieux'] != '') ? explode(';', $tableau['milieux']) : [];
-
 
193
		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
				$localisation = $this->traiterParamsLocalisation($this->parametres);
-
 
196
				// les paramètres dans l'url peuvent surcharger les données de localisation de la bdd
-
 
197
				if ($localisation) $tableau['localisation'] = $localisation;
-
 
198
			}
-
 
199
			if (isset($tableau['localisation'])) $tableau['localisation'] = $this->traiterLocalisation($tableau['localisation']);
-
 
200
		}
158
		if (isset($tableau['motscles'])) {
201
		if (isset($tableau['motscles'])) {
159
		    $tableau['tag-obs'] = $tableau['tag-img'] = $tableau['motscles'];
202
		    $tableau['tag-obs'] = $tableau['tag-img'] = $tableau['motscles'];
160
		}
203
		}
161
		$tableau['chpSupp'] = $tab;
204
		$tableau['chpSupp'] = $tab;
162
		$langue_projet_url = ( isset ( $this->parametres['langue'] ) && $this->parametres['langue'] !== 'fr' ) ? '_' . $this->parametres['langue'] : '';
205
		$langue_projet_url = ( isset ( $this->parametres['langue'] ) && $this->parametres['langue'] !== 'fr' ) ? '_' . $this->parametres['langue'] : '';
Line 168... Line 211...
168
	private function rechercherChampsSupp() {
211
	private function rechercherChampsSupp() {
169
		$retour = array();
212
		$retour = array();
170
		$projet = $this->parametres['projet'];
213
		$projet = $this->parametres['projet'];
171
		$url = $this->config['manager']['celChpSupTpl'] .'?projet=' . $projet . '&langue=' . $this->parametres['langue'];
214
		$url = $this->config['manager']['celChpSupTpl'] .'?projet=' . $projet . '&langue=' . $this->parametres['langue'];
172
		$json = $this->getDao()->consulter($url);
215
		$json = $this->getDao()->consulter($url);
173
		$retour = (array) json_decode($json, true);
216
		$retour = json_decode($json, true);
Line 174... Line 217...
174
 
217
 
Line 175... Line 218...
175
		foreach ( $retour[$projet]['champs-supp'] as $key => $chsup ) {
218
		foreach ( $retour[$projet]['champs-supp'] as $key => $chsup ) {
176
 
219
 
Line 205... Line 248...
205
			}
248
			}
206
		}
249
		}
207
		return $tableau;
250
		return $tableau;
208
	}
251
	}
Line -... Line 252...
-
 
252
 
-
 
253
	private function traiterLocalisation( $infos_localisation ) {
-
 
254
		$infos = explode(';', $infos_localisation);
-
 
255
		$tableauTmp = array();
-
 
256
		$retour = array();
-
 
257
		foreach ($infos as $info) {
-
 
258
			$tableauTmp = explode(':', $info);
-
 
259
			$retour[$tableauTmp[0]] = $tableauTmp[1];
-
 
260
		}
-
 
261
		return $retour;
-
 
262
	}
-
 
263
 
-
 
264
	private function traiterParamsLocalisation( $params ) {
-
 
265
		$infos = array();
-
 
266
		$tableauTmp = array();
-
 
267
		$zoom = '12';
-
 
268
		if (isset($params['commune'])) {
-
 
269
			$url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_COORD). '?zone='.$params['commune'].'&code='.$params['dept'];
-
 
270
		} else if (isset($params['dept'])) {
-
 
271
			// pas trouvé de manière simple de déterminer le centroïde du département
-
 
272
			// du coup on retrouve le code insee du chef lieu
-
 
273
			$params['code_insee'] = $this->recupererChefLieuDept($params['dept']);
-
 
274
			$zoom = '9';
-
 
275
		}
-
 
276
		// quoi qu'il arrive, s'il est défini, on donne la priorité au code insee (plus précis)
-
 
277
		if (isset($params['code_insee'])) {
-
 
278
			$url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_COORD). '?code='.$params['code_insee'];
-
 
279
		}
-
 
280
		if(!empty($url)) $json = $this->getDao()->consulter($url);
-
 
281
		if(!empty($json)) $infos = json_decode($json, true);
-
 
282
		if(!empty($infos)) {
-
 
283
			$infos['lat'] = str_replace(',','.',strval(round($infos['lat'],5)));
-
 
284
			$infos['lng'] = str_replace(',','.',strval(round($infos['lng'],5)));
-
 
285
			return 'latitude:'.$infos['lat'].';longitude:'.$infos['lng'].';zoom:'.$zoom;
-
 
286
		} else {
-
 
287
			return false;
-
 
288
		}
-
 
289
	}
209
 
290
 
210
	private function rechercherInfosEspeces( $infos_projets ) { //print_r($infos_projets);exit;
291
	private function rechercherInfosEspeces( $infos_projets ) {
211
		$retour = array();
292
		$retour = array();
212
		$referentiel = $infos_projets['referentiel'];
293
		$referentiel = $infos_projets['referentiel'];
213
		$urlWsNsTpl = $this->config['chemins']['baseURLServicesEfloreTpl'];
294
		$urlWsNsTpl = $this->config['chemins']['baseURLServicesEfloreTpl'];
214
		$retour['url_ws_autocompletion_ns'] = sprintf( $urlWsNsTpl, self::EFLORE_API_VERSION, $referentiel, self::WS_NOM );;
295
		$retour['url_ws_autocompletion_ns'] = sprintf( $urlWsNsTpl, self::EFLORE_API_VERSION, $referentiel, self::WS_NOM );;
Line 341... Line 422...
341
	 */
422
	 */
342
	protected function recupererListeTaxon() {
423
	protected function recupererListeTaxon() {
343
		$taxons = array();
424
		$taxons = array();
344
		$langue_projet_url = ( isset ( $this->parametres['langue'] ) && $this->parametres['langue'] !== 'fr' ) ? '_' . $this->parametres['langue'] : '';
425
		$langue_projet_url = ( isset ( $this->parametres['langue'] ) && $this->parametres['langue'] !== 'fr' ) ? '_' . $this->parametres['langue'] : '';
345
		$chemin_images = dirname(__FILE__) . self::DS . '..' . self::DS . 'manager' . self::DS . 'squelettes' . self::DS . 'img' . self::DS . 'images_projets' . self::DS;
426
		$chemin_images = dirname(__FILE__) . self::DS . '..' . self::DS . 'manager' . self::DS . 'squelettes' . self::DS . 'img' . self::DS . 'images_projets' . self::DS;
-
 
427
		$nom_fichier = ($this->parametres['squelette'] === 'lichens') ? 'lichens_taxons' : 'especes';
346
		$chemin_taxon = $chemin_images . $this->parametres['projet'] . $langue_projet_url . self::DS . 'especes.';
428
		$chemin_taxon = $chemin_images . $this->parametres['projet'] . $langue_projet_url . self::DS . $nom_fichier. '.';
Line 347... Line 429...
347
 
429
 
348
		if ( file_exists( $chemin_taxon . 'csv' ) && is_readable( $chemin_taxon . 'csv' ) ) {
430
		if ( file_exists( $chemin_taxon . 'csv' ) && is_readable( $chemin_taxon . 'csv' ) ) {
349
			$taxons = $this->decomposerFichierCsv( $chemin_taxon . 'csv' );
431
			$taxons = $this->decomposerFichierCsv( $chemin_taxon . 'csv' );
350
		} else if ( file_exists( $chemin_taxon . 'tsv' ) && is_readable( $chemin_taxon . 'tsv' ) ) {
432
		} else if ( file_exists( $chemin_taxon . 'tsv' ) && is_readable( $chemin_taxon . 'tsv' ) ) {
351
			$taxons = $this->decomposerFichierCsv( $chemin_taxon . 'tsv' );
433
			$taxons = $this->decomposerFichierCsv( $chemin_taxon . 'tsv' );
352
		} else {
434
		} else {
353
			$this->debug[] = "Impossible d'ouvrir le fichier '$fichier_taxon'.";
435
			$this->debug[] = "Impossible d'ouvrir le fichier '$nom_fichier'.";
354
		}
436
		}
355
		return $taxons;
437
		return $taxons;
Line 356... Line 438...
356
	}
438
	}
-
 
439
 
-
 
440
	/**
-
 
441
	 * Lit une liste de taxons depuis un fichier csv ou tsv fourni
-
 
442
	 */
-
 
443
	protected function recupererChefLieuDept($dept) {
-
 
444
		$infosDepts = array();
-
 
445
		$code_insee = '';
-
 
446
		$chemin_fichier = dirname(__FILE__).self::DS.'squelettes'.self::DS.'dept.csv';
-
 
447
 
-
 
448
		if (file_exists($chemin_fichier ) && is_readable($chemin_fichier)) {
-
 
449
			$infosDepts = $this->decomposerFichierCsv( $chemin_fichier,"," );
-
 
450
			if(!empty($infosDepts) && is_array($infosDepts)) {
-
 
451
				foreach ($infosDepts as $key => $infosDept) {
-
 
452
					if($dept == $infosDept['dep']) {
-
 
453
						return $code_insee = $infosDept['cheflieu'];
-
 
454
					}
-
 
455
				}
-
 
456
			}
-
 
457
		} else {
-
 
458
			$this->debug[] = "Impossible d'ouvrir le fichier '$nom_fichier'.";
-
 
459
		}
-
 
460
	}
357
 
461
 
358
	/**
462
	/**
359
	 * Découpe un fihcier csv/tsv
463
	 * Découpe un fihcier csv/tsv
360
	 */
464
	 */
361
	protected function decomposerFichierCsv($fichier, $delimiter = "\t"){
465
	protected function decomposerFichierCsv($fichier, $delimiter = "\t"){