Subversion Repositories eFlore/Applications.cel

Rev

Rev 1512 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1504 aurelien 1
<?php
2
 
3
/**
4
* PHP Version 5
5
*
6
* @category  PHP
7
* @package   jrest
8
* @author    Aurelien Peronnet <aurelien@tela-botanica.org>
9
* @copyright 2010 Tela-Botanica
10
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
11
* @version   SVN: <svn_id>
12
* @link      /doc/jrest/
13
*/
14
 
15
/**
16
* Classe de gestion de l'ajout, modification et suppression des champs supplémentaires des obs et images
17
*
18
* in=utf8
19
* out=utf8
20
*
21
*/
1512 aurelien 22
class GestionChampsEtendus extends Cel {
1504 aurelien 23
 
24
	private $mode = null;
1512 aurelien 25
	private $table_champs_etendus = null;
1504 aurelien 26
	private $champ_id = null;
27
 
1512 aurelien 28
	public function GestionChampsEtendus($config, $mode) {
1504 aurelien 29
		parent::__construct($config);
30
		$this->mode = $mode;
31
 
32
		if($this->mode == 'obs') {
33
			$this->mode = 'obs';
1512 aurelien 34
			$this->table_champs_etendus = 'cel_obs_etendues';
1504 aurelien 35
			$this->champ_id = 'id_observation';
36
		} else if($this->mode == 'image') {
37
			$this->mode = 'image';
1512 aurelien 38
			$this->table_champs_etendus = 'cel_images_etendues';
1504 aurelien 39
			$this->champ_id = 'id_image';
40
		} else {
41
			throw new Exception('Mode inconnu, les modes autorisés sont "obs" et "image"');
42
		}
43
	}
44
 
45
	/**
46
	* Renvoie true ou false suivant que l'element indiqué possède une valeur
47
	* pour la clé indiquée
48
	*
49
	* @param int $id_element_lie
50
	* @param string $cle
51
	* @param string $valeur
52
	* @return bool
53
	*/
1512 aurelien 54
	public function champEtenduExistePourElement($id_element_lie, $cle) {
55
		$requete = "SELECT COUNT(*) >= 1 as existe FROM ".$this->table_champs_etendus." ".
1504 aurelien 56
					"WHERE ".$this->champ_id." = ".$this->proteger($id_element_lie)." ".
57
					"AND cle = ".$this->proteger($cle);
58
 
59
		$resultat = $this->executerRequete($requete);
60
		return ($resultat[0]['existe'] == "1");
61
	}
62
 
63
	/**
1512 aurelien 64
	* Renvoie tous les champs étendus associé à l'élément passé en paramètre
1504 aurelien 65
	*
66
	* @param int $id_element_lie
67
	* @return array
68
	*/
1512 aurelien 69
	public function obtenirChampsEtendusPourElement($id_element_lie) {
70
		$requete = "SELECT * FROM ".$this->table_champs_etendus." ".
1504 aurelien 71
						"WHERE ".$this->champ_id." = ".$this->proteger($id_element_lie)." ";
72
 
73
		$resultat = $this->executerRequete($requete);
74
		return $resultat;
75
	}
76
 
77
	/**
1512 aurelien 78
	* Renvoie tous les champs étendus associés aux éléments passés en paramètre
1504 aurelien 79
	* Sous forme tableau de tableaux associatifs clé valeur regroupé par id d'élement
80
	*
81
	* @param array $ids_element_lies
82
	* @return array
83
	*/
1512 aurelien 84
	public function obtenirChampsEtendusPourElementsMultiples($ids_element_lies) {
85
		$champs_etendus_par_element = array();
1527 aurelien 86
		if(!empty($ids_element_lies)) {
87
			$ids_element_lies = array_map(array($this, 'proteger'),$ids_element_lies);
88
 
89
			$requete = "SELECT * FROM ".$this->table_champs_etendus." ".
90
								"WHERE ".$this->champ_id." IN (".implode(',',$ids_element_lies).") ";
91
 
92
			$resultats = $this->executerRequete($requete);
93
 
94
			$champs_etendus_par_element = array();
95
 
96
			foreach ($resultats as &$ligne) {
97
				$id_element = $ligne[$this->champ_id];
98
				if(!isset($champs_etendus_par_element[$id_element])) {
99
					$champs_etendus_par_element[$id_element] = array();
100
				}
101
				$champs_etendus_par_element[$id_element][$ligne['cle']] = $ligne['valeur'];
1504 aurelien 102
			}
103
		}
104
 
1512 aurelien 105
		return $champs_etendus_par_element;
1504 aurelien 106
	}
107
 
108
	/**
1512 aurelien 109
	 * Ajoute un champ étendu à l'élément passé en paramètre,
1504 aurelien 110
	 * si la clé existe déjà, seule valeur du champ est mise à jour
111
	 *
112
	 * @param int $id_element_lie
113
	 * @param string $cle
114
	 * @param string $valeur
115
	 * @return bool
116
	 */
1512 aurelien 117
	public function ajouterChampEtendu($id_element_lie, $cle, $valeur) {
118
		$requete = "INSERT INTO ".$this->table_champs_etendus." ".
1504 aurelien 119
		           "(".$this->champ_id.", cle, valeur) ".
120
		           "VALUES (".$this->proteger($id_element_lie).",".$this->proteger($cle).",".$this->proteger($valeur).") ".
121
		           "ON DUPLICATE KEY UPDATE valeur = VALUES(valeur)";
122
 
123
		// la partie on duplicate key est spécifique mysql mais il sera facile de s'en passer le jour
124
		// où l'on change de sgbd
125
		$ajout = $this->executerRequeteSimple($requete);
126
		return ($ajout !== false);
127
	}
128
 
129
	/**
1512 aurelien 130
	* Ajoute des champs étendus à l'élément passé en paramètre,
1504 aurelien 131
	* si la clé existe déjà, seule la valeur du champ est mise à jour
132
	*
133
	* @param int $id_element_lie
134
	* @param array $cles_valeurs tableau de clés => valeurs à associer à l'élément
135
	* @return bool
136
	*/
1512 aurelien 137
	public function ajouterChampsEtendusMultiples($id_element_lie, $cles_valeurs) {
1504 aurelien 138
 
139
		$lignes = array();
140
		foreach($cles_valeurs as $cle => $valeur) {
141
			$lignes[] = "(".$this->proteger($id_element_lie).",".$this->proteger($cle).",".$this->proteger($valeur).")";
142
		}
143
 
1512 aurelien 144
		$requete = "INSERT INTO ".$this->table_champs_etendus." ".
1504 aurelien 145
			           "(".$this->champ_id.", cle, valeur) ".
146
			           "VALUES ".implode(',', $lignes)." ".
147
			           "ON DUPLICATE KEY UPDATE valeur = VALUES(valeur)";
148
 
149
		// la partie on duplicate key est spécifique mysql mais il sera facile de s'en passer le jour
150
		// où l'on change de sgbd
151
		$ajout = $this->executerRequeteSimple($requete);
152
		return ($ajout !== false);
153
	}
154
 
155
	/**
1512 aurelien 156
	* Ajoute des champs étendus aux éléments passés en paramètre,
1504 aurelien 157
	* si la clé existe déjà, seule la valeur du champ est mise à jour
158
	*
159
	* @param array $elements_cles_valeurs tableau associatif de la forme id, cle, valeur
160
	* @return bool
161
	*/
1512 aurelien 162
	public function ajouterChampsEtendusMultiplesAElementsMultiples($elements_cles_valeurs) {
1504 aurelien 163
 
164
		$lignes = array();
165
		foreach($elements_cles_valeurs as &$element) {
166
			$lignes[] = "(".$this->proteger($element['id']).",".$this->proteger($element['cle']).",".$this->proteger($element['valeur']).")";
167
		}
168
 
1512 aurelien 169
		$requete = "INSERT INTO ".$this->table_champs_etendus." ".
1504 aurelien 170
				           "(".$this->champ_id.", cle, valeur) ".
171
				           "VALUES ".implode(',', $lignes)." ".
172
				           "ON DUPLICATE KEY UPDATE valeur = VALUES(valeur)";
173
 
174
		// la partie on duplicate key est spécifique mysql mais il sera facile de s'en passer le jour
175
		// où l'on change de sgbd
176
		$ajout = $this->executerRequeteSimple($requete);
177
		return ($ajout !== false);
178
	}
179
 
180
	/**
1512 aurelien 181
	 * Modifie un champ étendu associé à l'élément passé en paramètre
1504 aurelien 182
	 *
183
	 * @param int $id_element_lie
184
	 * @param string $cle
185
	 * @param string $valeur
186
	 * @return bool
187
	 */
1512 aurelien 188
	public function modifierChampEtendu($id_element_lie, $cle, $valeur) {
189
		$requete = "UPDATE ".$this->table_champs_etendus." ".
1504 aurelien 190
				           "SET valeur = ".$this->proteger($valeur)." ".
191
				           "WHERE cle = ".$this->proteger($cle)." AND ".
192
						   $this->champ_id." = ".$this->proteger($id_element_lie);
193
 
194
		$modif = $this->executerRequeteSimple($requete);
195
		return ($modif !== false);
196
	}
197
 
198
	/**
1512 aurelien 199
	* Supprime le champ champ étendu associé à l'élément et au nom de clé passés en paramètre
1504 aurelien 200
	*
201
	* @param int $id_element_lie
202
	* @param string $cle
203
	* @return bool
204
	*/
1512 aurelien 205
	public function supprimerChampEtendu($id_element_lie, $cle) {
206
		$requete = "DELETE FROM ".$this->table_champs_etendus." ".
1504 aurelien 207
					"WHERE cle = ".$this->proteger($cle)." AND ".
208
					$this->champ_id." = ".$this->proteger($id_element_lie);
209
 
210
		$suppr = $this->executerRequeteSimple($requete);
211
		return ($suppr !== false);
212
	}
213
 
214
	/**
1512 aurelien 215
	* Supprime tous les champs champ étendu associés à l'élément passés en paramètre
1504 aurelien 216
	*
217
	* @param int $id_element_lie
218
	* @return bool
219
	*/
1512 aurelien 220
	public function supprimerChampsEtendusAElement($id_element_lie) {
221
		$requete = "DELETE FROM ".$this->table_champs_etendus." ".
1504 aurelien 222
							"WHERE ".$this->champ_id." = ".$this->proteger($id_element_lie);
223
 
224
		$suppr = $this->executerRequeteSimple($requete);
225
		return ($suppr !== false);
226
	}
227
}
228
?>