Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 929 Rev 970
1
<?php
1
<?php
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
3
 
3
 
4
/**
4
/**
5
* PHP Version 5
5
* PHP Version 5
6
*
6
*
7
* @category  PHP
7
* @category  PHP
8
* @package   jrest
8
* @package   jrest
9
* @author    Aurelien Peronnet <aurelien@tela-botanica.org>
9
* @author    Aurelien Peronnet <aurelien@tela-botanica.org>
10
* @copyright 2010 Tela-Botanica
10
* @copyright 2010 Tela-Botanica
11
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
11
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
12
* @version   SVN: <svn_id>
12
* @version   SVN: <svn_id>
13
* @link      /doc/jrest/
13
* @link      /doc/jrest/
14
*/
14
*/
15
 
15
 
16
/**
16
/**
17
* Classe de gestion de l'ajout, modification et suppression des images
17
* Classe de gestion de l'ajout, modification et suppression des images
18
* 
18
* 
19
* in=utf8
19
* in=utf8
20
* out=utf8
20
* out=utf8
21
*
21
*
22
*/ 
22
*/ 
23
class GestionImage extends Cel {
23
class GestionImage extends Cel {
24
	
24
	
25
	/**
25
	/**
26
	* Ajoute une image dans la base de données et stocke le fichier en fabriquant les miniatures,
26
	* Ajoute une image dans la base de données et stocke le fichier en fabriquant les miniatures,
27
	* renvoie le nouvel id d'image en cas de succès
27
	* renvoie le nouvel id d'image en cas de succès
28
	* 
28
	* 
29
	* @param int $id_utilisateur identifiant de l'utilisateur
29
	* @param int $id_utilisateur identifiant de l'utilisateur
30
	* @param array $infos_fichier les infos sur le fichier à traiter, de la même forme que les
30
	* @param array $infos_fichier les infos sur le fichier à traiter, de la même forme que les
31
	* élements du tableau $_FILES de php
31
	* élements du tableau $_FILES de php
32
	*/
32
	*/
33
	public function ajouterImage($id_utilisateur, $infos_fichier) {
33
	public function ajouterImage($id_utilisateur, $infos_fichier) {
34
		
34
		
35
		$nouvel_ordre = $this->obtenirNouvelOrdrePourUtilisateur($id_utilisateur);
35
		$nouvel_ordre = $this->obtenirNouvelOrdrePourUtilisateur($id_utilisateur);
36
		
36
		
37
		if (!$nouvel_ordre) {
37
		if (!$nouvel_ordre) {
38
			$message = 'Erreur lors du calcul du nouvel ordre de l\'image';
38
			$message = 'Erreur lors du calcul du nouvel ordre de l\'image';
39
			$this->logger($message);
39
			$this->logger($message);
40
		}
40
		}
41
		
41
		
42
		$extracteur_metadonnees = new ExtracteurMetadonnees();
42
		$extracteur_metadonnees = new ExtracteurMetadonnees();
43
		$informations_image = $extracteur_metadonnees->extraireMetadonnees($infos_fichier['tmp_name']) ;
43
		$informations_image = $extracteur_metadonnees->extraireMetadonnees($infos_fichier['tmp_name']) ;
44
		
44
				
45
		if(!$informations_image) {
45
		if(!$informations_image) {
46
			$message = 'Erreur lors de l\'extraction des metadonnées';
46
			$message = 'Erreur lors de l\'extraction des metadonnées';
47
			$this->logger($message);
47
			$this->logger($message);
48
		}
48
		}
49
		
49
		
50
		// ajout de quelques informations supplémentaire, en sus 
50
		// ajout de quelques informations supplémentaire, en sus 
51
		// des metadonnées dejà extraites
51
		// des metadonnées dejà extraites
52
		$informations_image['ordre'] = $nouvel_ordre ;
52
		$informations_image['ordre'] = $nouvel_ordre ;
53
		$informations_image['publiable_eflore'] = 'false' ;
53
		$informations_image['publiable_eflore'] = 'false' ;
54
		$informations_image['nom_original'] = $infos_fichier['name'] ;
54
		$informations_image['nom_original'] = $infos_fichier['name'] ;
55
		
55
		
56
		// le md5 du fichier sert à repérer les images en doublons
56
		// le md5 du fichier sert à repérer les images en doublons
57
		$informations_image['md5'] = md5_file($infos_fichier['tmp_name']) ;
57
		$informations_image['md5'] = md5_file($infos_fichier['tmp_name']) ;
58
		
-
 
59
		// TODO: faire une fonction qui fournit un id pour un mail donné
-
 
60
		// faire cela automatiquement dans le constructeur ? dans la classe cel ?
58
		
-
 
59
		$informations_image['ce_utilisateur'] = $id_utilisateur ;
-
 
60
		
-
 
61
		$infos_utilisateur = $this->getInfosComplementairesUtilisateur($id_utilisateur);	
61
		$informations_image['ce_utilisateur'] = $id_utilisateur ;
62
		
-
 
63
		$informations_image['courriel_utilisateur'] = $infos_utilisateur['courriel'];
62
		
64
		$informations_image['nom_utilisateur'] = $infos_utilisateur['nom'];
-
 
65
		$informations_image['prenom_utilisateur'] = $infos_utilisateur['prenom'];
63
		$informations_image['mail_utilisateur'] = $id_utilisateur ;
66
		
64
		
67
		$requete_insertion_infos_image = $this->construireRequeteInsertionImage($informations_image);
65
		$requete_insertion_infos_image = $this->construireRequeteInsertionImage($informations_image);
68
		
66
		$resultat_insertion_infos_image = $this->executer($requete_insertion_infos_image);
69
		$resultat_insertion_infos_image = $this->executer($requete_insertion_infos_image);
67
 
70
 
68
		if (!$resultat_insertion_infos_image) {
71
		if (!$resultat_insertion_infos_image) {
69
			$message = "Echec de l'insertion dans la base de donnees : " ;
72
			$message = "Echec de l'insertion dans la base de donnees : " ;
70
			$this->logger($message);
73
			$this->logger($message);
71
        }
74
        }
72
 
75
 
73
		$id_nouvelle_image = $this->obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $nouvel_ordre);
76
		$id_nouvelle_image = $this->obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $nouvel_ordre);
74
		
77
		
75
		if (!$id_nouvelle_image)
78
		if (!$id_nouvelle_image)
76
		{
79
		{
77
			$message =  'Impossible d\'obtenir le nouvel identifiant de l\'image' ;
80
			$message =  'Impossible d\'obtenir le nouvel identifiant de l\'image' ;
78
			$this->logger($message);
81
			$this->logger($message);
79
		}
82
		}
80
		
83
		
81
		$manipulateur_image = new ImageRecreation($this->config);
84
		$manipulateur_image = new ImageRecreation($this->config);
82
		$fichier_stocke = $manipulateur_image->stockerFichierEtCreerMiniatures($infos_fichier,$id_nouvelle_image);
85
		$fichier_stocke = $manipulateur_image->stockerFichierEtCreerMiniatures($infos_fichier,$id_nouvelle_image);
83
		
86
		
84
		if (!$fichier_stocke) {
87
		if (!$fichier_stocke) {
85
			$message =  'Erreur lors du stockage du fichier' ;
88
			$message =  'Erreur lors du stockage du fichier' ;
86
			$this->logger($message);
89
			$this->logger($message);
87
		}
90
		}
88
		
91
		
89
		return $id_nouvelle_image;
92
		return $id_nouvelle_image;
90
	}
93
	}
