Subversion Repositories eFlore/Applications.cel

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1049 → Rev 1050

/trunk/widget/modules/saisie/configurations/sauvages.ini
New file
0,0 → 1,0
milieux="Fissures|Pied d'arbre|Mur|Pelouse|Plate bande|Haie|Chemin;"
/trunk/widget/modules/saisie/configurations/sauvages_taxons.tsv
New file
0,0 → 1,44
nom_sel num_nom_sel nom_ret num_nom_ret num_taxon famille nom_fr nom_fr_autre
Pancratium maritimum L. 47379 Pancratium maritimum L. 47379 5834 Amaryllidaceae Lis de mer
Echinophora spinosa L. 23444 Echinophora spinosa L. 23444 166 Apiaceae Panais épineux
Calystegia soldanella (L.) Roem. & Schult. 12352 Calystegia soldanella (L.) Roem. & Schult. 12352 2450 Convolvulaceae Liserons de mer
Eryngium maritimum L. 25390 Eryngium maritimum L. 25390 173 Apiaceae Panicaut
Althaea officinalis L. 3752 Althaea officinalis L. 3752 3806 Malvaceae Guimauve
Narcissus tazetta L. 43691 Narcissus tazetta L. 43691 5824 Amaryllidaceae Narcisse à bouquet
Anacamptis palustris (Jacq.) Bateman, Pridgeon & Chase 4317 Anacamptis palustris (Jacq.) Bateman, Pridgeon & Chase 4317 6542 Orchidaceae Orchis des marais
Legousia speculum-veneris (L.) Chaix 38202 Legousia speculum-veneris (L.) Chaix 38202 1920 Campanulaceae Miroir de Vénus
Centaurea cyanus L. 15139 Centaurea cyanus L. 15139 576 Asteraceae Bleuet
Nigella damascena L. 44101 Nigella damascena L. 44101 4465 Ranunculaceae Nigelle de Damas
Echinops ritro L. 75102 Echinops ritro L. 75102 30094 Asteraceae Oursin bleu
Cucubalus baccifer L. 20167 Cucubalus baccifer L. 20167 2042 Caryophyllaceae Coulichon
Cortaderia selloana (Schult. & Schult.f.) Asch. & Graebn. 19053 Cortaderia selloana (Schult. & Schult.f.) Asch. & Graebn. 19053 6742 Poaceae Herbe de la pampa
Convolvulus althaeoides L. 18732 Convolvulus althaeoides L. 18732 2452 Convolvulaceae Liseron de Provence Fausse guimauve
Narcissus assoanus Dufour 43518 Narcissus assoanus Dufour 43518 5806 Amaryllidaceae Narcisse d'Asso
Lavandula stoechas L. 75211 Lavandula stoechas L. 75211 30203 Lamiaceae Lavande stéchade
Trifolium stellatum L. 69418 Trifolium stellatum L. 69418 14839 Fabaceae Trèfle étoilé
Cneorum tricoccon L. 18308 Cneorum tricoccon L. 18308 2446 Cneoraceae Camélée Garoupe
Amanita ovoidea Amanite ovoide
Leuzea conifera (L.) DC. 38821 Leuzea conifera (L.) DC. 38821 1050 Asteraceae Leuzée conifère Pomme-de-pin
Populus alba L. 51965 Populus alba L. 51965 5124 Salicaceae Peuplier blanc
Iris pseudacorus L. 35960 Iris pseudacorus L. 35960 6103 Iridaceae Iris faux acore
Robinia pseudoacacia L. 56245 Robinia pseudoacacia L. 56245 3124 Fabaceae Acacia Robinier faux acacia
Parnassia palustris L. 47942 Parnassia palustris L. 47942 5203 Parnassiaceae Parnassie des marais
Alisma plantago-aquatica L. 2871 Alisma plantago-aquatica L. 2871 5785 Alismataceae Plantain d'eau
Quercus suber L. 54585 Quercus suber L. 54585 3297 Fagaceae Chêne-liège
Buxus sempervirens L. 11691 Buxus sempervirens L. 11691 1842 Buxaceae Buis
Sorbus torminalis (L.) Crantz 65340 Sorbus torminalis (L.) Crantz 65340 4996 Rosaceae Alisier torminal
Smilax aspera L. 64818 Smilax aspera L. 64818 6383 Smilacaceae Salsepareille
Ruscus aculeatus L. 58960 Ruscus aculeatus L. 58960 6367 Ruscaceae Fragon faux houx
Quercus pubescens Willd. 54438 Quercus pubescens Willd. 54438 13623 Fagaceae Chêne pubescent
Arbutus unedo L. 6055 Arbutus unedo L. 6055 2648 Ericaceae Arbousier
Ailanthus altissima (Mill.) Swingle 2088 Ailanthus altissima (Mill.) Swingle 2088 5537 Simaroubaceae Faux Vernis du Japon
Colchicum autumnale L. 18541 Colchicum multiflorum Brot. 18564 6293 Colchicaceae Colchique d'automne Safran des prés
Carlina acanthifolia All. 14560 Carlina acanthifolia All. 14560 548 Asteraceae Chardon du Larzac (baromêtre) Carline à feuilles d'acanthe
Hormathophylla spinosa (L.) Küpfer 34932 Hormathophylla spinosa (L.) Küpfer 34932 1689 Brassicaceae Alysson épineux
Dactylorhiza latifolia (L.) Baumann & Künkele 21395 Dactylorhiza latifolia (L.) Baumann & Künkele 21395 9693 Orchidaceae Orchis sureau
Ilex aquifolium L. 35676 Ilex aquifolium L. 35676 326 Aquifoliaceae Houx
Scilla lilio-hyacinthus L. 61487 Scilla lilio-hyacinthus L. 61487 6376 Hyacinthaceae Scille lis-jacinthe
Lobaria pulmonaria Lichen pulmonaire
Adiantum capillus-veneris L. 817 Adiantum capillus-veneris L. 817 7327 Adiantaceae Capillaire de Montpellier
Acanthus mollis L. 74930 Acanthus mollis L. 74930 29922 Acanthaceae Acanthe molle
Bothriochloa barbinodis (Lag.) Herter 9977 Bothriochloa barbinodis (Lag.) Herter 9977 6775 Poaceae Pied-de-poule
/trunk/widget/modules/saisie/Saisie.php
19,12 → 19,14
* @copyright Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
*/
class Saisie extends WidgetCommun {
 
const DS = DIRECTORY_SEPARATOR;
const PROJET_DEFAUT = 'biodiversite34';
const WS_SAISIE = "CelWidgetSaisie";
 
private $projet = null;
private $configProjet = null;
 
/**
* Méthode appelée par défaut pour charger ce widget.
*/
38,7 → 40,7
$this->projet = $projet;
}
$this->chargerConfigProjet();
 
