Rev 1527 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** PHP Version 5** @category PHP* @package jrest* @author Aurelien Peronnet <aurelien@tela-botanica.org>* @copyright 2010 Tela-Botanica* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL* @version SVN: <svn_id>* @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);}}?>