Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 605 Rev 664
1
<?php
1
<?php
2
 
-
 
3
require_once('include/extract_metadonnee.php') ;
-
 
4
require_once('include/stockage_fichier.php') ;
-
 
5
 
-
 
6
/**
2
/**
7
 
-
 
8
 Aurelien Peronnet aurelienperonnet@gmail.com 2008
-
 
9
 
-
 
10
 Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais et
-
 
11
 respectant les principes de diffusion des logiciels libres. Vous pouvez
-
 
12
 utiliser, modifier et/ou redistribuer ce programme sous les conditions
-
 
13
 de la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIA
-
 
14
 sur le site "http://www.cecill.info".
-
 
15
 En contrepartie de l'accessibilit? au code source et des droits de copie,
-
 
16
 de modification et de redistribution accord?s par cette licence, il n'est
3
 * Service recherche, et de suppression multiple d'images a partir de divers critères
17
 offert aux utilisateurs qu'une garantie limit?e.  Pour les m?mes raisons,
-
 
18
 seule une responsabilit? restreinte p?se sur l'auteur du programme,  le
-
 
19
 titulaire des droits patrimoniaux et les conc?dants successifs.
-
 
20
 
-
 
21
 A cet ?gard  l'attention de l'utilisateur est attir?e sur les risques
-
 
22
 associ?s au chargement,  ? l'utilisation,  ? la modification et/ou au
-
 
23
 d?veloppement et ? la reproduction du logiciel par l'utilisateur ?tant
-
 
24
 donn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ?
-
 
25
 manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels
-
 
26
 avertis poss?dant  des  connaissances  informatiques approfondies.  Les
-
 
27
 utilisateurs sont donc invit?s ? charger  et  tester  l'ad?quation  du
-
 
28
 logiciel ? leurs besoins dans des conditions permettant d'assurer la
-
 
29
 s?curit? de leurs syst?mes et ou de leurs donn?es et, plus g?n?ralement,
-
 
30
 ? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?.
-
 
31
 
-
 
32
 Le fait que vous puissiez acc?der ? cet en-t?te signifie que vous avez
-
 
33
 pris connaissance de la licence CeCILL, et que vous en avez accept? les
-
 
34
 termes.
-
 
35
 
-
 
36
 */
-
 
37
 
-
 
38
 
-
 
39
// in : utf8
-
 
40
// out : utf8
4
 * Encodage en entrée : utf8
41
/*
-
 
42
 * InventoryImageList.php
-
 
43
 *
-
 
44
 * Cas d'utilisation :
5
 * Encodage en sortie : utf8
45
 * Service recherche d'images a partir de divers crit�res
-
 
46
 *
6
 *
-
 
7
 * @author Aurélien PERONNET <aurelien@tela-botanica.org>
47
 * 2: Le service recherche l'image correspondant au crit�res demand�
8
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
48
 * 3: Le service renvoie l'adresse de base de l'image qui permet de la localiser sous ses diff�rents formats (X, M ou L)
9
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
-
 
10
 * @version $Id$
49
 */
11
 */
50
 
-
 