$service = (isset($service)) ? $service : $this->projet;
$methode = $this->traiterNomMethodeExecuter($service);
if (method_exists($this, $methode)) {
47,35 → 49,34
$this->messages[] = "Ce type de service '$methode' n'est pas disponible.";
}
 
if (is_null($retour)) {
$contenu = 'Un problème est survenu : '.print_r($this->messages, true);
} else {
$contenu = null;
$mime = null;
if (is_array($retour) && array_key_exists('squelette', $retour)) {
$ext = (isset($retour['squelette_ext'])) ? $retour['squelette_ext'] : '.tpl.html';
$squelette = dirname(__FILE__).self::DS.'squelettes'.self::DS.$this->projet.self::DS.$retour['squelette'].$ext;
$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']);
$mime = isset($retour['mime']) ? $retour['mime'] : null;
} else {
if (count($this->messages) == 0) {
$this->messages[] = "La méthode du sous-service ne renvoie pas les données dans le bon format.";
}
$contenu = 'Un problème est survenu : '.print_r($this->messages, true);
}
$this->envoyer($contenu);
 
$this->envoyer($contenu, $mime);
}
 
private function chargerConfigProjet() {
$fichier_config = dirname(__FILE__).self::DS.'configurations'.self::DS.$this->projet.'.ini';
if (file_exists($fichier_config)) {
if (!$this->configProjet = parse_ini_file($fichier_config)) {
$this->messages[] = "Le fichier ini '$fichier_config' du projet n'a pu être chargé.";
}
}
} else {
$this->messages[] = "Le fichier ini '$fichier_config' du projet n'existe pas.";
}
}
public function executerBiodiversite34() {
$widget['squelette'] = $this->projet;
$widget['donnees'] = array();
$widget['donnees']['url_base'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], '');
$widget['donnees']['taxons'] = $this->recupererListeTaxonBiodiversite34();
$widget['donnees']['milieux'] = $this->parserMilieuxBiodiversite34();
return $widget;
}
 
public function executerTaxons() {
$widget['squelette'] = $this->projet.'_taxons';
$widget['squelette_ext'] = '.tpl.js';
89,7 → 90,83
$widget['donnees']['taxons'] = json_encode($taxons_tries);
return $widget;
}
 
public function executerUploadImage() {
$retour = array();
if ($_FILES['fichier']['error'] == 0) {
if (is_uploaded_file($_FILES['fichier']['tmp_name'])) {
if ($_FILES['fichier']['type'] == 'image/jpeg') {
$dossierStockage = $this->config['chemins']['imagesTempDossier'];
 
$nomFichierOriginal = preg_replace('/[.](jpeg|jpg)$/i', '.jpg', strtolower($_FILES['fichier']['name']));
$originalChemin = $dossierStockage.$nomFichierOriginal;
$deplacementOk = move_uploaded_file($_FILES['fichier']['tmp_name'], $originalChemin);
 
if ($deplacementOk === true) {
$miniatureFichier = str_replace('.jpg', '_min.jpg', $nomFichierOriginal);
$miniatureChemin = $dossierStockage.$miniatureFichier;
 
// Parametres
$largeurIdeale = 100;
$hauteurIdeale = 100;
$qualite = 85;
 
// Calcul de la hauteur et de la largeur optimale de la miniature
$taillesImgOriginale = getimagesize($originalChemin);
$largeurOrigine = $taillesImgOriginale[0];
$hauteurOrigine = $taillesImgOriginale[1];
 
$largeurMin = $largeurIdeale;
$hauteurMin = (int) ($hauteurOrigine * ($largeurIdeale / $largeurOrigine));
if ($hauteurMin > $hauteurIdeale) {
$hauteurMin = $hauteurIdeale;
$largeurMin = (int)($largeurOrigine * ($hauteurMin / $hauteurOrigine));
}
 
// Création de la miniature
$imageOriginale = imagecreatefromjpeg($originalChemin);
$imageMiniature = imagecreatetruecolor($largeurMin, $hauteurMin);
$couleurFond = imagecolorallocate($imageMiniature, 255, 255, 255);
imagefill($imageMiniature, 0, 0, $couleurFond);
imagecopyresized($imageMiniature, $imageOriginale, 0, 0, 0, 0, $largeurMin, $hauteurMin, $largeurOrigine, $hauteurOrigine);
imagejpeg($imageMiniature, $miniatureChemin, $qualite);
imagedestroy($imageMiniature);
imagedestroy($imageOriginale);
 
// Retour des infos
$retour['squelette'] = $this->projet.'_image';
$retour['squelette_ext'] = '.tpl.xml';
$retour['donnees']['urlMiniature'] = sprintf($this->config['chemins']['imagesTempUrlTpl'], $miniatureFichier);
$retour['donnees']['imageNom'] = $nomFichierOriginal;
$retour['mime'] = 'text/xml';
} else {
$this->messages[] = "L'image n'a pu être déplacé sur le serveur.";
}
} else {
$this->messages[] = "L'image n'est pas au format JPEG.";
}
} else {
$this->messages[] = "L'image n'a pu être uploadée :".print_r($_FILES, true);
}
} else {
$this->messages[] = "Une erreur de transfert a eu lieu (téléversement interrompu). ".
"Code erreur : {$_FILES['fichier']['error']}. ".
"Voir : http://php.net/manual/fr/features.file-upload.errors.php";
}
return $retour;
}
 
