* @copyright 2010 Tela-Botanica * @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL * @version SVN: * @link /doc/jrest/ */ /** * Classe de gestion de l'ajout, modification et suppression des champs supplémentaires des obs et images * * in=utf8 * out=utf8 * */ class GestionChampsEtendus extends Cel { private $mode = null; private $table_champs_etendus = null; private $champ_id = null; public function GestionChampsEtendus($config, $mode) { parent::__construct($config); $this->mode = $mode; if($this->mode == 'obs') { $this->mode = 'obs'; $this->table_champs_etendus = 'cel_obs_etendues'; $this->champ_id = 'id_observation'; } else if($this->mode == 'image') { $this->mode = 'image'; $this->table_champs_etendus = 'cel_images_etendues'; $this->champ_id = 'id_image'; } else { throw new Exception('Mode inconnu, les modes autorisés sont "obs" et "image"'); } } /** * Renvoie true ou false suivant que l'element indiqué possède une valeur * pour la clé indiquée * * @param int $id_element_lie * @param string $cle * @param string $valeur * @return bool */ public function champEtenduExistePourElement($id_element_lie, $cle) { $requete = "SELECT COUNT(*) >= 1 as existe FROM ".$this->table_champs_etendus." ". "WHERE ".$this->champ_id." = ".$this->proteger($id_element_lie)." ". "AND cle = ".$this->proteger($cle); $resultat = $this->executerRequete($requete); return ($resultat[0]['existe'] == "1"); } /** * Renvoie tous les champs étendus associé à l'élément passé en paramètre * * @param int $id_element_lie * @return array */ public function obtenirChampsEtendusPourElement($id_element_lie) { $requete = "SELECT * FROM ".$this->table_champs_etendus." ". "WHERE ".$this->champ_id." = ".$this->proteger($id_element_lie)." "; $resultat = $this->executerRequete($requete); return $resultat; } /** * Renvoie tous les champs étendus associés aux éléments passés en paramètre * Sous forme tableau de tableaux associatifs clé valeur regroupé par id d'élement * * @param array $ids_element_lies * @return array */ public function obtenirChampsEtendusPourElementsMultiples($ids_element_lies) { $champs_etendus_par_element = array(); if(!empty($ids_element_lies)) { $ids_element_lies = array_map(array($this, 'proteger'),$ids_element_lies); $requete = "SELECT * FROM ".$this->table_champs_etendus." ". "WHERE ".$this->champ_id." IN (".implode(',',$ids_element_lies).") "; $resultats = $this->executerRequete($requete); $champs_etendus_par_element = array(); foreach ($resultats as &$ligne) { $id_element = $ligne[$this->champ_id]; if(!isset($champs_etendus_par_element[$id_element])) { $champs_etendus_par_element[$id_element] = array(); } $champs_etendus_par_element[$id_element][$ligne['cle']] = $ligne['valeur']; } } return $champs_etendus_par_element; } /** * Ajoute un champ étendu à l'élément passé en paramètre, * si la clé existe déjà, seule valeur du champ est mise à jour * * @param int $id_element_lie * @param string $cle * @param string $valeur * @return bool */ public function ajouterChampEtendu($id_element_lie, $cle, $valeur) { $requete = "INSERT INTO ".$this->table_champs_etendus." ". "(".$this->champ_id.", cle, valeur) ". "VALUES (".$this->proteger($id_element_lie).",".$this->proteger($cle).",".$this->proteger($valeur).") ". "ON DUPLICATE KEY UPDATE valeur = VALUES(valeur)"; // 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); return ($ajout !== false); } /** * Ajoute des champs étendus à l'élément passé en paramètre, * si la clé existe déjà, seule la valeur du champ est mise à jour * * @param int $id_element_lie * @param array $cles_valeurs tableau de clés => valeurs à associer à l'élément * @return bool */ public function ajouterChampsEtendusMultiples($id_element_lie, $cles_valeurs) { $lignes = array(); foreach($cles_valeurs as $cle => $valeur) { $lignes[] = "(".$this->proteger($id_element_lie).",".$this->proteger($cle).",".$this->proteger($valeur).")"; } $requete = "INSERT INTO ".$this->table_champs_etendus." ". "(".$this->champ_id.", cle, valeur) ". "VALUES ".implode(',', $lignes)." ". "ON DUPLICATE KEY UPDATE valeur = VALUES(valeur)"; // 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); return ($ajout !== false); } /** * Ajoute des champs étendus aux éléments passés en paramètre, * si la clé existe déjà, seule la valeur du champ est mise à jour * * @param array $elements_cles_valeurs tableau associatif de la forme id, cle, valeur * @return bool */ public function ajouterChampsEtendusMultiplesAElementsMultiples($elements_cles_valeurs) { $lignes = array(); foreach($elements_cles_valeurs as &$element) { $lignes[] = "(".$this->proteger($element['id']).",".$this->proteger($element['cle']).",".$this->proteger($element['valeur']).")"; } $requete = "INSERT INTO ".$this->table_champs_etendus." ". "(".$this->champ_id.", cle, valeur) ". "VALUES ".implode(',', $lignes)." ". "ON DUPLICATE KEY UPDATE valeur = VALUES(valeur)"; // 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); return ($ajout !== false); } /** * Modifie un champ étendu associé à l'élément passé en paramètre * * @param int $id_element_lie * @param string $cle * @param string $valeur * @return bool */ public function modifierChampEtendu($id_element_lie, $cle, $valeur) { $requete = "UPDATE ".$this->table_champs_etendus." ". "SET valeur = ".$this->proteger($valeur)." ". "WHERE cle = ".$this->proteger($cle)." AND ". $this->champ_id." = ".$this->proteger($id_element_lie); $modif = $this->executerRequeteSimple($requete); return ($modif !== false); } /** * Supprime le champ champ étendu associé à l'élément et au nom de clé passés en paramètre * * @param int $id_element_lie * @param string $cle * @return bool */ public function supprimerChampEtendu($id_element_lie, $cle) { $requete = "DELETE FROM ".$this->table_champs_etendus." ". "WHERE cle = ".$this->proteger($cle)." AND ". $this->champ_id." = ".$this->proteger($id_element_lie); $suppr = $this->executerRequeteSimple($requete); return ($suppr !== false); } /** * Supprime tous les champs champ étendu associés à l'élément passés en paramètre * * @param int $id_element_lie * @return bool */ public function supprimerChampsEtendusAElement($id_element_lie) { $requete = "DELETE FROM ".$this->table_champs_etendus." ". "WHERE ".$this->champ_id." = ".$this->proteger($id_element_lie); $suppr = $this->executerRequeteSimple($requete); return ($suppr !== false); } } ?>