/trunk/widget/modules/chorodep/squelettes/formulaire.tpl.html |
---|
New file |
0,0 → 1,102 |
<html lang="fr"> |
<head> |
<title>Chorodep</title> |
<meta charset="utf-8"> |
<meta name="revisit-after" content="15 days" /> |
<meta name="robots" content="index,follow" /> |
<meta name="keywords" content="Tela Botanica, eFlore, chorodep" /> |
<meta name="description" content="eFlore - Widget de saisie pour Chorologie départementale" /> |
<style></style> |
<script src="http://www.tela-botanica.org/commun/jquery/1.9.1/jquery-1.9.1.min.js"></script> |
<script type="text/javascript"> |
$(document).ready(function() { |
chargerStatutSSO("https://www.tela-botanica.org/service:annuaire:auth"); |
}); |
/** |
* Interroge le SSO pour connaître le statut de l'utilisateur, et change le menu |
* Ã droite de la barre en fonction |
*/ |
function chargerStatutSSO(urlBaseAuth) { |
var urlAuth = urlBaseAuth + '/identite'; |
$.ajax({ |
url: urlAuth, |
type: "GET", |
dataType: 'json', |
xhrFields: { |
withCredentials: true |
} |
}).done(function(data) { |
// connecté |
definirUtilisateur(data.token); |
}); |
} |
function definirUtilisateur(jeton) { |
var nomComplet = ''; |
if (jeton != undefined) { |
// décodage jeton |
var jetonDecode = decoderJeton(jeton); |
nomComplet = jetonDecode.intitule; |
} |
// affichage |
$('#bouton-connexion').hide(); |
$('#utilisateur-connecte').show(); |
$('#nom-complet').html(nomComplet); |
} |
/** |
* Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE |
* JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple |
* Si pb de cross-browser, tenter ceci : https://code.google.com/p/javascriptbase64/ |
* ou ceci : https://code.google.com/p/crypto-js |
*/ |
function decoderJeton(jeton) { |
parts = jeton.split('.'); |
payload = parts[1]; |
payload = atob(payload); |
payload = JSON.parse(payload, true); |
return payload; |
}</script> |
<!-- CSS --> |
<link rel="stylesheet" href="http://resources.tela-botanica.org/bootstrap/3.2.0/css/bootstrap.min.css" /> |
<link rel="stylesheet" href="http://resources.tela-botanica.org/bootstrap/3.2.0/css/bootstrap-theme.min.css" /> |
</head> |
<body> |
<div class="importance1" id="conteneur-recherche"> |
<h1 class="titre-widget">Chorodep</h1> |
<?= isset($donnees['nom_sci']) ? "Votre proposition pour ".$donnees['nom_sci']." dans le ".$donnees['dept']." a bien été ajouté.<br />" : "";?> |
<form class="navbar-form navbar-left" id="ef-form-nomenclature" name="ef-form-nomenclature" action="../Chorodep/formulaire" method="get"> |
<div class="form-groupe"> |
<label for="nom_sci">Nom latin :</label> |
<input type="search" name="nom_sci" id="nom_sci" <?= isset($donnees['nom_sci']) ? "value='".$donnees['nom_sci']."'": "";?>/><br /> |
<label for="dept">Département :</label> |
<select name="dept" id="dept"> |
<?php foreach ($liste_dept as $t=>$dept) {?> |
<option value="<?=$dept['code'];?>" <?= isset($donnees['dept']) && $donnees['dept'] == $dept['code'] ? "selected='selected'": "";?> ><?=$dept['nom']." (".$dept['code'].")";?></option> |
<?php } ?> |
</select><br /> |
<label for="statut">Statut :</label> |
<select name="statut" id="statut"> |
<option value="3" <?= isset($donnees['statut']) && $donnees['statut'] == 3 ? "selected='selected'": "";?> >présence</option> |
<option value="4" <?= isset($donnees['statut']) && $donnees['statut'] == 4 ? "selected='selected'": "";?> >présence à confimer</option> |
<option value="5" <?= isset($donnees['statut']) && $donnees['statut'] == 5 ? "selected='selected'": "";?>>douteux</option> |
<option value="6" <?= isset($donnees['statut']) && $donnees['statut'] == 6 ? "selected='selected'": "";?> >disparu</option> |
<option value="7" <?= isset($donnees['statut']) && $donnees['statut'] == 7 ? "selected='selected'": "";?> >erreur</option> |
<option value="8" <?= isset($donnees['statut']) && $donnees['statut'] == 8 ? "selected='selected'": "";?> >erreur à confirmer</option> |
</select><br /> |
<label for="sources">Sources :</label> |
<input type="text" name="sources" id="sources" <?= isset($donnees['sources']) ? "value='".$donnees['sources']."'": "";?> /><br /> |
<label for="notes">Notes :</label> |
<input type="text" name="notes" id="notes" <?= isset($donnees['notes']) ? "value='".$donnees['notes']."'": "";?> /><br /> |
<input type="submit" name="envoyer" id="envoyer" value="envoyer"/><br /> |
</div> |
</form> |
</div> |
</body> |
</html> |
/trunk/widget/modules/chorodep/squelettes/tableau_validation.tpl.html |
---|
New file |
0,0 → 1,131 |
<html lang="fr"> |
<head> |
<title>Chorodep</title> |
<meta charset="utf-8"> |
<meta name="revisit-after" content="15 days" /> |
<meta name="robots" content="index,follow" /> |
<meta name="keywords" content="Tela Botanica, eFlore, chorodep" /> |
<meta name="description" content="eFlore - Widget de saisie pour Chorologie départementale" /> |
<style></style> |
<script src="http://www.tela-botanica.org/commun/jquery/1.9.1/jquery-1.9.1.min.js"></script> |
<script type="text/javascript"> |
$(document).ready(function() { |
chargerStatutSSO("https://www.tela-botanica.org/service:annuaire:auth"); |
}); |
/** |
* Interroge le SSO pour connaître le statut de l'utilisateur, et change le menu |
* Ã droite de la barre en fonction |
*/ |
function chargerStatutSSO(urlBaseAuth) { |
var urlAuth = urlBaseAuth + '/identite'; |
$.ajax({ |
url: urlAuth, |
type: "GET", |
dataType: 'json', |
xhrFields: { |
withCredentials: true |
} |
}).done(function(data) { |
// connecté |
definirUtilisateur(data.token); |
}); |
} |
function definirUtilisateur(jeton) { |
var nomComplet = ''; |
if (jeton != undefined) { |
// décodage jeton |
var jetonDecode = decoderJeton(jeton); |
nomComplet = jetonDecode.intitule; |
} |
// affichage |
$('#bouton-connexion').hide(); |
$('#utilisateur-connecte').show(); |
$('#nom-complet').html(nomComplet); |
} |
/** |
* Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE |
* JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple |
* Si pb de cross-browser, tenter ceci : https://code.google.com/p/javascriptbase64/ |
* ou ceci : https://code.google.com/p/crypto-js |
*/ |
function decoderJeton(jeton) { |
parts = jeton.split('.'); |
payload = parts[1]; |
payload = atob(payload); |
payload = JSON.parse(payload, true); |
return payload; |
}</script> |
<!-- CSS --> |
<link rel="stylesheet" href="http://resources.tela-botanica.org/bootstrap/3.2.0/css/bootstrap.min.css" /> |
<link rel="stylesheet" href="http://resources.tela-botanica.org/bootstrap/3.2.0/css/bootstrap-theme.min.css" /> |
</head> |
<body> |
<ul class="nav navbar-nav navbar-right"> |
<li id="bouton-connexion" class="dropdown"> |
<a href="http://www.tela-botanica.org/widget:reseau:auth?origine=http://localhost/eflore-consultation/widget/chorodep/">Connexion</a> |
</li> |
<li class="dropdown" id="utilisateur-connecte" style="display: none;"> |
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><span id="nom-complet"></span> <b class="caret"></b></a> |
<ul class="dropdown-menu"> |
<li id="profil-utilisateur"><a href="http://www.tela-botanica.org/inscription">Mon profil</a></li> |
<li id="deconnexion"><a href="http://www.tela-botanica.org/widget:reseau:auth?action=deconnexion&origine=http://localhost/eflore-consultation/widget/chorodep/">Déconnexion</a></li> |
</ul> |
</li> |
</ul> |
<form class="" id="valid" name="valid" action="../Chorodep/validation" method="get"> |
<div class="panel panel-default"> |
<!-- Default panel contents --> |
<div class="panel-heading">Propositions à valider</div> |
<div class="panel-body"> |
Propositions de présence d'une espèce dans un département à valider pour intégration à la base Chorodep. |
</div> |
<!-- Table --> |
<table class="table"> |
<thead> |
<tr> |
<th>#</th> |
<th>Auteur</th> |
<th>Espece</th> |
<th>Département</th> |
<th>Statut</th> |
<th>Sources</th> |
<th>Notes</th> |
<th>Provenance</th> |
<th>Date proposition</th> |
<th>Accepter</th> |
<th>Supprimer</th> |
</tr> |
</thead> |
<tbody> |
<?php foreach ($liste_prop as $prop) { ?> |
<tr> |
<th scope="row"><?=$prop['id'];?></th> |
<td><?=$prop['auteur_courriel'];?></td> |
<td><?=$prop['nom_sci'];?></td> |
<td><?=$prop['dept'];?></td> |
<td><?=$prop['statut'];?></td> |
<td><?=$prop['source'];?></td> |
<td><?=$prop['notes'];?></td> |
<td><?=$prop['provenance'];?></td> |
<td><?=$prop['date_creation'];?></td> |
<td><input type="radio" name="<?=$prop['id'];?>" value="1" id="accepter" <?= isset($prop['validation']) && $prop['validation'] == 1 ? "checked='checked'": "";?> /></td> |
<td><input type="radio" name="<?=$prop['id'];?>" value="0" id="refuser" <?= isset($prop['validation']) && $prop['validation'] == 0 ? "checked='checked'": "";?> /></td> |
</tr> |
<?php } ?> |
</tbody> |
</table> |
</div> |
<input type="submit" name="envoyer" id="valider" value="Valider" style="position:relative;left:87%;"/> |
</form> |
</body> |
</html> |
/trunk/widget/modules/chorodep/config.ini |
---|
New file |
0,0 → 1,15 |
[url] |
efloreScriptUrl = "http://www.tela-botanica.org/eflore/consultation/presentations/scripts/recherche.js" |
; url vers l'application utilisée par défaut |
efloreConsultationUrl = "http://www.tela-botanica.org/page:eflore" |
; url spécifique à un référentiel |
efloreConsultationBdtfxUrl = "http://www.tela-botanica.org/page:eflore_bdtfx" |
; url spécifique à un référentiel |
efloreConsultationBdtxaUrl = "http://www.tela-botanica.org/page:isfgm" |
efloreRechercheSciUrlTpl = "http://www.tela-botanica.org/service:eflore:0.1/{referentiel}/noms" |
efloreRechercheVernaUrlTpl = "http://www.tela-botanica.org/service:eflore:0.1/{referentiel}/noms-vernaculaires" |
ficheTaxonUrlTpl = "?referentiel={referentiel}&niveau=2&module=fiche&action=fiche&num_nom={num_taxon}&type_nom=nom_scientifique&nom=" |
[referentiel] |
referentielsSciDispos = bdtfx#France : métropole,bdtxa#France : Antilles,isfan#Afrique du Nord,apd#Afrique tropicale |
referentielsVernaDispos = bdtfx:nvjfl,bdtxa:nva |
/trunk/widget/modules/chorodep/Chorodep.php |
---|
New file |
0,0 → 1,153 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Service de recherche dans eflore, permettant d'intégrer le moteur dans une page donnée |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* |
* Cas d'utilisation et documentation : |
* @link http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=AideEfloreWidgetRecherche |
* |
* |
* @author Aurélien PERONNET <aurelien@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version $Id$ |
* @copyright Copyright (c) 2013, Tela Botanica (accueil@tela-botanica.org) |
*/ |
class Chorodep extends WidgetCommun { |
const DS = DIRECTORY_SEPARATOR; |
/** |
* Méthode appelée par défaut pour charger ce widget. |
*/ |
public function executer() { |
$retour = null; |
$methode = $this->traiterNomMethodeExecuter($this->ressources[0]); |
if (method_exists($this, $methode)) { |
$retour = $this->$methode(); |
} else { |
$this->messages[] = "Ce type de service '$methode' n'est pas disponible."; |
} |
if (is_null($retour)) { |
$info = 'Un problème est survenu : '.print_r($this->messages, true); |
$this->envoyer($info); |
} else { |
$squelette = dirname(__FILE__).self::DS.'squelettes'.self::DS.$retour['squelette'].'.tpl.html'; |
$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']); |
if (isset($_GET['callback'])) { |
$this->envoyerJsonp(array('contenu' => $contenu)); |
} else { |
$this->envoyer($contenu); |
} |
} |
} |
/* |
* dans validation |
* reflechir comment gérer prop refusee |
* quand prop validée/refusée changée dans chorodep_prop et chorodep_version |
*/ |
public function executerFormulaire() { |
$widget['donnees'] = array(); |
if ($this->parametres != array()) { |
$widget['donnees'] = $this->parametres; |
$this->ajouterProposition(); |
} |
$l = json_decode(file_get_contents("http://api.tela-botanica.org/service:eflore:0.1/insee-d/zone-geo?retour.format=liste"), true); |
$widget['donnees']['liste_dept'] = $l["resultat"]; |
$widget['donnees']['efloreScriptUrl'] = $this->config['url']['efloreScriptUrl']; |
$widget['squelette'] = 'formulaire'; |
return $widget; |
} |
private function ajouterProposition() { |
$params_obli = array("dept",/*"num_nom",*/"statut","nom_sci","sources","notes"); |
$donnees[] = "provenance=form"; |
$donnees[] = "num_nom=24545"; // à modifier avec javascript |
$url_propo = "http://localhost/service:eflore:0.1/chorodep/propositions/"; |
foreach ($params_obli as $param) { |
if (isset($this->parametres[$param])) { |
$donnees[] = $param."=".$this->parametres[$param]; |
} else { |
$donnees[] = $param."="; |
} |
} |
$contexte = stream_context_create(array( |
'http' => array( |
'method' => 'PUT', |
'header' => "Content-type: application/x-www-form-urlencoded\r\n", |
'content' => implode("&", $donnees)))); |
$flux = fopen($url_propo, 'r', false, $contexte); |
if (!$flux) { |
$this->reponse_entetes = $http_response_header; |
$e = "Echec requête 'PUT' : {$url_propo}\n". |
"Paramètres requête : implode("&", $donnees) \n". |
"Entêtes réponse : \n"; |
trigger_error($e, E_USER_WARNING); |
} else { |
// Informations sur les en-têtes et métadonnées du flux |
$this->reponse_entetes = stream_get_meta_data($flux); |
// Contenu actuel de $url |
$contenu = stream_get_contents($flux); |
fclose($flux); |
} |
} |
public function executerValidation() { |
$widget['donnees'] = array(); |
if ($this->parametres != array()) { |
$this->modifierProposition(); |
} |
$widget['donnees']['liste_prop'] = json_decode(file_get_contents("http://localhost/service:eflore:0.1/chorodep/propositions/"), true); |
$widget['squelette'] = 'tableau_validation'; |
return $widget; |
} |
private function modifierProposition() { |
$url_propo = "http://localhost/service:eflore:0.1/chorodep/propositions/"; |
foreach ($this->parametres as $id => $prop) { |
$donnees[] = $id."=".$prop; |
} |
$contexte = stream_context_create(array( |
'http' => array( |
'method' => 'POST', |
'header' => "Content-type: application/x-www-form-urlencoded\r\n", |
'content' => implode("&", $donnees)))); |
$flux = fopen($url_propo, 'r', false, $contexte); |
if (!$flux) { |
$this->reponse_entetes = $http_response_header; |
$e = "Echec requête 'POST' : {$url_propo}\n". |
"Paramètres requête : implode("&", $donnees) \n". |
"Entêtes réponse : \n"; |
trigger_error($e, E_USER_WARNING); |
} else { |
// Informations sur les en-têtes et métadonnées du flux |
$this->reponse_entetes = stream_get_meta_data($flux); |
// Contenu actuel de $url |
$contenu = stream_get_contents($flux); |
fclose($flux); |
} |
} |
/*"1","0","presenceChorologie","Tableau des présences pour le projet de chorologie départementale","presenceChorologie", |
"2","1","non renseignée","Zone géographique non renseignée.",,"legende=#808080" |
"3","1","présence",,"1","legende=#A0FF7D,priorite=6" |
"4","1","présence à confimer",,"1?","legende=#FFFF32,priorite=5" |
"5","1","douteux",,"?","legende=#FFCB30,priorite=4" |
"6","1","disparu",,"-|-","legende=#F88017,priorite=3" |
"7","1","erreur",,"#","legende=#FF2850,priorite=2" |
"8","1","erreur à confirmer",,"#?","legende=#9F0016,priorite=1"*/ |
} |
?> |
/trunk/widget/modules/chorodep/config.defaut.ini |
---|
New file |
0,0 → 1,15 |
[url] |
efloreScriptUrl = "http://www.tela-botanica.org/eflore/consultation/presentations/scripts/recherche.js" |
; url vers l'application utilisée par défaut |
efloreConsultationUrl = "http://www.tela-botanica.org/page:eflore" |
; url spécifique à un référentiel |
efloreConsultationBdtfxUrl = "http://www.tela-botanica.org/page:eflore_bdtfx" |
; url spécifique à un référentiel |
efloreConsultationBdtxaUrl = "http://www.tela-botanica.org/page:isfgm" |
efloreRechercheSciUrlTpl = "http://www.tela-botanica.org/service:eflore:0.1/{referentiel}/noms" |
efloreRechercheVernaUrlTpl = "http://www.tela-botanica.org/service:eflore:0.1/{referentiel}/noms-vernaculaires" |
ficheTaxonUrlTpl = "?referentiel={referentiel}&niveau=2&module=fiche&action=fiche&num_nom={num_taxon}&type_nom=nom_scientifique&nom=" |
[referentiel] |
referentielsSciDispos = bdtfx#France : métropole,bdtxa#France : Antilles,isfan#Afrique du Nord,apd#Afrique tropicale |
referentielsVernaDispos = bdtfx:nvjfl,bdtxa:nva |
/trunk/widget/Widget.php |
---|
25,6 → 25,7 |
/** Les paramètres de l'url $_GET nettoyés. */ |
private $parametres = null; |
private $ressources = null; |
/** |
* Constructeur. |
51,10 → 52,12 |
if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['QUERY_STRING'])) { |
$url_morceaux = $this->parserUrl(); |
if (isset($url_morceaux[0])) { |
$this->widget = $url_morceaux[0]; |
$this->widget = array_shift($url_morceaux); |
self::$config['chemins']['widgetCourantDossier'] = self::$config['chemins']['widgetsDossier'].strtolower($this->widget).DIRECTORY_SEPARATOR; |
$this->chargerWidgetConfig(); |
if (isset($url_morceaux[0])) $this->ressources = $url_morceaux; |
} |
// Chargement des chemins pour l'autoload |
$this->chargerCheminAutoload(); |
140,7 → 143,7 |
if (file_exists($fichier_widget)) { |
include_once $fichier_widget; |
if (class_exists($classe_widget)) { |
$widget = new $classe_widget(self::$config, $this->parametres); |
$widget = new $classe_widget(self::$config, $this->parametres, $this->ressources); |
$widget->executer(); |
} |
} |
/trunk/widget/bibliotheque/WidgetCommun.php |
---|
3,13 → 3,15 |
protected $config = null; |
protected $parametres = null; |
protected $ressources = null; |
protected $messages = array(); |
protected $debug = array(); |
public function __construct($config, $parametres) { |
public function __construct($config, $parametres, $ressources) { |
$this->config = $config; |
$this->parserFichierIni($config['chemins']['widgetCourantDossier'].'config.ini'); |
$this->parametres = $parametres; |
$this->ressources = $ressources; |
} |
/** |