91
	
94
	
92
	private function obtenirNouvelOrdrePourUtilisateur($id_utilisateur) {
95
	private function obtenirNouvelOrdrePourUtilisateur($id_utilisateur) {
93
 
96
 
94
		$nouvel_ordre = 0 ;
97
		$nouvel_ordre = 0 ;
95
		
98
		
96
		$requete_selection_ordre_max ='SELECT MAX(ordre) as max_ordre FROM cel_images WHERE ce_utilisateur = '.$this->proteger($id_utilisateur) ;
99
		$requete_selection_ordre_max ='SELECT MAX(ordre) as max_ordre FROM cel_images WHERE ce_utilisateur = '.$this->proteger($id_utilisateur) ;
97
		$resultat_requete_ordre_max = $this->executerRequete($requete_selection_ordre_max);
100
		$resultat_requete_ordre_max = $this->requeter($requete_selection_ordre_max);
98
				
101
						
99
		if($resultat_requete_ordre_max) {
102
		if($resultat_requete_ordre_max) {
100
			$nouvel_ordre = $resultat_requete_ordre_max[0]['max_ordre'];
103
			$nouvel_ordre = $resultat_requete_ordre_max[0]['max_ordre'];
101
			$nouvel_ordre++;
104
			$nouvel_ordre++;
102
		}
105
		}
103
		
106
		
104
		return $nouvel_ordre;
107
		return $nouvel_ordre;
105
	}
108
	}
