Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1764 → Rev 1765

/trunk/jrest/lib/GestionImage.php
69,7 → 69,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 = $this->executerRequeteSimple($requete_insertion_infos_image);
$resultat_insertion_infos_image = Cel::db()->executerRequeteSimple($requete_insertion_infos_image);
 
if (!$resultat_insertion_infos_image) {
$message = "Echec de l'insertion dans la base de donnees : " ;
99,8 → 99,8
 
$nouvel_ordre = 0 ;
$requete_selection_ordre_max ='SELECT MAX(ordre) as max_ordre FROM cel_images WHERE ce_utilisateur = '.$this->proteger($id_utilisateur) ;
$resultat_requete_ordre_max = $this->executerRequete($requete_selection_ordre_max);
$requete_selection_ordre_max ='SELECT MAX(ordre) as max_ordre FROM cel_images WHERE ce_utilisateur = '.Cel::db()->proteger($id_utilisateur) ;
$resultat_requete_ordre_max = Cel::db()->executerRequete($requete_selection_ordre_max);
if($resultat_requete_ordre_max !== false) {
$nouvel_ordre = $resultat_requete_ordre_max[0]['max_ordre'];
114,8 → 114,8
$id_image = false;
$requete_id_image ='SELECT id_image FROM cel_images WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ordre = '.$ordre ;
$resultat_id_image = $this->executerRequete($requete_id_image);
$requete_id_image ='SELECT id_image FROM cel_images WHERE ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).' AND ordre = '.$ordre ;
$resultat_id_image = Cel::db()->executerRequete($requete_id_image);
 
if (count($resultat_id_image) > 0)
{
142,7 → 142,7
}
else
{
$valeurs_a_inserer .= $this->proteger($valeur).',' ;
$valeurs_a_inserer .= Cel::db()->proteger($valeur).',' ;
}
}
 
173,10 → 173,10
$champs_a_mettre_a_jour = $this->construireRequeteMajMetaDonnees($parametres);
$requete_mise_a_jour_image .= $champs_a_mettre_a_jour;
 
$requete_mise_a_jour_image .= ' WHERE id_image = '.$this->proteger($id_image).
' AND ce_utilisateur = '.$this->proteger($utilisateur);
$requete_mise_a_jour_image .= ' WHERE id_image = '.Cel::db()->proteger($id_image).
' AND ce_utilisateur = '.Cel::db()->proteger($utilisateur);
 
$resultat_mise_a_jour = $this->executerRequeteSimple($requete_mise_a_jour_image);
$resultat_mise_a_jour = Cel::db()->executerRequeteSimple($requete_mise_a_jour_image);
return ($resultat_mise_a_jour !== false);
}
203,11 → 203,11
$date_tab = explode('/',$valeur) ;
$date = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0] ;
$requete_maj_champs .= $champ.' = '.$this->proteger($date).' , ' ;
$requete_maj_champs .= $champ.' = '.Cel::db()->proteger($date).' , ' ;
}
else {
$requete_maj_champs .= $champ.' = '.$this->proteger($valeur).' , ' ;
$requete_maj_champs .= $champ.' = '.Cel::db()->proteger($valeur).' , ' ;
}
}
}
220,17 → 220,17
public function supprimerImageParOrdre($id_utilisateur, $ordre_image_ou_tableau) {
if(is_array($ordre_image_ou_tableau)) {
$id_image_ou_tableau = array_map(array($this,'proteger'),$ordre_image_ou_tableau);
$id_image_ou_tableau = array_map(array(Cel::db(),'proteger'),$ordre_image_ou_tableau);
$ids_images = implode(',',$ordre_image_ou_tableau);
} else {
$ids_images = $this->proteger($ordre_image_ou_tableau);
$ids_images = Cel::db()->proteger($ordre_image_ou_tableau);
}
$requete_selection_ids_images = 'SELECT id_image FROM cel_images WHERE '.
'ce_utilisateur = '.$this->proteger($id_utilisateur).' '.
'ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).' '.
'AND ordre IN ('.$ids_images.') ';
$tableau_ids_images = $this->executerRequete($requete_selection_ids_images);
$tableau_ids_images = Cel::db()->executerRequete($requete_selection_ids_images);
$chaine_ids_images = '';
foreach($tableau_ids_images as $id_image) {
$chaine_ids_images .= $id_image['id_image'];
244,10 → 244,10
public function supprimerImage($id_utilisateur, $id_image_ou_tableau) {
if(is_array($id_image_ou_tableau)) {
$id_image_ou_tableau = array_map(array($this,'proteger'),$id_image_ou_tableau);
$id_image_ou_tableau = array_map(array(Cel::db(),'proteger'),$id_image_ou_tableau);
$chaine_ids_images = implode(',',$id_image_ou_tableau);
} else {
$chaine_ids_images = $this->proteger($id_image_ou_tableau);
$chaine_ids_images = Cel::db()->proteger($id_image_ou_tableau);
}
$requete_suppression_images = "DELETE FROM cel_images WHERE id_image in (".$chaine_ids_images.")";
255,9 → 255,9
$requete_suppression_lien_images_obs = "DELETE FROM cel_obs_images WHERE id_image in (".$chaine_ids_images.")";
$requete_suppression_lien_images_mots_cles = "DELETE FROM cel_images_mots_cles WHERE id_image in (".$chaine_ids_images.")";
$resultat_suppression_image = $this->executerRequeteSimple($requete_suppression_images);
$resultat_suppression_lien_images_obs = $this->executerRequeteSimple($requete_suppression_lien_images_obs);
$resultat_suppression_lien_images_mots_cles = $this->executerRequeteSimple($requete_suppression_lien_images_mots_cles);
$resultat_suppression_image = Cel::db()->executerRequeteSimple($requete_suppression_images);
$resultat_suppression_lien_images_obs = Cel::db()->executerRequeteSimple($requete_suppression_lien_images_obs);
$resultat_suppression_lien_images_mots_cles = Cel::db()->executerRequeteSimple($requete_suppression_lien_images_mots_cles);
if ($resultat_suppression_image === false) {
$message = 'Erreur lors de la suppression de l\'image' ;
295,13 → 295,13
// ATTENTION : cette fonction suppose que l'utilisateur n'ai pas déjà d'images dans le CEL
// avec l'identifiant $id_utilisateur ce qui est normalement le cas
$requete_migration_releve = 'UPDATE cel_images SET '.
'ce_utilisateur = '.$this->proteger($infos_utilisateur['id_utilisateur']).', '.
'prenom_utilisateur = '.$this->proteger($infos_utilisateur['prenom']).', '.
'nom_utilisateur = '.$this->proteger($infos_utilisateur['nom']).', '.
'courriel_utilisateur = '.$this->proteger($infos_utilisateur['courriel']).' '.
'WHERE ce_utilisateur = '.$this->proteger($mail_utilisateur).' ';
'ce_utilisateur = '.Cel::db()->proteger($infos_utilisateur['id_utilisateur']).', '.
'prenom_utilisateur = '.Cel::db()->proteger($infos_utilisateur['prenom']).', '.
'nom_utilisateur = '.Cel::db()->proteger($infos_utilisateur['nom']).', '.
'courriel_utilisateur = '.Cel::db()->proteger($infos_utilisateur['courriel']).' '.
'WHERE ce_utilisateur = '.Cel::db()->proteger($mail_utilisateur).' ';
$migration_releve = $this->executerRequeteSimple($requete_migration_releve);
$migration_releve = Cel::db()->executerRequeteSimple($requete_migration_releve);
return $migration_releve;
}
/trunk/jrest/lib/RechercheImage.php
48,11 → 48,11
 
if ($this->doitJoindreTableObs($criteres)) {
$requete_recherche_images .= $this->fabriquerRequeteJointureObs();
$requete_recherche_images .= ($id_utilisateur != null) ? 'AND ci.ce_utilisateur = '.$this->proteger($id_utilisateur) : '';
$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 .= ($id_utilisateur != null) ? 'WHERE ci.ce_utilisateur = '.$this->proteger($id_utilisateur) : '';
$requete_recherche_images .= ($id_utilisateur != null) ? 'WHERE ci.ce_utilisateur = '.Cel::db()->proteger($id_utilisateur) : '';
}
$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
61,7 → 61,7
$requete_recherche_images .= ' ORDER BY '.$ordre.' '.$direction.' LIMIT '.$debut.','.$limite ;
 
$resultats_images = array();
$resultats_images = $this->executerRequete($requete_recherche_images);
$resultats_images = Cel::db()->executerRequete($requete_recherche_images);
return $resultats_images;
}
77,11 → 77,11
if ($this->doitJoindreTableObs($criteres)) {
$requete_recherche_images .= $this->fabriquerRequeteJointureObs();
$requete_recherche_images .= ($id_utilisateur != null) ? 'AND ci.ce_utilisateur = '.$this->proteger($id_utilisateur) : '';
$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 .= ($id_utilisateur != null) ? 'WHERE ci.ce_utilisateur = '.$this->proteger($id_utilisateur) : '';
$requete_recherche_images .= ($id_utilisateur != null) ? 'WHERE ci.ce_utilisateur = '.Cel::db()->proteger($id_utilisateur) : '';
}
$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
89,7 → 89,7
$requete_recherche_images .= $sous_requete_recherche;
$nb_images = 0;
 
$resultat_requete_nombre_images = $this->executerRequete($requete_recherche_images);
$resultat_requete_nombre_images = Cel::db()->executerRequete($requete_recherche_images);
if($resultat_requete_nombre_images && is_array($resultat_requete_nombre_images) && count($resultat_requete_nombre_images) > 0) {
$nb_images = $resultat_requete_nombre_images[0]['nb_images'];
119,7 → 119,7
$requete_table_liaison = 'SELECT id_observation FROM cel_obs_images WHERE id_image = '.$id_image;
$resultats_liaisons_images = $this->executerRequete($requete_table_liaison);
$resultats_liaisons_images = Cel::db()->executerRequete($requete_table_liaison);
 
$ids_obs = '';
131,7 → 131,7
 
if(trim($ids_obs) != '') {
$requete_obs_liees = 'SELECT * FROM cel_obs WHERE id_observation IN ('.$ids_obs.') AND ce_utilisateur ="'.$id_utilisateur.'"';
$resultat_obs_liees = $this->executerRequete($requete_obs_liees);
$resultat_obs_liees = Cel::db()->executerRequete($requete_obs_liees);
 
foreach($resultat_obs_liees as $obs_liee)
{
171,7 → 171,7
foreach($mots_comment_liste as $mot_comment)
{
$mot_comment = trim($mot_comment) ;
$sous_requete .= 'ci.'.$nom.' LIKE '.$this->proteger('%'.$mot_comment.'%') ;
$sous_requete .= 'ci.'.$nom.' LIKE '.Cel::db()->proteger('%'.$mot_comment.'%') ;
$sous_requete .= ' AND ' ;
}
break;
185,7 → 185,7
case "tampon":
$ids_tampon = rtrim($valeur, ',') ;
$sous_requete .= 'ci.id_images IN ( '.$this->proteger($ids_tampon).')' ;
$sous_requete .= 'ci.id_images IN ( '.Cel::db()->proteger($ids_tampon).')' ;
break;
case "recherche":
194,7 → 194,7
break;
case "transmission":
$sous_requete .= 'co.transmission = '.$this->proteger($valeur) ;
$sous_requete .= 'co.transmission = '.Cel::db()->proteger($valeur) ;
$sous_requete .= ' AND ';
break;
201,17 → 201,17
case "taxon":
$valeur = str_replace('indetermine','null',$valeur);
$sous_requete .= ' (';
$sous_requete .= 'co.nom_ret LIKE '.$this->proteger($valeur.'%') ;
$sous_requete .= 'co.nom_ret LIKE '.Cel::db()->proteger($valeur.'%') ;
$sous_requete .= ' OR ' ;
$sous_requete .= 'co.nom_sel LIKE '.$this->proteger($valeur.'%') ;
$sous_requete .= 'co.nom_sel LIKE '.Cel::db()->proteger($valeur.'%') ;
$sous_requete .= ') AND ' ;
break;
case "auteur":
$sous_requete .= '(ci.ce_utilisateur LIKE '.$this->proteger($valeur.'%').' OR '.
'ci.courriel_utilisateur LIKE '.$this->proteger($valeur.'%').' OR '.
'ci.nom_utilisateur LIKE '.$this->proteger($valeur.'%').' OR '.
'ci.prenom_utilisateur LIKE '.$this->proteger($valeur.'%').
$sous_requete .= '(ci.ce_utilisateur LIKE '.Cel::db()->proteger($valeur.'%').' OR '.
'ci.courriel_utilisateur LIKE '.Cel::db()->proteger($valeur.'%').' OR '.
'ci.nom_utilisateur LIKE '.Cel::db()->proteger($valeur.'%').' OR '.
'ci.prenom_utilisateur LIKE '.Cel::db()->proteger($valeur.'%').
') AND ';
break;
219,7 → 219,7
if($valeur == "NULL") {
$sous_requete .= "(co.ce_zone_geo IS NULL OR co.ce_zone_geo = '')";
} else {
$sous_requete .= '(co.ce_zone_geo LIKE '.(is_numeric($valeur) ? $this->proteger('INSEE-C:'.$valeur.'%') : $this->proteger($valeur)).') ';
$sous_requete .= '(co.ce_zone_geo LIKE '.(is_numeric($valeur) ? Cel::db()->proteger('INSEE-C:'.$valeur.'%') : Cel::db()->proteger($valeur)).') ';
}
break;
227,17 → 227,17
if($valeur == "NULL") {
$sous_requete .= "(co.zone_geo IS NULL OR co.zone_geo = '')";
} else {
$sous_requete .= '(co.zone_geo = '.$this->proteger($valeur).') ';
$sous_requete .= '(co.zone_geo = '.Cel::db()->proteger($valeur).') ';
}
break;
case "famille":
$sous_requete .= 'co.famille = '.$this->proteger($valeur) ;
$sous_requete .= 'co.famille = '.Cel::db()->proteger($valeur) ;
$sous_requete .= ' AND ' ;
break;
default:
$sous_requete .= 'ci.'.$nom.' = '.$this->proteger($valeur) ;
$sous_requete .= 'ci.'.$nom.' = '.Cel::db()->proteger($valeur) ;
$sous_requete .= ' AND ' ;
break;
}
258,17 → 258,17
$chaine_recherche = str_replace(' ','_',$chaine_recherche);
$requete = ' ('.
'ci.nom_original LIKE '.$this->proteger($chaine_recherche.'%').' OR '.
'co.nom_ret LIKE '.$this->proteger($chaine_recherche.'%').' OR '.
'co.nom_sel LIKE '.$this->proteger($chaine_recherche.'%').' OR '.
'co.zone_geo LIKE '.$this->proteger($chaine_recherche.'%').' OR '.
'co.ce_zone_geo LIKE '.$this->proteger('%'.$chaine_recherche.'%').' OR '.
'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 '.$this->proteger('%'.$chaine_recherche.'%').' OR '.
'ci.ce_utilisateur LIKE '.$this->proteger($chaine_recherche.'%').' OR '.
'ci.courriel_utilisateur LIKE '.$this->proteger($chaine_recherche.'%').' OR '.
'ci.nom_utilisateur LIKE '.$this->proteger($chaine_recherche.'%').' OR '.
'ci.prenom_utilisateur LIKE '.$this->proteger($chaine_recherche.'%').' '.
//'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;
281,7 → 281,7
$requete_recherche_date = '';
 
if(is_numeric($valeur) && $valeur != "00") {
$requete_recherche_date = '('.$correspondance_champ[$intervalle].'(ci.date_prise_de_vue) = '.$this->proteger($valeur).') ';
$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")';
}
294,17 → 294,17
if (preg_match('/.*OU.*/', $mot_cle)) {
$mots_cles_tab = explode('OU',$mot_cle);
foreach($mots_cles_tab as $mot_cle_item) {
$requete .= '(ci.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') OR ';
$requete .= '(ci.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
}
$requete = '('.rtrim($requete,'OR ').')';
} else if (preg_match('/.*ET.*/', $mot_cle)) {
$mots_cles_tab = explode('ET',$mot_cle);
foreach($mots_cles_tab as $mot_cle_item) {
$requete .= '(ci.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') AND ';
$requete .= '(ci.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
}
$requete = '('.rtrim($requete, 'AND ').') ';
} else {
$requete = "(ci.mots_cles_texte LIKE ".$this->proteger('%'.$mot_cle.'%').') ';
$requete = "(ci.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
}
$requete .= ' AND ';
return $requete;
326,9 → 326,9
public function obtenirCourrielUtilisateurPourIdImage($id_image) {
$requete = 'SELECT courriel_utilisateur FROM cel_images WHERE '.
'id_image = '.$this->proteger($id_image);
'id_image = '.Cel::db()->proteger($id_image);
$utilisateur_courriel = $this->executerRequete($requete);
$utilisateur_courriel = Cel::db()->executerRequete($requete);
$retour = false;
if(!empty($utilisateur_courriel) && isset($utilisateur_courriel[0]['courriel_utilisateur'])) {
343,7 → 343,7
'FROM cel_images_mots_cles '.
'WHERE id_image = '.$id_image;
return $this->executerRequete($requete_selection_mots_cles);
return Cel::db()->executerRequete($requete_selection_mots_cles);
}
// TODO: fonction temporaire
/trunk/jrest/lib/RechercheInfosTaxon.php
48,9 → 48,9
" , 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 ".$this->proteger($genre.'%').
" 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 ".$this->proteger($espece.'%')." AND en_ce_rang = enrg_id_rang " .
" 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 ".
68,13 → 68,13
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 ".$this->proteger($genre.'%')." ORDER BY esn_ce_statut, en_nom_genre LIMIT 50";
"AND en_nom_genre LIKE ".Cel::db()->proteger($genre.'%')." ORDER BY esn_ce_statut, en_nom_genre LIMIT 50";
}
}
}
if ($requete_recherche != '') {
$resultat_recherche = $this->executerRequete($requete_recherche);
$resultat_recherche = Cel::db()->executerRequete($requete_recherche);
if (is_array($resultat_recherche)) {
foreach ($resultat_recherche as $ligne) {
141,7 → 141,7
" , 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= ".$this->proteger($numNom).
" 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 ".
155,7 → 155,7
" AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
 
$resultat_infos_complementaires = $this->executerRequete($requete_infos_complementaires);
$resultat_infos_complementaires = Cel::db()->executerRequete($requete_infos_complementaires);
return $resultat_infos_complementaires;
}
184,7 → 184,7
" AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
" AND esn_id_version_projet_taxon=en_id_version_projet_nom ";
$resultat_infos_complementaires = $this->executerRequete($requete_infos_complementaires);
$resultat_infos_complementaires = Cel::db()->executerRequete($requete_infos_complementaires);
return $resultat_infos_complementaires;
}
202,7 → 202,7
'eni_intitule_nom LIKE "'.$nom_saisi.'%" '.
'ORDER BY LENGTH(eni_intitule_nom)';
$resultat_infos_comp_sur_nom = $this->executerRequete($requete_infos_comp_sur_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) {
232,7 → 232,7
" AND en_id_nom = esn_id_nom ".
" AND esn_id_version_projet_taxon=en_id_version_projet_nom ";
$resultat_recherche_famille = $this->executerRequete($requete_famille);
$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');
247,7 → 247,7
$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= ".$this->proteger($num_nom).
" 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 ".
256,7 → 256,7
" AND en_id_nom = b.esn_id_nom" .
" AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
$res_num_nom = $this->executerRequete($requete_num_tax);
$res_num_nom = Cel::db()->executerRequete($requete_num_tax);
$nt = null;
if (is_array($res_num_nom) && count($res_num_nom) > 0) {
269,13 → 269,13
public function taxonEstPresentDansDepartement($num_taxon,$code_departement) {
$requete_presence_taxon = "SELECT ecd_ce_taxon FROM eflore_zg, eflore_chorologie_donnee ".
"WHERE ecd_ce_taxon = ".$this->proteger($num_taxon)." ".
"AND ezg_code = ".$this->proteger($code_departement)." ".
"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 = $this->executerRequete($requete_presence_taxon);
$resultat_presence_taxon = Cel::db()->executerRequete($requete_presence_taxon);
$presence_taxon = (is_array($resultat_presence_taxon) && count($resultat_presence_taxon) > 0);
289,12 → 289,12
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 = ".$this->proteger($nom_latin_decoupe['genus'])." " .
" AND enrg_abreviation_rang = ".$this->proteger($nom_latin_decoupe['infra_type'])." " .
" AND en_epithete_infra_specifique = ".$this->proteger($nom_latin_decoupe['infra'])." " .
" 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 = ".$this->proteger($nom_latin_decoupe['species'])." AND en_ce_rang = enrg_id_rang " .
" 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";
}
301,17 → 301,17
else { // espece (on privilegie les noms retenu cf tri par esn_ce_statut)
$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 = ".$this->proteger($nom_latin_decoupe['genus'])." " .
" WHERE en_id_version_projet_nom = '25' AND en_nom_genre = ".Cel::db()->proteger($nom_latin_decoupe['genus'])." " .
" AND enrg_abreviation_rang = 'sp.' " .
" AND esn_id_nom= en_id_nom ".
" AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
" AND en_epithete_espece = ".$this->proteger($nom_latin_decoupe['species'])." AND en_ce_rang = enrg_id_rang " .
" 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 = $this->executerRequete($requete);
$resultat = Cel::db()->executerRequete($requete);
$retour = array();
if (is_array($resultat) && count($resultat) > 0) {
/trunk/jrest/lib/Cel.php
13,21 → 13,26
* @version $Id$
* @copyright © 2012, Tela Botanica
*/
// TODO : supprimer la méthode protegerRequete()
require_once('Bdd2.php');
 
abstract class Cel {
const TYPE_OBS = 'observation';
const TYPE_IMG = 'image';
const SQL_MODE_ASSOC = PDO::FETCH_ASSOC;
const SQL_MODE_OBJET = PDO::FETCH_OBJ;
const SQL_RETOUR_COMPLET = 'All';
const SQL_RETOUR_LIGNE = 'Row';
const SQL_RETOUR_COLONNE = 'Column';
const SQL_RETOUR_BRUT = 'Raw';
 
// TODO: delete wrappers
const SQL_MODE_ASSOC = Bdd2::SQL_MODE_ASSOC;
const SQL_MODE_OBJET = Bdd2::SQL_MODE_OBJET;
const SQL_RETOUR_COMPLET = Bdd2::SQL_RETOUR_COMPLET;
const SQL_RETOUR_LIGNE = Bdd2::SQL_RETOUR_LIGNE;
const SQL_RETOUR_COLONNE = Bdd2::SQL_RETOUR_COLONNE;
const SQL_RETOUR_BRUT = Bdd2::SQL_RETOUR_BRUT;
 
public $config;
private $ressources;
protected $parametres = array();
protected $bdd;
 
public static $bdd = null;
 
protected $messages = array();
protected $debug = array();
protected $start;
48,7 → 53,7
date_default_timezone_set($this->config['settings']['fuseauHoraire']);
 
// Connection à la base de données
$this->bdd = $this->connecterPDO($this->config, 'database_cel');
self::$bdd = new Bdd2($this->config, 'database_cel');
 
// Nettoyage du _GET (sécurité)
$this->collecterParametres();// Récupération de tous les parametres de _GET, nettoyage et mise dans $this->parametres
60,128 → 65,28
}
 
//+----------------------------------------------------------------------------------------------------------------+
// GESTION de la BASE de DONNÉES
 
protected function connecterPDO($config, $base = 'database_cel') {
$cfg = $config[$base];
// ATTENTION : la connexin à la bdd peut échouer si l'host vaut localhost. Utiliser 127.0.0.1 à la place.
$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec'];
try {
// Création de la connexion en UTF-8 à la BDD
$PDO = new PDO($dsn, $cfg['username'], $cfg['password'], array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'La connexion à la base de donnée via PDO a échouée : ' .$dsn. $e->getMessage();
}
return $PDO;
return new Bdd2($config, $base);
}
 
/**
* Protège automatiquement toutes les chaines comprises entre deux caractères '|'.
* Puis execute la requete.
* @see protegerRequete()
* @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);
public static function db() {
if(! self::$bdd) die('ERR: no DB available');
return self::$bdd;
}
 
/**
* Protège automatiquement toutes les chaines comprises entre deux caractères '|'.
* @see protegerRequete()
* @param unknown_type $requete
*/
protected function executer($requete) {
$requete = $this->protegerRequete($requete);
return $this->executerRequeteSimple($requete);
// 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;
}
 
/**
* 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
*/
protected 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->bdd->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;
}
 
protected function proteger($chaine) {
return $this->bdd->quote($chaine);
}
 
protected function protegerTableau(Array $tableau) {
foreach ($tableau as $id => $val) {
$tableau[$id] = $this->proteger($val);
$tableau[$id] = Cel::db()->proteger($val);
}
return $tableau;
}
 
protected function executerRequeteSimple($requete) {
$resultat = false;
try {
$resultat = $this->bdd->exec($requete);
if ($resultat === false) {
$this->debug[] = "La requête a échoué : $requete";
}
} catch (PDOException $e) {
$this->debug[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
}
return $resultat;
}
 
public function executerRequete($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) {
$resultat = false;
try {
switch ($retour) {
case self::SQL_RETOUR_COMPLET :
$resultat = $this->bdd->query($requete)->fetchAll($mode);// Retourne toutes les lignes
break;
case self::SQL_RETOUR_LIGNE :
$resultat = $this->bdd->query($requete)->fetch($mode);// Retourne la première ligne
break;
case self::SQL_RETOUR_COLONNE :
$resultat = $this->bdd->query($requete)->fetchColumn();// Retourne la première colonne de la première ligne
break;
case self::SQL_RETOUR_BRUT :
$resultat = $this->bdd->query($requete);// Retourne l'objet brut pour être utilisé dans une boucle de type foreach
break;
default:
$this->debug[] = "Le type de retour '$retour' est inconnu.";
}
if ($resultat === false) {
$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);
}
return $resultat;
}
 
protected 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;
}
return $sortie;
}
 
//+----------------------------------------------------------------------------------------------------------------+
// TRAITEMENT des URLs et des PARAMÊTRES
 
235,7 → 140,7
foreach ($params_attendu as $num => $nom) {
if (isset($params[$num]) && $params[$num] != '*') {
if ($pourBDD) {
$params[$num] = $this->bdd->quote($params[$num]);
$params[$num] = self::$bdd->quote($params[$num]);
}
$sortie[$nom] = $params[$num];
}
459,9 → 364,9
if(is_numeric($id_utilisateur)) {
 
$requete_infos_utilisateur = 'SELECT prenom, nom, courriel FROM cel_utilisateurs '.
'WHERE id_utilisateur = '.$this->proteger($id_utilisateur);
'WHERE id_utilisateur = '.Cel::db()->proteger($id_utilisateur);
 
$resultat_infos_utilisateur = $this->requeter($requete_infos_utilisateur);
$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[0];
476,9 → 381,9
$infos_utilisateur = array('prenom' => $mail_utilisateur, 'nom' => $mail_utilisateur, 'courriel' => $mail_utilisateur);
 
$requete_infos_utilisateur = 'SELECT id, prenom, nom FROM cel_utilisateurs '.
'WHERE courriel = '.$this->proteger($mail_utilisateur);
'WHERE courriel = '.Cel::db()->proteger($mail_utilisateur);
 
$resultat_infos_utilisateur = $this->requeter($requete_infos_utilisateur);
$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;
649,10 → 554,10
$code_insee = $dpt;
 
$requete = 'SELECT id_zone_geo FROM cel_zones_geo '.
'WHERE nom LIKE '.$this->proteger($nom_commune).' '.
'WHERE nom LIKE '.Cel::db()->proteger($nom_commune).' '.
'AND id_zone_geo LIKE "INSEE-C:'.$dpt.'%"';
 
$resultat = $this->requeter($requete);
$resultat = Cel::db()->requeter($requete);
 
if(is_array($resultat) && count($resultat) > 0) {
$code_insee = $resultat[0]['id_zone_geo'];
677,7 → 582,7
private function decoderMotsCles($utilisateur_id, $mots_cles, $type) {
$mots = array();
if (! $this->etreNull($mots_cles)) {
$utilisateur_id = $this->bdd->quote($utilisateur_id);
$utilisateur_id = self::$bdd->quote($utilisateur_id);
 
$mots_cles = $this->protegerMotsCles($mots_cles, $type);
if (! $this->etreNull($mots_cles)) {
688,7 → 593,7
"WHERE cmc_id_mot_cle_utilisateur IN ($mots_cles) ".
"AND cmc_id_proprietaire = $utilisateur_id ";
 
$elements = $this->executerRequete($requete);
$elements = Cel::db()->executerRequete($requete);
if (is_array($elements)) {
foreach ($elements as $mot) {
$mots[] = $mot['mot_cle'];
709,7 → 614,7
if (! $this->etreNull($valeurs)) {
$valeurs_a_proteger = explode($separateur_entree,trim(trim($valeurs), $separateur_entree));
foreach ($valeurs_a_proteger as $valeur) {
$valeurs_protegees[] = $this->bdd->quote($valeur);
$valeurs_protegees[] = self::$bdd->quote($valeur);
}
$valeurs = implode($separateur_sortie, $valeurs_protegees);
}
/trunk/jrest/lib/FormateurGroupeColonne.php
329,12 → 329,12
if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") {
/* blah */
}
// ici à cause du passage de $cel ($this), TODO: DB en Singleton !
// ici à cause du passage de $cel ($this->utilisateur)
if($abbrev == 'images') {
$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur, $cel);
$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur);
}
if($abbrev == 'nom-commun') {
$valeur = FormateurGroupeColonne::getNomCommun_v4($obs, $cel);
$valeur = FormateurGroupeColonne::getNomCommun_v4($obs);
}
if($valeur == null) {
351,7 → 351,7
if(is_null($colonne['dyna'])) continue;
// XXX: PHP-5.3
call_user_func_array($colonne['dyna'],
array($cel, $obs, &$ligne_formatee));
array($obs, &$ligne_formatee));
}
 
return $ligne_formatee;
393,7 → 393,7
* @param $fonction_dynamique (optionnel): défini une fonction ajoutant un nombre arbitraire de colonnes à une ligne donnée
* Utile, notamment, dans le cadre de l'export des champs étendus ou des données baseflor
* La fonction doit TOUJOURS alterer la ligne en lui ajoutant une nombre CONSTANT d'éléments (NULL ou non)
* La fonction doit prendre comme arguments ($cel, $obs, &$ligne_formatee)
* La fonction doit prendre comme arguments ($obs, &$ligne_formatee)
*/
static function GenColInfo($args) {
$default = Array('abbrev' => NULL,
443,12 → 443,12
return NULL;
}
 
static function getImages($obs, $id_utilisateur, $cel) {
static function getImages($obs, $id_utilisateur) {
if(! $id_utilisateur) return NULL;
if(isset(self::$cache['getImages'][$obs['id_observation']]))
return self::$cache['getImages'][$obs['id_observation']];
 
$rec = $cel->requeter(
$rec = Cel::db()->requeter(
sprintf("SELECT GROUP_CONCAT(nom_original ORDER BY nom_original ASC SEPARATOR '%s') AS i FROM cel_images i"
." LEFT JOIN cel_obs_images oi ON (i.id_image = oi.id_image)"
." LEFT JOIN cel_obs o ON (oi.id_observation = o.id_observation)"
605,7 → 605,7
Ainsi, les appels successifs à getNomCommun_v4() ne sont pas couteux (pas de requête SQL) */
static function getNomCommun_preload($cel, $obsids) {
if(!$obsids) return;
if(!self::referenceTableExiste($cel)) return NULL;
if(!self::referenceTableExiste()) return NULL;
 
// CREATE INDEX i_nom_referentiel ON cel_obs (nom_referentiel(5));
$req = sprintf("SELECT r.referentiel, r.num_taxon, r.nom_commun FROM cel_references r" .
612,7 → 612,7
" INNER JOIN cel_obs c ON (r.referentiel = substring_index(c.nom_referentiel, ':', 1) and r.num_taxon = c.nt)" .
" WHERE c.id_observation IN (%s)",
implode(',', $obsids));
$res = $cel->requeter($req);
$res = Cel::db()->requeter($req);
foreach($res as $v) {
self::$cache['getNomCommun'][$v['referentiel'] . '-' . $v['num_taxon'] . '-' . 'fra'] = $v['nom_commun'];
}
619,18 → 619,18
return NULL;
}
 
static function referenceTableExiste($cel) {
static function referenceTableExiste() {
if(!self::$is_table) {
// une seule fois
if(! $cel->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) return FALSE;
if(! Cel::db()->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) return FALSE;
self::$is_table = TRUE;
}
return TRUE;
}
static function getNomCommun_v4($obs, $cel) {
static function getNomCommun_v4($obs) {
if(! $obs['nt']) return NULL;
if(! self::referenceTableExiste($cel)) return NULL;
if(! self::referenceTableExiste()) return NULL;
 
$langue = 'fra';
list($referentiel) = explode(':', strtolower($obs['nom_referentiel']));
644,11 → 644,11
}
 
// pas de cache:
$nom = $cel->executerRequete(sprintf("SELECT nom_commun FROM cel_references " .
"WHERE referentiel = '%s' AND num_taxon = %d LIMIT 1",
$referentiel,
$obs['nt']),
Cel::SQL_RETOUR_LIGNE);
$nom = Cel::db()->executerRequete(sprintf("SELECT nom_commun FROM cel_references " .
"WHERE referentiel = '%s' AND num_taxon = %d LIMIT 1",
$referentiel,
$obs['nt']),
Cel::SQL_RETOUR_LIGNE);
 
if(! $nom) return NULL;
$nom = $nom["nom_commun"];
663,7 → 663,7
Ainsi, les appels successifs à baseflor_ligne() ne sont pas couteux (pas de requête SQL) */
static function baseflor_preload($cel, $obsids) {
if(!$obsids) return;
if(!self::referenceTableExiste($cel)) return NULL;
if(!self::referenceTableExiste()) return NULL;
 
$req = sprintf("SELECT referentiel, num_nom_retenu, %s FROM cel_references r" .
" INNER JOIN cel_obs c ON (r.num_nom_retenu = c.nom_ret_nn)" .
671,7 → 671,7
//" AND catminat_code IS NOT NULL", // TODO: suppression des NULL ici signifie que le cache sera partiel...
implode(',', array_keys(self::$baseflor_col)),
implode(',', $obsids));
$res = $cel->requeter($req);
$res = Cel::db()->requeter($req);
if(!$res) return NULL;
 
foreach($res as $v) {
685,13 → 685,13
}
 
static function baseflor_ligne($cel, $obs, &$ligne) {
static function baseflor_ligne($obs, &$ligne) {
if(! $obs['nom_ret_nn']) {
$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL));
return;
}
 
if(! self::referenceTableExiste($cel)) {
if(! self::referenceTableExiste()) {
$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL));
return;
}
707,7 → 707,7
}
 
// pas de cache:
$data = $cel->executerRequete(sprintf("SELECT %s FROM cel_references " .
$data = Cel::db()->executerRequete(sprintf("SELECT %s FROM cel_references " .
"WHERE referentiel = '%s' AND num_nom_retenu = %d LIMIT 1",
implode(', ', array_keys(self::$baseflor_col)),
$referentiel,
760,7 → 760,7
return $champs_etendus_fmt;
}
 
static function champsEtendus_ligne($cel, $obs, &$ligne) {
static function champsEtendus_ligne($obs, &$ligne) {
// si header n'est pas défini, aucune observation ne possède de champ étendu
// et nous n'ajoutons ni colonnes, ni valeurs.
if(! isset(self::$cache['champsEtendus']['header'])) return;
/trunk/jrest/lib/LiaisonMotsCles.php
42,12 → 42,12
foreach($ids_images_ou_obs as $id_image_ou_obs) {
foreach($mots_cles as $mot) {
$requete_liaison_mots_cles .= '('.$id_image_ou_obs.','.$this->proteger($mot).'),';
$requete_liaison_mots_cles .= '('.$id_image_ou_obs.','.Cel::db()->proteger($mot).'),';
}
}
$requete_liaison_mots_cles = rtrim($requete_liaison_mots_cles,',');
$resultat_liaison_mots_cles = $this->executer($requete_liaison_mots_cles);
$resultat_liaison_mots_cles = Cel::db()->executer($requete_liaison_mots_cles);
foreach($ids_images_ou_obs as $id_image_ou_obs) {
$this->regenererIndexTexteMotCle($id_image_ou_obs, $id_utilisateur);
80,7 → 80,7
$champ_objet_lie.' IN ('.implode(',',$ids_images_ou_obs).') '.
'AND '.$champ_mot_cle.' IN ('.implode(',',$mots_cles).')';
$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
$resultat_suppression_mot_cle = Cel::db()->executer($requete_suppression_liaison_mot_cle);
 
if ($requete_suppression_liaison_mot_cle !== false) {
$retour = true;
102,7 → 102,7
$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '.
$champ_objet_lie.' IN ('.implode(',',$ids_images_ou_obs).') ';
$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
$resultat_suppression_mot_cle = Cel::db()->executer($requete_suppression_liaison_mot_cle);
 
if ($requete_suppression_liaison_mot_cle !== false) {
$retour = true;
129,9 → 129,9
$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '.
$champ_mot_cle.' IN '.$chaine_mot_cles_ids;
$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
$resultat_suppression_mot_cle = Cel::db()->executer($requete_suppression_liaison_mot_cle);
$resultat_requete_objets_lies_mot_cle = $this->requeter($requete_objets_lies_mot_cle);
$resultat_requete_objets_lies_mot_cle = Cel::db()->requeter($requete_objets_lies_mot_cle);
foreach($resultat_requete_objets_lies_mot_cle as $objet_lie) {
$this->regenererIndexTexteMotCle($objet_lie['id'], $id_utilisateur);
}
161,11 → 161,11
private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_image_ou_obs, $identifiant_utilisateur) {
$requete = 'UPDATE '.(($this->mode == 'obs') ? 'cel_obs' : 'cel_images').' '.
'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
' AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur);
'SET mots_cles_texte = '.Cel::db()->proteger($mots_cles_texte_chaine).' '.
'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.Cel::db()->proteger($id_image_ou_obs).
' AND ce_utilisateur = '.Cel::db()->proteger($identifiant_utilisateur);
 
return $this->executer($requete);
return Cel::db()->executer($requete);
}
private function obtenirMotsClesTexte($id_image_ou_obs, $identifiant_utilisateur) {
175,11 → 175,11
'('.
'SELECT id_mot_cle_'.(($this->mode == 'obs') ? 'obs' : 'image').' '.
'FROM cel_'.$this->mode.'_mots_cles '.
'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.Cel::db()->proteger($id_image_ou_obs).
')'.
' AND id_utilisateur = '.$this->proteger($identifiant_utilisateur);
' AND id_utilisateur = '.Cel::db()->proteger($identifiant_utilisateur);
 
$resultats = $this->requeter($requete);
$resultats = Cel::db()->requeter($requete);
return $resultats;
}
214,31 → 214,31
// ATTENTION : cette fonction suppose que l'utilisateur n'ai pas déjà de mots clés dans le CEL
// avec l'identifiant $id_utilisateur ce qui est normalement le cas
$requete_migration_mc_images = 'UPDATE cel_mots_cles_images SET '.
'id_utilisateur = '.$this->proteger($infos_utilisateur['id_utilisateur']).' '.
'WHERE id_utilisateur = '.$this->proteger($mail_utilisateur).' ';
'id_utilisateur = '.Cel::db()->proteger($infos_utilisateur['id_utilisateur']).' '.
'WHERE id_utilisateur = '.Cel::db()->proteger($mail_utilisateur).' ';
 
$migration_mc_images = $this->executerRequeteSimple($requete_migration_mc_images);
$migration_mc_images = Cel::db()->executerRequeteSimple($requete_migration_mc_images);
// ATTENTION : cette fonction suppose que l'utilisateur n'ai pas déjà de mots clés dans le CEL
// avec l'identifiant $id_utilisateur ce qui est normalement le cas
$requete_migration_mc_obs = 'UPDATE cel_mots_cles_obs SET '.
'id_utilisateur = '.$this->proteger($infos_utilisateur['id_utilisateur']).' '.
'WHERE id_utilisateur = '.$this->proteger($mail_utilisateur).' ';
'id_utilisateur = '.Cel::db()->proteger($infos_utilisateur['id_utilisateur']).' '.
'WHERE id_utilisateur = '.Cel::db()->proteger($mail_utilisateur).' ';
$migration_mc_obs = $this->executerRequeteSimple($requete_migration_mc_obs);
$migration_mc_obs = Cel::db()->executerRequeteSimple($requete_migration_mc_obs);
// Migration des liaisons de mots clés
$requete_migration_mc_liaisons_obs = 'UPDATE cel_obs_mots_cles SET '.
'id_utilisateur = '.$this->proteger($infos_utilisateur['id_utilisateur']).' '.
'WHERE id_utilisateur = '.$this->proteger($mail_utilisateur).' ';
'id_utilisateur = '.Cel::db()->proteger($infos_utilisateur['id_utilisateur']).' '.
'WHERE id_utilisateur = '.Cel::db()->proteger($mail_utilisateur).' ';
$migration_mc_liaisons_obs = $this->executerRequeteSimple($requete_migration_mc_liaisons_obs);
$migration_mc_liaisons_obs = Cel::db()->executerRequeteSimple($requete_migration_mc_liaisons_obs);
$requete_migration_mc_liaisons_images = 'UPDATE cel_images_mots_cles SET '.
'id_utilisateur = '.$this->proteger($infos_utilisateur['id_utilisateur']).' '.
'WHERE id_utilisateur = '.$this->proteger($mail_utilisateur).' ';
'id_utilisateur = '.Cel::db()->proteger($infos_utilisateur['id_utilisateur']).' '.
'WHERE id_utilisateur = '.Cel::db()->proteger($mail_utilisateur).' ';
$migration_mc_liaisons_images = $this->executerRequeteSimple($requete_migration_mc_liaisons_images);
$migration_mc_liaisons_images = Cel::db()->executerRequeteSimple($requete_migration_mc_liaisons_images);
return $migration_mc_images !== false &&
$migration_mc_obs !== false &&
/trunk/jrest/lib/Bdd2.php
New file
0,0 → 1,135
<?php
/**
* La classe de gestion de la base de données.
*
* @category php 5.2
* @package cel
* @author Raphaël Droz <raphael@tela-botanica.org>
* @copyright Copyright (c) 2013, Tela Botanica (accueil@tela-botanica.org)
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
*/
class Bdd2 extends PDO {
 
const SQL_MODE_ASSOC = PDO::FETCH_ASSOC;
const SQL_MODE_OBJET = PDO::FETCH_OBJ;
const SQL_RETOUR_COMPLET = 'All';
const SQL_RETOUR_LIGNE = 'Row';
const SQL_RETOUR_COLONNE = 'Column';
const SQL_RETOUR_BRUT = 'Raw';
 
function __construct($config, $base = 'database_cel') {
$cfg = $config[$base];
// ATTENTION : la connexin à la bdd peut échouer si l'host vaut localhost. Utiliser 127.0.0.1 à la place.
$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec'];
try {
// Création de la connexion en UTF-8 à la BDD
parent::__construct($dsn, $cfg['username'], $cfg['password'], array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
parent::setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'La connexion à la base de donnée via PDO a échouée : ' .$dsn . "\n". $e->getMessage();
}
}
 
/**
* Protège automatiquement toutes les chaines comprises entre deux caractères '|'.
* Puis execute la requete.
* @see protegerRequete()
* @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
*/
public function executer($requete) {
$requete = $this->protegerRequete($requete);
return $this->executerRequeteSimple($requete);
}
 
/**
* 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
*/
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 proteger($chaine) {
return $this->quote($chaine);
}
 
 
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) {
$this->debug[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
}
return $resultat;
}
 
public function executerRequete($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) {
$resultat = false;
try {
switch ($retour) {
case self::SQL_RETOUR_COMPLET :
$resultat = $this->query($requete)->fetchAll($mode);// Retourne toutes les lignes
break;
case self::SQL_RETOUR_LIGNE :
$resultat = $this->query($requete)->fetch($mode);// Retourne la première ligne
break;
case self::SQL_RETOUR_COLONNE :
$resultat = $this->query($requete)->fetchColumn();// Retourne la première colonne de la première ligne
break;
case self::SQL_RETOUR_BRUT :
$resultat = $this->query($requete);// Retourne l'objet brut pour être utilisé dans une boucle de type foreach
break;
default:
$this->debug[] = "Le type de retour '$retour' est inconnu.";
}
if ($resultat === false) {
$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);
}
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;
}
return $sortie;
}
 
}
/trunk/jrest/lib/GestionObservation.php
43,7 → 43,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 = $this->executerRequeteSimple($requete_insertion_observation);
$resultat_ajout_observation = Cel::db()->executerRequeteSimple($requete_insertion_observation);
 
if ($resultat_ajout_observation === false) {
$retour = false;
65,9 → 65,9
public function renvoyerDernierOrdreUtilisePlusUn($utilisateur) {
$requete_selection_dernier_ordre = "SELECT max(ordre) AS ordre FROM cel_obs ".
"WHERE ce_utilisateur = ".$this->proteger($utilisateur);
"WHERE ce_utilisateur = ".Cel::db()->proteger($utilisateur);
 
$dernier_ordre = $this->executerRequete($requete_selection_dernier_ordre);
$dernier_ordre = Cel::db()->executerRequete($requete_selection_dernier_ordre);
$nouvel_ordre = 0;
if (is_array($dernier_ordre) && count($dernier_ordre) > 0 && trim($dernier_ordre[0]['ordre']) != '') {
85,10 → 85,10
public function renvoyerIdPourOrdre($utilisateur, $ordre) {
$requete_selection_dernier_id = "SELECT id_observation FROM cel_obs ".
"WHERE ce_utilisateur = ".$this->proteger($utilisateur)." ".
"AND ordre = ".$this->proteger($ordre)." ";
"WHERE ce_utilisateur = ".Cel::db()->proteger($utilisateur)." ".
"AND ordre = ".Cel::db()->proteger($ordre)." ";
$dernier_id = $this->executerRequete($requete_selection_dernier_id);
$dernier_id = Cel::db()->executerRequete($requete_selection_dernier_id);
if(!$dernier_id) return NULL;
return $dernier_id[0]['id_observation'];
}
120,12 → 120,12
$sous_requete_modification = $this->traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
$requete_modification .= $sous_requete_modification;
 
$requete_modification .= " WHERE ordre IN (".$ordre.") AND ce_utilisateur = ".$this->proteger($utilisateur);
$requete_modification .= " WHERE ordre IN (".$ordre.") AND ce_utilisateur = ".Cel::db()->proteger($utilisateur);
 
// 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 = $this->executerRequeteSimple($requete_modification);
$resultat_modification = Cel::db()->executerRequeteSimple($requete_modification);
if ($resultat_modification === false) {
$retour = false;
157,13 → 157,13
$sous_requete_modification = $this->traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
$requete_modification .= $sous_requete_modification;
$requete_modification .= " WHERE id_observation = ".$this->proteger($id).
" AND ce_utilisateur = ".$this->proteger($utilisateur)." ".
$requete_modification .= " WHERE id_observation = ".Cel::db()->proteger($id).
" AND ce_utilisateur = ".Cel::db()->proteger($utilisateur)." ".
" AND transmission = 1";
// 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 = $this->executerRequeteSimple($requete_modification);
$resultat_modification = Cel::db()->executerRequeteSimple($requete_modification);
if ($resultat_modification === false) {
$retour = false;
185,26 → 185,26
// TODO changer le systeme pour n'utiliser plus que les id
$retour = false;
$tableau_ordre = explode(',', $ordre);
$tableau_ordre = array_map(array($this, 'proteger'), $tableau_ordre);
$tableau_ordre = array_map(array(Cel::db(),'proteger'), $tableau_ordre);
$ordre = implode(',', $tableau_ordre);
 
$requete_ids_observations = 'SELECT id_observation as id_obs FROM cel_obs '.
'WHERE ce_utilisateur = '.$this->proteger($utilisateur).' '.
'WHERE ce_utilisateur = '.Cel::db()->proteger($utilisateur).' '.
'AND ordre IN ('.$ordre.')';
$resultat_ids_observations = $this->requeter($requete_ids_observations);
$resultat_ids_observations = Cel::db()->requeter($requete_ids_observations);
 
$ids_obs = array();
if(is_array($resultat_ids_observations) && count($resultat_ids_observations) > 0) {
foreach($resultat_ids_observations as $id_observation) {
$ids_obs[] = $this->proteger($id_observation['id_obs']);
$ids_obs[] = Cel::db()->proteger($id_observation['id_obs']);
}
$chaine_ids_obs = implode(',', $ids_obs);
$requete_supression_observations = 'DELETE FROM cel_obs WHERE '.
'ce_utilisateur = '.$this->proteger($utilisateur).' '.
'ce_utilisateur = '.Cel::db()->proteger($utilisateur).' '.
'AND id_observation IN ('.$chaine_ids_obs.')';
 
$resultat_suppression_observations = $this->executerRequeteSimple($requete_supression_observations);
$resultat_suppression_observations = Cel::db()->executerRequeteSimple($requete_supression_observations);
// TODO: Faire la suppression des mots clés
// et des liaisons obs images dans une ou des fonctions à part
214,10 → 214,10
else
{
$requete_supression_lien_obs_images = 'DELETE FROM cel_obs_images WHERE '.
'id_utilisateur = '.$this->proteger($utilisateur).' '.
'id_utilisateur = '.Cel::db()->proteger($utilisateur).' '.
'AND id_observation IN ('.$chaine_ids_obs.')';
$resultat_suppression_liens = $this->executerRequeteSimple($requete_supression_lien_obs_images);
$resultat_suppression_liens = Cel::db()->executerRequeteSimple($requete_supression_lien_obs_images);
if ($resultat_suppression_liens === false) {
$this->logger("CEL_bugs","Erreur de suppression d'une liste de liaison entre observations et images : ".$requete_supression_lien_obs_images);
230,7 → 230,7
$requete_supression_lien_mots_cles = 'DELETE FROM cel_obs_mots_cles WHERE '.
'id_observation in ('.$chaine_ids_obs.')';
$resultat_suppression_mots_cles = $this->executerRequeteSimple($requete_supression_lien_mots_cles);
$resultat_suppression_mots_cles = Cel::db()->executerRequeteSimple($requete_supression_lien_mots_cles);
if ($resultat_suppression_mots_cles === false) {
$this->logger("CEL_bugs","Erreur de suppression d'une liste de mots clés d'observation(s) : ".$resultat_suppression_mots_cles);
}
259,8 → 259,8
$nouvel_ordre = $this->renvoyerDernierOrdreUtilisePlusUn($id_utilisateur);
// Recuperation relevés associés a la session
$requete_selection_releves_temporaires = 'SELECT ordre FROM cel_obs WHERE ce_utilisateur = '.$this->proteger($ancien_id).' ORDER BY ordre';
$resultat_releves_temporaires = $this->executerRequete($requete_selection_releves_temporaires);
$requete_selection_releves_temporaires = 'SELECT ordre FROM cel_obs WHERE ce_utilisateur = '.Cel::db()->proteger($ancien_id).' ORDER BY ordre';
$resultat_releves_temporaires = Cel::db()->executerRequete($requete_selection_releves_temporaires);
$reussite = true;
if(is_array($resultat_releves_temporaires)) {
267,11 → 267,11
foreach($resultat_releves_temporaires as $releve_temporaire) {
$requete_migration_releve = 'UPDATE cel_obs SET '.
'ce_utilisateur = '.$this->proteger($id_utilisateur).', '.
'ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).', '.
'ordre = '.$nouvel_ordre.' '.
'WHERE ce_utilisateur = '.$ancien_id.' '.
'AND ordre = '.$releve_temporaire['ordre'];
$migration_releve = $this->executerRequeteSimple($requete_migration_releve);
$migration_releve = Cel::db()->executerRequeteSimple($requete_migration_releve);
//TODO: meilleure vérification
if($migration_releve === false) {
294,13 → 294,13
// ATTENTION : cette fonction suppose que l'utilisateur n'ai pas déjà d'observations dans le CEL
// avec l'identifiant $id_utilisateur ce qui est normalement le cas
$requete_migration_releve = 'UPDATE cel_obs SET '.
'ce_utilisateur = '.$this->proteger($infos_utilisateur['id_utilisateur']).', '.
'prenom_utilisateur = '.$this->proteger($infos_utilisateur['prenom']).', '.
'nom_utilisateur = '.$this->proteger($infos_utilisateur['nom']).', '.
'courriel_utilisateur = '.$this->proteger($infos_utilisateur['courriel']).' '.
'WHERE ce_utilisateur = '.$this->proteger($mail_utilisateur).' ';
'ce_utilisateur = '.Cel::db()->proteger($infos_utilisateur['id_utilisateur']).', '.
'prenom_utilisateur = '.Cel::db()->proteger($infos_utilisateur['prenom']).', '.
'nom_utilisateur = '.Cel::db()->proteger($infos_utilisateur['nom']).', '.
'courriel_utilisateur = '.Cel::db()->proteger($infos_utilisateur['courriel']).' '.
'WHERE ce_utilisateur = '.Cel::db()->proteger($mail_utilisateur).' ';
 
$migration_releve = $this->executerRequeteSimple($requete_migration_releve);
$migration_releve = Cel::db()->executerRequeteSimple($requete_migration_releve);
return $migration_releve;
}
432,7 → 432,7
if (trim($valeur) == "" || trim($valeur) == "null") {
$valeur = "NULL";
} else {
$valeur = $this->proteger($valeur);
$valeur = Cel::db()->proteger($valeur);
}
$champs .= $cle.', ';
470,7 → 470,7
if (trim($valeur) == "" || trim($valeur) == "null") {
$valeur = "NULL";
} else {
$valeur = $this->proteger($valeur);
$valeur = Cel::db()->proteger($valeur);
}
$sous_requete .= $cle." = ".$valeur.", ";
/trunk/jrest/lib/GestionChampsEtendus.php
49,14 → 49,14
* @return bool
*/
public function existe($id_element_lie, $cle) {
$id = $this->proteger($id_element_lie);
$cle = $this->proteger($cle);
$id = Cel::db()->proteger($id_element_lie);
$cle = Cel::db()->proteger($cle);
$requete = 'SELECT COUNT(*) >= 1 AS existe '.
"FROM {$this->table_champs_etendus} ".
"WHERE {$this->champ_id} = $id ".
" AND cle = $cle ";
 
$resultat = $this->executerRequete($requete);
$resultat = Cel::db()->executerRequete($requete);
return ($resultat[0]['existe'] == '1');
}
 
67,9 → 67,9
* @return array tableau associatif des champs de la table etendu
*/
public function consulter($id_element_lie) {
$id = $this->proteger($id_element_lie);
$id = Cel::db()->proteger($id_element_lie);
$requete = "SELECT * FROM {$this->table_champs_etendus} WHERE {$this->champ_id} = $id ";
$resultat = $this->executerRequete($requete);
$resultat = Cel::db()->executerRequete($requete);
return $resultat;
}
 
84,11 → 84,11
public function consulterParLots(Array $ids_element_lies) {
$champs_etendus_par_element = array();
if (!empty($ids_element_lies)) {
$ids_element_lies = array_map(array($this, 'proteger'),$ids_element_lies);
$ids_element_lies = array_map(array(Cel::db(), 'proteger'),$ids_element_lies);
$ids = implode(',', $ids_element_lies);
 
$requete = "SELECT * FROM {$this->table_champs_etendus} WHERE {$this->champ_id} IN ($ids) ";
$resultats = $this->executerRequete($requete);
$resultats = Cel::db()->executerRequete($requete);
 
foreach ($resultats as &$ligne) {
$id_element = $ligne[$this->champ_id];
115,10 → 115,10
* @return bool true si l'ajout a eu lieu
*/
public function ajouter(ChampEtendu $champ_etendu) {
$id = $this->proteger($champ_etendu->id);
$cle = $this->proteger($champ_etendu->cle);
$label = $this->proteger($champ_etendu->label);
$valeur = $this->proteger($champ_etendu->valeur);
$id = Cel::db()->proteger($champ_etendu->id);
$cle = Cel::db()->proteger($champ_etendu->cle);
$label = Cel::db()->proteger($champ_etendu->label);
$valeur = Cel::db()->proteger($champ_etendu->valeur);
 
$requete = "INSERT INTO {$this->table_champs_etendus} ".
"( {$this->champ_id}, cle, label, valeur) ".
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 = $this->executerRequeteSimple($requete);
$ajout = Cel::db()->executerRequeteSimple($requete);
return ($ajout !== false);
}
 
141,10 → 141,10
public function ajouterParLots(Array $champs_etendus) {
$lignes = array();
foreach ($champs_etendus as $champ_etendu) {
$id = $this->proteger($champ_etendu->id);
$cle = $this->proteger($champ_etendu->cle);
$label = $this->proteger($champ_etendu->label);
$valeur = $this->proteger($champ_etendu->valeur);
$id = Cel::db()->proteger($champ_etendu->id);
$cle = Cel::db()->proteger($champ_etendu->cle);
$label = Cel::db()->proteger($champ_etendu->label);
$valeur = Cel::db()->proteger($champ_etendu->valeur);
 
$lignes[] = "($id, $cle, $label, $valeur)";
}
157,7 → 157,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 = $this->executerRequeteSimple($requete);
$ajout = Cel::db()->executerRequeteSimple($requete);
return ($ajout !== false);
}
 
168,10 → 168,10
* @return bool true si la modification a eu lieu
*/
public function modifier(ChampEtendu $champ_etendu) {
$id = $this->proteger($champ_etendu->id);
$cle = $this->proteger($champ_etendu->cle);
$label = $this->proteger($champ_etendu->label);
$valeur = $this->proteger($champ_etendu->valeur);
$id = Cel::db()->proteger($champ_etendu->id);
$cle = Cel::db()->proteger($champ_etendu->cle);
$label = Cel::db()->proteger($champ_etendu->label);
$valeur = Cel::db()->proteger($champ_etendu->valeur);
 
$requete = "UPDATE {$this->table_champs_etendus} ".
"SET label = $label, valeur = $valeur ".
178,7 → 178,7
"WHERE cle = $cle".
" AND {$this->champ_id} = $id ";
 
$modif = $this->executerRequeteSimple($requete);
$modif = Cel::db()->executerRequeteSimple($requete);
return ($modif !== false);
}
 
190,10 → 190,10
* @return bool
*/
public function supprimer($id_element_lie, $cle) {
$id = $this->proteger($id_element_lie);
$cle = $this->proteger($cle);
$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 = $this->executerRequeteSimple($requete);
$suppr = Cel::db()->executerRequeteSimple($requete);
return ($suppr !== false);
}
 
204,9 → 204,9
* @return bool
*/
public function vider($id_element_lie) {
$id = $this->proteger($id_element_lie);
$id = Cel::db()->proteger($id_element_lie);
$requete = "DELETE FROM {$this->table_champs_etendus} WHERE {$this->champ_id} = $id ";
$suppr = $this->executerRequeteSimple($requete);
$suppr = Cel::db()->executerRequeteSimple($requete);
return ($suppr !== false);
}
 
219,7 → 219,7
public function viderParLots($ids_elements_lies) {
$ids = $this->protegerTableau($ids_elements_lies);
$requete = "DELETE FROM {$this->table_champs_etendus} WHERE {$this->champ_id} IN (".implode(',',$ids).") ";
$suppr = $this->executerRequeteSimple($requete);
$suppr = Cel::db()->executerRequeteSimple($requete);
return ($suppr !== false);
}
234,7 → 234,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 = $this->executerRequete($requete);
$cles = Cel::db()->executerRequete($requete);
$i = 0;
foreach($cles as &$cle) {
$cles_fmt[$cle['cle']] = $i++;
/trunk/jrest/lib/RechercheObservation.php
20,16 → 20,16
$requete_selection_id = 'SELECT id_observation FROM cel_obs WHERE ordre ';
 
if (is_array($ordre)) {
$ordre = array_map(array($this,'proteger'), $ordre);
$ordre = array_map(array(Cel::db(),'proteger'), $ordre);
$requete_selection_id .= ' IN ('.implode(',',$ordre).') ';
} else {
$requete_selection_id .= ' = '.$this->proteger($ordre).' ';
$requete_selection_id .= ' = '.Cel::db()->proteger($ordre).' ';
}
 
$requete_selection_id .= ' AND ce_utilisateur = '.$this->proteger($id_utilisateur).
$requete_selection_id .= ' AND ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).
' ORDER BY id_observation';
 
$resultat_ids = $this->executerRequete($requete_selection_id);
$resultat_ids = Cel::db()->executerRequete($requete_selection_id);
 
$ids = array();
if (is_array($resultat_ids)) {
45,7 → 45,7
$requete_selection_observations = 'SELECT * FROM cel_obs ';
 
if ($id_utilisateur != null) {
$requete_selection_observations .= 'WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ';
$requete_selection_observations .= 'WHERE ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).' AND ';
} else if(count($criteres) > 0) {
$requete_selection_observations .= 'WHERE ';
}
67,7 → 67,7
 
public function get() {
if(!$this->requete_selection_observations) return FALSE;
return $this->executerRequete($this->requete_selection_observations);
return Cel::db()->executerRequete($this->requete_selection_observations);
}
 
public function compterObservations($id_utilisateur = null, $criteres = array()) {
74,7 → 74,7
$requete_selection_observations = 'SELECT COUNT(*) as nb_obs FROM cel_obs ';
 
if ($id_utilisateur != null) {
$requete_selection_observations .= 'WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ';
$requete_selection_observations .= 'WHERE ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).' AND ';
} else if(count($criteres) > 0) {
$requete_selection_observations .= 'WHERE ';
}
85,7 → 85,7
$requete_selection_observations = rtrim($requete_selection_observations, 'AND ');
 
$nb_obs = '0';
$resultat_requete_nombre_observations = $this->executerRequete($requete_selection_observations);
$resultat_requete_nombre_observations = Cel::db()->executerRequete($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'];
128,10 → 128,10
}
 
public function obtenirCourrielUtilisateurPourIdObs($id_obs) {
$id_obs = $this->proteger($id_obs);
$id_obs = Cel::db()->proteger($id_obs);
$requete = "SELECT courriel_utilisateur FROM cel_obs WHERE id_observation = $id_obs";
 
$utilisateur_courriel = $this->executerRequete($requete . ' -- ' . __FILE__ . ':' . __LINE__);
$utilisateur_courriel = Cel::db()->executerRequete($requete . ' -- ' . __FILE__ . ':' . __LINE__);
 
$retour = false;
if (!empty($utilisateur_courriel) && isset($utilisateur_courriel[0]['courriel_utilisateur'])) {
144,7 → 144,7
$requete_selection_mots_cles = 'SELECT DISTINCT id_mot_cle_obs '.
'FROM cel_obs_mots_cles '.
"WHERE id_observation = $id_observation ";
return $this->executerRequete($requete_selection_mots_cles);
return Cel::db()->executerRequete($requete_selection_mots_cles);
}
 
// TODO: fonction temporaire
176,7 → 176,7
if ($valeur == "NULL") {
$sous_requete .= "(date_observation IS NULL OR year(date_observation) = 0000)" ;
} else {
$sous_requete .= "(year(date_observation) = ".$this->proteger($valeur).")" ;
$sous_requete .= "(year(date_observation) = ".Cel::db()->proteger($valeur).")" ;
}
$sous_requete .= ' AND ' ;
break;
184,7 → 184,7
if ($valeur == "NULL") {
$sous_requete .= "date_observation IS NULL OR month(date_observation) = 00" ;
} else {
$sous_requete .= "month(date_observation) = ".$this->proteger($valeur) ;
$sous_requete .= "month(date_observation) = ".Cel::db()->proteger($valeur) ;
}
$sous_requete .= ' AND ' ;
break;
192,7 → 192,7
if ($valeur == "NULL") {
$sous_requete .= "date_observation IS NULL OR day(date_observation) = 00" ;
} else {
$sous_requete .= "day(date_observation) = ".$this->proteger($valeur) ;
$sous_requete .= "day(date_observation) = ".Cel::db()->proteger($valeur) ;
}
$sous_requete .= ' AND ' ;
break;
204,11 → 204,11
$dpts = explode(',',$valeur);
$sous_requete .= '(';
foreach($dpts as $dpt) {
$sous_requete .= "ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$dpt.'___').' OR ';
$sous_requete .= "ce_zone_geo LIKE ".Cel::db()->proteger('INSEE-C:'.$dpt.'___').' OR ';
}
$sous_requete = rtrim($sous_requete,' OR ').') ';
} else {
$sous_requete .= "(ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$valeur.'___').')';
$sous_requete .= "(ce_zone_geo LIKE ".Cel::db()->proteger('INSEE-C:'.$valeur.'___').')';
}
}
$sous_requete .= ' AND ' ;
217,7 → 217,7
if ($valeur == "NULL") {
$sous_requete .= "(zone_geo IS NULL OR zone_geo = '')";
} else {
$sous_requete .= "(zone_geo = ".$this->proteger($valeur).')';
$sous_requete .= "(zone_geo = ".Cel::db()->proteger($valeur).')';
}
$sous_requete .= ' AND ' ;
break;
232,15 → 232,15
$sous_requete .= ' AND ';
break;
case 'date_debut':
$sous_requete .= 'date_observation >= '.$this->proteger($this->formaterEnDateMysql($valeur));
$sous_requete .= 'date_observation >= '.Cel::db()->proteger($this->formaterEnDateMysql($valeur));
$sous_requete .= ' AND ';
break;
case 'date_fin':
$sous_requete .= 'date_observation <= '.$this->proteger($this->formaterEnDateMysql($valeur));
$sous_requete .= 'date_observation <= '.Cel::db()->proteger($this->formaterEnDateMysql($valeur));
$sous_requete .= ' AND ';
break;
case 'taxon':
$valeur_protegee = $this->proteger($valeur."%");
$valeur_protegee = Cel::db()->proteger($valeur."%");
$sous_requete .= "( nom_sel LIKE ".$valeur_protegee." OR".
" nom_ret LIKE ".$valeur_protegee." OR".
" famille LIKE ".$valeur_protegee.
252,7 → 252,7
break;
default:
if (trim($nom) != '') {
$sous_requete .= $nom." = ".$this->proteger($valeur) ;
$sous_requete .= $nom." = ".Cel::db()->proteger($valeur) ;
$sous_requete .= ' AND ';
}
if (trim($nom) == 'NULL') {
276,7 → 276,7
 
private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $valeur) {
$valeur = str_replace("*","%",$valeur);
$valeur = $this->proteger('%'.$valeur.'%');
$valeur = Cel::db()->proteger('%'.$valeur.'%');
$sous_requete = "(nom_sel LIKE ".$valeur.
" OR courriel_utilisateur LIKE ".$valeur.
" OR prenom_utilisateur LIKE ".$valeur.
307,17 → 307,17
if (preg_match('/.*OU.*/', $mot_cle)) {
$mots_cles_tab = explode('OU',$mot_cle);
foreach($mots_cles_tab as $mot_cle_item) {
$requete .= '(mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') OR ';
$requete .= '(mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
}
$requete = '('.rtrim($requete,'OR ').')';
} else if (preg_match('/.*ET.*/', $mot_cle)) {
$mots_cles_tab = explode('ET',$mot_cle);
foreach($mots_cles_tab as $mot_cle_item) {
$requete .= '(mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') AND ';
$requete .= '(mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
}
$requete = '('.rtrim($requete, 'AND ').') ';
} else {
$requete = "(mots_cles_texte LIKE ".$this->proteger('%'.$mot_cle.'%').') ';
$requete = "(mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
}
return $requete;
}
332,7 → 332,7
'jour' => 'date_observation',
'departement' => 'ce_zone_geo',
'commune' => 'zone_geo');
return $sous_requete .= $champs[$valeur]." = ".$this->proteger("");
return $sous_requete .= $champs[$valeur]." = ".Cel::db()->proteger("");
}
}
?>