51
 Class InventoryImageList extends DBAccessor {
12
 Class InventoryImageList extends DBAccessor {
52
 
13
 
53
	var $config;
14
	var $config;
54
 
15
 
55
	function InventoryImageList($config) {
16
	function InventoryImageList($config) {
56
 
17
 
57
		$this->config=$config;
18
		$this->config=$config;
58
	}
19
	}
59
 
20
 
60
 
21
 
61
	// renvoie l'enregistrement correspond � une image
22
	// renvoie l'enregistrement correspond � une image
62
	function getElement($uid)
23
	function getElement($uid)
63
	{
24
	{
64
			// uid[0] : utilisateur obligatoire
25
			// uid[0] : utilisateur obligatoire
65
			// uid[1] : crit�res de filtrage de la forme crit�re1:valeur1;crit�re2:valeur2
26
			// uid[1] : crit�res de filtrage de la forme crit�re1:valeur1;crit�re2:valeur2
66
 
27
 
67
		// Controle detournement utilisateur
28
		// Controle detournement utilisateur
68
	    session_start();
29
	    session_start();
69
		$this->controleUtilisateur($uid[0]);
30
		$this->controleUtilisateur($uid[0]);
70
 
31
 
71
		$DB=$this->connectDB($this->config,'cel_db');
32
		$DB=$this->connectDB($this->config,'cel_db');
72
 
33
 
73
		$criteres = array() ;
34
		$criteres = array() ;
74
 
35
 
75
		if(isset($uid[1]))
36
		if(isset($uid[1]))
76
		{
37
		{
77
			$criteres = explode("&", $uid[1]) ;
38
			$criteres = explode("&", $uid[1]) ;
78
		}
39
		}
79
 
40
 
80
		$query='SELECT * FROM cel_images WHERE ci_ce_utilisateur = "'.$uid[0].'" AND ' ;
41
		$query='SELECT * FROM cel_images WHERE ci_ce_utilisateur = "'.$uid[0].'" AND ' ;
81
 
42
 
82
		$numero_page = 0 ;
43
		$numero_page = 0 ;
83
		$limite = 50 ;
44
		$limite = 50 ;
84
 
45
 
85
		foreach($criteres as $pair)
46
		foreach($criteres as $pair)
86
		{
47
		{
87
			$nom_valeur = explode("=",$pair) ;
48
			$nom_valeur = explode("=",$pair) ;
88
 
49
 
89
			if(sizeof($nom_valeur) != 0)
50
			if(sizeof($nom_valeur) != 0)
90
			{
51
			{
91
					if($nom_valeur[0] == "ci_limite")
52
					if($nom_valeur[0] == "ci_limite")
92
					{
53
					{
93
						$limite = $DB->escapeSimple($nom_valeur[1]) ;
54
						$limite = $DB->escapeSimple($nom_valeur[1]) ;
94
					}
55
					}
95
					elseif($nom_valeur[0] == "ci_numero_page")
56
					elseif($nom_valeur[0] == "ci_numero_page")
96
					{
57
					{
97
						$numero_page = $DB->escapeSimple($nom_valeur[1]) ;
58
						$numero_page = $DB->escapeSimple($nom_valeur[1]) ;
98
					}
59
					}
99
					elseif($nom_valeur[0] == "ci_meta_mots_cles")
60
					elseif($nom_valeur[0] == "ci_meta_mots_cles")
100
					{
61
					{
101
						$mots_cles = rtrim($nom_valeur[1], ',') ;
62
						$mots_cles = rtrim($nom_valeur[1], ',') ;
102
						$mots_cles_liste = explode("," , $mots_cles) ;
63
						$mots_cles_liste = explode("," , $mots_cles) ;
103
 
64
 
104
						foreach($mots_cles_liste as $mot_cle)
65
						foreach($mots_cles_liste as $mot_cle)
105
						{
66
						{
106
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_cle).'%"' ;
67
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_cle).'%"' ;
107
							$query .= ' AND ' ;
68
							$query .= ' AND ' ;
108
						}
69
						}
109
					}
70
					}
110
					elseif($nom_valeur[0] == "ci_meta_comment")
71
					elseif($nom_valeur[0] == "ci_meta_comment")
111
					{
72
					{
112
						$mots_comment_liste = explode(" " , $nom_valeur[1]) ;
73
						$mots_comment_liste = explode(" " , $nom_valeur[1]) ;
113
 
74
 
114
						foreach($mots_comment_liste as $mot_comment)
75
						foreach($mots_comment_liste as $mot_comment)
115
						{
76
						{
116
							$mot_comment = trim($mot_comment) ;
77
							$mot_comment = trim($mot_comment) ;
117
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_comment).'%"' ;
78
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_comment).'%"' ;
118
							$query .= ' AND ' ;
79
							$query .= ' AND ' ;
119
						}
80
						}
120
					}
81
					}
121
					elseif($nom_valeur[0] == "ci_meta_date")
82
					elseif($nom_valeur[0] == "annee" || $nom_valeur[0] == "mois" || $nom_valeur[0] == "jour")
122
					{
83
					{
123
						$query .= 'DATE_FORMAT( '.$nom_valeur[0].', \'%Y-%m-%d\' ) = "'.$DB->escapeSimple($nom_valeur[1]).'"' ;
84
						$query .= $this->fabriquerSousRequeteRechercheDate($nom_valeur[0], $nom_valeur[1]) ;
124
						$query .= ' AND ' ;
85
						$query .= ' AND ' ;
125
					}
86
					}
126
					elseif($nom_valeur[0] == "ci_id_tampon")
87
					elseif($nom_valeur[0] == "ci_id_tampon")
127
					{
88
					{
128
						$ids_tampon = rtrim($nom_valeur[1], ',') ;
89
						$ids_tampon = rtrim($nom_valeur[1], ',') ;
129
						$query .= 'ci_id_image IN ( '.$DB->escapeSimple($ids_tampon).')' ;
90
						$query .= 'ci_id_image IN ( '.$DB->escapeSimple($ids_tampon).')' ;
130
					}
91
					}
-
 
92
					elseif($nom_valeur[0] == "ci_recherche_generale")
-
 
93
					{
-
 
94
						$query .= $this->fabriquerSousRequeteRechercheGenerale($uid[0], $nom_valeur[1]);
-
 
95
						$query .= ' AND ';
-
 
96
					}
131
					else
97
					else
132
					{
98
					{
133
						$query .= $nom_valeur[0].' = "'.$DB->escapeSimple($nom_valeur[1]) ;
99
						$query .= $nom_valeur[0].' = "'.$DB->escapeSimple($nom_valeur[1]) ;
134
						$query .= '" AND ' ;
100
						$query .= '" AND ' ;
135
					}
101
					}
136
			}
102
			}
137
		}
103
		}
