Subversion Repositories eFlore/Applications.cel

Compare Revisions

No changes between revisions

Ignore whitespace Rev 2142 → Rev 2143

/trunk/jrest/jrest.ini.php.defaut
28,7 → 28,7
locale = "fr_FR.UTF-8"
; Indication du fuseau horraire par défaut date_default_timezone_set(?)pour les classes héritant de Cel
fuseauHoraire = "Europe/Paris"
; template de chemin pour les marqueur google maps pour le widget carto
; template de chemin pour les marqueur google maps pour le widget carto
cheminCelMarkerObsTpl = "/home/telabotap/www/commun/icones/carto/groupe/g%s.png"
; URL des services web du CEL sous forme de template à utiliser avec sprintf
baseURLServicesCelTpl = "http://localhost/service:cel:%s"
40,9 → 40,9
; Default
[eflore]
phptype = mysqli
username =
password =
hostspec =
username =
password =
hostspec =
database = tela_prod_eflore_v1_1_principale
 
api_host = "http://localhost/service:eflore:0.1"
77,8 → 77,8
format_M = 600_450
format_L = 800_600
format_XL = 1024_768
format_X2L = 1280_960
format_X3L = 1600_1200
format_X2L = 1280_960
format_X3L = 1600_1200
format_CRX2S = 63_63
format_CS = 300_300
format_CXS = 100_100
89,8 → 89,8
; Stockage
[database_cel]
phptype = mysqli
username =
password =
username =
password =
hostspec = localhost
database = tb_cel
database_migration = tb_cel_migration
98,8 → 98,8
; Identification
[database_ident]
phptype = mysql
username =
password =
username =
password =
hostspec = localhost
database = tela_prod
annuaire = annuaire_tela
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/InventoryUserList.php
1,101 → 1,73
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
/**
* 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/
*/
 
/**
*
* 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
* in : utf8
* out : utf8
*
* @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
*/
class InventoryUserList extends Cel {
 
function getElement($uid){
$this->controleUtilisateur($uid[0]);
function getElement($uid) {
$this->controleUtilisateur($uid[0]);
 
$requete_utilisateurs ='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';
$utilisateurs = Cel::db()->executerRequete($requete_utilisateurs);
$liste_utilisateurs = array();
if (!$utilisateurs) {
} else {
foreach ($utilisateurs as $utilisateur) {
$liste_utilisateurs[] = $utilisateur;
}
}
usort($liste_utilisateurs,'trierUtilisateurs');
$this->envoyerJson($liste_utilisateurs);
return true;
}
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;
}
$requete_utilisateurs ='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';
 
$utilisateurs = Cel::db()->requeter($requete_utilisateurs);
 
$liste_utilisateurs = array();
if ($utilisateurs) {
foreach ($utilisateurs as $utilisateur) {
$liste_utilisateurs[] = $utilisateur;
}
}
usort($liste_utilisateurs, 'trierUtilisateurs');
 
$this->envoyerJson($liste_utilisateurs);
return true;
}
 
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
{
return -1 ;
}
}
else
{
if (strstr($val2['courriel'],'@')) {
return 1 ;
}
else
{
return strcmp($val1['courriel'],$val2['courriel']) ;
}
}
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/CelImageDoublon.php
7,9 → 7,9
*
* Cas d'utilisation :
* /CelImageDoublon/Sortie : images doublon de l'utilisateur authentifié.
*
*
* Sortie = Type de sortie : html ou json. Par défaut : html
*
*
* Utilisateur :
* identifiant (= courriel) de l'utilisateur récupéré via une identification HTTP.
*
28,10 → 28,10
$parametres = $this->traiterParametres(array('mode', 'utilisateur'), $params, false);
extract($parametres);
$contenu = '';
 
if ($this->authentifierUtilisateur()) {
$retour = null;
 
if (isset($mode)) {
$methode = $this->traiterNomMethodeGet($mode);
if (method_exists($this, $methode)) {
43,7 → 43,7
} else {
$this->messages[] = "Vous devez indiquer un type de mode.";
}
 
if (is_null($retour)) {
$contenu = 'Un problème est survenu : '.print_r($this->messages, true);
} else {
55,7 → 55,7
}
}
}
 
// Envoie sur la sortie standard
$encodage = 'UTF-8';
$mime = 'text/html';
67,7 → 67,7
* Carte par défaut
*/
private function getDoublonHtml($parametres) {
 
$widget = null;
$utilisateur_mail = Cel::getAuthIdentifiant();
$utilisateur_infos = new User($this->config);
95,7 → 95,7
'FROM cel_images '.
"WHERE ce_utilisateur = '$utilisateur' ";
 
$images = Cel::db()->executerRequete($requete);
$images = Cel::db()->requeter($requete);
 
// Traitement
$doublons = array();
104,7 → 104,7
foreach ($images as $img) {
if (!isset($md5[$img['md5']])) {
$md5[$img['md5']] = array(
'url' => $this->getUrlImage($img['id_image'], 'CXS'),
'url' => $this->getUrlImage($img['id_image'], 'CXS'),
'obs_ordre' => array(),
'img_ordre' => $img['ordre'],
'img_id' => $img['id_image']);
116,7 → 116,7
}
 
$doublons[$img['md5']][$img['id_image']] = array(
'url' => $this->getUrlImage($img['id_image'], 'CXS'),
'url' => $this->getUrlImage($img['id_image'], 'CXS'),
'obs_ordre' => array(),
'img_ordre' => $img['ordre'],
'img_id' => $img['id_image']);
123,7 → 123,7
$images_doublons_id[] = Cel::db()->quote($img['id_image']);
}
}
 
if (count($images_doublons_id) > 0) {
$requete = 'SELECT cim.id_image, nom_original, md5, co.ordre as ordre_obs '.
'FROM cel_images AS cim '.
134,8 → 134,8
"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'])) {
$doublons[$info['md5']][$info['id_image']]['obs_ordre'][] = $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()) {
30,7 → 29,7
$idObs = explode(',', $idObs);
 
$gestionnaireObs = new GestionObservation($this->config);
 
// par défaut on ne fait que dépublier les obs à moins que la suppression ne soit demandée
// expréssement par le paramètre mode
if(isset($_GET['mode']) && $_GET['mode'] == "supprimer") {
/trunk/jrest/services/CoordSearch.php
10,20 → 10,20
* @version $Id$
*/
class CoordSearch extends Cel {
 
private $adresse_service_geonames = null;
private $adresse_service_local = null;
 
private $nom_service_geocoding = null;
private $nom_service_reverse_geocoding = null;
 
function CoordSearch($config) {
 
parent::__construct($config);
 
$this->adresse_service_geonames = $this->config['cel']['url_service_geo_geonames'];
$this->adresse_service_local = $this->config['cel']['url_service_geo_local'];
 
$this->nom_service_geocoding = $this->config['cel']['nom_service_geocoding_geonames'];
$this->nom_service_reverse_geocoding = $this->config['cel']['nom_service_reverse_geocoding_geonames'];
}
30,7 → 30,7
 
/**
* Recherche de coordonnées suivant ce qui est fourni
*
*
* $uid[0] = latitude (ou * si recherche coordonnées d'une commune)
* $uid[1] = longitude (ou * si recherche coordonnées d'une commune)
* $uid[2] = commune (ou * si recherche d'une commune correspondant à des coordonnées)
43,20 → 43,20
$retour = array();
 
$params = $this->traiterParametres($uid);
 
if ($this->estUneRequeteReverseGeocoding($params)) {
 
$informations_communes = $this->effectuerRequeteReverseGeocodingCartoOsm($params['lat'], $params['lon']);
 
if (!$informations_communes) {
$informations_communes = $this->effectuerRequeteReverseGeocodingGeonames($params['lat'], $params['lon']);
}
 
$header = 'Content-Type: application/json; charset=UTF-8';
$retour = json_encode($informations_communes) ;
 
} elseif ($this->estUneRequeteGeocoding($params)) {
 
$informations_coord = $this->chercherCentroideCommuneBdd($params['commune'],$params['code_postal']);
if(!$informations_coord) {
$informations_coord = $this->effectuerRequeteGeocodingGeonames($params['commune'],$params['code_postal'],$params['code_pays']);
74,80 → 74,80
header($header);
echo $retour;
}
 
protected function traiterParametres($params) {
 
$lat = $this->affecterValeurParametreOuDefaut($params, 0, '*');
$lng = $this->affecterValeurParametreOuDefaut($params, 1, '*');
$lng = $this->affecterValeurParametreOuDefaut($params, 1, '*');
 
$commune = $this->affecterValeurParametreOuDefaut($params, 2, '*');
$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);
}
 
private function affecterValeurParametreOuDefaut($params, $indice, $valeur_si_non_present) {
return isset($params[$indice]) ? str_replace('"','',urldecode($params[$indice])) : $valeur_si_non_present;
return isset($params[$indice]) ? str_replace('"','',urldecode($params[$indice])) : $valeur_si_non_present;
}
 
private function estUneRequeteReverseGeocoding($params) {
 
return ($params['lat'] != '*' && $params['lon'] != '*');
}
 
private function estUneRequeteGeocoding($params) {
return ($params['commune'] != '*');
}
 
private function effectuerRequeteReverseGeocodingCartoOsm($lat, $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'));
}
 
private function effectuerRequeteReverseGeocodingGeonames($lat, $lon) {
 
$infos_commune_json = @file_get_contents($this->adresse_service_geonames.
$this->nom_service_reverse_geocoding.
"?lat=".urlencode($lat)."&lng=".urlencode($lon).
"&style=full");
$objet_retour = json_decode($infos_commune_json);
 
$retour = false;
if($this->estUnRetourReverseGeocodingGeonamesValide($objet_retour)) {
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')
 
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')) {
$valide = true;
}
}
}
 
return $valide;
}
 
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;
 
169,7 → 169,7
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,
182,20 → 182,20
}
 
private function convertirUtmVersLatLong($x, $y, $sector) {
 
$lat_long = array();
 
$convertisseur = new gPoint();
$convertisseur->setUTM($x, $y, $sector);
$convertisseur->convertTMtoLL();
$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);
207,11 → 207,11
 
$coord_json = @file_get_contents($requete);
$objet_retour = json_decode($coord_json);
 
$retour = false;
if($this->estUnRetourGeocodingGeonamesValide($objet_retour)) {
$retour = array('lat' => $objet_retour->postalCodes[0]->lat,
 
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
220,18 → 220,18
 
return $retour;
}
 
private function estUnRetourGeocodingGeonamesValide($retour) {
$valide = false;
if (is_a($retour,'stdClass') && property_exists($retour,'postalCodes')
 
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')) {
$valide = true;
}
}
}
 
return $valide;
}
}
/trunk/jrest/services/CelStatistique.php
54,7 → 54,7
 
private function getEvolImgLieesParMois($param) {
$utilisateur = isset($_GET['utilisateur']) ? Cel::db()->quote($_GET['utilisateur']) : null;
 
// Récupération des données
$requete = "SELECT DATE_FORMAT(date_creation, '%Y%m') AS periode, COUNT(ci.id_image) AS nbre ".
"FROM cel_obs_images coi LEFT JOIN cel_images ci ON (coi.id_image = ci.id_image) ".
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) {
125,7 → 125,7
 
private function getEvolImgParMois($param) {
$utilisateur = isset($_GET['utilisateur']) ? Cel::db()->quote($_GET['utilisateur']) : null;
 
// Récupération des données
$requete = "SELECT DATE_FORMAT(date_creation, '%Y%m') AS periode, COUNT(id_image) AS nbre ".
"FROM cel_images ".
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();
260,7 → 260,7
$format_date = '%Y%m%d';
$where = 'date_creation > DATE_SUB(NOW(), INTERVAL 31 DAY)';
$obs_totale = $this->executerRequeteEvol('cel_obs', 'id_observation', $format_date, $where);
 
// Tri des dates pour les étiquettes des axes
$dates = array();
$annees = array();
271,7 → 271,7
$mois = substr($annee_mois_jours, 4, 2);
$jour = substr($annee_mois_jours, 6, 2);
$annee_mois_fmt_B = strftime('%B %Y', mktime(0, 0, 0, $mois, 1, $annee));
 
if (!isset($dates[$annee][$mois][$jour])) {
$annees_mois[] = (!isset($dates[$annee][$mois]) ? $annee_mois_fmt_B : '');
$jours[] = $jour;
279,7 → 279,7
$dates[$annee][$mois][$jour] = 1;
}
}
 
// Post traitement des données
$titre = 'Évolution des observations sur un mois glissant';
$valeurs_max = max($obs_totale);
303,7 → 303,7
'chxr' => "0,0,$y_val_fin,$y_pas",
'chm' => 'h,C3C3C3,0,0.5,1,-1|N,000000,0,1::1,8,1.0,ht',
'chxs' => '0,822013|1,822013');
 
return $graph;
}
 
565,7 → 565,7
'chm' => 'B,FF000080,0,1.0,5.0');
return $graph;
}
 
private function creerWhereIndicationGeo($champ) {
$where = null;
if (isset($champ)) {
596,7 → 596,7
"(date_creation LIKE '$aujourdhui%'
OR date_modification LIKE '$aujourdhui%'
OR date_transmission LIKE '$aujourdhui%') ");
 
// Cummul des obs crées, modifiées, transmises par jour
$donnees = array();
foreach ($max_obs as $obs_par_jour) {
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);
780,7 → 780,7
 
private function getNuagePointsObsParHeureEtJourSemaine($param) {
$utilisateur = isset($_GET['utilisateur']) ? Cel::db()->quote($_GET['utilisateur']) : false;
 
// Récupération des données de la base
$requete = 'SELECT courriel_utilisateur, DATE_FORMAT(date_creation, "%w-%H") AS periode, (ROUND(LOG10(COUNT(id_observation))) + 1) AS nbre '.
'FROM cel_obs '.
787,8 → 787,8
'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();
foreach ($infos as $info) {
798,7 → 798,7
$observations[$info['periode']] = $info['nbre'];
}
}
 
// Postraitement des données
// Jour de la semaine
$donnees['joursSemaine'] = 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;
928,7 → 928,7
 
private function executerRequeteEvol($table, $champ, $format_date = '%Y%m', $where = null, $champ_date = 'date_creation', $order_by = null, $limit = null) {
$utilisateur = isset($_GET['utilisateur']) ? Cel::db()->quote($_GET['utilisateur']) : false;
 
$requete = "SELECT DATE_FORMAT($champ_date, '$format_date') AS periode, COUNT($champ) AS nbre ".
"FROM $table ".
"WHERE $champ_date != '0000-00-00 00:00:00' ".
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();
956,12 → 956,12
$where = isset($where) ? $where.' AND ' : '';
$where .= "courriel_utilisateur = $utilisateur ";
}
 
$requete = "SELECT COUNT($champ) AS nbre ".
"FROM $table ".
((isset($where)) ? "WHERE $where " : '');
 
$nbre = Cel::db()->executerRequete($requete, 'Column');
$nbre = Cel::db()->requeterValeurUnique($requete);
return $nbre;
}
}
/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'], "'");
151,7 → 151,7
pclose(popen($cmd,"r"));
}
}
 
$this->gestionMotsClesObs = new GestionMotsClesChemin($this->config,'obs');
$this->gestionMotsClesImages = new GestionMotsClesChemin($this->config,'images');
 
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;
}
431,7 → 431,7
$listeIdsTags = array();
foreach ($tags as $tag) {
$tag = $this->nettoyerTag($tag);
if ($tag != '') {
if ($tag != '') {
$id_mot_cle = $this->gestionMotsClesImages->insererParCheminSiInexistant($tag, $chemin_parent, $this->utilisateur_id);
if ($id_mot_cle !== false) {
$listeIdsTags[] = $id_mot_cle;
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/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;
}
238,7 → 239,7
$donnees['guid'] = $this->getUrlServiceBase();
$donnees['lien_service'] = $this->creerUrlService();
$donnees['lien_cel'] = (isset($infos['nom_sel_nn']) && $infos['nom_sel_nn'] != '' && $infos['nom_sel_nn'] != 0) ?
$this->getUrlEflore($infos['nom_referentiel'], $infos['nom_sel_nn']) : '';
$this->getUrlEflore($infos['nom_referentiel'], $infos['nom_sel_nn']) : '';
$donnees['editeur'] = $this->config['settings']['editeur'];
$derniere_info_en_date = reset($infos);
$date_modification_timestamp = strtotime($derniere_info_en_date['date_creation']);
296,7 → 297,7
$lien = $this->getUrlImage($element['id_image'], $this->format_image);
} else {
// Lien vers fiche eFlore onglet Illustration
$lien = $this->getUrlEflore($element['nom_referentiel'], $element['nom_sel_nn'], 'illustration');
$lien = $this->getUrlEflore($element['nom_referentiel'], $element['nom_sel_nn'], 'illustration');
}
return $lien;
}
399,7 → 400,7
$contenu = '';
if (isset($_GET['debut'])) $this->start = $_GET['debut'];
if (isset($_GET['limite'])) $this->limit = $_GET['limite'];
 
$this->limit = ($this->limit < 1000) ? $this->limit : 1000;// Pour éviter les abus !
 
if ($this->parametresSontDemandes()) {
704,9 → 705,9
return $contenu;
}
 
private function getIntituleAuteur($courriel) {
$courriel = strtolower($courriel);
$intitule = $this->auteurs[$courriel];
return $intitule;
private function getIntituleAuteur($courriel) {
$courriel = strtolower($courriel);
$intitule = $this->auteurs[$courriel];
return $intitule;
}
}
/trunk/jrest/services/ImageDateList.php
15,55 → 15,55
 
/**
* 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)
**/
**/
class ImageDateList extends Cel {
 
private $correspondance_fonction = array(1 => 'year', 2 => 'month', 3 => 'day');
 
 
function getElement($uid){
// Controle detournement utilisateur
 
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
if(!is_numeric($uid[0])) {
return;
return;
}
 
$condition_requete = $this->traiterParametresEtConstruireRequete($uid);
 
$requete_liste_dates = 'SELECT DISTINCT '.
'date_prise_de_vue AS id '.
'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);
$this->envoyerJson($liste_dates);
return true;
 
$this->envoyerJson($liste_dates);
return true;
}
 
private function formaterListeResultats($liste_dates) {
 
if (!$liste_dates) {
$liste_dates = array();
}
 
foreach($liste_dates as &$date) {
 
if($date['id'] == null || trim($date['id']) == '' || $date['id'] == 'null') {
$date = '0000-00-00';
} else {
} else {
$date_heures = explode(' ',$date['id']);
if(count($date_heures) > 1) {
$date = $date_heures[0];
72,25 → 72,25
}
}
}
 
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])) {
$fonction_date = $this->correspondance_fonction[$i];
$fonction_date = $this->correspondance_fonction[$i];
$requete_condition .= ' AND '.$fonction_date.'(date_prise_de_vue) = '.Cel::db()->proteger($params[$i]);
}
}
 
return $requete_condition;
}
 