public function executerBiodiversite34() {
$widget['squelette'] = $this->projet;
$widget['donnees'] = array();
$widget['donnees']['url_base'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], '');
$widget['donnees']['url_ws_saisie'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_SAISIE);
 
$widget['donnees']['taxons'] = $this->recupererListeTaxonBiodiversite34();
$widget['donnees']['milieux'] = $this->parserMilieuxBiodiversite34();
return $widget;
}
 
private function parserMilieuxBiodiversite34() {
$infosMilieux = array();
$milieux = explode('|', $this->configProjet['milieux']);
104,7 → 181,7
ksort($infosMilieux);
return $infosMilieux;
}
 
private function recupererListeTaxonBiodiversite34() {
$taxons = null;
$fichier_tsv = dirname(__FILE__).self::DS.'configurations'.self::DS.'biodiversite34_taxons.tsv';
113,12 → 190,48
} else {
$this->debug[] = "Impossible d'ouvrir le fichier '$fichier_tsv'.";
}
 
$taxons_tries = self::trierTableauMd($taxons, array('nom_fr' => SORT_ASC));
 
return $taxons_tries;
}
 
public function executerSauvages() {
$widget['squelette'] = $this->projet;
$widget['donnees'] = array();
$widget['donnees']['url_base'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], '');
$widget['donnees']['url_ws_saisie'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_SAISIE);
 
$widget['donnees']['taxons'] = $this->recupererListeTaxonSauvages();
$widget['donnees']['milieux'] = $this->parserMilieuxSauvages();
return $widget;
}
 
private function parserMilieuxSauvages() {
$infosMilieux = array();
$milieux = explode('|', $this->configProjet['milieux']);
foreach ($milieux as $milieu) {
$details = explode(';', $milieu);
if (isset($details[1])) {
$infosMilieux[$details[0]] = $details[1];
} else {
$infosMilieux[$details[0]] = '';
}
}
return $infosMilieux;
}
 
private function recupererListeTaxonSauvages() {
$taxons = null;
$fichier_tsv = dirname(__FILE__).self::DS.'configurations'.self::DS.'sauvages_taxons.tsv';
if (file_exists($fichier_tsv) && is_readable($fichier_tsv)) {
$taxons = $this->decomposerFichierTsv($fichier_tsv);
} else {
$this->debug[] = "Impossible d'ouvrir le fichier '$fichier_tsv'.";
}
return $taxons;
}
 
private function decomposerFichierTsv($fichier, $delimiter = "\t"){
$header = NULL;
$data = array();
126,12 → 239,12
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
if (!$header) {
$header = $row;
} else {
} else {
$data[] = array_combine($header, $row);
}
}
fclose($handle);
}
return $data;
return $data;
}
}
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/sauvages.tpl.html
New file
0,0 → 1,254
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sauvages de ma rue</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
<meta name="revisit-after" content="15 days" />
<meta name="robots" content="index,follow" />
<meta name="author" content="Céline VIDAL, Jean-Pascal MILCENT" />
<meta name="keywords" content="Tela Botanica, Natural Solutions, MNHN, Sauvages de ma rue, CEL" />
<meta name="description" content="Widget de saisie simplifié pour le projet Sauvages de ma rue" />
 
