Subversion Repositories eFlore/Applications.cel

Compare Revisions

No changes between revisions

Regard whitespace Rev 2142 → Rev 2143

/trunk/jrest/jrest.ini.php.defaut
116,5 → 116,5
; ADMIN
[jrest_admin]
admin = aurelien@tela-botanica.org,david.delon@clapas.net,jpm@tela-botanica.org,marie@tela-botanica.org
ip_autorisees = "localhost,www.tela-botanica.org, api.tela-botanica.org"
ip_autorisees = "127.0.0.1,193.54.123.216,193.54.123.169"
;*/?>
/trunk/jrest/services/CelWidgetSaisie.php
137,7 → 137,7
$valeurs = implode(', ', $obs);
$requete = "INSERT INTO cel_obs ($champs) VALUES ($valeurs) ";
 
if (Cel::db()->executerRequeteSimple($requete) === false) {
if (Cel::db()->executer($requete) === false) {
$this->messages[] = "Un problème est survenu lors de l'insertion de l'obs dans la base de données.";
} else {
$obs_a_taguer_ordres[] = trim($obs['ordre'], "'");
347,7 → 347,7
"FROM cel_obs ".
"WHERE ce_utilisateur = ".Cel::db()->proteger($id_utilisateur)." ";
 
$ordre_max = Cel::db()->executerRequete($requete, 'Column');
$ordre_max = Cel::db()->requeterValeurUnique($requete);
if ($ordre_max !== false) {
$ordre = $ordre_max + 1;
}
488,7 → 488,7
' ON DUPLICATE KEY UPDATE id_image = id_image';
 
$liaison = true;
if (Cel::db()->executerRequeteSimple($requete) === false) {
if (Cel::db()->executer($requete) === false) {
$this->messages[] = "La requête de liaison de l'obs $id_obs à l'image $id_image pour l'utilisateur $id_utilisateur a échouée.";
$liaison = false;
}
505,7 → 505,7
"WHERE ce_utilisateur = $id_utilisateur ".
" AND ordre = $ordre ";
 
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
 
$id_obs = (count($resultat) > 0) ? $resultat[0]['id_observation'] : false;
return $id_obs;
521,7 → 521,7
"WHERE ce_utilisateur = $id_utilisateur ".
" AND ordre IN (".implode(',',$ordres).") ";
$this->debug[] = $requete;
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
$ids = array();
foreach($resultat as $id) {
$ids[] = $id['id_observation'];
578,7 → 578,7
$infosImage['md5'] = md5_file($cheminImage);
$this->debug[] = 'Nom fichier img meta :'.$nomFichierImage;
$requete = $this->construireRequeteInsertionImage($infosImage);
$resultat = Cel::db()->executerRequeteSimple($requete);
$resultat = Cel::db()->executer($requete);
if ($resultat !== false) {
$idImage = $this->obtenirIdImagePourIdentifiantEtOrdre($idUtilisateur, $nouvelOrdre);
if ($idImage !== false) {
619,7 → 619,7
$requete = 'SELECT MAX(ordre) as max_ordre '.
'FROM cel_images '.
"WHERE ce_utilisateur = $id_utilisateur ";
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
 
$ordre = ($resultat) ? ++$resultat[0]['max_ordre'] : 0;
return $ordre;
633,7 → 633,7
'FROM cel_images '.
"WHERE ce_utilisateur = $id_utilisateur ".
" AND ordre = $ordre ";
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
 
$id_image = (count($resultat) > 0) ? $resultat[0]['id_image'] : false;
return $id_image;
/trunk/jrest/services/CelWidgetMap.php
532,7 → 532,7
'ORDER BY utilisateur ASC, ordre ASC';
//$this->debug[] = $requete;
//die($requete);
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
$observations = null;
if ($resultats != false) {
685,7 → 685,7
'ORDER BY utilisateur ASC, ci.ordre ASC';
//$this->debug[] = $requete;
//die($requete);
$elements_tag = Cel::db()->executerRequete($requete);
$elements_tag = Cel::db()->requeter($requete);
$requete_tag = array();
if ($elements_tag != false && count($elements_tag) > 0) {
/trunk/jrest/services/CelImage.php
1,15 → 1,15
<?php
// declare(encoding='UTF-8');
 
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
/**
* Service fournissant la liste des ids des images liées à une observation.
* Encodage en entrée : utf8
* Encodage en sortie : utf8
*
* Cas d'utilisation :
* Cas d'utilisation GET :
* /CelImage/liste-ids?obsId=[0-9]+ : ids des images liées à l'observation possédant l'identifiant 'obsId'.
*
* Cas d'utilisation DELETE :
*
* Sortie :
* Type de sortie : json (par défaut), HTML en cas d'erreur.
*
50,7 → 50,9
}
 
/**
* Carte par défaut
* Service fournissant la liste des ids des images liées à une observation.
* Format de l'url du WS :
* /CelImage/liste-ids?obsId=[0-9]+ : ids des images liées à l'observation possédant l'identifiant 'obsId'.
*/
private function getListeIds() {
$ids = array();
83,4 → 85,49
}
return $ids;
}
 
/**
* 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 ($this->controlerAccessibiliteWs()) {
if ($this->controleAppelIpAutorisee()) {
// Initialisation des paramètres
$idImage = isset($uid[0]) ? $uid[0] : '';
 
// Vérifier les paramêtres
$this->verifierIdentifiantImage($idImage);
$idsImages = explode(',', $idImage);
 
$gestionnaireImage = new GestionImage($this->config);
$suppressionImage = $gestionnaireImage->supprimerImage($idsImages);
 
if ($suppressionImage) {
$this->envoyer('OK');
} else {
$this->envoyer("Au moins une image « $idImage » n'a pu être supprimé.");
}
} else {
header('Status: 401 Unauthorized');
$message = "Accès interdit. \n"."Vous n'êtes pas autorisé à accéder à ce service depuis '{$_SERVER['REMOTE_ADDR']}' !\n";
die($message);
}
}
}
 
private function verifierIdentifiantImage($chaine) {
$ok = preg_match('/^(?:[0-9]+,)*[0-9]+$/', $chaine);
if ($ok == false) {
header("HTTP/1.0 412 Precondition Failed"); // TODO: PHP: 5.4 http_response_code(412);
header("Content-Type: text/plain; charset=utf-8");
die("Indiquer un ou plusieurs identifiants d'image séparés par des virgules.");
}
return $ok;
}
}
/trunk/jrest/services/CelObs.php
15,9 → 15,9
* @copyright © 2013, Jean-Pascal MILCENT
*/
class CelObs extends Cel {
 
private $rechercheObs = null;
private $chpsEtendus = null;
private $donnees = null;
 
public function __construct($config) {
parent::__construct($config);
96,4 → 96,155
}
return $retour;
}
 
/**
* Méthode appelée avec une requête de type POST et un identifiant d'observation.
* Modifie une observation en fonction des informations envoyées en POST.
* Utilisé par:
* - service:del:0.1/determinations/ : ValiderDetermination.php::modifierObservationParDetermination()
* - service:del:0.1/observations/#idObs [POST] : pour dépublier une observation
*
* @param $uid array $uid[0] (int) : identifiant observation
* @param pairs array tableau contenant les champs à modifier sous la forme : nom_du_champ=nouvelle_valeur
*/
public function updateElement($ressources, $donnees) {
$this->donnees = $donnees;
if ($this->controlerAccessibiliteWs()) {
if ($this->controleAppelIpAutorisee()) {
$idObs = isset($ressources[0]) ? $ressources[0] : '';
$this->verifierIdentifiantObs($idObs);
 
$idObs = explode(',', $idObs);
// Seulement la dépublication
if (isset($this->donnees['transmission']) && count($this->donnees) == 1) {
$gestionnaireObs = new GestionObservation($this->config);
$detransmissionObs = $gestionnaireObs->modifierTransmissionObservation($idObs, false);
if ($detransmissionObs === false) {
$msg = "Un problème est survenu (voir log). Les observations n'ont pas pu être dépubliées.";
$this->envoyerMessageErreur(304, $msg);
}
} if (count($this->donnees) == 3) {
$donneesObligatoires = array('id_observation', 'ce_utilisateur', 'nom_sel');
if ($this->verifierDonneesObligatoires($donneesObligatoires)) {
$this->modifierObservationDepuisDEL($idObs);
}
} else {
$msg = "La modification complète d'une observation n'est pas implémentée. \n".
"Uniquement la dépublication pour l'instant fonctionne";
$this->envoyerMessageErreur(501, $msg);
}
 
$this->envoyer('OK');
} else {
$msg = "Accès interdit. \n"."Vous n'êtes pas autorisé à accéder à ce service depuis '{$_SERVER['REMOTE_ADDR']}' !\n";
$this->envoyerMessageErreur(401, $msg);
}
}
}
 
private function modifierObservationDepuisDEL($idObs) {
$gestion_observation = new GestionObservation($this->config);
$pairs = array_map('trim', $this->donnees);
$utilisateur = $pairs['ce_utilisateur'];
unset($pairs['ce_utilisateur'], $pairs['id_observation']);
 
// mise à jour des mots-clefs suite à une validation:
// typiquement, DEL modifierObservationParDetermination()
// nous enverra obsKeywordDelete=aDeterminer en plus de certitude=Certaine
$obsKeywordDelete = @trim($pairs['obsKeywordDelete']);
// $imgKeywordDelete = @trim($pairs['imgKeywordDelete']);
unset($pairs['obsKeywordDelete']); // , $pairs['imgKeywordDelete']);
 
// complete les données de la proposition validée car:
// 1) la table tb_del.del_commentaire ne contient pas toutes les informations nécessaires
// 2) la table tb_del.del_commentaire ne *devrait* pas contenir beaucoup plus que nom_sel et nom_sel_nn
// 3) la génération de ces données ici, au moment de l'UPDATE, est le meilleur garant de leur fiabilité
$more_data = $this->NN2(@$pairs['nom_sel_nn'], @$pairs['nom_referentiel']);
if($more_data) $pairs = array_merge($pairs, $more_data);
 
$modification = $gestion_observation->modifierObservationPublique($utilisateur, $idObs, $pairs);
if($modification) {
$gestion_mots_cles = new GestionMotsClesChemin($this->config, 'obs');
// supression des éventuelles liaison de l'obs avec le mot clé contenu dans obsKeywordDelete
$supp_liaison_mot_cle = $gestion_mots_cles->supprimerLiaisonPourMotCleEtIdElementLie($obsKeywordDelete, $idObs, $utilisateur);
// TODO : quel impact de la valeur de retour ?
header("Content-Type: text/plain; charset=utf-8");
die("OK"); // attention, compatibilité avec ValiderDetermination.php de DEL !
}
// cf TODO: n'arrivera pas tant que l'UPDATE ajoutera systématiquement date_modification = now()
elseif($modification === 0) {
header("HTTP/1.0 304 Not Modified"); // XXX: PHP 5.4 // http_response_code(304); // Not Modified
header("Content-Type: text/plain; charset=utf-8");
die("Not Modified");
}
else {
header("HTTP/1.0 500 Internal Server Error"); // XXX: PHP: 5.4 // http_response_code(500); // Internal Server Error
header("Content-Type: text/plain; charset=utf-8");
die("Impossible de modifier l'observation associée à cet identifiant " . mysql_error());
}
}
 
private function verifierIdentifiantObs($chaine) {
$ok = preg_match('/^(?:[0-9]+,)*[0-9]+$/', $chaine);
if ($ok == false) {
$msg = "Indiquer un ou plusieurs identifiants d'obs séparés par des virgules.";
$this->envoyerMessageErreur(412, $msg);
}
return $ok;
}
 
private function verifierDonneesObligatoires($champsObligatoires) {
foreach ($champsObligatoires as $param) {
if (! isset($this->donnees[$param])) {
$msg = sprintf("Paramètre %s manquant (parmi %s)", $param, implode(', ', $champsObligatoires));
$this->envoyerMessageErreur(412, $msg);
}
}
}
 
private function NN2($id, $ref) {
if(!$db || !$id || !$ref) return FALSE;
switch($ref) {
case "bdtfx":
return $this->bdd->query(sprintf(, self::db, self::bdtfx, self::db, self::bdtfx, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC);
case "bdtxa":
return $this->bdd->query(sprintf("SELECT o.num_nom_retenu AS nom_ret_nn, o.num_tax AS nt, CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel". // subtilité: "num_tax"
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret".
" FROM %s.%s o".
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom".
" WHERE o.num_nom = %d -- %s:%d", self::db, self::bdtxa, self::db, self::bdtxa, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC);
case "isfan":
return $this->bdd->query(sprintf("SELECT o.num_nom_retenu AS nom_ret_nn, o.num_taxonomique AS nt, CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel".
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret".
" FROM %s.%s o".
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom".
" WHERE o.num_nom = %d -- %s:%d", self::db, self::isfan, self::db, self::isfan, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC);
case "bdtao":
return $this->bdd->query(sprintf("SELECT o.num_nom_retenu AS nom_ret_nn, o.num_taxonomique AS nt, CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel".
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret".
" FROM %s.%s o".
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom".
" WHERE o.num_nom = %d -- %s:%d", self::db, self::bdtao, self::db, self::bdtao, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC);
}
return FALSE;
}
 
const db = 'tb_eflore';
const bdtfx = 'bdtfx_v2_00';
const bdtxa = 'bdtxa_v1_01';
const isfan = 'isfan_v2013';
const bdtao = 'bdtao_v1_00';
 
private function getInfosBdtfx($id_nom) {
$idNomP = $this->bdd->proteger($id_nom);
$requete = "SELECT o.num_nom_retenu AS nom_ret_nn, o.num_taxonomique AS nt, o.famille, ".
" CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel, ".
" CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret ".
"FROM bdtfx_v2_00 AS o ".
" LEFT JOIN bdtfx_v2_00 AS ret ON (o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom) ".
"WHERE o.num_nom = $idNomP ".
' -- '.__FILE__.' : '.__LINE__;
$resultat = Cel::db()->executerRequete($requete, Cel::db::SQL_RETOUR_LIGNE);
return $resultat;
}
}
/trunk/jrest/services/CelSyndicationImage.php
210,7 → 210,8
$this->messages[] = "La requête suivante a retourné aucun résultat :\n$requete";
}
} catch (PDOException $e) {
$this->messages[] = sprintf(Cel::db()->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
$msgTpl = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s';
$this->messages[] = sprintf($msgTpl, $e->getFile(), $e->getLine(), $e->getMessage());
}
return $infos;
}
/trunk/jrest/services/ImageDateList.php
45,7 → 45,7
'FROM cel_images WHERE '.$condition_requete.' '.
'ORDER BY date_prise_de_vue';
$liste_dates = Cel::db()->executerRequete($requete_liste_dates);
$liste_dates = Cel::db()->requeter($requete_liste_dates);
$liste_dates = $this->formaterListeResultats($liste_dates);
/trunk/jrest/services/SelfRefList.php
18,8 → 18,7
* $_GET["recherche"] : cherche les noms qui commmencent selon la valeur
*
*/
function getElement($uid){
public function getElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
32,49 → 31,43
}
$referentiel_demande = $uid[1];
$idUtilisateur = Cel::db()->proteger($uid[0]);
$value=array();
$requete_referentiel = "SELECT DISTINCT ".$referentiel_demande." " .
"FROM cel_obs WHERE ce_utilisateur = '".$uid[0]."' ";
$requete = "SELECT DISTINCT $referentiel_demande " .
'FROM cel_obs '.
"WHERE ce_utilisateur = '$idUtilisateur' ";
if($this->filtreRechercheEstDemande()) {
$requete_referentiel .= " AND ".$referentiel_demande." LIKE '".$_GET["recherche"]."%'";
$requete .= " AND $referentiel_demande LIKE '".$_GET["recherche"]."%'";
}
 
if ($this->limiteEstDemandee()) {
$requete_referentiel .= " ORDER BY '.$referentiel_demande.' LIMIT ".$_GET["start"].",".$_GET["limit"];
$requete .= " ORDER BY $referentiel_demande LIMIT ".$_GET['start'].','.$_GET['limit'];
}
$resultat = Cel::db()->requeter($requete);
$referentiel_resultat = Cel::db()->executerRequete($requete_referentiel);
$referentiel = array();
foreach($referentiel_resultat as $cle => $valeur) {
foreach ($resultat as $cle => $valeur) {
if($this->estUneValeurValide($valeur[$referentiel_demande])) {
$referentiel[] = $valeur[$referentiel_demande];
}
 
}
$this->envoyerJson($referentiel);
return true;
}
function paramObligatoiresSontPresents($uid) {
return (isset($uid[1]) && in_array($uid[1],$this->referentiels) && (isset($uid[0]) && $uid[0] != ""));
private function paramObligatoiresSontPresents($uid) {
return (isset($uid[1]) && in_array($uid[1], $this->referentiels) && (isset($uid[0]) && $uid[0] != ''));
}
function filtreRechercheEstDemande() {
return (isset($_GET["recherche"]) && trim($_GET["recherche"]) != "");
private 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"]);
private 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) != "");
private function estUneValeurValide($chaine) {
return ($chaine != null && $chaine != '000null' && trim($chaine) != '');
}
}
?>
}
/trunk/jrest/services/InventoryDateList.php
41,7 → 41,7
'FROM cel_obs WHERE '.$condition_requete.' '.
'ORDER BY date_observation';
$liste_dates = Cel::db()->executerRequete($requete_liste_dates);
$liste_dates = Cel::db()->requeter($requete_liste_dates);
$liste_dates = $this->formaterListeResultats($liste_dates);
/trunk/jrest/services/NomsChampsEtendus.php
14,10 → 14,8
* $_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){
if (!$this->paramObligatoiresSontPresents($uid)) {
return;
}
39,13 → 37,12
$requete = "SELECT DISTINCT cle, label FROM cel_obs_etendues WHERE ".
"cle LIKE ".Cel::db()->proteger($recherche_cle)." OR ".
"label LIKE ".Cel::db()->proteger($recherche_cle)." ";
$referentiel_resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
 
$referentiel = array();
foreach($referentiel_resultat as $valeur) {
foreach($resultat as $valeur) {
$referentiel[$valeur['cle']] = $valeur['label'];
}
return $referentiel;
}
54,11 → 51,11
"cle = ".Cel::db()->proteger($cle)." AND ".
"valeur LIKE ".Cel::db()->proteger($recherche_valeur.'%')." ";
 
$referentiel_resultat = Cel::db()->executerRequete($requete);
$referentiel_resultat = Cel::db()->requeter($requete);
$referentiel = array();
foreach($referentiel_resultat as $valeur) {
if(trim($valeur['valeur']) != "") {
if (trim($valeur['valeur']) != '') {
$referentiel[] = $valeur['valeur'];
}
}
66,12 → 63,11
}
function paramObligatoiresSontPresents($uid) {
return (isset($uid[0]) && ($uid[0] == "cle" || $uid[0] == "valeur"));
return (isset($uid[0]) && ($uid[0] == 'cle' || $uid[0] == 'valeur'));
}
function filtreRechercheEstDemande() {
return (isset($_GET["recherche"]) && trim($_GET["recherche"]) != "");
return (isset($_GET["recherche"]) && trim($_GET["recherche"]) != '');
}
function limiteEstDemandee() {
79,7 → 75,6
}
function estUneValeurValide($chaine) {
return ($chaine != null && $chaine != "000null" && trim($chaine) != "");
return ($chaine != null && $chaine != "000null" && trim($chaine) != '');
}
}
?>
}
/trunk/jrest/services/CelStatistiqueTxt.php
57,7 → 57,7
$requete = $this->construireRequeteListeUtilisateurNbrePhoto();
if ($requete != null) {
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
if ($resultats != false) {
foreach ($resultats as $resultat) {
$liste[$resultat['courriel_utilisateur']] = $resultat['nbre'];
128,7 → 128,7
$requete = 'SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire '.
'FROM cel_mots_cles_images '.
"WHERE cmc_id_mot_cle_general = $tag_encode ";
$elements = Cel::db()->executerRequete($requete);
$elements = Cel::db()->requeter($requete);
if ($elements != false && count($elements) > 0) {
// Pré-construction du where de la requête
148,7 → 148,7
private function getListeTaxonsNbrePhotos() {
$requete = $this->construireRequeteListeTaxonNbrePhoto();
 
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
$liste = array();
if ($resultats != false) {
foreach ($resultats as $resultat) {
202,24 → 202,24
private function getNombres() {
 
$requete = $this->construireRequeteNbreObs();
$info['observations'] = (int) Cel::db()->executerRequete($requete, 'Column');
$info['observations'] = (int) Cel::db()->requeterValeurUnique($requete);
$requete = $this->construireRequeteNbreObsPubliques();
$info['observationsPubliques'] = (int) Cel::db()->executerRequete($requete, 'Column');
$info['observationsPubliques'] = (int) Cel::db()->requeterValeurUnique($requete);
$requete = $this->construireRequeteNbreImg();
$info['images'] =(int) Cel::db()->executerRequete($requete, 'Column');
$info['images'] =(int) Cel::db()->requeterValeurUnique($requete);
$requete = $this->construireRequeteNbreImgLiees();
$info['imagesLiees'] =(int) Cel::db()->executerRequete($requete, 'Column');
$info['imagesLiees'] =(int) Cel::db()->requeterValeurUnique($requete);
$requete = $this->construireRequeteNbreObsLiees();
$info['observationsLiees'] = (int) Cel::db()->executerRequete($requete, 'Column');
$info['observationsLiees'] = (int) Cel::db()->requeterValeurUnique($requete);
$info['moyImagesParObs'] = ($info['observationsLiees'] > 0 ? round($info['imagesLiees']/$info['observationsLiees'], 2) : '');
$requete = $this->construireRequeteNbreObsParCommune();
$info['communes'] = ($resultats = Cel::db()->executerRequete($requete)) ? count($resultats) : '' ;
$info['communes'] = ($resultats = Cel::db()->requeter($requete)) ? count($resultats) : '' ;
$info['observationsParCommunesMin'] = 1000;
$info['observationsParCommunesMax'] = 0;
$info['observationsParCommunesTotal'] = 0;
/trunk/jrest/services/CelStatistique.php
63,7 → 63,7
'GROUP BY periode '.
'ORDER BY periode ';
 
$resulats = Cel::db()->executerRequete($requete);
$resulats = Cel::db()->requeter($requete);
 
$img_totale = array();
foreach ($resulats as $info) {
134,7 → 134,7
'GROUP BY periode '.
'ORDER BY periode ';
 
$resulats = Cel::db()->executerRequete($requete);
$resulats = Cel::db()->requeter($requete);
 
$img_totale = array();
foreach ($resulats as $info) {
204,7 → 204,7
" AND courriel_utilisateur LIKE '%@%' ".
'GROUP BY courriel_utilisateur '.
'ORDER BY date_min ASC ';
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
 
// Trie des données et des dates pour les étiquettes des axes
$dates = array();
643,7 → 643,7
$requete = 'SELECT courriel_utilisateur, COUNT(id_observation) AS nbre '.
'FROM cel_obs '.
'GROUP BY courriel_utilisateur ';
$utilisateurs = Cel::db()->executerRequete($requete);
$utilisateurs = Cel::db()->requeter($requete);
 
// Création des classes d'utilisateurs
$classes = array('00->10' => 0, '11->50' => 0, '51->100' => 0, '101->500' => 0, '500->∞' => 0);
710,7 → 710,7
$requete = 'SELECT courriel_utilisateur, COUNT(id_observation) AS nbre '.
'FROM cel_obs '.
'GROUP BY courriel_utilisateur ';
$utilisateurs = Cel::db()->executerRequete($requete);
$utilisateurs = Cel::db()->requeter($requete);
 
// Création des classes d'utilisateurs
$classes = array('00->10' => 0, '11->50' => 0, '51->100' => 0, '101->500' => 0, '500->∞' => 0);
787,7 → 787,7
'WHERE date_creation != "0000-00-00 00:00:00" '.
' AND courriel_utilisateur '.($utilisateur ? "= $utilisateur " : 'LIKE "%@%" ').
'GROUP BY periode, courriel_utilisateur ';
$infos = Cel::db()->executerRequete($requete);
$infos = Cel::db()->requeter($requete);
// Traitement résulat requête
$observations = array();
861,7 → 861,7
" AND courriel_utilisateur LIKE '%@%' ".
'GROUP BY courriel_utilisateur '.
'ORDER BY date_min ASC ';
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
 
// Trie des données
$max_obs = 0;
938,7 → 938,7
((is_null($order_by)) ? '' : "ORDER BY $order_by ");
((is_null($limit)) ? '' : "LIMIT $limit ");
 
$evolution = Cel::db()->executerRequete($requete);
$evolution = Cel::db()->requeter($requete);
 
// Traitement du tableau
$donnees_traitees = array();
961,7 → 961,7
"FROM $table ".
((isset($where)) ? "WHERE $where " : '');
 
$nbre = Cel::db()->executerRequete($requete, 'Column');
$nbre = Cel::db()->requeterValeurUnique($requete);
return $nbre;
}
}
/trunk/jrest/services/InventoryByDept.php
50,7 → 50,7
" lieudit, station, milieu, commentaire, transmission FROM cel_obs ".
"WHERE ce_zone_geo != '000null' AND ce_zone_geo != '' AND transmission = 1 AND nt!=0 ORDER BY ce_zone_geo, nom_ret LIMIT 50";
 
$resultat_obs = Cel::db()->executerRequete($requete_obs);
$resultat_obs = Cel::db()->requeter($requete_obs);
// Creating a workbook
$workbook = new Spreadsheet_Excel_Writer();
/trunk/jrest/services/CelWidgetMapPoint.php
122,7 → 122,7
$this->construireWhereNombreDeJours().
' GROUP BY id_coord';
$resultats_emplacements = Cel::db()->executerRequete($requete);
$resultats_emplacements = Cel::db()->requeter($requete);
$emplacements = $this->traiterEmplacements($resultats_emplacements, $this->compterObservations($params));
return $emplacements;
}
158,7 → 158,7
$this->construireWhereTag().
$this->construireWhereNombreDeJours();
 
$resultats_nb_obs = Cel::db()->executerRequete($requete);
$resultats_nb_obs = Cel::db()->requeter($requete);
return $resultats_nb_obs[0]['nb'];
}
 
754,7 → 754,7
'ORDER BY utilisateur ASC, ordre ASC';
//$this->debug[] = $requete;
//die($requete);
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
 
$observations = null;
if ($resultats != false) {
1063,7 → 1063,7
'ORDER BY utilisateur ASC, ci.ordre ASC';
//$this->debug[] = $requete;
//die($requete);
$elements_tag = Cel::db()->executerRequete($requete);
$elements_tag = Cel::db()->requeter($requete);
$requete_tag = array();
if ($elements_tag != false && count($elements_tag) > 0) {
/trunk/jrest/services/CelSyndicationObservation.php
213,7 → 213,7
'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby : 'date_modification DESC').' '.
"LIMIT $this->start,$this->limit ";
 
$elements = Cel::db()->executerRequete($requete);
$elements = Cel::db()->requeter($requete);
 
// Création du contenu
$contenu = $this->executerService($elements);
282,7 → 282,7
'date_modification DESC, zone_geo ASC').' '.
"LIMIT $this->start,$this->limit ";
$elements = Cel::db()->executerRequete($requete);
$elements = Cel::db()->requeter($requete);
 
// Création du contenu
if ($elements != false && count($elements) > 0) {
/trunk/jrest/services/InventoryUserList.php
1,30 → 1,19
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
/**
* PHP Version 5
* 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
*
* @category PHP
* @package jrest
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @copyright © 2010-2014 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
 
/**
*
* 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
*
**/
class InventoryUserList extends Cel {
 
function getElement($uid){
$this->controleUtilisateur($uid[0]);
 
$requete_utilisateurs ='SELECT DISTINCT id_utilisateur, courriel FROM cel_utilisateurs '.
35,17 → 24,14
$this->construireRequeteConditionTableObs($uid).' '.
'LIMIT 0,50';
$utilisateurs = Cel::db()->executerRequete($requete_utilisateurs);
$utilisateurs = Cel::db()->requeter($requete_utilisateurs);
$liste_utilisateurs = array();
if (!$utilisateurs) {
} else {
if ($utilisateurs) {
foreach ($utilisateurs as $utilisateur) {
$liste_utilisateurs[] = $utilisateur;
}
}
usort($liste_utilisateurs,'trierUtilisateurs');
$this->envoyerJson($liste_utilisateurs);
53,47 → 39,33
}
private function construireRequeteConditionTableUtilisateurs($params) {
$condition = '';
if (isset($params[1]) && $params[1] != null && $params[1] != '*') {
$condition .= ' WHERE courriel LIKE '.Cel::db()->proteger($params[1].'%');
}
return $condition;
}
private function construireRequeteConditionTableObs($params) {
$condition = '';
if (isset($params[1]) && $params[1] != null && $params[1] != '*') {
$condition .= ' WHERE courriel_utilisateur LIKE '.Cel::db()->proteger($params[1].'%');
}
return $condition;
}
}
 
function trierUtilisateurs($val1, $val2) {
if (strstr($val1['courriel'],'@')) {
if (strstr($val2['courriel'],'@')) {
return strcmp($val1['courriel'],$val2['courriel']);
}
else
{
} else {
return -1 ;
}
}
else
{
} else {
if (strstr($val2['courriel'],'@')) {
return 1 ;
}
else
{
} else {
return strcmp($val1['courriel'],$val2['courriel']) ;
}
}
/trunk/jrest/services/CelImageDoublon.php
95,7 → 95,7
'FROM cel_images '.
"WHERE ce_utilisateur = '$utilisateur' ";
 
$images = Cel::db()->executerRequete($requete);
$images = Cel::db()->requeter($requete);
 
// Traitement
$doublons = array();
134,7 → 134,7
"WHERE cim.ce_utilisateur = '$utilisateur' ".
' AND cim.id_image IN ('.implode(',', $images_doublons_id).')';
 
$infos = Cel::db()->executerRequete($requete);
$infos = Cel::db()->requeter($requete);
foreach ($infos as $info) {
if (isset($doublons[$info['md5']][$info['id_image']]) && ! $this->etreNull($info['ordre_obs'])) {
/trunk/jrest/services/CelSuppressionObservation.php
17,7 → 17,6
* Supporte l'appel multiple en passant plusieurs numéros séparés par des virgules
*
* @param string uid[0] : id(s) observation(s) obligatoire(s) séparés par des virgules
*
*/
public function deleteElement($uid){
if ($this->controlerAccessibiliteWs()) {
/trunk/jrest/services/CoordSearch.php
162,7 → 162,7
$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.'%');
 
$commune_coordonnees = Cel::db()->executerRequete($requete_selection_commune);
$commune_coordonnees = Cel::db()->requeter($requete_selection_commune);
 
$retour = false;
 
/trunk/jrest/lib/GestionChampsEtendus.php
56,7 → 56,7
"WHERE {$this->champ_id} = $id ".
" AND cle = $cle ";
 
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
return ($resultat[0]['existe'] == '1');
}
 
69,7 → 69,7
public function consulter($id_element_lie) {
$id = Cel::db()->proteger($id_element_lie);
$requete = "SELECT * FROM {$this->table_champs_etendus} WHERE {$this->champ_id} = $id ";
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
return $resultat;
}
 
88,7 → 88,7
$ids = implode(',', $ids_element_lies);
 
$requete = "SELECT * FROM {$this->table_champs_etendus} WHERE {$this->champ_id} IN ($ids) ";
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
 
foreach ($resultats as &$ligne) {
$id_element = $ligne[$this->champ_id];
127,7 → 127,7
 
// la partie on duplicate key est spécifique mysql mais il sera facile de s'en passer le jour
// où l'on change de sgbd
$ajout = Cel::db()->executerRequeteSimple($requete);
$ajout = Cel::db()->executer($requete);
return ($ajout !== false);
}
 
153,7 → 153,7
 
// la partie on duplicate key est spécifique mysql mais il sera facile de s'en passer le jour
// où l'on change de sgbd
$ajout = Cel::db()->executerRequeteSimple(sprintf(
$ajout = Cel::db()->executer(sprintf(
"INSERT INTO %s (%s, cle, label, valeur) VALUES %s ON DUPLICATE KEY UPDATE valeur = VALUES(valeur) -- %s:%d",
$this->table_champs_etendus,
$this->champ_id,
179,7 → 179,7
"WHERE cle = $cle".
" AND {$this->champ_id} = $id ";
 
$modif = Cel::db()->executerRequeteSimple($requete);
$modif = Cel::db()->executer($requete);
return ($modif !== false);
}
 
194,7 → 194,7
$id = Cel::db()->proteger($id_element_lie);
$cle = Cel::db()->proteger($cle);
$requete = "DELETE FROM {$this->table_champs_etendus} WHERE cle = $cle AND {$this->champ_id} = $id ";
$suppr = Cel::db()->executerRequeteSimple($requete);
$suppr = Cel::db()->executer($requete);
return ($suppr !== false);
}
 
207,7 → 207,7
public function vider($id_element_lie) {
$id = Cel::db()->proteger($id_element_lie);
$requete = "DELETE FROM {$this->table_champs_etendus} WHERE {$this->champ_id} = $id ";
$suppr = Cel::db()->executerRequeteSimple($requete);
$suppr = Cel::db()->executer($requete);
return ($suppr !== false);
}
 
220,7 → 220,7
public function viderParLots($ids_elements_lies) {
$ids = $this->protegerTableau($ids_elements_lies);
$requete = "DELETE FROM {$this->table_champs_etendus} WHERE {$this->champ_id} IN (".implode(',',$ids).") ";
$suppr = Cel::db()->executerRequeteSimple($requete);
$suppr = Cel::db()->executer($requete);
return ($suppr !== false);
}
235,7 → 235,7
if(!empty($ids_elements_lies)) {
$ids = $this->protegerTableau($ids_elements_lies);
$requete = "SELECT cle FROM {$this->table_champs_etendus} WHERE {$this->champ_id} IN (".implode(',',$ids).") ";
$cles = Cel::db()->executerRequete($requete);
$cles = Cel::db()->requeter($requete);
$i = 0;
foreach($cles as &$cle) {
$cles_fmt[$cle['cle']] = $i++;
/trunk/jrest/lib/RechercheInfosTaxon.php
59,13 → 59,12
" AND esn_id_nom= en_id_nom ".
" ORDER BY esn_ce_statut, en_ce_rang, en_epithete_espece, en_nom_genre LIMIT 50";
}
}
else {
} else {
if ($genre != null) {
$genre=preg_replace('/\*+/','%',$genre);
//TODO: comprendre pourquoi à l'origine il y avait : (strlen($genre) >= 1) /*&& ($genre != '%')
// voir avec david
if ((strlen($genre) >= 1)) {
if (strlen($genre) >= 1) {
$requete_recherche = "SELECT DISTINCT en_nom_genre, en_id_nom, 0 as esn_ce_statut FROM eflore_nom WHERE en_id_version_projet_nom = '25'" .
"AND en_ce_rang = 160 " .
"AND en_nom_genre LIKE ".Cel::db()->proteger($genre.'%')." ORDER BY esn_ce_statut, en_nom_genre LIMIT 50";
74,7 → 73,7
}
if ($requete_recherche != '') {
$resultat_recherche = Cel::db()->executerRequete($requete_recherche);
$resultat_recherche = Cel::db()->requeter($requete_recherche);
if (is_array($resultat_recherche)) {
foreach ($resultat_recherche as $ligne) {
90,7 → 89,6
}
 
function rechercherInformationsComplementairesSurNumNom($numNom) {
 
$resultat_infos_complementaires = $this->effectuerRequeteInfosComplementairesSurNumNom($numNom);
 
// Nom retenu, Num Nomen nom retenu, Num Taxon, Famille
98,37 → 96,31
if (is_array($resultat_infos_complementaires)) {
foreach ($resultat_infos_complementaires as $row) {
$fam=$this->rechercherFamille($row['esn_id_taxon']);
while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) {
while ($fam['en_ce_rang'] != 'fin' && $fam['en_ce_rang'] != 120) {
$fam=$this->rechercherFamille($fam['etr_id_taxon_2']);
}
if ($fam['en_ce_rang']==120) {
$famille=$fam['en_nom_supra_generique'];
}
else {
} else {
$famille="Famille inconnue";
}
$value=array('Nom_Retenu'=>$this->formaterNom($row),'Num_Nom_Retenu'=>$row['esn_id_nom'],'Num_Taxon'=>$row['esn_id_taxon'],'Famille'=>$famille);
}
}
 
return $value;
 
}
public function effectuerRequeteInfosComplementairesEtFormaterNom($numNom) {
$resultat = $this->effectuerRequeteInfosComplementairesSurNumNom($numNom);
$resultat_infos_complementaires = $this->effectuerRequeteInfosComplementairesSurNumNom($numNom);
$retour_infos_complementaires = array();
foreach ($resultat_infos_complementaires as $info) {
$retour_infos_complementaires=array(($this->formaterNom($info)));
$infos = array();
foreach ($resultat as $info) {
$infos = array($this->formaterNom($info));
}
return $retour_infos_complementaires;
return $infos;
}
public function effectuerRequeteInfosComplementairesSurNumNom($numNom) {
$requete_infos_complementaires = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
" auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
" , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
136,11 → 128,11
" , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
" , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, b.esn_id_taxon, b.esn_id_nom" .
" FROM eflore_nom, eflore_nom_rang," .
" eflore_naturaliste_intitule_abreviation AS auteur_bex ".
" , eflore_naturaliste_intitule_abreviation AS auteur_b ".
" , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
" , eflore_naturaliste_intitule_abreviation AS auteur_m ".
" ,eflore_selection_nom a, eflore_selection_nom b".
" eflore_naturaliste_intitule_abreviation AS auteur_bex, ".
" eflore_naturaliste_intitule_abreviation AS auteur_b, ".
" eflore_naturaliste_intitule_abreviation AS auteur_mex, ".
" eflore_naturaliste_intitule_abreviation AS auteur_m, ".
" eflore_selection_nom a, eflore_selection_nom b ".
" WHERE a.esn_id_nom= ".Cel::db()->proteger($numNom).
" AND a.esn_id_version_projet_taxon = 25 ".
" AND a.esn_id_taxon=b.esn_id_taxon ".
155,7 → 147,7
" AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
 
$resultat_infos_complementaires = Cel::db()->executerRequete($requete_infos_complementaires);
$resultat_infos_complementaires = Cel::db()->requeter($requete_infos_complementaires);
return $resultat_infos_complementaires;
}
184,7 → 176,7
" AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
" AND esn_id_version_projet_taxon=en_id_version_projet_nom ";
$resultat_infos_complementaires = Cel::db()->executerRequete($requete_infos_complementaires);
$resultat_infos_complementaires = Cel::db()->requeter($requete_infos_complementaires);
return $resultat_infos_complementaires;
}
194,7 → 186,6
$value = array();
if ($nom_saisi != null && $nom_saisi != "") {
$requete_infos_comp_sur_nom = 'SELECT * FROM eflore_nom_intitule '.
'WHERE eni_id_categorie_format = 3 AND '.
'eni_id_version_projet_nom = 25 AND '.
202,7 → 193,7
'eni_intitule_nom LIKE "'.$nom_saisi.'%" '.
'ORDER BY LENGTH(eni_intitule_nom)';
$resultat_infos_comp_sur_nom = Cel::db()->executerRequete($requete_infos_comp_sur_nom);
$resultat_infos_comp_sur_nom = Cel::db()->requeter($requete_infos_comp_sur_nom);
if (is_array($resultat_infos_comp_sur_nom)) {
foreach ($resultat_infos_comp_sur_nom as $ligne) {
215,7 → 206,6
}
 
public function rechercherFamille($taxon) {
$row = array();
$requete_famille = "SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique ".
232,7 → 222,7
" AND en_id_nom = esn_id_nom ".
" AND esn_id_version_projet_taxon=en_id_version_projet_nom ";
$resultat_recherche_famille = Cel::db()->executerRequete($requete_famille);
$resultat_recherche_famille = Cel::db()->requeter($requete_famille);
if (!is_array($resultat_recherche_famille) || count($resultat_recherche_famille) == 0) {
$resultat_recherche_famille = array('en_ce_rang' => 'fin');
244,7 → 234,6
}
public function rechercherNumTaxSurNumNom($num_nom) {
$requete_num_tax = "SELECT DISTINCT b.esn_id_taxon FROM eflore_nom, eflore_nom_rang," .
" eflore_selection_nom a, eflore_selection_nom b".
" WHERE a.esn_id_nom= ".Cel::db()->proteger($num_nom).
256,7 → 245,7
" AND en_id_nom = b.esn_id_nom" .
" AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
$res_num_nom = Cel::db()->executerRequete($requete_num_tax);
$res_num_nom = Cel::db()->requeter($requete_num_tax);
$nt = null;
if (is_array($res_num_nom) && count($res_num_nom) > 0) {
275,7 → 264,7
"AND ezg_id_projet_zg = ecd_ce_version_projet_zg ".
"AND ecd_ce_version_projet_taxon=25";
$resultat_presence_taxon = Cel::db()->executerRequete($requete_presence_taxon);
$resultat_presence_taxon = Cel::db()->requeter($requete_presence_taxon);
$presence_taxon = (is_array($resultat_presence_taxon) && count($resultat_presence_taxon) > 0);
311,7 → 300,7
}
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
$retour = array();
if (is_array($resultat) && count($resultat) > 0) {
322,7 → 311,6
}
private function formaterNom($rawnom) {
 
// Constitution du nom:
$nom = '';
 
419,5 → 407,4
return $retour;
}
}
?>
}
/trunk/jrest/lib/Cel.php
1,18 → 1,15
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
/**
* Classe mère abstraite contenant les méthodes génériques des services.
* Encodage en entrée : utf8
* Encodage en sortie : utf8
*
* @author Jean-Pascal MILCENT <jpm@clapas.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @author Raphaël Droz <raphael@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 © 2012, 2013 Tela Botanica
* @copyright © 2006-2014 Tela Botanica
*/
require_once('Bdd2.php');
 
46,7 → 43,6
static $fallback_referentiel = 'autre';
 
public function __construct($config) {
 
@session_start();
// Tableau contenant la config de Jrest
$this->config = $config;
73,15 → 69,20
}
 
public static function db() {
if(! self::$bdd) die('ERR: no DB available');
if (! self::$bdd) {
die('ERREUR: aucune base de données de disponible.');
}
return self::$bdd;
}
 
// TODO: delete wrappers, en attendant que $this->bdd soit remplacé par Cel::db() partout.
public function __get($prop) {
if($prop == 'bdd') return self::$bdd;
return $this->$prop;
$retour = $this->$prop;
if ($prop == 'bdd') {
$retour = self::$bdd;
}
return $retour;
}
 
protected function protegerTableau(Array $tableau) {
foreach ($tableau as $id => $val) {
157,6 → 158,12
//+----------------------------------------------------------------------------------------------------------------+
// GESTION de l'ENVOI au NAVIGATEUR
 
protected function envoyerMessageErreur($code, $msg) {
http_response_code($code);
header("Content-Type: text/plain; charset=utf-8");
die($msg);
}
 
protected function envoyerJson($donnees, $encodage = 'utf-8') {
$encodage_json = true;
$this->envoyer($donnees, 'application/json', $encodage, $encodage_json);
175,7 → 182,7
protected function envoyer($donnees = null, $mime = 'text/html', $encodage = 'utf-8', $json = false) {
// Traitements des messages d'erreurs et données
if (count($this->messages) != 0) {
header('HTTP/1.1 500 Internal Server Error');
http_response_code(500);// Internal Server Error
$mime = 'application/json';
$json = true;
$sortie = $this->messages;
219,7 → 226,7
}
 
static function envoyerAuth($message_accueil, $message_echec) {
header('HTTP/1.0 401 Unauthorized');
http_response_code(401);// Unauthorized
header('WWW-Authenticate: Basic realm="'.mb_convert_encoding($message_accueil, 'ISO-8859-1', 'UTF-8').'"');
header('Content-type: text/plain; charset=UTF-8');
print $message_echec;
281,10 → 288,13
}
 
public function controleAppelIpAutorisee() {
$ips_autorisees = explode(',', @$this->config['jrest_admin']['ip_autorisees']);
if(!in_array($_SERVER['REMOTE_ADDR'], $ips_autorisees) && $_SERVER['REMOTE_ADDR'] != $_SERVER['SERVER_ADDR']) {
header('HTTP/1.0 401 Unauthorized');
exit('Accès interdit');
$ipsAutorisees = explode(',', $this->config['jrest_admin']['ip_autorisees']);
$remoteIp = filter_input(INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP);
$serverIp = filter_input(INPUT_SERVER, 'SERVER_ADDR', FILTER_VALIDATE_IP);
if (!in_array($remoteIp, $ipsAutorisees) || $remoteIp != $serverIp) {
$msg = "Accès interdit. \n".
"Vous n'êtes pas autorisé à accéder à ce service depuis '$remoteIp' !\n";
$this->envoyerMessageErreur(401, $msg);
}
return true;
}
293,11 → 303,9
if(!class_exists('Log')) {
Log::getInstance();
}
 
Log::setCheminLog($this->config['log']['cheminlog']);
Log::setTimeZone($this->config['log']['timezone']);
Log::setTailleMax($this->config['log']['taillemax']);
 
Log::ajouterEntree($index,$chaine);
}
 
343,48 → 351,59
}
 
public function getInfosComplementairesUtilisateur($id_utilisateur) {
$defaut_infos = array('prenom' => '', 'nom' => '', 'courriel' => '');
if(! is_numeric($id_utilisateur)) return $defaut_infos;
$infos = array('prenom' => '', 'nom' => '', 'courriel' => '');
if (is_numeric($id_utilisateur)) {
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
$requete = 'SELECT prenom, nom, courriel '.
'FROM cel_utilisateurs '.
"WHERE id_utilisateur = $idUtilisateurP ".
' -- ' . __FILE__ . ':' . __LINE__;
$resultat = Cel::db()->requeter($requete);
 
$resultat_infos_utilisateur = Cel::db()->requeter(
'SELECT prenom, nom, courriel FROM cel_utilisateurs'
. ' WHERE id_utilisateur = '.Cel::db()->proteger($id_utilisateur));
 
if($resultat_infos_utilisateur && count($resultat_infos_utilisateur)) return $resultat_infos_utilisateur[0];
return $defaut_infos; // autrement, info par défaut
if ($resultat && count($resultat)) {
$infos = $resultat[0];
}
}
return $infos;
}
 
public function getInfosComplementairesUtilisateurPourMail($mail_utilisateur) {
$infos = array('prenom' => '', 'nom' => '', 'courriel' => $mail_utilisateur);
 
$infos_utilisateur = array('prenom' => '', 'nom' => '', 'courriel' => $mail_utilisateur);
$mailUtilisateurP = Cel::db()->proteger($mail_utilisateur);
$requete = 'SELECT id_utilisateur as id, prenom, nom '.
'FROM cel_utilisateurs '.
"WHERE courriel = $mailUtilisateurP ".
' -- ' . __FILE__ . ':' . __LINE__;
 
$requete_infos_utilisateur = 'SELECT id_utilisateur as id, prenom, nom FROM cel_utilisateurs '.
'WHERE courriel = '.Cel::db()->proteger($mail_utilisateur);
$resultat = Cel::db()->requeter($requete);
 
$resultat_infos_utilisateur = Cel::db()->requeter($requete_infos_utilisateur);
if ($resultat && is_array($resultat) && count($resultat) > 0) {
$infos = $resultat;
}
 
if($resultat_infos_utilisateur && is_array($resultat_infos_utilisateur) && count($resultat_infos_utilisateur) > 0) {
$infos_utilisateur = $resultat_infos_utilisateur;
return $infos;
}
 
return $infos_utilisateur;
protected function controlerAccessibiliteWs() {
if (self::ARRET_SERVICE) {
$msg = "Les services du CEL sont temporairement désactivées.";
$this->envoyerMessageErreur(503, $msg);
}
return true;
}
 
//+----------------------------------------------------------------------------------------------------------------+
// GESTION DE MÉTHODES COMMUNES ENTRE LES SERVICES
 
protected function denullifierTableauValeurCel(&$tableau) {
 
// Denullifiage
foreach($tableau as $k=>$v) {
if (($v=="null") || ($v=="000null")) {
$row[$k]="";
}
else {
if (($v == 'null') || ($v == '000null')) {
$row[$k] = '';
} else {
$row[$k]=utf8_decode($v);
}
}
 
return $tableau;
}
 
403,7 → 422,8
*/
protected function creerAuteurs(Array $courriels) {
$auteurs = array();
if ($identites = $this->recupererUtilisateursIdentite($courriels)) {
$identites = $this->recupererUtilisateursIdentite($courriels);
if ($identites) {
foreach ($identites as $courriel => $infos) {
$auteurs[$courriel] = $infos['intitule'];
}
499,12 → 519,10
}
 
protected function convertirCodeZoneGeoVersDepartement($code_zone_geo) {
 
$code_departement = '';
if($this->estUnCodeInseeDepartement($code_zone_geo)) {
$code_departement = substr(ltrim($code_zone_geo,'INSEE-C:'),0,2);
}
 
return $code_departement;
}
 
513,24 → 531,28
}
 
protected function convertirCodeZoneGeoVersCodeInsee($code_zone_geo) {
 
$code_departement = '';
if($this->estUnCodeInseeDepartement($code_zone_geo)) {
$code_departement = ltrim($code_zone_geo,'INSEE-C:');
}
 
return $code_departement;
}
 
static function obtenirCodeInseeCommunePourNomEtDepartement($nom_commune, $code_insee) {
$resultat = Cel::db()->requeter(sprintf(
'SELECT id_zone_geo FROM cel_zones_geo WHERE nom LIKE %s AND id_zone_geo LIKE %s',
Cel::db()->proteger($nom_commune),
Cel::db()->proteger("INSEE-C:" . $code_insee . '%')));
$nomCommuneP = Cel::db()->proteger($nom_commune);
$codeInseeP = Cel::db()->proteger("INSEE-C:$code_insee%");
$requete = 'SELECT id_zone_geo '.
'FROM cel_zones_geo '.
"WHERE nom LIKE $nomCommuneP AND id_zone_geo LIKE $codeInseeP ".
' -- ' . __FILE__ . ':' . __LINE__;
$resultat = Cel::db()->requeter($requete);
 
if($resultat && count($resultat)) return $resultat[0]['id_zone_geo'];
return $code_insee; // autrement retourne l'original
$infos = $code_insee; // Par défaut retourne l'original
if ($resultat && count($resultat)) {
$infos = $resultat[0]['id_zone_geo'];
}
return $infos;
}
 
protected function encoderMotCle($mot_cle) {
return md5(mb_strtolower(trim($mot_cle)));
556,9 → 578,10
$requete = 'SELECT cmc_mot_cle as mot_cle '.
"FROM $table ".
"WHERE cmc_id_mot_cle_utilisateur IN ($mots_cles) ".
"AND cmc_id_proprietaire = $utilisateur_id ";
"AND cmc_id_proprietaire = $utilisateur_id ".
' -- ' . __FILE__ . ':' . __LINE__;
 
$elements = Cel::db()->executerRequete($requete);
$elements = Cel::db()->requeter($requete);
if (is_array($elements)) {
foreach ($elements as $mot) {
$mots[] = $mot['mot_cle'];
/trunk/jrest/lib/RechercheObservation.php
43,7 → 43,7
$requete_selection_id .= ' AND ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).
' ORDER BY id_observation';
 
$resultat_ids = Cel::db()->executerRequete($requete_selection_id);
$resultat_ids = Cel::db()->requeter($requete_selection_id);
 
$ids = array();
if (is_array($resultat_ids)) {
86,7 → 86,7
 
public function get() {
if(!$this->requete_selection_observations) return FALSE;
return Cel::db()->executerRequete($this->requete_selection_observations);
return Cel::db()->requeter($this->requete_selection_observations);
}
 
public function compterObservations($id_utilisateur = null, $criteres = array()) {
104,7 → 104,7
$requete_selection_observations = rtrim($requete_selection_observations, 'AND ');
 
$nb_obs = '0';
$resultat_requete_nombre_observations = Cel::db()->executerRequete($requete_selection_observations);
$resultat_requete_nombre_observations = Cel::db()->requeter($requete_selection_observations);
 
if($resultat_requete_nombre_observations && is_array($resultat_requete_nombre_observations) && count($resultat_requete_nombre_observations) > 0) {
$nb_obs = $resultat_requete_nombre_observations[0]['nb_obs'];
150,7 → 150,7
$id_obs = Cel::db()->proteger($id_obs);
$requete = "SELECT courriel_utilisateur FROM cel_obs WHERE id_observation = $id_obs";
 
$utilisateur_courriel = Cel::db()->executerRequete($requete . ' -- ' . __FILE__ . ':' . __LINE__);
$utilisateur_courriel = Cel::db()->requeter($requete . ' -- ' . __FILE__ . ':' . __LINE__);
 
$retour = false;
if (!empty($utilisateur_courriel) && isset($utilisateur_courriel[0]['courriel_utilisateur'])) {
163,7 → 163,7
$requete_selection_mots_cles = 'SELECT DISTINCT id_mot_cle '.
'FROM cel_mots_cles_obs_liaison '.
"WHERE id_element_lie = $id_observation ";
return Cel::db()->executerRequete($requete_selection_mots_cles);
return Cel::db()->requeter($requete_selection_mots_cles);
}
 
// TODO: fonction temporaire
/trunk/jrest/lib/GestionImage.php
68,7 → 68,7
// important ! ne pas utiliser la fonction executerRequete qui renvoie une erreur si la requete contient des | (pipes)
// ce qui est fréquent dans les métadonnées
// TODO: corriger la fonction ou bien continuer à utiliser executerRequeteSimple
$resultat_insertion_infos_image = Cel::db()->executerRequeteSimple($requete_insertion_infos_image);
$resultat_insertion_infos_image = Cel::db()->executer($requete_insertion_infos_image);
 
if (!$resultat_insertion_infos_image) {
$message = "Echec de l'insertion dans la base de donnees : " ;
99,7 → 99,7
'FROM cel_images '.
"WHERE ce_utilisateur = $idUtilisateurP ".
' -- '.__FILE__.' : '.__LINE__;
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
 
$nouvel_ordre = 0;
if ($resultat !== false) {
118,7 → 118,7
"WHERE ce_utilisateur = $idUtilisateurP ".
" AND ordre = $ordreP ".
' -- '.__FILE__.' : '.__LINE__;
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
 
if (count($resultat) > 0) {
$id_image = $resultat[0]['id_image'];
165,7 → 165,7
$requete_mise_a_jour_image .= ' WHERE id_image = '.Cel::db()->proteger($id_image).
' AND ce_utilisateur = '.Cel::db()->proteger($utilisateur).
' -- '.__FILE__.' : '.__LINE__;
$resultat_mise_a_jour = Cel::db()->executerRequeteSimple($requete_mise_a_jour_image);
$resultat_mise_a_jour = Cel::db()->executer($requete_mise_a_jour_image);
return ($resultat_mise_a_jour !== false);
}
 
195,7 → 195,7
 
public function supprimerImageParOrdre($id_utilisateur, $ordre_images) {
if (is_array($ordre_images)) {
$ordre_images = Cel::db()->protegerTableau($ordre_images);
$ordre_images = Cel::db()->proteger($ordre_images);
$idsImagesP = implode(',', $ordre_images);
} else {
$idsImagesP = Cel::db()->proteger($ordre_images);
208,7 → 208,7
"AND ordre IN ($idsImagesP) ".
' -- '.__FILE__.' : '.__LINE__;
 
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
 
$idsImages = array();
foreach ($resultats as $id_image) {
222,7 → 222,7
$ids_images_non_protegees = array();
if (is_array($id_image_ou_tableau)) {
$ids_images_non_protegees = $id_image_ou_tableau;
$id_image_ou_tableau = Cel::db()->protegerTableau($id_image_ou_tableau);
$id_image_ou_tableau = Cel::db()->proteger($id_image_ou_tableau);
$chaine_ids_images = implode(',', $id_image_ou_tableau);
} else {
$ids_images_non_protegees[] = $id_image_ou_tableau;
232,7 → 232,7
$requete = 'DELETE FROM cel_images '.
"WHERE id_image in ($chaine_ids_images) ".
' -- '.__FILE__.' : '.__LINE__;
$resultat_suppression_image = Cel::db()->executerRequeteSimple($requete);
$resultat_suppression_image = Cel::db()->executer($requete);
if ($resultat_suppression_image === false) {
$message = "Erreur lors de la suppression de l'image" ;
$this->logger($message);
241,7 → 241,7
$requete = 'DELETE FROM cel_obs_images '.
"WHERE id_image in ($chaine_ids_images) ".
' -- '.__FILE__.' : '.__LINE__;
$resultat_suppression_lien_images_obs = Cel::db()->executerRequeteSimple($requete);
$resultat_suppression_lien_images_obs = Cel::db()->executer($requete);
if ($resultat_suppression_lien_images_obs === false) {
$message = "Erreur lors de la suppression des observations associées à l'image" ;
$this->logger($message);
279,7 → 279,7
'WHERE ce_utilisateur = '.Cel::db()->proteger($mail_utilisateur).' '.
' -- '.__FILE__.' : '.__LINE__;
 
$migration_releve = Cel::db()->executerRequeteSimple($requete);
$migration_releve = Cel::db()->executer($requete);
return $migration_releve;
}
}
/trunk/jrest/lib/RechercheImage.php
61,7 → 61,7
$requete_recherche_images .= ' ORDER BY '.$ordre.' '.$direction.' LIMIT '.$debut.','.$limite ;
 
$resultats_images = array();
$resultats_images = Cel::db()->executerRequete($requete_recherche_images);
$resultats_images = Cel::db()->requeter($requete_recherche_images);
return $resultats_images;
}
89,7 → 89,7
$requete_recherche_images .= $sous_requete_recherche;
$nb_images = 0;
 
$resultat_requete_nombre_images = Cel::db()->executerRequete($requete_recherche_images);
$resultat_requete_nombre_images = Cel::db()->requeter($requete_recherche_images);
if($resultat_requete_nombre_images && is_array($resultat_requete_nombre_images) && count($resultat_requete_nombre_images) > 0) {
$nb_images = $resultat_requete_nombre_images[0]['nb_images'];
119,7 → 119,7
$requete_table_liaison = 'SELECT id_observation FROM cel_obs_images WHERE id_image = '.$id_image;
$resultats_liaisons_images = Cel::db()->executerRequete($requete_table_liaison);
$resultats_liaisons_images = Cel::db()->requeter($requete_table_liaison);
 
$ids_obs = '';
131,7 → 131,7
 
if(trim($ids_obs) != '') {
$requete_obs_liees = 'SELECT * FROM cel_obs WHERE id_observation IN ('.$ids_obs.') AND ce_utilisateur ="'.$id_utilisateur.'"';
$resultat_obs_liees = Cel::db()->executerRequete($requete_obs_liees);
$resultat_obs_liees = Cel::db()->requeter($requete_obs_liees);
 
foreach($resultat_obs_liees as $obs_liee)
{
330,7 → 330,7
$requete = 'SELECT courriel_utilisateur FROM cel_images WHERE '.
'id_image = '.Cel::db()->proteger($id_image);
$utilisateur_courriel = Cel::db()->executerRequete($requete);
$utilisateur_courriel = Cel::db()->requeter($requete);
$retour = false;
if(!empty($utilisateur_courriel) && isset($utilisateur_courriel[0]['courriel_utilisateur'])) {
345,7 → 345,7
'FROM cel_mots_cles_images_liaison '.
'WHERE id_element_lie = '.$id_image;
return Cel::db()->executerRequete($requete_selection_mots_cles);
return Cel::db()->requeter($requete_selection_mots_cles);
}
// TODO: fonction temporaire
/trunk/jrest/lib/FormateurGroupeColonne.php
644,7 → 644,7
static function referenceTableExiste() {
if(!self::$is_table) {
// une seule fois
if(! Cel::db()->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) return FALSE;
if (! Cel::db()->requeterLigne("SHOW TABLES LIKE 'cel_references'")) return FALSE;
self::$is_table = TRUE;
}
return TRUE;
666,11 → 666,10
}
 
// pas de cache:
$nom = Cel::db()->executerRequete(sprintf("SELECT nom_commun FROM cel_references " .
$nom = Cel::db()->requeterLigne(sprintf("SELECT nom_commun FROM cel_references " .
"WHERE referentiel = '%s' AND num_taxon = %d LIMIT 1",
$referentiel,
$obs['nt']),
Cel::SQL_RETOUR_LIGNE);
$obs['nt']));
 
if(! $nom) return NULL;
$nom = $nom["nom_commun"];
729,12 → 728,11
}
 
// pas de cache:
$data = Cel::db()->executerRequete(sprintf("SELECT %s FROM cel_references " .
$data = Cel::db()->requeterLigne(sprintf("SELECT %s FROM cel_references " .
"WHERE referentiel = '%s' AND num_nom_retenu = %d LIMIT 1",
implode(', ', array_keys(self::$baseflor_col)),
$referentiel,
$obs['nom_ret_nn']),
Cel::SQL_RETOUR_LIGNE);
$obs['nom_ret_nn']));
 
if(! $data) {
$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL));
/trunk/jrest/lib/GestionMotsClesChemin.php
54,7 → 54,7
"AND id_utilisateur = ".$idUtilisateurP." ".
' -- '.__FILE__.':'.__LINE__;
 
$ids_enfants = Cel::db()->executerRequete($requete);
$ids_enfants = Cel::db()->requeter($requete);
 
return $ids_enfants;
}
70,7 → 70,7
"AND id_utilisateur = $idUtilisateurP ".
' -- '.__FILE__.':'.__LINE__;
 
$infosMotCle = Cel::db()->executerRequete($requete);
$infosMotCle = Cel::db()->requeter($requete);
 
if (!empty($infosMotCle)) {
$idMotCle = $infosMotCle[0]['id_mot_cle'];
197,7 → 197,7
}
 
public function supprimerToutesLiaisonsPourIdsElementsLies($ids_elements_lies) {
$idsElementsLiesP = Cel::db()->protegerTableau($ids_elements_lies);
$idsElementsLiesP = Cel::db()->proteger($ids_elements_lies);
$listeIds = implode(',', $idsElementsLiesP);
$requete = "DELETE FROM {$this->table_liaison} ".
212,7 → 212,7
public function supprimerToutesLiaisonsIdsMotsCles($ids_mots_cles, $id_utilisateur) {
$suppression = true;
if (!empty($ids_mots_cles)) {
$idsMotsClesP = Cel::db()->protegerTableau($ids_mots_cles);
$idsMotsClesP = Cel::db()->proteger($ids_mots_cles);
$listeIds = implode(',', $idsMotsClesP);
$requete = "DELETE FROM {$this->table_liaison} ".
219,7 → 219,7
"WHERE id_mot_cle IN ($listeIds) ".
' -- '.__FILE__.':'.__LINE__;
 
$suppression = Cel::db()->executerRequeteSimple($requete);
$suppression = Cel::db()->executer($requete);
$suppression = ($suppression !== false) ? true : false;
}
return $suppression;
242,7 → 242,7
"AND id_mot_cle IN ($sousRequete) ".
' -- '.__FILE__.':'.__LINE__;
 
$suppression_liaison = Cel::db()->executerRequeteSimple($requete);
$suppression_liaison = Cel::db()->executer($requete);
$suppression_liaison = ($suppression_liaison !== false);
 
return $suppression_liaison;
405,7 → 405,7
}
 
public function obtenirIdsMotClesPourMotsCles($mots_cles, $id_utilisateur) {
$motsClesP = Cel::db()->protegerTableau($mots_cles);
$motsClesP = Cel::db()->proteger($mots_cles);
$listeMotsClesP = implode(',', $motsClesP);
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
 
443,7 → 443,7
public function obtenirIdElementsLiesPourIds($ids_mots_cles) {
$idsElementsLies = array();
if (!empty($ids_mots_cles)) {
$idsMotsClesP = Cel::db()->protegerTableau($ids_mots_cles);
$idsMotsClesP = Cel::db()->proteger($ids_mots_cles);
$listeIdsMotsCles = implode(',', $idsMotsClesP);
$requete = 'SELECT id_element_lie '.
452,7 → 452,7
' -- '.__FILE__.':'.__LINE__;
 
$idsElementsLies = Cel::db()->executerRequete($requete);
$idsElementsLies = Cel::db()->requeter($requete);
}
return $idsElementsLies;
}
608,7 → 608,7
"SET id_utilisateur = $idUtilisateurP ".
"WHERE id_utilisateur = $emailUtilisateurP ";
 
$migration = Cel::db()->executerRequeteSimple($requete_migration_mc);
$migration = Cel::db()->executer($requete_migration_mc);
$migration = ($migration !== false) ? true : false;
return $migration;
}
/trunk/jrest/lib/Bdd2.php
39,73 → 39,25
* @param unknown_type $requete
*/
public function requeter($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) {
$requete = $this->protegerRequete($requete);
return $this->executerRequete($requete, $retour, $mode);
}
 
/**
* Protège automatiquement toutes les chaines comprises entre deux caractères '|'.
* @see protegerRequete()
* @param unknown_type $requete
* Execute la requete retournant une seule ligne de résultat.
* @param String $requete
*/
public function executer($requete) {
$requete = $this->protegerRequete($requete);
return $this->executerRequeteSimple($requete);
public function requeterLigne($requete, $mode = PDO::FETCH_ASSOC) {
return $this->executerRequete($requete, self::SQL_RETOUR_LIGNE, $mode);
}
 
/**
* Méthode permettant de rechercher dans une requete SQL sous forme de chaine (String) les chaines
* à protéger. Cela évite de protéger chaque variable avant de l'insérer dans une requete SQL.
* Par contre, il est important que les chaine à protéger ne contiennent pas le caractère '|'.
*
* @param $requete
* Execute la requete retournant une seule colone de résultat.
* @param String $requete
*/
public function protegerRequete($requete) {
if (substr_count($requete, '|') % 2 === 0) {
if (preg_match_all('/\|([^|]*)\|/', $requete, $correspondances, PREG_SET_ORDER)) {
foreach ($correspondances as $chaine) {
$chaine_protegee = $this->quote($chaine[1]);
$requete = str_replace($chaine[0], $chaine_protegee, $requete);
public function requeterValeurUnique($requete, $mode = PDO::FETCH_ASSOC) {
return $this->executerRequete($requete, self::SQL_RETOUR_COLONNE, $mode);
}
}
} else {
$this->messages[] = "La requête a protéger contient un nombre impair de caractère de protection '|'.";
$requete = false;
}
return $requete;
}
 
 
public function proteger($chaine) {
return $this->quote($chaine);
}
public function protegerTableau(Array $tableau) {
foreach ($tableau as $id => $val) {
if (is_array($val)) {
$tableau[$id] = $this->protegerTableau($val);
} else {
$tableau[$id] = $this->proteger($val);
}
}
return $tableau;
}
 
public function executerRequeteSimple($requete) {
$resultat = false;
try {
$resultat = $this->exec($requete);
if ($resultat === false) {
$this->debug[] = "La requête a échoué : $requete";
}
} catch (PDOException $e) {
$message = "Fichier : {$e->getFile()} \nLigne : {$e->getLine()} \nMessage : {$e->getMessage()} \nRequête : $requete";
$code = E_USER_ERROR;
throw new Exception($message, $code);
}
return $resultat;
}
 
public function executerRequete($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) {
$resultat = false;
try {
129,21 → 81,60
$this->debug[] = "La requête a retourné aucun résultat : $requete";
}
} catch (PDOException $e) {
$this->debug[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
$msgTpl = "Requête echec.\nFichier : %s.\nLigne : %s.\nMessage : %s.\nRequête : %s";
$this->debug[] = sprintf($msgTpl, $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
}
return $resultat;
}
 
public function getTxt($id) {
$sortie = '';
switch ($id) {
case 'sql_erreur' : $sortie = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s'; break;
case 'sql_erreur_requete' : $sortie = "Requête echec.\nFichier : %s.\nLigne : %s.\nMessage : %s.\nRequête : %s"; break;
default : $sortie = $id;
/**
* Execute la requete retournant l'objet brut de résultat pour l'utiliser dans un foreach.
* @param String $requete
*/
public function requeterBrut($requete) {
return $this->executerRequete($requete, self::SQL_RETOUR_BRUT);
}
return $sortie;
 
/**
* Protège automatiquement toutes les chaines comprises entre deux caractères '|'.
* @see protegerRequete()
* @param unknown_type $requete
*/
public function executer($requete) {
$resultat = false;
try {
$resultat = $this->exec($requete);
if ($resultat === false) {
$this->debug[] = "La requête a échoué : $requete";
}
} catch (PDOException $e) {
$message = "Fichier : {$e->getFile()} \nLigne : {$e->getLine()} \nMessage : {$e->getMessage()} \nRequête : $requete";
$code = E_USER_ERROR;
throw new Exception($message, $code);
}
return $resultat;
}
public function proteger($donnees) {
if (is_array($donnees)) {
$retour = $this->protegerTableau($donnees);
} else {
$retour = $this->quote($donnees);
}
return $retour;
}
 
private function protegerTableau(Array $tableau) {
foreach ($tableau as $id => $val) {
if (is_array($val)) {
$tableau[$id] = $this->protegerTableau($val);
} else {
$tableau[$id] = $this->proteger($val);
}
}
return $tableau;
}
 
public function obtenirDernierId() {
return $this->lastInsertId();
}
/trunk/jrest/lib/GestionObservation.php
2,8 → 2,9
/**
* PHP Version 5.2
*
* @category PHP
* @package jrest
* @category CEL
* @package Services
* @subpackage Bibliothèque
* @author Raphaël Droz <raphael@tela-botanica.org>
* @author Aurelien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010, 2013 Tela-Botanica
68,7 → 69,7
// important ! ne pas utiliser la fonction executerRequete qui renvoie une erreur si la requete
// contient des | (pipes) ce qui peut arriver dans les commentaires
// TODO: corriger la fonction ou bien continuer à utiliser executerRequeteSimple
$resultat_ajout_observation = Cel::db()->executerRequeteSimple($requete_insertion_observation);
$resultat_ajout_observation = Cel::db()->executer($requete_insertion_observation);
 
$retour = true;
if ($resultat_ajout_observation === false) {
90,11 → 91,11
*/
public function renvoyerDernierOrdreUtilisePlusUn($utilisateur) {
$idUtilisateurP = Cel::db()->proteger($utilisateur);
$requete_selection_dernier_ordre = 'SELECT max(ordre) AS ordre '.
$requete = 'SELECT max(ordre) AS ordre '.
'FROM cel_obs '.
"WHERE ce_utilisateur = $idUtilisateurP ".
' -- ' . __FILE__ . ':' . __LINE__;
$dernier_ordre = Cel::db()->executerRequete($requete_selection_dernier_ordre);
$dernier_ordre = Cel::db()->requeter($requete);
 
$nouvel_ordre = 0;
if (is_array($dernier_ordre) && count($dernier_ordre) > 0 && trim($dernier_ordre[0]['ordre']) != '') {
113,13 → 114,13
$idUtilisateurP = Cel::db()->proteger($utilisateur);
$ordreP = Cel::db()->proteger($ordre);
 
$requete_selection_dernier_id = 'SELECT id_observation '.
$requete = 'SELECT id_observation '.
'FROM cel_obs '.
"WHERE ce_utilisateur = $idUtilisateurP ".
"AND ordre = $ordreP ".
' -- ' . __FILE__ . ':' . __LINE__;
 
$dernier_id = Cel::db()->executerRequete($requete_selection_dernier_id);
$dernier_id = Cel::db()->requeter($requete);
 
$retour = null;
if ($dernier_id != false) {
185,7 → 186,7
// important ! ne pas utiliser la fonction executerRequete qui renvoie une erreur si la requete contient des | (pipes)
// ce qui peut arriver dans les commentaires
// TODO: corriger la fonction ou bien continuer à utiliser executerRequeteSimple
$resultat_modification = Cel::db()->executerRequeteSimple($requete_modification);
$resultat_modification = Cel::db()->executer($requete_modification);
 
$retour = true;
if ($resultat_modification === false) {
262,7 → 263,7
// important ! ne pas utiliser la fonction executerRequete qui renvoie une erreur si la requete contient des | (pipes)
// ce qui peut arriver dans les commentaires
// TODO: corriger la fonction ou bien continuer à utiliser executerRequeteSimple
$resultat_modification = Cel::db()->executerRequeteSimple($requete_modification . ' -- ' . __FILE__ . ':' . __LINE__);
$resultat_modification = Cel::db()->executer($requete_modification . ' -- ' . __FILE__ . ':' . __LINE__);
 
if ($resultat_modification === false) {
$this->logger("CEL_bugs","Erreur de mise à jour de l\'observation : ".$id);
278,17 → 279,15
} else {
$chaine_ids_obs = Cel::db()->proteger($ids_obs_ou_tableau);
}
$etat_transmission = $publier ? 1 : 0;
$requete = "UPDATE cel_obs ".
"SET transmission = ".$etat_transmission.", ".
"date_modification = NOW() ".
"WHERE id_observation IN (".$chaine_ids_obs.")";
"SET transmission = $etat_transmission , date_modification = NOW() ".
"WHERE id_observation IN ($chaine_ids_obs) ".
' -- ' . __FILE__ . ':' . __LINE__;
$resultat_modif_obs = Cel::db()->executerRequeteSimple($requete);
return $resultat_modif_obs;
$resultat = Cel::db()->executer($requete);
return $resultat;
}
/**
328,7 → 327,7
"AND id_observation IN ($chaine_ids_obs) ".
' -- ' . __FILE__ . ':' . __LINE__;
 
$resultat_suppression_observations = Cel::db()->executerRequeteSimple($requete);
$resultat_suppression_observations = Cel::db()->executer($requete);
 
// TODO: Faire la suppression des mots clés
// et des liaisons obs images dans une ou des fonctions à part
340,7 → 339,7
"WHERE id_observation IN ($chaine_ids_obs) ".
' -- ' . __FILE__ . ':' . __LINE__;
 
$resultat_suppression_liens = Cel::db()->executerRequeteSimple($requete);
$resultat_suppression_liens = Cel::db()->executer($requete);
 
if ($resultat_suppression_liens === false) {
$msg = "Erreur de suppression d'une liste de liaison entre observations et images : $requete";
383,7 → 382,7
"WHERE ce_utilisateur = $idAncienP ".
'ORDER BY ordre '.
' -- '.__FILE__.' : '.__LINE__;
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
 
$reussite = true;
if (is_array($resultat)) {
396,7 → 395,7
"WHERE ce_utilisateur = $idAncienP ".
"AND ordre = $ancienOrdre ".
' -- '.__FILE__.' : '.__LINE__;
$migration_releve = Cel::db()->executerRequeteSimple($requete);
$migration_releve = Cel::db()->executer($requete);
 
//TODO: meilleure vérification
if ($migration_releve === false) {
425,7 → 424,7
'WHERE ce_utilisateur = '.Cel::db()->proteger($mail_utilisateur).' '.
' -- '.__FILE__.' : '.__LINE__;
 
$migration_releve = Cel::db()->executerRequeteSimple($requete_migration_releve);
$migration_releve = Cel::db()->executer($requete_migration_releve);
 
return $migration_releve;
}
/trunk/jrest
Property changes:
Added: svn:mergeinfo
Merged /branches/topic-dbsingleton/jrest:r1720-1764
Merged /branches/v1.8-debroussailleuse/jrest:r1981,1987,1992
Merged /branches/v1.7-croissant/jrest:r1855,1879-1880,1885-1886,1917,1923,1983
Merged /branches/v2.0-elagueuse/jrest:r2113-2114