private function estUnParametreDate($valeur) {
return is_numeric($valeur) && $valeur != "all";
}
/trunk/jrest/services/SelfRefList.php
4,77 → 4,70
// in utf8
// out utf8
 
// Fournit un référentiel relatif à l'utilisateur sur l'un des champs demandes
// Fournit un référentiel relatif à l'utilisateur sur l'un des champs demandes
class SelfRefList extends Cel {
 
private $referentiels = array('station', 'lieudit', 'milieu');
 
/**
* Suivant le type de référentiel donné en paramètre, renvoie les liste de ses éléments
*
*
* uid[0] : utilisateur obligatoire
* uid[1] : referentiel demandé (obligatoire)
* $_GET["start"] et $GET_["limit"] : selection intervalle
* $_GET["recherche"] : cherche les noms qui commmencent selon la valeur
*
*
*/
function getElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
if (!$this->paramObligatoiresSontPresents($uid)) {
return;
}
if($_GET['recherche'] == '*') {
$_GET['recherche'] = '%';
}
$referentiel_demande = $uid[1];
$value=array();
$requete_referentiel = "SELECT DISTINCT ".$referentiel_demande." " .
"FROM cel_obs WHERE ce_utilisateur = '".$uid[0]."' ";
if($this->filtreRechercheEstDemande()) {
$requete_referentiel .= " AND ".$referentiel_demande." LIKE '".$_GET["recherche"]."%'";
}
public function getElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
if ($this->limiteEstDemandee()) {
$requete_referentiel .= " ORDER BY '.$referentiel_demande.' LIMIT ".$_GET["start"].",".$_GET["limit"];
if (!$this->paramObligatoiresSontPresents($uid)) {
return;
}
 
if ($_GET['recherche'] == '*') {
$_GET['recherche'] = '%';
}
 
$referentiel_demande = $uid[1];
$idUtilisateur = Cel::db()->proteger($uid[0]);
 
$requete = "SELECT DISTINCT $referentiel_demande " .
'FROM cel_obs '.
"WHERE ce_utilisateur = '$idUtilisateur' ";
if ($this->filtreRechercheEstDemande()) {
$requete .= " AND $referentiel_demande LIKE '".$_GET["recherche"]."%'";
}
if ($this->limiteEstDemandee()) {
$requete .= " ORDER BY $referentiel_demande LIMIT ".$_GET['start'].','.$_GET['limit'];
}
$resultat = Cel::db()->requeter($requete);
 
$referentiel = array();
foreach ($resultat as $cle => $valeur) {
if ($this->estUneValeurValide($valeur[$referentiel_demande])) {
$referentiel[] = $valeur[$referentiel_demande];
}
$referentiel_resultat = Cel::db()->executerRequete($requete_referentiel);
$referentiel = array();
foreach($referentiel_resultat as $cle => $valeur) {
if($this->estUneValeurValide($valeur[$referentiel_demande])) {
$referentiel[] = $valeur[$referentiel_demande];
}
 
}
$this->envoyerJson($referentiel);
return true;
}
$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
14,16 → 14,16
 
/**
* Liste les date de releves par utilisateur
*
*
* in=utf8
* out=utf8
*
**/
**/
class InventoryDateList extends Cel {
 
private $correspondance_fonction = array(1 => 'year', 2 => 'month', 3 => 'day');
/**
 
/**
* @param int uid[0] : utilisateur obligatoire
* @param int uid[1] : si absent : valeur 'all' (annee)
* @param int uid[2] : si absent : valeur 'all' (mois)
30,58 → 30,58
* @param int uid[3] : si absent : valeur 'all' (jour)
*/
function getElement($uid){
// Controle detournement utilisateur
 
// 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';
$liste_dates = Cel::db()->executerRequete($requete_liste_dates);
'ORDER BY date_observation';
 
$liste_dates = Cel::db()->requeter($requete_liste_dates);
 
$liste_dates = $this->formaterListeResultats($liste_dates);
$this->envoyerJson($liste_dates);
return true;
 
$this->envoyerJson($liste_dates);
return true;
}
 
private function formaterListeResultats($liste_dates) {
 
if (!$liste_dates) {
$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;
}
 
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])) {
$fonction_date = $this->correspondance_fonction[$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";
}
/trunk/jrest/services/NomsChampsEtendus.php
4,20 → 4,18
// in utf8
// out utf8
 
// Fournit un référentiel relatif à l'utilisateur sur les noms ou les valeurs des champs étendus
// Fournit un référentiel relatif à l'utilisateur sur les noms ou les valeurs des champs étendus
class NomsChampsEtendus extends Cel {
 
/**
* 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){
if (!$this->paramObligatoiresSontPresents($uid)) {
return;
}
24,7 → 22,7
 
$_GET['recherche'] = str_replace('*', '%', $_GET['recherche']);
$referentiel = array();
 
if($uid[0] == "cle") {
$referentiel = $this->rechercherCles($_GET['recherche']);
} else if($uid[0] == "valeur") {
31,55 → 29,52
$referentiel = $this->rechercherValeurs($_GET['cle'], $_GET['recherche']);
}
 
$this->envoyerJson($referentiel);
return true;
$this->envoyerJson($referentiel);
return true;
}
 
function rechercherCles($recherche_cle) {
$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);
"cle LIKE ".Cel::db()->proteger($recherche_cle)." OR ".
"label LIKE ".Cel::db()->proteger($recherche_cle)." ";
$resultat = Cel::db()->requeter($requete);
 
$referentiel = array();
foreach($referentiel_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.'%')." ";
"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']) != "") {
 
foreach ($referentiel_resultat as $valeur) {
if (trim($valeur['valeur']) != '') {
$referentiel[] = $valeur['valeur'];
}
}
return $referentiel;
}
 
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() {
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) != "");
return ($chaine != null && $chaine != "000null" && trim($chaine) != '');
}
}
?>
}
/trunk/jrest/services/CelStatistiqueTxt.php
16,7 → 16,7
* @copyright Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
*/
class CelStatistiqueTxt extends Cel {
 
/**
* Méthode appelée avec une requête de type GET.
*/
42,7 → 42,7
$this->envoyerJson($stats);
}
}
 
private function analyserParametresUrl() {
$this->parametres['utilisateur'] = isset($_GET['utilisateur']) ? Cel::db()->quote($this->verifierSecuriteParametreUrl($_GET['utilisateur'])) : null;
$this->parametres['num_taxon'] = isset($_GET['num_taxon']) ? Cel::db()->quote($this->verifierSecuriteParametreUrl($_GET['num_taxon'])) : null;
51,13 → 51,13
$this->parametres['start'] = isset($_GET['start']) ? $this->verifierSecuriteParametreUrl($_GET['start']) : null;
$this->parametres['limit'] = isset($_GET['limit']) ? $this->verifierSecuriteParametreUrl($_GET['limit']) : null;
}
 
private function getListeUtilisateursNbrePhotos() {
$liste = array();
 
$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'];
66,7 → 66,7
}
return $liste;
}
 
private function construireRequeteListeUtilisateurNbrePhoto() {
$select = 'SELECT co.courriel_utilisateur, COUNT(DISTINCT ci.id_image) AS nbre ';
$from = 'FROM cel_obs co '.
76,13 → 76,13
$groupBy = 'GROUP BY co.courriel_utilisateur ';
$orderBy = 'ORDER BY nbre DESC ';
$limitSql = 'LIMIT 0,150 ';
 
$zero_images = false;
if (count($this->parametres) != 0) {
extract($this->parametres);
 
$filtres = array();
 
if (isset($utilisateur)) {
$filtres[] = "co.courriel_utilisateur = $utilisateur ";
}
101,7 → 101,7
}
}
$where .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
 
if (isset($start)) {
$limitSql = str_replace('0,', "$start,", $limitSql);
}
117,7 → 117,7
}
return $requete;
}
 
private function construireWhereTags() {
$where = null;
if (isset($this->parametres['tag'])) {
128,8 → 128,8
$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
$tpl_where = '(ci_meta_mots_cles LIKE "%%%s%%" AND ci_ce_utilisateur = %s )';
144,11 → 144,11
}
return $where;
}
 
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) {
157,7 → 157,7
}
return $liste;
}
 