106
	
109
	
107
	private function obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $ordre) {
110
	private function obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $ordre) {
108
		
111
		
109
		$id_image = false;
112
		$id_image = false;
110
		
113
		
111
		$requete_id_image ='SELECT id_image FROM cel_images WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ci_ordre = '.$ordre ;
114
		$requete_id_image ='SELECT id_image FROM cel_images WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ordre = '.$ordre ;
112
		$resultat_id_image = $this->executerRequete($requete_id_image);
115
		$resultat_id_image = $this->requeter($requete_id_image);
113
 
116
 
114
        if (count($resultat_id_image) > 0)
117
        if (count($resultat_id_image) > 0)
115
		{
118
		{
116
			$id_image = $resultat_id_image[0]['id_image'];
119
			$id_image = $resultat_id_image[0]['id_image'];
117
        }
120
        }
118
		
121
		
119
        return $id_image;
122
        return $id_image;
120
	}
123
	}
121
	
124
	
122
	private function construireRequeteInsertionImage($informations_image) {
125
	private function construireRequeteInsertionImage($informations_image) {
123
		
126
		
124
		$requete_insertion_image = "INSERT INTO cel_images ";
127
		$requete_insertion_image = "INSERT INTO cel_images ";
125
		
128
		
126
		$champs_a_inserer = '' ;
129
		$champs_a_inserer = '' ;
127
		$valeurs_a_inserer = '' ;
130
		$valeurs_a_inserer = '' ;
128
 
131
 
129
		foreach ($informations_image as $champ => $valeur)
132
		foreach ($informations_image as $champ => $valeur)
130
		{
133
		{
131
			$champs_a_inserer .= $champ.',' ;
134
			$champs_a_inserer .= $champ.',' ;
132
 
135
 
133
			if (is_null($valeur))
136
			if (is_null($valeur))
134
			{
137
			{
135
				$valeurs_a_inserer .= 'NULL,' ;
138
				$valeurs_a_inserer .= 'NULL,' ;
136
			}
139
			}
137
			else
140
			else
138
			{
141
			{
139
				$valeurs_a_inserer .= $this->proteger($valeur).',' ;
142
				$valeurs_a_inserer .= $this->proteger($valeur).',' ;
140
			}
143
			}
141
		}
144
		}
142
		
-
 
143
		// TODO: modifier le format d'extraction des metadonnées
-
 
144
		if ($informations_image['ci_meta_date_time'] != 'NULL') {
-
 
145
			$champs_a_inserer .= 'date_prise_de_vue, ';
-
 
146
        	$valeurs_a_inserer .= $this->proteger($informations_image['ci_meta_date_time']).',';
-
 
147
		}
-
 
-
 
145
 
-
 
146
        $champs_a_inserer .= 'date_modification,' ;
148
 
147
        $valeurs_a_inserer .= '"0000-00-00 00:00:00",' ;
149
        $champs_a_inserer .= 'date_creation' ;
148
        $champs_a_inserer .= 'date_creation' ;
150
        $valeurs_a_inserer .= 'CURRENT_TIMESTAMP()' ;
149
        $valeurs_a_inserer .= 'CURRENT_TIMESTAMP()' ;
151
 
150
 
152
		$requete_insertion_image .= "(".$champs_a_inserer.") VALUES (".$valeurs_a_inserer.")" ;
151
		$requete_insertion_image .= "(".$champs_a_inserer.") VALUES (".$valeurs_a_inserer.")" ;
153
		
152
		
154
		return $requete_insertion_image;
153
		return $requete_insertion_image;
155
	}
154
	}