138
 
104
 
139
		$debut = $limite*$numero_page ;
105
		$debut = $limite*$numero_page ;
140
 
106
 
141
		$query = rtrim($query,' AND ') ;
107
		$query = rtrim($query,' AND ') ;
-
 
108
		
142
		$query .= ' ORDER BY ci_ordre LIMIT '.$debut.','.$limite ;
109
		$query .= ' ORDER BY ci_ordre LIMIT '.$debut.','.$limite ;
143
 
110
 
144
		$res =& $DB->query($query);
111
		$res =& $DB->query($query);
145
                if (PEAR::isError($res)) {
112
                if (PEAR::isError($res)) {
146
 
113
 
147
                	die($res->getMessage());
114
                	die($res->getMessage());
148
                }
115
                }
149
 
116
 
150
		$result = array() ;
117
		$result = array() ;
151
 
118
 
152
		while($image = $res->fetchrow(DB_FETCHMODE_ASSOC))
119
		while($image = $res->fetchrow(DB_FETCHMODE_ASSOC))
153
		{
120
		{
154
			$date = split("-",$image['ci_meta_date']) ;
121
			$date = split("-",$image['ci_meta_date']) ;
155
			if(count($date) > 2)
122
			if(count($date) > 2)
156
			{
123
			{
157
				$image['ci_meta_date'] = $date[2].'/'.$date[1].'/'.$date[0] ;
124
				$image['ci_meta_date'] = $date[2].'/'.$date[1].'/'.$date[0] ;
158
			}
125
			}
159
 
126
 
160
			$image['ci_ce_observation'] = '';
127
			$image['ci_ce_observation'] = '';
161
 
128
 
162
			$requete_table_liaison = 'SELECT coi_ce_observation FROM cel_obs_images WHERE coi_ce_image = '.$image['ci_id_image'].' AND coi_ce_utilisateur ="'.$uid[0].'"';
129
			$requete_table_liaison = 'SELECT coi_ce_observation FROM cel_obs_images WHERE coi_ce_image = '.$image['ci_id_image'].' AND coi_ce_utilisateur ="'.$uid[0].'"';
163
						
130
						
164
			$res_table_liaison =& $DB->query($requete_table_liaison);
131
			$res_table_liaison =& $DB->query($requete_table_liaison);
165
            if (PEAR::isError($res_table_liaison)) {
132
            if (PEAR::isError($res_table_liaison)) {
166
 
133
 
167
            	die($res_table_liaison->getMessage());
134
            	die($res_table_liaison->getMessage());
168
            }
135
            }
169
 
136
 
170
			$ids_obs = '';
137
			$ids_obs = '';
171
			while($liaison = $res_table_liaison->fetchrow(DB_FETCHMODE_ASSOC))
138
			while($liaison = $res_table_liaison->fetchrow(DB_FETCHMODE_ASSOC))
172
			{
139
			{
173
				$ids_obs .= $liaison['coi_ce_observation'].",";
140
				$ids_obs .= $liaison['coi_ce_observation'].",";
174
			}
141
			}
175
 
142
 
176
			$ids_obs = rtrim($ids_obs,',');
143
			$ids_obs = rtrim($ids_obs,',');
177
 
144
 
178
			if(trim($ids_obs) != '') {
145
			if(trim($ids_obs) != '') {
179
				$requete_obs_liees = 'SELECT * FROM cel_inventory WHERE ordre IN  ('.$ids_obs.') AND identifiant ="'.$uid[0].'"';
146
				$requete_obs_liees = 'SELECT * FROM cel_inventory WHERE ordre IN  ('.$ids_obs.') AND identifiant ="'.$uid[0].'"';
180
				$res_obs_liees =& $DB->query($requete_obs_liees);
147
				$res_obs_liees =& $DB->query($requete_obs_liees);
181
	            if (PEAR::isError($res_obs_liees)) {
148
	            if (PEAR::isError($res_obs_liees)) {
182
 
149
 
183
	            	die($res_obs_liees->getMessage());
150
	            	die($res_obs_liees->getMessage());
184
	            }
151
	            }
185
 
152
 
186
				while($obs_liee = $res_obs_liees->fetchrow(DB_FETCHMODE_ASSOC))
153
				while($obs_liee = $res_obs_liees->fetchrow(DB_FETCHMODE_ASSOC))
187
				{
154
				{
188
					$image['ci_ce_observation'] .= $obs_liee['ordre'].'#'.$obs_liee['nom_sel'].'#'.$obs_liee['transmission'].';;' ;
155
					$image['ci_ce_observation'] .= $obs_liee['ordre'].'#'.$obs_liee['nom_sel'].'#'.$obs_liee['transmission'].';;' ;
189
				}
156
				}
190
			}
157
			}
191
 
158
 
192
			$result[] = $image ;
159
			$result[] = $image ;
193
		}
160
		}