private function construireRequeteListeTaxonNbrePhoto() {
$select = 'SELECT nom_ret, COUNT(DISTINCT ci.id_image) AS nbre ';
$from = 'FROM cel_obs co '.
168,13 → 168,13
$groupBy = 'GROUP BY nom_ret ';
$orderBy = 'ORDER BY nbre DESC ';
$limitSql = 'LIMIT 0,150 ';
 
 
if (count($this->parametres) != 0) {
extract($this->parametres);
 
$filtres = array();
 
if (isset($utilisateur)) {
$filtres[] = "co.courriel_utilisateur = $utilisateur ";
}
185,7 → 185,7
$filtres[] = "nom_ret LIKE $taxon ";
}
$where .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
 
if (isset($start)) {
$limitSql = str_replace('0,', "$start,", $limitSql);
}
193,33 → 193,33
$limitSql = str_replace('150', $limit, $limitSql);
}
}
 
$requete = $select.$from.$where.$groupBy.$orderBy.$limitSql;
 
return $requete;
}
 
private function getNombres() {
 
$requete = $this->construireRequeteNbreObs();
$info['observations'] = (int) Cel::db()->executerRequete($requete, 'Column');
$requete = $this->construireRequeteNbreObsPubliques();
$info['observationsPubliques'] = (int) Cel::db()->executerRequete($requete, 'Column');
$requete = $this->construireRequeteNbreObs();
$info['observations'] = (int) Cel::db()->requeterValeurUnique($requete);
 
$requete = $this->construireRequeteNbreObsPubliques();
$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;
233,10 → 233,10
$info['observationsParCommunesTotal'] += $resultat['nbre'];
}
$info['observationsParCommunesMoyenne'] = ($info['communes'] > 0 ) ? round($info['observationsParCommunesTotal'] / $info['communes'], 2) : 0;
return $info;
 
return $info;
}
 
private function construireRequeteNbreObs() {
$requete = 'SELECT COUNT(id_observation) AS nbre '.
'FROM cel_obs ';
244,7 → 244,7
if (count($this->parametres) != 0) {
$filtres = array();
extract($this->parametres);
 
if (isset($utilisateur)) {
$filtres[] = "courriel_utilisateur = $utilisateur ";
}
254,13 → 254,13
if (isset($taxon)) {
$filtres[] = "nom_ret LIKE $taxon ";
}
 
$requete .= ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
}
 
return $requete;
}
 
private function construireRequeteNbreObsPubliques() {
$requete = 'SELECT COUNT(id_observation) AS nbre '.
'FROM cel_obs '.
269,7 → 269,7
if (count($this->parametres) != 0) {
$filtres = array();
extract($this->parametres);
 
if (isset($utilisateur)) {
$filtres[] = "courriel_utilisateur = $utilisateur ";
}
279,13 → 279,13
if (isset($taxon)) {
$filtres[] = "nom_ret LIKE $taxon ";
}
 
$requete .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
}
 
return $requete;
}
 
private function construireRequeteNbreObsParCommune() {
$requete = 'SELECT COUNT(id_observation) AS nbre '.
'FROM cel_obs '.
296,7 → 296,7
if (count($this->parametres) != 0) {
$filtres = array();
extract($this->parametres);
 
if (isset($utilisateur)) {
$filtres[] = "courriel_utilisateur = $utilisateur ";
}
306,28 → 306,28
if (isset($taxon)) {
$filtres[] = "nom_ret LIKE $taxon ";
}
 
$requete .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
}
$requete .= $groupBy;
 
return $requete;
}
 
private function construireRequeteNbreImg() {
$select = 'SELECT COUNT(DISTINCT ci.id_image) AS nbre ';
$from = 'FROM cel_images ci ';
 
if (count($this->parametres) != 0) {
$filtres = array();
 
extract($this->parametres);
 
if (isset($utilisateur)) {
$filtres[] = "courriel_utilisateur = $utilisateur ";
}
if (isset($num_taxon)) {
 
$filtres[] = "nt = $num_taxon ";
}
if (isset($taxon)) {
337,7 → 337,7
$from .= 'LEFT JOIN cel_obs_images coi ON (coi.id_image = ci.id_image) '.
'LEFT JOIN cel_obs co ON (coi.id_observation = co.id_observation) ';
}
 
$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
}
$requete = $select.$from.$where;
344,17 → 344,17
 
return $requete;
}
 
private function construireRequeteNbreImgLiees() {
$select = 'SELECT COUNT(DISTINCT ci.id_image) AS nbre ';
$from = 'FROM cel_obs_images coi '.
' LEFT JOIN cel_images ci ON (coi.id_image = ci.id_image) ';
 
if (count($this->parametres) != 0) {
$filtres = array();
 
extract($this->parametres);
 
if (isset($utilisateur)) {
$filtres[] = "ci.courriel_utilisateur = $utilisateur ";
}
364,28 → 364,28
if (isset($taxon)) {
$filtres[] = "nom_ret LIKE $taxon ";
}
 
if (isset($num_taxon) || isset($taxon)) {
$from .= 'LEFT JOIN cel_obs ON (coi.id_observation = co.id_observation) ';
}
 
$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
}
 
$requete = $select.$from.$where;
return $requete;
}
 
private function construireRequeteNbreObsLiees() {
$select = 'SELECT COUNT(DISTINCT coi.id_observation) AS nbre ';
$from = 'FROM cel_obs_images coi '.
' LEFT JOIN cel_obs co ON (coi.id_observation = co.id_observation) ';
 
if (count($this->parametres) != 0) {
$filtres = array();
 
extract($this->parametres);
 
if (isset($utilisateur)) {
$filtres[] = "courriel_utilisateur = $utilisateur ";
}
395,12 → 395,12
if (isset($taxon)) {
$filtres[] = "nom_ret LIKE $taxon ";
}
 
$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
}
 
$requete = $select.$from.$where;
 
return $requete;
}
}
/trunk/jrest/services/InventoryByDept.php
14,14 → 14,14
*/
 
/**
*
*
* in=utf8
* out=iso3859
*
*
* Liste des Nouvelles observations par departement
* A voir avec David mais ne devrait plus être utilisé
* A voir avec David mais ne devrait plus être utilisé
* ou fait autrement
*
*
*/
 
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(dirname(realpath(__FILE__))) . '/lib');
33,25 → 33,25
class InventoryByDept extends Cel {
 
var $extendSpreadsheetProductor;
 
function InventoryByDept($config) {
 
parent::__construct($config);
 
// Pas d'heritage multiple en php :(
$this->extendSpreadsheetProductor = new SpreadsheetProductor();
$this->extendSpreadsheetProductor->initSpreadsheet();
$this->extendSpreadsheetProductor->initSpreadsheet();
}
 
//TODO : faire une fonction qui prend en paramètre un departement
function getRessource(){
 
$requete_obs = "SELECT ce_zone_geo, ce_utilisateur, courriel_utilisateur, ordre, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, famille, zone_geo, date_observation," .
" lieudit, station, milieu, commentaire, transmission FROM cel_obs ".
" 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();
$workbook->setVersion(8);
75,7 → 75,7
$worksheet->write(0,13,'Observateur');
 
$i=1;
 
$observations = array();
$chercheur_infos_taxon = null;
if (is_array($resultat_obs)) {
82,14 → 82,14
$observations = &$resultat_obs;
$chercheur_infos_taxon = new RechercheInfosTaxonBeta($this->config);
}
 
foreach ($observations as $obs) {
 
$code_departement = $this->convertirCodeZoneGeoVersDepartement($obs['ce_zone_geo']);
$taxon_deja_vu = $chercheur_infos_taxon->taxonEstPresentDansDepartement($obs['nt'], $code_departement);
if (!$taxon_deja_vu) {
// Denullifiage
 
if (!$taxon_deja_vu) {
// Denullifiage
foreach($obs as $k=>$v) {
if (($v=="null") || ($v=="000null")) {
$obs[$k]="";
97,7 → 97,7
else {
$obs[$k]=utf8_decode($v);
}
}
}
 
if ($obs['date_observation']!="0000-00-00 00:00:00") {
list($year,$month,$day)= explode('-',$obs['date_observation']);
122,17 → 122,17
$worksheet->write($i,11,$obs['milieu']);
$worksheet->write($i,12,$obs['commentaire']);
$worksheet->write($i,13,$obs['courriel_utilisateur']);
$i++;
}
 
$i++;
}
}
 
// sending HTTP headers
$workbook->send('liste.xls');
$workbook->close();
exit();
}
 
exit();
}
}
 
/* +--Fin du code ---------------------------------------------------------------------------------------+
150,6 → 150,6
* Securisation acces utilisateur
*
*
*
*
*/
?>
/trunk/jrest/services/CelWidgetMap.php
23,7 → 23,7
*/
// TODO : supprimer le TRIM quand les obs seront reliées correctements aux localisations (sur le code INSEE par exemple)
class CelWidgetMap extends Cel {
 
/**
* Méthode appelée avec une requête de type GET.
*/
30,7 → 30,7
public function getElement($ressources) {
$retour = null;
extract($this->parametres);
 
$action = array_shift($ressources);
if (isset($action)) {
$methode = $this->traiterNomMethodeGet($action);
47,7 → 47,7
$info = 'Un problème est survenu : '.print_r($this->messages, true);
$this->envoyer($info);
} else if (isset($retour['type']) && $retour['type'] == 'jsonVar') {
 
$this->envoyerJsonVar($retour['variable_js'], $retour['donnees']);
} else if (isset($retour['type']) && $retour['type'] == 'jsonP') {
$this->envoyerJsonp($retour['donnees']);
78,22 → 78,22
$this->construireWhereTag();
//die($requete);
$resultats = Cel::db()->requeter($requete);
 
// Traitement des résultats
$obs_nbre = $this->traiterNbreObs($resultats);
$stations = $this->traiterStations($resultats);
 
// Création des infos du widget
$json['donnees']['points'] = $stations;
$json['donnees']['stats']['communes'] = count($stations);
$json['donnees']['stats']['observations'] = $obs_nbre;
 
$json['type'] = (isset($this->formatRetour)) ? $this->formatRetour : 'jsonVar';
$json['variable_js'] = 'stations';
 
return $json;
}
 
private function traiterNbreObs($resultats) {
$obs_nbre = 0;
if ($resultats !== false) {
101,7 → 101,7
}
return $obs_nbre;
}
 
private function traiterStations($resultats) {
$stations = array();
if ($resultats !== false) {
124,7 → 124,7
}
return $stations;
}
 
/**
* Données pour l'affichage des obs d'une station
*/
153,11 → 153,11
"LIMIT {$this->start},{$this->limit} ";
//die($requete);
$resultats = Cel::db()->requeter($requete, self::SQL_RETOUR_COMPLET, self::SQL_MODE_OBJET);
 
$requete = 'SELECT FOUND_ROWS()';
$total = (int) Cel::db()->requeter($requete, self::SQL_RETOUR_COLONNE);
}
 
// Post-traitement
$observations = $this->traiterObservations($resultats, $total);
$observations = $this->ajouterImagesAuxObs($observations);
165,7 → 165,7
$observations = $this->supprimerIdDesObs($observations);
return $observations;
}
 
private function traiterObservations($donnees, $total) {
$observations = array('commune' => '', 'observations' => array(), 'observateurs' => array());
$observations['total'] = (isset($total)) ? $total : 0;
182,7 → 182,7
$observation['observateurId'] = $donnee->ce_utilisateur;
$observation['referentiel'] = $this->supprimerVersionDuReferentiel($donnee->nom_referentiel);
$observation['urlEflore'] = $this->getUrlEflore($donnee->nom_referentiel, $donnee->nom_sel_nn);
 
if (isset($donnee->zone_geo)) {
$observations['commune'] = $this->nettoyerTexte($donnee->zone_geo);
}
194,7 → 194,7
}
return $observations;
}
 
private function traiterLieu($donnee) {
$lieu = array();
if (!$this->etreNull($donnee->lieudit)) {
205,7 → 205,7
}
return implode(', ', $lieu);
}
 
private function chargerImages(Array $obs_ids) {
// Récupération des données au format Json
$service = 'CelImage/liste-ids?obsId='.implode(',', $obs_ids);
212,13 → 212,13
$url = sprintf($this->config['settings']['baseURLServicesCelTpl'], $service);
$json = $this->getRestClient()->consulter($url);
$donnees = json_decode($json);
 
// Post-traitement des données
$images = $this->traiterImages($donnees);
 
return $images;
}
 
private function traiterImages($donnees) {
$images = array();
if (count($donnees) > 0) {
229,12 → 229,12
$urls['miniature'] = $this->getUrlImage($id_img, 'CXS');
$urls['normale'] = $this->getUrlImage($id_img, 'XL');
$images[$id_obs][] = $urls;
}
}
}
}
return $images;
}
 
private function ajouterImagesAuxObs($observations) {
$images = $this->chargerImages(array_keys($observations['observations']));
foreach ($observations['observations'] as $id => $infos) {
245,7 → 245,7
}
return $observations;
}
 
private function ajouterAuteursAuxObs($observations) {
$observateurs = $this->recupererUtilisateursIdentite(array_keys($observations['observateurs']));
unset($observations['observateurs']);
257,7 → 257,7
}
return $observations;
}
 
private function supprimerIdDesObs($observations) {
// Le tableau de sortie ne doit pas avoir les id des obs en clé car sinon Jquery Template ne fonctionne pas
$observationSansId = $observations;
267,13 → 267,13
}
return $observationSansId;
}
 
