Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
2
 
3
require_once('include/extract_metadonnee.php') ;
4
require_once('include/stockage_fichier.php') ;
5
/**
6
 
7
 Aurelien Peronnet aurelienperonnet@gmail.com 2008
8
 
9
 Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais et
10
 respectant les principes de diffusion des logiciels libres. Vous pouvez
11
 utiliser, modifier et/ou redistribuer ce programme sous les conditions
12
 de la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIA
13
 sur le site "http://www.cecill.info".
14
 En contrepartie de l'accessibilit? au code source et des droits de copie,
15
 de modification et de redistribution accord?s par cette licence, il n'est
16
 offert aux utilisateurs qu'une garantie limit?e.  Pour les m?mes raisons,
17
 seule une responsabilit? restreinte p?se sur l'auteur du programme,  le
18
 titulaire des droits patrimoniaux et les conc?dants successifs.
19
 
20
 A cet ?gard  l'attention de l'utilisateur est attir?e sur les risques
21
 associ?s au chargement,  ? l'utilisation,  ? la modification et/ou au
22
 d?veloppement et ? la reproduction du logiciel par l'utilisateur ?tant
23
 donn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ?
24
 manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels
25
 avertis poss?dant  des  connaissances  informatiques approfondies.  Les
26
 utilisateurs sont donc invit?s ? charger  et  tester  l'ad?quation  du
27
 logiciel ? leurs besoins dans des conditions permettant d'assurer la
28
 s?curit? de leurs syst?mes et ou de leurs donn?es et, plus g?n?ralement,
29
 ? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?.
30
 
31
 Le fait que vous puissiez acc?der ? cet en-t?te signifie que vous avez
32
 pris connaissance de la licence CeCILL, et que vous en avez accept? les
33
 termes.
34
 
35
 */
36
 
37
 
38
// in : utf8
39
// out : utf8
40
/*
41
 * InventoryImage.php
42
 *
43
 * Cas d'utilisation :
44
 * Service recherche  et ajout d'image a partir de divers crit�res
45
 *
46
 * 1: Le service recoit une image � ajouter � la base de donn�e
47
 * 2: Le service recherche l'image correspondant au crit�res demand�
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)
49
 */
50
 
51
Class InventoryImage extends DBAccessor {
52
 
53
	var $config;
54
 
55
	function InventoryImage($config) {
56
 
57
		$this->config=$config;
58
	}
59
 
60
 
61
	// renvoie l'enregistrement correspond � une image
62
	function getElement($uid)
63
	{
64
			// uid[0] : utilisateur obligatoire
65
			// uid[1] : identifiant image obligatoire
66
 
67
		// Controle detournement utilisateur
68
	   session_start();
69
	   $this->controleUtilisateur($uid[0]);
70
 
71
		$DB=$this->connectDB($this->config,'cel_db');
72
 
73
		if (isset($uid[0]))
74
		{
75
			$query="SELECT * FROM cel_images WHERE ci_id_image ='".$DB->escapeSimple($uid[1])."'";
76
		}
77
 
78
		$res =& $DB->query($query);
79
                if (PEAR::isError($res)) {
80
 
81
                	die($res->getMessage());
82
                }
83
 
84
		$image = $res->fetchrow(DB_FETCHMODE_ASSOC) ;
85
 
86
		$res = json_encode($image) ;
87
 
88
		header("content-type: text/json") ;
89
		print $res ;
90
		exit() ;
91
	}
92
 
93
	// met � jour les m�tadonn�es d'une image
94
	function updateElement($uid,$pairs)
95
	{
96
		// Controle detournement utilisateur
97
		$this->controleUtilisateur($uid[0]);
98
 
99
		/*$fp = fopen('dump.txt','w+') ;
100
		fwrite($fp,print_r($pairs,true)) ;
101
		fclose($fp) ;*/
102
 
103
		$DB=$this->connectDB($this->config,'cel_db');
104
 
105
		$query = 'UPDATE cel_images SET ' ;
106
 
107
		foreach($pairs as $champ  => $valeur)
108
		{
109
			if($champ == 'ci_meta_date') {
110
 
111
				$date_tab = split('/',$valeur) ;
112
				$date = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0] ;
113
 
114
				$query .= $champ.' = "'.$date.'" , ' ;
115
 
116
			}
117
			else {
118
				$query .= $champ.' = "'.$DB->escapeSimple($valeur).'" , ' ;
119
			}
120
		}
121
 
122
		$query = rtrim($query," , ") ;
123
 
124
		$query .= ' WHERE ci_id_image = "'.$DB->escapeSimple($pairs['ci_id_image']).'"' ;
125
 
126
		$res =& $DB->query($query);
127
 
128
        if (PEAR::isError($res))
129
		{
130
			return false ;
131
        }
132
		else
133
		{
134
			echo "OK" ;
135
			exit() ;
136
		}
137
	}
138
 
139
 
140
	// ajoute une image ainsi que ses metadonn�es � la base du carnet
141
	function createElement($pairs)