194
 
161
 
195
		$res = json_encode($result) ;
162
		$res = json_encode($result) ;
-
 
163
		
-
 
164
		$res = str_replace('\u0000','',$res);
196
 
165
 
197
		header("content-type: text/json") ;
166
		header("content-type: text/html") ;
198
		print $res ;
167
		print $res ;
199
		exit() ;
168
		exit() ;
200
	}
169
	}
201
 
-
 
-
 
170
 
202
	// met � jour les m�tadonn�es d'une image
171
	
203
	function updateElement($uid,$pairs)
172
	function updateElement($uid,$pairs)
204
	{
-
 
205
		// Controle detournement utilisateur
-
 
206
	    session_start();
-
 
207
	 	$this->controleUtilisateur($uid[0]);
-
 
208
 
-
 
209
		$DB=$this->connectDB($this->config,'cel_db');
173
	{
210
				$query .= ' WHERE '.$ci_id_image.' = "'.$DB->escapeSimple($pairs['ci_id_image']).'"' ;
174
 
211
	}
175
	}
212
 
176
 
213
	function deleteElement($uid)
177
	function deleteElement($uid)
214
	{
178
	{
215
 
179
 
216
		// uid[0] : utilisateur obligatoire
180
		// uid[0] : utilisateur obligatoire
217
	// uid[1] : identifiant(s) image(s) obligatoire(s)
181
	// uid[1] : identifiant(s) image(s) obligatoire(s)
218
 
182
 
219
	 // Controle detournement utilisateur
183
	 // Controle detournement utilisateur
220
	    session_start();
184
	    session_start();
221
		$this->controleUtilisateur($uid[0]);
185
		$this->controleUtilisateur($uid[0]);
222
 
186
 
223
		$DB=$this->connectDB($this->config,'cel_db');
187
		$DB=$this->connectDB($this->config,'cel_db');
224
 
188
 
225
		$id = rtrim($uid[1],",") ;
189
		$id = rtrim($uid[1],",") ;
226
 
190
 
227
		if (isset($id)) {
191
		if (isset($id)) {
228
	           	$query="DELETE FROM cel_images WHERE ci_id_image in (".$DB->escapeSimple($id) .")";
192
	           	$query="DELETE FROM cel_images WHERE ci_id_image in (".$DB->escapeSimple($id) .")";
229
				$query_sup_lien = "DELETE FROM cel_obs_images WHERE coi_ce_image in (".$DB->escapeSimple($id) .")";
193
				$query_sup_lien = "DELETE FROM cel_obs_images WHERE coi_ce_image in (".$DB->escapeSimple($id) .")";
230
		}
194
		}
231
 
195
 
232
		$res =& $DB->query($query);
196
		$res =& $DB->query($query);
233
 
197
 
234
		if (PEAR::isError($res)) {
198
		if (PEAR::isError($res)) {
235
			die($res->getMessage());
199
			die($res->getMessage());
236
		}
200
		}
237
		else
201
		else
238
		{
202
		{
239
			$res =& $DB->query($query_sup_lien);
203
			$res =& $DB->query($query_sup_lien);
240
			if(PEAR::isError($res))
204
			if(PEAR::isError($res))
241
			{
205
			{
242
				die($res->getMessage());
206
				die($res->getMessage());
243
			}
207
			}
244
 
208
 
245
			$id_fichiers = explode(",",$id) ;
209
			$id_fichiers = explode(",",$id) ;
246
			foreach($id_fichiers as $en_cours)
210
			foreach($id_fichiers as $en_cours)
247
			{
211
			{
248
				$manipulateur_image = new ImageRecreation($this->config);
212
				$manipulateur_image = new ImageRecreation($this->config);
249
            	$manipulateur_image->detruireImageSurDisque($id);
213
            	$manipulateur_image->detruireImageSurDisque($id);
250
			}
214
			}
251
 
215
 
252
			echo "OK" ;
216
			echo "OK" ;
253
			exit() ;
217
			exit() ;
254
		}
218
		}
255
	}
219
	}