/**
* Liste des taxons présents sur la carte
*/
public function getTaxons($params) {
$json = null;
 
$requete = 'SELECT SQL_CALC_FOUND_ROWS DISTINCT nom_ret, nom_ret_nn, nt, famille '.
'FROM cel_obs AS co '.
' LEFT JOIN cel_zones_geo AS l '.
295,16 → 295,16
//$this->debug[] = $requete;
//die($requete);
$resultats = Cel::db()->requeter($requete, self::SQL_RETOUR_COMPLET, self::SQL_MODE_OBJET);
 
$requete = 'SELECT FOUND_ROWS()';
$taxons['total'] = (int) Cel::db()->requeter($requete, self::SQL_RETOUR_COLONNE);
 
// Post-traitement
$taxons['taxons'] = $this->traiterTaxons($resultats);
 
return $taxons;
}
 
private function traiterTaxons($donnees) {
$taxons = array();
if (is_array($donnees) && count($donnees) > 0) {
322,7 → 322,7
$taxons = array_values($taxons);
return $taxons;
}
 
private function construireWhereCoordonnees() {
$sql = '';
// Récupération des coordonnées depuis l'id station
332,18 → 332,18
$secteur = Cel::db()->proteger($secteur);
$utm_x = Cel::db()->proteger($utm_x);
$utm_y = Cel::db()->proteger($utm_y);
 
$sql = " AND (utm_secteur = $secteur AND utm_x = $utm_x AND utm_y = $utm_y ) ";
} else if ($type == 'LngLat') {
$latitude = Cel::db()->proteger($latitude);
$longitude = Cel::db()->proteger($longitude);
 
$sql = " AND (latitude = $latitude AND longitude = $longitude ) ";
}
}
}
return $sql;
}
 
private function construireWhereCommentaire() {
$sql = '';
list($type, $commentaire) = $this->decomposerParametreCommentaire();
368,12 → 368,12
break;
default:
$sql = " AND co.commentaire LIKE $commentaire ";
}
}
}
return $sql;
}
 
 
private function construireWhereNomTaxon() {
$sql = '';
list($type, $nom) = $this->decomposerParametreTaxon();
394,24 → 394,24
break;
default:
$sql = " AND nom_ret LIKE $nom ";
}
}
}
return $sql;
}
 
private function construireWhereDate() {
$sql = '';
// Récupération des coordonnées depuis l'id station
list($type, $date) = $this->decomposerParametreDate();
 
if (!$this->etreNull($date)) {
$date = Cel::db()->proteger($date.'%');
switch ($type) {
case '*' :
$sql = " AND (
date_observation LIKE $date
OR date_creation LIKE $date
OR date_modification LIKE $date
date_observation LIKE $date
OR date_creation LIKE $date
OR date_modification LIKE $date
OR date_transmission LIKE $date) ";
break;
case 'observation' :
441,7 → 441,7
}
return $sql;
}
 
private function obtenirConditionPourDatePhoto($date) {
$observations = $this->obtenirObsLieesImg('date.photo', $date);
if (is_null($observations)) {
450,7 → 450,7
$sql = $this->assemblerObsEnConditionSql($observations);
return $sql;
}
 
private function obtenirConditionPourDateLiaison($date) {
$observations = $this->obtenirObsLieesImg('date.liaison', $date);
if (is_null($observations)) {
468,7 → 468,7
$sql = $this->assemblerObsEnConditionSql($observations);
return $sql;
}
 
private function obtenirConditionPourCommentaireMeta($commentaire) {
$observations = $this->obtenirObsLieesImg('commentaire.meta', $commentaire);
if (is_null($observations)) {
478,7 → 478,7
$sql = $this->assemblerObsEnConditionSql($observations, $operateur);
return $sql;
}
 
private function obtenirConditionPourCommentaireUtilisateur($commentaire) {
$observations = $this->obtenirObsLieesImg('commentaire.utilisateur', $commentaire);
if (is_null($observations)) {
488,7 → 488,7
$sql = $this->assemblerObsEnConditionSql($observations, $operateur);
return $sql;
}
 
private function obtenirConditionPourCommentaires($commentaire) {
$observations = $this->obtenirObsLieesImg('commentaire.*', $commentaire);
if (is_null($observations)) {
498,7 → 498,7
$sql = $this->assemblerObsEnConditionSql($observations, $operateur);
return $sql;
}
 
/**
* Récupération des identifiant d'utilisateur et des ordres des observations correspondant à une date.
* Retour sous forme de tableau : array[identifiant] = array(ordre, ordre...);
521,7 → 521,7
//($type == 'commentaire.meta' ? " AND ci.commentaire LIKE $param " : '').
($type == 'commentaire.utilisateur' ? " AND ci.commentaire LIKE $param " : '').
($type == 'commentaire.*' ? " AND (ci.commentaire LIKE $param) " : '').
$this->construireWhereCoordonnees().
$this->construireWhereCoordonnees().
$this->construireWhereDept().
$this->construireWhereCommune().
$this->construireWhereUtilisateur().
532,8 → 532,8
'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) {
$observations = array();
550,7 → 550,7
}
return $observations;
}
 
private function assemblerObsEnConditionSql($observations, $operateur = 'AND') {
$sql = '';
if ($observations != null) {
569,7 → 569,7
$sql = " $operateur ($sql) ";
return $sql;
}
 
private function construireWhereDept() {
$sql = '';
// Récupération des coordonnées depuis l'id station
584,7 → 584,7
}
return $sql;
}
 
private function construireWhereCommune() {
$sql = '';
// Récupération des coordonnées depuis l'id station
595,7 → 595,7
}
return $sql;
}
 
private function construireWherePhotosSeulement() {
$sql = '';
if (isset($this->parametres['photos']) && $this->parametres['photos'] == 1) {
603,8 → 603,8
}
return $sql;
}
 
 
private function construireWhereUtilisateur() {
$sql = '';
// Récupération des coordonnées depuis l'id station
615,7 → 615,7
}
return $sql;
}
 
private function construireWhereNumTaxon() {
$sql = '';
// Récupération des coordonnées depuis l'id station
626,7 → 626,7
}
return $sql;
}
 
private function construireWhereProjet() {
$sql = '';
// Récupération des coordonnées depuis l'id station
637,7 → 637,7
}
return $sql;
}
 
/**
* Traitement de $projet pour construction du filtre dans la requête
*/
648,7 → 648,7
}
return $sql;
}
 
private function construireWhereTag() {
$sql = '';
extract($this->parametres);
658,7 → 658,7
}
return $sql;
}
 
/**
* Traitement de $tag pour construction du filtre dans la requête
*/
685,11 → 685,11
'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) {
 
$filtres = array();
foreach ($elements_tag as $occurence) {
$utilisateur = $occurence['utilisateur'];
701,13 → 701,13
$filtres[$utilisateur][$id_obs] = $id_obs;
}
}
 
// Pré-construction du where de la requête
$tpl_where = "(id_observation IN (%s))";
foreach ($filtres as $utilisateur => $id_obs) {
$requete_tag[] = sprintf($tpl_where, implode(',', $id_obs));
}
 
} else {
$this->messages[] = "Aucune observation ne possède d'images avec ce mot-clé.";
}
717,7 → 717,7
}
return $sql;
}
 
/**
* Traitement de $tag pour construction du filtre dans la requête
*/
729,7 → 729,7
//$this->debug[] = $sql;
return $sql;
}
 
/**
* Traitement de $tag pour construction du filtre dans la requête
*/
741,9 → 741,9
$where_mots_cles_images = implode(' '.$mots_cles_encodes['type'].' ', $where_mots_cles_images);
return $where_mots_cles_images;
}
 
private function decomposerParametreTag($tags) {
 
$mots_cles = array('type' => null, 'motsCles' => null, 'motsClesEncodesProteges' => null);
if (preg_match('/.+OU.+/', $tags)) {
$mots_cles['type'] = 'OR';
754,7 → 754,7
} else {
$mots_cles['motsCles'][] = $tags;
}
 
foreach ($mots_cles['motsCles'] as $mot) {
$mots_cles['motsClesEncodesProteges'][] = Cel::db()->quote('%'.$mot.'%');
}
761,7 → 761,7
$this->debug[] = $mots_cles;
return $mots_cles;
}
 
private function decomposerParametreStation() {
$station_infos = array();
if (isset($this->parametres['station'])) {
768,7 → 768,7
$station = $this->parametres['station'];
$this->debug[] = $station;
list($type, $coord) = explode(':', $station);
 
if ($type == 'UTM') {
list($utm_x, $utm_y, $secteur) = explode('-', $coord);
$station_infos = array('utm_x' => $utm_x, 'utm_y' => $utm_y, 'secteur' => $secteur);
780,7 → 780,7
}
return $station_infos;
}
 
private function decomposerParametreDate() {
$date_infos = array(null,null);
if (isset($this->parametres['date'])) {
790,17 → 790,17
} else {
$type = 'observation';
}
 
$date = str_replace('/', '-', $date);
if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $date, $matches)) {
$date = $matches[3].'-'.$matches[2].'-'.$matches[1];
}
 
$date_infos = array($type, $date);
}
return $date_infos;
}
 
private function decomposerParametreTaxon() {
$nom_infos = array(null, null);
if (isset($this->parametres['taxon'])) {
813,7 → 813,7
}
return $nom_infos;
}
 
private function decomposerParametreCommentaire() {
$commentaire_infos = array(null, null);
if (isset($this->parametres['commentaire'])) {
/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.
*
28,7 → 28,7
$parametres = $this->traiterParametres(array('mode'), $params, false);
extract($parametres);
$contenu = '';
 
$retour = null;
if (isset($mode)) {
$methode = $this->traiterNomMethodeGet($mode);
50,14 → 50,16
}
 
/**
* 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();
 
if (isset($_GET['obsId'])) {
$observations = $this->traiterValeursMultiples($_GET['obsId']);
 
if (! is_null($observations)) {
$requete = 'SELECT co.id_observation, cim.id_image '.
'FROM cel_obs AS co '.
66,14 → 68,14
' LEFT JOIN cel_images AS cim '.
' ON (coi.id_image = cim.id_image) '.
"WHERE co.id_observation IN ($observations) ";
 
$resultat_requete_images = Cel::db()->requeter($requete);
 
$infos = array();
if(is_array($resultat_requete_images)) {
$infos = $resultat_requete_images;
}
 
foreach ($infos as $info) {
if(is_numeric($info['id_image'])) {
$ids[$info['id_observation']][] = (int) $info['id_image'];
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/CelWidgetMapPoint.php
91,9 → 91,9
 
public function getTout($params) {
 
$emplacements = null;
$emplacements = null;
$concatenation_id = "CONCAT(IFNULL(latitude,''),IFNULL(longitude,''), IFNULL(wgs84_latitude,''),IFNULL(wgs84_longitude,'')) ";
 
$requete = 'SELECT ce_zone_geo, zone_geo, station, '.
"mots_cles_texte, ".
"latitude, ".
121,12 → 121,12
$this->construireWhereTag().
$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;
}
 
private function afficherRequeteFormatee($requete) {
$requete = str_replace(')',')<br />',$requete);
$requete = str_replace('(',' <br /> (',$requete);
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'];
}
 
304,7 → 304,7
}
return $sensible;
}
 
private function communeEstDemandee() {
$station_infos = $this->decomposerParametreStation();
$commune_demandee = true;
438,7 → 438,7
}
return $observations;
}
 
private function ajouterAuteursAuxObs($observations) {
$observateurs = $this->recupererUtilisateursIdentite(array_keys($observations['observateurs']));
unset($observations['observateurs']);
536,7 → 536,7
}
return $sql;
}
 
private function construireWhereCoordonneesSansSensibles() {
$sql = '(';
// Récupération des coordonnées depuis l'id station
610,7 → 610,7
}
return $sql;
}
 
private function construireWhereReferentiel() {
$sql = '';
extract($this->parametres);
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) {
829,12 → 829,12
$sql = "( (latitude != 0 AND longitude != 0) ".
" AND latitude BETWEEN $latMin AND $latMax ".
" AND longitude BETWEEN $lngMin AND $lngMax )";
 
/*$sql = " MBRWithin(mon_point, GeomFromText('POLYGON((".$latMin.' '.$lngMin.','.
$latMax.' '.$lngMin.','.
$latMax.' '.$lngMax.','.
$latMax.' '.$lngMin.','.
$latMin.' '.$lngMin."))')) "; */
$latMin.' '.$lngMin."))')) "; */
}
return $sql;
}
873,7 → 873,7
$sql = "( wgs84_longitude != 0 AND wgs84_latitude != 0 ".
" AND wgs84_latitude BETWEEN $latMin AND $latMax ".
" AND wgs84_longitude BETWEEN $lngMin AND $lngMax )";
 
/*$sql = " MBRWithin(point_commune, GeomFromText('POLYGON((".$latMin.' '.$lngMin.','.
$latMax.' '.$lngMin.','.
$latMax.' '.$lngMax.','.
923,12 → 923,12
')'.
' OR mots_cles_texte LIKE "%sensible%"'.
') ';
 
}
return $sql;
}
 
 
private function construireWherePhotosSeulement() {
$sql = '';
if (isset($this->parametres['photos']) && $this->parametres['photos'] == 1) {
948,8 → 948,8
}
return $sql;
}
 
 
private function construireWhereNumTaxon() {
$sql = '';
// Récupération des coordonnées depuis l'id station
960,7 → 960,7
}
return $sql;
}
 
private function construireWhereNumTaxonAvecSousTaxons() {
$sql = '';
// Récupération des coordonnées depuis l'id station
981,7 → 981,7
}
return $sql;
}
 
private function obtenirSousTaxons($nt) {
$referentiel = 'bdtfx';
if(isset($this->parametres['referentiel']) && $this->parametres['referentiel'] != "" && $this->parametres['referentiel'] != '*') {
1005,7 → 1005,7
}
return $sql;
}
 
/**
* Traitement de $projet pour construction du filtre dans la requête
*/
1016,7 → 1016,7
}
return $sql;
}
 
