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