156
	
155
	
157
	/**
156
	/**
158
	 * Modifie les champs de metadonnées d'une image
157
	 * Modifie les champs de metadonnées d'une image
159
	 * 
158
	 * 
160
	 * @param array $utilisateur identifiant utilisateur
159
	 * @param array $utilisateur identifiant utilisateur
161
	 * @param array $ordre ordre de l'image relatif à l'utilisateur
160
	 * @param array $ordre ordre de l'image relatif à l'utilisateur
162
	 * @param array $parametres un taleau contenant des valeurs indexées par les noms de champs de la bdd
161
	 * @param array $parametres un taleau contenant des valeurs indexées par les noms de champs de la bdd
163
	 * 
162
	 * 
164
	 * @return boolean true ou false suivant le succès de l'opération
163
	 * @return boolean true ou false suivant le succès de l'opération
165
	 * 
164
	 * 
166
	*/
165
	*/
167
	public function modifierImage($utilisateur, $ordre, $parametres) {
166
	public function modifierImage($utilisateur, $ordre, $parametres) {
168
		
167
		
169
		$requete_mise_a_jour_image = 'UPDATE cel_images SET ' ;
168
		$requete_mise_a_jour_image = 'UPDATE cel_images SET ' ;
170
		
169
		
171
		$champs_a_mettre_a_jour = $this->construireRequeteMajMetaDonnees($parametres);
170
		$champs_a_mettre_a_jour = $this->construireRequeteMajMetaDonnees($parametres);
172
		$requete_mise_a_jour_image .= $champs_a_mettre_a_jour;
171
		$requete_mise_a_jour_image .= $champs_a_mettre_a_jour;
173
 
172
 
174
		$requete_mise_a_jour_image .= ' WHERE ordre = '.$this->proteger($ordre).
173
		$requete_mise_a_jour_image .= ' WHERE ordre = '.$this->proteger($ordre).
175
									  ' AND ce_utilisateur = '.$this->proteger($utilisateur);
174
									  ' AND ce_utilisateur = '.$this->proteger($utilisateur);
176
 
175
 
177
		$resultat_mise_a_jour = $this->executer($requete_mise_a_jour_image);
176
		$resultat_mise_a_jour = $this->executer($requete_mise_a_jour_image);
178
	}
177
	}
179
	
178
	
180
	/**
179
	/**
181
	 * Assemble la requete de mise à jour des champs de metadonnées
180
	 * Assemble la requete de mise à jour des champs de metadonnées
182
	 * 
181
	 * 
183
	 * @param array $valeurs_metadonnees un taleau contenant des valeurs indexées par les noms de champs de la bdd
182
	 * @param array $valeurs_metadonnees un taleau contenant des valeurs indexées par les noms de champs de la bdd
184
	 * 
183
	 * 
185
	 * @return string une sous chaine sql utilisable dans une requete de type UPPDATE table SET valeur1=champ1 ...
184
	 * @return string une sous chaine sql utilisable dans une requete de type UPPDATE table SET valeur1=champ1 ...
186
	 * 
185
	 * 
187
	*/