private function construireWhereTag() {
$sql = '';
extract($this->parametres);
1026,7 → 1026,7
}
return $sql;
}
 
private function construireWhereNombreDeJours() {
$sql = null;
extract($this->parametres);
1035,7 → 1035,7
}
return $sql;
}
 
/**
* Traitement de $tag pour construction du filtre dans la requête
*/
1063,11 → 1063,11
'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) {
 
$filtres = array();
foreach ($elements_tag as $occurence) {
$utilisateur = $occurence['utilisateur'];
1079,13 → 1079,13
$filtres[$utilisateur][$id_obs] = $id_obs;
}
}
 
// Pré-construction du where de la requête
$tpl_where = "(id_observation IN (%s))";
foreach ($filtres as $utilisateur => $id_obs) {
$requete_tag[] = sprintf($tpl_where, implode(',', $id_obs));
}
 
} else {
$this->messages[] = "Aucune observation ne possède d'images avec ce mot-clé.";
}
1095,7 → 1095,7
}
return $sql;
}
 
/**
* Traitement de $tag pour construction du filtre dans la requête
*/
1107,7 → 1107,7
//$this->debug[] = $sql;
return $sql;
}
 
/**
* Traitement de $tag pour construction du filtre dans la requête
*/
1119,9 → 1119,9
$where_mots_cles_images = implode(' '.$mots_cles_encodes['type'].' ', $where_mots_cles_images);
return $where_mots_cles_images;
}
 
private function decomposerParametreTag($tags) {
 
$mots_cles = array('type' => null, 'motsCles' => null, 'motsClesEncodesProteges' => null);
if (preg_match('/.+OU.+/', $tags)) {
$mots_cles['type'] = 'OR';
1132,7 → 1132,7
} else {
$mots_cles['motsCles'][] = $tags;
}
 
foreach ($mots_cles['motsCles'] as $mot) {
$mots_cles['motsClesEncodesProteges'][] = Cel::db()->quote('%'.$mot.'%');
}
/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);
260,7 → 260,7
$contenu = '';
if (isset($_GET['debut'])) $this->start = $_GET['debut'];
if (isset($_GET['limite'])) $this->limit = $_GET['limite'];
 
$this->limit = ($this->limit < 1000) ? $this->limit : 1000;// Pour éviter les abus !
 
// Construction de la requête
281,9 → 281,9
$requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby :
'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) {
$contenu = $this->executerService($elements);
348,7 → 348,7
}
return $requete;
}
 
private function creerSousRequeteTags($tag) {
$requete = '(id_observation IN (SELECT id_observation FROM cel_obs_images coi INNER JOIN cel_images ci ON coi.id_image = ci.id_image WHERE ';
$where = '';
537,13 → 537,13
$description = $this->nettoyerTexte($description);
return $description;
}
 
private function creerDescriptionChampsEtendus($obs, $item) {
$champs_etendus = '';
foreach($obs['obs_etendue'] as $cle => &$champ) {
$champs_etendus .= '<li>'.$champ->label.' : '.$champ->valeur.' </li>';
}
 
if($champs_etendus != '') {
$champs_etendus = '<li> Champs supplémentaires : <ul>'.$champs_etendus.'</ul></li>';
}
572,14 → 572,14
}
return $url_service;
}
 
private function getIntituleAuteur($courriel) {
 
private function getIntituleAuteur($courriel) {
$courriel = strtolower($courriel);
if(isset($this->auteurs[$courriel])) {
if(isset($this->auteurs[$courriel])) {
$intitule = $this->auteurs[$courriel];
} else {
$intitule = $courriel;
}
return $intitule;
}
return $intitule;
}
}
/trunk/jrest/lib/RechercheImage.php
11,11 → 11,11
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
 
/**
* in : utf8
* out : utf8
*
*
* Librairie recherche d'images a partir de divers critères
*
*/
24,7 → 24,7
function rechercherImagesEtObservationAssociees($id_utilisateur = null, $criteres = array(), $debut = 0, $limite = 50)
{
$images_trouvees = $this->rechercherImages($id_utilisateur, $criteres, $debut, $limite);
 
$retour = array();
 
foreach($images_trouvees as $image)
37,12 → 37,12
}
 
public function rechercherImages($id_utilisateur = null, $criteres = array(), $debut = 0 , $limite = 50) {
 
$ordre = (isset($criteres['tri']) && $criteres['tri']) ? $criteres['tri'] : 'ci.ordre';
unset($criteres['tri']);
$direction = (isset($criteres['dir']) && $criteres['dir']) ? $criteres['dir'] : 'ASC';
unset($criteres['dir']);
 
$debut = ($debut < 0) ? 0 : $debut;
$requete_recherche_images = 'SELECT * ';
 
49,25 → 49,25
if ($this->doitJoindreTableObs($criteres)) {
$requete_recherche_images .= $this->fabriquerRequeteJointureObs();
$requete_recherche_images .= ($id_utilisateur != null) ? 'AND ci.ce_utilisateur = '.Cel::db()->proteger($id_utilisateur) : '';
 
} else {
$requete_recherche_images .= 'FROM cel_images ci ';
$requete_recherche_images .= 'FROM cel_images ci ';
$requete_recherche_images .= ($id_utilisateur != null) ? 'WHERE ci.ce_utilisateur = '.Cel::db()->proteger($id_utilisateur) : '';
}
 
$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
$requete_recherche_images .= $sous_requete_recherche;
 
$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;
}
 
public function compterImages($id_utilisateur = null, $criteres = array()) {
 
$ordre = (isset($criteres['tri']) && $criteres['tri']) ? $criteres['tri'] : 'ci.ordre';
unset($criteres['tri']);
$direction = (isset($criteres['dir']) && $criteres['dir']) ? $criteres['dir'] : 'ASC';
74,64 → 74,64
unset($criteres['dir']);
 
$requete_recherche_images = 'SELECT COUNT(*) as nb_images ';
 
if ($this->doitJoindreTableObs($criteres)) {
$requete_recherche_images .= $this->fabriquerRequeteJointureObs();
$requete_recherche_images .= ($id_utilisateur != null) ? 'AND ci.ce_utilisateur = '.Cel::db()->proteger($id_utilisateur) : '';
 
} else {
$requete_recherche_images .= 'FROM cel_images ci ';
$requete_recherche_images .= 'FROM cel_images ci ';
$requete_recherche_images .= ($id_utilisateur != null) ? 'WHERE ci.ce_utilisateur = '.Cel::db()->proteger($id_utilisateur) : '';
}
 
$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
 
$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'];
}
}
 
return $nb_images;
}
 
private function doitJoindreTableObs($criteres = array()) {
$criteres_obs = array('zone_geo','ce_zone_geo','taxon','transmission','recherche');
return count(array_intersect(array_keys($criteres),$criteres_obs)) > 0;
return count(array_intersect(array_keys($criteres),$criteres_obs)) > 0;
}
 
private function fabriquerRequeteJointureObs() {
 
$requete_jointure_observations = 'FROM cel_obs_images coi '.
'INNER JOIN cel_obs co '.
'ON coi.id_observation = co.id_observation '.
'INNER JOIN cel_images ci '.
'ON coi.id_image = ci.id_image '.
'ON coi.id_image = ci.id_image '.
'WHERE co.ce_utilisateur = ci.ce_utilisateur ';
 
return $requete_jointure_observations;
}
 
public function obtenirInformationsObservationsAssociees($id_utilisateur, $id_image) {
 
$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 = '';
foreach($resultats_liaisons_images as $liaison) {
$ids_obs .= $liaison['id_observation'].",";
 
foreach($resultats_liaisons_images as $liaison) {
$ids_obs .= $liaison['id_observation'].",";
}
$ids_obs = rtrim($ids_obs,',');
$ids_obs = rtrim($ids_obs,',');
$infos_obs = '';
 
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)
{
138,26 → 138,26
$infos_obs .= $obs_liee['ordre'].'#'.$obs_liee['nom_sel'].'#'.$obs_liee['transmission'].';;' ;
}
}
 
return $infos_obs;
}
 
private function fabriquerSousRequeteRecherche($id_utilisateur, $criteres) {
 
$sous_requete = ' AND ';
 
foreach($criteres as $nom => $valeur)
{
if($valeur == null || trim($nom) == "" || trim($valeur) == "") {
continue;
continue;
}
 
switch($nom) {
 
case "mots_cles";
$sous_requete .= $this->creerSousRequeteMotsCles($valeur);
$sous_requete .= $this->creerSousRequeteMotsCles($valeur);
break;
 
case "id_mots_cles";
$liste_mc = '"'.str_replace(';','","',$valeur).'"';
$tpl_sous_requete = GestionMotsClesChemin::obtenirTemplateRequeteMotsClesIds('images');
164,10 → 164,10
$sous_requete .= 'id_image IN ('.sprintf($tpl_sous_requete, $liste_mc).')';
$sous_requete .= ' AND ' ;
break;
 
case "commentaire":
$mots_comment_liste = explode(" " , $valeur) ;
 
foreach($mots_comment_liste as $mot_comment)
{
$mot_comment = trim($mot_comment) ;
175,7 → 175,7
$sous_requete .= ' AND ' ;
}
break;
 
case "annee":
case "mois":
case "jour":
182,22 → 182,22
$sous_requete .= $this->fabriquerSousRequeteRechercheDate($nom, $valeur) ;
$sous_requete .= ' AND ' ;
break;
 
case "tampon":
$ids_tampon = rtrim($valeur, ',') ;
$sous_requete .= 'ci.id_images IN ( '.Cel::db()->proteger($ids_tampon).')' ;
break;
 
case "recherche":
$sous_requete .= $this->fabriquerSousRequeteRechercheGenerale($id_utilisateur, $valeur);
$sous_requete .= ' AND ';
break;
 
case "transmission":
$sous_requete .= 'co.transmission = '.Cel::db()->proteger($valeur) ;
$sous_requete .= ' AND ';
break;
 
case "taxon":
$valeur = str_replace('indetermine','null',$valeur);
$sous_requete .= ' (';
204,9 → 204,9
$sous_requete .= 'co.nom_ret LIKE '.Cel::db()->proteger($valeur.'%') ;
$sous_requete .= ' OR ' ;
$sous_requete .= 'co.nom_sel LIKE '.Cel::db()->proteger($valeur.'%') ;
$sous_requete .= ') AND ' ;
$sous_requete .= ') AND ' ;
break;
 
case "auteur":
$sous_requete .= '(ci.ce_utilisateur LIKE '.Cel::db()->proteger($valeur.'%').' OR '.
'ci.courriel_utilisateur LIKE '.Cel::db()->proteger($valeur.'%').' OR '.
214,7 → 214,7
'ci.prenom_utilisateur LIKE '.Cel::db()->proteger($valeur.'%').
') AND ';
break;
 
case "ce_zone_geo":
if($valeur == "NULL") {
$sous_requete .= "(co.ce_zone_geo IS NULL OR co.ce_zone_geo = '')";
222,20 → 222,20
$sous_requete .= '(co.ce_zone_geo LIKE '.(is_numeric($valeur) ? Cel::db()->proteger('INSEE-C:'.$valeur.'%') : Cel::db()->proteger($valeur)).') ';
}
break;
 
case "zone_geo":
if($valeur == "NULL") {
$sous_requete .= "(co.zone_geo IS NULL OR co.zone_geo = '')";
} else {
$sous_requete .= '(co.zone_geo = '.Cel::db()->proteger($valeur).') ';
}
}
break;
 
case "famille":
$sous_requete .= 'co.famille = '.Cel::db()->proteger($valeur) ;
$sous_requete .= ' AND ' ;
break;
 
default:
$sous_requete .= 'ci.'.$nom.' = '.Cel::db()->proteger($valeur) ;
$sous_requete .= ' AND ' ;
244,51 → 244,51
}
 
$sous_requete = rtrim($sous_requete,' AND ');
 
return $sous_requete;
}
 
private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $chaine_recherche) {
 
if(trim($chaine_recherche) == '') {
return '';
}
 
$chaine_recherche = strtolower($chaine_recherche);
$chaine_recherche = str_replace(' ','_',$chaine_recherche);
 
$requete = ' ('.
'ci.nom_original LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
'co.nom_ret LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
'co.nom_sel LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
'co.zone_geo LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
'co.ce_zone_geo LIKE '.Cel::db()->proteger('%'.$chaine_recherche.'%').' OR '.
//TODO: recherche multicriteres sur mots clés texte ne fonctionne pas à cause de la jointure
//'ci.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$chaine_recherche.'%').' OR '.
'co.nom_ret LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
'co.nom_sel LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
'co.zone_geo LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
'co.ce_zone_geo LIKE '.Cel::db()->proteger('%'.$chaine_recherche.'%').' OR '.
//TODO: recherche multicriteres sur mots clés texte ne fonctionne pas à cause de la jointure
//'ci.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$chaine_recherche.'%').' OR '.
'ci.ce_utilisateur LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
'ci.courriel_utilisateur LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
'ci.nom_utilisateur LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
'ci.prenom_utilisateur LIKE '.Cel::db()->proteger($chaine_recherche.'%').' '.
') ';
 
return $requete;
}
 
