/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/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(); |
} |