<!-- Favicones -->
<link rel="shortcut icon" type="image/x-icon" href="<?=$url_base?>/modules/saisie/squelettes/sauvages/images/favicon.ico" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<!-- Javascript : bibliothèques -->
<!-- Google Map v3 -->
<!--<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"></script>-->
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true&amp;language=fr&amp;region=FR"></script>
<!-- Jquery -->
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/1.7.1/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/jquery-ui/1.8.17/js/jquery-ui-1.8.17.custom.min.js"></script>
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/jquery-ui/1.8.17/js/jquery.ui.datepicker-fr.js"></script>
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/validate/1.9.0/jquery.validate.js"></script>
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/validate/1.9.0/messages_fr.js"></script>
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/form/2.95/jquery.form.min.js"></script>
<script src="<?=$url_base?>saisie?projet=sauvages&amp;service=taxons" type="text/javascript"></script>
<!-- Javascript : appli saisie -->
<script type="text/javascript">
//<![CDATA[
var DEBUG = true;
// URL du web service réalisant l'insertion des données dans la base du CEL.
var SERVICE_SAISIE_URL = "<?=$url_ws_saisie?>";
// URL du marqueur à utiliser dans la carte Google Map
var GOOGLE_MAP_MARQUEUR_URL = "<?=$url_base?>/modules/saisie/squelettes/sauvages/images/marqueurs/fleur.png";
// URL de l'icône du bouton supprimer
var SUPPRIMER_ICONE_URL = "<?=$url_base?>/modules/saisie/squelettes/sauvages/images/icones/supprimer.png";
// URL de l'icône du chargement en cours
var CHARGEMENT_ICONE_URL = "<?=$url_base?>/modules/saisie/squelettes/sauvages/images/icones/chargement.gif";
//]]>
</script>
<script type="text/javascript" src="<?=$url_base?>modules/saisie/squelettes/sauvages/js/sauvages.js"></script>
<!-- CSS -->
<link href="http://www.tela-botanica.org/commun/jquery/jquery-ui/1.8.17/css/ui-darkness/jquery-ui-1.8.17.custom.css" rel="stylesheet" type="text/css" media="screen" />
<link href="<?=$url_base?>modules/saisie/squelettes/sauvages/css/sauvages.css" rel="stylesheet" type="text/css" media="screen" />
</head>
 
