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"){
|