186
	*/
188
	private function construireRequeteMajMetaDonnees($valeurs_metadonnees) {
187
	private function construireRequeteMajMetaDonnees($valeurs_metadonnees) {
189
		
188
		
190
		$requete_maj_champs = '';
189
		$requete_maj_champs = '';
191
		
190
		
192
		$champs_a_ignorer = array('id_image');
191
		$champs_a_ignorer = array('id_image');
193
		
192
		
194
		foreach ($valeurs_metadonnees as $champ  => $valeur)
193
		foreach ($valeurs_metadonnees as $champ  => $valeur)
195
		{		
194
		{		
196
			if (!in_array($champ,$champs_a_ignorer)) {
195
			if (!in_array($champ,$champs_a_ignorer)) {
197
				if ($champ == 'date_prise_de_vue') {
196
				if ($champ == 'date_prise_de_vue') {
198
	
197
	
199
					$date_tab = split('/',$valeur) ;
198
					$date_tab = split('/',$valeur) ;
200
					$date = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0] ;
199
					$date = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0] ;
201
	
200
	
202
					$requete_maj_champs .= $champ.' = '.$this->proteger($date).' , ' ;
201
					$requete_maj_champs .= $champ.' = '.$this->proteger($date).' , ' ;
203
	
202
	
204
				}
203
				}
205
				else {
204
				else {
206
					$requete_maj_champs .= $champ.' = '.$this->proteger($valeur).' , ' ;
205
					$requete_maj_champs .= $champ.' = '.$this->proteger($valeur).' , ' ;
207
				}
206
				}
208
			}
207
			}
209
		}
208
		}
210
 
209
 
211
		$requete_maj_champs = rtrim($requete_maj_champs,' , ') ;
210
		$requete_maj_champs = rtrim($requete_maj_champs,' , ') ;
212
		
211
		
213
		return $requete_maj_champs;
212
		return $requete_maj_champs;
214
	}
213
	}
215
	
214
	