<body>
<h1><img src="<?=$url_base?>/modules/saisie/squelettes/sauvages/images/logos/sdmr.png" alt="Sauvages de ma rue : Saisie des observations"/></h1>
<form id="saisie-obs" action="#" enctype="multipart/form-data">
<fieldset id="partie-identification">
<legend>Observateur</legend>
<ul>
<li>
<label for="prenom">Prénom</label>
<input id="prenom" name="prenom" type="text" value=""/>
</li>
<li>
<label for="nom">Nom</label>
<input id="nom" name="nom" type="text" value=""/>
</li>
<li>
<label for="courriel" class="oblig"
title="Veuillez saisir votre adresse courriel. Elle ne sera pas utilisée à des fins commerciales.">
<strong class="obligatoire">*</strong> Courriel
</label>
<input id="courriel" name="courriel" type="text" value=""/>
</li>
<li>
<label for="courriel_confirmation" class="oblig" title="Veuillez saisir confirmer votre adresse courriel">
<strong class="obligatoire">*</strong> Courriel (confirmation)
</label>
<input id="courriel_confirmation" name="courriel_confirmation" type="text" value=""/>
</li>
</ul>
</fieldset>
<h2>Fiche de terrain</h2>
<div id="zone-fiche-terrain">
<fieldset id="partie-station">
<legend>Localisation</legend>
<ul>
<li>
<ul>
<li>
<label for="adresse" class="oblig" title="Veuillez saisir l'adresse du relevé">
<strong class="obligatoire">*</strong> Adresse
</label>
<input id="adresse" name="adresse" type="text" value=""/>
</li>
<li id="map_canvas" style="width:500px; height:240px;" ></li>
<li>
<span id="coordonnees-geo">Les coordonnées g&eacute;ographiques</span>
<ul>
<li id="masque">
<label for="latitude">Latitude</label>
<input id="latitude" name="latitude" type="text" value=""/>
<label for="longitude">Longitude</label>
<input id="longitude" name="longitude" type="text" value=""/>
<span id="lat-lon-info" class="info"
title="Système géodésique mondial, révision de 1984 - Coordonnées non projetées">
(WGS84)
</span>
<input type="button" value="Trouver l'adresse" onclick="codeLatLng()"/>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</fieldset>
<fieldset id="partie-observation">
<legend>Observation</legend>
<ul>
<li>
<label for="date" title="Veuillez indiquer la date du relevé au format jj/mm/aaaa">
<strong class="obligatoire">*</strong> Date du relevé
</label>
<input id="date" name="date" type="text" value="" />
</li>
<li>
<label for="taxon" title="Choisissez une espèce">
<strong class="obligatoire">*</strong>
Espèce
</label>
<select id="taxon" name="taxon">
<option value="">Sélectionner un taxon</option>
<?php foreach ($taxons as $taxon) :?>
<option value="<?=$taxon['num_nom_sel']?>"
title="<?=$taxon['nom_sel'].($taxon['nom_fr_autre'] != '' ? ' - '.$taxon['nom_fr_autre'] : '' )?>">
<?=$taxon['nom_fr']?>
</option>
<?php endforeach; ?>
</select>
</li>
<li>
<label for="liste-milieux" title="Veuillez sélectionner un milieu">
<strong class="obligatoire">*</strong>
Milieu
</label>
<br />
<ul id="liste-milieux">
<?php foreach ($milieux as $milieu => $description) : ?>
<li>
<input type="radio" class="milieu" name="milieu" value="<?=$milieu?>"
<?=($description != '') ? 'title="'.$description.'"': '' ?>/>
<?=$milieu?>
</li>
<?php endforeach; ?>
</ul>
</li>
<li>
<hr class="nettoyage" />
</li>
<li>
<label for="notes">Notes</label>
<textarea id="notes" name="notes" rows="5" cols="4"></textarea>
</li>
</ul>
</fieldset>
</div><!-- zone-fiche-terrain-->
</form>
<div id="zone-fiche-terrain-photo">
<form id="form-upload" action="<?=$url_base?>saisie?projet=sauvages&amp;service=upload-image"
method="post" enctype="multipart/form-data">
<fieldset id="partie-photo">
<legend>Ajouter une photo</legend>
<input type="file" id="fichier" name="fichier"/>
<input type="hidden" name="MAX_FILE_SIZE" value="5242880"/>
<input type="submit" value="charger"/>
<div id="miniature"></div>
<div><button id="effacer-miniature" type="button" >Effacer</button></div>
</fieldset>
</form>
<div>
<button id="ajouter-obs" type="button"> + Ajouter</button>
</div>
</div><!-- zone-fiche-terrain-photo -->
<!-- Affiche le tableau récapitualif des observations ajoutées -->
<div id="zone-liste-obs">
<form action="#" >
<fieldset id="partie-preview">
<legend>Liste des observations à transmettre</legend>
<table id="liste-obs">
<thead>
<tr>
<th>N&deg;</th>
<th>Date</th>
<th>Adresse</th>
<th>Nom</th>
<th>Milieu</th>
<th>Latitude</th>
<th>Longitude</th>
<th>Photo</th>
<th>Notes</th>
<th></th>
</tr>
</thead>
<tbody></tbody>
</table>
<button id="transmettre-obs" type="button">Transmettre</button>
</fieldset>
</form>
</div> <!-- zone-liste-obs : wrap3 -->
<!-- Messages d'erreur du formulaire-->
<div id="dialogue-bloquer-copier-coller" style="display: none;" title="Information copier/coller">
<p>
Merci de ne pas copier/coller votre courriel.<br/>
La double saisie permet de vérifier l'absence d'erreurs.
</p>
</div>
<div id="dialogue-zero-obs" style="display: none;" title="Information aucune observation">
<p>Veuillez saisir des observations pour les transmettres.</p>
</div>
<div id="dialogue-form-invalide" style="display: none;" title="Validation du formulaire">
<p>Certains champs n'ont pas été saisis correctement, veuillez vérifier les champs saisis.</p>
</div>
<div id="dialogue-obs-transaction" style="display: none;" title="Transmission des observations"></div>
<!-- Stats : Google Analytics-->
<script type="text/javascript">
//<![CDATA[
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-20092557-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
//]]>
</script>
</body>
</html>
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/sauvage_taxons.tpl.js
New file
0,0 → 1,0
var taxons = <?=$taxons?>;
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/favicon.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/favicon.ico
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/icones/chargement.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/icones/chargement.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/icones/aide.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/icones/aide.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/icones/supprimer.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/icones/supprimer.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/logos/sdmr.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/logos/sdmr.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/marqueurs/fleur.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/marqueurs/fleur.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/marqueurs/classic.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/marqueurs/classic.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/marqueurs/relief.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/marqueurs/relief.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/marqueurs/panneau.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/images/marqueurs/panneau.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/css/sauvages.css
New file
0,0 → 1,304
@CHARSET "UTF-8";
body {
padding:0;
margin:0;
width:100%;
height:100%;
font-family:Arial;
font-size:12px;
background-color:#FFF;
color:#000;
}
h1 {
font-size:1.6em;
}
h2 {
font-size:1.4em;
text-transform:uppercase;
letter-spacing:0.3em;
padding:5px 10px;
background:#A1CA10;
width:250px;
margin-bottom:0;
margin-left:2px;
-webkit-border-radius: 10px 10px 0 0;-moz-border-radius: 10px 10px 0 0;border-radius: 10px 10px 0 0;
line-height:2em;
}
a, a:active, a:visited {
border-bottom:1px dotted #666;
color:#181;
text-decoration:none;
}
a:active {
outline:none;
}
a:focus {
outline:thin dotted;
}
a:hover {
color:#56B80E;
border-bottom:1px dotted #56B80E;
}
 
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Présentation des listes de définitions */
dl {
width:100%;
}
dt {
float:left;
font-weight:bold;
text-align:top left;
margin-right:0.3em;
}
dd {
width:auto;
margin:0.5em 0;
}
 
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Tableau : */
table {
border:1px solid gray;
border-collapse:collapse;
}
table thead, table tfoot, table tbody {
background-color:Gainsboro;
border:1px solid gray;
color:black;
}
table tbody {
background-color:#FFF;
}
table th {
font-family:monospace;
border:1px dotted gray;
padding:5px;
background-color:Gainsboro;
}
table td {
font-family:arial;
border:1px dotted gray;
padding:5px;
text-align:left;
}
table caption {
font-family:sans-serif;
}
legend {
font-size:1.2em;
color:#000;
text-transform:uppercase;
letter-spacing:0.2em;
padding:5px 10px;
}
 
/*+--------------------------------------------------------------------------------------------------------+*/
/* Générique */
.nettoyage{
clear:both;
}
hr.nettoyage{
visibility:hidden;
}
label[title]:after, th[title]:after, span[title]:after {
content: " " url("../images/icones/aide.png");
}
 
/*+--------------------------------------------------------------------------------------------------------+*/
/* Formulaire générique */
fieldset {
background-color:#fff;
}
input[type="text"], select, textarea {
width:240px;
}
 
/*+--------------------------------------------------------------------------------------------------------+*/
/* Formulaire spécifique */
#zone-fiche-terrain, #zone-fiche-terrain-photo{
background:#A1CA10;
width:600px;
margin-left:2px;
padding-bottom:10px;
}
#zone-fiche-terrain{
-webkit-border-radius: 0 10px 0 0;-moz-border-radius: 0 10px 0 0;border-radius: 0 10px 0 0;
}
#zone-fiche-terrain-photo{
-webkit-border-radius: 0 0 10px 10px;-moz-border-radius: 0 0 10px 10px;border-radius: 0 0 10px 10px;
margin-top:-10px;
}
#zone-liste-obs{
padding-bottom:25px;
margin-top:15px;
-webkit-border-radius: 10px;-moz-border-radius: 10px;border-radius: 10px;
}
#saisie-obs fieldset{
display:block;
}
#saisie-obs label{
font-weight:bold;
}
 