private function fabriquerSousRequeteRechercheDate($intervalle, $valeur) {
 
$correspondance_champ = array('annee' => 'YEAR','mois' => 'MONTH','jour' => 'DAY');
 
$requete_recherche_date = '';
 
if(is_numeric($valeur) && $valeur != "00") {
if(is_numeric($valeur) && $valeur != "00") {
$requete_recherche_date = '('.$correspondance_champ[$intervalle].'(ci.date_prise_de_vue) = '.Cel::db()->proteger($valeur).') ';
} else {
$requete_recherche_date = '(ci.date_prise_de_vue IS NULL OR ci.date_prise_de_vue = "0000-00-00")';
}
 
return $requete_recherche_date;
}
 
private function creerSousRequeteMotsCles($mot_cle) {
//TODO: une requête plus efficace serait possible en utilisant
// les vraies tables de mots clés et en faisant disparaitre ce champ maudit
308,7 → 308,7
} else {
$requete = "(ci.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
}
$requete .= ' AND ';
$requete .= ' AND ';
return $requete;
}
 
322,16 → 322,16
$mots_cles_chaine = rtrim($mots_cles_chaine,',');
$image['mots_cles'] = $mots_cles_chaine;
}
 
return $tableau_images;
}
 
public function obtenirCourrielUtilisateurPourIdImage($id_image) {
$requete = 'SELECT courriel_utilisateur FROM cel_images WHERE '.
'id_image = '.Cel::db()->proteger($id_image);
$utilisateur_courriel = Cel::db()->executerRequete($requete);
'id_image = '.Cel::db()->proteger($id_image);
 
$utilisateur_courriel = Cel::db()->requeter($requete);
 
$retour = false;
if(!empty($utilisateur_courriel) && isset($utilisateur_courriel[0]['courriel_utilisateur'])) {
$retour = $utilisateur_courriel[0]['courriel_utilisateur'];
338,28 → 338,28
}
return $retour;
}
 
private function getIdsMotsClesImage($id_image) {
 
$requete_selection_mots_cles = 'SELECT DISTINCT id_mot_cle '.
'FROM cel_mots_cles_images_liaison '.
'WHERE id_element_lie = '.$id_image;
return Cel::db()->executerRequete($requete_selection_mots_cles);
'WHERE id_element_lie = '.$id_image;
 
return Cel::db()->requeter($requete_selection_mots_cles);
}
 
// TODO: fonction temporaire
private function formaterDateSqlVersDateAvecSlash($date_sql) {
 
$date_formatee = '';
 
$date = explode("-",$date_sql) ;
if(count($date) > 2)
{
$image['date_prise_de_vue'] = $date[2].'/'.$date[1].'/'.$date[0] ;
}
return $date_formatee;
 
return $date_formatee;
}
}
?>
/trunk/jrest/lib/RechercheInfosTaxon.php
13,211 → 13,201
*/
 
/**
*
*
* Classe de recherche d'informations sur un taxon donné
* lors de l'évolution d'eflore, devrait être remplacée par
* lors de l'évolution d'eflore, devrait être remplacée par
* un appel aux nouveaux web services
*/
class RechercheInfosTaxon extends Cel {
 
public function RechercheInfosTaxon($config) {
parent::__construct($config);
 
parent::__construct($config);
// Connection à la base de données spécifique eflore
$this->bdd = $this->connecterPDO($this->config, 'eflore');
$this->bdd = $this->connecterPDO($this->config, 'eflore');
}
 
public function rechercherGenreEspeceSurPrefixe($genre = null, $espece = null) {
$liste_genre_espece = array();
 
$liste_genre_espece = array();
 
$requete_recherche = '';
// Genre et Espece
if ($espece != null && $genre != null) {
if (strlen($espece) > 0 ) {
$espece=preg_replace('/\*+/','%',$espece);
$requete_recherche = "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 ".
" , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
" , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
" , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom, esn_ce_statut" .
" 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".
" WHERE en_id_version_projet_nom = '25' AND en_nom_genre LIKE ".Cel::db()->proteger($genre.'%').
" AND en_ce_rang > 160 " .
" AND en_epithete_espece like ".Cel::db()->proteger($espece.'%')." AND en_ce_rang = enrg_id_rang " .
" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
" AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
" AND esn_id_nom= en_id_nom ".
" ORDER BY esn_ce_statut, en_ce_rang, en_epithete_espece, en_nom_genre LIMIT 50";
}
}
else {
// Genre et Espece
if ($espece != null && $genre != null) {
if (strlen($espece) > 0 ) {
$espece = preg_replace('/\*+/','%',$espece);
$requete_recherche = "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 ".
" , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
" , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
" , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom, esn_ce_statut" .
" 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".
" WHERE en_id_version_projet_nom = '25' AND en_nom_genre LIKE ".Cel::db()->proteger($genre.'%').
" AND en_ce_rang > 160 " .
" AND en_epithete_espece like ".Cel::db()->proteger($espece.'%')." AND en_ce_rang = enrg_id_rang " .
" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
" AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
" AND esn_id_nom= en_id_nom ".
" ORDER BY esn_ce_statut, en_ce_rang, en_epithete_espece, en_nom_genre LIMIT 50";
}
} else {
if ($genre != null) {
$genre=preg_replace('/\*+/','%',$genre);
$genre = preg_replace('/\*+/', '%', $genre);
//TODO: comprendre pourquoi à l'origine il y avait : (strlen($genre) >= 1) /*&& ($genre != '%')
// voir avec david
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";
}
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";
}
}
}
if ($requete_recherche != '') {
$resultat_recherche = Cel::db()->executerRequete($requete_recherche);
if (is_array($resultat_recherche)) {
foreach ($resultat_recherche as $ligne) {
$liste_genre_espece[] = array($this->formaterNom($ligne),
$ligne['en_id_nom'],
$ligne['esn_ce_statut']
);
}
}
}
 
if ($requete_recherche != '') {
$resultat_recherche = Cel::db()->requeter($requete_recherche);
 
if (is_array($resultat_recherche)) {
foreach ($resultat_recherche as $ligne) {
$liste_genre_espece[] = array($this->formaterNom($ligne),
$ligne['en_id_nom'],
$ligne['esn_ce_statut']
);
}
}
}
 
return $liste_genre_espece;
}
 
function rechercherInformationsComplementairesSurNumNom($numNom) {
 
$resultat_infos_complementaires = $this->effectuerRequeteInfosComplementairesSurNumNom($numNom);
 
// Nom retenu, Num Nomen nom retenu, Num Taxon, Famille
$value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>"");
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)) {
$fam=$this->rechercherFamille($fam['etr_id_taxon_2']);
}
if ($fam['en_ce_rang']==120) {
$famille=$fam['en_nom_supra_generique'];
}
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);
}
}
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) {
$fam = $this->rechercherFamille($fam['etr_id_taxon_2']);
}
if ($fam['en_ce_rang'] == 120) {
$famille = $fam['en_nom_supra_generique'];
} 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;
}
 
return $value;
public function effectuerRequeteInfosComplementairesEtFormaterNom($numNom) {
$resultat = $this->effectuerRequeteInfosComplementairesSurNumNom($numNom);
 
$infos = array();
foreach ($resultat as $info) {
$infos = array($this->formaterNom($info));
}
return $infos;
}
public function effectuerRequeteInfosComplementairesEtFormaterNom($numNom) {
$resultat_infos_complementaires = $this->effectuerRequeteInfosComplementairesSurNumNom($numNom);
$retour_infos_complementaires = array();
foreach ($resultat_infos_complementaires as $info) {
$retour_infos_complementaires=array(($this->formaterNom($info)));
}
return $retour_infos_complementaires;
}
 
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 ".
" , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
" , 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".
" 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 ".
" AND b.esn_ce_statut=3 ".
" AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
" AND en_ce_rang = enrg_id_rang" .
" AND en_id_nom = b.esn_id_nom" .
" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
" AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
" auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
" , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
" , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
" , 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 ".
" 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 ".
" AND b.esn_ce_statut=3 ".
" AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
" AND en_ce_rang = enrg_id_rang" .
" AND en_id_nom = b.esn_id_nom" .
" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
" 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;
}
 
public function effectuerRequeteInfosComplementairesSurNumTax($numTax) {
 
$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 ".
" , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
" , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
" , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_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 ".
" WHERE esn_id_taxon = '".$numTax. "'".
" AND esn_id_version_projet_taxon = 25 ".
" AND esn_ce_statut=3 ".
" AND en_id_nom = esn_id_nom" .
" AND en_ce_rang = enrg_id_rang" .
" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
" 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);
" auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
" , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
" , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
" , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
" , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_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 ".
" WHERE esn_id_taxon = '".$numTax. "'".
" AND esn_id_version_projet_taxon = 25 ".
" AND esn_ce_statut=3 ".
" AND en_id_nom = esn_id_nom" .
" AND en_ce_rang = enrg_id_rang" .
" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege ".
" AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
" 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()->requeter($requete_infos_complementaires);
 
return $resultat_infos_complementaires;
}
 
public function rechercherInformationsComplementairesSurNom($nom_saisi) {
 
$value = array();
if ($nom_saisi != null && $nom_saisi != "") {
 
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 '.
'(eni_id_valeur_format = 3 OR eni_id_valeur_format = 4) AND '.
'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);
if (is_array($resultat_infos_comp_sur_nom)) {
foreach ($resultat_infos_comp_sur_nom as $ligne) {
$value[]=array($ligne['eni_id_nom'], $ligne['eni_intitule_nom']);
}
}
'WHERE eni_id_categorie_format = 3 AND '.
'eni_id_version_projet_nom = 25 AND '.
'(eni_id_valeur_format = 3 OR eni_id_valeur_format = 4) AND '.
'eni_intitule_nom LIKE "'.$nom_saisi.'%" '.
'ORDER BY LENGTH(eni_intitule_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) {
$value[]=array($ligne['eni_id_nom'], $ligne['eni_intitule_nom']);
}
}
}
 
return $value;
}
 
public function rechercherFamille($taxon) {
$row = array();
 
$requete_famille = "SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique ".
" FROM eflore_taxon_relation, ".
" eflore_selection_nom, ".
231,57 → 221,56
" AND esn_id_version_projet_taxon = etr_id_version_projet_taxon_1 ".
" 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);
if (!is_array($resultat_recherche_famille) || count($resultat_recherche_famille) == 0) {
$resultat_recherche_famille = array('en_ce_rang' => 'fin');
} else {
$resultat_recherche_famille = $resultat_recherche_famille[0];
}
 
$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');
} else {
$resultat_recherche_famille = $resultat_recherche_famille[0];
}
 
return $resultat_recherche_famille;
}
 
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).
" AND a.esn_id_version_projet_taxon = 25 ".
" AND a.esn_id_taxon=b.esn_id_taxon ".
" AND b.esn_ce_statut=3 ".
" AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
" AND en_ce_rang = enrg_id_rang" .
" 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);
$nt = null;
" eflore_selection_nom a, eflore_selection_nom b".
" WHERE a.esn_id_nom= ".Cel::db()->proteger($num_nom).
" AND a.esn_id_version_projet_taxon = 25 ".
" AND a.esn_id_taxon=b.esn_id_taxon ".
" AND b.esn_ce_statut=3 ".
" AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
" AND en_ce_rang = enrg_id_rang" .
" 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()->requeter($requete_num_tax);
 
$nt = null;
if (is_array($res_num_nom) && count($res_num_nom) > 0) {
$nt=$res_num_nom[0]['esn_id_taxon'];
}
 
return $nt;
}
 
public function taxonEstPresentDansDepartement($num_taxon,$code_departement) {
 
$requete_presence_taxon = "SELECT ecd_ce_taxon FROM eflore_zg, eflore_chorologie_donnee ".
"WHERE ecd_ce_taxon = ".Cel::db()->proteger($num_taxon)." ".
"AND ezg_code = ".Cel::db()->proteger($code_departement)." ".
"AND ecd_ce_zone_geo = ezg_id_zone_geo ".
"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);
"WHERE ecd_ce_taxon = ".Cel::db()->proteger($num_taxon)." ".
"AND ezg_code = ".Cel::db()->proteger($code_departement)." ".
"AND ecd_ce_zone_geo = ezg_id_zone_geo ".
"AND ezg_id_projet_zg = ecd_ce_version_projet_zg ".
"AND ecd_ce_version_projet_taxon=25";
 
$resultat_presence_taxon = Cel::db()->requeter($requete_presence_taxon);
 
$presence_taxon = (is_array($resultat_presence_taxon) && count($resultat_presence_taxon) > 0);
 
return $presence_taxon;
}
 
