Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2457 → Rev 2458

/trunk/jrest/services/InventoryCheck.php
File deleted
\ No newline at end of file
/trunk/jrest/services/TestNameParser.php
File deleted
/trunk/jrest/services/InventoryByDept.php
File deleted
\ No newline at end of file
/trunk/jrest/services/ImageRDF.php
1,19 → 1,20
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* Retourne un RDF des images pour eflore
*
* @category PHP
* @package jrest
* @author david <david@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
* Retourne des infos au format RDF sur les imags.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Images
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class ImageRDF extends Cel {
 
/**
20,7 → 21,7
* Recherche des images associee au numero nomenclatural
* @param numeric $uid [0] : numero nomenclatural obligatoire , $uid[1] (optionnel) : taille image : S , M, L (default)
*/
function getElement($uid){
public function getElement($uid){
$nomSelNnP = Cel::db()->proteger($uid[0]);
$taille = isset($uid[1]) ? $uid[1] : 'L';
 
/trunk/jrest/services/NameMap.php
1,49 → 1,42
<?php
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author David Delon <david.delon@clapas.net>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
 
/**
* NameMap.php
*
* in utf8
* out utf8
*
* Cas d'utilisation :
* Service recherche d'image a partir d'un numero nomenclatural
*
* 1: Le service recoit un référentiell et un numero nomenclatural
* 2: Le service recherche une carte disponible
*/
 
* Service recherche d'une carte de chorologie a partir d'un numero nomenclatural et d'un code de référentiel.
*
* Cas d'utilisation :
* 1: Le service recoit un référentiel et un numero nomenclatural
* 2: Le service recherche une carte disponible
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Cartes
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class NameMap extends Cel {
 
function getElement($uid){
public function getElement($uid){
$retour = array('');
if(isset($uid[0]) && isset($uid[1])) {
if (isset($uid[0]) && isset($uid[1])) {
$uid[0] = $uid[0] != '' ? $uid[0] : 'bdtfx';
$retour = $this->obtenirCarteChorologie($uid[0], $uid[1]);
}
}
$this->envoyerJson($retour);
return true;
}
 
$this->envoyerJson($retour);
return true;
}
function obtenirCarteChorologie($referentiel_taxo, $nn) {
private function obtenirCarteChorologie($referentiel_taxo, $nn) {
// TODO: gérer ici les cartes d'autres référentiels si celles si sont disponibles
$retour = array('');
$chercheur_infos_taxon = new RechercheInfosTaxonBeta($this->config, $referentiel_taxo);
$nt = $chercheur_infos_taxon->rechercherNumTaxSurNumNom($nn);
 
$retour = array('');
switch($referentiel_taxo) {
case 'bdtfx':
$url_service_chorologie = $this->config['eflore']['url_service_chorologie_carte'];
50,7 → 43,7
$url_service_chorologie = str_replace('{referentiel_choro}','chorodep',$url_service_chorologie);
$file = $url_service_chorologie.'/nt%3A'.$nt.'?retour.format=587&retour=image%2Fpng';
$retour = array($file);
break;
break;
case 'bdtxa':
// En attendant mieux
$url_service_chorologie = $this->config['eflore']['url_service_chorologie_carte'];
57,20 → 50,8
$url_service_chorologie = str_replace('{referentiel_choro}','bdtxa',$url_service_chorologie);
$file = $url_service_chorologie.'/nt%3A'.$nt.'?retour.format=587&retour=image%2Fpng';
$retour = array($file);
break;
default:
break;
break;
}
return $retour;
return $retour;
}
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.1 2008-01-30 08:57:28 ddelon
* fin mise en place mygwt
*
* Revision 1.1 2007-06-06 13:31:16 ddelon
* v0.09
*/
?>
}
/trunk/jrest/services/User.php
1,56 → 1,51
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author David Delon <devid.delon@clapas.net>
* @author Aurélien Peronnet <devid.delon@clapas.net>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
/**
* User.php
*
* Cas d'utilisation :
* Service identification utilisateur
*
*
* 1: Aucun identifiant ni mot de passe transmis
* 1: L'application retourne l'identifiant de session en cours
* 2: Une identification est toujours active, cette identification est retournee
*
* 1: L'application recoit un identifiant et un mot de passe
* 1 : On tente login
* 2 : Si reussi etat connecte, retour de l'identification obtenue
* 3 : sinon pas connecte, retour d'infos utilisateur anonyme
*
* 1: L'application recoit un identifiant et pas de mot de passe :
* 1 : Deconnection, retour d'infos utilisateur anonyme
*
* En resume :
* /User/ : retour infos utilisateur si connecté sinon infos utilisateur anonyme
* /User/login_utilisateur : logout retour infos utilisateur anonyme
* /User/login_utilisateur/password : login retour infos utilisateur si succès sinon infos utilisateur anonyme
*
*/
* Service identification utilisateur.
*
* Cas d'utilisation :
*
* 1: Aucun identifiant ni mot de passe transmis
* 1: L'application retourne l'identifiant de session en cours
* 2: Une identification est toujours active, cette identification est retournee
*
* 1: L'application recoit un identifiant et un mot de passe
* 1 : On tente login
* 2 : Si reussi etat connecte, retour de l'identification obtenue
* 3 : sinon pas connecte, retour d'infos utilisateur anonyme
*
* 1: L'application recoit un identifiant et pas de mot de passe :
* 1 : Deconnection, retour d'infos utilisateur anonyme
*
* En resume :
* /User/ : retour infos utilisateur si connecté sinon infos utilisateur anonyme
* /User/login_utilisateur : logout retour infos utilisateur anonyme
* /User/login_utilisateur/password : login retour infos utilisateur si succès sinon infos utilisateur anonyme
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Utilisateurs
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class User extends Cel {
 
// TODO : controle systematique ....dans tous les services
// Si connected : name cookie = name service
function getRessource(){
 
public function getRessource(){
$temps_expiration = 60*60*24*100; // 100 jours
session_set_cookie_params($temps_expiration);
 
$utilisateur = $this->getUtilisateurAnonyme();
 
$login_utilisateur = $this->utilisateurEstIdentifie();
 
if ($login_utilisateur) {
$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);
$utilisateur['connecte'] = true;
59,31 → 54,28
$this->envoyerInfosUtilisateur($utilisateur);
}
 
function getElement($uid){
public function getElement($uid){
$utilisateur = $this->getUtilisateurAnonyme();
 
$utilisateur = $this->getUtilisateurAnonyme();
if ($this->identificationEstDemandee($uid)) {
if (!$utilisateur = $this->utilisateurEstIdentifie()) {
if ($this->identifierUtilisateur($uid[0],$uid[1],1)) {
if ($this->identificationEstDemandee($uid)) {
if (!$utilisateur = $this->utilisateurEstIdentifie()) {
if ($this->identifierUtilisateur($uid[0],$uid[1],1)) {
$utilisateur= $this->chargerInfosUtilisateur($uid[0]);
$utilisateur['connecte'] = true;
}
// TODO: utilisateur inexistant ?
}
else {
} else {
$utilisateur = $this->chargerInfosUtilisateur($utilisateur);
$utilisateur['connecte'] = true;
}
}
else {
} else {
$this->deconnecterUtilisateur();
}
 
$this->envoyerInfosUtilisateur($utilisateur);
}
public function obtenirIdentiteConnectee() {
}
 
public function obtenirIdentiteConnectee() {
$login_utilisateur = $this->utilisateurEstIdentifie();
if ($login_utilisateur) {
$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);
92,114 → 84,106
$utilisateur = $this->getUtilisateurAnonyme();
}
return $utilisateur;
}
public function obtenirUtilisateurSiExiste($login_utilisateur) {
$utilisateur = $this->getUtilisateurAnonyme();
if($utilisateur_existe = $this->chargerInfosUtilisateur($login_utilisateur)) {
$utilisateur = $utilisateur_existe;
$utilisateur['connecte'] = true;
}
return $utilisateur;
}
private function identificationEstDemandee($tableau_param) {
return (isset($tableau_param[1]) && trim($tableau_param[1] != ''));
}
private function envoyerInfosUtilisateur($utilisateur) {
if(!$utilisateur) {
$this->envoyerJson($this->getUtilisateurAnonyme());
return true;
}
$utilisateur['connecte'] = ($utilisateur['connecte']) ? true : false;
$utilisateur['licence_acceptee'] = ($utilisateur['licence_acceptee']) ? true : false;
$utilisateur['admin'] = ($utilisateur['admin']) ? true : false;
$this->envoyerJson($utilisateur);
return true;
}
function chargerInfosUtilisateur($login) {
}
 
$requete_selection_utilisateur = 'SELECT * FROM cel_utilisateurs cu '.
'WHERE courriel = '.Cel::db()->proteger($login);
public function obtenirUtilisateurSiExiste($login_utilisateur) {
$utilisateur = $this->getUtilisateurAnonyme();
if ($utilisateur_existe = $this->chargerInfosUtilisateur($login_utilisateur)) {
$utilisateur = $utilisateur_existe;
$utilisateur['connecte'] = true;
}
return $utilisateur;
}
 
$resultat_selection_utilisateur = Cel::db()->requeter($requete_selection_utilisateur);
$retour = false;
if(is_array($resultat_selection_utilisateur) && count($resultat_selection_utilisateur) > 0) {
$retour = $resultat_selection_utilisateur[0];
private function identificationEstDemandee($tableau_param) {
return (isset($tableau_param[1]) && trim($tableau_param[1] != ''));
}
 
private function envoyerInfosUtilisateur($utilisateur) {
if (!$utilisateur) {
$this->envoyerJson($this->getUtilisateurAnonyme());
return true;
}
if(is_array($retour) && ($retour['date_premiere_utilisation'] == NULL || $retour['date_premiere_utilisation'] == '0000-00-00 00:00:00')) {
$utilisateur['connecte'] = ($utilisateur['connecte']) ? true : false;
$utilisateur['licence_acceptee'] = ($utilisateur['licence_acceptee']) ? true : false;
$utilisateur['admin'] = ($utilisateur['admin']) ? true : false;
 
$this->envoyerJson($utilisateur);
return true;
}
 
private function chargerInfosUtilisateur($login) {
$requete = 'SELECT * '.
'FROM cel_utilisateurs AS cu '.
'WHERE courriel = '.Cel::db()->proteger($login).' '.
' -- '.__FILE__.':'.__LINE__;
$resultats = Cel::db()->requeter($requete);
 
$retour = false;
if (is_array($resultats) && count($resultats) > 0) {
$retour = $resultats[0];
}
if (is_array($retour) && ($retour['date_premiere_utilisation'] == NULL || $retour['date_premiere_utilisation'] == '0000-00-00 00:00:00')) {
$this->initialiserInfosUtilisateur($retour['id_utilisateur']);
$this->affecterDonneesWidgetSaisie($login, $retour);
}
return $retour;
}
private function utilisateurEstIdentifie() {
$login_utilisateur = false;
if (!$login_utilisateur = $this->utilisateurEstIdentifieSession()) {$login_utilisateur = $this->utilisateurEstIdentifieCookie();}
 
private function utilisateurEstIdentifie() {
$login_utilisateur = false;
if (!$login_utilisateur = $this->utilisateurEstIdentifieSession()) {
$login_utilisateur = $this->utilisateurEstIdentifieCookie();
}
return $login_utilisateur;
}
}
 
function utilisateurEstIdentifieSession() {
return (isset($_SESSION["user"]) && isset($_SESSION["user"]["courriel"])) ? $_SESSION["user"]["courriel"] : false;
}
function utilisateurEstIdentifieCookie() {
return isset($_COOKIE["cel_name"]) && ($this->identifierUtilisateurSansEncryptionMotDePasse($_COOKIE["cel_name"], $_COOKIE["cel_password"])) ? $_COOKIE["cel_name"] : false;
}
private function utilisateurEstIdentifieSession() {
return (isset($_SESSION['user']) && isset($_SESSION['user']['courriel'])) ? $_SESSION['user']['courriel'] : false;
}
 
function setUtilisateur($user, $remember=1) {
$_SESSION["user"] = $user;
$this->setPersistentCookie("cel_id", $user["id_utilisateur"], $remember);
$this->setPersistentCookie("cel_name", $user["courriel"], $remember);
$this->setPersistentCookie("cel_password", $user["mot_de_passe"], $remember);
$this->setPersistentCookie("cel_remember", $remember, $remember);
}
private function utilisateurEstIdentifieCookie() {
return isset($_COOKIE['cel_name']) && ($this->identifierUtilisateurSansEncryptionMotDePasse($_COOKIE['cel_name'], $_COOKIE['cel_password'])) ? $_COOKIE['cel_name'] : false;
}
 
function deconnecterUtilisateur() {
$_SESSION["user"] = "";
$this->supprimerCookie("cel_id");
$this->supprimerCookie("cel_name");
$this->supprimerCookie("cel_password");
$this->supprimerCookie("cel_remember");
}
private function deconnecterUtilisateur() {
$_SESSION['user'] = '';
$this->supprimerCookie('cel_id');
$this->supprimerCookie('cel_name');
$this->supprimerCookie('cel_password');
$this->supprimerCookie('cel_remember');
}
 
function setPersistentCookie($name, $value, $remember = 1) {
SetCookie($name, $value, time() + ($remember ? (60*60*24*100) : (60*60)),'/');
$_COOKIE[$name] = $value;
}
private function supprimerCookie($name) {
SetCookie($name, '', 1,'/'); $_COOKIE[$name] = '';
}
 
function supprimerCookie($name) {
SetCookie($name, "", 1,'/'); $_COOKIE[$name] = "";
}
 
function identifierUtilisateur($login, $mot_de_passe, $remember = 1) {
private function identifierUtilisateur($login, $mot_de_passe, $remember = 1) {
$identification = false;
if ($utilisateur = $this->chargerInfosUtilisateur($login)) {
if ($utilisateur['mot_de_passe'] == $this->encrypterMotDePasse($mot_de_passe) || $mot_de_passe == "debug") {
$this->setUtilisateur($utilisateur, $remember);
$identification = true;
}
if ($utilisateur = $this->chargerInfosUtilisateur($login)) {
if ($utilisateur['mot_de_passe'] == $this->encrypterMotDePasse($mot_de_passe) || $mot_de_passe == 'debug') {
$this->setUtilisateur($utilisateur, $remember);
$identification = true;
}
}
return $identification;
}
 
function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe, $remember = 1) {
private function setUtilisateur($user, $remember=1) {
$_SESSION['user'] = $user;
$this->setPersistentCookie('cel_id', $user['id_utilisateur'], $remember);
$this->setPersistentCookie('cel_name', $user['courriel'], $remember);
$this->setPersistentCookie('cel_password', $user['mot_de_passe'], $remember);
$this->setPersistentCookie('cel_remember', $remember, $remember);
}
 
private function setPersistentCookie($name, $value, $remember = 1) {
SetCookie($name, $value, time() + ($remember ? (60*60*24*100) : (60*60)), '/');
$_COOKIE[$name] = $value;
}
 
private function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe, $remember = 1) {
$souvenir = false;
 
if ($utilisateur = $this->chargerInfosUtilisateur($login)) {
if ($utilisateur['mot_de_passe'] == $mot_de_passe) {
$this->setUtilisateur($utilisateur, $remember);
206,37 → 190,36
$souvenir = true;
}
}
return $souvenir;
}
 
private function getUtilisateurAnonyme() {
return array('connecte' => false,
'id_utilisateur' => session_id(),
'courriel' => '',
'mot_de_passe' => '',
'nom' => '',
'prenom' => '',
'licence_acceptee' => false,
'preferences_utilisateur' => '',
'admin' => false
);
'id_utilisateur' => session_id(),
'courriel' => '',
'mot_de_passe' => '',
'nom' => '',
'prenom' => '',
'licence_acceptee' => false,
'preferences_utilisateur' => '',
'admin' => false
);
}
 
private function encrypterMotDePasse($mot_de_passe) {
return md5($mot_de_passe);
}
 
private function initialiserInfosUtilisateur($id_utilisateur) {
$requete = 'INSERT INTO cel_utilisateurs_infos '.
'(id_utilisateur, admin, licence_acceptee, preferences, date_premiere_utilisation )'.
'VALUES '.
"(".Cel::db()->proteger($id_utilisateur).", '0', '0', NULL, NOW()) ".
'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() ';
$resultat_insertion_infos = Cel::db()->executer($requete);
'(id_utilisateur, admin, licence_acceptee, preferences, date_premiere_utilisation ) '.
'VALUES '.
'('.Cel::db()->proteger($id_utilisateur).", '0', '0', NULL, NOW()) ".
'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() '.
' -- '.__FILE__.':'.__LINE__;
Cel::db()->executer($requete);
}
 
/**
* Lors de la première connection au cel d'un utilisateur, affecte à son compte ses observations saisies
* dans les widgets de saisie, où seul son mail avait été conservé en attendant
248,10 → 231,9
//TODO tout ceci pourrait être simplifié sans avoir besoin d'instancier quoi que ce soit
$gestion_obs = new GestionObservation($this->config);
$gestion_img = new GestionImage($this->config);
 
$gestion_obs->migrerObservationsMailVersId($mail_utilisateur, $infos_utilisateur);
$gestion_img->migrerImagesMailVersId($mail_utilisateur, $infos_utilisateur);
GestionMotsClesChemin::migrerMotsClesMailVersId($mail_utilisateur, $infos_utilisateur);
}
}
?>
}
/trunk/jrest/services/Name.php
1,56 → 1,37
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author David Delon <david.delon@clapas.net>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
/**
* Name.php
*
* in : utf8
* out : utf8
*
* Cas d'utilisation :
* Service recherche nom retenu depuis un numero nomenclatural pour la BDNFF
*
* 1 : L'application recoit un numero nomenclatural
* 2 : L'application retourne le nom retenu associé
*/
* Service recherche nom retenu depuis un numero nomenclatural pour la BDNFF
*
* 1 : L'application recoit un numero nomenclatural
* 2 : L'application retourne le nom retenu associé
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class Name extends Cel {
 
function getElement($uid){
$retour = array("null");
if (isset($uid[0])) {
$chercheur_info_taxon = new RechercheInfosTaxonBeta($this->config);
$retour = $chercheur_info_taxon->effectuerRequeteInfosComplementairesEtFormaterNom($uid[0]);
public function getElement($uid){
$retour = array('null');
if (isset($uid[0])) {
$chercheurInfoTaxon = new RechercheInfosTaxonBeta($this->config);
$retour = $chercheurInfoTaxon->effectuerRequeteInfosComplementairesEtFormaterNom($uid[0]);
}
$this->envoyerJson($retour);
return true;
$this->envoyerJson($retour);
return true;
}
function getRessource(){
print "[\"null\"]";
return;
 
public function getRessource(){
print '["null"]';
return;
}
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.3 2008-01-30 08:57:28 ddelon
* fin mise en place mygwt
*
* Revision 1.2 2007-05-21 18:13:30 ddelon
* Refactoring et documentation
*
*/
?>
}
/trunk/jrest/services/InventoryKeyWordImageLink.php
1,38 → 1,41
<?php
// declare(encoding='UTF-8');
/**
* @category PHP
* @package jrest
* @author Aurélien Peronnet <aurelien@tela-botania.org>
* @author Raphaël Droz <raphael@tela-botania.org>
* @copyright 2010, 2013 Tela-Botanica
* @license Licence CECILL <http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* Service de liaisons de mots clés à des images.
* Le service lie une ou plusieurs mots clés à une ou plusieurs images.
*
* Service de liaisons de mots clés à des images.
* Le service lie une ou plusieurs mots clés à une ou plusieurs images
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Images
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryKeyWordImageLink extends Cel {
 
class InventoryKeyWordImageLink extends Cel {
public function createElement($pairs) {
// Controle detournement utilisateur
$this->controleUtilisateur($pairs['ce_utilisateur']);
 
if (!isset($pairs['mots_cles']) || !isset($pairs['images']) || !isset($pairs['ce_utilisateur'])) {
return;
}
 
$ids_images = array_filter(explode(',', $pairs['images']));
$ids_mots_cles = array_filter(explode(',', $pairs['mots_cles']));
 
$gestion_mots_cles = new GestionMotsClesChemin($this->config,'images');
$gestion_mots_cles = new GestionMotsClesChemin($this->config,'images');
$liaison = true;
$liaison = $gestion_mots_cles->modifierLiaisonParTableaux($ids_mots_cles, $ids_images, true);
foreach($ids_images as $id_element_lie) {
 
foreach ($ids_images as $id_element_lie) {
//TODO: que faire si la régénération d'index texte échoue ?
$r_index = GestionMotsClesChemin::regenererIndexTexteMotCle($id_element_lie, 'images');
GestionMotsClesChemin::regenererIndexTexteMotCle($id_element_lie, 'images');
}
return $liaison;
}
40,8 → 43,7
public function deleteElement($uid){
// n'est jamais appelée car pour supprimer les mots clés d'une image
// on appelle createElement avec des mots clés vides
// car les mots clés images ne fonctionnent pas pareil que ceux des obs
// car les mots clés images ne fonctionnent pas pareil que ceux des obs
// dans l'interface
}
}
?>
}
/trunk/jrest/services/InventoryKeyWordObsLink.php
1,35 → 1,42
<?php
// declare(encoding='UTF-8');
/**
* @package jrest
* @author Aurélien Peronnet <aurelien@tela-botania.org>
* @copyright 2010, 2013 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* Service de liaisons de mots clés à des observations.
* Le service lie une ou plusieurs mots clés à une ou plusieurs observations.
*
* Service de liaisons de mots clés à des observations.
* Le service lie une ou plusieurs mots clés à une ou plusieurs observations
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Images
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryKeyWordObsLink extends Cel {
 
class InventoryKeyWordObsLink extends Cel {
public function getElement($uid) { }
public function createElement($pairs) {
 
public function createElement($pairs) {
// Controle detournement utilisateur
$this->controleUtilisateur($pairs['ce_utilisateur']);
 
if (!isset($pairs['mots_cles']) || !isset($pairs['observations']) || !isset($pairs['ce_utilisateur'])) {
return;
}
 
$ids_obs = explode(',',$pairs['observations']);
$ids_mots_cles = explode(',',$pairs['mots_cles']);
 
$gestion_mots_cles = new GestionMotsClesChemin($this->config,'obs');
$liaison_mot_cle = $gestion_mots_cles->modifierLiaisonParTableaux($ids_mots_cles, $ids_obs, false);
foreach($ids_obs as $id_element_lie) {
$r_index = GestionMotsClesChemin::regenererIndexTexteMotCle($id_element_lie, 'obs');
}
 
foreach ($ids_obs as $id_element_lie) {
GestionMotsClesChemin::regenererIndexTexteMotCle($id_element_lie, 'obs');
}
return $liaison_mot_cle;
}
 
36,20 → 43,19
public function deleteElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
if (!isset($uid[0]) || !isset($uid[1]) || !isset($uid[2])) {
return FALSE;
return false;
}
 
$id_utilisateur = $uid[0];
$ids_obs = explode(',',$uid[1]);
$ids_obs = explode(',', $uid[1]);
$ids_mots_cles = explode(',', GestionMotsClesChemin::nettoyerMotsClesAvantSuppression($uid[2]));
 
$gestion_mots_cles = new GestionMotsClesChemin($this->config, 'obs');
 
$suppression_liaisons = $gestion_mots_cles->supprimerLiaisonsMotsCles($ids_mots_cles, $ids_obs, $id_utilisateur);
foreach($ids_obs as $id_element_lie) {
$r_index = GestionMotsClesChemin::regenererIndexTexteMotCle($id_element_lie, 'obs');
GestionMotsClesChemin::regenererIndexTexteMotCle($id_element_lie, 'obs');
}
}
}
/trunk/jrest/services/InventoryImport.php
1,60 → 1,39
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author David Delon <david.delon@clapas.net>
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
/**
* InventoryImport.php
*
* in : utf8
* out : utf8
*
* Cas d'utilisation :
* Service importation releve en cours
*
* 1 : L'utilisateur à traiter est communique au service
* 2 : Les releves associés à la session en cours sont transferés à l'utilisateur identifié
*/
* Service importation releve en cours :
* 1 : L'utilisateur à traiter est communique au service
* 2 : Les releves associés à la session en cours sont transferés à l'utilisateur identifié
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryImport extends Cel {
 
function getElement($uid){
// Controle detournement utilisateur
public function getElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
$id_session_temporaire = session_id();
 
$gestionnaire_observation = new GestionObservation($this->config);
$migration_compte_a_compte = $gestionnaire_observation->migrerObservations($id_session_temporaire, $uid[0]);
 
$retour = false;
if($migration_compte_a_compte) {
$retour = 'OK';
}
$retour = 'OK';
}
 
echo $retour;
exit;
exit();
}
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.3 2008-01-30 08:57:28 ddelon
* fin mise en place mygwt
*
* Revision 1.2 2007-05-22 12:54:09 ddelon
* Securisation acces utilisateur
*
* Revision 1.1 2007-05-21 18:12:20 ddelon
* Gestion des importations locale de releves
*/
?>
}
/trunk/jrest/services/InventoryUserList.php
1,31 → 1,35
<?php
// declare(encoding='UTF-8');
/**
* Liste des utilisateurs du cel, par défaut les 50 premiers
* ou bien commencant par la chaine fournie en paramètre
* in : utf8
* out : utf8
* Liste des utilisateurs du cel, par défaut les 50 premiers ou bien commencant par la chaine fournie en paramètre
*
* @category PHP
* @package jrest
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright © 2010-2014 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryUserList extends Cel {
 
function getElement($uid) {
public function getElement($uid) {
$this->controleUtilisateur($uid[0]);
 
$requete_utilisateurs ='SELECT DISTINCT id_utilisateur, courriel FROM cel_utilisateurs '.
$requete = 'SELECT DISTINCT id_utilisateur, courriel FROM cel_utilisateurs '.
$this->construireRequeteConditionTableUtilisateurs($uid).' '.
'UNION '.
'SELECT DISTINCT ce_utilisateur as id_utilisateur, courriel_utilisateur as courriel '.
'FROM cel_obs '.
$this->construireRequeteConditionTableObs($uid).' '.
'LIMIT 0,50';
'LIMIT 0,50 '.
' -- '.__FILE__.':'.__LINE__;
$utilisateurs = Cel::db()->requeter($requete);
 
$utilisateurs = Cel::db()->requeter($requete_utilisateurs);
 
$liste_utilisateurs = array();
if ($utilisateurs) {
foreach ($utilisateurs as $utilisateur) {
32,12 → 36,28
$liste_utilisateurs[] = $utilisateur;
}
}
usort($liste_utilisateurs, 'trierUtilisateurs');
usort($liste_utilisateurs, array($this, 'trierUtilisateurs'));
 
$this->envoyerJson($liste_utilisateurs);
return true;
}
 
public function trierUtilisateurs($val1, $val2) {
if (strstr($val1['courriel'], '@')) {
if (strstr($val2['courriel'], '@')) {
return strcmp($val1['courriel'], $val2['courriel']);
} else {
return -1;
}
} else {
if (strstr($val2['courriel'], '@')) {
return 1;
} else {
return strcmp($val1['courriel'], $val2['courriel']);
}
}
}
 
private function construireRequeteConditionTableUtilisateurs($params) {
$condition = '';
if (isset($params[1]) && $params[1] != null && $params[1] != '*') {
53,21 → 73,4
}
return $condition;
}
}
 
function trierUtilisateurs($val1, $val2) {
if (strstr($val1['courriel'], '@')) {
if (strstr($val2['courriel'], '@')) {
return strcmp($val1['courriel'], $val2['courriel']);
} else {
return -1;
}
} else {
if (strstr($val2['courriel'], '@')) {
return 1;
} else {
return strcmp($val1['courriel'], $val2['courriel']);
}
}
}
?>
}
/trunk/jrest/services/InventoryImportMail.php
1,209 → 1,172
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// declare(encoding='UTF-8');
/**
* Service d'import d'image à partir de mails
* Encodage en entrée : utf8
* Encodage en sortie : utf8
* Service d'import d'image à partir d'e-mails.
*
* @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$
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Images
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
Class InventoryImportMail extends Cel {
class InventoryImportMail extends Cel {
 
/**
* Appelée en mode client, lit le mail envoyé sur l'entrée stdin
* et le stocke dans le dossier temporaire en attendant
* qu'une tache périodique associée traite les mails en attente
*
*
* @param array $params les paramètres du script client, l'utilisateur est indiqué avec le paramètre -s
*/
public function stockerMailCli($params)
{
public function stockerMailCli($params) {
$contenu_mail = file_get_contents('php://stdin');
 
$parametres_ajout = array();
$parametres_ajout['mail_utilisateur'] = $params['-s'];
 
$stockage = $this->stockerMailTemporaire($parametres_ajout, $contenu_mail);
if($stockage) {
if ($stockage) {
$message_attente = 'Votre messsage a été reçu, et est en attente de traitement, '.
'vous recevrez un message lorsque celui-ci aura été effectué';
'vous recevrez un message lorsque celui-ci aura été effectué';
mail($parametres_ajout['mail_utilisateur'],'Votre message est en attente de traitement',$message_attente);
} else {
$message_echec = 'Votre messsage a été reçu, mais il n\'a pas pu être stocké';
$message_echec = 'Votre messsage a été reçu, mais il n\'a pas pu être stocké';
mail($parametres_ajout['mail_utilisateur'],'Problème lors de reception du message',$message_echec);
}
exit;
exit();
}
 
private function stockerMailTemporaire($parametres_ajout, $contenu_mail) {
$expediteur = $parametres_ajout['mail_utilisateur'];
$nom_fichier_temp = $this->fabriquerNomTemporaireStockageMail($expediteur);
$dossier_stockage_temp = $this->config['chemin_stockage_temp'];
$chemin_stockage_image_temp = $dossier_stockage_temp.'/mails/';
return file_put_contents($chemin_stockage_image_temp.$nom_fichier_temp);
 
return file_put_contents($chemin_stockage_image_temp.$nom_fichier_temp, $contenu_mail);
}
 
/**
* Appelée en mode client, lit le mail envoyé sur l'entrée stdin
* extrait les images en pièces jointes, et les ajoute au cel de l'utilisateur
* expediteur
*
* expediteur
*
* @param array $params les paramètres du script client, l'utilisateur est indiqué avec le paramètre -s
*/
public function traiterMailCli($params)
{
 
public function traiterMailCli($params) {
$contenu_mail = file_get_contents('php://stdin');
 
$parametres_ajout = array();
$parametres_ajout['mail_utilisateur'] = $params['-s'];
$ids_stockage = $this->traiterMail($parametres_ajout, $contenu_mail);
 
$ids_stockage = $this->traiterMail($parametres_ajout, $contenu_mail);
foreach($ids_stockage as $nom_image => $id_stockage) {
if($id_stockage) {
mail($parametres_ajout['mail_utilisateur'],'Votre image a été ajoutée au Carnet en ligne','Votre image '.$nom_image.' a été ajoutée avec succès');
foreach ($ids_stockage as $nom_image => $id_stockage) {
if ($id_stockage) {
$sujet = "Votre image a été ajoutée au Carnet en ligne";
$msg = "Votre image $nom_image a été ajoutée avec succès";
mail($parametres_ajout['mail_utilisateur'], $sujet, $msg);
} else {
mail($parametres_ajout['mail_utilisateur'],'Problème lors de l\'ajout au Carnet en ligne','Votre image '.$nom_image.' n\'a pas pu être ajoutée');
$sujet = "Problème lors de l'ajout au Carnet en ligne";
$msg = "Votre image $nom_image n'a pas pu être ajoutée";
mail($parametres_ajout['mail_utilisateur'], $sujet, $msg);
}
}
exit();
}
 
/**
* Traite le mail fourni en paramètre extrait les images en pièces jointes,
* et les ajoute au cel de l'utilisateur expediteur
*
* Traite le mail fourni en paramètre extrait les images en pièces jointes,
* et les ajoute au cel de l'utilisateur expediteur
*
* @param array $params les paramètres du script client, l'utilisateur est indiqué dans la case 'identifiant'
*/
public function traiterMail($params, $contenu_mail)
{
public function traiterMail($params, $contenu_mail) {
$pieces_jointes = $this->extrairePiecesJointes($contenu_mail);
 
$stockeur_image = new InventoryImage($this->config);
$ids = array();
$infos_utilisateur = $this->getInfosComplementairesUtilisateurPourMail($params['mail_utilisateur']);
$params['ce_utilisateur'] = $infos_utilisateur['id_utilisateur'];
foreach($pieces_jointes as $piece_jointe) {
$nouvel_id_image = $stockeur_image->ajouterImageSurDdEtBdd($params, $piece_jointe);
if($nouvel_id_image)
{
foreach ($pieces_jointes as $piece_jointe) {
$nouvel_id_image = $stockeur_image->ajouterImageSurDdEtBdd($params, $piece_jointe);
 
if($nouvel_id_image) {
$ids[$piece_jointe['name']] = $nouvel_id_image;
}
else
{
} else {
$ids[$piece_jointe['name']] = false;
}
}
 
// TODO: permettre la création d'observations liées aux images à partir du mail
// et d'une syntaxe simple à définir
return $ids;
}
 
/**
* Appelée en mode client, parse le dossier ou sont stockés les mails
* extrait les images en pièces jointes, et les ajoute au cel de l'utilisateur
*
*
*/
public function parserDossierMail()
{
public function parserDossierMail() {
$dossier_stockage_temp = $this->config['chemin_stockage_temp'];
$chemin_stockage_image_temp = $dossier_stockage_temp.'/mails/';
foreach (new DirectoryIterator($chemin_stockage_image_temp) as $fichier_a_stocker) {
if($fichier_ou_dossier->isDot()) {
if ($fichier_ou_dossier->isDot()) {
continue;
}
$chemin_fichier = $fichier_a_stocker->getPathname();
$nom_fichier = $fichier_ou_dossier->getFilename();
$expediteur_mail = $this->obtenirExpediteurPourNomTemporaireMail($nom_fichier);
$parametres = array('courriel_utilisateur' => $expediteur_mail);
$chemin_fichier = $fichier_a_stocker->getPathname();
$contenu_mail = file_get_contents($chemin_fichier);
$parametres = array('courriel_utilisateur' => $expediteur_mail);
$this->traiterMail($parametres, $contenu_mail);
unlink($chemin_fichier);
}
}
 
private function extrairePiecesJointes($mail) {
 
$pieces_jointes = array();
$args['include_bodies'] = true;
$args['decode_bodies'] = true;
$args['decode_headers'] = true;
$args['input'] = $mail;
$dossier_stockage_temp = $this->config['chemin_stockage_temp'];
 
$pieces_jointes = array();
$tableau_mail_decode = Mail_mimeDecode::decode($args);
foreach ($tableau_mail_decode->parts as $partie) {
if ($partie->ctype_primary == 'image' && $partie->ctype_secondary == 'jpeg') {
$informations = array();
$nom_original = $partie->ctype_parameters['name'];
$fichier = $partie->body;
$hash = md5(time());
$chemin_temp = $dossier_stockage_temp.'/images/'.$hash.'.jpg';
 
$temp = fopen($chemin_temp,'w+');
fwrite($temp,$fichier);
fclose($temp);
chmod($chemin_temp, 0777);
$informations = array('tmp_name' => $chemin_temp,'name' => $nom_original,'type' => 'image/jpeg','size' => filesize($chemin_temp));
$pieces_jointes[] = $informations;
chmod($chemin_temp, 0777);
 
$pieces_jointes[] = array(
'tmp_name' => $chemin_temp,
'name' => $nom_original,
'type' => 'image/jpeg',
'size' => filesize($chemin_temp));
}
}
 
return $pieces_jointes;
}
 
private function fabriquerNomTemporaireStockageMail($expediteur) {
return time().'_'.$expediteur;
}
 
private function obtenirExpediteurPourNomTemporaireMail($nom_temp) {
$chaine_separee = explode('_', $nom_temp,1);
$nom_expediteur = false;
if($chaine_separee && count($chaine_separee) > 1) {
if ($chaine_separee && count($chaine_separee) > 1) {
$nom_expediteur = $chaine_separee[1];
}
return $nom_expediteur;
}
}
?>
}
/trunk/jrest/services/CoordSearch.php
1,13 → 1,19
<?php
// declare(encoding='UTF-8');
/**
* Service recherche de commune par coordonnées et vice versa
* Encodage en entrée : utf8
* Encodage en sortie : utf8
* Service recherche de commune par coordonnées et vice versa.
*
* @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$
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Images
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class CoordSearch extends Cel {
 
17,8 → 23,7
private $nom_service_geocoding = null;
private $nom_service_reverse_geocoding = null;
 
function CoordSearch($config) {
 
public function __construct($config) {
parent::__construct($config);
 
$this->adresse_service_geonames = $this->config['cel']['url_service_geo_geonames'];
37,8 → 42,7
* $uid[3] = code_postal (ou * si recherche d'une commune correspondant à des coordonnées)
* $uid[4] = code_pays (ou * si recherche d'une commune correspondant à des coordonnées, par défaut vaut FR)
*/
function getElement($uid){
 
public function getElement($uid){
$header = '';
$retour = array();
 
45,7 → 49,6
$params = $this->traiterParametres($uid);
 
if ($this->estUneRequeteReverseGeocoding($params)) {
 
$informations_communes = $this->effectuerRequeteReverseGeocodingCartoOsm($params['lat'], $params['lon']);
 
if (!$informations_communes) {
53,40 → 56,35
}
 
$header = 'Content-Type: application/json; charset=UTF-8';
$retour = json_encode($informations_communes) ;
 
} elseif ($this->estUneRequeteGeocoding($params)) {
 
$retour = json_encode($informations_communes);
} elseif ($this->estUneRequeteGeocoding($params)) {
$informations_coord = $this->chercherCentroideCommuneBdd($params['commune'],$params['code_postal']);
if(!$informations_coord) {
if (!$informations_coord) {
$informations_coord = $this->effectuerRequeteGeocodingGeonames($params['commune'],$params['code_postal'],$params['code_pays']);
}
 
$header = 'Content-Type: application/json; charset=UTF-8';
$retour = json_encode($informations_coord);
 
} else {
 
$header = 'HTTP/1.0 400 Bad Request';
$retour = 'Commune ou Coordonnées non spécifiées' ;
}
 
} else {
$header = 'HTTP/1.0 400 Bad Request';
$retour = 'Commune ou Coordonnées non spécifiées';
}
header($header);
echo $retour;
}
 
protected function traiterParametres($params) {
 
$lat = $this->affecterValeurParametreOuDefaut($params, 0, '*');
$lng = $this->affecterValeurParametreOuDefaut($params, 1, '*');
 
$commune = $this->affecterValeurParametreOuDefaut($params, 2, '*');
$code_postal = $this->affecterValeurParametreOuDefaut($params, 3, '*');
 
$code_pays = $this->affecterValeurParametreOuDefaut($params, 4, 'FR');
 
return array('lat' => $lat, 'lon' => $lng, 'commune' => $commune,
'code_postal' => $code_postal, 'code_pays' => $code_pays);
return array(
'lat' => $lat,
'lon' => $lng,
'commune' => $commune,
'code_postal' => $code_postal,
'code_pays' => $code_pays);
}
 
private function affecterValeurParametreOuDefaut($params, $indice, $valeur_si_non_present) {
94,7 → 92,6
}
 
private function estUneRequeteReverseGeocoding($params) {
 
return ($params['lat'] != '*' && $params['lon'] != '*');
}
 
103,136 → 100,114
}
 
private function effectuerRequeteReverseGeocodingCartoOsm($lat, $lon) {
 
$infos_commune_json = @file_get_contents($this->adresse_service_local."?lat=".$lat."&lon=".$lon);
$infos_commune_json = @file_get_contents($this->adresse_service_local."?lat=$lat&lon=$lon");
$infos_commune = json_decode($infos_commune_json);
 
$retour = false;
 
if ($this->estUnRetourOsmValide($infos_commune)) {
$retour = array('nom' => $infos_commune->nom, 'code_insee' => $infos_commune->codeINSEE);
}
 
return $retour;
}
 
private function estUnretourOsmValide($retour) {
return (is_a($retour,'stdClass') && property_exists($retour,'nom') && property_exists($retour,'codeINSEE'));
return (is_a($retour, 'stdClass') && property_exists($retour, 'nom') && property_exists($retour, 'codeINSEE'));
}
 
private function effectuerRequeteReverseGeocodingGeonames($lat, $lon) {
 
$infos_commune_json = @file_get_contents($this->adresse_service_geonames.
$url = $this->adresse_service_geonames.
$this->nom_service_reverse_geocoding.
"?lat=".urlencode($lat)."&lng=".urlencode($lon).
"&style=full");
'?lat='.urlencode($lat).'&lng='.urlencode($lon).
'&style=full';
$infos_commune_json = @file_get_contents($url);
$objet_retour = json_decode($infos_commune_json);
 
$retour = false;
if($this->estUnRetourReverseGeocodingGeonamesValide($objet_retour)) {
$retour = array('nom' => $objet_retour->geonames[0]->adminName4, 'code_insee' => $objet_retour->geonames[0]->adminCode4);
if ($this->estUnRetourReverseGeocodingGeonamesValide($objet_retour)) {
$retour = array(
'nom' => $objet_retour->geonames[0]->adminName4,
'code_insee' => $objet_retour->geonames[0]->adminCode4);
}
 
return $retour;
}
 
private function estUnRetourReverseGeocodingGeonamesValide($retour) {
 
$valide = false;
 
if (is_a($retour,'stdClass') && property_exists($retour,'geonames')
&& is_array($retour->geonames) && count($retour->geonames) > 0) {
if (is_a($retour, 'stdClass') && property_exists($retour, 'geonames')
&& is_array($retour->geonames) && count($retour->geonames) > 0) {
$objet_resultats = $retour->geonames[0];
if (property_exists($objet_resultats,'adminName4') && property_exists($objet_resultats,'adminCode2')) {
if (property_exists($objet_resultats, 'adminName4') && property_exists($objet_resultats, 'adminCode2')) {
$valide = true;
}
}
 
return $valide;
}
 
private function chercherCentroideCommuneBdd($commune, $departement) {
 
$commune_formatee = str_replace(' ','_',$commune);
$commune_formatee = str_replace('-','_',$commune_formatee);
 
if(strlen($departement) > 2) {
$departement = substr($departement,0,2);
$commune_formatee = str_replace(array(' ', '-'), '_', $commune);
if (strlen($departement) > 2) {
$departement = substr($departement, 0, 2);
}
$requete_selection_commune = 'SELECT utm_x, utm_y, utm_secteur, code FROM cel_zones_geo '.
'WHERE nom LIKE '.Cel::db()->proteger($commune_formatee).' AND code LIKE '.Cel::db()->proteger($departement.'%');
$requete = 'SELECT utm_x, utm_y, utm_secteur, code FROM cel_zones_geo '.
'WHERE nom LIKE '.Cel::db()->proteger($commune_formatee).' '.
'AND code LIKE '.Cel::db()->proteger($departement.'%').' '.
' -- '.__FILE__.':'.__LINE__;
$commune_coordonnees = Cel::db()->requeter($requete);
 
$commune_coordonnees = Cel::db()->requeter($requete_selection_commune);
 
$retour = false;
if ($commune_coordonnees && is_array($commune_coordonnees) && count($commune_coordonnees) > 0) {
$lat_lon = $this->convertirUtmVersLatLong($commune_coordonnees[0]['utm_x'],$commune_coordonnees[0]['utm_y'],$commune_coordonnees[0]['utm_secteur']);
 
if($commune_coordonnees && is_array($commune_coordonnees) && count($commune_coordonnees) > 0) {
 
$lat_lon = $this->convertirUtmVersLatLong($commune_coordonnees[0]['utm_x'],$commune_coordonnees[0]['utm_y'],$commune_coordonnees[0]['utm_secteur']);
 
$retour = array('lat' => (float)$lat_lon['lat'],
'lng' => (float)$lat_lon['lng'],
'nom' => $commune,
'code_insee' => $commune_coordonnees[0]['code']
);
 
$retour = array(
'lat' => (float) $lat_lon['lat'],
'lng' => (float) $lat_lon['lng'],
'nom' => $commune,
'code_insee' => $commune_coordonnees[0]['code']
);
}
 
return $retour;
}
 
private function convertirUtmVersLatLong($x, $y, $sector) {
 
$lat_long = array();
 
$convertisseur = new gPoint();
$convertisseur->setUTM($x, $y, $sector);
$convertisseur->convertTMtoLL();
 
$lat_long = array();
$lat_long['lat'] = str_replace(',','.',$convertisseur->Lat());
$lat_long['lng'] = str_replace(',','.',$convertisseur->Long());
 
return $lat_long;
}
 
private function effectuerRequeteGeocodingGeonames($commune, $code_postal, $code_pays) {
 
$requete = $this->adresse_service_geonames.
$this->nom_service_geocoding.
"?placename_startsWith=".urlencode($commune);
 
if($code_postal != '*') {
$requete .= "&postalcode_startsWith=".urlencode($code_postal);
}
$requete .= "&country=".urlencode($code_pays)."&maxRows=10" ;
 
$coord_json = @file_get_contents($requete);
$url = $this->adresse_service_geonames.
$this->nom_service_geocoding.
'?placename_startsWith='.urlencode($commune).
(($code_postal != '*') ? '&postalcode_startsWith='.urlencode($code_postal) : '').
'&country='.urlencode($code_pays).'&maxRows=10';
$coord_json = @file_get_contents($url);
$objet_retour = json_decode($coord_json);
 
$retour = false;
 
if($this->estUnRetourGeocodingGeonamesValide($objet_retour)) {
$retour = array('lat' => $objet_retour->postalCodes[0]->lat,
'lng' => $objet_retour->postalCodes[0]->lng,
'nom' => $objet_retour->postalCodes[0]->placeName,
'code_insee' => $objet_retour->postalCodes[0]->postalCode
);
if ($this->estUnRetourGeocodingGeonamesValide($objet_retour)) {
$retour = array(
'lat' => $objet_retour->postalCodes[0]->lat,
'lng' => $objet_retour->postalCodes[0]->lng,
'nom' => $objet_retour->postalCodes[0]->placeName,
'code_insee' => $objet_retour->postalCodes[0]->postalCode
);
}
 
return $retour;
}
 
private function estUnRetourGeocodingGeonamesValide($retour) {
$valide = false;
 
if (is_a($retour,'stdClass') && property_exists($retour,'postalCodes')
&& is_array($retour->postalCodes) && count($retour->postalCodes) > 0) {
if (is_a($retour, 'stdClass') && property_exists($retour, 'postalCodes')
&& is_array($retour->postalCodes) && count($retour->postalCodes) > 0) {
$objet_resultats = $retour->postalCodes[0];
if (property_exists($objet_resultats,'lat') && property_exists($objet_resultats,'lng')) {
if (property_exists($objet_resultats, 'lat') && property_exists($objet_resultats, 'lng')) {
$valide = true;
}
}
 
return $valide;
}
}
?>
}
/trunk/jrest/services/ImageProvider.php
1,69 → 1,50
<?php
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package papyrus_bp
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/papyrus_bp/
*/
 
/**
* Classe fournissant des images au format demandé ou bien aux dimensions demandées
*
* in=utf8
* out=utf8
*
* Service fournissant des images au format demandé ou bien aux dimensions demandées.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Images
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class ImageProvider extends Cel {
function getElement($uid){
if(!isset($uid[0])) {
 
public function getElement($uid){
if (!isset($uid[0])) {
return;
}
$id_image = $uid[0];
 
$format = 'temp';
if(isset($_GET['format'])) {
if (isset($_GET['format'])) {
$format = $_GET['format'];
}
if(isset($_GET['dimensions'])) {
 
if (isset($_GET['dimensions'])) {
$dimensions = $_GET['dimensions'];
} else {
if(isset($this->config['cel']['format_'.$format])) {
$dimensions = $this->config['cel']['format_'.$format];
}
} else if (isset($this->config['cel']['format_'.$format])) {
$dimensions = $this->config['cel']['format_'.$format];
}
$this->config['cel']['format_'.$format] = $dimensions;
 
$generateur_image = new ImageRecreation($this->config);
$infos_image = $generateur_image->obtenirImageEtInfosPourId($id_image);
if(!$infos_image) {
if (!$infos_image) {
header('HTTP/1.0 404 Not Found');
exit;
exit();
} else {
$image_generee = $generateur_image->creerMiniatureImageSelonFormat($infos_image, $format);
header('Content-type: image/jpeg');
imagejpeg($image_generee);
exit();
}
$image_generee = $generateur_image->creerMiniatureImageSelonFormat($infos_image, $format);
header('Content-type: image/jpeg');
imagejpeg($image_generee);
exit;
}
private function estUneImageALaDemande() {
}
}
?>
}
/trunk/jrest/services/LocationSearch.php
1,70 → 1,67
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// declare(encoding='UTF-8');
/**
* Classe gérant la completion des noms de lieux
* Encodage en entrée : utf8
* Encodage en sortie : utf8
* Service gérant la completion des noms de lieux.
*
* @author David Delon <david.delon@clapas.net>
* @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 © 2010, David Delon
*/
 
/**
* Cas d'utilisation :
* Service completion nom de commune (plus tard de lieu en général)
*
* 1 : L'application recoit un debut de nom de lieu
* 2 : Si la longueur du prefixe est > 2, l'application retourne les 50 premieres lieux
* commencant par ce prefixe
**/
* 2 : Si la longueur du prefixe est > 2, l'application retourne les 50 premieres lieux commencant par ce prefixe
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Auto-complétions
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
 
class LocationSearch extends Cel {
 
function getElement($uid){
public function getElement($uid){
$retour = array();
 
$retour = array();
if (isset($uid[0])) {
$retour = $this->executerRequeteLieu($uid[0]);
}
$this->envoyerJson($retour);
return true;
 
$this->envoyerJson($retour);
return true;
}
 
function getRessource(){
print "[]";
return;
public function getRessource() {
print '[]';
return;
}
 
private function executerRequeteLieu($lieu) {
$lieu_formate = $this->formaterChaineLieuPourRequete($lieu);
$retour = array();
if ($this->estUneChaineRequeteValide($lieu_formate)) {
$requete_information_lieu = 'SELECT DISTINCT nom, code '.
'FROM cel_zones_geo '.
'WHERE '.
'nom LIKE '.Cel::db()->proteger($lieu_formate.'%').' '.
'ORDER BY nom LIMIT 50';
 
$liste_lieux = Cel::db()->requeter($requete_information_lieu);
if($liste_lieux) {
foreach($liste_lieux as $lieu_trouve) {
$retour[] = $this->formaterLigneResultat($lieu_trouve);
}
}
}
return $retour;
}
if ($this->estUneChaineRequeteValide($lieu_formate)) {
$requete = 'SELECT DISTINCT nom, code '.
'FROM cel_zones_geo '.
'WHERE nom LIKE '.Cel::db()->proteger($lieu_formate.'%').' '.
'ORDER BY nom '.
'LIMIT 50 '.
' -- '.__FILE__.':'.__LINE__;
 
$liste_lieux = Cel::db()->requeter($requete);
if ($liste_lieux) {
foreach ($liste_lieux as $lieu_trouve) {
$retour[] = $this->formaterLigneResultat($lieu_trouve);
}
}
}
return $retour;
}
 
/**
* Remplace les * par % pour faire des recherches floues
* Remplace les + par _ (nginx envoie des "+" dans l'URL à la place des espaces)
78,23 → 75,12
$lieu = str_replace(['+', ' ', '-'], '_', $lieu);
return $lieu;
}
 
private function estUneChaineRequeteValide($lieu) {
return (strlen($lieu) > 0) && ($lieu != '%');
}
 
private function formaterLigneResultat($ligne) {
return array($ligne['nom']." (".substr(sprintf("%02s",$ligne['code']),0,2).")",$ligne['code']);
return array($ligne['nom'].' ('.substr(sprintf('%02s', $ligne['code']),0,2).')', $ligne['code']);
}
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.4 2008-01-30 08:57:28 ddelon
* fin mise en place mygwt
*
* Revision 1.3 2007-05-21 18:13:03 ddelon
* Correction bug recherche commune du type "la canourgue"
*
*
*/
?>
}
/trunk/jrest/services/InventoryExport.php
1,39 → 1,32
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author David Delon <david@tela-botania.org>
* @author Aurélien Peronnet <aurelien@tela-botania.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
* Service d'export vers feuille de calcul d'une sélection de relevés.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
 
/**
* in:utf8
* out:iso8859
*
* Export vers feuille de calcul d'une selection de releves
*
*/
 
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(dirname(realpath(__FILE__))) . '/lib');
// la sortie est binaire (xls), mais OLE n'est pas compatible E_ALL en PHP-5.4
error_reporting(error_reporting() ^ E_STRICT);
require_once("lib/OLE.php");
require_once("lib/Spreadsheet/Excel/Writer.php");
require_once 'lib/OLE.php';
require_once 'lib/Spreadsheet/Excel/Writer.php';
 
class InventoryExport extends Cel {
 
private $extendSpreadsheetProductor;
 
function InventoryExport($config) {
 
public function __construct($config) {
parent::__construct($config);
 
$this->extendSpreadsheetProductor = new SpreadsheetProductor();
40,128 → 33,108
$this->extendSpreadsheetProductor->initSpreadsheet();
}
 
function getElement($uid){
public function getElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
$criteres = $_GET;
$chercheur_observations = new RechercheObservation($this->config);
 
$criteres = $_GET;
$chercheur_observations = new RechercheObservation($this->config);
// Creating a workbook
$workbook = new Spreadsheet_Excel_Writer();
$workbook->setVersion(8);
$workbook->send('liste.xls');
 
// Creating a workbook
$workbook = new Spreadsheet_Excel_Writer();
$workbook->setVersion(8);
// Creating a worksheet
$worksheet = $workbook->addWorksheet('Liste');
$worksheet->setInputEncoding('utf-8');
$worksheet->write(0,0,'Espece');
$worksheet->write(0,1,'Numero nomenclatural');
$worksheet->write(0,2,'Nom retenu');
$worksheet->write(0,3,'Numero nomenclatural nom retenu');
$worksheet->write(0,4,'Numero taxonomique');
$worksheet->write(0,5,'Famille');
$worksheet->write(0,6,'Referentiel taxonomique');
$worksheet->write(0,7,'Commune');
$worksheet->write(0,8,'Identifiant Commune');
$worksheet->write(0,9,'Date');
$worksheet->write(0,10,'Lieu-dit');
$worksheet->write(0,11,'Station');
$worksheet->write(0,12,'Milieu');
$worksheet->write(0,13,'Notes');
$worksheet->write(0,14,'Latitude');
$worksheet->write(0,15,'Longitude');
$worksheet->write(0,16,'Referentiel Geographique');
$worksheet->write(0,17,'Ordre');
$worksheet->write(0,18,'Identifiant');
 
$workbook->send('liste.xls');
$numero_page = isset($criteres['numero_page']) ? $criteres['numero_page'] : 0;
$limite = isset($criteres['limite']) ? $criteres['limite'] : 0;
 
// Creating a worksheet
$worksheet = $workbook->addWorksheet('Liste');
$worksheet->setInputEncoding('utf-8');
$worksheet->write(0,0,'Espece');
$worksheet->write(0,1,'Numero nomenclatural');
$worksheet->write(0,2,'Nom retenu');
$worksheet->write(0,3,'Numero nomenclatural nom retenu');
$worksheet->write(0,4,'Numero taxonomique');
$worksheet->write(0,5,'Famille');
$worksheet->write(0,6,'Referentiel taxonomique');
$worksheet->write(0,7,'Commune');
$worksheet->write(0,8,'Identifiant Commune');
$worksheet->write(0,9,'Date');
$worksheet->write(0,10,'Lieu-dit');
$worksheet->write(0,11,'Station');
$worksheet->write(0,12,'Milieu');
$worksheet->write(0,13,'Notes');
$worksheet->write(0,14,'Latitude');
$worksheet->write(0,15,'Longitude');
$worksheet->write(0,16,'Referentiel Geographique');
$worksheet->write(0,17,'Ordre');
$worksheet->write(0,18,'Identifiant');
$numero_page = isset($criteres['numero_page']) ? $criteres['numero_page'] : 0;
$limite = isset($criteres['limite']) ? $criteres['limite'] : 0;
$observations = $chercheur_observations->rechercherObservations($uid[0], $criteres, $numero_page, $limite)->get();
if (!$observations) {
header('HTTP/1.0 204 No Content');
exit;
}
 
$observations = $chercheur_observations->rechercherObservations($uid[0], $criteres, $numero_page, $limite)->get();
if(!$observations) {
header('HTTP/1.0 204 No Content');
exit;
$ids_obs = array();
$indices_lignes_obs = array();
 
$i = 1;
foreach ($observations as &$obs) {
$obs = $this->denullifierTableauValeurCel($obs);
$ids_obs[] = $obs['id_observation'];
$indices_lignes_obs[$obs['id_observation']] = $i;
 
if ($obs['date_observation'] != '0000-00-00 00:00:00') {
$obs['date_observation'] = $this->formaterDate($obs['date_observation']);
} else {
$obs['date_observation'] = '00/00/0000';
}
 
$ids_obs = array();
$indices_lignes_obs = array();
$i=1;
foreach ($observations as &$obs) {
$worksheet->write($i,0,$obs['nom_sel']);
$worksheet->write($i,1,$obs['nom_sel_nn']);
$worksheet->write($i,2,$obs['nom_ret']);
$worksheet->write($i,3,$obs['nom_ret_nn']);
$worksheet->write($i,4,$obs['nt']);
$worksheet->write($i,5,$obs['famille']);
$worksheet->write($i,6,$obs['nom_referentiel']);
$worksheet->write($i,7,$obs['zone_geo']);
$worksheet->write($i,8,$this->convertirCodeZoneGeoVersDepartement($obs['ce_zone_geo']));
$worksheet->write($i,9,$obs['date_observation']);
$worksheet->write($i,10,$obs['lieudit']);
$worksheet->write($i,11,$obs['station']);
$worksheet->write($i,12,$obs['milieu']);
$worksheet->write($i,13,$obs['commentaire']);
$worksheet->write($i,14,$obs['latitude']);
$worksheet->write($i,15,$obs['longitude']);
$worksheet->write($i,16,$obs['geodatum']);
$worksheet->write($i,17,$obs['ordre']);
$worksheet->write($i,18,$obs['id_observation']);
$i++;
}
 
$obs = $this->denullifierTableauValeurCel($obs);
$ids_obs[] = $obs['id_observation'];
$indices_lignes_obs[$obs['id_observation']] = $i;
if ($obs['date_observation'] != "0000-00-00 00:00:00") {
$obs['date_observation'] = $this->formaterDate($obs['date_observation']);
}
else {
$obs['date_observation']="00/00/0000";
}
$indice_dernier_champ_supp = 19;
$indices_champs_supp = array();
$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
$champs_supp_par_obs = $gestion_champs_etendus->consulterParLots($ids_obs);
 
$worksheet->write($i,0,$obs['nom_sel']);
$worksheet->write($i,1,$obs['nom_sel_nn']);
$worksheet->write($i,2,$obs['nom_ret']);
$worksheet->write($i,3,$obs['nom_ret_nn']);
$worksheet->write($i,4,$obs['nt']);
$worksheet->write($i,5,$obs['famille']);
$worksheet->write($i,6,$obs['nom_referentiel']);
$worksheet->write($i,7,$obs['zone_geo']);
$worksheet->write($i,8,$this->convertirCodeZoneGeoVersDepartement($obs['ce_zone_geo']));
$worksheet->write($i,9,$obs['date_observation']);
$worksheet->write($i,10,$obs['lieudit']);
$worksheet->write($i,11,$obs['station']);
$worksheet->write($i,12,$obs['milieu']);
$worksheet->write($i,13,$obs['commentaire']);
$worksheet->write($i,14,$obs['latitude']);
$worksheet->write($i,15,$obs['longitude']);
$worksheet->write($i,16,$obs['geodatum']);
$worksheet->write($i,17,$obs['ordre']);
$worksheet->write($i,18,$obs['id_observation']);
$i++;
}
$indice_dernier_champ_supp = 19;
$indices_champs_supp = array();
$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
$champs_supp_par_obs = $gestion_champs_etendus->consulterParLots($ids_obs);
foreach($champs_supp_par_obs as $id_obs => &$champs_supp) {
foreach($champs_supp as &$champ_etendu) {
$cle = $champ_etendu->cle;
$label = $champ_etendu->label;
$valeur = $champ_etendu->valeur;
if(!isset($indices_champs_supp[$cle])) {
$indices_champs_supp[$cle] = $indice_dernier_champ_supp;
$worksheet->write(0, $indice_dernier_champ_supp, utf8_decode($label));
$indice_dernier_champ_supp++;
}
$num_ligne_obs = $indices_lignes_obs[$id_obs];
$worksheet->write($num_ligne_obs,$indices_champs_supp[$cle],utf8_decode($valeur));
}
}
$workbook->close();
exit();
foreach ($champs_supp_par_obs as $id_obs => &$champs_supp) {
foreach ($champs_supp as &$champ_etendu) {
$cle = $champ_etendu->cle;
$label = $champ_etendu->label;
$valeur = $champ_etendu->valeur;
if(!isset($indices_champs_supp[$cle])) {
$indices_champs_supp[$cle] = $indice_dernier_champ_supp;
$worksheet->write(0, $indice_dernier_champ_supp, utf8_decode($label));
$indice_dernier_champ_supp++;
}
$num_ligne_obs = $indices_lignes_obs[$id_obs];
$worksheet->write($num_ligne_obs,$indices_champs_supp[$cle],utf8_decode($valeur));
}
}
 
$workbook->close();
exit();
}
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.7 2008-11-13 11:29:12 ddelon
* Reecriture gwt-ext
*
* Revision 1.6 2008-01-30 08:57:28 ddelon
* fin mise en place mygwt
*
* Revision 1.5 2007-06-06 13:31:16 ddelon
* v0.09
*
* Revision 1.4 2007-05-22 12:54:09 ddelon
* Securisation acces utilisateur
*/
?>
}
/trunk/jrest/services/Resume.php
1,16 → 1,21
<?php
// declare(encoding='UTF-8');
/**
* Classe renvoyant un petit bout de json contenant les dernières obs publiques d'un utilisateur
* Utilisée par l'annuaire appelant les web services résumé de chaque application
*
* @category PHP
* @package papyrus_bp
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/papyrus_bp/
*/
* Service renvoyant au format JSON les dernières observations publiques d'un utilisateur.
* Utilisée par l'annuaire appelant les web services résumé de chaque application.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class Resume extends Cel {
 
public function getElement($uid){
/trunk/jrest/services/InventoryObservationList.php
1,42 → 1,43
<?php
// declare(encoding='UTF-8');
/**
* PHP Version 5.2
*
* @category PHP
* @package jrest
* @author Raphaël Droz <raphael@tela-botanica.org>
* @author Aurelien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010, 2013 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @link /doc/jrest/
*
* InventoryObservationList.php
* Cas d'utilisation :
* 1: Service recherche d'observations a partir de divers critères
* GET : Service recherche d'observations a partir de divers critères
* a: Le service recherche les observations correspondant aux critères demandés
* b: Le service renvoie la liste des observations correspondantes
*
* 2: Service modification en masse d'observations
*
* POST : Service modification en masse d'observations
* a: Le service recherche les observations correspondant aux identifiants donnés
* b: Le service modifie les observations correspondantes avec les infos données en paramètres
*
* 3: Service de suppression d'observations en masse
*
* DELETE : Service de suppression d'observations en masse
* a: Le service recherche les observations correspondant aux critères demandés
* b: Le service supprime la liste des observations correspondantes
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Mots-clés
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Raphaël Droz <raphael@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryObservationList extends Cel {
 
/**
* renvoie les observations correspondant au critères de filtrage
*
* Renvoie les observations correspondant au critères de filtrage
*
* uid[0] : utilisateur obligatoire
* uid[1] : criteres de filtrage de la forme critere1=valeur1&critere2=valeur2
*/
function getElement($uid)
{
*/
public function getElement($uid) {
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
$this->controleUtilisateur($uid[0]);
 
$chercheur_observations = new RechercheObservation($this->config);
 
49,96 → 50,87
$numero_page = $criteres['numero_page'];
unset($criteres['numero_page']);
$taille_page = $criteres['limite'];
unset($criteres['limite']);
unset($criteres['limite']);
}
 
$debut = $taille_page*$numero_page ;
 
$retour = $chercheur_observations->rechercherObservations($uid[0], $criteres, $debut, $taille_page)->get();
$retour_formate = $chercheur_observations->formaterPourEnvoiCel($retour);
 
$this->envoyerJson($retour_formate);
return true;
$this->envoyerJson($retour_formate);
return true;
}
 
/**
* met à jour les métadonnées d'une liste d'observations
*
*
* uid[0] : utilisateur obligatoire
* uid[1] : ordres des observations à modifier séparés par des virgules
* pairs : données à mettre à jour sous la forme de clés => valeurs
*/
function updateElement($uid,$pairs) {
 
*/
public function updateElement($uid,$pairs) {
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
if (!isset($uid[1])) {
//TODO: envoyer un message d'erreur
return;
return;
}
 
$obs = array_filter(explode(',', $uid[1]), 'is_numeric');
if(count($obs) == 0) {
return;
}
$obs = array_filter(explode(',', $uid[1]), 'is_numeric');
if (count($obs) == 0) {
return;
}
 
$gestionnaire_observation = new GestionObservation($this->config);
if(count($obs) == 1) {
return $gestionnaire_observation->modifierObservation($uid[0], $obs[0], $pairs);
}
if (count($obs) == 1) {
return $gestionnaire_observation->modifierObservation($uid[0], $obs[0], $pairs);
}
 
// cas de mise à jour de multiples observations:
$ret = GestionObservation::modifierMultiplesObservation($uid[0], $obs, $pairs);
if($ret === FALSE) return FALSE; // JRest::badRequest();
if($ret === 0) {
header('HTTP/1.0 304 Not Modified');
die;
}
 
header('HTTP/1.0 200 OK'); // et non pas une 201 !
// die(); // non, car incompatible avec PHPUnit
// throw(new Exception()); // non, lance une 400 (cf JRest::updateElement())
// return TRUE; // non, lance une 201
// return FALSE; // non, lance une 400
 
die; // tant pis
// cas de mise à jour de multiples observations:
$ret = GestionObservation::modifierMultiplesObservation($uid[0], $obs, $pairs);
if ($ret === false) {
return false; // JRest::badRequest();
}
if ($ret === 0) {
header('HTTP/1.0 304 Not Modified');
} else {
header('HTTP/1.0 200 OK'); // et non pas une 201 !
}
die();
}
 
/**
* Supprime une liste d'observations
*
*
* uid[0] : utilisateur obligatoire
* uid[1] : ordres des observations à supprimer séparés par des virgules
*/
function deleteElement($uid)
{
*/
public function deleteElement($uid) {
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
if (!isset($uid[1])) {
//TODO: envoyer un message d'erreur
return;
return;
}
$uid[1] = rtrim($uid[1],',');
$gestionnaire_observation = new GestionObservation($this->config);
$uid[1] = rtrim($uid[1], ',');
 
$gestionnaireObs = new GestionObservation($this->config);
$tableau_ordres = explode(',', $uid[1]);
foreach($tableau_ordres as $ordre) {
$ids_obs[] = $gestionnaire_observation->renvoyerIdPourOrdre($uid[0], $ordre);
foreach ($tableau_ordres as $ordre) {
$ids_obs[] = $gestionnaireObs->renvoyerIdPourOrdre($uid[0], $ordre);
}
$suppression_observations = $gestionnaire_observation->supprimerObservation($uid[0],$uid[1]);
$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
$champs_supp = $gestion_champs_etendus->viderParLots($ids_obs);
 
$suppression_observations = $gestionnaireObs->supprimerObservation($uid[0], $uid[1]);
 
$gestionnaireChampsEtendus = new GestionChampsEtendus($this->config, 'obs');
$gestionnaireChampsEtendus->viderParLots($ids_obs);
 
if ($suppression_observations) {
echo "OK";
echo 'OK';
}
exit() ;
exit() ;
}
}
?>
}
/trunk/jrest/services/ExportXLS.php
1,16 → 1,7
<?php
 
// declare(encoding='UTF-8');
/**
* @category PHP
* @package jrest
* @author Raphaël Droz <raphael@tela-botania.org>
* @copyright 2013 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
*/
 
/**
* Service d'export de données d'observation du CEL au format XLS
* Service d'export de données d'observation du CEL au format XLS.
*
* Format du service :
* POST /ExportXLS
19,7 → 10,7
*
* Les données POST acceptées sont:
* range (obligatoire): un range d'id_observation sous la forme d'entier ou d'intervalles d'entiers
* séparés par des virgules ou bien '*' (pour toutes)
* séparés par des virgules ou bien '*' (pour toutes)
* TODO: limit
* TODO: départ
* TODO: sets (ou colonnes, ou extended)
30,50 → 21,60
*
* Si <Utilisateur> est fourni, le observations seront le résultat de l'intersection des 2 contraintes
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Raphaël Droz <raphael@tela-botania.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(dirname(realpath(__FILE__))) . '/lib');
// TERM
ini_set('html_errors', 0);
ini_set('xdebug.cli_color', 2);
require_once('lib/PHPExcel/Classes/PHPExcel.php');
require_once('lib/FormateurGroupeColonne.php');
require_once 'lib/PHPExcel/Classes/PHPExcel.php';
require_once 'lib/FormateurGroupeColonne.php';
 
class ExportXLS extends Cel {
 
private $id_utilisateur = NULL;
private $parametres_defaut = array("range" => "*",
"format" => "CSV");
private $parametres_defaut = array('range' => '*', 'format' => 'CSV');
 
private $filtres_autorises = array(
'id_utilisateur' => 'id_utilisateur',
'utilisateur' => 'courriel_utilisateur',
'commune' => 'zone_geo',
'dept' => 'departement',
'projet' => 'mots_cles',
'num_taxon' => 'nt',
'date_debut' => 'date_debut',
'date_fin' => 'date_fin',
'taxon' => 'taxon'
'id_utilisateur' => 'id_utilisateur',
'utilisateur' => 'courriel_utilisateur',
'commune' => 'zone_geo',
'dept' => 'departement',
'projet' => 'mots_cles',
'num_taxon' => 'nt',
'date_debut' => 'date_debut',
'date_fin' => 'date_fin',
'taxon' => 'taxon'
);
 
function ExportXLS($config) {
public function __construct($config) {
parent::__construct($config);
}
function getRessource() {
 
public function getRessource() {
return $this->getElement(array());
}
function getElement($uid) {
$parametres_format = $this->traiterParametresFormat($uid, $_GET);
 
public function getElement($uid) {
$parametres_format = $this->traiterParametresFormat($uid, $_GET);
$filtres = $this->traiterFiltres($_GET);
$this->export($parametres_format, $filtres);
exit;
exit();
}
function traiterParametresFormat($uid, $params) {
 
private function traiterParametresFormat($uid, $params) {
$parametres = $this->parametres_defaut;
if(isset($params['format'])) {
if (isset($params['format'])) {
if($params['format'] == 'csv') $parametres['format'] = 'CSV';
if($params['format'] == 'xls') $parametres['format'] = 'Excel5';
if($params['format'] == 'xlsx') $parametres['format'] = 'Excel2007';
80,44 → 81,42
if($params['format'] == 'pdf') $parametres['format'] = 'pdf';
}
// TODO: $params['part'] pour le multi-part
$parametres['widget'] = isset($params['widget']) ? $params['widget'] : 'CEL';
$parametres['widget'] = isset($params['widget']) ? $params['widget'] : 'CEL';
$parametres['debut'] = isset($params['debut']) ? intval($params['debut']) : 0;
$parametres['limite'] = isset($params['limite']) ? intval($params['limite']) : 0;
$parametres['id_utilisateur'] = $this->traiterIdUtilisateur($uid);
$parametres['groupe_champs'] = isset($params['colonnes']) ? $params['colonnes'] : 'standard,avance';
 
return $parametres;
}
function traiterIdUtilisateur($uid) {
 
private function traiterIdUtilisateur($uid) {
$id_utilisateur = null;
// TODO: controleUtilisateur()
if(isset($uid[0])) {
if (isset($uid[0])) {
$id_utilisateur = intval($uid[0]);
}
return $id_utilisateur;
}
function traiterFiltres($params) {
 
private function traiterFiltres($params) {
$obs_ids = $this->traiterObsIds($params);
$filtres = array();
if(!$obs_ids || count($obs_ids) == 1 && $obs_ids[0] == '*') {
if (!$obs_ids || count($obs_ids) == 1 && $obs_ids[0] == '*') {
unset($filtres['sql_brut']);
}
else {
} else {
$filtres = Array('sql_brut' =>
sprintf('id_observation IN (%s)', implode(',', $obs_ids)));
}
foreach($params as $cle => $valeur) {
if(trim($valeur) != '' && isset($this->filtres_autorises[$cle])) {
foreach ($params as $cle => $valeur) {
if (trim($valeur) != '' && isset($this->filtres_autorises[$cle])) {
$filtres[$this->filtres_autorises[$cle]] = $valeur;
}
}
return $filtres;
}
function traiterObsIds($params) {
 
private function traiterObsIds($params) {
$obs_ids = Array('*');
if (isset($params['range']) && trim($params['range']) != '*') {
// trim() car: `POST http://url<<<"range=*"`
128,10 → 127,10
 
/*
* $param: Tableau associatif, indexes supportés:
* - widget: le nom du widget d'origine (utilisé pour les méta-données du tableur)
* - widget: le nom du widget d'origine (utilisé pour les méta-données du tableur)
*
*/
function export(Array $parametres_format = Array(),Array $filtres = array()) {
private function export(Array $parametres_format = Array(),Array $filtres = array()) {
$chercheur_observations = new RechercheObservation($this->config);
 
$observations = $chercheur_observations
139,13 → 138,15
->get();
// debug //echo ($chercheur_observations->requete_selection_observations);
// XXX: malheureusement l'instance de JRest n'est pas accessible ici
if(!$observations) {
if (!$observations) {
header('HTTP/1.0 204 No Content');
exit;
exit();
}
 
if($parametres_format['format'] == 'pdf') {
if(count($observations) > 300) die('too much');
if ($parametres_format['format'] == 'pdf') {
if (count($observations) > 300) {
die('too much');
}
require_once('GenerateurPDF.php');
 
$pdf = new GenerateurPDF();
153,7 → 154,7
//$pdf->export1($observations);
//$pdf->export2($observations);
$pdf->pdf->Output('etiquettes.pdf', 'I');
die;
die();
}
 
$colonnes = FormateurGroupeColonne::nomEnsembleVersListeColonnes($parametres_format['groupe_champs']);
173,12 → 174,12
 
$this->envoyerFeuille($objPHPExcel, $parametres_format);
}
 
private function envoyerFeuille($objPHPExcel, $parametres_format) {
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"liste.xls\"; charset=utf-8");
header("Cache-Control: max-age=0");
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="liste.xls"; charset=utf-8');
header('Cache-Control: max-age=0');
 
// csv|xls|xlsx => CSV|Excel5|Excel2007
// Note: le format Excel2007 utilise un fichier temporaire
$generateur = PHPExcel_IOFactory::createWriter($objPHPExcel, $parametres_format['format']);
185,43 → 186,44
$generateur->save('php://output');
exit;
}
public function traiterLigneObservation(&$obs, &$colonnes, &$feuille, $no_ligne) {
 
private function traiterLigneObservation(&$obs, &$colonnes, &$feuille, $no_ligne) {
$no_colonne = 0;
foreach($colonnes as $abbrev => $colonne) {
foreach ($colonnes as $abbrev => $colonne) {
$valeur = null;
if($colonne['extra'] == 2 || ! is_null($colonne['dyna'])) continue;
if ($colonne['extra'] == 2 || ! is_null($colonne['dyna'])) {
continue;
}
 
// valeur direct depuis cel_obs ?
if(isset($obs[$abbrev])) $valeur = $obs[$abbrev];
if (isset($obs[$abbrev])) {
$valeur = $obs[$abbrev];
}
 
// pré-processeur de la champs
if(function_exists($colonne['fonction'])) {
if (function_exists($colonne['fonction'])) {
$valeur = $colonne['fonction']($valeur);
} elseif(method_exists('FormateurGroupeColonne', $colonne['fonction'])) {
} else if (method_exists('FormateurGroupeColonne', $colonne['fonction'])) {
$valeur = call_user_func(array('FormateurGroupeColonne', $colonne['fonction']), $valeur);
} elseif(method_exists(__CLASS__, $colonne['fonction'])) {
} else if (method_exists(__CLASS__, $colonne['fonction'])) {
$valeur = call_user_func(array(__CLASS__, $colonne['fonction']), $valeur);
} elseif($colonne['fonction']) {
} else if ($colonne['fonction']) {
die("méthode {$colonne['fonction']} introuvable");
}
// fonction pour obtenir des champs (étendus)
elseif(function_exists($colonne['fonction_data'])) {
} else if (function_exists($colonne['fonction_data'])) { // fonction pour obtenir des champs (étendus)
$valeur = $colonne['fonction_data']($obs);
}
elseif(method_exists(__CLASS__, $colonne['fonction_data'])) {
} else if (method_exists(__CLASS__, $colonne['fonction_data'])) {
$valeur = call_user_func(array(__CLASS__, $colonne['fonction_data']), $obs);
}
 
// // cette section devrait être vide:
// // cas particuliers ingérable avec l'architecture actuelle:
if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") {
/* blah */
if (false && $abbrev == 'date_observation' && $valeur == "0000-00-00") {
/* blah */
}
if($abbrev == 'images') {
if ($abbrev == 'images') {
$valeur = FormateurGroupeColonne::getImages($obs, $this->id_utilisateur, $this);
}
if($abbrev == 'nom-commun') {
if ($abbrev == 'nom-commun') {
$valeur = FormateurGroupeColonne::getNomCommun_v4($obs, $this);
}
 
230,29 → 232,29
$no_colonne++;
}
}
 
private function gerenerFeuilleImportFormatee($parametres_format) {
$objPHPExcel = new PHPExcel();
 
$objPHPExcel->getProperties()->setCreator($parametres_format['widget']) // ou $uid ?
->setLastModifiedBy("XX") // TODO: $uid
->setTitle("Export des observation du carnet en ligne") // TODO
->setSubject("Export") // TODO
->setDescription("Export");
//->setKeywords("office PHPExcel php")
//->setCategory("Test result file")
->setLastModifiedBy("XX") // TODO: $uid
->setTitle("Export des observation du carnet en ligne") // TODO
->setSubject("Export") // TODO
->setDescription("Export");
 
$objPHPExcel->getActiveSheet()->setTitle("Observations");
return $objPHPExcel;
}
 
private function formaterColonnesFeuille(&$feuille, &$colonnes, $parametres_format) {
$colid = 0;
foreach($colonnes as $colonne) {
if($colonne['extra'] == 2) continue;
foreach ($colonnes as $colonne) {
if ($colonne['extra'] == 2) {
continue;
}
 
$feuille->setCellValueByColumnAndRow($colid, 1, $colonne['nom']);
if($colonne['extra'] == 1) {
if ($colonne['extra'] == 1) {
$feuille->getStyleByColumnAndRow($colid, 1)->getBorders()->applyFromArray(
array(
'allborders' => array(
262,7 → 264,7
)
);
}
if(! $colonne['importable']) {
if (! $colonne['importable']) {
$feuille->getStyleByColumnAndRow($colid, 1)->getFill()->applyFromArray(
array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
270,7 → 272,6
)
);
}
$colid++;
}
}
284,10 → 285,12
$inSets = explode(',', $in);
$outSets = array();
 
foreach($inSets as $inSet) {
foreach ($inSets as $inSet) {
list($start,$end) = explode('-', $inSet . '-' . $inSet);
// ignore les ranges trop importants
if($start > 10000000 || $end > 10000000 || abs($start-$end) > 10000) continue;
if ($start > 10000000 || $end > 10000000 || abs($start-$end) > 10000) {
continue;
}
$outSets = array_merge($outSets,range($start,$end));
}
$outSets = array_unique($outSets);
/trunk/jrest/services/InventoryImageCount.php
1,58 → 1,46
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// declare(encoding='UTF-8');
/**
* @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 © 2010, Aurélien Peronnet
*/
 
/**
* InventoryImageCount.php
*
* in : utf8
* out : utf8
* Cas d'utilisation :
* Service recherche du nombre a partir de divers critères
*
*
* 2: Le service recherche le nombre d'images correspondant aux critères demandés
* 3: Le service renvoie le nombre calculé
*/
class InventoryImageCount extends Cel {
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Images
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryImageCount extends Cel {
 
/**
* renvoie le nombre d'images correspondant aux criteres
* Renvoie le nombre d'images correspondant aux criteres
* uid[0] : utilisateur obligatoire
* uid[1] : critères de filtrage de la forme critère1=valeur1;critère2=valeur2
*/
function getElement($uid)
{
//TODO : remplacer le contenu du $uid[1] par le tableau $_GET;
public function getElement($uid) {
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
$chercheur_images = new RechercheImage($this->config);
 
$numero_page = 0;
$taille_page = 50;
$criteres = array();
 
$criteres = $_GET;
$chercheurImages = new RechercheImage($this->config);
$retour = $chercheurImages->compterImages($uid[0], $criteres);
 
$retour = $chercheur_images->compterImages($uid[0], $criteres);
 
$retour_encode = json_encode($retour) ;
$retour_encode = json_encode($retour);
$retour_encode = $this->nettoyerCaracteresNuls($retour_encode);
 
header("content-type: application/json");
header('content-type: application/json');
print $retour_encode ;
exit() ;
}
 
private function nettoyerCaracteresNuls($chaine) {
return str_replace('\u0000','',$chaine);
return str_replace('\u0000','',$chaine);
}
}
?>
}
/trunk/jrest/services/ImageDateList.php
1,33 → 1,30
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package papyrus_bp
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/papyrus_bp/
*/
 
/**
* Liste les date des images par utilisateur
* Liste les date des images par utilisateur.
*
* in=utf8
* out=utf8
*
* uid[0] : utilisateur obligatoire
* uid[1] : si absent : valeur 'all' (annee)
* uid[2] : si absent : valeur 'all' (mois)
* uid[3] : si absent : valeur 'all' (jour)
**/
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Images
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class ImageDateList extends Cel {
 
private $correspondance_fonction = array(1 => 'year', 2 => 'month', 3 => 'day');
 
/**
* uid[0] : utilisateur obligatoire
* uid[1] : si absent : valeur 'all' (annee)
* uid[2] : si absent : valeur 'all' (mois)
* uid[3] : si absent : valeur 'all' (jour)
*/
public function getElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
38,11 → 35,11
 
$conditions = $this->traiterParametresEtConstruireRequete($uid);
 
$requete_liste_dates = 'SELECT DISTINCT '.
'date_prise_de_vue AS id '.
$requete_liste_dates = 'SELECT DISTINCT date_prise_de_vue AS id '.
'FROM cel_images '.
"WHERE $conditions ".
'ORDER BY date_prise_de_vue';
'ORDER BY date_prise_de_vue '.
' -- '.__FILE__.':'.__LINE__;
 
$liste_dates = Cel::db()->requeter($requete_liste_dates);
$liste_dates = $this->formaterListeResultats($liste_dates);
60,11 → 57,7
$date = '0000-00-00';
} else {
$date_heures = explode(' ',$date['id']);
if (count($date_heures) > 1) {
$date = $date_heures[0];
} else {
$date = $date['id'];
}
$date = (count($date_heures) > 1) ? $date_heures[0] : $date['id'];
}
}
return $liste_dates;
/trunk/jrest/services/InventoryTransmit.php
1,34 → 1,44
<?php
/*
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @author David Delon <david.delon@clapas.net>
* @copyright 2010, 2013 Tela-Botanica
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
// declare(encoding='UTF-8');
/**
* Service rendant publique une observation.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
 
class InventoryTransmit extends Cel {
function updateElement($uid, $pairs) {
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
if (!isset($uid[1])) return false;
 
public function updateElement($uid, $pairs) {
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
if (!isset($uid[1])) {
return false;
}
$transmission = intval($pairs['transmission']);
if($transmission != 0 && $transmission != 1) return false;
if ($transmission != 0 && $transmission != 1) {
return false;
}
 
$ids = array_filter(array_map(create_function('$v','return intval($v);'),
explode(',', $uid[1])), 'strlen');
$ids = array_filter(array_map(create_function('$v','return intval($v);'), explode(',', $uid[1])), 'strlen');
 
$date = ($transmission == 1) ? 'now()' : 'NULL';
//TODO: modification pour passer ceci dans la classe gestion observation
$requete_transmission = 'UPDATE cel_obs '.
'SET transmission = '.$pairs['transmission'].', '.
'date_modification = now(), date_transmission = '.$date.' '.
'WHERE ce_utilisateur = '.Cel::db()->proteger($uid[0]).' AND ordre in ('.implode(',', $ids).')';
$resultat_transmission = Cel::db()->executer($requete_transmission);
return ($resultat_transmission != 0);
$requete = 'UPDATE cel_obs '.
'SET transmission = '.$pairs['transmission'].', '.
'date_modification = now(), date_transmission = '.$date.' '.
'WHERE ce_utilisateur = '.Cel::db()->proteger($uid[0]).' '.
'AND ordre in ('.implode(',', $ids).') '.
' -- '.__FILE__.':'.__LINE__;
$resultat = Cel::db()->executer($requete);
return ($resultat != 0);
}
}
?>
}
/trunk/jrest/services/SelfRefList.php
1,10 → 1,20
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// in utf8
// out utf8
 
// Fournit un référentiel relatif à l'utilisateur sur l'un des champs demandes
// declare(encoding='UTF-8');
/**
* Fournit une liste d'auto-complétions (=référentiel) relative à l'utilisateur sur l'un des champs demandés.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Auto-complétions
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class SelfRefList extends Cel {
 
private $referentiels = array('station', 'lieudit', 'milieu');
31,17 → 41,28
}
 
$referentiel_demande = $uid[1];
$idUtilisateur = Cel::db()->proteger($uid[0]);
$idUtilisateurP = Cel::db()->proteger($uid[0]);
 
$requete = "SELECT DISTINCT $referentiel_demande " .
'FROM cel_obs '.
"WHERE ce_utilisateur = '$idUtilisateur' ";
$filtreSql = '';
if ($this->filtreRechercheEstDemande()) {
$requete .= " AND $referentiel_demande LIKE '".$_GET["recherche"]."%'";
$rechercheP = Cel::db()->proteger($_GET['recherche'].'%');
$filtreRecherche = "AND $referentiel_demande LIKE $rechercheP ";
}
 
$limiteSql = '';
if ($this->limiteEstDemandee()) {
$requete .= " ORDER BY $referentiel_demande LIMIT ".$_GET['start'].','.$_GET['limit'];
$start = intval($_GET['start']);
$limit = intval($_GET['limit']);
$limite = "LIMIT $start,$limit ";
}
 
$requete = "SELECT DISTINCT $referentiel_demande " .
'FROM cel_obs '.
"WHERE ce_utilisateur = $idUtilisateurP ".
$filtreSql.
"ORDER BY $referentiel_demande ".
$limiteSql.
' -- '.__FILE__.':'.__LINE__;
$resultat = Cel::db()->requeter($requete);
 
$referentiel = array();
50,7 → 71,6
if ($this->estUneValeurValide($valeur[$referentiel_demande])) {
$referentiel[] = $valeur[$referentiel_demande];
}
 
}
}
$this->envoyerJson($referentiel);
/trunk/jrest/services/InventoryObservationCount.php
1,51 → 1,37
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author David Delon <david.delon@clapas.net>
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
 
 
/**
* InventoryObservationCount.php
*
* in : utf8
* out : utf8
*
* Cas d'utilisation :
* Service recherche du nombre a partir de divers critères
*
* 2: Le service recherche le nombre d'images correspondant au critères demandé
* 3: Le service renvoie le nombre calcule
*/
* Service recherche du nombre a partir de divers critères
*
* 2: Le service recherche le nombre d'observations correspondant aux critères demandés
* 3: Le service renvoie le nombre calcule
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryObservationCount extends Cel {
 
/**
* renvoie le nombre d' observations correspondant aux criteres
* uid[0] : utilisateur obligatoire
* uid[1] : criteres de filtrage de la forme critere1=valeur1&critere2=valeur2
*
* Renvoie le nombre d' observations correspondant aux critères
* uid[0] : utilisateur obligatoire
* uid[1] : criteres de filtrage de la forme critere1=valeur1&critere2=valeur2
*/
function getElement($uid)
{
public function getElement($uid) {
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
$chercheur_observations = new RechercheObservation($this->config);
 
$criteres = $_GET;
$retour = $chercheur_observations->compterObservations($uid[0], $criteres);
$chercheurObs = new RechercheObservation($this->config);
$retour = $chercheurObs->compterObservations($uid[0], $_GET);
$this->envoyerJson($retour);
return true;
}
}
?>
}
/trunk/jrest/services/InventoryLocationList.php
1,55 → 1,36
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// declare(encoding='UTF-8');
/**
* @author David Delon <david@tela-botanica.org>
* @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 © 2010, David Delon, Aurélien Peronnet
*/
* Service de listage des zones géographiques d'un utilisateur
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryLocationList extends Cel {
 
/**
* InventoryLocationList.php
*
* in : utf8
* out : utf8
* Cas d'utilisation :
* Service listage des zones géographiques d'un utilisateur
*/
class InventoryLocationList extends Cel {
function getElement($uid){
public function getElement($uid) {
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
$idUtilisateurP = Cel::db()->proteger($uid[0]);
 
$retour = array();
$requete = 'SELECT DISTINCT ce_zone_geo, zone_geo, lieudit, station '.
'FROM cel_obs '.
"WHERE ce_utilisateur = $idUtilisateurP ".
'ORDER BY ce_zone_geo ASC, zone_geo ASC, lieudit ASC, station ASC '.
' -- '.__FILE__.':'.__LINE__;
$resultats = Cel::db()->requeter($requete);
 
$requete_zones_geo = 'SELECT DISTINCT ce_zone_geo, zone_geo, lieudit, station FROM cel_obs '.
'WHERE ce_utilisateur = '.Cel::db()->proteger($uid[0]).' '.
'ORDER BY ce_zone_geo ASC, zone_geo ASC, lieudit ASC, station ASC';
 
$resultat_zones_geo = Cel::db()->requeter($requete_zones_geo);
 
if (is_array($resultat_zones_geo)) {
$retour = $resultat_zones_geo;
}
 
$this->envoyerJson($retour);
return true;
$retour = (is_array($resultats)) ? $resultats : array();
$this->envoyerJson($retour);
return true;
}
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.6 2008-01-30 08:57:28 ddelon
* fin mise en place mygwt
*
* Revision 1.5 2007-05-22 12:54:09 ddelon
* Securisation acces utilisateur
*
*
*
*/
?>
}
/trunk/jrest/services/InventoryKeywordTree.php
1,34 → 1,50
<?php
// declare(encoding='UTF-8');
/**
* Service permettant de créer l'arbre des mots-clés.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Mots-clés
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryKeywordTree extends Cel {
 
//TODO : verifications des paramètres
public static $gestion_mots_cles = null;
private function getGestionMotsCles($mode) {
if(self::$gestion_mots_cles == null) {
self::$gestion_mots_cles = new GestionMotsClesChemin($this->config, $mode);
}
return self::$gestion_mots_cles;
}
 
public function getElement($uid) {
// Controle detournement utilisateur
$id_utilisateur = $uid[1] ;
$this->controleUtilisateur($uid[1]);
 
$arbre = $this->getGestionMotsCles($uid[0])->obtenirArbre($id_utilisateur);
 
$this->envoyerJson($arbre);
return TRUE; // compat: pourquoi renvoyer true si vide ?
}
 
private function getGestionMotsCles($mode) {
if (self::$gestion_mots_cles == null) {
self::$gestion_mots_cles = new GestionMotsClesChemin($this->config, $mode);
}
return self::$gestion_mots_cles;
}
 
public function updateElement($uid, $pairs) {
$id_utilisateur = $uid[1];
$this->controleUtilisateur($uid[1]);
 
$id_mot_cle = $pairs['id'];
$action = $pairs['action'];
 
if ($action == 'modification') {
$nouveau_nom = $pairs['motcle'];
$modification = $this->getGestionMotsCles($uid[0])->renommerMotCle($id_mot_cle, $nouveau_nom);
36,32 → 52,29
$id_pere = $pairs['parent'];
$modification = $this->getGestionMotsCles($uid[0])->deplacerMotCle($id_mot_cle, $id_pere, $id_utilisateur);
}
 
$modification = ($modification !== false);
if($modification) {
$this->envoyer("OK");
if ($modification) {
$this->envoyer('OK');
}
return $modification;
}
 
public function createElement($pairs) {
// Controle detournement utilisateur
$this->controleUtilisateur($pairs['identifiant']);
 
$mode = $pairs['mode'];
if($mode != 'obs' && $mode != 'images') {
if ($mode != 'obs' && $mode != 'images') {
return;
}
 
$id_utilisateur = $pairs['identifiant'];
$mot_cle = $pairs['motcle'];
$id_parent = $pairs['parent'];
$id_nouveau_mot_cle = $this->getGestionMotsCles($mode)->insererParIdParent($mot_cle, $id_parent, $id_utilisateur);
if($id_nouveau_mot_cle !== false) {
 
if ($id_nouveau_mot_cle !== false) {
// on sort de self::createElement ==> JRest::(get|post) ==> JRest->created() qui fait header().
// or si nous dépassons ini_get(output_buffering) nous ne pouvons plus réécrire le code de retour
// HTTP, de plus, si ini_get(output_buffering) == off, nous enverrions un warning.
68,25 → 81,23
// d'où ce clone de JRest::created();
header('HTTP/1.0 201 Created');
echo $id_nouveau_mot_cle;
exit;
exit();
} else {
// cf ci-dessus: JRest::badRequest
header('HTTP/1.0 400 Bad Request');
exit;
exit();
}
}
 
public function deleteElement($uid) {
$mode = $uid[0];
$id_utilisateur = $uid[1];
$id_mot_cle = $uid[2];
 
$suppression = $this->getGestionMotsCles($mode)->supprimerMotCleParId($id_mot_cle, $id_utilisateur);
if($suppression) {
$this->envoyer("OK");
 
if ($suppression) {
$this->envoyer('OK');
}
}
}
?>
}
/trunk/jrest/services/ImageContribution.php
1,11 → 1,12
<?php
// declare(encoding='UTF-8');
/**
* Classe renvoyant une liste très succinte des observations liées à une image de l'utilisateur
* Service renvoyant une liste HTML très succinte des images (et infos sur l'obs liée) d'un utilisateur.
*
* @category DEL
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Communes
* @subpackage Images
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
/trunk/jrest/services/NameImage.php
1,85 → 1,62
<?php
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author David Delon <david.delon@clapas.net>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
 
/**
* NameImage.php
*
* in : utf8
* out : 8859
*
* Cas d'utilisation :
* Service recherche d'image a partir d'un numero nomenclatural
*
* 1: Le service recoit un numero nomenclatural
* 2: Le service calcul le numero taxonomique associe
* 3: Le service recherche une image disponible pour ce numero taxonomique
* 4: Le service redimensionne l'image et la renvoie
*/
* Service recherche d'image a partir d'un numero nomenclatural.
*
* Cas d'utilisation :
* 1: Le service recoit un numero nomenclatural
* 2: Le service calcul le numero taxonomique associe
* 3: Le service recherche une image disponible pour ce numero taxonomique
* 4: Le service redimensionne l'image et la renvoie
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Images
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class NameImage extends Cel {
 
function getElement($uid){
$image = array("","");
if(isset($uid[0]) && isset($uid[1])) {
public function getElement($uid){
$image = array('', '');
if (isset($uid[0]) && isset($uid[1])) {
$uid[0] = $uid[0] != '' ? $uid[0] : 'bdtfx';
$image = $this->obtenirIllustration($uid[0], $uid[1]);
}
$this->envoyerJson($image);
return true;
 
$this->envoyerJson($image);
return true;
}
function obtenirIllustration($referentiel_taxo, $nn) {
 
private function obtenirIllustration($referentiel_taxo, $nn) {
// TODO: gérer ici les images d'autres référentiels si celles si sont disponibles
$retour = array("","");
switch($referentiel_taxo) {
case 'bdtfx':
$retour = $this->effectuerRequetePhotoFlora($nn);
break;
default:
break;
$retour = array('', '');
if ($referentiel_taxo == 'bdtfx') {
$retour = $this->effectuerRequetePhotoFlora($nn);
}
return $retour;
}
 
private function effectuerRequetePhotoFlora($nn) {
$url_photoflora = $this->config['eflore']['url_service_photoflora'];
$url = $url_photoflora.'?masque.nn='.$nn.'&navigation.limite=1';
$resultat = @file_get_contents($url);
$resultat = json_decode($resultat);
if(is_object($resultat) && isset($resultat->resultats)) {
if (is_object($resultat) && isset($resultat->resultats)) {
$element = (array)$resultat->resultats;
$element = array_pop($element);
if(is_object($element)) {
$image = array($element->{'binaire.href'}, $element->{'binaire.hrefmax'});
} else {
$image = array('','');
$image = array('', '');
}
}
return $image;
}
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.4 2008-11-13 11:29:12 ddelon
* Reecriture gwt-ext
*
* Revision 1.2 2008-01-30 08:57:28 ddelon
* fin mise en place mygwt
*
* Revision 1.1 2007-06-06 13:31:16 ddelon
* v0.09
*
*/
?>
}
/trunk/jrest/services/InventoryPDF.php
1,17 → 1,21
<?php
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author David Delon <david.delon@clapas.net>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
* Service générant un PDF d'export des observations pour réaliser des étiquettes d'herbier.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Export
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
 
 
/** Constante stockant l'URL de la page d'accueil de Photoflora.*/
define('EF_URL_PHOTOFLORA', 'http://photoflora.free.fr/');
/** Constante stockant l'URL de la page de Photoflora affichant toutes les images d'un taxon donn.es.*/
25,23 → 29,14
/** Constante stockant l'URL du service XML de Photoflora.*/
define('EF_URL_PHOTOFLORA_SERVICE', EF_URL_PHOTOFLORA.'ef_photoflora.php?nt=%s');
 
/**
* InventoryPDF.php
*
* in : utf8
* out : iso8859
*
* Formatage pdf d'un releve (a revoir)
*/
class InventoryPDF extends Cel {
 
var $extendPDFProductor;
 
function InventoryPDF($config) {
 
public function __construct($config) {
parent::__construct($config);
 
$this->config=$config;
$this->config = $config;
// Pas d'heritage multiple en php :(
$this->extendPDFProductor = new PDFProductor();
$this->extendPDFProductor->initPDF();
54,61 → 49,57
* uid[3] : si absent : valeur 'all' (recherche libre)
* uid[4] : si absent : valeur 'all' (station)
*/
function getElement($uid){
 
// Controle detournement utilisateur
public function getElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
if (!isset($uid[1]) || $uid[1]=="" || $uid[1]=="all" ) {
$uid[1]="all";
$requete_location="";
if (!isset($uid[1]) || $uid[1] == '' || $uid[1] == 'all' ) {
$uid[1] = 'all';
$requete_location = '';
} else {
$requete_location = ' AND location= '.Cel::db()->proteger($uid[1]).' ';
}
else {
$requete_location=" AND location= ".Cel::db()->proteger($uid[1])." ";
}
 
if (!isset($uid[2]) || $uid[2]=="" || $uid[2]=="all") {
$uid[2]="all";
$requete_date="";
if (!isset($uid[2]) || $uid[2] == '' || $uid[2] == 'all') {
$uid[2] = 'all';
$requete_date = '';
} else {
$requete_date = ' AND date_observation= '.Cel::db()->proteger($uid[2]).' ';
}
else {
$requete_date=" AND date_observation= ".Cel::db()->proteger($uid[2])." ";
}
 
if (!isset($uid[3]) || $uid[3]=="" || $uid[3]=="all") {
$uid[3]="all";
$requete_libre="";
if (!isset($uid[3]) || $uid[3] == '' || $uid[3] == 'all') {
$uid[3] = 'all';
$requete_libre = '';
} else {
$requete_libre = ' AND (nom_sel LIKE '.Cel::db()->proteger('%'.$uid[3].'%').
' OR nom_ret LIKE '.Cel::db()->proteger('%'.$uid[3].'%').
' OR station LIKE '.Cel::db()->proteger('%'.$uid[3].'%').
' OR commentaire LIKE '.Cel::db()->proteger('%'.$uid[3].'%');
}
else {
$requete_libre=" AND (nom_sel LIKE ".Cel::db()->proteger('%'.$uid[3].'%').
" OR nom_ret LIKE ".Cel::db()->proteger('%'.$uid[3].'%').
" OR station LIKE ".Cel::db()->proteger('%'.$uid[3].'%').
" OR commentaire LIKE ".Cel::db()->proteger('%'.$uid[3].'%');
}
 
if (!isset($uid[4]) || $uid[4]=="" || $uid[4]=="all") {
$uid[4]="all";
$requete_station="";
if (!isset($uid[4]) || $uid[4] == '' || $uid[4] == 'all') {
$uid[4] = 'all';
$requete_station ='';
} else {
$requete_station = ' AND station= '.Cel::db()->proteger($uid[4]).' ';
}
else {
$requete_station=" AND station= ".Cel::db()->proteger($uid[4])." ";
}
 
$value=array();
$value = array();
$requete = 'SELECT ce_utilisateur, ordre, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, famille, zone_geo, date_observation, '.
'station, commentaire, transmission '.
'FROM cel_obs '.
'WHERE ce_utilisateur = '.Cel::db()->proteger($uid[0]).' '.
$requete_location.
$requete_date.
$requete_libre.
$requete_station.' '.
'ORDER BY ordre '.
' -- '.__FILE__.':'.__LINE__;
$resultat = Cel::db()->requeter($requete);
 
$requete="SELECT ce_utilisateur, ordre, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, famille, zone_geo, date_observation, " .
"station, commentaire, transmission FROM cel_obs WHERE ce_utilisateur = ".Cel::db()->proteger($uid[0])." " .
$requete_location.
$requete_date.
$requete_libre.
$requete_station.
" ORDER BY ordre ";
 
$resultat_requete = Cel::db()->requeter($requete);
 
$observations = array();;
if(is_array($resultat_requete)) {
$observations = $resultat_requete;
if (is_array($resultat)) {
$observations = $resultat;
}
 
// Set up the pdf object.
124,50 → 115,43
$pdf->addPage();
$pdf->setFont('Times', '' , 12);
 
$i=1;
$tempfn = tempnam("","");
$i = 1;
$tempfn = tempnam('', '');
 
foreach ($observations as $obs) {
 
// Denullifiage
// Denullifiage
foreach($obs as $k=>$v) {
if (($v=="null") || ($v=="000null")) {
$obs[$k]="";
if (($v == 'null') || ($v == '000null')) {
$obs[$k] = '';
} else {
$obs[$k] = utf8_decode($v);
}
else {
$obs[$k]=utf8_decode($v);
}
}
 
if ($obs['date_observation']!="0000-00-00 00:00:00") {
list($year,$month,$day)= explode('-',$obs['date_observation']);
list($day)= explode(' ',$day);
$obs['date_observation']=$day."/".$month."/".$year;
}
else {
$obs['date_observation']="00/00/0000";
}
if ($obs['date_observation'] != '0000-00-00 00:00:00') {
list($year,$month,$day)= explode('-', $obs['date_observation']);
list($day)= explode(' ', $day);
$obs['date_observation'] = "$day/$month/$year";
} else {
$obs['date_observation'] = '00/00/0000';
}
 
$text= $obs['nom_sel']." ".$obs['nom_sel_nn']." ".$obs['nom_ret']." ".$obs['nom_ret_nn']." ".$obs['nt']." ".
$obs['famille']." ".$obs['zone_geo']." ".$obs['ce_zone_geo']." ".$obs['date_observation']." ".$obs['station'];
$obs['commentaire'];
$text = $obs['nom_sel']." ".$obs['nom_sel_nn']." ".$obs['nom_ret']." ".$obs['nom_ret_nn']." ".$obs['nt']." ".
$obs['famille']." ".$obs['zone_geo']." ".$obs['ce_zone_geo']." ".$obs['date_observation']." ".$obs['station'];
$obs['commentaire'];
 
$pdf->write(10, $text."\n");
 
$projet_photo = 'photoflora';
 
$tab_retour[$projet_photo]=chercherIllustrationsServiceXml(sprintf(EF_URL_PHOTOFLORA_SERVICE, $obs['nt']));
 
 
$url_miniature ='';
 
$tab_retour[$projet_photo] = $this->analyserRdf(sprintf(EF_URL_PHOTOFLORA_SERVICE, $obs['nt']));
$url_miniature = '';
foreach ($tab_retour[$projet_photo] as $cle => $illustration) {
if (preg_match(EF_URL_PHOTOFLORA_REGEXP, $illustration['about'], $match)) {
$abreviation = $match[1];
$fichier = $match[2];
$url_miniature = sprintf(EF_URL_PHOTOFLORA_IMG_MIN, $abreviation, $fichier);;
$abreviation = $match[1];
$fichier = $match[2];
$url_miniature = sprintf(EF_URL_PHOTOFLORA_IMG_MIN, $abreviation, $fichier);;
 
// Priorite aux images en png
// Priorite aux images en png
if (strstr($fichier, '.png')) {
break;
}
174,29 → 158,20
}
}
 
if ($url_miniature!='') {
list($debut,$ext)=explode("\.",basename($url_miniature));
$temp = fopen($tempfn, "w");
if ($url_miniature != '') {
list($debut,$ext)=explode('\.',basename($url_miniature));
$temp = fopen($tempfn, 'w');
$buf=file_get_contents($url_miniature);
fwrite($temp,$buf);
fclose($temp);
$pdf->image($tempfn,10,($i*10),0,0,$ext);
fclose($temp);
$pdf->image($tempfn, 10, ($i*10), 0, 0, $ext);
}
 
$i++;
}
 
echo $pdf->output("Rapport");
$i++;
}
echo $pdf->output('Rapport');
}
}
 
function chercherIllustrationsServiceXml($url)
{
return analyserFichierRdf($url);
}
 
function analyserFichierRdf($chemin)
{
private function analyserRdf($chemin) {
$aso_info = array();
$dom = new DOMDocument();
$dom->validateOnParse = true;
229,20 → 204,6
$aso_info['dcterms:licence'] = utf8_decode($rdf_description->getAttribute('licence'));
$tab_infos[$rdf_description->getAttribute('identifier')] = $aso_info;
}
 
return $tab_infos;
}
 
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.2 2008-01-30 08:57:28 ddelon
* fin mise en place mygwt
*
* Revision 1.1 2007-06-06 13:31:16 ddelon
* v0.09
*
* Revision 1.4 2007-05-22 12:54:09 ddelon
* Securisation acces utilisateur
*
*/
?>
}
}
/trunk/jrest/services/InventoryDateList.php
1,24 → 1,20
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author Aurelien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
 
/**
* Liste les date de releves par utilisateur
* Liste les date de releves par utilisateur.
*
* in=utf8
* out=utf8
*
**/
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryDateList extends Cel {
 
private $correspondance_fonction = array(1 => 'year', 2 => 'month', 3 => 'day');
29,61 → 25,52
* @param int uid[2] : si absent : valeur 'all' (mois)
* @param int uid[3] : si absent : valeur 'all' (jour)
*/
function getElement($uid){
public function getElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
$condition_requete = $this->traiterParametresEtConstruireRequete($uid);
 
$requete_liste_dates = 'SELECT DISTINCT '.
'date_observation AS id '.
'FROM cel_obs WHERE '.$condition_requete.' '.
'ORDER BY date_observation';
$requete_liste_dates = 'SELECT DISTINCT date_observation AS id '.
'FROM cel_obs WHERE '.$condition_requete.' '.
'ORDER BY date_observation '.
' -- '.__FILE__.':'.__LINE__;
 
$liste_dates = Cel::db()->requeter($requete_liste_dates);
 
$liste_dates = $this->formaterListeResultats($liste_dates);
 
$liste_dates = Cel::db()->requeter($requete_liste_dates);
$liste_dates = $this->formaterListeResultats($liste_dates);
$this->envoyerJson($liste_dates);
return true;
}
 
private function formaterListeResultats($liste_dates) {
 
if (!$liste_dates) {
$liste_dates = array();
}
$liste_dates = array();
}
 
foreach($liste_dates as &$date) {
$date_heures = explode(' ',$date['id']);
if(count($date_heures) > 1) {
$date = $date_heures[0];
}
 
$date = $date;
}
 
return $liste_dates;
foreach ($liste_dates as &$date) {
$date_heures = explode(' ',$date['id']);
if (count($date_heures) > 1) {
$date = $date_heures[0];
}
$date = $date;
}
return $liste_dates;
}
 
private function traiterParametresEtConstruireRequete($params) {
 
$requete_condition = ' ce_utilisateur = '.Cel::db()->proteger($params[0]);
 
$taille_tableau_parametres = count($params);
for($i=1; $i < $taille_tableau_parametres; $i++) {
if($this->estUnParametreDate($params[$i])) {
for ($i = 1; $i < $taille_tableau_parametres; $i++) {
if ($this->estUnParametreDate($params[$i])) {
$fonction_date = $this->correspondance_fonction[$i];
$requete_condition .= ' AND '.$fonction_date.'(date_observation) = '.Cel::db()->proteger($params[$i]);
}
}
 
return $requete_condition;
}
 
private function estUnParametreDate($valeur) {
return is_numeric($valeur) && $valeur != "all";
return is_numeric($valeur) && $valeur != 'all';
}
}
?>
}
/trunk/jrest/services/InventoryContributionList.php
1,44 → 1,47
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package papyrus_bp
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/
*/
 
/**
* Classe renvoyant fragment html constitué à partir d'une liste très succinte des contributions de l'utilisateur
*
* Service renvoyant un fragment de HTML constitué à partir d'une liste très succinte des contributions
* de l'utilisateur.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryContributionList extends Cel {
 
function getRessource() {
public function getRessource() {
echo '';
}
 
function getElement($uid){
 
if(!isset($uid[0])) {
/**
* Retourne la liste des contributions au format HTML.
*
* @param int $uid[0] identitifiant de l'utilisateur
*/
public function getElement($uid){
if (!isset($uid[0])) {
echo '';
}
 
$requete_contributions = "SELECT * FROM cel_obs ".
"WHERE ce_utilisateur = ".Cel::db()->proteger($uid[0])." ".
"ORDER BY date_modification DESC LIMIT 0,5";
$idUtilisateurP = Cel::db()->proteger($uid[0]);
$requete = 'SELECT * FROM cel_obs '.
"WHERE ce_utilisateur = $idUtilisateurP ".
'ORDER BY date_modification DESC '.
'LIMIT 0,5 '.
' -- '.__FILE__.':'.__LINE__;
$resultat_contributions = Cel::db()->requeter($requete);
 
$resultat_contributions = Cel::db()->requeter($requete_contributions);
$resume = '';
 
if (is_array($resultat_contributions)) {
 
$resume = '';
if (is_array($resultat_contributions)) {
foreach ($resultat_contributions as $ligne) {
$ligne['nom_sel'] = htmlspecialchars($ligne['nom_sel']);
$ligne['ce_utilisateur'] = htmlspecialchars($ligne['ce_utilisateur']);
48,29 → 51,16
$ligne['milieu'] = htmlspecialchars($ligne['milieu']);
$ligne['commentaire'] = htmlspecialchars($ligne['commentaire']);
$ligne['transmission'] = htmlspecialchars($ligne['transmission']);
$resume.= '<p>'.$ligne['nom_sel'] ." (".$ligne['nom_sel_nn'].") ".
'Location : '. $ligne['zone_geo']." (".$ligne['id_zone_geo']."),". $ligne['station'] . "," .
$ligne['milieu'] . "," . $ligne['commentaire'] . "," . $ligne['transmission'] .
'</p>';
 
$resume.= '<p>'.$ligne['nom_sel'] ." (".$ligne['nom_sel_nn'].") ".
'Location : '. $ligne['zone_geo']." (".$ligne['id_zone_geo']."),". $ligne['station'] . "," .
$ligne['milieu'] . "," . $ligne['commentaire'] . "," . $ligne['transmission'] .
'</p>';
}
}
}
 
header("Content-Type: text/html; charset=ISO-8859-1");
print $resume;
exit;
}
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.5 2008-11-13 11:29:12 ddelon
* Reecriture gwt-ext
*
* Revision 1.4 2007-06-06 13:31:16 ddelon
* v0.09
*
* Revision 1.3 2007-05-22 12:54:09 ddelon
* Securisation acces utilisateur
*
*/
?>
header('Content-Type: text/html; charset=ISO-8859-1');
print $resume;
exit();
}
}
/trunk/jrest/services/InventoryImageListPublic.php
1,51 → 1,45
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author Aurélien Peronnet <aurelien@tela-botania.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
/**
* in : utf8
* out : utf8
*
* Service recherche d'images publique a partir de divers critères
*
*/
* Service recherche d'images publique a partir de divers critères.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Images
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryImageListPublic extends Cel {
 
const start_defaut = 0;
const limit_defaut = 100;
const tri_defaut = 'ci.date_creation';
const dir_defaut = 'DESC';
 
function getRessource() {
public function getRessource() {
 
}
 
function getElement($uid)
{
// restriction aux observations publiques
$criteres = array('transmission' => '1');
if($uid[0] != '*' && empty($_GET)) {
public function getElement($uid) {
// restriction aux observations publiques
$criteres = array('transmission' => '1');
 
if ($uid[0] != '*' && empty($_GET)) {
header("content-type: application/json");
$images_json = json_encode(array());
print $images_json;
exit() ;
exit();
}
 
$this->start = isset($_GET['start']) ? $_GET['start'] : self::start_defaut;
$this->limit = isset($_GET['limit']) ? $_GET['limit'] : self::limit_defaut;
$this->limit = isset($_GET['limit']) ? $_GET['limit'] : self::limit_defaut;
 
$criteres['mots_cles'] = isset($_GET['tag']) ? $_GET['tag'] : null;
$criteres['auteur'] = isset($_GET['auteur']) ? $_GET['auteur'] : null;
$criteres['zone_geo'] = isset($_GET['commune']) ? $_GET['commune'] : null;
55,20 → 49,17
$criteres['recherche'] = isset($_GET['recherche']) ? $_GET['recherche'] : null;
$criteres['tri'] = isset($_GET['tri']) ? $_GET['tri'] : self::tri_defaut;
$criteres['dir'] = isset($_GET['dir']) ? $_GET['dir'] : self::dir_defaut;
 
$chercheur_images = new RechercheImage($this->config);
$total = $chercheur_images->compterImages(null, $criteres);
$images = $chercheur_images->rechercherImages(null, $criteres, $this->start, $this->limit);
 
$resultat = array('total' => $total,'images' => $images);
$images_json = json_encode($resultat) ;
$resultat = array('total' => $total,'images' => $images);
$images_json = json_encode($resultat);
$images_json = str_replace('\u0000','',$images_json);
 
header("content-type: application/json") ;
print $images_json ;
exit() ;
header("content-type: application/json");
print $images_json;
exit();
}
}
?>
}
/trunk/jrest/services/InventoryImageList.php
1,44 → 1,33
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
* Service recherche, et de suppression multiple d'images a partir de divers critères.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Images
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryImageList extends Cel {
 
/**
* InventoryImageList.php
*
* in : utf8
* out : utf8
*
* Service recherche, et de suppression multiple d'images a partir de divers critères
*
*/
class InventoryImageList extends Cel {
 
/**
* Recherche les images correspondant aux critères passés en paramètres
* uid[0] : utilisateur obligatoire
* $_GET : critères de filtrage de la forme critère1=valeur1;critère2=valeur2
*/
function getElement($uid)
{
public function getElement($uid) {
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
$chercheur_images = new RechercheImage($this->config);
 
$numero_page = 0;
$taille_page = 50;
$criteres = array();
 
$criteres = $_GET;
if (isset($criteres['numero_page']) && isset($criteres['limite'])) {
$numero_page = $criteres['numero_page'];
46,18 → 35,18
$taille_page = $criteres['limite'];
unset($criteres['limite']);
}
$debut = $taille_page * $numero_page;
 
$debut = $taille_page*$numero_page ;
 
$chercheur_images = new RechercheImage($this->config);
$retour = $chercheur_images->rechercherImagesEtObservationAssociees($uid[0], $criteres, $debut, $taille_page);
$retour = $chercheur_images->formaterPourEnvoiCel($retour);
 
$retour_encode = json_encode($retour) ;
$retour_encode = json_encode($retour);
$retour_encode = $this->nettoyerCaracteresNuls($retour_encode);
 
header("content-type: application/json") ;
print $retour_encode ;
exit() ;
header('content-type: application/json');
print $retour_encode;
exit();
}
 
private function nettoyerCaracteresNuls($chaine) {
65,16 → 54,14
}
 
/**
* Méthode appelée avec une requête de type DELETE.
* Supprime les infos sur l'image et le fichier correspondant à l'ordre passé en parametre
* Supporte la suppression multiple en passant plusieurs numéros séparés par des virgules
*
* @param int uid[0] id utilisateur
* @param string uid[1] : ordre(s) image(s) obligatoire(s) séparés par des virgules
*
*/
function deleteElement($uid){
 
* Méthode appelée avec une requête de type DELETE.
* Supprime les infos sur l'image et le fichier correspondant à l'ordre passé en parametre
* Supporte la suppression multiple en passant plusieurs numéros séparés par des virgules
*
* @param int uid[0] id utilisateur
* @param string uid[1] : ordre(s) image(s) obligatoire(s) séparés par des virgules
*/
public function deleteElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
81,24 → 68,21
if (!isset($uid[1]) || !$this->EstUneSuiteIdentifiantsImage($uid[1])) {
return;
}
 
$ids_images = rtrim($uid[1], ',');
$ids_images = explode(',',$ids_images);
 
$gestionnaire_image = new GestionImage($this->config);
$suppression_image = $gestionnaire_image->supprimerImage($ids_images);
 
$gestionnaire_image = new GestionImage($this->config);
$suppression_image = $gestionnaire_image->supprimerImage($ids_images);
$this->envoyer('OK');
exit;
exit();
}
 
/**
* Un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
* avec ou sans virgule terminale
*/
private function estUneSuiteIdentifiantsImage($chaine) {
$chaine = rtrim($chaine,',');
// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
// avec ou sans virgule terminale
$reg_exp = "/^(([0-9])+,)*([0-9])+$/";
 
return preg_match($reg_exp, $chaine);
}
}
?>
}
/trunk/jrest/services/Inventory.php
1,210 → 1,176
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author David Delon <david@tela-botanica.org>
* @author Aurelien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
 
/**
* CRUD observation
*
* in=utf8
* out=utf8
*
**/
* Service CRUD sur une observation.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class Inventory extends Cel {
// TODO: faire un descriptif du service
function getRessource(){
 
public function getRessource() {
 
}
 
function getElement($uid){
public function getElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
if (!isset($uid[0])) {
return;
}
 
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
$parametres_recherche = array(array('ce_utilisateur',$uid[0]),array('ordre',$uid[1]));
 
$value=array();
$chercheur_observations = new RechercheObservation($this->config);
$retour_recherche = $chercheur_observations->rechercherObservations($uid[0], $parametres_recherche, 0, 1)->get();
 
if(!isset($uid[0])) {
return;
$observation = array();
if (is_array($retour_recherche) && count($retour_recherche) > 0) {
$observation = $retour_recherche[0];
}
$parametres_recherche = array(array('ce_utilisateur',$uid[0]),array('ordre',$uid[1]));
$chercheur_observations = new RechercheObservation($this->config);
$retour_recherche = $chercheur_observations->rechercherObservations($uid[0], $parametres_recherche, 0, 1)->get();
$observation = array();
if(is_array($retour_recherche) && count($retour_recherche) > 0) {
$observation = $retour_recherche[0];
}
$observation = $this->formaterObservationVersTableauSequentiel($observation);
$output = json_encode($observation);
$this->envoyerJson($output);
return true;
$observation = $this->formaterObservationVersTableauSequentiel($observation);
$sortie = json_encode($observation);
$this->envoyerJson($sortie);
return true;
}
 
private function formaterObservationVersTableauSequentiel(&$observation) {
if ($observation['date_observation']!="0000-00-00 00:00:00") {
list($year,$month,$day)= explode('-',$observation['date_observation']);
list($day)= explode(' ',$day);
$observation['date_observation']=$day."/".$month."/".$year;
}
if ($observation['date_observation']!="0000-00-00 00:00:00") {
list($year,$month,$day)= explode('-',$observation['date_observation']);
list($day)= explode(' ',$day);
$observation['date_observation']=$day."/".$month."/".$year;
}
 
$observation = array($observation['nom_sel'], $observation['nom_sel_nn'],
$observation['nom_ret'], $observation['nom_ret_nn'],
$observation['nt'], $observation['famille'], $observation['zone_geo'],
$observation['ce_zone_geo'], $observation['ordre'],
$observation['date_observation'], $observation['lieudit'],
$observation['station'], $observation['milieu'],
$observation['commentaire'], $observation['latitude'],
$observation['longitude']);
return $observation;
$observation = array($observation['nom_sel'], $observation['nom_sel_nn'],
$observation['nom_ret'], $observation['nom_ret_nn'],
$observation['nt'], $observation['famille'], $observation['zone_geo'],
$observation['ce_zone_geo'], $observation['ordre'],
$observation['date_observation'], $observation['lieudit'],
$observation['station'], $observation['milieu'],
$observation['commentaire'], $observation['latitude'],
$observation['longitude']);
return $observation;
}
 
function updateElement($uid,$pairs) {
 
public function updateElement($uid,$pairs) {
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
$this->controleUtilisateur($uid[0]);
 
if (!isset($uid[1])) {
if (!isset($uid[1])) {
//TODO: envoyer un message d'erreur
return;
return;
}
 
$uid[1] = rtrim($uid[1],',');
$champs_etendus = isset($pairs['obs_etendue']) ? json_decode(stripslashes($pairs['obs_etendue']),true) : null;
 
$champs_etendus = isset($pairs['obs_etendue']) ? json_decode(stripslashes($pairs['obs_etendue']),true) : null;
unset($pairs['obs_etendue']);
 
if(isset($pairs['date_observation']) && !empty($pairs['date_observation'])) {
if (isset($pairs['date_observation']) && !empty($pairs['date_observation'])) {
$time = strtotime(str_replace("/", "-", $pairs['date_observation']));
if(!$time || $time > time()) {
throw new Exception('Date invalide');
}
}
 
$gestionnaire_observation = new GestionObservation($this->config);
$modification_observation = $gestionnaire_observation->modifierObservation($uid[0],$uid[1],$pairs);
if($champs_etendus != null) {
$modification_observation = $gestionnaire_observation->modifierObservation($uid[0],$uid[1],$pairs);
 
if ($champs_etendus != null) {
$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
$id_obs = $gestionnaire_observation->renvoyerIdPourOrdre($uid[0],$uid[1]);
foreach($champs_etendus as &$champ_etendu) {
$objet_champ_etendu = new ChampEtendu();
$objet_champ_etendu->id = $id_obs;
if($this->doitGenererCleChampEtendu($champ_etendu)) {
$champ_etendu['cle'] = $gestion_champs_etendus->transformerLabelEnCle($champ_etendu['label']);
}
$objet_champ_etendu->cle = $champ_etendu['cle'];
$objet_champ_etendu->valeur = $champ_etendu['valeur'];
$champ_etendu = $objet_champ_etendu;
}
// ajouterParLots modifie les champs et ajoute ceux qui existent déjà
$champs_supp = $gestion_champs_etendus->ajouterParLots($champs_etendus);
$objet_champ_etendu = new ChampEtendu();
$objet_champ_etendu->id = $id_obs;
if($this->doitGenererCleChampEtendu($champ_etendu)) {
$champ_etendu['cle'] = $gestion_champs_etendus->transformerLabelEnCle($champ_etendu['label']);
}
$objet_champ_etendu->cle = $champ_etendu['cle'];
$objet_champ_etendu->valeur = $champ_etendu['valeur'];
$champ_etendu = $objet_champ_etendu;
}
// ajouterParLots modifie les champs et ajoute ceux qui existent déjà
$champs_supp = $gestion_champs_etendus->ajouterParLots($champs_etendus);
}
return true;
return true;
}
 
function createElement($pairs) {
public function createElement($pairs) {
// Controle detournement utilisateur
$this->controleUtilisateur($pairs['ce_utilisateur']);
 
$champs_etendus = isset($pairs['obs_etendue']) ? json_decode(stripslashes($pairs['obs_etendue']),true) : null;
unset($pairs['obs_etendue']);
 
if(isset($pairs['date_observation']) && !empty($pairs['date_observation'])) {
if (isset($pairs['date_observation']) && !empty($pairs['date_observation'])) {
$time = strtotime(str_replace("/", "-", $pairs['date_observation']));
if(!$time || $time > time()) {
throw new Exception('Date invalide');
}
}
$gestionnaire_observation = new GestionObservation($this->config);
$id_nouvelle_obs = $gestionnaire_observation->ajouterObservation($pairs['ce_utilisateur'], $pairs);
 
if($champs_etendus != null) {
$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
foreach($champs_etendus as &$champ_etendu) {
$objet_champ_etendu = new ChampEtendu();
$objet_champ_etendu->id = $id_nouvelle_obs;
if($this->doitGenererCleChampEtendu($champ_etendu)) {
$champ_etendu['cle'] = $gestion_champs_etendus->transformerLabelEnCle($champ_etendu['label']);
}
$objet_champ_etendu->cle = $champ_etendu['cle'];
$objet_champ_etendu->valeur = $champ_etendu['valeur'];
$champ_etendu = $objet_champ_etendu;
}
$gestionnaire_observation = new GestionObservation($this->config);
$id_nouvelle_obs = $gestionnaire_observation->ajouterObservation($pairs['ce_utilisateur'], $pairs);
 
$champs_supp = $gestion_champs_etendus->ajouterParLots($champs_etendus);
}
return true;
if ($champs_etendus != null) {
$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
foreach($champs_etendus as &$champ_etendu) {
$objet_champ_etendu = new ChampEtendu();
$objet_champ_etendu->id = $id_nouvelle_obs;
if($this->doitGenererCleChampEtendu($champ_etendu)) {
$champ_etendu['cle'] = $gestion_champs_etendus->transformerLabelEnCle($champ_etendu['label']);
}
$objet_champ_etendu->cle = $champ_etendu['cle'];
$objet_champ_etendu->valeur = $champ_etendu['valeur'];
$champ_etendu = $objet_champ_etendu;
}
$champs_supp = $gestion_champs_etendus->ajouterParLots($champs_etendus);
}
return true;
}
 
/**
* Supprime une observation
*
*
* uid[0] : utilisateur obligatoire
* uid[1] : ordres de l'observation à supprimer
*/
function deleteElement($uid){
 
*/
public function deleteElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
if (!isset($uid[1])) {
//TODO: envoyer un message d'erreur
return;
return;
}
 
$uid[1] = rtrim($uid[1],',');
 
$gestionnaire_observation = new GestionObservation($this->config);
$id_obs = $gestionnaire_observation->renvoyerIdPourOrdre($uid[0],$uid[1]);
$suppression_observation = $gestionnaire_observation->supprimerObservation($uid[0],$uid[1]);
$suppression_observation = $gestionnaire_observation->supprimerObservation($uid[0],$uid[1]);
 
$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
$champs_supp = $gestion_champs_etendus->vider($id_obs);
 
if ($suppression_observation) {
echo "OK";
echo "OK";
}
exit() ;
exit();
}
function doitGenererCleChampEtendu($champ_etendu) {
 
private function doitGenererCleChampEtendu($champ_etendu) {
return !isset($champ_etendu['cle']) ||
trim($champ_etendu['cle'] == "" ||
strpos($champ_etendu['cle'],'tempid_') !== false);
trim($champ_etendu['cle'] == "" ||
strpos($champ_etendu['cle'],'tempid_') !== false);
}
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.11 2008-11-13 11:29:12 ddelon
* Reecriture gwt-ext
*
* Revision 1.10 2008-01-30 08:57:28 ddelon
* fin mise en place mygwt
*
* Revision 1.9 2007-05-22 12:54:09 ddelon
* Securisation acces utilisateur
*
*/
?>
}
/trunk/jrest/services/LicenceUtilisateur.php
1,52 → 1,53
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// declare(encoding='UTF-8');
/**
* Classe gérant l'acceptation de la licence utilisateur
* Encodage en entrée : utf8
* Encodage en sortie : utf8
* Service gérant l'acceptation de la licence utilisateur.
*
* @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 © 2010, Aurélien Peronnet
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class LicenceUtilisateur extends Cel {
 
/**
* Fonction appelée sur un POST
*
*
* Accepte ou refuse la licence utilisateur, en mettant à jour la base de données pour
* l'utilisateur indiqué
*
*
* @param array $uid
* @param array $pairs
*/
function updateElement($uid,$pairs) {
if(!isset($uid[0]) && is_numeric($uid[0])) {
public function updateElement($uid,$pairs) {
if (!isset($uid[0]) && is_numeric($uid[0])) {
return;
}
if(!isset($pairs['licence'])) {
 
if (!isset($pairs['licence'])) {
return;
}
$requete_acceptation_licence = 'UPDATE cel_utilisateurs_infos '.
'SET licence_acceptee = '.Cel::db()->proteger($pairs['licence']).
'WHERE id_utilisateur = '.Cel::db()->proteger($uid[0]);
$resultat_acceptation_licence = Cel::db()->executer($requete_acceptation_licence);
}
 
$requete = 'UPDATE cel_utilisateurs_infos '.
'SET licence_acceptee = '.Cel::db()->proteger($pairs['licence']).
'WHERE id_utilisateur = '.Cel::db()->proteger($uid[0]).' '.
' -- '.__FILE__.':'.__LINE__;
 
$resultat_acceptation_licence = Cel::db()->executer($requete);
 
$resultat = false;
if($resultat_acceptation_licence) {
$resultat = "OK";
if ($resultat_acceptation_licence) {
$resultat = 'OK';
}
 
echo $resultat;
exit;
exit();
}
}
 
?>
}
/trunk/jrest/services/InventoryImage.php
1,24 → 1,20
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author Aurelien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
 
/**
* Service recherche et ajout d'image a partir de divers critères
* in=utf8
* out=utf8
*
*/
* Service recherche et ajout d'image a partir de divers critères.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Images
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class InventoryImage extends Cel {
 
/**
27,25 → 23,21
* @param int uid[0] : utilisateur obligatoire
* @param int uid[1] : identifiant image obligatoire
*/
public function getElement($uid)
{
public function getElement($uid) {
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
$this->controleUtilisateur($uid[0]);
 
if(!isset($uid[0]) || !isset($uid[1])) {
return;
}
if (!isset($uid[0]) || !isset($uid[1])) {
return;
}
$parametres = array('ordre' => $uid[1]);
$retour = null;
$chercheurImage = new RechercheImage($this->config);
$image_recherchee = $chercheurImage->rechercherImages($uid[0], $parametres, 0, 1);
if (count($image_recherchee) > 0) {
$retour = $image_recherchee[0];
}
 
$chercheur_image = new RechercheImage($this->config);
 
$parametres = array('ordre' => $uid[1]);
 
$retour = null;
$image_recherchee = $chercheur_image->rechercherImages($uid[0], $parametres, 0, 1);
if(count($image_recherchee) > 0) {
$retour = $image_recherchee[0];
}
 
$this->envoyerJson($retour);
return true;
}
58,17 → 50,16
* @param int $uid[1] ordre de l'image relatif à l'utilisateur
* @param pairs array tableau contenant les valeurs de metadonnées à modifier
*/
public function updateElement($uid,$pairs)
{
public function updateElement($uid,$pairs) {
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
if(count($pairs) == 0 || !isset($uid[1])) {
if (count($pairs) == 0 || !isset($uid[1])) {
return false;
}
 
$gestionnaire_image = new GestionImage($this->config);
$resultat_mise_a_jour = $gestionnaire_image->modifierImage($uid[0],$uid[1],$pairs);
$gestionnaireImage = new GestionImage($this->config);
$resultat_mise_a_jour = $gestionnaireImage->modifierImage($uid[0],$uid[1],$pairs);
 
$retour = false;
$ok = false;
88,10 → 79,8
*
* @param $pairs array tableau contenant les valeurs de metadonnées à ajouter
*/
function createElement($pairs)
{
 
if(self::ARRET_SERVICE) {
public function createElement($pairs) {
if (self::ARRET_SERVICE) {
header('Status: 503 Service Temporarily Unavailable');
echo "L'envoi d'images au cel est temporairement désactivé";
exit;
103,37 → 92,34
$infos_fichier = $file ;
}
 
$gestionnaire_image = new GestionImage($this->config);
$gestionnaireImage = new GestionImage($this->config);
$id_utilisateur = $pairs['ce_utilisateur'];
 
if ($gestionnaire_image->ajouterImage($id_utilisateur, $infos_fichier)) {
 
if ($gestionnaireImage->ajouterImage($id_utilisateur, $infos_fichier)) {
// l'upload demande de court-circuiter le fonctionnement normal de JREST
// en quittant directement après l'envoi
$this->envoyerMessageCreationEffectuee();
exit;
exit();
}
}
 
private function envoyerMessageCreationEffectuee() {
 
header('HTTP/1.0 200 Created');
echo 'OK';
exit() ;
exit();
}
 
/**
* Méthode appelée avec une requête de type DELETE.
* Supprime les infos sur l'image et le fichier correspondant à l'ordre passé en parametre
* Supporte la suppression multiple en passant plusieurs numéros séparés par des virgules
*
* @param int uid[0] id utilisateur
* @param string uid[1] : ordre(s) image(s) obligatoire(s) séparés par des virgules
*
*/
function deleteElement($uid){
 
if(self::ARRET_SERVICE) {
* Méthode appelée avec une requête de type DELETE.
* Supprime les infos sur l'image et le fichier correspondant à l'ordre passé en parametre
* Supporte la suppression multiple en passant plusieurs numéros séparés par des virgules
*
* @param int uid[0] id utilisateur
* @param string uid[1] : ordre(s) image(s) obligatoire(s) séparés par des virgules
*
*/
public function deleteElement($uid){
if (self::ARRET_SERVICE) {
header('Status: 503 Service Temporarily Unavailable');
echo "L'envoi d'images au cel est temporairement désactivé";
exit;
140,26 → 126,20
}
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
if (!isset($uid[1]) || !$this->EstUneSuiteIdentifiantsImage($uid[1])) {
if (!isset($uid[1]) || !$this->estUneSuiteIdentifiantsImage($uid[1])) {
return;
}
 
$ids_images = explode(',',$uid[1]);
 
$gestionnaire_image = new GestionImage($this->config);
$suppression_image = $gestionnaire_image->supprimerImage($ids_images);
 
$gestionnaireImage = new GestionImage($this->config);
$gestionnaireImage->supprimerImage($ids_images);
$this->envoyer('OK');
}
 
/** Un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
* sans virgule terminale
*/
private function estUneSuiteIdentifiantsImage($chaine) {
 
// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
// sans virgule terminale
$reg_exp = "/^(([0-9])+,)*([0-9])+$/";
 
return preg_match($reg_exp, $chaine);
}
}
?>
}
/trunk/jrest/services/NomsChampsEtendus.php
1,10 → 1,20
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// in utf8
// out utf8
 
// Fournit un référentiel relatif à l'utilisateur sur les noms ou les valeurs des champs étendus
// declare(encoding='UTF-8');
/**
* Fournit un référentiel relatif à l'utilisateur sur les noms ou les valeurs des champs étendus.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Auto-complétions
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class NomsChampsEtendus extends Cel {
 
/**
11,21 → 21,19
* Suivant le type de référentiel donné en paramètre, renvoie les liste de ses éléments
*
* uid[0] : "cle" ou "valeur"
* $_GET["start"] et $GET_["limit"] : selection intervalle
* $_GET["cle"] : restreint la recherche sur les valeurs d'une certaine clé
* $_GET["recherche"] : cherche les noms qui commmencent selon la valeur
*/
function getElement($uid){
public function getElement($uid){
if (!$this->paramObligatoiresSontPresents($uid)) {
return;
}
 
$_GET['recherche'] = str_replace('*', '%', $_GET['recherche']);
$referentiel = array();
 
if($uid[0] == "cle") {
if ($uid[0] == 'cle') {
$referentiel = $this->rechercherCles($_GET['recherche']);
} else if($uid[0] == "valeur") {
} else if($uid[0] == 'valeur') {
$referentiel = $this->rechercherValeurs($_GET['cle'], $_GET['recherche']);
}
 
33,38 → 41,43
return true;
}
 
function rechercherCles($recherche_cle) {
private function rechercherCles($recherche_cle) {
// Recherche dans clé du catalogue et les clés déja saisies par les utilisateurs.
// Si une clé est présente dans les deux tables, on privilégie celle du catalogue
// qui contient un label bien formé
$requete = "(SELECT cle, label, 'catalogue' FROM cel_catalogue_champs_etendus WHERE ".
"label LIKE ".Cel::db()->proteger($recherche_cle)." ".
"AND groupe = 0 ".
") ".
"UNION ".
"(SELECT DISTINCT cle, cle as label, 'utilisateur' FROM cel_obs_etendues WHERE ".
"cle LIKE ".Cel::db()->proteger($recherche_cle).
"AND cle NOT IN (SELECT cle FROM cel_catalogue_champs_etendus) ".
") ";
$labelP = Cel::db()->proteger($recherche_cle);
$requete = "(SELECT cle, label, 'catalogue' ".
'FROM cel_catalogue_champs_etendus '.
"WHERE label LIKE $labelP ".
'AND groupe = 0 )'.
'UNION '.
"(SELECT DISTINCT cle, cle AS label, 'utilisateur' ".
'FROM cel_obs_etendues '.
"WHERE cle LIKE $labelP ".
'AND cle NOT IN (SELECT cle FROM cel_catalogue_champs_etendus) '.
') '.
' -- '.__FILE__.':'.__LINE__;
$resultat = Cel::db()->requeter($requete);
 
$resultat = Cel::db()->requeter($requete);
$referentiel = array();
foreach($resultat as $valeur) {
foreach ($resultat as $valeur) {
$referentiel[$valeur['cle']] = $valeur['label'];
}
return $referentiel;
}
 
function rechercherValeurs($cle, $recherche_valeur) {
$requete = "SELECT DISTINCT valeur FROM cel_obs_etendues WHERE ".
"cle = ".Cel::db()->proteger($cle)." AND ".
"valeur LIKE ".Cel::db()->proteger($recherche_valeur.'%')." ";
private function rechercherValeurs($cle, $recherche_valeur) {
$cleP = Cel::db()->proteger($cle);
$valeurP = Cel::db()->proteger($recherche_valeur.'%');
$requete = 'SELECT DISTINCT valeur '.
'FROM cel_obs_etendues '.
"WHERE cle = $cleP ".
"AND valeur LIKE $valeurP ".
' -- '.__FILE__.':'.__LINE__;
$resultats = Cel::db()->requeter($requete);
 
$referentiel_resultat = Cel::db()->requeter($requete);
$referentiel = array();
 
foreach ($referentiel_resultat as $valeur) {
foreach ($resultats as $valeur) {
if (trim($valeur['valeur']) != '') {
$referentiel[] = $valeur['valeur'];
}
72,19 → 85,7
return $referentiel;
}
 
function paramObligatoiresSontPresents($uid) {
private function paramObligatoiresSontPresents($uid) {
return (isset($uid[0]) && ($uid[0] == 'cle' || $uid[0] == 'valeur'));
}
 
function filtreRechercheEstDemande() {
return (isset($_GET["recherche"]) && trim($_GET["recherche"]) != '');
}
 
function limiteEstDemandee() {
return isset($_GET["start"]) && is_numeric($_GET["start"]) && isset($_GET["limit"]) && is_numeric($_GET["limit"]);
}
 
function estUneValeurValide($chaine) {
return ($chaine != null && $chaine != "000null" && trim($chaine) != '');
}
}
/trunk/jrest/services/ImportXLS.php
12,9 → 12,10
* # 13 observations importées
* + cf MySQL general_log = 1
*
* @category DEL
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Communes
* @subpackage Observations
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Raphaël DROZ <raphael@tela-botanica.org>
/trunk/jrest/services/NameSearch.php
1,75 → 1,41
<?php
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author David Delon <david.delon@clapas.net>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
/**
*
* in : utf8
* out : utf8
*
* NameSearch.php
*
* Cas d'utilisation :
* Service completion nom scientifique
*
* 1 : L'application recoit un debut de nom scientifique ainsi qu'un code de référentiel
* 2 : Si le genre recu est >1, l'application retourne les 50 premieres genre commencant par ce prefixe
* 3 : Si l'espece est presente l'application retourne les 50 premieres genre+espece commencant par ce prefixe
*/
* Service de complétion du nom scientifique.
*
* Cas d'utilisation :
* 1 : L'application recoit un debut de nom scientifique ainsi qu'un code de référentiel
* 2 : Si le genre recu est >1, l'application retourne les 50 premieres genre commencant par ce prefixe
* 3 : Si l'espece est presente l'application retourne les 50 premieres genre+espece commencant par ce prefixe
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Auto-complétions
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien 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>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class NameSearch extends Cel {
 
public function getRessource(){
//TODO: description du service à renvoyer
print "[]";
return;
//TODO: description du service à renvoyer
print '[]';
return;
}
 
public function getElement($uid){
$liste_genre_espece = array();
$referentiel = null;
$genre = null;
$espece = null;
if(isset($uid[0])) {
$referentiel = $uid[0];
}
if(isset($uid[1])) {
$genre = $uid[1];
}
if(isset($uid[2])) {
$espece = $uid[2];
}
$referentiel = isset($uid[0]) ? $uid[0] : null;
$genre = isset($uid[1]) ? $uid[1] : null;
$espece = isset($uid[2]) ? $uid[2] : null;
 
$chercheur_infos_taxon = new RechercheInfosTaxonBeta($this->config, $referentiel);
$liste_genre_espece = $chercheur_infos_taxon->rechercherGenreEspeceSurPrefixe($genre,$espece);
$this->envoyerJson($liste_genre_espece);
return true;
$this->envoyerJson($liste_genre_espece);
return true;
}
}
 
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.6 2008-01-30 08:57:28 ddelon
* fin mise en place mygwt
*
* Revision 1.5 2007-05-21 18:13:30 ddelon
* Refactoring et documentation
*
*
*/
?>
}