216
	public function supprimerImage($id_utilisateur, $ordre_image_ou_tableau) {
215
	public function supprimerImage($id_utilisateur, $ordre_image_ou_tableau) {
217
		
216
		
218
		if(is_array($ordre_image_ou_tableau)) {
217
		if(is_array($ordre_image_ou_tableau)) {
219
			$id_image_ou_tableau = array_map(array($this,'proteger'),$ordre_image_ou_tableau);
218
			$id_image_ou_tableau = array_map(array($this,'proteger'),$ordre_image_ou_tableau);
220
			$ids_images = implode(',',$ordre_image_ou_tableau);
219
			$ids_images = implode(',',$ordre_image_ou_tableau);
221
		} else {
220
		} else {
222
			$ids_images = $this->proteger($ordre_image_ou_tableau);
221
			$ids_images = $this->proteger($ordre_image_ou_tableau);
223
		}
222
		}
224
		
223
		
225
		$requete_selection_ids_images = 'SELECT id_image FROM cel_images WHERE '.
224
		$requete_selection_ids_images = 'SELECT id_image FROM cel_images WHERE '.
226
										'ce_utilisateur = '.$this->proteger($id_utilisateur).' '.
225
										'ce_utilisateur = '.$this->proteger($id_utilisateur).' '.
227
										'AND ordre IN ('.$ids_images.') ';
226
										'AND ordre IN ('.$ids_images.') ';
228
							
227
							
229
		$tableau_ids_images = $this->requeter($requete_selection_ids_images);	
228
		$tableau_ids_images = $this->requeter($requete_selection_ids_images);	
230
		$chaine_ids_images = '';
229
		$chaine_ids_images = '';
231
		foreach($tableau_ids_images as $id_image) {
230
		foreach($tableau_ids_images as $id_image) {
232
			$chaine_ids_images .= $id_image['id_image'];
231
			$chaine_ids_images .= $id_image['id_image'];
233
		}							
232
		}							
234
		
233
		
235
		$chaine_ids_images = rtrim($chaine_ids_images,',');
234
		$chaine_ids_images = rtrim($chaine_ids_images,',');
236
				
235
				
237
		$requete_suppression_images = "DELETE FROM cel_images WHERE id_image in (".$chaine_ids_images.")";
236
		$requete_suppression_images = "DELETE FROM cel_images WHERE id_image in (".$chaine_ids_images.")";
238
		$requete_suppression_lien_images_obs = "DELETE FROM cel_obs_images WHERE id_image in (".$chaine_ids_images.")";
237
		$requete_suppression_lien_images_obs = "DELETE FROM cel_obs_images WHERE id_image in (".$chaine_ids_images.")";
239
		$requete_suppression_lien_images_mots_cles = "DELETE FROM cel_images_mots_cles WHERE id_image in (".$chaine_ids_images.")";
238
		$requete_suppression_lien_images_mots_cles = "DELETE FROM cel_images_mots_cles WHERE id_image in (".$chaine_ids_images.")";
240
		
239
		
241
		$resultat_suppression_image = $this->executer($requete_suppression_images);
240
		$resultat_suppression_image = $this->executer($requete_suppression_images);
242
		$resultat_suppression_lien_images_obs = $this->executer($requete_suppression_lien_images_obs);
241
		$resultat_suppression_lien_images_obs = $this->executer($requete_suppression_lien_images_obs);
243
		$resultat_suppression_lien_images_mots_cles = $this->executer($requete_suppression_lien_images_mots_cles);
242
		$resultat_suppression_lien_images_mots_cles = $this->executer($requete_suppression_lien_images_mots_cles);
244
		
243
		
245
		if (!$resultat_suppression_image) {
244
		if (!$resultat_suppression_image) {
246
			$message =  'Erreur lors de la suppression de l\'image' ;
245
			$message =  'Erreur lors de la suppression de l\'image' ;
247
			$this->logger($message);
246
			$this->logger($message);
248
		}
247
		}
249
		
248
		
250
		if (!$resultat_suppression_lien_images_obs) {
249
		if (!$resultat_suppression_lien_images_obs) {
251
			$message =  'Erreur lors de la suppression des observations associées à l\'image' ;
250
			$message =  'Erreur lors de la suppression des observations associées à l\'image' ;
252
			$this->logger($message);
251
			$this->logger($message);
253
		}
252
		}
254
		
253
		
255
		if (!$resultat_suppression_lien_images_mots_cles) {
254
		if (!$resultat_suppression_lien_images_mots_cles) {
256
			$message =  'Erreur lors de la suppression des mots cles associés à l\'image' ;
255
			$message =  'Erreur lors de la suppression des mots cles associés à l\'image' ;
257
			$this->logger($message);
256
			$this->logger($message);
258
		}
257
		}
259
 
258
 
260
		$manipulateur_image = new ImageRecreation($this->config);
259
		$manipulateur_image = new ImageRecreation($this->config);
261
		
260
		
262
		$tableau_ids_image = split(',',$ids_images);
261
		$tableau_ids_image = split(',',$ids_images);
263
		
262
		
264
		foreach($tableau_ids_image as $id_image_a_detruire) {
263
		foreach($tableau_ids_image as $id_image_a_detruire) {
265
        	$destruction_fichier_image = $manipulateur_image->detruireImageSurDisque($id_image_a_detruire);
264
        	$destruction_fichier_image = $manipulateur_image->detruireImageSurDisque($id_image_a_detruire);
266
		}
265
		}
267
		
266
		
268
		return $destruction_fichier_image;
267
		return $destruction_fichier_image;
269
	}
268
	}
270
}
269
}
271
?>
270
?>