Subversion Repositories eFlore/Applications.cel

Rev

Rev 1512 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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