Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 3238 → Rev 3239

/trunk/widget/modules/saisie2/Saisie2.php
21,7 → 21,7
* @copyright Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
*/
class Saisie2 extends WidgetCommun {
 
const DS = DIRECTORY_SEPARATOR;
const SERVICE_DEFAUT = 'saisie';
const LANGUE_DEFAUT = 'fr';
28,6 → 28,7
const PROJET_DEFAUT = 'base';
const WS_NOM = 'noms';
const EFLORE_API_VERSION = '0.1';
const WS_UPLOAD = 'CelWidgetUploadImageTemp';
private $cel_url_tpl = null;
/** Si spécifié, on ajoute une barre de navigation inter-applications */
private $bar;
63,7 → 64,7
// Ajout d'information concernant cette application
Framework::setCheminAppli(__FILE__);// Obligatoire
Framework::setInfoAppli(Config::get('info'));// Optionnel
 
}
$langue = (isset($langue)) ? $langue : self::LANGUE_DEFAUT;
$this->langue = I18n::setLangue($langue);
75,23 → 76,24
if (!isset($projet)) {
$this->parametres['projet'] = self::PROJET_DEFAUT;
}
 
$methode = $this->traiterNomMethodeExecuter($mode);
if (method_exists($this, $methode)) {
$retour = $this->$methode();
if (method_exists($this, $methode)) {
$retour = $this->$methode();
} else {
$this->messages[] = "Ce type de service '$methode' n'est pas disponible.";
}
 
$contenu = '';
if (is_null($retour)) {
$this->messages[] = 'La ressource demandée a retourné une valeur nulle.';
} else {
if (isset($retour['donnees'])) {
if (isset($retour['donnees'])) {
$retour['donnees']['prod'] = ($this->config['parametres']['modeServeur'] == "prod");
$retour['donnees']['bar'] = $this->bar;
$retour['donnees']['url_base'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], '');
$retour['donnees']['url_ws_annuaire'] = sprintf($this->config['chemins']['baseURLServicesAnnuaireTpl'], 'utilisateur/identite-par-courriel/');
$retour['donnees']['url_ws_upload'] = $widget['donnees']['url_ws_upload'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_UPLOAD);
$retour['donnees']['authTpl'] = $this->config['manager']['authTpl'].'?projet='.$this->parametres['projet'].'&langue='.$this->parametres['langue'];
$retour['donnees']['mode'] = $mode;
$squelette = dirname(__FILE__).self::DS.'squelettes'.self::DS.$retour['squelette'].'.tpl.html';
103,66 → 105,189
$this->envoyer($contenu);
}
 
 
private function executerSaisie() {
$retour = array();
$retour['squelette'] = 'saisie';
$retour['donnees']['general'] = I18n::get('General');
$retour['donnees']['aide'] = I18n::get('Aide');
$retour['donnees']['observateur'] = I18n::get('Observateur');
$retour['donnees']['observation'] = I18n::get('Observation');
$retour['donnees']['image'] = I18n::get('Image');
$retour['donnees']['chpsupp'] = I18n::get('Chpsupp');
$retour['donnees']['resume'] = I18n::get('Resume');
$retour['donnees']['observation'] = I18n::get('Observation');
$retour['donnees']['image'] = I18n::get('Image');
$retour['donnees']['chpsupp'] = I18n::get('Chpsupp');
$retour['donnees']['resume'] = I18n::get('Resume');
$retour['donnees']['widget'] = $this->rechercherProjet();
return $retour;
}
 
/* Recherche si le projet existe sinon va chercher les infos de base */
private function rechercherProjet() {
// projet avec un squelette défini (et non juste un mot-clé d'observation)
$estProjetDefini = true; $tab = array();
$estProjetDefini = true;
$tab = array();
$url = $this->config['manager']['celUrlTpl'].'?projet='.$this->parametres['projet'].'&langue='.$this->parametres['langue'];
$json = $this->getDao()->consulter($url);
$tableau = json_decode($json, true);
if ($tableau== array()) {
$json = $this->getDao()->consulter($url);
 
if ( $json ) {
$tab = $this->rechercherChampsSupp();
} else {
$url = $this->config['manager']['celUrlTpl'].'?projet=base&langue='.$this->parametres['langue'];
$json = $this->getDao()->consulter($url);
$estProjetDefini = false;
} else {
$tab = $this->rechercherChampsSupp();
}
$tableau = json_decode($json, true);
$tableau = $this->traiterParametres($estProjetDefini, $tableau[0]);
$tableau['especes'] = $this->rechercherInfosEspeces($tableau);
if ($tableau['milieux'] != "") {
$tableau['milieux']= explode(";", $tableau['milieux']);
if ($tableau['milieux'] != "") {
$tableau['milieux'] = explode(";", $tableau['milieux']);
} else {
$tableau['milieux'] = array();
}
$tableau['chpSupp'] = $tab;
$tableau['chpSupp'] = $tab;
$tableau['chemin_fichiers'] = sprintf( $this->config['chemins']['baseURLAbsoluDyn'], $this->config['manager']['dossierTmp'] . $tableau["projet"] . '/' );
return $tableau;
}
 
/* Recherche si un projet a des champs de saisie supplémentaire */
private function rechercherChampsSupp() {
$retour = array();
$url = $this->config['manager']['celChpSupTpl'].'?projet='.$this->parametres['projet'].'&langue='.$this->parametres['langue'];
$projet = $this->parametres['projet'];
$url = $this->config['manager']['celChpSupTpl'] .'?projet=' . $projet . '&langue=' . $this->parametres['langue'];
$json = $this->getDao()->consulter($url);
$retour = (array) json_decode($json, true);
foreach ($retour['sauvagessupp']['champs-supp'] as $key => $chsup) {
if (isset($chsup['fieldValues'])) {
$retour['sauvagessupp']['champs-supp'][$key]['fieldValues'] = json_decode($chsup['fieldValues'], true);
if (isset($retour['sauvagessupp']['champs-supp'][$key]['fieldValues']["listValue"])) {
foreach($retour['sauvagessupp']['champs-supp'][$key]['fieldValues']["listValue"] as $list_value) {
$patterns = array( '/\@apos\@/' , '/\@quot\@/' );
$replacements = array( ''' , '"' );
foreach ( $retour[$projet]['champs-supp'] as $key => $chsup ) {
 
 
$retour[$projet]['champs-supp'][$key]['name'] = preg_replace( $patterns, $replacements, $chsup['name'] );
$retour[$projet]['champs-supp'][$key]['description'] = preg_replace( $patterns, $replacements, $chsup['description']);
$retour[$projet]['champs-supp'][$key]['unit'] = preg_replace( $patterns, $replacements, $chsup['unit'] );
 
if ( isset( $chsup['fieldValues'] ) ) {
$retour[$projet]['champs-supp'][$key]['fieldValues'] = json_decode( $chsup['fieldValues'], true );
if ( isset($retour[$projet]['champs-supp'][$key]['fieldValues']['placeholder'] ) ) {
$retour[$projet]['champs-supp'][$key]['fieldValues']['placeholder'] = preg_replace( $patterns, $replacements, $retour[$projet]['champs-supp'][$key]['fieldValues']['placeholder'] );
}
 
if ( isset( $retour[$projet]['champs-supp'][$key]['fieldValues']['listValue'] ) ) {
foreach( $retour[$projet]['champs-supp'][$key]['fieldValues']['listValue'] as $list_key => $list_value ) {
$list_value = preg_replace( $patterns, $replacements, $list_value );
$retour[$projet]['champs-supp'][$key]['fieldValues']['listValue'][$list_key] = $list_value;
// Obtenir une liste de valeurs utilisables dans les attributs for id ou name par exemple
$retour['sauvagessupp']['champs-supp'][$key]['fieldValues']['cleanListValue'][] = 'val-' . preg_replace('/[^A-Za-z0-9_\-]/', '',$this->remove_accents($list_value));
$retour[$projet]['champs-supp'][$key]['fieldValues']['cleanListValue'][] = 'val-' . preg_replace('/[^A-Za-z0-9_\-]/', '', $this->remove_accents($list_value));
}
}
}
$retour['sauvagessupp']['champs-supp'][$key]['mandatory'] = intval($chsup['mandatory']);
$retour[$projet]['champs-supp'][$key]['mandatory'] = intval( $chsup['mandatory'] );
}
return $retour;
}
 
private function remove_accents($string) {
if ( !preg_match('/[\x80-\xff]/', $string) )
return $string;
 
$chars = array(
// Decompositions for Latin-1 Supplement
chr(195).chr(128) => 'A', chr(195).chr(129) => 'A',
chr(195).chr(130) => 'A', chr(195).chr(131) => 'A',
chr(195).chr(132) => 'A', chr(195).chr(133) => 'A',
chr(195).chr(135) => 'C', chr(195).chr(136) => 'E',
chr(195).chr(137) => 'E', chr(195).chr(138) => 'E',
chr(195).chr(139) => 'E', chr(195).chr(140) => 'I',
chr(195).chr(141) => 'I', chr(195).chr(142) => 'I',
chr(195).chr(143) => 'I', chr(195).chr(145) => 'N',
chr(195).chr(146) => 'O', chr(195).chr(147) => 'O',
chr(195).chr(148) => 'O', chr(195).chr(149) => 'O',
chr(195).chr(150) => 'O', chr(195).chr(153) => 'U',
chr(195).chr(154) => 'U', chr(195).chr(155) => 'U',
chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y',
chr(195).chr(159) => 's', chr(195).chr(160) => 'a',
chr(195).chr(161) => 'a', chr(195).chr(162) => 'a',
chr(195).chr(163) => 'a', chr(195).chr(164) => 'a',
chr(195).chr(165) => 'a', chr(195).chr(167) => 'c',
chr(195).chr(168) => 'e', chr(195).chr(169) => 'e',
chr(195).chr(170) => 'e', chr(195).chr(171) => 'e',
chr(195).chr(172) => 'i', chr(195).chr(173) => 'i',
chr(195).chr(174) => 'i', chr(195).chr(175) => 'i',
chr(195).chr(177) => 'n', chr(195).chr(178) => 'o',
chr(195).chr(179) => 'o', chr(195).chr(180) => 'o',
chr(195).chr(181) => 'o', chr(195).chr(182) => 'o',
chr(195).chr(182) => 'o', chr(195).chr(185) => 'u',
chr(195).chr(186) => 'u', chr(195).chr(187) => 'u',
chr(195).chr(188) => 'u', chr(195).chr(189) => 'y',
chr(195).chr(191) => 'y',
// Decompositions for Latin Extended-A
chr(196).chr(128) => 'A', chr(196).chr(129) => 'a',
chr(196).chr(130) => 'A', chr(196).chr(131) => 'a',
chr(196).chr(132) => 'A', chr(196).chr(133) => 'a',
chr(196).chr(134) => 'C', chr(196).chr(135) => 'c',
chr(196).chr(136) => 'C', chr(196).chr(137) => 'c',
chr(196).chr(138) => 'C', chr(196).chr(139) => 'c',
chr(196).chr(140) => 'C', chr(196).chr(141) => 'c',
chr(196).chr(142) => 'D', chr(196).chr(143) => 'd',
chr(196).chr(144) => 'D', chr(196).chr(145) => 'd',
chr(196).chr(146) => 'E', chr(196).chr(147) => 'e',
chr(196).chr(148) => 'E', chr(196).chr(149) => 'e',
chr(196).chr(150) => 'E', chr(196).chr(151) => 'e',
chr(196).chr(152) => 'E', chr(196).chr(153) => 'e',
chr(196).chr(154) => 'E', chr(196).chr(155) => 'e',
chr(196).chr(156) => 'G', chr(196).chr(157) => 'g',
chr(196).chr(158) => 'G', chr(196).chr(159) => 'g',
chr(196).chr(160) => 'G', chr(196).chr(161) => 'g',
chr(196).chr(162) => 'G', chr(196).chr(163) => 'g',
chr(196).chr(164) => 'H', chr(196).chr(165) => 'h',
chr(196).chr(166) => 'H', chr(196).chr(167) => 'h',
chr(196).chr(168) => 'I', chr(196).chr(169) => 'i',
chr(196).chr(170) => 'I', chr(196).chr(171) => 'i',
chr(196).chr(172) => 'I', chr(196).chr(173) => 'i',
chr(196).chr(174) => 'I', chr(196).chr(175) => 'i',
chr(196).chr(176) => 'I', chr(196).chr(177) => 'i',
chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij',
chr(196).chr(180) => 'J', chr(196).chr(181) => 'j',
chr(196).chr(182) => 'K', chr(196).chr(183) => 'k',
chr(196).chr(184) => 'k', chr(196).chr(185) => 'L',
chr(196).chr(186) => 'l', chr(196).chr(187) => 'L',
chr(196).chr(188) => 'l', chr(196).chr(189) => 'L',
chr(196).chr(190) => 'l', chr(196).chr(191) => 'L',
chr(197).chr(128) => 'l', chr(197).chr(129) => 'L',
chr(197).chr(130) => 'l', chr(197).chr(131) => 'N',
chr(197).chr(132) => 'n', chr(197).chr(133) => 'N',
chr(197).chr(134) => 'n', chr(197).chr(135) => 'N',
chr(197).chr(136) => 'n', chr(197).chr(137) => 'N',
chr(197).chr(138) => 'n', chr(197).chr(139) => 'N',
chr(197).chr(140) => 'O', chr(197).chr(141) => 'o',
chr(197).chr(142) => 'O', chr(197).chr(143) => 'o',
chr(197).chr(144) => 'O', chr(197).chr(145) => 'o',
chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe',
chr(197).chr(148) => 'R',chr(197).chr(149) => 'r',
chr(197).chr(150) => 'R',chr(197).chr(151) => 'r',
chr(197).chr(152) => 'R',chr(197).chr(153) => 'r',
chr(197).chr(154) => 'S',chr(197).chr(155) => 's',
chr(197).chr(156) => 'S',chr(197).chr(157) => 's',
chr(197).chr(158) => 'S',chr(197).chr(159) => 's',
chr(197).chr(160) => 'S', chr(197).chr(161) => 's',
chr(197).chr(162) => 'T', chr(197).chr(163) => 't',
chr(197).chr(164) => 'T', chr(197).chr(165) => 't',
chr(197).chr(166) => 'T', chr(197).chr(167) => 't',
chr(197).chr(168) => 'U', chr(197).chr(169) => 'u',
chr(197).chr(170) => 'U', chr(197).chr(171) => 'u',
chr(197).chr(172) => 'U', chr(197).chr(173) => 'u',
chr(197).chr(174) => 'U', chr(197).chr(175) => 'u',
chr(197).chr(176) => 'U', chr(197).chr(177) => 'u',
chr(197).chr(178) => 'U', chr(197).chr(179) => 'u',
chr(197).chr(180) => 'W', chr(197).chr(181) => 'w',
chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y',
chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z',
chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z',
chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z',
chr(197).chr(190) => 'z', chr(197).chr(191) => 's'
);
 
$string = strtr($string, $chars);
 
return $string;
}
 
// remplace certains parametres définis en bd par les parametres définis dans l'url
private function traiterParametres($estProjetDefini, $tableau) {
$criteres = array('tag', 'motcle', 'projet', 'titre', 'logo');
176,36 → 301,40
}
return $tableau;
}
private function rechercherInfosEspeces($infos_projets) { //print_r($infos_projets);exit;
$retour = ""; $referentiel = $infos_projets['referentiel'];
 
 
private function rechercherInfosEspeces( $infos_projets ) { //print_r($infos_projets);exit;
$retour = array();
$referentiel = $infos_projets['referentiel'];
$urlWsNsTpl = $this->config['chemins']['baseURLServicesEfloreTpl'];
$urlWsNs = sprintf($urlWsNsTpl, self::EFLORE_API_VERSION, $referentiel, self::WS_NOM);
$urlWsNsSansRef = sprintf($urlWsNsTpl, self::EFLORE_API_VERSION, '{referentiel}', self::WS_NOM);
$urlWsNs = sprintf( $urlWsNsTpl, self::EFLORE_API_VERSION, $referentiel, self::WS_NOM );
$urlWsNsSansRef = sprintf( $urlWsNsTpl, self::EFLORE_API_VERSION, '{referentiel}', self::WS_NOM );
$retour['url_ws_autocompletion_ns'] = $urlWsNs;
$retour['url_ws_autocompletion_ns_tpl'] = $urlWsNsSansRef;
$retour['ns_referentiel'] = $referentiel;
if (isset($infos_projets['type_especes'])) {
switch ($infos_projets['type_especes']) {
case "referentiel" : $referentiel = $infos_projets['referentiel']; break;
case "liste" : $referentiel = $infos_projets['referentiel']; break;
case "fixe" :
$retour['especes'] = $this->chargerInfosTaxon($infos_projets['referentiel'], $infos_projets['especes']);
 
if ( isset( $infos_projets['type_especes'] ) ) {
 
switch ( $infos_projets['type_especes'] ) {
case "fixe" :
$retour['especes'] = $this->chargerInfosTaxon( $infos_projets['referentiel'], $infos_projets['especes'] );
break;
case "referentiel" :
case "liste" :
$referentiel = $infos_projets['referentiel'];
break;
}
} else if (isset($infos_projets['referentiel'])) {
} else if ( isset( $infos_projets['referentiel'] ) ) {
$referentiel = $infos_projets['referentiel'];
if (isset($infos_projets['num_nom'])) {
$retour['especes'] = $this->chargerInfosTaxon($infos_projets['referentiel'], $infos_projets['num_nom']);
if ( isset($infos_projets['num_nom'] ) ) {
$retour['especes'] = $this->chargerInfosTaxon( $infos_projets['referentiel'], $infos_projets['num_nom'] );
}
}
$projetsAListeDeNoms = $this->transformerEnTableau($this->config['projets']['liste_noms']);
if (in_array($this->projet, $projetsAListeDeNoms) && !$this->especeEstImposee()) {
$projetsAListeDeNomsSciEtVerna = $this->transformerEnTableau($this->config['projets']['liste_noms_sci_et_verna']);
if (in_array($this->projet, $projetsAListeDeNomsSciEtVerna)) {
 
$projetsAListeDeNoms = $this->transformerEnTableau( $this->config['projets']['liste_noms'] ) ;
if ( in_array( $this->projet, $projetsAListeDeNoms ) && !$this->especeEstImposee() ) {
$projetsAListeDeNomsSciEtVerna = $this->transformerEnTableau( $this->config['projets']['liste_noms_sci_et_verna'] );
if ( in_array( $this->projet, $projetsAListeDeNomsSciEtVerna ) ) {
$retour['taxons'] = $this->recupererListeNoms();
} else {
$retour['taxons'] = $this->recupererListeNomsSci();
213,7 → 342,7
}
return $retour;
}
 
/**
* Consulte un webservice pour obtenir des informations sur le taxon dont le
* numéro nomenclatural est $num_nom (ce sont donc plutôt des infos sur le nom
221,30 → 350,42
* @param string|int $num_nom
* @return array
*/
protected function chargerInfosTaxon($referentiel, $num_nom) {
$url_service_infos = sprintf($this->config['chemins']['infosTaxonUrl'], $referentiel, $num_nom);
$infos = json_decode(file_get_contents($url_service_infos));
protected function chargerInfosTaxon( $referentiel, $num_nom ) {
$url_service_infos = sprintf( $this->config['chemins']['infosTaxonUrl'], $referentiel, $num_nom );
$infos = json_decode( file_get_contents( $url_service_infos ) );
// trop de champs injectés dans les infos espèces peuvent
// faire planter javascript
$champs_a_garder = array('id', 'nom_sci','nom_sci_complet', 'nom_complet',
'famille','nom_retenu.id', 'nom_retenu_complet', 'num_taxonomique');
$champs_a_garder = array( 'id', 'nom_sci','nom_sci_complet', 'nom_complet',
'famille','nom_retenu.id', 'nom_retenu_complet', 'num_taxonomique' );
$resultat = array();
$retour = array();
if (isset($infos) && !empty($infos)) {
$infos = (array)$infos;
if (isset($infos['nom_sci']) && $infos['nom_sci'] != '') {
$resultat = array_intersect_key($infos, array_flip($champs_a_garder));
$resultat['retenu'] = ($infos['id'] == $infos['nom_retenu.id']) ? "true" : "false";
if ( isset( $infos ) && !empty( $infos ) ) {
$infos = (array) $infos;
if ( isset( $infos['nom_sci'] ) && $infos['nom_sci'] != '' ) {
$resultat = array_intersect_key( $infos, array_flip($champs_a_garder ) );
$resultat['retenu'] = ( $infos['id'] == $infos['nom_retenu.id'] ) ? "true" : "false";
$retour['espece_imposee'] = true;
$retour['nn_espece_defaut'] = $nnEspeceImposee;
$retour['nom_sci_espece_defaut'] = $resultat['nom_complet'];
$retour['infos_espece'] = $this->array2js($resultat, true);
$retour['infos_espece'] = $this->array2js( $resultat, true );
}
}
return $retour;
}
 
protected function getReferentielImpose() {
$referentiel_impose = true;
if (!empty($_GET['referentiel']) && $_GET['referentiel'] != "autre") {
$this->ns_referentiel = $_GET['referentiel'];
} else if (isset($this->configProjet['referentiel'])) {
$this->ns_referentiel = $this->configProjet['referentiel'];
} else if (isset($this->configMission['referentiel'])) {
$this->ns_referentiel = $this->configMission['referentiel'];
} else {
$referentiel_impose = false;
}
return $referentiel_impose;
}
 
/**
* Trie par nom français les taxons lus dans le fichier tsv
256,7 → 397,7
}
return $taxons;
}
 
/**
* @TODO documenter
* @return array
273,7 → 414,7
$nomFrTitle = $taxon['nom_sel'].
($taxon['nom_ret'] != $taxon['nom_sel']? ' - '.$taxon['nom_ret'] : '' ).
($taxon['nom_fr_autre'] != '' ? ' - '.$taxon['nom_fr_autre'] : '' );
 
if ($taxon['groupe'] == 'special') {
$nomsSpeciaux[] = array(
'num_nom' => $taxon['num_nom_sel'],
301,7 → 442,7
}
return array('speciaux' => $nomsSpeciaux, 'sci-et-fr' => $nomsAAfficher);
}
 
/**
* Lit une liste de taxons depuis un fichier tsv fourni
*/
319,7 → 460,7
}
return $taxons;
}
 
/**
* Découpe un fihcier tsv
*/
338,7 → 479,7
}
return $data;
}
 
/**
* Convertit un tableau PHP en Javascript - @WTF pourquoi ne pas faire un json_encode ?
* @param array $array
375,110 → 516,6
}
return $tableauJs;
}
private function remove_accents($string) {
if ( !preg_match('/[\x80-\xff]/', $string) ) return $string;
$chars = array(
// Decompositions for Latin-1 Supplement
chr(195).chr(128) => 'A', chr(195).chr(129) => 'A',
chr(195).chr(130) => 'A', chr(195).chr(131) => 'A',
chr(195).chr(132) => 'A', chr(195).chr(133) => 'A',
chr(195).chr(135) => 'C', chr(195).chr(136) => 'E',
chr(195).chr(137) => 'E', chr(195).chr(138) => 'E',
chr(195).chr(139) => 'E', chr(195).chr(140) => 'I',
chr(195).chr(141) => 'I', chr(195).chr(142) => 'I',
chr(195).chr(143) => 'I', chr(195).chr(145) => 'N',
chr(195).chr(146) => 'O', chr(195).chr(147) => 'O',
chr(195).chr(148) => 'O', chr(195).chr(149) => 'O',
chr(195).chr(150) => 'O', chr(195).chr(153) => 'U',
chr(195).chr(154) => 'U', chr(195).chr(155) => 'U',
chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y',
chr(195).chr(159) => 's', chr(195).chr(160) => 'a',
chr(195).chr(161) => 'a', chr(195).chr(162) => 'a',
chr(195).chr(163) => 'a', chr(195).chr(164) => 'a',
chr(195).chr(165) => 'a', chr(195).chr(167) => 'c',
chr(195).chr(168) => 'e', chr(195).chr(169) => 'e',
chr(195).chr(170) => 'e', chr(195).chr(171) => 'e',
chr(195).chr(172) => 'i', chr(195).chr(173) => 'i',
chr(195).chr(174) => 'i', chr(195).chr(175) => 'i',
chr(195).chr(177) => 'n', chr(195).chr(178) => 'o',
chr(195).chr(179) => 'o', chr(195).chr(180) => 'o',
chr(195).chr(181) => 'o', chr(195).chr(182) => 'o',
chr(195).chr(182) => 'o', chr(195).chr(185) => 'u',
chr(195).chr(186) => 'u', chr(195).chr(187) => 'u',
chr(195).chr(188) => 'u', chr(195).chr(189) => 'y',
chr(195).chr(191) => 'y',
// Decompositions for Latin Extended-A
chr(196).chr(128) => 'A', chr(196).chr(129) => 'a',
chr(196).chr(130) => 'A', chr(196).chr(131) => 'a',
chr(196).chr(132) => 'A', chr(196).chr(133) => 'a',
chr(196).chr(134) => 'C', chr(196).chr(135) => 'c',
chr(196).chr(136) => 'C', chr(196).chr(137) => 'c',
chr(196).chr(138) => 'C', chr(196).chr(139) => 'c',
chr(196).chr(140) => 'C', chr(196).chr(141) => 'c',
chr(196).chr(142) => 'D', chr(196).chr(143) => 'd',
chr(196).chr(144) => 'D', chr(196).chr(145) => 'd',
chr(196).chr(146) => 'E', chr(196).chr(147) => 'e',
chr(196).chr(148) => 'E', chr(196).chr(149) => 'e',
chr(196).chr(150) => 'E', chr(196).chr(151) => 'e',
chr(196).chr(152) => 'E', chr(196).chr(153) => 'e',
chr(196).chr(154) => 'E', chr(196).chr(155) => 'e',
chr(196).chr(156) => 'G', chr(196).chr(157) => 'g',
chr(196).chr(158) => 'G', chr(196).chr(159) => 'g',
chr(196).chr(160) => 'G', chr(196).chr(161) => 'g',
chr(196).chr(162) => 'G', chr(196).chr(163) => 'g',
chr(196).chr(164) => 'H', chr(196).chr(165) => 'h',
chr(196).chr(166) => 'H', chr(196).chr(167) => 'h',
chr(196).chr(168) => 'I', chr(196).chr(169) => 'i',
chr(196).chr(170) => 'I', chr(196).chr(171) => 'i',
chr(196).chr(172) => 'I', chr(196).chr(173) => 'i',
chr(196).chr(174) => 'I', chr(196).chr(175) => 'i',
chr(196).chr(176) => 'I', chr(196).chr(177) => 'i',
chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij',
chr(196).chr(180) => 'J', chr(196).chr(181) => 'j',
chr(196).chr(182) => 'K', chr(196).chr(183) => 'k',
chr(196).chr(184) => 'k', chr(196).chr(185) => 'L',
chr(196).chr(186) => 'l', chr(196).chr(187) => 'L',
chr(196).chr(188) => 'l', chr(196).chr(189) => 'L',
chr(196).chr(190) => 'l', chr(196).chr(191) => 'L',
chr(197).chr(128) => 'l', chr(197).chr(129) => 'L',
chr(197).chr(130) => 'l', chr(197).chr(131) => 'N',
chr(197).chr(132) => 'n', chr(197).chr(133) => 'N',
chr(197).chr(134) => 'n', chr(197).chr(135) => 'N',
chr(197).chr(136) => 'n', chr(197).chr(137) => 'N',
chr(197).chr(138) => 'n', chr(197).chr(139) => 'N',
chr(197).chr(140) => 'O', chr(197).chr(141) => 'o',
chr(197).chr(142) => 'O', chr(197).chr(143) => 'o',
chr(197).chr(144) => 'O', chr(197).chr(145) => 'o',
chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe',
chr(197).chr(148) => 'R',chr(197).chr(149) => 'r',
chr(197).chr(150) => 'R',chr(197).chr(151) => 'r',
chr(197).chr(152) => 'R',chr(197).chr(153) => 'r',
chr(197).chr(154) => 'S',chr(197).chr(155) => 's',
chr(197).chr(156) => 'S',chr(197).chr(157) => 's',
chr(197).chr(158) => 'S',chr(197).chr(159) => 's',
chr(197).chr(160) => 'S', chr(197).chr(161) => 's',
chr(197).chr(162) => 'T', chr(197).chr(163) => 't',
chr(197).chr(164) => 'T', chr(197).chr(165) => 't',
chr(197).chr(166) => 'T', chr(197).chr(167) => 't',
chr(197).chr(168) => 'U', chr(197).chr(169) => 'u',
chr(197).chr(170) => 'U', chr(197).chr(171) => 'u',
chr(197).chr(172) => 'U', chr(197).chr(173) => 'u',
chr(197).chr(174) => 'U', chr(197).chr(175) => 'u',
chr(197).chr(176) => 'U', chr(197).chr(177) => 'u',
chr(197).chr(178) => 'U', chr(197).chr(179) => 'u',
chr(197).chr(180) => 'W', chr(197).chr(181) => 'w',
chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y',
chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z',
chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z',
chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z',
chr(197).chr(190) => 'z', chr(197).chr(191) => 's'
);
$string = strtr($string, $chars);
return $string;
}
 
}
?>
?>
/trunk/widget/modules/saisie2/config.defaut.ini
6,4 → 6,4
celChpSupTpl = "http://localhost/service:cel:CelWidgetManager/ChampsEtendus"
languesUrl = "http://api-test.tela-botanica.org/service:eflore:0.1/iso-639-1/langues"
authTpl = "https://beta.tela-botanica.org/widget:reseau:auth?origine=http://localhost/cel/widget/saisie2"
dossierTmp = "https://beta.tela-botanica.org/tmp/widget_saisie/"
dossierTmp = "modules/manager/squelettes/img/images_projets/"
/trunk/widget/modules/saisie2/squelettes/saisie.tpl.html
27,19 → 27,19
<meta property="og:image:height" content="256" />
<meta property="og:locale" content="fr_FR" />
 
<!-- Favicones -->
<!-- Favicone -->
<link rel="shortcut icon" type="image/x-icon" href="https://resources.tela-botanica.org/tb/img/16x16/favicon.ico" />
<!-- CSS -->
<!-- Jquery-ui custom css-->
<link href="https://www.tela-botanica.org/commun/jquery/jquery-ui/1.8.18/css/smoothness/jquery-ui-1.8.18.custom.css" rel="stylesheet" type="text/css" media="screen" />
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous" />
<link rel="stylesheet" type="text/css" href="<?= $url_base; ?>modules/saisie2/squelettes/css/bootstrap-4/css/bootstrap.min.css" />
<!-- Fontawesome -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.1/css/all.css" integrity="sha384-O8whS3fhG2OnA5Kas0Y9l3cfpmYjapjI0E4theH4iuMD+pLhbf6JI0jIMfYcK3yZ" crossorigin="anonymous" />
<!-- Carto -->
<link href="<?= $url_base; ?>modules/saisie2/squelettes/js/tb-geoloc/styles.css" rel="stylesheet" type="text/css" media="screen" />
<!-- STYLE SAISIE -->
<link href="<?= $url_base; ?>modules/saisie2/squelettes/css/saisie.css" rel="stylesheet" type="text/css" media="screen" />
 
<!-- carto -->
<link href="<?= $url_base; ?>modules/saisie2/squelettes/js/tb-geoloc/styles.css" rel="stylesheet" type="text/css" media="screen" />
<!-- Google Analytics -->
<?php if( $prod ): ?>
<?php include "analytics.html"; ?>
49,699 → 49,713
</head>
 
<body>
<?php
echo ( $widget['image_fond'] ) ? '<div id="image-fond" style="' . htmlspecialchars( 'background:url("' . $widget['chemin_fichiers'] . 'image_fond.' . preg_replace( '/(?:imag)?e\/?/','',$widget['image_fond']) . '") no-repeat center center') . '"></div>': '';
?>
<!-- <?php //var_dump($widget['especes']['url_ws_autocompletion_ns']); ?> -->
<div id="zone-appli" class="container">
<div id="zone-appli" class="container" data-projet="<?= $widget['projet']; ?>" data-url-fichiers="<?= $widget['chemin_fichiers']; ?>">
<div class="layout-wrapper page">
<div class="media">
<img class="d-flex mr-3" src="<?= $widget['logo']; ?>" alt="logo<?= $widget['projet']; ?>" />
<div class="media-body">
<h1 class="mt-0"><?= $widget['titre']; ?></h1>
</div>
</div>
 
<div class="row">
<div class="col-md-6">
<div id="description"><?= $widget['description']; ?></div>
</div>
<div class="col-md-6">
<div id="aide" class="well well-lg hidden-sm-down">
<h3><?= $aide['titre']; ?></h3>
<div id="aide-txt" class="hiden-sm-down">
<p><?= $aide['description']; ?></p>
<img class="d-flex mr-3" src="<?php echo htmlspecialchars( $widget['chemin_fichiers'] . 'logo.' . preg_replace( '/(?:imag)?e\/?/','', $widget['logo'] ) ); ?>" alt="logo <?= $widget['projet']; ?>" />
<div class="media-body">
<h1 id="titre-projet" class="mt-0"><?php echo ( $widget['info'] ) ? $widget['titre'] . ' <div id="info-button" class="btn btn-outline-info btn-sm border-0" data-mime-info="' . $widget['info'] . '"><i class="fas fa-info-circle"></i></div>' : $widget['titre']; ?></h1>
</div>
</div>
</div>
</div>
 
<div id="formulaire" class="row mb-3 bloc-top">
<form id="form-observateur" role="form" autocomplete="on">
<h2><?= $observateur['titre']; ?></h2>
<!--la partie tb-navigation vient du widget stats http://svn.tela-botanica.net/websvn/filedetails.php?repname=eFlore%2FApplications.cel&path=%2Ftrunk%2Fwidget%2Fmodules%2Fstats%2Fsquelettes%2Fstats_utilisateur.tpl.html
la partie contenu-souce vient de http://svn.tela-botanica.net/websvn/filedetails.php?repname=Applications.reseau&path=%2Ftrunk%2Fwidget%2Fmodules%2Fnavigation%2Fsquelettes%2Fbootstrap3.tpl.php
le javascript auth.js vient de http://svn.tela-botanica.net/websvn/filedetails.php?repname=Applications.reseau&path=%2Ftrunk%2Fresources%2Fjs%2Fnavigation.js
de l'aide dans la partie Intégration dans l'interface (applications AJAX) de https://www.tela-botanica.org/wikini/DevInformatiques/wakka.php?wiki=MemoIntegrationSSO-->
<!-- prod : -->
<!-- <div id="tb-navigation" data-courant="widget-cel-saisie2" data-squelette="navigation" data-mode="prod"> -->
<!-- beta (test) :-->
<div id="tb-navigation" data-courant="widget-cel-saisie2" data-squelette="navigation" data-mode="test">
<!-- dev (localhost) : -->
<!-- <div id="tb-navigation" data-courant="widget-cel-saisie2" data-squelette="navigation" data-mode="local"> -->
<div class="navbar-default mb-3" id="tb-navbar">
<div class="nav navbar-nav navbar-right row">
<div id="bouton-connexion" class="dropdown col-md-6 col-sm-8">
<label for="bouton-connexion"><?= $observateur['compte']; ?></label>
<a id="connexion" href="<?= $authTpl; ?>" class="btn btn-success mr-1 mb-1" taget="_blank"><?= $observateur['connexion']; ?></a>
<a id="bouton-inscription" href="https://beta.tela-botanica.org/test/inscription" class="btn btn-primary mr-1 mb-1" taget="_blank"><?= $observateur['inscription']; ?></a>
<div class="row">
<div class="col-md-6">
<div id="description"><?= $widget['description']; ?></div>
</div>
<div class="col-md-6">
<div id="aide" class="well well-lg hidden-sm-down">
<h3><?= $aide['titre']; ?></h3>
<div id="aide-txt" class="hiden-sm-down">
<p><?= $aide['description']; ?></p>
</div>
<div id="creation-compte" class="dropdown col-md-6 col-sm-8">
<label for="creation-compte"><?= $observateur['noninscription']; ?></label>
<a id="bouton-anonyme" href="#" class="btn btn-info mr-1 mb-1"><?= $observateur['nonconnexion']; ?></a>
</div>
<div id="utilisateur-connecte" class="dropdown hidden">
<label for="utilisateur-connecte"><?= $observateur['bienvenue']; ?></label>
<a href="#" class="list-tool btn btn-largee btn-primary dropdown-toggle" data-toggle="dropdown">
<span id="nom-complet"></span>
</a>
<div class="dropdown-menu">
<div id="profil-utilisateur"><a href="https://beta.tela-botanica.org/test/inscription" taget="_blank"><?= $observateur['profil']; ?></a></div>
<div id="deconnexion"><a href="#"><?= $observateur['deconnexion']; ?></a></div>
</div>
</div>
</div>
</div>
</div>
<div id="anonyme" class="mb-3 hidden">
<div id="zone-courriel" class="row">
<div class="control-group col-md-6">
<label for="courriel" class="col-sm-8 obligatoire" title="<?= $observateur['courriel-title']; ?>">
<i class="fa fa-envelope" aria-hidden="true"></i>
<?= $observateur['courriel']; ?>
</label>
<div class="col-sm-8 mb-3">
<input id="courriel" name="courriel" class="form-control" type="email" title="<?= $observateur['courriel-title']; ?> ">
<input id="id_utilisateur" name="id_utilisateur" type="hidden">
 
<div id="formulaire" class="row mb-3 bloc-top">
<form id="form-observateur" role="form" autocomplete="on">
<h2><?= $observateur['titre']; ?></h2>
<!--la partie tb-navigation vient du widget stats http://svn.tela-botanica.net/websvn/filedetails.php?repname=eFlore%2FApplications.cel&path=%2Ftrunk%2Fwidget%2Fmodules%2Fstats%2Fsquelettes%2Fstats_utilisateur.tpl.html
la partie contenu-souce vient de http://svn.tela-botanica.net/websvn/filedetails.php?repname=Applications.reseau&path=%2Ftrunk%2Fwidget%2Fmodules%2Fnavigation%2Fsquelettes%2Fbootstrap3.tpl.php
le javascript auth.js vient de http://svn.tela-botanica.net/websvn/filedetails.php?repname=Applications.reseau&path=%2Ftrunk%2Fresources%2Fjs%2Fnavigation.js
de l'aide dans la partie Intégration dans l'interface (applications AJAX) de https://www.tela-botanica.org/wikini/DevInformatiques/wakka.php?wiki=MemoIntegrationSSO-->
<!-- prod : -->
<!-- <div id="tb-navigation" data-courant="widget-cel-saisie2" data-squelette="navigation" data-mode="prod"> -->
<!-- beta (test) :-->
<div id="tb-navigation" data-courant="widget-cel-saisie2" data-squelette="navigation" data-mode="test">
<!-- dev (localhost) : -->
<!-- <div id="tb-navigation" data-courant="widget-cel-saisie2" data-squelette="navigation" data-mode="local"> -->
<div class="navbar-default mb-3" id="tb-navbar">
<div class="nav navbar-nav navbar-right row">
<div id="bouton-connexion" class="volet col-md-6 col-sm-8">
<label for="bouton-connexion"><?= $observateur['compte']; ?></label>
<a id="connexion" href="<?= $authTpl; ?>" class="btn btn-success mr-1 mb-1" taget="_blank"><?= $observateur['connexion']; ?></a>
<a id="bouton-inscription" href="https://beta.tela-botanica.org/test/inscription" class="btn btn-primary mr-1 mb-1" taget="_blank"><?= $observateur['inscription']; ?></a>
</div>
<div id="creation-compte" class="volet col-md-6 col-sm-8">
<label for="creation-compte"><?= $observateur['noninscription']; ?></label>
<a id="bouton-anonyme" href="#" class="btn btn-info mr-1 mb-1"><?= $observateur['nonconnexion']; ?></a>
</div>
<div id="utilisateur-connecte" class="volet hidden">
<label for="utilisateur-connecte"><?= $observateur['bienvenue']; ?></label>
<a href="#" class="list-tool btn btn-large btn-primary volet-toggle" data-toggle="volet">
<span id="nom-complet"></span> <!-- <i class="fas fa-caret-down"></i> -->
</a>
<div class="volet-menu hidden">
<div id="profil-utilisateur">
<a href="https://beta.tela-botanica.org/test/inscription" taget="_blank"><?= $observateur['profil']; ?></a>
</div>
<div id="deconnexion"><a href="#"><?= $observateur['deconnexion']; ?></a></div>
</div>
</div>
</div>
</div>
</div>
<div id="zone-courriel-confirmation" class="control-group col-md-6 hidden">
<label for="courriel_confirmation" class="col-sm-8 obligatoire" title="Veuillez confirmer le courriel.">
<i class="fa fa-envelope" aria-hidden="true"></i>
<?= $observateur['courriel-confirmation']; ?>
</label>
<div class="col-sm-8">
<input id="courriel_confirmation" name="courriel_confirmation" class="form-control" type="email">
 
<div id="anonyme" class="mb-3 hidden">
<div id="zone-courriel" class="row">
<div class="control-group col-md-6">
<label for="courriel" class="col-sm-8 obligatoire" title="<?= $observateur['courriel-title']; ?>">
<i class="fa fa-envelope" aria-hidden="true"></i>
<?= $observateur['courriel']; ?>
</label>
<div class="col-sm-8 mb-3">
<input id="courriel" name="courriel" class="form-control" type="email" title="<?= $observateur['courriel-title']; ?> ">
<input id="id_utilisateur" name="id_utilisateur" type="hidden">
</div>
</div>
 
<div id="zone-courriel-confirmation" class="control-group col-md-6 hidden">
<label for="courriel_confirmation" class="col-sm-8 obligatoire" title="Veuillez confirmer le courriel.">
<i class="fa fa-envelope" aria-hidden="true"></i>
<?= $observateur['courriel-confirmation']; ?>
</label>
<div class="col-sm-8">
<input id="courriel_confirmation" name="courriel_confirmation" class="form-control" type="email">
</div>
</div>
</div>
</div>
</div>
<div id="zone-prenom-nom" class="row hidden">
<div class="control-group col-md-6">
<label for="prenom" class="col-sm-8">
<i class="fa fa-user" aria-hidden="true"></i>
<?= $observateur['prenom']; ?>
</label>
<div class="input-group col-sm-8">
<input id="prenom" name="prenom" class="form-control" type="text">
 
<div id="zone-prenom-nom" class="row hidden">
<div class="control-group col-md-6">
<label for="prenom" class="col-sm-8">
<i class="fa fa-user" aria-hidden="true"></i>
<?= $observateur['prenom']; ?>
</label>
<div class="input-group col-sm-8">
<input id="prenom" name="prenom" class="form-control" type="text">
</div>
</div>
<div class="control-group col-md-6">
<label for="nom" class="col-sm-8">
<i class="fa fa-user" aria-hidden="true"></i>
<?= $observateur['nom']; ?>
</label>
<div class="input-group col-sm-8">
<input id="nom" name="nom" class="form-control" type="text">
</div>
</div>
</div>
</div>
<div class="control-group col-md-6">
<label for="nom" class="col-sm-8">
<i class="fa fa-user" aria-hidden="true"></i>
<?= $observateur['nom']; ?>
</label>
<div class="input-group col-sm-8">
<input id="nom" name="nom" class="form-control" type="text">
</form>
 
<!-- Messages d'erreur du formulaire-->
<div class="row">
<div class="zone-alerte">
<div id="dialogue-bloquer-copier-coller" class="alert alert-info alert-block hidden"">
<a class="close">×</a>
<h4 class="alert-heading"><?= $observateur['alertcc-title']; ?></h4>
<p><?= $observateur['alertcc']; ?></p>
</div>
<div id="dialogue-utilisateur-non-identifie" class="alert alert-warning alert-block hidden">
<a class="close">×</a>
<h4 class="alert-heading"><?= $observateur['alertni-title']; ?></h4>
<p><?= $observateur['alertni']; ?></p>
</div>
</div>
</div>
</div>
</form>
 
<!-- Messages d'erreur du formulaire-->
<div class="row">
<div class="zone-alerte">
<div id="dialogue-bloquer-copier-coller" class="alert alert-info alert-block hidden"">
<a class="close">×</a>
<h4 class="alert-heading"><?= $observateur['alertcc-title']; ?></h4>
<p><?= $observateur['alertcc']; ?></p>
</div>
<div id="dialogue-utilisateur-non-identifie" class="alert alert-warning alert-block hidden">
<a class="close">×</a>
<h4 class="alert-heading"><?= $observateur['alertni-title']; ?></h4>
<p><?= $observateur['alertni']; ?></p>
</div>
</div>
</div>
<form id="form-observation" role="form" autocomplete="on" class="bloc-top">
<h2><?= $observation['titre']; ?></h2>
<div id="zone-observation" class="row">
<div class="col-md-6">
 
<form id="form-observation" role="form" autocomplete="on" class="bloc-top">
<h2><?= $observation['titre']; ?></h2>
<div id="zone-observation" class="row">
<div class="col-md-6">
<div class="control-group">
<label for="geolocalisation" class="col-sm-8 obligatoire" title="<?= $observateur['courriel-title']; ?>">
<i class="fa fa-street-view" aria-hidden="true"></i>
<?= $observation['geolocalisation']; ?>
</label>
<div class="col-sm-8 mb-3">
<input id="geolocalisation" name="geolocalisation" type="hidden">
<tb-geolocation-element id="tb-geolocation"></tb-geolocation-element>
<div class="control-group">
<label for="geolocalisation" class="col-sm-8 obligatoire" title="<?= $observateur['courriel-title']; ?>">
<i class="fa fa-street-view" aria-hidden="true"></i>
<?= $observation['geolocalisation']; ?>
</label>
<div class="col-sm-8 mb-3">
<input id="geolocalisation" name="geolocalisation" type="hidden">
<tb-geolocation-element id="tb-geolocation"></tb-geolocation-element>
</div>
</div>
 
<div class="control-group">
<label for="milieu" class="col-sm-8">
<i class="fa fa-street-view" aria-hidden="true"></i>
<?= $observation['milieu']; ?>
</label>
<div class="col-sm-8 mb-3">
<?php if ( 0 < count( (array) $widget['milieux'] ) ) :?>
<select id="milieu" class="form-control" >
<?php foreach ( $widget['milieux'] as $milieu ) :?>
<option value="<?= $milieu; ?>"><?= $milieu; ?></option>
<?php endforeach; ?>
</select>
<?php else : ?>
<input id="milieu" name="milieu" class="form-control" type="text" placeholder="<?= $observation['milieu-ph']; ?>">
<?php endif; ?>
</div>
</div>
 
</div>
</div>
<div class="control-group">
<label for="milieu" class="col-sm-8">
<i class="fa fa-street-view" aria-hidden="true"></i>
<?= $observation['milieu']; ?>
</label>
<div class="col-sm-8 mb-3">
<?php if ( 0 < count( (array) $widget['milieux'] ) ) :?>
<select id="milieu" class="form-control" >
<?php foreach ( $widget['milieux'] as $milieu ) :?>
<option value="<?= $milieu; ?>"><?= $milieu; ?></option>
<?php endforeach; ?>
</select>
 
<div class="col-md-6">
 
<div class="control-group">
<label for="date_releve" class="col-sm-8 obligatoire" title="">
<i class="fa fa-calendar" aria-hidden="true"></i>
<?= $observation['date']; ?>
</label>
<div class="col-sm-8 mb-3" id="datetimepicker">
<input type="text" id="date_releve" name="date_releve" class="form-control date" placeholder="jj/mm/aaaa" pattern="(^(((0[1-9]|1[0-9]|2[0-8])[\/](0[1-9]|1[012]))|((29|30|31)[\/](0[13578]|1[02]))|((29|30)[\/](0[4,6,9]|11)))[\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)" title="jj/mm/aaaa">
</div>
</div>
 
<?php if( ( $widget['type_especes'] === 'referentiel' || $widget['type_especes'] === '' ) && $widget['referentiel'] === '' ) : ?>
<div class="control-group">
<label for="referentiel" class="col-sm-8 obligatoire" title="">
<i class="fa fa-book" aria-hidden="true"></i>
<?= $observation['referentiel']; ?>
</label>
<div class="col-sm-8 mb-3">
<select id="referentiel" class="form-control" >
<option value="bdtfxr" selected="selected" title="Trachéophytes de France métropolitaine">Métropole (index réduit)</option>
<option value="bdtfx" title="Trachéophytes de France métropolitaine">Métropole (BDTFX)</option>
<option value="bdtxa" title="Trachéophytes des Antilles">Antilles françaises (BDTXA)</option>
<option value="bdtre" title="Trachéophytes de La Réunion">Réunion (BDTRE)</option>
<option value="aublet" title="Guyane">Guyane (AUBLET2)</option>
<option value="florical" title="Nouvelle-Calédonie">Nouvelle-Calédonie (FLORICAL)</option>
<option value="isfan" title="Afrique du Nord">Afrique du Nord (ISFAN)</option>
<option value="apd" title="Afrique de l'Ouest et du Centre">Afrique de l'Ouest et du Centre (APD)</option>
<option value="lbf" title="Liban">Liban (LBF)</option>
<option value="autre" title="Autre/Inconnu">Autre/Inconnu</option>
</select>
</div>
</div>
<?php else : ?>
<input id="milieu" name="milieu" class="form-control" type="text" placeholder="<?= $observation['milieu-ph']; ?>">
<input id="referentiel" name="referentiel" value="<?= $widget['referentiel']; ?>" type="hidden">
<?php endif; ?>
</div>
</div>
</div>
<div class="col-md-6">
<div class="control-group">
<label for="date_releve" class="col-sm-8 obligatoire" title="">
<i class="fa fa-calendar" aria-hidden="true"></i>
<?= $observation['date']; ?>
</label>
<div class="col-sm-8 mb-3" id="datetimepicker">
<input type="text" id="date_releve" name="date_releve" class="form-control date" placeholder="jj/mm/aaaa" pattern="(^(((0[1-9]|1[0-9]|2[0-8])[\/](0[1-9]|1[012]))|((29|30|31)[\/](0[13578]|1[02]))|((29|30)[\/](0[4,6,9]|11)))[\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)" title="jj/mm/aaaa">
</div>
</div>
 
<?php if(($widget['type_especes'] === 'referentiel' || $widget['type_especes'] == '') && $widget['referentiel'] == '' ) : ?>
<div class="control-group">
<label for="referentiel" class="col-sm-8 obligatoire" title="">
<i class="fa fa-book" aria-hidden="true"></i>
<?= $observation['referentiel']; ?>
</label>
<div class="col-sm-8 mb-3">
<select id="referentiel" class="form-control" >
<option value="bdtfxr" selected="selected" title="Trachéophytes de France métropolitaine">Métropole (index réduit)</option>
<option value="bdtfx" title="Trachéophytes de France métropolitaine">Métropole (BDTFX)</option>
<option value="bdtxa" title="Trachéophytes des Antilles">Antilles françaises (BDTXA)</option>
<option value="bdtre" title="Trachéophytes de La Réunion">Réunion (BDTRE)</option>
<option value="aublet" title="Guyane">Guyane (AUBLET2)</option>
<option value="florical" title="Nouvelle-Calédonie">Nouvelle-Calédonie (FLORICAL)</option>
<option value="isfan" title="Afrique du Nord">Afrique du Nord (ISFAN)</option>
<option value="apd" title="Afrique de l'Ouest et du Centre">Afrique de l'Ouest et du Centre (APD)</option>
<option value="lbf" title="Liban">Liban (LBF)</option>
<option value="autre" title="Autre/Inconnu">Autre/Inconnu</option>
</select>
<div class="control-group">
<label for="taxon" class="col-sm-8 obligatoire" title="">
<i class="fa fa-leaf" aria-hidden="true"></i>
<?= $observation['espece']; ?><?php if ( $widget['referentiel'] !== '' && $widget['referentiel'] !== NULL ) echo " (" . $widget['referentiel'] . ")"; ?>
</label>
<div class="col-sm-8 mb-3">
<input id="taxon" name="taxon" class="form-control" type="text">
</div>
</div>
</div>
<?php else : ?>
<input id="referentiel" name="referentiel" value="<?= $widget['referentiel']; ?>" type="hidden">
<?php endif; ?>
 
<div class="control-group">
<label for="taxon" class="col-sm-8 obligatoire" title="">
<i class="fa fa-leaf" aria-hidden="true"></i>
<?= $observation['espece']; ?><?php if ($widget['referentiel'] !== '' && $widget['referentiel'] !== NULL) echo " (".$widget['referentiel'].")"; ?>
</label>
<div class="col-sm-8 mb-3">
<input id="taxon" name="taxon" class="form-control" type="text">
</div>
</div>
<div class="control-group">
<label for="certitude" class="col-sm-8 obligatoire" title="">
<i class="fa fa-question" aria-hidden="true"></i>
<?= $observation['certitude']; ?>
</label>
<div class="col-sm-8 mb-3">
<select id="certitude" name="certitude" class="form-control">
<option value="aDeterminer" ><?= $observation['certADet']; ?></option>
<option value="douteuse" ><?= $observation['certDout']; ?></option>
<option value="certaine" selected="selected" ><?= $observation['certCert']; ?></option>
</select>
</div>
</div>
<div class="control-group">
<label for="notes" class="col-sm-8" title="">
<i class="fa fa-pen" aria-hidden="true"></i>
<?= $observation['notes']; ?>
</label>
<div class="col-sm-8 mb-3">
<textarea id="notes" form="form-obs" class="form-control col-md-12" rows="7" name="notes" placeholder="<?= $observation['notes_ph']; ?>"></textarea>
</div>
</div>
 
<div class="control-group">
<label for="certitude" class="col-sm-8 obligatoire" title="">
<i class="fa fa-question" aria-hidden="true"></i>
<?= $observation['certitude']; ?>
</label>
<div class="col-sm-8 mb-3">
<select id="certitude" name="certitude" class="form-control">
<option value="aDeterminer" ><?= $observation['certADet']; ?></option>
<option value="douteuse" ><?= $observation['certDout']; ?></option>
<option value="certaine" selected="selected" ><?= $observation['certCert']; ?></option>
</select>
</div>
</div>
<div class="control-group">
<label for="notes" class="col-sm-8" title="">
<i class="fa fa-pen" aria-hidden="true"></i>
<?= $observation['notes']; ?>
</label>
<div class="col-sm-8 mb-3">
<textarea id="notes" form="form-obs" class="form-control col-md-12" rows="7" name="notes"
placeholder="<?= $observation['notes_ph']; ?>"></textarea>
</div>
</div>
</form>
 
</div>
</div>
</form>
<!-- Champs supplémentaires -->
<?php if ( isset($widget['chpSupp'] ) && 0 < count( (array) $widget['chpSupp'] ) ) : ?>
<form id="form-supp" class="bloc-top" role="form" autocomplete="on">
<h2><?= $chpsupp['titre']; ?></h2>
<div id="zone-supp" class="row">
<div class="col-md-6">
 
<form id="form-upload" class="form-horizontal bloc-top" action="<?= $url_ws_upload ?>" method="post" enctype="multipart/form-data">
<h2><?= $image['titre']; ?></h2>
<p class="miniature-info" class="discretion help-inline">
<?= $image['aide']; ?>
</p>
<div id ="photos-conteneur" class="control-group">
<div>
<label for="fichier" class="label-file btn btn-large btn-info mb-3">
<span class="label-text"><i class="fas fa-download"></i> <?= $image['ajouter']; ?></span>
<input type="file" id="fichier" name="fichier" class="input-file" accept="image/jpeg" multiple>
<input type="hidden" name="MAX_FILE_SIZE" value="5242880">
</label>
</div>
<?php foreach( $widget['chpSupp'][ $widget['projet'] ]['champs-supp'] as $champ ) : ?>
<?php
$min = ( $champ['fieldValues']['min'] )? ' min="' . $champ['fieldValues']['min'] . '"':'';
$max = ( $champ['fieldValues']['max'] )? ' max="' . $champ['fieldValues']['max'] . '"':'';
$step = ( $champ['fieldValues']['step'] )? ' step="' . $champ['fieldValues']['step'] . '"':'';
$default = ( $champ['fieldValues']['default'] )? ' value="' . $champ['fieldValues']['default'] . '"':'';
$description = ( $champ['description'] )? ' title="' . $champ['description'] . '"':'';
$placeholder = ( $champ['fieldValues']['placeholder'] )? ' placeholder="' . $champ['fieldValues']['placeholder'] . '"':'';
$required = '';
$mandatory = '';
$datepicker = '';
$pattern = '';
$obs_radio = '';
$help = '';
$help_button = '';
 
<div id="miniatures"></div>
<p class="miniature-msg" class="span12">&nbsp;</p>
</div>
</form>
if( $champ['help'] ) {
$help = ' and-help';
$help_button = ' <div class="help-button help-' . $champ['key'] . ' btn btn-outline-info btn-sm border-0" data-key="' . $champ['key'] . '" data-name="' . $champ['name'] . '" data-mime-type="' . $champ['help'] . '"><i class="fas fa-info-circle"></i></div>';
}
 
<!-- Champs supplémentaires -->
<?php if ( isset($widget['chpSupp'] ) && 0 < count( (array) $widget['chpSupp'] ) ) : ?>
<form id="form-supp" role="form" autocomplete="on">
<h2><?= $chpsupp['titre']; ?></h2>
<div id="zone-supp" class="row">
<div class="col-md-6">
if( $champ['mandatory'] ) {
// Attr required
$required = ' required';
// class="obligatoire"
$mandatory = ' obligatoire';
}
 
<?php foreach( $widget['chpSupp']['sauvagessupp']['champs-supp'] as $champ ) :?>
<?php
$min = ( $champ['fieldValues']['min'] )? ' min="' . $champ['fieldValues']['min'] . '"':'';
$max = ( $champ['fieldValues']['max'] )? ' max="' . $champ['fieldValues']['max'] . '"':'';
$step = ( $champ['fieldValues']['step'] )? ' step="' . $champ['fieldValues']['step'] . '"':'';
$default = ( $champ['fieldValues']['default'] )? ' value="' . $champ['fieldValues']['default'] . '"':'';
$description = ( $champ['description'] )? ' title="' . $champ['description'] . '"':'';
$placeholder = ( $champ['fieldValues']['placeholder'] )? ' placeholder="' . $champ['fieldValues']['placeholder'] . '"':'';
$required = '';
$mandatory = '';
$datepicker = '';
$pattern = '';
$obs_radio = '';
$help = '';
$help_button = '';
if( 'date' === $champ['element'] ) {
$datepicker = ' date';
$pattern = ' pattern="(^(((0[1-9]|1[0-9]|2[0-8])[\/](0[1-9]|1[012]))|((29|30|31)[\/](0[13578]|1[02]))|((29|30)[\/](0[4,6,9]|11)))[\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)"';
}
 
if( /*true*/$champ['help'] ) {
$help = ' and-help';
// TODO récupérer un $champ['help_mime_type']
// $champ['help_mime_type'] = 'application/pdf';
$champ['help_mime_type'] = 'image.*';
$help_button = ' <div class="help-button help-' . $champ['key'] . ' btn btn-outline-info btn-sm border-0" data-key="' . $champ['key'] . '" data-name="' . $champ['name'] . '" data-mime-type="' . $champ['help_mime_type'] . '"><i class="fas fa-info-circle"></i></div>';
}
switch( $champ['element'] ) {
case 'radio':
case 'checkbox': ?>
<div class="control-group <?= $champ['element']; ?> mb-3"<?php echo $description . $required; ?>>
<div class="col-sm-8 list-label<?php echo $help . $mandatory; ?>">
<?= $champ['name'] . $help_button; ?>
</div>
<div class="col-sm-8">
 
if( $champ['mandatory'] ) {
// Attr required
$required = ' required';
// class="obligatoire"
$mandatory = ' obligatoire';
}
<?php foreach ( $champ['fieldValues']['listValue'] as $i => $list_value ) : ?>
 
if( 'date' === $champ['element'] ) {
$datepicker = ' date';
$pattern = ' pattern="(^(((0[1-9]|1[0-9]|2[0-8])[\/](0[1-9]|1[012]))|((29|30|31)[\/](0[13578]|1[02]))|((29|30)[\/](0[4,6,9]|11)))[\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)"';
}
<?php
$checked = '';
if ( '#' === substr( $list_value, -1 ) ) :
$checked = ' checked';
$list_value = substr( $list_value, 0, -1 );
endif;
?>
 
switch( $champ['element'] ) {
case 'radio':
case 'checkbox': ?>
<div class="control-group <?= $champ['element']; ?> mb-3"<?php echo $description . $required; ?>>
<div class="col-sm-8 list-label<?php echo $help . $mandatory; ?>">
<?= $champ['name'] . $help_button; ?>
</div>
<div class="col-sm-8">
<?php if( 'other' !== $list_value ) : ?>
<label for="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>" class="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>">
<input type="<?= $champ['element']; ?>" id="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>" name="<?= $champ['key']; ?>" value="<?= $list_value; ?>"<?= $checked; ?> class="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>" data-label="<?= $champ['name']; ?>">
<?= $list_value; ?>
</label>
<?php else : ?>
<label for="other-<?= $champ['key']; ?>">
<input type="<?= $champ['element']; ?>" id="other-<?= $champ['key']; ?>" name="<?= $champ['key']; ?>" value="other" class="other" data-label="<?= $champ['name']; ?>" data-element="<?= $champ['element']; ?>">
Autre
</label>
<?php endif; ?>
 
<?php foreach ( $champ['fieldValues']['listValue'] as $i => $list_value ) : ?>
<?php endforeach; ?>
 
<?php
$checked = '';
if ( '#' === substr( $list_value, -1 ) ) :
$checked = ' checked';
$list_value = substr( $list_value, 0, -1 );
endif;
?>
</div>
</div>
<?php break;
 
<?php if( 'other' !== $list_value ) : ?>
<label for="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>" class="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>">
<input type="<?= $champ['element']; ?>" id="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>" name="<?= $champ['key']; ?>" value="<?= $list_value; ?>"<?= $checked; ?> class="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>" data-label="<?= $champ['name']; ?>">
<?= $list_value; ?>
</label>
<?php else : ?>
<label for="other-<?= $champ['key']; ?>">
<input type="<?= $champ['element']; ?>" id="other-<?= $champ['key']; ?>" name="<?= $champ['key']; ?>" value="other" class="other" data-label="<?= $champ['name']; ?>" data-element="<?= $champ['element']; ?>">
Autre
</label>
<?php endif; ?>
case 'list-checkbox': ?>
<div class="multiselect <?php echo $champ['element'] . $help; ?>">
<label class="col-sm-8<?= $mandatory; ?>"><?= $champ['name'] . $help_button; ?></label>
<div class="control-group col-sm-8 mb-3">
<div class="selectBox">
<select class="form-control" id="list-checkbox-<?= $champ['key']; ?>"<?php echo $description . $required; ?> class="form-control">
<option>Plusieurs choix possibles</option>
</select>
<div class="overSelect"></div>
</div>
<div class="checkboxes hidden">
<?php foreach ( $champ['fieldValues']['listValue'] as $i => $list_value ) : ?>
 
<?php endforeach; ?>
<?php
$checked = '';
if ( '#' === substr( $list_value, -1 ) ) :
$checked = ' checked';
$list_value = substr( $list_value, 0, -1 );
endif;
?>
 
</div>
</div>
<?php break;
<?php if( 'other' !== $list_value ) : ?>
<label for="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>">
<input type="checkbox" id="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>" name="<?= $champ['key']; ?>" value="<?= $list_value; ?>"<?= $checked; ?> class="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>" data-label="<?= $champ['name']; ?>">
<?= $list_value; ?>
</label>
<?php else : ?>
<label for="other-<?= $champ['key']; ?>">
<input type="checkbox" id="other-<?= $champ['key']; ?>" name="<?= $champ['key']; ?>" value="other" class="other" data-label="<?= $champ['name']; ?>" data-element="<?= $champ['element']; ?>">
Autre
</label>
<?php endif; ?>
 
case 'list-checkbox': ?>
<div class="multiselect <?php echo $champ['element'] . $help; ?>">
<label class="col-sm-8<?= $mandatory; ?>"><?= $champ['name'] . $help_button; ?></label>
<div class="control-group col-sm-8 mb-3">
<div class="selectBox">
<select class="form-control" id="list-checkbox-<?= $champ['key']; ?>"<?php echo $description . $required; ?> class="form-control">
<option>Plusieurs choix possibles</option>
</select>
<div class="overSelect"></div>
</div>
<div class="checkboxes hidden">
<?php foreach ( $champ['fieldValues']['listValue'] as $i => $list_value ) : ?>
<?php endforeach; ?>
 
<?php
$checked = '';
if ( '#' === substr( $list_value, -1 ) ) :
$checked = ' checked';
$list_value = substr( $list_value, 0, -1 );
endif;
?>
</div>
</div>
</div>
<?php break;
 
<?php if( 'other' !== $list_value ) : ?>
<label for="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>">
<input type="checkbox" id="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>" name="<?= $champ['key']; ?>" value="<?= $list_value; ?>"<?= $checked; ?> class="<?php echo $champ['fieldValues']['cleanListValue'][$i]; ?>" data-label="<?= $champ['name']; ?>">
<?= $list_value; ?>
</label>
<?php else : ?>
<label for="other-<?= $champ['key']; ?>">
<input type="checkbox" id="other-<?= $champ['key']; ?>" name="<?= $champ['key']; ?>" value="other" class="other" data-label="<?= $champ['name']; ?>" data-element="<?= $champ['element']; ?>">
Autre
</label>
<?php endif; ?>
case 'select': ?>
<label for="<?= $champ['key']; ?>" class="col-sm-8<?= $mandatory; ?>"<?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="champ col-sm-8 mb-3">
<div class="select-wrapper add-field-select <?php echo $champ['element'] . $help; ?>">
<select name="<?= $champ['key']; ?>" id="<?= $champ['key']; ?>" class="<?= $champ['key']; ?> form-control"<?= $required; ?> data-label="<?= $champ['name']; ?>">
 
<?php endforeach; ?>
<?php foreach ( $champ['fieldValues']['listValue'] as $list_value ) : ?>
 
</div>
</div>
</div>
<?php break;
<?php
$selected = '';
if ( '#' === substr( $list_value, -1 ) ) :
$selected = ' selected="selected"';
$list_value = substr( $list_value, 0, -1 );
endif;
?>
 
case 'select': ?>
<label for="<?= $champ['key']; ?>" class="col-sm-8<?= $mandatory; ?>"<?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="champ col-sm-8 mb-3">
<div class="select-wrapper add-field-select <?php echo $champ['element'] . $help; ?>">
<select name="<?= $champ['key']; ?>" id="<?= $champ['key']; ?>" class="<?= $champ['key']; ?> form-control"<?= $required; ?> data-label="<?= $champ['name']; ?>">
<?php if( 'other' !== $list_value ) : ?>
<option value="<?= $list_value; ?>"<?= $selected; ?>>
<?php echo ucfirst( $list_value ); ?>
</option>
<?php else : ?>
<option class="other form-control is-select" value="other" data-element="<?= $champ['element']; ?>">Autre</option>
<?php endif; ?>
 
<?php foreach ( $champ['fieldValues']['listValue'] as $list_value ) : ?>
<?php endforeach; ?>
 
<?php
$selected = '';
if ( '#' === substr( $list_value, -1 ) ) :
$selected = ' selected="selected"';
$list_value = substr( $list_value, 0, -1 );
endif;
?>
</select>
</div>
</div>
<?php break;
 
<?php if( 'other' !== $list_value ) : ?>
<option value="<?= $list_value; ?>"<?= $selected; ?>>
<?php echo ucfirst( $list_value ); ?>
</option>
<?php else : ?>
<option class="other form-control is-select" value="other" data-element="<?= $champ['element']; ?>">Autre</option>
<?php endif; ?>
case 'textarea': ?>
<div class="control-group">
<label for="<?= $champ['key']; ?>" class="col-sm-8<?php echo $help . $mandatory; ?>" <?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="col-sm-8 mb-3">
<textarea type="<?= $champ['element']; ?>" id="<?= $champ['key']; ?>" name="<?= $champ['key']; ?>" class="<?= $champ['key'] . $help; ?> form-control" <?php echo $description . $placeholder . $required; ?> data-label="<?= $champ['name']; ?>"></textarea>
</div>
</div>
<?php break;
 
<?php endforeach; ?>
case 'range': ?>
<div class="control-group">
<label for="<?= $champ['key']; ?>" class="col-sm-8<?= $help . $mandatory; ?>" <?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="col-sm-8 mb-3 <?php echo ($champ['fieldValues']['min'] || $champ['fieldValues']['max']) ? 'row' : '';?>">
<?php
if ( $champ['fieldValues']['min'] || $champ['fieldValues']['max'] ) {
 
</select>
</div>
</div>
<?php break;
$div_range_min_max = '';
 
case 'file' : ?>
<div class="control-group col-sm-8 mb-3">
<div class="input-file-container<?= $help; ?>">
<input type="<?= $champ['element']; ?>" name="<?= $champ['key']; ?>" class="<?php echo $champ['key'] . ' input-file'; ?> form-control" <?php echo $description . $placeholder . $required; ?> accept="application/pdf, image/*, video/*" data-label="<?= $champ['name']; ?>">
<label for="<?= $champ['key']; ?>" class="label-file<?= $mandatory; ?>" <?= $description; ?>><i class="fas fa-download" aria-hidden="true"></i> <?= $champ['name']; ?></label>
if ( $champ['fieldValues']['min'] ) {
$div_range_min_max =
"<p class=\"col-sm-2 range-values text-center font-weight-bold\">".
"Min " . $champ['fieldValues']['min'] .
"</p>";
}
$div_range_min_max .= '<div class="range-live-value range-values text-center font-weight-bold col-sm-';
 
<?php if ( !$champ['mandatory'] ) : ?>
<div class="remove-file button" name="remove-file" title="Supprimer le fichier"><i class="fas fa-times" aria-hidden="true"></i></div>
<?php endif; ?>
if ( $champ['fieldValues']['min'] && $champ['fieldValues']['max'] ) {
$div_range_min_max .= '8">';
} else {
$div_range_min_max .= '10">';
}
 
</div>
</div>
<?php break;
$div_range_min_max .= '</div>';
 
case 'textarea': ?>
<div class="control-group">
<label for="<?= $champ['key']; ?>" class="col-sm-8<?php echo $help . $mandatory; ?>" <?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="col-sm-8 mb-3">
<textarea type="<?= $champ['element']; ?>" id="<?= $champ['key']; ?>" name="<?= $champ['key']; ?>" class="<?= $champ['key'] . $help; ?> form-control" <?php echo $description . $placeholder . $required; ?> data-label="<?= $champ['name']; ?>"></textarea>
</div>
</div>
<?php break;
if( $champ['fieldValues']['max'] ) {
$div_range_min_max .=
"<p class=\"col-sm-2 range-values text-center font-weight-bold\">".
"Max " . $champ['fieldValues']['max'] .
"</p>";
}
 
case 'range': ?>
<div class="control-group">
<label for="<?= $champ['key']; ?>" class="col-sm-8<?= $help . $mandatory; ?>" <?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="col-sm-8 mb-3">
<input type="<?= $champ['element']; ?>" name="<?= $champ['key']; ?>" class="<?= $champ['key'] . $help; ?> form-control" <?php echo $description . $placeholder . $step . $default . $min . $max . $required; ?> data-label="<?= $champ['name']; ?>">
</div>
</div>
<?php break;
echo $div_range_min_max;
}
?>
<input type="<?= $champ['element']; ?>" name="<?= $champ['key']; ?>" class="custom-range <?= $champ['key'] . $help; ?> form-control" <?= $description . $placeholder . $step . $default . $min . $max . $required; ?> data-label="<?= $champ['name']; ?>">
</div>
</div>
<?php break;
 
case 'number':
case 'date': ?>
<div class="control-group">
<label for="<?= $champ['key']; ?>" class="col-sm-8<?php echo $datepicker . $mandatory; ?>" <?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="col-sm-8 mb-3">
<input type="<?= $champ['element']; ?>" name="<?= $champ['key']; ?>" class="<?= $champ['key'] . $help . $datepicker; ?> form-control"<?php echo $pattern . $description . $placeholder . $step . $default . $min . $max . $required; ?> data-label="<?= $champ['name']; ?>">
</div>
</div>
<?php break;
case 'number':
case 'date': ?>
<div class="control-group">
<label for="<?= $champ['key']; ?>" class="col-sm-8<?php echo $datepicker . $mandatory; ?>" <?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="col-sm-8 mb-3">
<input type="<?= $champ['element']; ?>" name="<?= $champ['key']; ?>" class="<?= $champ['key'] . $help . $datepicker; ?> form-control"<?php echo $pattern . $description . $placeholder . $step . $default . $min . $max . $required; ?> data-label="<?= $champ['name']; ?>">
</div>
</div>
<?php break;
 
case 'text' :
case 'email':
default: ?>
<div class="control-group">
<label for="<?= $champ['key']; ?>" class="col-sm-8<?= $mandatory; ?>" <?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="col-sm-8 mb-3">
<input type="<?= $champ['element']; ?>" name="<?= $champ['key']; ?>" class="<?= $champ['key'] . $help; ?> form-control" <?php echo $description . $placeholder . $required; ?> data-label="<?= $champ['name']; ?>">
</div>
</div>
<?php break;
}
?>
case 'text' :
case 'email':
default: ?>
<div class="control-group">
<label for="<?= $champ['key']; ?>" class="col-sm-8<?= $mandatory; ?>" <?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="col-sm-8 mb-3">
<input type="<?= $champ['element']; ?>" name="<?= $champ['key']; ?>" class="<?= $champ['key'] . $help; ?> form-control" <?php echo $description . $placeholder . $required; ?> data-label="<?= $champ['name']; ?>">
</div>
</div>
<?php break;
}
?>
 
<?php endforeach; ?>
</div>
</div>
</form>
<?php endif; ?><!-- Fin champs supplémentaires -->
<?php endforeach; ?>
</div>
</div>
</form>
<?php endif; ?><!-- Fin champs supplémentaires -->
 
<div id="image" class="row"></div>
</div>
<form id="form-upload" class="form-horizontal bloc-top" action="<?= $url_ws_upload ?>" method="post" enctype="multipart/form-data">
<h2><?= $image['titre']; ?></h2>
<p class="miniature-info" class="discretion help-inline">
<?= $image['aide']; ?>
</p>
<div id ="photos-conteneur" class="control-group">
<div>
<label for="fichier" class="label-file btn btn-large btn-info mb-3">
<span class="label-text"><i class="fas fa-download"></i> <?= $image['ajouter']; ?></span>
<input type="file" id="fichier" name="fichier" class="input-file" accept="image/jpeg" multiple>
<input type="hidden" name="MAX_FILE_SIZE" value="5242880">
</label>
</div>
 
<!-- Bouton cr&ation d'une obs -->
<div class="row mb-3 bloc-bottom">
<div class="centre" title="Une fois les champs remplis, vous pouvez cliquer sur ce bouton pour
ajouter votre observation à la liste à transmettre.">
<a id="ajouter-obs" class="btn btn-primary">
<i class="fas fa-check-square"></i><?= $resume['creer']; ?>
</a>
</div>
</div>
<div id="miniatures"></div>
<p class="miniature-msg" class="span12">&nbsp;</p>
</div>
</form>
 
<!-- Messages d'erreur du formulaire-->
<div class="row">
<div class="zone-alerte">
<div id="dialogue-bloquer-creer-obs" class="alert alert-warning alert-block hidden">
<a class="close">×</a>
<h4 class="alert-heading"><?= $resume['alert10max']; ?></h4>
<p><?= $resume['alert10max-desc']; ?></p>
</div>
</div>
<div class="zone-alerte">
<div id="dialogue-form-invalide" class="alert alert-warning alert-block hidden">
<a class="close">×</a>
<h4 class="alert-heading"><?= $resume['alertchp']; ?></h4>
<p><?= $resume['alertchp-desc']; ?></p>
</div>
</div>
</div>
<div id="image" class="row"></div>
</div>
 
<!-- Affiche le tableau récapitualif des observations ajoutées -->
<div id="zone-liste-obs" class="hidden">
<div class="alert alert-info">
<h2 class="transmission-title"><strong><?= $resume['titre']; ?> <span class="obs-nbre badge badge-info">0</span></strong></h2>
<button id="transmettre-obs" class="btn btn-primary droite" disabled="disabled"
title="<?= $resume['trans-title']; ?>" type="button">
<?= $resume['trans']; ?>
</button>
</div>
<div id="liste-obs" ></div>
<div class="row">
<div class="zone-alerte">
<div id="dialogue-zero-obs" class="alert alert-block hidden">
<a class="close">×</a>
<h4 class="alert-heading"><?= $resume['alert0obs']; ?></h4>
<p><?= $resume['alert0obs-desc']; ?></p>
</div>
<div id="dialogue-obs-transaction-ok" class="alert alert-success alert-block hidden">
<a class="close">×</a>
<h4 class="alert-heading"><?= $resume['info-trans']; ?></h4>
<div class="alert-txt"></div>
</div>
<div id="dialogue-obs-transaction-ko" class="alert alert-error alert-block hidden">
<a class="close">×</a>
<h4 class="alert-heading"><?= $resume['alerttrans']; ?></h4>
<div class="alert-txt"></div>
</div>
</div>
</div>
</div>
<!-- Bouton cr&ation d'une obs -->
<div class="row mb-3 bloc-bottom">
<div class="centre" title="<?= $resume['creer-title']; ?>">
<a id="ajouter-obs" class="btn btn-primary"><i class="fas fa-check-square"></i> <?= $resume['creer']; ?></a>
</div>
</div>
 
<!-- Fenêtres modales -->
<div id="chargement" class="modal-fenetre hidden">
<div id="chargement-centrage" class="modal-contenu">
<div class="progress progress-striped active">
<div id="barre-progression-upload" class="bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="10" style="">
<span class="sr-only">0/10 <?= $resume['nbobs']; ?></span>
</div>
</div>
<p id="chargement-txt" style="color:white;font-size:1.5em;">
<?= $resume['transencours']; ?>
</p>
</div>
</div>
<!-- Messages d'erreur du formulaire-->
<div class="row">
<div class="zone-alerte">
<div id="dialogue-bloquer-creer-obs" class="alert alert-warning alert-block hidden">
<a class="close">×</a>
<h4 class="alert-heading"><?= $resume['alert10max']; ?></h4>
<p><?= $resume['alert10max-desc']; ?></p>
</div>
</div>
<div class="zone-alerte">
<div id="dialogue-form-invalide" class="alert alert-warning alert-block hidden">
<a class="close">×</a>
<h4 class="alert-heading"><?= $resume['alertchp']; ?></h4>
<p><?= $resume['alertchp-desc']; ?></p>
</div>
</div>
</div>
 
<!-- Templates HTML -->
<div id="tpl-transmission-ok" class="hidden">
<p class="msg">
<?= $resume['transok']; ?>
</p>
</div>
<div id="tpl-transmission-ko" class="hidden">
<p class="msg">
<?= $resume['transko']; ?>
</p>
</div>
</div>
</div>
<div id="help-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="help-modal-label" style="display: none;" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="help-modal-label"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="print_content"></div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
</div>
</div>
</div>
</div>
<!-- carto -->
<script type="text/javascript" src="<?= $url_base; ?>modules/saisie2/squelettes/js/tb-geoloc/tb-geoloc-custom-element.js"></script>
<script>
var tbGeolocation = document.getElementById('tb-geolocation');
tbGeolocation.addEventListener("location", function(location) {
console.log(location.detail);
});
</script>
<!-- Jquery -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/1.11.1/jquery-1.11.1.min.js"></script>
<!-- Affiche le tableau récapitualif des observations ajoutées -->
<div id="zone-liste-obs" class="hidden">
<div class="alert alert-info">
<h2 class="transmission-title"><strong><?= $resume['titre']; ?> <span class="obs-nbre badge badge-info">0</span></strong></h2>
<button id="transmettre-obs" class="btn btn-primary droite" disabled="disabled"
title="<?= $resume['trans-title']; ?>" type="button">
<?= $resume['trans']; ?>
</button>
</div>
<div id="liste-obs" ></div>
<div class="row">
<div class="zone-alerte">
<div id="dialogue-zero-obs" class="alert alert-block hidden">
<a class="close">×</a>
<h4 class="alert-heading"><?= $resume['alert0obs']; ?></h4>
<p><?= $resume['alert0obs-desc']; ?></p>
</div>
<div id="dialogue-obs-transaction-ok" class="alert alert-success alert-block hidden">
<a class="close">×</a>
<h4 class="alert-heading"><?= $resume['info-trans']; ?></h4>
<div class="alert-txt"></div>
</div>
<div id="dialogue-obs-transaction-ko" class="alert alert-error alert-block hidden">
<a class="close">×</a>
<h4 class="alert-heading"><?= $resume['alerttrans']; ?></h4>
<div class="alert-txt"></div>
</div>
</div>
</div>
</div>
 
<!-- Jquery UI : nécessaire pour le minicalendrier et l'auto-complétion -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/jquery-ui/1.11.0/js/jquery-ui.min.js"></script>
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/jquery-ui/1.11.0/js/datepicker-fr.js"></script>
<!-- Jquery Plugins -->
<!-- Jquery Validate : nécessaire pour la validation des formulaires -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/validate/1.11.1/jquery.validate.min.js"></script>
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/validate/1.11.1/additional-methods.min.js"></script>
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/validate/1.11.1/messages_fr.js"></script>
<!-- Jquery Form :nécessaire pour l'upload des images -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/form/3.51/jquery.form.min.js"></script>
<!-- Bootstrap -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<!-- Authentification -->
<script type="text/javascript" src="<?= $url_base; ?>modules/saisie2/squelettes/js/auth.js"></script>
<!-- Connexion, bloc de prévisualisation, date -->
<script type="text/javascript" src="<?= $url_base; ?>modules/saisie2/squelettes/js/WidgetSaisie.js"></script>
<script type="text/javascript" src="<?= $url_base; ?>modules/saisie2/squelettes/js/champs-supp.js"></script>
<script type="text/javascript">
//<![CDATA[
$( document ).ready( function() {
<!-- Fenêtres modales -->
<div id="chargement" class="modal-fenetre hidden">
<div id="chargement-centrage" class="modal-contenu">
<div class="progress progress-striped active">
<div id="barre-progression-upload" class="bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="10" style="">
<span class="sr-only">0/10 <?= $resume['nbobs']; ?></span>
</div>
</div>
<p id="chargement-txt" style="color:white;font-size:1.5em;">
<?= $resume['transencours']; ?>
</p>
</div>
</div>
 
// OMG un modèle objet !!
var widget = new WidgetSaisie();
<!-- Templates HTML -->
<div id="tpl-transmission-ok" class="hidden">
<p class="msg"><?= $resume['transok']; ?></p>
</div>
<div id="tpl-transmission-ko" class="hidden">
<p class="msg"><?= $resume['transko']; ?></p>
</div>
</div>
</div>
<div id="help-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="help-modal-label" style="display: none;" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="help-modal-label"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="print_content"></div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
</div>
</div>
</div>
</div>
<!-- carto -->
<script type="text/javascript" src="<?= $url_base; ?>modules/saisie2/squelettes/js/tb-geoloc/tb-geoloc-custom-element.js"></script>
<script>
var tbGeolocation = document.getElementById('tb-geolocation');
tbGeolocation.addEventListener("location", function(location) {
console.log(location.detail);
});
</script>
 
//
//
//
// La présence du parametre 'debug' dans l'URL enclenche le débogage
widget.debug = <?= isset( $_GET['debug'] ) ? 'true' : 'false'; ?>;
// La présence du parametre 'html5' dans l'URL enclenche les fonctions avancées HTML5
widget.html5 = <?= isset($_GET['html5']) ? 'true' : 'false'; ?>;
// Mot-clé du widget/projet
widget.tagProjet = "WidgetSaisie";
// Mots-clés à ajouter aux images
widget.tagImg = "<?= isset($_GET['tag-img']) ? $_GET['tag-img'] : ''; ?>";
widget.separationTagImg = "<?= isset($_GET['motcle']) && isset($_GET['tag-img']) ? ',' : ''; ?>";
widget.tagImg = <?= isset($_GET['motcle']) ? "'".$_GET['motcle']."' + widget.separationTagImg + widget.tagImg" : 'widget.tagImg'; ?>;
// Mots-clés à ajouter aux observations
widget.tagObs = "<?= isset($_GET['tag-obs']) ? $_GET['tag-obs'] : ''; ?>";
widget.separationTagObs = "<?= isset($_GET['projet']) && isset($_GET['tag-obs']) ? ',' : ''; ?>";
widget.tagObs = <?= isset($_GET['projet']) ? "'".$_GET['projet']."' + widget.separationTagObs + widget.tagObs" : 'widget.tagObs'; ?>;
// Précharger le formulaire avec les infos d'une observation
widget.obsId = "<?=isset($_GET['id-obs']) ? $_GET['id-obs'] : ''?>";
// URL du web service réalisant l'insertion des données dans la base du CEL.
widget.serviceSaisieUrl = "<?=$url_ws_saisie?>";
// URL du web service permettant de récupérer les infos d'une observation du CEL.
widget.serviceObsUrl = "<?=$url_ws_obs?>";
//
//
//
<!-- Jquery -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/1.11.1/jquery-1.11.1.min.js"></script>
 
// langue
widget.langue = "<?= $widget['langue']; ?>";
// Squelette d'URL du web service de l'annuaire.
widget.serviceAnnuaireIdUrl = "<?= $url_ws_annuaire; ?>";
// URL de l'icône du chargement en cours
widget.chargementIconeUrl = "<?= $url_base?>modules/saisie/squelettes/defaut/img/icones/chargement.gif";
// URL de l'icône du chargement en cours d'une image
widget.chargementImageIconeUrl = "<?= $url_base?>modules/saisie/squelettes/defaut/img/icones/chargement-image.gif";
// URL de l'icône du calendrier
widget.calendrierIconeUrl = "<?= $url_base?>modules/saisie/squelettes/defaut/img/icones/calendrier.png";
// URL de l'icône pour une photo manquante
widget.pasDePhotoIconeUrl = "<?= $url_base?>modules/saisie/squelettes/defaut/img/icones/pasdephoto.png";
<!-- Jquery UI : nécessaire pour le minicalendrier et l'auto-complétion -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/jquery-ui/1.11.0/js/jquery-ui.min.js"></script>
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/jquery-ui/1.11.0/js/datepicker-fr.js"></script>
<!-- Jquery Plugins -->
<!-- Jquery Validate : nécessaire pour la validation des formulaires -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/validate/1.11.1/jquery.validate.min.js"></script>
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/validate/1.11.1/additional-methods.min.js"></script>
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/validate/1.11.1/messages_fr.js"></script>
<!-- Jquery Form :nécessaire pour l'upload des images -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/form/3.51/jquery.form.min.js"></script>
<!-- Bootstrap -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<!-- Authentification -->
<script type="text/javascript" src="<?= $url_base; ?>modules/saisie2/squelettes/js/auth.js"></script>
<!-- Connexion, bloc de prévisualisation, date -->
<script type="text/javascript" src="<?= $url_base; ?>modules/saisie2/squelettes/js/WidgetSaisie.js"></script>
<script type="text/javascript" src="<?= $url_base; ?>modules/saisie2/squelettes/js/champs-supp.js"></script>
<script type="text/javascript">
//<![CDATA[
$( document ).ready( function() {
 
// Code du référentiel utilisé pour les nom scientifiques.
widget.nomSciReferentiel = "<?= strtolower( $widget['referentiel'] ); ?>";
// Indication de la présence d'une espèce imposée
widget.especeImposee = "<?= $espece_imposee; ?>";
// Tableau d'informations sur l'espèce imposée
widget.infosEspeceImposee = "<?= $infos_espece; ?>";
// Nombre d'élément dans les listes d'auto-complétion
widget.autocompletionElementsNbre = 20;
// Indication de la présence d'un référentiel imposé
widget.referentielImpose = "<?= $referentiel_impose; ?>";
// OMG un modèle objet !!
var widget = new WidgetSaisie();
 
// URL du web service permettant l'auto-complétion des noms scientifiques
widget.serviceAutocompletionNomSciUrl = "<?= $widget['especes']['url_ws_autocompletion_ns']; ?>?"+
"masque={masque}&"+
"recherche=etendue&"+
"retour.champs=famille,nom_retenu,nom_retenu_complet,num_taxonomique,nom_retenu.id&"+
"ns.structure=au&"+
"navigation.limite=" + widget.autocompletionElementsNbre;
// Squelette d'URL du web service permettant l'auto-complétion des noms scientifiques
widget.serviceAutocompletionNomSciUrlTpl = "<?= $widget['especes']['url_ws_autocompletion_ns_tpl']; ?>?"+
"masque={masque}&"+
"recherche=etendue&"+
"retour.champs=famille,nom_retenu,nom_retenu_complet,num_taxonomique,nom_retenu.id&"+
"retour.tri=alpharet&"+ // tri "à la CeL"
"ns.structure=au&"+
"navigation.limite=" + widget.autocompletionElementsNbre;
// Nombre d'observations max autorisé avant transmission
widget.obsMaxNbre = 10;
// Durée d'affichage en milliseconde des messages d'informations
widget.dureeMessage = 30000;
//
//
//
// Squelette d'URL du web service d'eFlore fournissant les noms de communes.
widget.serviceNomCommuneUrl = "https://api.tela-botanica.org/service:eflore:0.1/osm/nom-commune?lon={lon}&lat={lat}";
// Squelette d'URL du web service d'eFlore fournissant les noms de communes hors de France (localisation approximative).
widget.serviceNomCommuneUrlAlt = "https://api.tela-botanica.org/service:eflore:0.1/wikipedia/nom-commune?lon={lon}&lat={lat}&nbre=1";
// URL du marqueur à utiliser dans la carte Google Map
widget.googleMapMarqueurUrl = "<?=$url_base?>modules/saisie/squelettes/defaut/img/marqueurs/epingle.png";
//
//
//
//
//
//
// La présence du parametre 'debug' dans l'URL enclenche le débogage
widget.debug = <?= isset( $_GET['debug'] ) ? 'true' : 'false'; ?>;
// La présence du parametre 'html5' dans l'URL enclenche les fonctions avancées HTML5
widget.html5 = <?= isset($_GET['html5']) ? 'true' : 'false'; ?>;
// Mot-clé du widget/projet
widget.tagProjet = "WidgetSaisie";
// Mots-clés à ajouter aux images
widget.tagImg = "<?= isset($_GET['tag-img']) ? $_GET['tag-img'] : ''; ?>";
widget.separationTagImg = "<?= isset($_GET['motcle']) && isset($_GET['tag-img']) ? ',' : ''; ?>";
widget.tagImg = <?= isset($_GET['motcle']) ? "'".$_GET['motcle']."' + widget.separationTagImg + widget.tagImg" : 'widget.tagImg'; ?>;
// Mots-clés à ajouter aux observations
widget.tagObs = "<?= isset($_GET['tag-obs']) ? $_GET['tag-obs'] : ''; ?>";
widget.separationTagObs = "<?= isset($_GET['projet']) && isset($_GET['tag-obs']) ? ',' : ''; ?>";
widget.tagObs = <?= isset($_GET['projet']) ? "'".$_GET['projet']."' + widget.separationTagObs + widget.tagObs" : 'widget.tagObs'; ?>;
// Précharger le formulaire avec les infos d'une observation
widget.obsId = "<?= isset($_GET['id-obs']) ? $_GET['id-obs'] : ''; ?>";
// URL du web service réalisant l'insertion des données dans la base du CEL.
widget.serviceSaisieUrl = "<?= $url_ws_saisie; ?>";
// URL du web service permettant de récupérer les infos d'une observation du CEL.
widget.serviceObsUrl = "<?= $url_ws_obs; ?>";
//
//
//
 
// Initialisation du bousin
widget.init();
});
//]]>
// langue
widget.langue = "<?= $widget['langue']; ?>";
// Squelette d'URL du web service de l'annuaire.
widget.serviceAnnuaireIdUrl = "<?= $url_ws_annuaire; ?>";
// URL de l'icône du chargement en cours
widget.chargementIconeUrl = "<?= $url_base; ?>modules/saisie/squelettes/defaut/img/icones/chargement.gif";
// URL de l'icône du chargement en cours d'une image
widget.chargementImageIconeUrl = "<?= $url_base; ?>modules/saisie/squelettes/defaut/img/icones/chargement-image.gif";
// URL de l'icône du calendrier
widget.calendrierIconeUrl = "<?= $url_base; ?>modules/saisie/squelettes/defaut/img/icones/calendrier.png";
// URL de l'icône pour une photo manquante
widget.pasDePhotoIconeUrl = "<?= $url_base; ?>modules/saisie/squelettes/defaut/img/icones/pasdephoto.png";
 
// Code du référentiel utilisé pour les nom scientifiques.
widget.nomSciReferentiel = "<?= strtolower( $widget['referentiel'] ); ?>";
// Indication de la présence d'une espèce imposée
widget.especeImposee = "<?= $espece_imposee; ?>";
// Tableau d'informations sur l'espèce imposée
widget.infosEspeceImposee = "<?= $infos_espece; ?>";
// Nombre d'élément dans les listes d'auto-complétion
widget.autocompletionElementsNbre = 20;
// Indication de la présence d'un référentiel imposé
widget.referentielImpose = "<?= $referentiel_impose; ?>";
 
// URL du web service permettant l'auto-complétion des noms scientifiques
widget.serviceAutocompletionNomSciUrl = "<?= $widget['especes']['url_ws_autocompletion_ns']; ?>?"+
"masque={masque}&"+
"recherche=etendue&"+
"retour.champs=famille,nom_retenu,nom_retenu_complet,num_taxonomique,nom_retenu.id&"+
"ns.structure=au&"+
"navigation.limite=" + widget.autocompletionElementsNbre;
// Squelette d'URL du web service permettant l'auto-complétion des noms scientifiques
widget.serviceAutocompletionNomSciUrlTpl = "<?= $widget['especes']['url_ws_autocompletion_ns_tpl']; ?>?"+
"masque={masque}&"+
"recherche=etendue&"+
"retour.champs=famille,nom_retenu,nom_retenu_complet,num_taxonomique,nom_retenu.id&"+
"retour.tri=alpharet&"+ // tri "à la CeL"
"ns.structure=au&"+
"navigation.limite=" + widget.autocompletionElementsNbre;
// Nombre d'observations max autorisé avant transmission
widget.obsMaxNbre = 10;
// Durée d'affichage en milliseconde des messages d'informations
widget.dureeMessage = 30000;
//
//
//
// Squelette d'URL du web service d'eFlore fournissant les noms de communes.
widget.serviceNomCommuneUrl = "https://api.tela-botanica.org/service:eflore:0.1/osm/nom-commune?lon={lon}&lat={lat}";
// Squelette d'URL du web service d'eFlore fournissant les noms de communes hors de France (localisation approximative).
widget.serviceNomCommuneUrlAlt = "https://api.tela-botanica.org/service:eflore:0.1/wikipedia/nom-commune?lon={lon}&lat={lat}&nbre=1";
// URL du marqueur à utiliser dans la carte Google Map
widget.googleMapMarqueurUrl = "<?=$url_base?>modules/saisie/squelettes/defaut/img/marqueurs/epingle.png";
//
//
//
 
// Initialisation du bousin
widget.init();
});
//]]>
</script>
 
<!-- Barre de navigation -->
/trunk/widget/modules/saisie2/squelettes/css/saisie.css
6,6 → 6,13
font-weight: 300;
}
 
#zone-appli {
padding: 2rem;
border-radius: 0.3rem;
background-color: rgba(255, 255, 255, 0.9);
margin-top: 2rem;
}
 
h1, h2, h3, h4, h5 {
font-family: Muli,sans-serif;
}
274,11 → 281,7
margin-bottom: 0;
}
 
.open > a {
outline: 0;
}
 
.dropdown {
.volet {
height: 5rem;
}
 
286,10 → 289,6
height: auto;
}
 
#zone-courriel-confirmation {
 
}
 
#bouton-connexion,
#creation-compte {
display: -ms-flexbox;
315,16 → 314,12
width: 100%;
}
 
.navbar-default .navbar-nav > .dropdown #bouton-anonyme,
.navbar-default .navbar-nav > .dropdown #bouton-inscription {
.navbar-default .navbar-nav > .volet #bouton-anonyme,
.navbar-default .navbar-nav > .volet #bouton-inscription {
width: auto;
}
 
.navbar-default .navbar-nav > .dropdown > a {
/* width: auto;
position: relative;*/
/* border: 1px solid #ccc;
border: 1px solid rgba(0,0,0,.15);*/
.navbar-default .navbar-nav > .volet > a {
margin-left: 0.2rem;
}
 
340,15 → 335,21
border-color: #9ab227;
}
 
.navbar-default .navbar-nav #utilisateur-connecte.dropdown {
.navbar-default .navbar-nav #utilisateur-connecte.volet {
padding-left: 2rem;
}
 
.navbar-default .navbar-nav #utilisateur-connecte.dropdown > a {
.navbar-default .navbar-nav #utilisateur-connecte.volet > a {
margin-left: 0;
}
 
.navbar-default .navbar-nav #utilisateur-connecte.dropdown.open .dropdown-menu a {
.navbar-default .navbar-nav #utilisateur-connecte.volet #profil-utilisateur,
.navbar-default .navbar-nav #utilisateur-connecte.volet #deconnexion {
padding: 0 0.75rem;
margin: 0.2rem 0;
}
 
.navbar-default .navbar-nav #utilisateur-connecte.volet .volet-menu a {
font-size: 0.8rem;
font-weight: 400;
color: #606060;
358,39 → 359,25
width: 100%;
padding-left: 5px;
line-height: 25px;
outline: 0;
}
 
.navbar-default .navbar-nav #utilisateur-connecte.dropdown.open .dropdown-menu a:hover,
.navbar-default .navbar-nav #utilisateur-connecte.dropdown.open .dropdown-menu a:focus {
.navbar-default .navbar-nav #utilisateur-connecte.volet #profil-utilisateur:hover,
.navbar-default .navbar-nav #utilisateur-connecte.volet #deconnexion:hover,
.navbar-default .navbar-nav #utilisateur-connecte.volet #profil-utilisateur:focus,
.navbar-default .navbar-nav #utilisateur-connecte.volet #deconnexion:focus {
background: #1e90ff;
color: #fff;
}
 
/*.navbar-default .navbar-nav .dropdown .dropdown-toggle::after {
display: none;
.navbar-default .navbar-nav #utilisateur-connecte.volet .volet-menu a:hover,
.navbar-default .navbar-nav #utilisateur-connecte.volet .volet-menu a:focus {
color: #fff;
}
*/
/*.navbar-default .navbar-nav > #utilisateur-connecte.open > a:focus,
.navbar-default .navbar-nav > .dropdown#utilisateur-connecte > a:hover {
border-right: 3px solid #92ad27;
}*/
 
.navbar-right .dropdown-menu {
/* left: auto;
right: 0;*/
}
.navbar-nav .open > .dropdown-menu {
display: inline-block;
}
.navbar-nav .dropdown-menu {
.navbar-nav .volet-menu {
position: absolute;
left: 0;
right: 0;
top: 100%;
z-index: 1000;
min-width: auto;
margin-top: -10px;
margin-left: 1.9rem;
list-style: none;
background-color: #fff;
border: 1px solid #ccc;
398,13 → 385,19
border-radius: 4px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
background-clip: padding-box;
}
 
.dropdown-menu div a {
.volet-menu div a {
color: #222;
}
 
.navbar-default .navbar-nav #utilisateur-connecte .volet-toggle::after {
font-family: "Font Awesome 5 Free";
font-size: 0.8rem;
font-weight: 900;
content: '\f0d7'
}
 
/*************************************************************************/
 
#zone-appli #formulaire #form-supp #zone-supp .multiselect.list-checkbox {
509,6 → 502,15
 
/*************************************************************************/
 
.range-values {
color: #606060;
}
 
.range-live-value {
padding-top: 1rem;
font-size: 1rem;
}
 
/*******************************************/
 
.label-file {
660,6 → 662,10
color: #499fb7;
}
 
#zone-prenom-nom #prenom,
#zone-prenom-nom #nom {
z-index: 0;
}
 
#transmettre-obs{
text-align: right;
677,6 → 683,23
float: right;
}
 
#image-fond {
position: fixed;
top:0;
bottom: 0;
left: 0;
right: 0;
z-index: -1;
min-width: 100%;
background-attachment: fixed;
margin: 0;
padding: 0;
}
 
.modal-open, body.modal-open {
overflow: inherit !important;
}
 
/*************************************/
 
@media screen and ( max-width: 765px ) {
/trunk/widget/modules/saisie2/squelettes/js/champs-supp.js
5,6 → 5,14
* des éléments "spéciaux" *
*************************************/
 
// Volet de profil/déconnexion
function connexionDprodownMenu() {
$( '#utilisateur-connecte .volet-toggle, #profil-utilisateur a, #deconnexion a' ).click( function( event ) {
event.preventDefault();
$( '#utilisateur-connecte .volet-menu' ).toggleClass( 'hidden' );
});
}
 
// Logique d'affichage pour le input type=file
function inputFile() {
// Initialisation des variables
16,62 → 24,6
$( '#' + $( this ).attr( 'for' ) + '.input-file' ).click();
}
});
// // Affiche un retour visuel dès que input:file change
// $('#form-supp').on( 'change', '.input-file', function( event ) {
// // Il est possible de supprimer un fichier
// // donc on vérifie que le 'change' est un ajout ou modification
// if( !$.isEmptyObject( event.target.files[0] ) ) {
// var file = event.target.files[0],
// fileId = $( this ).attr( 'id' ),
// $thisFile = $( this ).parent('.label-file.' + fileId ),
// $imageContainer = $( '#miniatures' ),
// $theReturn = $( '.' + fileId + 'Img') || false,
// fileImgHtml = '';
 
 
// if( file.type.match( 'image' ) ) {
// fileImgHtml =
// '<div class="' + fileId + 'Img mb-1">'+
// '<p> ' + file.name + '</p>'+
// '<img src="' + URL.createObjectURL( file ) + '">'+
// '</div>';
// }
// // Permettre d'enregistrer une nouvelle image
// if( 0 < $theReturn.length ) {
// // Changement du fichier
// $theReturn.html( fileImgHtml );
// } else {
// $imageContainer.append( fileImgHtml );
// $imageContainer.append( $thisFile );
 
// $( '#photos-conteneur' ).html(
// '<label for="fichier' + countFiles + '" class="label-file btn btn-default fichier' + countFiles + '">'+
// '<i class="fas fa-download"></i> Ajouter une image'+
// '<input type="file" id="fichier' + countFiles + '" name="fichier' + countFiles + '" class="input-file" accept="image/jpeg">'+
// '<input type="hidden" name="MAX_FILE_SIZE" value="5242880">'+
// '</label>'+
// '<hr>'
// );
// countFiles++;
// }
// // Changer le text
// $thisFile.find( '.label-text').html( '<i class="fas fa-exchange-alt"></i> Changer cette image');
// $thisFile.css( 'background-color', '#ea9973' );
// $thisFile.hover( function() {
// $( this ).css( 'background-color', 'rgba(234, 153, 115, 0.7)' );
// });
// $( '.' + fileId + 'Img img').attr( 'width', $thisFile.outerWidth() );
 
// }
// });
// // Annuler le téléchargement
// $( '.remove-file' ).click( function() {
// var $thisFileInput = $( this ).prev( '.input-file-container' ).find( '.input-file' );
// $thisFileInput.wrap( '<form>' ).closest( 'form' ).get(0).reset();
// $thisFileInput.triggerHandler( 'change' );
// $thisFileInput.unwrap();
// $( this ).next( '.file-return' ).addClass( 'hidden' ).empty();
// });
}
 
// Style et affichage des list-checkboxes
104,21 → 56,21
 
// Style et affichage des input type="range"
function inputRangeDisplayNumber() {
$( '#zone-appli' ).on( 'input' , '.range input[type="range"]' , function () {
$( this ).next( 'input[type="number"]' ).val ( $( this ).val() );
$( 'input[type="range"]' ).each( function() {
 
$( this ).siblings( '.range-live-value' ).text( $( this ).val() );
});
$( '#zone-appli' ).on( 'input' , '.range input[type="number"]' , function () {
$( this ).prev( 'input[type="range"]' ).val ( $( this ).val() );
$( '#zone-supp' ).on( 'input' , 'input[type="range"]' , function () {
console.log( 'nello' );
$( this ).siblings( '.range-live-value' ).text( $( this ).val() );
});
}
 
// Activation/Desactivation et contenu de la modale Bootstrap
// https://getbootstrap.com/docs/3.3/javascript/#modals
function previewFieldHelpModal() {
function newFieldsHelpModal() {
$( '#zone-appli' ).on( 'click' , '.help-button' , function ( event ) {
var thisFieldKey = $( this ).data( 'key' ),
// filePath ci dessous est un test, obtenir une vraie url une fois les fichiers d'aide accessibles
filePath = 'https://beta.tela-botanica.org/tmp/eflore_v5_cache/pdf/Fabaceae-3497041375.pdf',
fileMimeType = $( this ).data( 'mime-type' );
 
// Titre
125,9 → 77,9
$( '#help-modal-label' ).text( 'Aide pour : ' + $( this ).data( 'name' ) );
 
if( fileMimeType.match( 'image' ) ) {
$( '#print_content' ).append( '<img src="' + filePath + '" style="max-width:100%">' );
} else if( fileMimeType.match( 'pdf' ) ) {
$( '#print_content' ).append( '<iframe src="' + filePath + '" width="100%" height="650" align="middle" scrolling="no" frameborder="0"></iframe>' );
var extention = fileMimeType.replace( /(?:imag)?e\/?/g , '' );
// var extention = 'jpg';
$( '#print_content' ).append( '<img src="' + CHEMIN_FICHIERS + thisFieldKey + '.' + extention + '" style="max-width:100%" alt="' + thisFieldKey + '" />' );
}
 
// Sortie avec la touche escape
150,6 → 102,44
});
}
 
// Activation/Desactivation et contenu de la modale Bootstrap
// https://getbootstrap.com/docs/3.3/javascript/#modals
function projetHelpModale() {
$( '#info-button' ).click( function ( event ) {
var fileMimeType = $( this ).data( 'mime-info' );
 
// Titre
$( '#help-modal-label' ).text( 'Aide du projet : ' + $( '#titre-projet' ).text() );
 
if( fileMimeType.match( 'image' ) ) {
 
var extention = fileMimeType.replace( /(?:imag)?e\/?/g , '' );
 
$( '#print_content' ).append( '<img src="' + CHEMIN_FICHIERS + 'info.' + extention + '" style="max-width:100%" alt="info projet" />' );
}
 
// Sortie avec la touche escape
$( '#help-modal' ).modal( { keyboard : true } );
// Affichage
$( '#help-modal' ).modal({ show: true });
// Remplacer l'autofocus qui ne fonctionne plus en HTML5
// Message dans la doc de bootstrap :
// Due to how HTML5 defines its semantics,
// the autofocus HTML attribute has no effect in Bootstrap modals.
// To achieve the same effect, use some custom JavaScript
$( '#help-modal' ).on( 'shown.bs.modal' , function () {
$( '#myInput' ).trigger( 'focus' );
})
// Réinitialisation
$( '#help-modal' ).on( 'hidden.bs.modal' , function () {
$( '#help-modal-label' ).text();
$( '#print_content' ).empty();
});
 
});
}
 
 
// Faire apparaitre un champ text "Autre"
function onOtherOption() {
 
253,18 → 243,28
/***************************
* Lancement des scripts *
***************************/
const CHEMIN_FICHIERS = $( '#zone-appli' ).data('url-fichiers');
 
jQuery( document ).ready( function() {
// Affichage des images ou nom des documents importés
 
// Volet de profil/déconnexion
connexionDprodownMenu();
 
// Modale "aide" du projet
projetHelpModale();
// Affichage input file
inputFile();
// Affichage des List-checkbox
inputListCheckbox();
 
// // Affichage des Range
// inputRangeDisplayNumber()
// Affichage des Range
inputRangeDisplayNumber()
 
// Modale "aide"
previewFieldHelpModal();
newFieldsHelpModal();
 
// Ajout/suppression d'un champ texte "Autre"
onOtherOption();
// Récupérer les données entrées dans "Autre"
collectOtherOption();
});
/trunk/widget/modules/saisie2/squelettes/js/WidgetSaisie.js
114,7 → 114,7
dataType: 'xml', // 'xml', 'script', or 'json' (expected server response type)
resetForm: true // reset the form after successful submit
};
$( '#miniature' ).append( '<img id="miniature-chargement" class="miniature" alt="chargement" src="' + this.chargementImageIconeUrl + '">' );
$( '#miniature' ).append( '<img id="miniature-chargement" class="miniature" alt="chargement" src="' + this.chargementImageIconeUrl + '"/>' );
$( '#ajouter-obs' ).attr( 'disabled', 'disabled' );
if( lthis.verifierFormat( $( '#fichier' ).val() ) ) {
$( '#form-upload' ).ajaxSubmit( options );
201,7 → 201,7
var imgNom = $( 'image-nom', reponse ).text();
var html =
'<div class="miniature mb-3 mr-3">'+
'<img class="miniature-img" class="miniature img-rounded" alt="' + imgNom + '" src="' + miniatureUrl + '">'+
'<img class="miniature-img" class="miniature img-rounded" alt="' + imgNom + '" src="' + miniatureUrl + '"/>'+
'<a class="effacer-miniature"><i class="far fa-trash-alt"></i></a>'+
'</div>'
return html;
413,9 → 413,9
// '<span>Station :</span> ' + $( '#station' ).val() + ' '+
'<span>Milieu :</span> '+ $ ( '#milieu' ).val() + ' '+
'</li>'+
'<li>'+
'Commentaires : <span class="discretion">' + $( '#notes' ).val() + '</span>'+
'</li>'+
'<li>'+
'Commentaires : <span class="discretion">' + $( '#notes' ).val() + '</span>'+
'</li>'+
'</ul>'+
'</div>'+
'</div>'+
495,8 → 495,8
WidgetSaisie.prototype.surChangementReferentiel = function() {
this.nomSciReferentiel = $( '#referentiel' ).val();
$( '#taxon' ).val( '' );
//this.initialiserAutocompleteCommune();
//this.initialiserGoogleMap( false );
this.initialiserAutocompleteCommune();
this.initialiserGoogleMap( false );
};
 
WidgetSaisie.prototype.surChangementNbreObs = function() {
/trunk/widget/modules/saisie2/squelettes/js/auth.js
24,8 → 24,8
urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',
urlBaseAuth : 'https://api.tela-botanica.test/service:annuaire:auth'
}
};
*/
};*/
 
/**
* Charge la barre de navigation depuis le widget:reseau:navigation dans un <div id="tb-navigation"> , s'il existe
* dans la page appelante.
/trunk/widget/modules/saisie2/i18n/nl.ini
1,17 → 1,17
[General]
[General]
obligatoire = "obligatoire"
 
[Aide]
titre = "Aide"
description="Cet outil vous permet de partager simplement vos observations avec
le <a target=\"_blank\" href=\"https://www.tela-botanica.org/\">réseau Tela Botanica</a>
(<a target=\"_blank\" href=\"https://www.tela-botanica.org/page:licence\">licence CC-BY-SA</a>).
Identifiez-vous bien pour ensuite retrouver et gérer vos données dans votre
<a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:cel\"> Carnet en ligne</a>.
Créez jusqu'à 10 observations (avec 10Mo max d'images) puis partagez-les avec le bouton 'transmettre'.
Elles apparaissent immédiatement sur les
<a target=\"_blank\" href=\"https://www.tela-botanica.org/flore/france-metropolitaine/\">
cartes et galeries photos </a> du site."
le <a target=\"_blank\" href=\"https://www.tela-botanica.org/\">réseau Tela Botanica</a>
(<a target=\"_blank\" href=\"https://www.tela-botanica.org/page:licence\">licence CC-BY-SA</a>).
Identifiez-vous bien pour ensuite retrouver et gérer vos données dans votre
<a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:cel\"> Carnet en ligne</a>.
Créez jusqu'à 10 observations (avec 10Mo max d'images) puis partagez-les avec le bouton 'transmettre'.
Elles apparaissent immédiatement sur les
<a target=\"_blank\" href=\"https://www.tela-botanica.org/flore/france-metropolitaine/\">
cartes et galeries photos </a> du site."
bouton="Désactiver l'aide"
contact="Pour toute question ou remarque,"
contact2="contactez-nous."
21,8 → 21,8
courriel = "E-mailadres"
courriel-confirmation = "E-mailadres (bevestiging)"
courriel-title = "Veuillez saisir votre adresse courriel."
courriel-input-title = "Saisissez le courriel avec lequel vous êtes inscrit à Tela Botanica. Si vous n'êtes pas inscrit ce n'est pas grave,
vous pourrez le faire ultérieurement. Des informations complémentaires vont vous être demandées : prénom et nom."
courriel-input-title = "Saisissez le courriel avec lequel vous êtes inscrit à Tela Botanica. Si vous n'êtes pas inscrit ce n'est pas grave,
vous pourrez le faire ultérieurement. Des informations complémentaires vont vous être demandées : prénom et nom."
prenom = "Voornaam"
nom = "Naam"
 
37,4 → 37,4
certCert = "Zeker"
certDout= "Twijfelachtig"
certADet= "Te bepalen"
notes = "Opmerkingen"
notes = "Opmerkingen"
/trunk/widget/modules/saisie2/i18n/en.ini
1,21 → 1,21
[General]
obligatoire = "obligatoire"
obligatoire = "required"
 
[Aide]
titre = "Help"
description="This tool allows you to simply share your observations with the Tela Botanica network (under <a target=\"_blank\" href=\"https://www.tela-botanica.org/mentions-legales/#droit-de-reproduction\">
CC BY-SA 2.0 FR licence</a>).<br />
Log in to find and modify your data in your <a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:cel\">
Carnet en ligne</a>. Create up to 10 observations (10Mo max of pictures), save them and share them with the \"transmit\" button.
<a target=\"_blank\" href=\"https://www.tela-botanica.org/wikini/AideCarnetEnLigne/wakka.php?wiki=AideWidgetSaisieCreerTransmettre\">
Under certain conditions</a>, your data can be displayed on our tools
<a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:identiplante\">IdentiPlante</a>,
<a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:pictoflora\">PictoFlora</a>, eFlore,
<a target=\"_blank\" href=\"https://www.tela-botanica.org/widget:cel:cartoPoint\">map</a> and
<a target=\"_blank\" href=\"https://www.tela-botanica.org/widget:cel:photos\">photo gallery</a>.<br />
En cas de question ou pour en savoir plus,
<a target=\"_blank\" href=\"https://www.tela-botanica.org/wikini/AideCarnetEnLigne/wakka.php?wiki=AideWidgetSaisie\"> consultez l'aide</a>
ou contactez-nous à cel_remarques@tela-botanica.org."
Log in to find and modify your data in your <a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:cel\">
Carnet en ligne</a>. Create up to 10 observations (10Mo max of pictures), save them and share them with the \"transmit\" button.
<a target=\"_blank\" href=\"https://www.tela-botanica.org/wikini/AideCarnetEnLigne/wakka.php?wiki=AideWidgetSaisieCreerTransmettre\">
Provided some conditions</a>, your data can be displayed on our tools
<a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:identiplante\">IdentiPlante</a>,
<a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:pictoflora\">PictoFlora</a>, eFlore,
<a target=\"_blank\" href=\"https://www.tela-botanica.org/widget:cel:cartoPoint\">map</a> and
<a target=\"_blank\" href=\"https://www.tela-botanica.org/widget:cel:photos\">photo gallery</a>.<br />
For question or to know more,
<a target=\"_blank\" href=\"https://www.tela-botanica.org/wikini/AideCarnetEnLigne/wakka.php?wiki=AideWidgetSaisie\"> see the help</a>
or contact us at cel_remarques@tela-botanica.org."
bouton="Inactive help"
contact="For any questions,"
contact2="contact us."
24,19 → 24,27
titre = "Observer"
compte = "Use an account"
connexion = "Log in"
nonconnexion = "Observation without registration"
inscription = "Create an account"
noninscription = "I don't want use an account :"
noninscription = "I don't want to use an account :"
bienvenue = "Hello : "
profil = "My profile"
deconnexion = "Log out"
courriel = "Email"
courriel-confirmation = "Email ()"
courriel-title = "Enter your email adress"
courriel-input-title = "Enter your Tela Botanica's inscription mail. If you are not registered,
you can do it later to manage your data."
you can do it later to manage your data."
prenom = "First name"
nom = "Name"
nom = "Last Name"
alertcc-title = "Information : copy/paste"
alertcc = "Please do not copy / paste your email. <br/>
Double entry makes it possible to check for errors. "
Double entry makes it possible to check for errors. "
alertni-title = "Information : Observer not identified"
alertni = "Your observation must be linked to either an account or an email.<br/>
Please choose either to login, to register or to communicate an email address to identify yourself as the author of the observation.<br/>
To find your observations in the <a target=\"_blank\" href=\"http://www.tela-botanica.org/appli:cel\">Online notebook</a>,<br/>
it is necessary to <a target=\"_blank\" href=\"http://www.tela-botanica.org/page:inscription\">register to Tela Botanica</a>."
 
 
[Observation]
43,11 → 51,58
titre = "Observation"
geolocalisation = "Geolocalisation"
milieu = "Environment"
milieu-ph = "wood, field, cliff, ..."
date = "Date"
referentiel = "Referential"
espece = "Species"
certitude = "Identification"
certCert = "Certain"
certDout= "Dubious"
certADet= "To be identified"
notes = "Notes"
certDout = "Dubious"
certADet = "To be identified"
notes = "Notes"
notes-ph = "You can optionally add additional information to your observation."
 
[Image]
titre = "Picture(s) of this plant"
aide = "Photos must be in JPEG format and must not exceed 5MB each."
ajouter = "Add a picuture"
 
 
[Chpsupp]
titre = "Project specific information"
 
[Resume]
creer = "Create"
creer-title = "Once the fields are filled, you can click on this button to add your observation to the list to transmit."
alert10max = "Information : 10 observations maximum"
alert10max-desc = "You've just added your 10th observation.<br/>
If you wish to add ohers, these observations must be transmitted first by clicking the 'transmit' button above."
alertchp = "Information : some fields have errors"
alertchp-desc = "Some fields in this form are poorly filled.<br/>
Please check your data."
titre = "Observations to be transmitted :"
trans-title = "Add the observations below to your Online Notebook and make them public."
trans = "transmit"
alert0obs = "Warning : no observation"
alert0obs-desc = "Please enter observations to transfer them."
info-trans = "Information : transmission of observations"
alerttrans = "Error : transmission of observations"
nbobs = "observations transmitted"
transencours = "Transfer of observations in progress...<br />
This may take several minutes depending on the size of the images and the number of observations to be transferred."
transok = "Your observations have been sent.<br />
They are now available through different visualization tools of the network (
<a href=\"https://www.tela-botanica.org/flore/\">eFlore</a>,
<a href=\"https://www.tela-botanica.org/appli:pictoflora\">images galery</a>,
<a href=\"https://www.tela-botanica.org/appli:identiplante\">identiplante</a>,
<a href=\"https://www.tela-botanica.org/widget:cel:cartoPoint\">cartography (widget)</a>...)<br />
If you want to modify or delete them, you can find them by connecting to your
<a href=\"https://www.tela-botanica.org/appli:cel\"> Online notebook</a>.<br />
Remember that it is necessary to
<a href=\"https://beta.tela-botanica.org/test/page:inscription\"> register on Tela Botanica</a>
beforehand, if you have not already done so."
transko = "An error occurred while transmitting an observation (indicated in red).<br />
You can try to retransmit it by clicking again on the transmit button or delete it and pass on the following.<br />
Nevertheless, the observations no longer appearing in the \ "observations to be transmitted \" list, were sent during your previous attempt. <br />
If the problem remains, you can report the malfunction on <a href=\"<?php echo $url_remarques\; ?>?service=cel\&pageSource=<?php echo urlencode( 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'] )\; ?>\" target=\"_blank\" onclick=\"javascript: window.open( this.getAttribute( 'href' ), 'Tela Botanica - Remarques', config = 'height=700, width=640, scrollbars=yes, resizable=yes' )\; return false\;\">the error reporting form</a>."
 
/trunk/widget/modules/saisie2/i18n/fr.ini
3,23 → 3,23
 
[Aide]
titre = "Aide"
description="Cet outil vous permet de partager simplement vos observations avec le réseau Tela Botanica
(sous <a target=\"_blank\" href=\"https://www.tela-botanica.org/mentions-legales/#droit-de-reproduction\">
licence CC BY-SA 2.0 FR</a>).<br />
Identifiez-vous pour retrouver et gérer vos données dans votre <a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:cel\">
Carnet en ligne</a>. Créez jusqu'à 10 observations (avec 10Mo max d'images) puis enregistrez-les et
partagez-les avec le bouton \"transmettre\".
<a target=\"_blank\" href=\"https://www.tela-botanica.org/wikini/AideCarnetEnLigne/wakka.php?wiki=AideWidgetSaisieCreerTransmettre\">
Sous certaines conditions</a>, elles apparaîtront alors sur
<a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:identiplante\">IdentiPlante</a>,
<a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:pictoflora\">PictoFlora</a>, eFlore, les
<a target=\"_blank\" href=\"https://www.tela-botanica.org/widget:cel:cartoPoint\">cartes</a> et
<a target=\"_blank\" href=\"https://www.tela-botanica.org/widget:cel:photos\">galeries photos</a> du site.<br />
En cas de question ou pour en savoir plus,
<a target=\"_blank\" href=\"https://www.tela-botanica.org/wikini/AideCarnetEnLigne/wakka.php?wiki=AideWidgetSaisie\"> consultez l'aide</a>
ou contactez-nous à cel_remarques@tela-botanica.org.
description="Cet outil vous permet de partager simplement vos observations avec le réseau Tela Botanica
(sous <a target=\"_blank\" href=\"https://www.tela-botanica.org/mentions-legales/\#droit-de-reproduction\">
licence CC BY-SA 2.0 FR</a>).<br />
Identifiez-vous pour retrouver et gérer vos données dans votre <a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:cel\">
Carnet en ligne</a>. Créez jusqu'à 10 observations (avec 10Mo max d'images) puis enregistrez-les et
partagez-les avec le bouton \"transmettre\".
<a target=\"_blank\" href=\"https://www.tela-botanica.org/wikini/AideCarnetEnLigne/wakka.php?wiki=AideWidgetSaisieCreerTransmettre\">
Sous certaines conditions</a>, elles apparaîtront alors sur
<a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:identiplante\">IdentiPlante</a>,
<a target=\"_blank\" href=\"https://www.tela-botanica.org/appli:pictoflora\">PictoFlora</a>, eFlore, les
<a target=\"_blank\" href=\"https://www.tela-botanica.org/widget:cel:cartoPoint\">cartes</a> et
<a target=\"_blank\" href=\"https://www.tela-botanica.org/widget:cel:photos\">galeries photos</a> du site.<br />
En cas de question ou pour en savoir plus,
<a target=\"_blank\" href=\"https://www.tela-botanica.org/wikini/AideCarnetEnLigne/wakka.php?wiki=AideWidgetSaisie\"> consultez l'aide</a>
ou contactez-nous à cel_remarques@tela-botanica.org.
 
Une fois familiarisé avec l'interface vous pouvez cliquer sur ce bouton pour désactiver l'aide."
Une fois familiarisé avec l'interface vous pouvez cliquer sur ce bouton pour désactiver l'aide."
 
bouton="Désactiver l'aide"
contact="Pour toute question ou remarque,"
38,13 → 38,13
courriel = "Courriel"
courriel-confirmation = "Courriel (confirmation)"
courriel-title = "Veuillez saisir votre adresse courriel."
courriel-input-title = "Saisissez le courriel avec lequel vous êtes inscrit à Tela Botanica. Si vous n'êtes pas inscrit ce n'est pas grave,
vous pourrez le faire ultérieurement. Des informations complémentaires vont vous être demandées : prénom et nom."
courriel-input-title = "Saisissez le courriel avec lequel vous êtes inscrit à Tela Botanica. Si vous n'êtes pas inscrit ce n'est pas grave,
vous pourrez le faire ultérieurement. Des informations complémentaires vont vous être demandées : prénom et nom."
prenom = "Prénom"
nom = "Nom"
alertcc-title = "Information : copier/coller"
alertcc = "Merci de ne pas copier/coller votre courriel.<br/>
La double saisie permet de vérifier l'absence d'erreurs."
La double saisie permet de vérifier l'absence d'erreurs."
alertni-title = "Information : observateur non identifié"
alertni = "Votre observation doit être liée soit à un compte, soit à un email.<br/>
Veuillez choisir, soit de vous connecter, soit de vous inscrire, soit communiquer une adresse email afin de vous identifier comme auteur de l'observation.<br/>
77,6 → 77,7
 
[Resume]
creer = "Créer"
creer-title = "Une fois les champs remplis, vous pouvez cliquer sur ce bouton pour ajouter votre observation à la liste à transmettre."
alert10max = "Information : 10 observations maximum"
alert10max-desc = "Vous venez d'ajouter votre 10ème observation.<br/>
Pour en ajouter de nouvelles, il est nécessaire de les transmettre en cliquant sur le bouton ci-dessous."
96,24 → 97,17
d'observations à transférer."
transok = "Vos observations ont bien été transmises.<br />
Elles sont désormais consultables à travers les différents outils de visualisation
du réseau (<a href=\"https://www.tela-botanica.org/flore/\">eFlore</a>,
<a href=\"https://www.tela-botanica.org/appli:pictoflora\">galeries d'images</a>,
<a href=\"https://www.tela-botanica.org/appli:identiplante\">identiplante</a>,
<a href=\"https://www.tela-botanica.org/widget:cel:cartoPoint\">cartographie (widget)</a>...)<br />
Si vous souhaitez les modifier ou les supprimer, vous pouvez les retrouver en vous
connectant à votre <a href=\"https://www.tela-botanica.org/appli:cel\">Carnet en ligne</a>.<br />
N'oubliez pas qu'il est nécessaire de
<a href=\"https://beta.tela-botanica.org/test/page:inscription\">s'inscrire à Tela Botanica</a>
au préalable, si ce n'est pas déjà fait."
du réseau (<a href=\"https://www.tela-botanica.org/flore/\">eFlore</a>,
<a href=\"https://www.tela-botanica.org/appli:pictoflora\">galeries d'images</a>,
<a href=\"https://www.tela-botanica.org/appli:identiplante\">identiplante</a>,
<a href=\"https://www.tela-botanica.org/widget:cel:cartoPoint\">cartographie (widget)</a>...)<br />
Si vous souhaitez les modifier ou les supprimer, vous pouvez les retrouver en vous
connectant à votre <a href=\"https://www.tela-botanica.org/appli:cel\">Carnet en ligne</a>.<br />
N'oubliez pas qu'il est nécessaire de
<a href=\"https://beta.tela-botanica.org/test/page:inscription\">s'inscrire à Tela Botanica</a>
au préalable, si ce n'est pas déjà fait."
transko = "Une erreur est survenue lors de la transmission d'une observation (indiquée en rouge).<br />
Vous pouvez tenter de la retransmettre en cliquant à nouveau sur le bouton transmettre ou bien la supprimer
et transmettre les suivantes.<br />
Néanmoins, les observations n'apparaissant plus dans la liste "observations à transmettre", ont bien été transmises lors de votre précédente tentative. <br />
Si le problème persiste, vous pouvez signaler le dysfonctionnement sur
<a href=\"<?= $url_remarques; ?>?service=cel&pageSource=<?php echo urlencode( 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'] ); ?>\" target=\"_blank\"
onclick=\"
javascript: window.open( this.getAttribute( 'href' ), 'Tela Botanica - Remarques', config = 'height=700, width=640, scrollbars=yes, resizable=yes' );
return false;
\">le formulaire de signalement d'erreurs</a>."
 
 
Vous pouvez tenter de la retransmettre en cliquant à nouveau sur le bouton transmettre ou bien la supprimer
et transmettre les suivantes.<br />
Néanmoins, les observations n'apparaissant plus dans la liste \"observations à transmettre\", ont bien été transmises lors de votre précédente tentative. <br />
Si le problème persiste, vous pouvez signaler le dysfonctionnement sur <a href=\"<?php echo $url_remarques\; ?>?service=cel\&pageSource=<?php echo urlencode( 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'] )\; ?>\" target=\"_blank\" onclick=\"javascript: window.open( this.getAttribute( 'href' ), 'Tela Botanica - Remarques', config = 'height=700, width=640, scrollbars=yes, resizable=yes' )\; return false\;\">le formulaire de signalement d'erreurs</a>."