Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1914 → Rev 1936

/branches/v1.7-croissant/jrest/lib/GestionObservation.php
264,68 → 264,63
* @return true ou false suivant le succès de l'opération
*/
public function supprimerObservation($utilisateur, $ordre) {
// TODO changer le systeme pour n'utiliser plus que les id
$retour = false;
$tableau_ordre = explode(',', $ordre);
$tableau_ordre = array_map(array(Cel::db(),'proteger'), $tableau_ordre);
$ordre = implode(',', $tableau_ordre);
// TODO changer le systeme pour n'utiliser plus que les id
$retour = false;
$tableau_ordre = explode(',', $ordre);
$tableau_ordre = array_map(array(Cel::db(),'proteger'), $tableau_ordre);
$ordre = implode(',', $tableau_ordre);
 
$requete_ids_observations = 'SELECT id_observation as id_obs FROM cel_obs '.
'WHERE ce_utilisateur = '.Cel::db()->proteger($utilisateur).' '.
'AND ordre IN ('.$ordre.')';
$resultat_ids_observations = Cel::db()->requeter($requete_ids_observations);
$requete_ids_observations = 'SELECT id_observation as id_obs FROM cel_obs '.
'WHERE ce_utilisateur = '.Cel::db()->proteger($utilisateur).' '.
'AND ordre IN ('.$ordre.')';
$resultat_ids_observations = Cel::db()->requeter($requete_ids_observations);
 
$ids_obs = array();
if(is_array($resultat_ids_observations) && count($resultat_ids_observations) > 0) {
foreach($resultat_ids_observations as $id_observation) {
$ids_obs[] = Cel::db()->proteger($id_observation['id_obs']);
}
$ids_obs = array();
if(is_array($resultat_ids_observations) && count($resultat_ids_observations) > 0) {
foreach($resultat_ids_observations as $id_observation) {
$ids_obs[] = Cel::db()->proteger($id_observation['id_obs']);
}
$chaine_ids_obs = implode(',', $ids_obs);
$requete_supression_observations = 'DELETE FROM cel_obs WHERE '.
'ce_utilisateur = '.Cel::db()->proteger($utilisateur).' '.
'AND id_observation IN ('.$chaine_ids_obs.')';
$chaine_ids_obs = implode(',', $ids_obs);
$requete_supression_observations = 'DELETE FROM cel_obs WHERE '.
'ce_utilisateur = '.Cel::db()->proteger($utilisateur).' '.
'AND id_observation IN ('.$chaine_ids_obs.')';
 
$resultat_suppression_observations = Cel::db()->executerRequeteSimple($requete_supression_observations);
$resultat_suppression_observations = Cel::db()->executerRequeteSimple($requete_supression_observations);
// TODO: Faire la suppression des mots clés
// et des liaisons obs images dans une ou des fonctions à part
if ($resultat_suppression_observations === false) {
$this->logger("CEL_bugs","Erreur de suppression d'une liste d'observations : ".$resultat_suppression_observations);
}
else
{
$requete_supression_lien_obs_images = 'DELETE FROM cel_obs_images WHERE '.
'id_utilisateur = '.Cel::db()->proteger($utilisateur).' '.
'AND id_observation IN ('.$chaine_ids_obs.')';
// TODO: Faire la suppression des mots clés
// et des liaisons obs images dans une ou des fonctions à part
if ($resultat_suppression_observations === false) {
$this->logger("CEL_bugs","Erreur de suppression d'une liste d'observations : ".$resultat_suppression_observations);
}
else {
$requete_supression_lien_obs_images = 'DELETE FROM cel_obs_images WHERE id_observation IN ('.$chaine_ids_obs.')';
$resultat_suppression_liens = Cel::db()->executerRequeteSimple($requete_supression_lien_obs_images);
$resultat_suppression_liens = Cel::db()->executerRequeteSimple($requete_supression_lien_obs_images);
if ($resultat_suppression_liens === false) {
$this->logger("CEL_bugs","Erreur de suppression d'une liste de liaison entre observations et images : ".$requete_supression_lien_obs_images);
}
else
{
$retour = true;
}
$requete_supression_lien_mots_cles = 'DELETE FROM cel_obs_mots_cles WHERE '.
'id_observation in ('.$chaine_ids_obs.')';
if ($resultat_suppression_liens === false) {
$this->logger("CEL_bugs","Erreur de suppression d'une liste de liaison entre observations et images : ".$requete_supression_lien_obs_images);
}
else {
$retour = true;
}
$requete_supression_lien_mots_cles = 'DELETE FROM cel_obs_mots_cles WHERE '.
'id_observation in ('.$chaine_ids_obs.')';
$resultat_suppression_mots_cles = Cel::db()->executerRequeteSimple($requete_supression_lien_mots_cles);
if ($resultat_suppression_mots_cles === false) {
$this->logger("CEL_bugs","Erreur de suppression d'une liste de mots clés d'observation(s) : ".$resultat_suppression_mots_cles);
}
else
{
$retour = true;
}
}
} else {
$resultat_suppression_mots_cles = Cel::db()->executerRequeteSimple($requete_supression_lien_mots_cles);
if ($resultat_suppression_mots_cles === false) {
$this->logger("CEL_bugs","Erreur de suppression d'une liste de mots clés d'observation(s) : ".$resultat_suppression_mots_cles);
}
else {
$retour = true;
}
}
return $retour;
} else {
$retour = true;
}
return $retour;
}
/**
/branches/v1.7-croissant/jrest/lib/RechercheInfosTaxonBeta.php
1,16 → 1,16
<?php
/**
* 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/
*/
* 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/
*/
 
/**
*
18,7 → 18,9
* ne soit dépendant de la version d'eflore
*/
class RechercheInfosTaxonBeta extends Cel {
 
const DEBUG = FALSE;
 
private $url_service_nom = null;
private $url_service_taxon = null;
private $url_service_chorologie = null;
30,10 → 32,18
// si l'espèce passée a le motif <ref>:(nt|nn):<num>, eg: isfan:nt:1591
public $is_notation_spe = FALSE;
 
// un cache utilisé pour les requêtes effectuées sur /service:eflore:0.1/bdtfx/noms?masque=
// qui sont lourdes, et parfois identiques (cf cas de l'import XLS)
static $cache = array();
 
public function RechercheInfosTaxonBeta($config, $code_referentiel = 'bdtfx') {
parent::__construct($config);
$this->setReferentiel($code_referentiel);
}
 
public function setReferentiel($code_referentiel = 'bdtfx') {
$this->code_referentiel = $code_referentiel;
$this->formaterUrlsServices($config);
$this->formaterUrlsServices($this->config);
}
private function formaterUrlsServices($config) {
48,6 → 58,7
$liste_genre_espece = array();
$this->masque_recherche = trim(trim($genre).' '.trim($espece,' *'));
$masque = urlencode($this->masque_recherche);
if(self::DEBUG) error_log("CEL fetch: " . $this->url_service_nom.'?masque='.$masque.'&recherche=etendue&retour.format=min&navigation.limite=50&ns.structure=au');
$requete = @file_get_contents($this->url_service_nom.'?masque='.$masque.'&recherche=etendue&retour.format=min&navigation.limite=50&ns.structure=au');
if($requete != '') {
$requete = json_decode($requete);
76,8 → 87,8
$resultat_infos_complementaires = (array)$this->effectuerRequeteInfosComplementairesSurNumNom($numNom);
$retour_infos_complementaires = array();
if (isset($resultat_infos_complementaires['nom_retenu_complet']) && $resultat_infos_complementaires['nom_retenu_complet']) {
$retour_infos_complementaires=array((self::supprimerBiblio($resultat_infos_complementaires['nom_retenu_complet'])));
}
$retour_infos_complementaires=array((self::supprimerBiblio($resultat_infos_complementaires['nom_retenu_complet'])));
}
return $retour_infos_complementaires;
}
105,11 → 116,20
}
private function effectuerRequeteUrlRecherche($nom_saisi, $mode = 'stricte') {
$res = @json_decode(file_get_contents(sprintf('%1$s?masque=%2$s&recherche=%3$s&ns.format=txt&retour.champs=%4$s&navigation.limite=1',
$this->url_service_nom,
urlencode($nom_saisi),
$mode,
implode(',', array("id","nom_sci","auteur","nom_retenu.id","famille","num_taxonomique","nom_retenu_complet")))));
$url = sprintf(
'%1$s?masque=%2$s&recherche=%3$s&ns.format=txt&retour.champs=%4$s&navigation.limite=1',
$this->url_service_nom,
urlencode($nom_saisi),
$mode,
implode(',', array("id","nom_sci","auteur","nom_retenu.id","famille","num_taxonomique","nom_retenu_complet")));
 
if(! array_key_exists($url, self::$cache)) {
if(self::DEBUG) error_log("CEL fetch: " . $url);
$res = @json_decode(file_get_contents($url));
self::$cache[$url] = $res;
} else {
$res = self::$cache[$url];
}
if(!$res) return NULL;
$resultat = (array)$res->resultat;
return array_pop($resultat);
119,8 → 139,8
// TODO: gérer les hybrides
if(self::estUnHybride($nom_saisi) || self::estUneFormuleHybridite($nom_saisi)) {
$nom_decoupe = explode(' ', $nom_saisi);
$derniere_position_hybride = end(array_keys($nom_decoupe, 'x'));
$nom_saisi_sans_auteur = implode(' ',array_slice($nom_decoupe, 0, $derniere_position_hybride + 2));
$derniere_position_hybride = array_keys($nom_decoupe, 'x');
$nom_saisi_sans_auteur = implode(' ',array_slice($nom_decoupe, 0, end($derniere_position_hybride) + 2));
} else {
/* Attention le parseur de nom n'est pas fiable à 100%
mais ça marche dans la plupart des cas
143,18 → 163,20
public function effectuerRequeteInfosComplementairesSurNumNom($num_nom, $ref = NULL) {
if($ref && isset($this->config['eflore']['api_host'])) {
if(self::DEBUG) error_log("CEL fetch: " .$this->config['eflore']['api_host'] . '/');
return @json_decode(file_get_contents($this->config['eflore']['api_host'] . '/' .
$ref . '/' .
'noms' . '/' .
$num_nom .
'?retour.champs=' . implode(',', array('nom_sci,auteur',
'id',
'nom_retenu_complet',
'nom_retenu.id',
'num_taxonomique',
'famille'))));
$ref . '/' .
'noms' . '/' .
$num_nom .
'?retour.champs=' . implode(',', array('nom_sci,auteur',
'id',
'nom_retenu_complet',
'nom_retenu.id',
'num_taxonomique',
'famille'))));
}
// XXX: compat
if(self::DEBUG) error_log("CEL fetch: " . $this->url_service_nom.'/'.$num_nom.'?retour.champs=nom_sci,auteur,id,nom_retenu_complet,nom_retenu.id,num_taxonomique,famille');
return @json_decode(file_get_contents($this->url_service_nom.'/'.$num_nom.'?retour.champs=nom_sci,auteur,id,nom_retenu_complet,nom_retenu.id,num_taxonomique,famille'));
}
 
165,6 → 187,7
public function rechercherNumTaxSurNumNom($num_nom) {
$nt = null;
$url = $this->url_service_nom."/".$num_nom.'?retour.champs=num_taxonomique';
if(self::DEBUG) error_log("CEL fetch: $url");
$resultat = @file_get_contents($url);
if($resultat != '') {
$infos = json_decode($resultat);
177,6 → 200,7
public function taxonEstPresentDansDepartement($num_taxon,$code_departement) {
$presence_taxon = false;
$url = $this->url_service_chorologie_obs.'?masque.departement='.$code_departement.'&masque.determination.nt='.$num_taxon.'&navigation.limite=1';
if(self::DEBUG) error_log("CEL fetch: $url");
$resultat = @file_get_contents($url);
if($resultat != '') {
$resultat = json_decode($resultat);
211,6 → 235,7
// Numero taxonomique
else {
//TODO: retourner moins de champs grâce au paramètre retour.champs
if(self::DEBUG) error_log("CEL fetch: " . $this->url_service_taxon."/nt:".$num);
$obj = @json_decode(file_get_contents($this->url_service_taxon."/nt:".$num));
}
if($obj) $obj->ref = $ref;
223,6 → 248,7
public function rechercherSynonymesSurNumNom($num_nom) {
$retour = array();
if(self::DEBUG) error_log("CEL fetch: " . $this->url_service_nom.'/'.$num_nom.'/relations/synonymie/?retour.format=min');
$resultat = @file_get_contents($this->url_service_nom.'/'.$num_nom.'/relations/synonymie/?retour.format=min');
if($resultat != '') {
$resultat = json_decode($resultat);
233,4 → 259,3
return $retour;
}
}
?>