142
	{
143
		// Controle detournement utilisateur
144
		session_start();
607 aurelien 145
		//$this->controleUtilisateur($pairs['identifiant']);
146
		$pairs['identifiant'] = 'aurelien@tela-botanica.org';
147
 
148
		$manipulateur_image = new ImageRecreation($this->config);
149
 
416 aurelien 150
		foreach($_FILES as $file) {
151
 
152
			$infos_fichier = $file ;
153
		}
607 aurelien 154
 
416 aurelien 155
		$DB=$this->connectDB($this->config,'cel_db');
156
 
157
		$nouvel_ordre = 0 ;
158
		$query_ordre ='SELECT MAX(ci_ordre) FROM cel_images WHERE ci_ce_utilisateur = "'.$DB->escapeSimple($pairs['identifiant']).'"' ;
159
		$res =& $DB->query($query_ordre);
607 aurelien 160
 
161
        if (PEAR::isError($res))
416 aurelien 162
		{
163
			$erreur = 'ERROR : probleme durant le calcul de l\'ordre de l\'image \n' ;
607 aurelien 164
            die($res->getMessage());
165
        }
416 aurelien 166
		else
167
		{
168
			$row = $res->fetchrow() ;
169
			$nouvel_ordre = $row[0] + 1;
170
		}
607 aurelien 171
 
416 aurelien 172
		if($nouvel_ordre)
173
		{
174
			$fichier_meta = extraire_metadonnees($infos_fichier['tmp_name']) ;
175
		}
176
		else
177
		{
178
			$erreur = 'ERROR : probleme durant l\'upload de l\'image \n' ;
179
		}
180
 
181
		$fichier_meta['ci_ordre'] = $nouvel_ordre ;
182
		$fichier_meta['ci_publiable_eflore'] = 'false' ;
183
		$fichier_meta['ci_nom_original'] = $infos_fichier['name'] ;
184
		$fichier_meta['ci_md5'] = md5_file($infos_fichier['tmp_name']) ;
185
		$fichier_meta['ci_ce_utilisateur'] = $pairs['identifiant'] ;
186
 
187
 
188
		$query_champs = '' ;
189
		$query_valeurs = '' ;
190
 
191
		foreach($fichier_meta as $field => $value)
192
		{
193
			$query_champs .= $field.',' ;
194
 
195
			if(is_null($value))
196
			{
197
				$query_valeurs .= 'NULL,' ;
198
			}
199
			else
200
			{
201
				$query_valeurs .= '"'.$DB->escapeSimple($value).'",' ;
202
			}
203
		}
204
 
205
        $query_champs .= 'ci_meta_date_ajout' ;
206
        $query_valeurs .= 'CURRENT_TIMESTAMP()' ;
207
 
208
		//$query_champs = rtrim($query_champs,',') ;
209
		//$query_valeurs = rtrim($query_valeurs,',') ;
210
 
211
		$query ="INSERT INTO cel_images (".$query_champs.") VALUES (".$query_valeurs.")" ;
212
 
213
		$res =& $DB->query($query);
214
                if (PEAR::isError($res)) {
215
 
216
                	//die($res->getMessage());
217
			$erreur = "ERROR : echec de l'insertion dans la base de donnees : ".$query ;
218
                }
219
 
220
		$query_id ='SELECT ci_id_image FROM cel_images WHERE ci_ce_utilisateur = "'.$DB->escapeSimple($pairs['identifiant']).'" AND ci_ordre = "'.$nouvel_ordre.'"' ;
221
		$res =& $DB->query($query_id);
222
 
223
                if (PEAR::isError($res))
224
		{
225
			$erreur = 'ERROR : probleme durant le calcul de l\'id de l\'image \n' ;
226
                	//die($res->getMessage());
227
        }
228
		else
229
		{
230
			$row = $res->fetchrow() ;
231
			$id = $row[0] ;
232
		}
607 aurelien 233
 
416 aurelien 234
		if(isset($id))
235
		{
236
			$fichier = array('name' => $infos_fichier['name'] , 'type' => $infos_fichier['type'] , 'size' => $infos_fichier['size'] , 'tmp_name' => $infos_fichier['tmp_name'] ) ;
607 aurelien 237
			$fichier_stocke = $manipulateur_image->stockerFichierUploadeEtCreerMiniatures($fichier,$id) ;
416 aurelien 238
			// l'upload demande de court-circuiter le fonctionnement normal de JREST
239
			header('HTTP/1.0 200 Created');
240
			echo "OK" ;
241
			exit() ;
242
		}
243
		else
244
		{
245
			$erreur =  'ERROR : probleme durant l\'ajout des metadonnees \n' ;
246
			exit ;
247
		}
248
 
249
	}
250
 
251
	// supprime une image et ses metadonn�es associ�es de la base du carnet
252
	function deleteElement($uid){
253
 
254
	// uid[0] : utilisateur obligatoire
255
	// uid[1] : identifiant(s) image(s) obligatoire(s)
256
 
257
	 // Controle detournement utilisateur
258
	    session_start();
259
		$this->controleUtilisateur($uid[0]);
260
 
261
		$DB=$this->connectDB($this->config,'cel_db');
262
 
263
		$id = $uid[1] ;
264
 
265
		if (isset($uid[1])) {
266
	           	$query="DELETE FROM cel_images WHERE ci_id_image in (".$DB->escapeSimple($uid[1]) .")";
267
				$query_sup_lien = "DELETE FROM cel_obs_images WHERE coi_ce_image in (".$DB->escapeSimple($id) .")";
268
		}
269
 
270
		$res =& $DB->query($query);
271
 
272
		if (PEAR::isError($res)) {
273
			die($res->getMessage());
274
		}
275
		else
276
		{
277
			$res =& $DB->query($query_sup_lien);
278
			if(PEAR::isError($res))
279
			{
280
				die($res->getMessage());
281
			}
607 aurelien 282
 
283
			$manipulateur_image = new ImageRecreation($this->config);
284
            $manipulateur_image->detruireImageSurDisque($id);
416 aurelien 285
 
286
			echo "OK" ;
287
			exit() ;
288
		}
289
	}
290
 
291
}
292
?>