#partie-observation, #partie-preview{
margin-top:10px;
}
#partie-station, #partie-observation, #partie-photo{
width:550px;
margin-left:10px;
background:#E5E5E5;
-webkit-border-radius: 10px;-moz-border-radius: 10px;border-radius: 10px;
}
#partie-station legend, #partie-observation legend, #partie-photo legend{
background:#E5E5E5;
-webkit-border-radius: 10px 10px 0 0 ;-moz-border-radius: 10px 10px 0 0;border-radius: 10px 10px 0 0;
}
#saisie-obs ul {
list-style-type:none;
margin:0;
padding:0;
}
#saisie-obs li {
margin:5px;
}
/*-------------------------------------------------------*/
/* Partie-identification */
#partie-identification, #partie-identification legend{
background:#A1CA10;
-webkit-border-radius: 10px;-moz-border-radius: 10px;border-radius: 10px;
}
#partie-identification{
width:582px;
}
#partie-identification li{
float: left;
margin-left: 20px;
display:inline;
width:250px;
}
#partie-identification label{
/*display:block;*/
}
/*-------------------------------------------------------*/
/* Partie-station */
#partie-station fieldset{
margin-top:0;
}
#partie-station label {
width:75px;
display:block;
float:left;
}
#latitude, #longitude {
width:70px;
float:left;
}
#latitude {
margin-right:5px;
}
#lat-lon-info {
margin-left:5px;
}
#partie-observation label{
width:120px;
float:left;
}
#partie-observation li{
margin :10px;
}
#adresse{
width:290px;
}
#partie-station #partie-lat-lon label.error{
float:left;
width:80px;
}
#partie-observation li li{
width :150px;
float:left;
margin :5px;
}
#partie-observation li li label.error{
position: relative;
margin-top: -38px;
margin-left:50px;
float:left;
}
label[for=milieu]{
display:block;
width:100%;
}
ul#liste-milieux{
padding-top:5px;
}
#liste-milieux li{
display:inline;
}
/*-------------------------------------------------------*/
/* Photo */
#resultat,.resultat {
width:20%;
}
.resultat {
width:30px;
}
#form-upload{
margin-top:10px;
}
/*-------------------------------------------------------*/
/* Partie-preview */
#partie-preview legend, #partie-preview{
background:#A1CA10;
-webkit-border-radius: 10px;-moz-border-radius: 10px;border-radius: 10px;
}
#partie-preview {
width:582px;
border:none;
}
.supprimer-obs{
background-color:transparent;
border:none;
cursor:pointer;
}
.obligatoire {
color:red;
}
label.error {
display:inline;
float:none;
padding-left:.5em;
color:red;
}
#partie-observation label.error,#partie-station label.error {
width:150px;
float:right;
}
#ajouter-obs{
margin-left:407px;
margin-top:10px;
font-size:20px;
background:#181;
color:#FFF;
-webkit-border-radius: 5x;-moz-border-radius: 5px;border-radius: 5px;
height:35px;
width:137px;
}
#transmettre-obs{
margin-left:400px;
margin-top:5px;
font-size:20px;
background:#811;
color:#FFF;
-webkit-border-radius: 5x;-moz-border-radius: 5px;border-radius: 5px;
height:35px;
}
/*-------------------------------------------------------*/
/* Autocomplete */
.ui-autocomplete {
background-color: white;
width: 300px;
border: 1px solid #cfcfcf;
list-style-type: none;
padding-left: 0px;
}
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/sauvage_image.tpl.xml
New file
0,0 → 1,5
<?='<?xml version="1.0" encoding="UTF-8"?>'."\n";?>
<root>
<miniature-url><?=$urlMiniature?></miniature-url>
<image-nom><?=$imageNom?></image-nom>
</root>
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/js/uploadImage.js
New file
0,0 → 1,3
 
document.getElementById('image_file').addEventListener('change', handleFileSelect, false);
/branches/v1.5-cisaille/widget/modules/saisie/squelettes/biodiversite34/js/sauvages.js
New file
0,0 → 1,391
//+---------------------------------------------------------------------------------------------------------+
// GÉNÉRAL
/**
* Stope l'évènement courrant quand on clique sur un lien.
* Utile pour Chrome, Safari...
* @param evenement
* @return
*/
function arreter(evenement) {
if (evenement.stopPropagation) {
evenement.stopPropagation();
}
return false;
}
// TODO : voir si cette fonction est bien utile. Résoud le pb d'un warning sous chrome.
(function(){
// remove layerX and layerY
var all = $.event.props,
len = all.length,
res = [];
while (len--) {
var el = all[len];
if (el != 'layerX' && el != 'layerY') res.push(el);
}
$.event.props = res;
}());
 