private function decouperNomEtRechercheEspeceOuSousEspece($identifiant_espece) {
$nameparser=new NameParser();
$nom_latin_decoupe=$nameparser->parse($identifiant_espece);
288,15 → 277,15
// requete sous espece (on privilegie les noms retenu cf tri par esn_ce_statut)
if (isset($nom_latin_decoupe['infra']) && $nom_latin_decoupe['infra']!="") {
$requete="SELECT DISTINCT en_id_nom, esn_ce_statut" .
" FROM eflore_nom, eflore_nom_rang, eflore_selection_nom " .
" WHERE en_id_version_projet_nom = '25' AND en_nom_genre = ".Cel::db()->proteger($nom_latin_decoupe['genus'])." " .
" AND enrg_abreviation_rang = ".Cel::db()->proteger($nom_latin_decoupe['infra_type'])." " .
" AND en_epithete_infra_specifique = ".Cel::db()->proteger($nom_latin_decoupe['infra'])." " .
" AND esn_id_nom= en_id_nom ".
" AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
" AND en_epithete_espece = ".Cel::db()->proteger($nom_latin_decoupe['species'])." AND en_ce_rang = enrg_id_rang " .
" ORDER BY esn_ce_statut ".
" LIMIT 1";
" FROM eflore_nom, eflore_nom_rang, eflore_selection_nom " .
" WHERE en_id_version_projet_nom = '25' AND en_nom_genre = ".Cel::db()->proteger($nom_latin_decoupe['genus'])." " .
" AND enrg_abreviation_rang = ".Cel::db()->proteger($nom_latin_decoupe['infra_type'])." " .
" AND en_epithete_infra_specifique = ".Cel::db()->proteger($nom_latin_decoupe['infra'])." " .
" AND esn_id_nom= en_id_nom ".
" AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
" AND en_epithete_espece = ".Cel::db()->proteger($nom_latin_decoupe['species'])." AND en_ce_rang = enrg_id_rang " .
" ORDER BY esn_ce_statut ".
" LIMIT 1";
}
else { // espece (on privilegie les noms retenu cf tri par esn_ce_statut)
$requete="SELECT DISTINCT en_id_nom, esn_ce_statut" .
308,44 → 297,43
" AND en_epithete_espece = ".Cel::db()->proteger($nom_latin_decoupe['species'])." AND en_ce_rang = enrg_id_rang " .
" ORDER BY esn_ce_statut ".
" LIMIT 1";
 
}
$resultat = Cel::db()->executerRequete($requete);
 
$resultat = Cel::db()->requeter($requete);
 
$retour = array();
if (is_array($resultat) && count($resultat) > 0) {
$retour = $resultat[0];
}
 
return $retour;
}
 
private function formaterNom($rawnom) {
// Constitution du nom:
$nom = '';
 
// Constitution du nom:
$nom = '';
if (isset($rawnom['en_nom_supra_generique']) && $rawnom['en_nom_supra_generique'] != '') {
$nom .= $rawnom['en_nom_supra_generique'];
} else if (isset($rawnom['en_epithete_infra_generique']) && $rawnom['en_epithete_infra_generique'] != '') {
$nom .= $rawnom['en_epithete_infra_generique'];
} else {
if (isset($rawnom['en_nom_genre']) && $rawnom['en_nom_genre'] != '') {
$nom .= $rawnom['en_nom_genre'];
}
if (isset($rawnom['en_epithete_espece']) && $rawnom['en_epithete_espece']!= '') {
$nom .= ' '.$rawnom['en_epithete_espece'];
}
if (isset($rawnom['en_epithete_infra_specifique']) && $rawnom['en_epithete_infra_specifique'] != '') {
if (!empty($rawnom['enrg_abreviation_rang'])) {
$nom .= ' '.$rawnom['enrg_abreviation_rang'].'';
}
$nom .= ' '.$rawnom['en_epithete_infra_specifique'];
}
}
 
if (isset($rawnom['en_nom_supra_generique']) && $rawnom['en_nom_supra_generique'] != '') {
$nom .= $rawnom['en_nom_supra_generique'];
} else if (isset($rawnom['en_epithete_infra_generique']) && $rawnom['en_epithete_infra_generique'] != '') {
$nom .= $rawnom['en_epithete_infra_generique'];
} else {
if (isset($rawnom['en_nom_genre']) && $rawnom['en_nom_genre'] != '') {
$nom .= $rawnom['en_nom_genre'];
}
if (isset($rawnom['en_epithete_espece']) && $rawnom['en_epithete_espece']!= '') {
$nom .= ' '.$rawnom['en_epithete_espece'];
}
if (isset($rawnom['en_epithete_infra_specifique']) && $rawnom['en_epithete_infra_specifique'] != '') {
if (!empty($rawnom['enrg_abreviation_rang'])) {
$nom .= ' '.$rawnom['enrg_abreviation_rang'].'';
}
$nom .= ' '.$rawnom['en_epithete_infra_specifique'];
}
}
 
return $nom.$this->retournerAuteur($rawnom) ;
return $nom.$this->retournerAuteur($rawnom) ;
}
 
private function retournerAuteur($rawnom) {
353,58 → 341,58
$auteur_basio = '';
$auteur_modif = '';
if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' ) {
$auteur_basio .= $rawnom['abreviation_auteur_basio_ex'];
if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
$auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio'];
}
$auteur_basio .= $rawnom['abreviation_auteur_basio_ex'];
if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
$auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio'];
}
} else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
$auteur_basio .= $rawnom['abreviation_auteur_basio'];
$auteur_basio .= $rawnom['abreviation_auteur_basio'];
}
 
if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') {
$auteur_modif .= $rawnom['abreviation_auteur_modif_ex'];
if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') {
$auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif'];
}
$auteur_modif .= $rawnom['abreviation_auteur_modif_ex'];
if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') {
$auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif'];
}
} else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') {
$auteur_modif .= $rawnom['abreviation_auteur_modif'];
$auteur_modif .= $rawnom['abreviation_auteur_modif'];
}
 
if (!empty($auteur_modif)) {
$auteurs = ' ('.$auteur_basio.') '.$auteur_modif;
$auteurs = ' ('.$auteur_basio.') '.$auteur_modif;
} elseif (!empty($auteur_basio)) {
$auteurs = ' '.$auteur_basio;
$auteurs = ' '.$auteur_basio;
}
 
return $auteurs ;
}
 
function rechercherInfosSurTexteCodeOuNumTax($identifiant_espece) {
// texte libre, nom scientifique,
// ou code nomenclatural (format BDNFFnn999999)
// texte libre, nom scientifique,
// ou code nomenclatural (format BDNFFnn999999)
// ou code taxonomique (format BDNFFnt999999)
$identifiant_espece=trim($identifiant_espece);
$identifiant_espece=utf8_encode($identifiant_espece);
$identifiant_espece = trim($identifiant_espece);
$identifiant_espece = utf8_encode($identifiant_espece);
 
$retour = array();
 
preg_match('/BDNFFnn([0-9][0-9]*)/',$identifiant_espece, $elements);
if (isset($elements[1])) {
// Numero nomenclatural
$infos_taxon = $this->rechercherInformationsComplementairesSurNumNom($elements[1]);
$retour = array("nom_sel" => $this->formaterNom($infos_taxon), "en_id_nom" => $elements[1]);
} else {
// Numero taxonomique ou nom scientifique
} else {
// Numero taxonomique ou nom scientifique
preg_match('/BDNFFnt([0-9][0-9]*)/', $identifiant_espece, $elements);
 
if (isset($elements[1])) {
// Numero taxonomique
$infos_taxon = $this->effectuerRequeteInfosComplementairesSurNumTax($elements[1]);
$infos_taxon = $infos_taxon[0];
$retour = array("nom_sel" => $this->formaterNom($infos_taxon), "en_id_nom" => $infos_taxon['en_id_nom']);
} else {
} else {
// Nom scientifique
$id_nom = $this->decouperNomEtRechercheEspeceOuSousEspece($identifiant_espece);
$id_nom = $this->decouperNomEtRechercheEspeceOuSousEspece($identifiant_espece);
// Recherche du nom associe
$retour = array("nom_sel" => $identifiant_espece);
if(is_array($id_nom) && isset($id_nom['en_id_nom'])) {
416,8 → 404,7
}
}
}
 
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,14 → 69,19
}
 
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) {
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,23 → 288,24
}
 
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;
}
 
public function logger($index,$chaine = 'err') {
if(!class_exists('Log')) {
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_infos_utilisateur && is_array($resultat_infos_utilisateur) && count($resultat_infos_utilisateur) > 0) {
$infos_utilisateur = $resultat_infos_utilisateur;
if ($resultat && is_array($resultat) && count($resultat) > 0) {
$infos = $resultat;
}
 
return $infos_utilisateur;
return $infos;
}
 
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]="";
foreach ($tableau as $k => $v) {
if (($v == 'null') || ($v == '000null')) {
$row[$k] = '';
} else {
$row[$k] = utf8_decode($v);
}
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'];
}
475,10 → 495,10
}
 
protected function convertirDateHeureMysqlEnTimestamp($date_heure_mysql){
$val = explode(' ', $date_heure_mysql);
$date = explode('-', $val[0]);
$heure = explode(':', $val[1]);
return mktime((int) $heure[0], (int) $heure[1], (int) $heure[2], (int) $date[1], (int) $date[2], (int) $date[0]);
$val = explode(' ', $date_heure_mysql);
$date = explode('-', $val[0]);
$heure = explode(':', $val[1]);
return mktime((int) $heure[0], (int) $heure[1], (int) $heure[2], (int) $date[1], (int) $date[2], (int) $date[0]);
}
 
protected function etreNull($valeur) {
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,23 → 531,27
}
 
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) {
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'];
681,4 → 704,4
$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);
return $contenu;
}
}
}
/trunk/jrest/lib/FormateurGroupeColonne.php
122,7 → 122,7
if(!$groupe_de_champs) return NULL;
 
$colonnes = Array();
 
if(isset($groupe_de_champs['standard'])) {
$colonnes += Array(
'nom_sel' => self::GenColInfo(Array('abbrev' => 'nom_sel',
177,7 → 177,7
'importable' => FALSE)),
);
}
 