-
 
220
	
-
 
221
	private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $chaine_recherche) {
-
 
222
		
-
 
223
		$requete_recherche_taxon .= 'SELECT coi_ce_image 
-
 
224
								FROM cel_obs_images
-
 
225
								WHERE coi_ce_observation IN ' .
-
 
226
								'(SELECT ordre ' .
-
 
227
									'FROM cel_inventory '.
-
 
228
									'WHERE identifiant ="'.$id_utilisateur.'" '.
-
 
229
									'AND nom_sel LIKE "'.$chaine_recherche.'%" '.
-
 
230
								')';
-
 
231
								
-
 
232
		$requete_recherche_comm = ' ci_meta_comment LIKE "%'.$chaine_recherche.'%" ';
-
 
233
		
-
 
234
		$requete_recherche_generale = '(ci_id_image IN ( '.($requete_recherche_taxon).') OR ('.$requete_recherche_comm.'))' ;
-
 
235
							
-
 
236
		return $requete_recherche_generale;
-
 
237
	}
-
 
238
	
-
 
239
	private function fabriquerSousRequeteRechercheDate($intervalle, $valeur) {
-
 
240
		
-
 
241
		$correspondance_champ = array('annee' => 'YEAR','mois' => 'MONTH','jour' => 'DAY');
-
 
242
		
-
 
243
		$requete_recherche_date = '';
-
 
244
		
-
 
245
		$requete_recherche_date = $correspondance_champ[$intervalle].'(ci_meta_date) = "'.$valeur.'" ';
-
 
246
							
-
 
247
		return $requete_recherche_date;
-
 
248
	}
256
 
249
 
257
}
250
}
258
?>
251
?>