//+----------------------------------------------------------------------------------------------------------+
//UPLOAD PHOTO : Traitement de l'image
$(document).ready(function() {
//prepare the form when the DOM is ready
//create service object(proxy) using SMD (generated by the json result)
var options = {
success: afficherMiniature, // post-submit callback
dataType: 'xml', // 'xml', 'script', or 'json' (expected server response type)
resetForm: true // reset the form after successful submit
};
 
// post-submit callback
function afficherMiniature(reponse) {
// 'responseXML' is the XML document returned by the server; we use
// jQuery to extract the content of the message node from the XML doc
var miniatureUrl = $("miniature-url", reponse).text();
var imgNom = $("image-nom", reponse).text();
$("#miniature").empty();
$("#miniature").append('<img id="miniature-img" class="miniature" alt="'+imgNom+'" src="'+miniatureUrl+'"/>');
console.log(imgNom);
console.log(miniatureUrl);
};
$("#form-upload").submit(function() {
// inside event callbacks 'this' is the DOM element so we first
// wrap it in a jQuery object and then invoke ajaxSubmit
$(this).ajaxSubmit(options);
// !!! Important !!!
// always return false to prevent standard browser submit and page navigation
return false;
});
});
 
//+----------------------------------------------------------------------------------------------------------+
// GOOGLE MAP
var geocoder;
var map;
var marker;
var latLng;
 
function initialize(){
// Carte
var latLng = new google.maps.LatLng(43.29545, 5.37458);
$('#adresse').val('1 rue de la canebiere, 13001');
$('#latitude').val('43.29545');
$('#longitude').val('5.37458');
var options = {
zoom: 16,
center: latLng,
mapTypeId: google.maps.MapTypeId.SATELLITE
};
map = new google.maps.Map(document.getElementById("map_canvas"), options); //affiche la google map dans la div map_canvas
// Geocodeur
geocoder = new google.maps.Geocoder();
console.log(GOOGLE_MAP_MARQUEUR_URL);
 
// Marqueur google draggable
marker = new google.maps.Marker({
map: map,
draggable: true,
title: 'Ma station',
icon: GOOGLE_MAP_MARQUEUR_URL,
position: latLng
});
}
 
$(document).ready(function() {
initialize();
$(function() {
// Tentative de geocalisation
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
var altitude = position.coords.altitude;
var geocalisation = new google.maps.LatLng(latitude, longitude);
marker.setPosition(geocalisation);
map.setCenter(geocalisation);
$('#latitude').val(marker.getPosition().lat());
$('#longitude').val(marker.getPosition().lng());
$('#adresse').val(codeLatLng(marker.getPosition()));
});
}
// Autocompletion du champ adresse
$("#adresse").autocomplete({
//Cette partie utilise geocoder pour extraire des valeurs d'adresse
source: function(request, response) {
geocoder.geocode( {'address': request.term }, function(results, status) {
response($.map(results, function(item) {
return {
label: item.formatted_address,
value: item.formatted_address,
latitude: item.geometry.location.lat(),
longitude: item.geometry.location.lng()
}
}));
})
},
// Cette partie est executee a la selection d'une adresse
select: function(event, ui) {
$("#latitude").val(ui.item.latitude);
$("#longitude").val(ui.item.longitude);
var location = new google.maps.LatLng(ui.item.latitude, ui.item.longitude);
marker.setPosition(location);
map.setCenter(location);
map.setZoom(20);
}
});
 
// Ajoute un ecouteur sur le marker pour le reverse geocoding
google.maps.event.addListener(marker, 'drag', function() {
geocoder.geocode({'latLng': marker.getPosition()}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
$('#adresse').val(results[0].formatted_address);
$('#latitude').val(Math.round(marker.getPosition().lat()*100000)/100000);
$('#longitude').val(Math.round(marker.getPosition().lng()*100000)/100000);
}
}
});
});
});
});
 
// Transforme les coordonnés en adresse (reverse geocoder)
function codeLatLng() {
var lat = parseFloat(document.getElementById("latitude").value);
var lng = parseFloat(document.getElementById("longitude").value);
var latlng = new google.maps.LatLng(lat, lng);
geocoder.geocode({'latLng': latlng}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
marker.setPosition(latlng);
map.setCenter(latlng);
$('#adresse').val(results[0].formatted_address);
}
} else {
alert("Geocoder failed due to: " + status);
}
});
}
 
