/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/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/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/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/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/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/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/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/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/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 |