Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2142 → Rev 2143

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