//+---------------------------------------------------------------------------------------------------------+
// FORMULAIRE
$(document).ready(function() {
$("form#saisie-obs").validate({
rules: {
courriel : {
required : true,
email : true},
courriel_confirmation : {
required : true,
equalTo: "#courriel"
},
milieu : "required",
adresse : "required",
latitude : {
required: true,
range: [-90, 90]},
longitude : {
required: true,
range: [-180, 180]},
date : {
required: true,
date: true},
taxon : "required"
}
});
$("#date").datepicker($.datepicker.regional['fr']);
$("#courriel_confirmation").bind('paste', function(e) {
$("#dialogue-bloquer-copier-coller").dialog();
return false;
});
/*---Afficher/cacher les coordonnees geographiques----*/
var showText=" -Afficher-";
var hideText=" -Masquer- ";
//créer le lien afficher/masquer
$("#coordonnees-geo").before("<a href='#' id='toogle_link'>"+showText+"</a>")
//masquer le contenu
$("#masque").hide();
//bascule le texte d'afficher à masquer
$("a#toogle_link").click(function() {
//changer le texte du lien
if($('a#toogle_link').text()==showText){
$('a#toogle_link').text(hideText);
} else{
$('a#toogle_link').text(showText);
}
//basuler l'affichage
$('#masque').toggle('slow');
//valeur false pour que le lien ne soit pas suivi
return false
});
 
/*------obs-----------*/
var obsNumero = 0;
$("#ajouter-obs").bind('click', function(e) {
if ($("#saisie-obs").valid() == false) {
$("#dialogue-form-invalide").dialog();
} else {
//rassemble les obs dans un tableau html
obsNumero = obsNumero + 1;
$("#liste-obs tbody").append(
'<tr id="obs'+obsNumero+'" class="obs">'+
'<td>'+obsNumero+'</td>'+
'<td>'+$("#date").val()+'</td>'+
'<td>'+$("#adresse").val()+'</td>'+
'<td>'+$("#taxon option:selected").text()+'</td>'+
'<td>'+$('input[name=milieu]:checked').val()+'</td>'+
'<td>'+$("#latitude").val()+'</td>'+
'<td>'+$("#longitude").val()+'</td>'+
//Ajout du champ photo
'<td><img class="miniature" alt="'+$("#miniature-img").attr("alt")+'"src="'+$("#miniature-img").attr("src")+'" /></td>'+
'<td>'+$("#notes").val()+'</td>'+
'<td><button class="supprimer-obs" value="'+obsNumero+'" title="Supprimer l\'observation '+obsNumero+'">'+
'<img src="'+SUPPRIMER_ICONE_URL+'"/></button></td>'+
'</tr>');
//rassemble les obs dans #liste-obs
var numNomSel = $("#taxon").val();
$("#liste-obs").data('obsId'+obsNumero, {
'date' : $("#date").val(),
'num_nom_sel' : numNomSel,
'nom_sel' : taxons[numNomSel]['nom_sel'],
'nom_ret' : taxons[numNomSel]['nom_ret'],
'num_nom_ret' : taxons[numNomSel]['num_nom_ret'],
'num_taxon' : taxons[numNomSel]['num_taxon'],
'famille' : taxons[numNomSel]['famille'],
'nom_fr' : taxons[numNomSel]['nom_fr'],
'station' : $("#adresse").val(),
'milieu' : $('input[name=milieu]:checked').val(),
'latitude' : $("#latitude").val(),
'longitude' : $("#longitude").val(),
'tag' : 'Sauvages',
//Ajout du champ photo
'image' : $("#miniature-img").attr('src'),
'notes' : $("#notes").val()});
}
});
$(".supprimer-obs").live('click', function() {
var obsId = $(this).val();
// Problème avec IE 6 et 7
if (obsId == "Supprimer") {
obsId = $(this).attr("title");
}
$('#obs'+obsId).remove();
$("#liste-obs").removeData('obsId'+obsId)
});
 
$("#effacer-miniature").click(function () {
$("#miniature").empty();
});
$("#effacer-miniature").click(
document.getElementById('image_file').addEventListener('change', handleFileSelect, false);
$("#transmettre-obs").click(function(e) {
var observations = $("#liste-obs").data();
if (observations == undefined || jQuery.isEmptyObject(observations)) {
$("#dialogue-zero-obs").dialog();
} else if ($("#saisie-obs").valid() == false) {
$("#dialogue-form-invalide").dialog();
} else {
var utilisateur = new Object();
utilisateur.prenom = $("#prenom").val();
utilisateur.nom = $("#nom").val();
utilisateur.courriel = $("#courriel").val();
observations['utilisateur'] = utilisateur;
$.ajax({
url : SERVICE_SAISIE_URL,
type : "POST",
data : observations,
context : document.body,
beforeSend : function() {
$("#msg").remove();
$("#msg-erreur").remove();
$("#msg-debug").remove();
},
statusCode : {
500 : function(jqXHR, textStatus, errorThrown) {
$("#dialogue-obs-transaction").append('<p id="msg">Un problème est survenu lors de la transmission de vos observations.</p>');
reponse = jQuery.parseJSON(jqXHR.responseText);
var erreurMsg = "";
if (reponse != null) {
$.each(reponse, function (cle, valeur) {
erreurMsg += valeur + "<br />";
});
}
$("#dialogue-obs-transaction").append('<p id="msg-erreur">Erreur 500 : '+errorThrown+"<br />"+erreurMsg+'</p>');
}
},
success : function(data, textStatus, jqXHR) {
$("#dialogue-obs-transaction").append('<p id="msg">Vos observations ont bien été transmises.</p>');
},
complete : function(jqXHR, textStatus) {
var debugMsg = "";
if (DEBUG && jqXHR.getResponseHeader("X-DebugJrest-Data") != '') {
debugInfos = jQuery.parseJSON(jqXHR.getResponseHeader("X-DebugJrest-Data"));
if (debugInfos != null) {
$.each(debugInfos, function (cle, valeur) {
debugMsg += valeur + "<br />";
});
$("#dialogue-obs-transaction").append('<pre id="msg-debug">Débogage : '+debugMsg+'</pre>');
}
}
$("#dialogue-obs-transaction").dialog();
$("#liste-obs").removeData();
$('.obs').remove();
obsNumero = 0;
},
});
}
return false;
});
});
 
 
function handleFileSelect(evt) {
// Check for the various File API support.
if (window.File && window.FileReader && window.FileList && window.Blob) {
// Great success! All the File APIs are supported.
var selectedfiles = evt.target.files; // FileList object
// Loop through the FileList and render image files as thumbnails.
for (var i = 0, f; f = selectedfiles[i]; i++) {
// Only process image files.
if (!f.type.match('image.*')) {
continue;
}
var reader = new FileReader();
// Read in the image file as a data URL.
reader.readAsDataURL(f);
// Closure to capture the file information.
reader.onload = (function(theFile) {
return function(e) {
// Render thumbnail.
document.getElementById('image').src = e.target.result;
//document.getElementById('list').insertBefore(img, null);
};
})(f);
}
 
}
else {
alert('The File APIs are not fully supported in this browser.');
}
}