if(isset($groupe_de_champs['avance'])) {
$colonnes += array(
// TODO: importable = FALSE car pas de merge de données importées
222,7 → 222,7
'phenologie' => self::GenColInfo(Array('abbrev' => 'phenologie',
'nom' => 'Phénologie',
'extra' => 1)),
 
// XXX: getImages() dépend du contexte de Cel, et doit être appelée comme cas particulier
// cf ExportXLS::traiterLigneObservation()
'images' => self::GenColInfo(Array('abbrev' => 'images',
302,12 → 302,12
}
return $result;
}
 
public static function getIntitulesColonnes($colonnes) {
// array_filter pour supprimer les colonnes "dynamique" n'ayant pas défini $nom (cf GenColInfo())
return array_filter(array_map(array('FormateurGroupeColonne', 'retournerNomItem'), $colonnes));
}
 
public static function retournerNomItem(&$item) {
return $item['nom'];
}
317,10 → 317,10
foreach($colonnes as $abbrev => $colonne) {
$valeur = null;
if($colonne['extra'] == 2 || ! is_null($colonne['dyna'])) continue;
 
// valeur directe depuis cel_obs ?
if(isset($obs[$abbrev])) $valeur = $obs[$abbrev];
 
// pré-processeur des champs
if(function_exists($colonne['fonction'])) {
$valeur = $colonne['fonction']($valeur);
336,7 → 336,7
elseif(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") {
349,11 → 349,11
if($abbrev == 'nom-commun') {
$valeur = FormateurGroupeColonne::getNomCommun_v4($obs);
}
 
if($valeur == null) {
$valeur = "";
}
 
// // fin de section "cas particuliers"
$ligne_formatee[] = $valeur;
}
369,20 → 369,20
 
return $ligne_formatee;
}
 
/*
* Wrapper générant un tableau associatif:
* Ne pas changer les valeurs par défaut du prototype sans réflexion sur l'implication pour nomEnsembleVersListeColonnes()
 
* @param $abbrev (obligatoire): nom court de colonne, largement utilisé lors de l'import.
* En effet chaque ligne importée est accessible à l'aide du `define` de $abbrev en majuscule, préfixé de "C_"
* Exemple: $ligne[C_LONGITUDE] pour "longitude".
* cf: ImportXLS::detectionEntete()
 
* @param $nom (obligatoire): nom complet de colonne (utilisé pour la ligne d'en-tête)
* Les définition de champs dynamique (correspondant à de multiples colonnes) doivent laisser cette valeur
* vide afin de ne pas créer une colonne supplémentaire erronée.
 
* @param $is_extra:
* Si 0, la colonne est une colonne standard
* Si 1, la colonne est extra [le plus souvent générée automatiquement]
389,14 → 389,14
* (auquel cas une bordure bleue entoure son nom dans la ligne d'entête)
* Si 2, la colonne n'est pas traité à l'export, mais une définition peut lui être donnée
* qui pourra être utilisée à l'import, exemple: "image"
 
* @param $fonction (optionnel): un nom d'un fonction de préprocessing
* $fonction doit prendre comme seul argument la valeur d'origine et retourner la valeur transformée
 
* @param $fonction_data (optionnel): une *méthode* d'obtention de donnée
* $fonction_data doit prendre comme premier argument le tableau des champs de l'enregistrement existant
* $fonction_data doit retourner une valeur
 
* @param $importable (optionnel): défini si la colonne est traitée (ou absolument ignorée par PHPExcel) lors de
* l'import.
 
420,7 → 420,7
$ret = array_intersect_key($args, $default);
return array_merge($default, $ret);
}
 
static function formaterDate($date_heure_mysql) {
//return "";
if (!$date_heure_mysql || $date_heure_mysql == "0000-00-00 00:00:00") return NULL;
480,13 → 480,13
$obs['id_observation']));
return $rec ? $rec[0]['i'] : NULL;
}
public static function convertirCodeZoneGeoVersDepartement($code_zone_geo) {
 
public static function convertirCodeZoneGeoVersDepartement($code_zone_geo) {
$code_departement = '';
if(self::estUnCodeInseeDepartement($code_zone_geo)) {
$code_departement = substr(ltrim($code_zone_geo,'INSEE-C:'),0,2);
}
 
return $code_departement;
}
 
497,12 → 497,12
public static function boolOuiNon($transmission) {
return $transmission ? 'oui' : '';
}
 
public static function estUnCodeInseeDepartement($code_a_tester) {
return preg_match('/^INSEE-C:[0-9]{5}/',$code_a_tester);
}
 
 
// TODO: référentiel ne devrait pas être généré au moment d'un Config::get,
// comme dans Config::get('nomsVernaRechercheLimiteeTpl')
// Par exemple, la variable pour "nva" ?
511,7 → 511,7
list($referentiel) = explode(':', strtolower($obs['nom_referentiel']));
if($referentiel == 'bdtfx') $referentiel = 'nvjfl';
else return '';
 
$cache_id = $referentiel . '-' . $obs['nt'] . '-' . $langue;
if(isset(self::$cache['getNomCommun'][$cache_id])) {
//debug: error_log("require url_service_nom_attribution: OK ! (pour \"{$obs['nom_ret']}\")");
519,7 → 519,7
}
// pas de cache:
//debug: error_log("require url_service_nom_attribution pour \"{$obs['nom_ret']}\"");
 
// pour bdtfx:
// /service:eflore:0.1/nvjfl/noms-vernaculaires/attributions?masque.nt=X&masque.lg=fra&retour.champs=num_statut
// /projet/services/modules/0.1/nvjfl/NomsVernaculaires.php
531,12 → 531,12
if(! $noms) return '';
$noms = array_filter((array)($noms->resultat), array($this, retournerNumStatutUn)); // XXX: php 5.3
$nom = array_pop($noms)->nom_vernaculaire;
 
// cache
self::$cache['getNomCommun'][$cache_id] = $nom;
return $nom;
}
 
private function retournerNumStatutUn(&$item) {
return ($item->num_statut == 1);
}
544,24 → 544,24
private function retournerNumStatutUnArr(&$item) {
return ($item['num_statut'] == 1);
}
 
// si getNomCommun_v2 ou getNomCommun_v3 sont utilisés
/* require_once('/home/raphael/eflore/framework/framework/Framework.php');
Framework::setCheminAppli("/home/raphael/eflore/projets/services/index.php");
Framework::setInfoAppli(Config::get('info'));
require_once('/home/raphael/eflore/projets/services/modules/0.1/Projets.php');*/
 
/* Tente de bootstraper le framework au plus court et d'initialiser une instance de
NomsVernaculaires pour obtenir le nom commun */
function getNomCommun_v2($obs) {
static $service;
$service = new Projets();
 
$langue = 'fra';
list($referentiel) = explode(':', strtolower($obs['nom_referentiel']));
if($referentiel == 'bdtfx') $referentiel = 'nvjfl';
else return '';
 
$cache_id = $referentiel . '-' . $obs['nt'] . '-' . $langue;
if(isset(self::$cache['getNomCommun'][$cache_id])) {
error_log("require NomsVernaculaires.php: OK ! (pour \"{$obs['nom_ret']}\")");
569,33 → 569,33
}
// pas de cache:
error_log("require NomsVernaculaires.php pour \"{$obs['nom_ret']}\"");
 
$donnees = Array('masque.nt' => $obs['nt'],
'masque.lg' => $langue,
'retour.champs' => 'num_statut');
$noms = $service->consulter(Array('nvjfl', 'noms-vernaculaires'), $donnees);
 
if(! $noms) return '';
$noms = array_filter((array)($noms->resultat), array($this, retournerNumStatutUn)); // XXX: php 5.3
$nom = array_pop($noms)->nom_vernaculaire;
 
// cache
self::$cache['getNomCommun'][$cache_id] = $nom;
return $nom;
}
 
 
/* Effectue un bootstraping plus sage que ci-dessus, mais le gain d'efficacité
n'est pas aussi retentissant qu'espéré */
static $service;
function getNomCommun_v3($obs) {
if(! $this->service) $this->service = new Projets();
 
$langue = 'fra';
list($referentiel) = explode(':', strtolower($obs['nom_referentiel']));
if($referentiel == 'bdtfx') $referentiel = 'nvjfl';
else return '';
 
$cache_id = $referentiel . '-' . $obs['nt'] . '-' . $langue;
if(isset(self::$cache['getNomCommun'][$cache_id])) {
error_log("require NomsVernaculaires.php: OK ! (pour \"{$obs['nom_ret']}\")");
603,7 → 603,7
}
// pas de cache:
error_log("require NomsVernaculaires.php pour \"{$obs['nom_ret']}\"");
 
$donnees = Array('masque.nt' => $obs['nt'],
'masque.lg' => $langue,
'retour.champs' => 'conseil_emploi');
610,7 → 610,7
$this->service->initialiserRessourcesEtParametres(Array('nvjfl', 'noms-vernaculaires', 'attributions'), $donnees);
try {
$noms = $this->service->traiterRessources();
} catch(Exception $e) {
} catch(Exception $e) {
return '';
}
if(! $noms) return '';
617,7 → 617,7
$noms = array_filter($noms['resultat'], array($this, retournerNumStatutUnArr)); // XXX: php 5.3
$premier_nom = array_pop($noms);
$nom = $premier_nom['nom_vernaculaire'];
 
// cache
self::$cache['getNomCommun'][$cache_id] = $nom;
return $nom;
642,14 → 642,14
}
 
static function referenceTableExiste() {
if(!self::$is_table) {
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;
}
 
static function getNomCommun_v4($obs) {
if(! $obs['nt']) return NULL;
if(! self::referenceTableExiste()) return NULL;
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"];
705,8 → 704,8
 
return NULL;
}
 
 
static function baseflor_ligne($obs, &$ligne) {
if(! $obs['nom_ret_nn']) {
$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL));
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));
808,7 → 806,7
 
foreach(self::$cache['champsEtendus']['header'] as $colonne) {
if(!isset($ligne_etendue_aplatie[$colonne])) {
$ligne_etendue_fmt[$colonne] = '';
$ligne_etendue_fmt[$colonne] = '';
} else {
$ligne_etendue_fmt[$colonne] = $ligne_etendue_aplatie[$colonne];
}
/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);
}
}
} else {
$this->messages[] = "La requête a protéger contient un nombre impair de caractère de protection '|'.";
$requete = false;
}
return $requete;
public function requeterValeurUnique($requete, $mode = PDO::FETCH_ASSOC) {
return $this->executerRequete($requete, self::SQL_RETOUR_COLONNE, $mode);
}
 
 
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);
}
 
/**
* 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 $sortie;
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);
272,25 → 273,23
}
 
public function modifierTransmissionObservation($ids_obs_ou_tableau, $publier) {
if(is_array($ids_obs_ou_tableau)) {
if (is_array($ids_obs_ou_tableau)) {
$ids_obs_ou_tableau = array_map(array(Cel::db(),'proteger'),$ids_obs_ou_tableau);
$chaine_ids_obs = implode(',',$ids_obs_ou_tableau);
} 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.")";
$resultat_modif_obs = Cel::db()->executerRequeteSimple($requete);
return $resultat_modif_obs;
"SET transmission = $etat_transmission , date_modification = NOW() ".
"WHERE id_observation IN ($chaine_ids_obs) ".
' -- ' . __FILE__ . ':' . __LINE__;
 
$resultat = Cel::db()->executer($requete);
return $resultat;
}
 
/**
* Supprime une ou plusieurs observations grâce aux paramètres fournis
*
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/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,10 → 220,10
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);
}
 
/**
* Revnoie tous les intitules aux éléments passés en paramètre
*
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++;
243,7 → 243,7
}
return array_values(array_flip($cles_fmt));
}
 
/**
* Renvoie la liste des groupes de champs étendus
*/
251,7 → 251,7
$groupes = array();
/*$requete = "SELECT * FROM {$this->table_champs_etendus}_groupes ";
$champs = Cel::db()->executerRequete($requete);
 
foreach ($champs as $champ) {
if(!isset($groupes[$champ['groupe']])) {
$groupes[$champ['groupe']] = array();
/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)) {
68,13 → 68,13
unset($criteres['tri']);
$tri_dir = (isset($criteres['tri_dir']) && in_array($criteres['tri_dir'], array('ASC', 'DESC'))) ? $criteres['tri_dir'] : 'ASC';
unset($criteres['tri_dir']);
 
// très mauvaise solution, mais qui permet au moins d'effectuer des requêtes complexes, sans modifier l'API
// et sans pour autant introduire de problème de sécurité majeur dans toutes les fonctions appelantes qui
// effectue $criteres = $_GET sans nettoyage préalable.
if(isset($criteres['sql_brut']) && !$autoriser_sql_brut) unset($criteres['sql_brut']);
$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
 
$requete_selection_observations .= $sous_requete_recherche;
$requete_selection_observations = rtrim($requete_selection_observations, 'AND ');
$requete_selection_observations .= $id_utilisateur == null ? ' ORDER BY id_observation, ordre ' : ' ORDER BY '.$tri.' '.$tri_dir;
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/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'];
128,7 → 128,7
public function lierParId($id_mot_cle, $id_element_lie) {
$idElementLieP = Cel::db()->proteger($id_element_lie);
$idMotCleP = Cel::db()->proteger($id_mot_cle);
 
$requete = "INSERT INTO {$this->table_liaison} (id_element_lie, id_mot_cle) ".
"VALUES ($idElementLieP, $idMotCleP) ".
'ON DUPLICATE KEY UPDATE id_element_lie = id_element_lie '.
142,7 → 142,7
$cheminP = Cel::db()->proteger(self::harmoniserChemin($chemin));
$idElementLieP = Cel::db()->proteger($id_element_lie);
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
 
$sousRequete = '(SELECT id_mot_cle '.
"FROM {$this->table_mots_cles} ".
"WHERE chemin = $cheminP ".
187,19 → 187,19
}
}
$clauseWhere = implode(' OR ', $combinaisons);
 
$requete = "DELETE FROM {$this->table_liaison} ".
"WHERE $clauseWhere ".
' -- '.__FILE__.':'.__LINE__;
 
$suppression = Cel::db()->executer($requete);
return $suppression;
}
 
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} ".
"WHERE id_element_lie IN ($listeIds) ".
' -- '.__FILE__.':'.__LINE__;
212,14 → 212,14
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} ".
"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;
227,13 → 227,13
 
/**
* Supprime toutes les laisons pour un utilisateur et un mot clé (au sens textuel) donnés.
*
*
*/
public function supprimerLiaisonPourMotCleEtIdElementLie($mot_cle, $id_element_lie, $id_utilisateur) {
$idElementLieP = Cel::db()->proteger($id_element_lie);
$motCleP = Cel::db()->proteger($mot_cle);
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
 
$sousRequete = "SELECT id_mot_cle FROM {$this->table_mots_cles} ".
"WHERE mot_cle = $motCleP ".
"AND id_utilisateur = $idUtilisateurP ";
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;
284,7 → 284,7
return $renommage;
}
 
/**
/**
* Si aucun id_père n'est mentionné, c'est un déplacement vers la racine de l'arbre (qui n'existe pas).
*/
public function deplacerMotCle($id_mot_cle, $id_pere, $id_utilisateur) {
391,7 → 391,7
$chemin = $chemin[0]['chemin'];
$cheminP = Cel::db()->proteger($chemin.'%');
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
 
$requete = "DELETE FROM {$this->table_mots_cles} ".
"WHERE chemin LIKE $cheminP ".
"AND id_utilisateur = $idUtilisateurP ".
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);
 
414,7 → 414,7
"WHERE mot_cle IN ($listeMotsClesP) ".
"AND id_utilisateur = $idUtilisateurP ".
' -- '.__FILE__.':'.__LINE__;
 
$resultat = Cel::db()->executer($requete);
return $resultat;
}
425,7 → 425,7
}
$listeChemins = implode(',', $chemin);
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
 
$requete = 'SELECT id_element_lie '.
"FROM {$this->table_liaison} AS cl INNER JOIN {$this->table_mots_cles} AS cm ".
"ON (".
443,16 → 443,16
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 '.
"FROM {$this->table_liaison} ".
"WHERE id_mot_cle IN ($listeIdsMotsCles) ".
' -- '.__FILE__.':'.__LINE__;
 
$idsElementsLies = Cel::db()->executerRequete($requete);
 
$idsElementsLies = Cel::db()->requeter($requete);
}
return $idsElementsLies;
}
500,17 → 500,17
}
 
/**
* Renvoie un template de requete pour selectionner la concatenation de mots clé
* Renvoie un template de requete pour selectionner la concatenation de mots clé
* pour un element donné (utilisable avec sprintf)
*/
public static function obtenirTemplateRequeteMotsClesTexte($mode) {
list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
 
$requeteTpl = 'SELECT GROUP_CONCAT(mot_cle) '.
"FROM $table_mots_cles AS cm ".
"INNER JOIN $table_liaison AS cml ON cml.id_mot_cle = cm.id_mot_cle ".
'AND cml.id_element_lie = %s ';
 
return $requeteTpl;
}
/**
523,7 → 523,7
}
 
// Fonctions utilitaires
 
/**
* La profondeur d'un noeud est déterminée par le nombre de slashs
* qu'il contient (étant donné que ceux ci sont interdits dans le texte du mot clé.
552,9 → 552,9
return $chemin;
}
 
/**
/**
* Fonction de slugification du mot clé
*
*
* Ni slashes ou antislashes ou virgules (ce qui fausserait l'arbre ou bien les mots
* clés texte dans les tables obs ou image)
*/
565,7 → 565,7
return $text;
}
 
/**
/**
* Gardée pour compatibilité ancienne version (mais devrait être supprimée
* dans le futur
*/
603,12 → 603,12
list($table_liaisons, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
$idUtilisateurP = Cel::db()->proteger($infos_utilisateur['id_utilisateur']);
$emailUtilisateurP = Cel::db()->proteger($email_utilisateur);
 
$requete_migration_mc = "UPDATE {$table_mots_cles} ".
"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/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
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