Subversion Repositories eFlore/Applications.cel

Rev

Rev 2459 | Rev 2461 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2459 Rev 2460
Line 1... Line 1...
1
<?php
1
<?php
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
-
 
3
 
-
 
4
/**
-
 
5
* PHP Version 5
-
 
6
*
-
 
7
* @category  CEL
-
 
8
* @package   jrest
-
 
9
* @author    Aurelien Peronnet <aurelien@tela-botanica.org>
-
 
10
* @author    Jean-Pascal Milcent <jpm@tela-botanica.org>
-
 
11
* @copyright 2010 Tela-Botanica
-
 
12
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
-
 
13
* @version   SVN: <svn_id>
2
// declare(encoding='UTF-8');
14
* @link      /doc/jrest/
-
 
15
*/
-
 
16
 
-
 
17
/**
3
/**
18
* Classe de gestion de l'ajout, modification et suppression des images
4
 * Classe métier de gestion de l'ajout, modification et suppression des images.
19
*
5
 *
-
 
6
 * @internal   Mininum PHP version : 5.2
20
* in=utf8
7
 * @category   CEL
-
 
8
 * @package    Services
-
 
9
 * @subpackage Bibliothèques
21
* out=utf8
10
 * @version    0.1
22
*
-
 
-
 
11
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
-
 
12
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
-
 
13
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
-
 
14
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
-
 
15
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
-
 
16
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
23
*/
17
 */
24
class GestionImage extends Cel {
18
class GestionImage extends Cel {
Line 25... Line 19...
25
 
19
 
26
	/**
20
	/**
27
	* Ajoute une image dans la base de données et stocke le fichier en fabriquant les miniatures,
21
	* Ajoute une image dans la base de données et stocke le fichier en fabriquant les miniatures,
Line 31... Line 25...
31
	* @param array $infos_fichier les infos sur le fichier à traiter, de la même forme que les
25
	* @param array $infos_fichier les infos sur le fichier à traiter, de la même forme que les
32
	* élements du tableau $_FILES de php
26
	* élements du tableau $_FILES de php
33
	*/
27
	*/
34
	public function ajouterImage($id_utilisateur, $infos_fichier) {
28
	public function ajouterImage($id_utilisateur, $infos_fichier) {
35
		$nouvel_ordre = $this->obtenirNouvelOrdrePourUtilisateur($id_utilisateur);
29
		$nouvel_ordre = $this->obtenirNouvelOrdrePourUtilisateur($id_utilisateur);
36
		if (!$nouvel_ordre) {
-
 
37
			$message = "Erreur lors du calcul du nouvel ordre de l'image";
-
 
38
			$this->logger($message);
-
 
39
		}
-
 
Line 40... Line 30...
40
 
30
 
41
		$extracteur_metadonnees = new ExtracteurMetadonnees();
31
		$extracteur_metadonnees = new ExtracteurMetadonnees();
42
		$informations_image = $extracteur_metadonnees->extraireMetadonnees($infos_fichier['tmp_name']) ;
-
 
43
 
32
		$informations_image = $extracteur_metadonnees->extraireMetadonnees($infos_fichier['tmp_name']) ;
44
		if (!$informations_image) {
33
		if (!$informations_image) {
45
			$message = "Erreur lors de l'extraction des metadonnées";
34
			$message = "Erreur lors de l'extraction des metadonnées";
46
			$this->logger($message);
35
			$this->logger($message);
Line 47... Line 36...
47
		}
36
		}
48
 
37
 
49
		// ajout de quelques informations supplémentaire, en sus
38
		// ajout de quelques informations supplémentaire, en sus
50
		// des metadonnées dejà extraites
39
		// des metadonnées dejà extraites
51
		$informations_image['ordre'] = $nouvel_ordre ;
40
		$informations_image['ordre'] = $nouvel_ordre ;
Line 52... Line 41...
52
		$informations_image['publiable_eflore'] = 'false' ;
41
		$informations_image['transmission'] = '0' ;
53
		$informations_image['nom_original'] = $infos_fichier['name'] ;
42
		$informations_image['nom_original'] = $infos_fichier['name'] ;
Line 61... Line 50...
61
 
50
 
62
		$informations_image['courriel_utilisateur'] = $infos_utilisateur['courriel'];
51
		$informations_image['courriel_utilisateur'] = $infos_utilisateur['courriel'];
63
		$informations_image['nom_utilisateur'] = $infos_utilisateur['nom'];
52
		$informations_image['nom_utilisateur'] = $infos_utilisateur['nom'];
Line 64... Line 53...
64
		$informations_image['prenom_utilisateur'] = $infos_utilisateur['prenom'];
53
		$informations_image['prenom_utilisateur'] = $infos_utilisateur['prenom'];
65
 
-
 
66
		$requete_insertion_infos_image = $this->construireRequeteInsertionImage($informations_image);
-
 
67
 
-
 
68
		// important ! ne pas utiliser la fonction executerRequete qui renvoie une erreur si la requete contient des | (pipes)
-
 
69
		// ce qui est fréquent dans les métadonnées
54
 
70
		// TODO: corriger la fonction ou bien continuer à utiliser executerRequeteSimple
-
 
71
		$resultat_insertion_infos_image = Cel::db()->executer($requete_insertion_infos_image);
55
		$requete = $this->construireRequeteInsertionImage($informations_image);
72
 
56
		$resultat_insertion_infos_image = Cel::db()->executer($requete);
73
		if (!$resultat_insertion_infos_image) {
57
		if (!$resultat_insertion_infos_image) {
74
			$message = "Echec de l'insertion dans la base de donnees : " ;
58
			$message = "Echec de l'insertion dans la base de donnees : " ;
Line 75... Line 59...
75
			$this->logger($message);
59
			$this->logger($message);
76
		}
-
 
77
 
60
		}
78
		$id_nouvelle_image = $this->obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $nouvel_ordre);
61
 
79
 
62
		$id_nouvelle_image = $this->obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $nouvel_ordre);
80
		if (!$id_nouvelle_image) {
63
		if (!$id_nouvelle_image) {
Line 81... Line 64...
81
			$message = "Impossible d'obtenir le nouvel identifiant de l'image";
64
			$message = "Impossible d'obtenir le nouvel identifiant de l'image";
82
			$this->logger($message);
65
			$this->logger($message);
83
		}
-
 
84
 
66
		}
85
		$manipulateur_image = new ImageRecreation($this->config);
67
 
86
		$fichier_stocke = $manipulateur_image->stockerFichierEtCreerMiniatures($infos_fichier, $id_nouvelle_image);
68
		$manipulateur_image = new ImageRecreation($this->config);
87
 
69
		$fichier_stocke = $manipulateur_image->stockerFichierEtCreerMiniatures($infos_fichier, $id_nouvelle_image);
Line 103... Line 85...
103
 
85
 
104
		$nouvel_ordre = 0;
86
		$nouvel_ordre = 0;
105
		if ($resultat !== false) {
87
		if ($resultat !== false) {
106
			$nouvel_ordre = $resultat[0]['max_ordre'];
88
			$nouvel_ordre = $resultat[0]['max_ordre'];
-
 
89
			$nouvel_ordre++;
-
 
90
		} else {
-
 
91
			$message = "Erreur lors du calcul du nouvel ordre de l'image";
107
			$nouvel_ordre++;
92
			$this->logger($message);
108
		}
93
		}
109
		return $nouvel_ordre;
94
		return $nouvel_ordre;
Line 110... Line 95...
110
	}
95
	}
Line 125... Line 110...
125
		}
110
		}
126
		return $id_image;
111
		return $id_image;
127
	}
112
	}
Line 128... Line 113...
128
 
113
 
129
	private function construireRequeteInsertionImage($informations_image) {
114
	private function construireRequeteInsertionImage($informations_image) {
130
		$requete_insertion_image = "INSERT INTO cel_images ";
115
		$infos = array(
131
		$champs_a_inserer = '' ;
116
			'date_creation' => 'NOW()',
132
		$valeurs_a_inserer = '' ;
117
			'date_modification' => 'NULL');
133
		foreach ($informations_image as $champ => $valeur) {
-
 
134
			$champs_a_inserer .= $champ.',' ;
-
 
135
 
-
 
136
			if (is_null($valeur)) {
-
 
137
				$valeurs_a_inserer .= 'NULL,' ;
-
 
138
			} else {
118
		foreach ($informations_image as $champ => $valeur) {
139
				$valeurs_a_inserer .= Cel::db()->proteger($valeur).',' ;
-
 
140
			}
119
			$infos[$champ] = is_null($valeur) ? 'NULL' : Cel::db()->proteger($valeur);
-
 
120
		}
-
 
121
		$champs = implode(', ', array_keys($infos));
Line 141... Line 122...
141
		}
122
		$valeurs = implode(', ', array_values($infos));
142
 
-
 
143
		$champs_a_inserer .= 'date_modification,' ;
123
 
144
		$valeurs_a_inserer .= '"0000-00-00 00:00:00",' ;
-
 
145
		$champs_a_inserer .= 'date_creation' ;
-
 
146
		$valeurs_a_inserer .= 'CURRENT_TIMESTAMP()' ;
124
		$requete = "INSERT INTO cel_images ($champs) ".
147
		$requete_insertion_image .= "($champs_a_inserer) VALUES ($valeurs_a_inserer)" ;
-
 
148
		$requete_insertion_image .= ' -- '.__FILE__.' : '.__LINE__;
125
			"VALUES ($valeurs) ".
149
 
126
			' -- '.__FILE__.' : '.__LINE__;
Line 150... Line 127...
150
		return $requete_insertion_image;
127
		return $requete;
151
	}
128
	}
152
 
129
 
153
	/**
130
	/**
154
	 * Modifie les champs de metadonnées d'une image
131
	 * Modifie les champs de metadonnées d'une image
155
	 *
132
	 *
156
	 * @param array $utilisateur identifiant utilisateur
133
	 * @param array $id_utilisateur identifiant utilisateur
157
	 * @param array $id id de l'image
134
	 * @param array $id id de l'image
158
	 * @param array $parametres un taleau contenant des valeurs indexées par les noms de champs de la bdd
135
	 * @param array $parametres un taleau contenant des valeurs indexées par les noms de champs de la bdd
159
	 * @return boolean true ou false suivant le succès de l'opération
-
 
160
	*/
136
	 * @return boolean true ou false suivant le succès de l'opération
-
 
137
	*/
161
	public function modifierImage($utilisateur, $id_image, $parametres) {
138
	public function modifierImage($id_utilisateur, $id_image, $parametres) {
162
		$requete_mise_a_jour_image = 'UPDATE cel_images SET ' ;
139
		$champs_a_mettre_a_jour = $this->construireRequeteMajMetaDonnees($parametres);
163
		$champs_a_mettre_a_jour = $this->construireRequeteMajMetaDonnees($parametres);
140
 
164
		$requete_mise_a_jour_image .= $champs_a_mettre_a_jour;
141
		$requete = "UPDATE cel_images SET $champs_a_mettre_a_jour ".
165
		$requete_mise_a_jour_image .= ' WHERE id_image = '.Cel::db()->proteger($id_image).
142
			' WHERE id_image = '.Cel::db()->proteger($id_image).
166
			' AND ce_utilisateur = '.Cel::db()->proteger($utilisateur).
143
			' AND ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).
167
			' -- '.__FILE__.' : '.__LINE__;
144
			' -- '.__FILE__.' : '.__LINE__;
Line 168... Line 145...
168
		$resultat_mise_a_jour = Cel::db()->executer($requete_mise_a_jour_image);
145
		$resultat = Cel::db()->executer($requete);
169
		return ($resultat_mise_a_jour !== false);
146
		return ($resultat !== false);
170
	}
147
	}
Line 178... Line 155...
178
	private function construireRequeteMajMetaDonnees($valeurs_metadonnees) {
155
	private function construireRequeteMajMetaDonnees($valeurs_metadonnees) {
179
		$requete_maj_champs = '';
156
		$requete_maj_champs = '';
180
		$champs_a_ignorer = array('id_image');
157
		$champs_a_ignorer = array('id_image');
181
		foreach ($valeurs_metadonnees as $champ  => $valeur) {
158
		foreach ($valeurs_metadonnees as $champ  => $valeur) {
182
			if (!in_array($champ,$champs_a_ignorer)) {
159
			if (!in_array($champ,$champs_a_ignorer)) {
183
				if ($champ == 'date_prise_de_vue' && trim($valeur != "")) {
160
				if ($champ == 'date_prise_de_vue' && trim($valeur != '')) {
184
					$date_tab = explode('/',$valeur) ;
161
					$date_tab = explode('/', $valeur) ;
185
					$date = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0] ;
162
					$date = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0] ;
186
					$requete_maj_champs .= $champ.' = '.Cel::db()->proteger($date).' , ' ;
163
					$requete_maj_champs .= $champ.' = '.Cel::db()->proteger($date).' , ' ;
187
				} else {
164
				} else {
188
					$requete_maj_champs .= $champ.' = '.Cel::db()->proteger($valeur).' , ' ;
165
					$requete_maj_champs .= $champ.' = '.Cel::db()->proteger($valeur).' , ' ;
189
				}
166
				}
Line 205... Line 182...
205
		$requete = 'SELECT id_image '.
182
		$requete = 'SELECT id_image '.
206
			'FROM cel_images '.
183
			'FROM cel_images '.
207
			"WHERE ce_utilisateur = $idUtilisateurP ".
184
			"WHERE ce_utilisateur = $idUtilisateurP ".
208
			"AND ordre IN ($idsImagesP) ".
185
			"AND ordre IN ($idsImagesP) ".
209
			' -- '.__FILE__.' : '.__LINE__;
186
			' -- '.__FILE__.' : '.__LINE__;
210
 
-
 
211
		$resultats = Cel::db()->requeter($requete);
187
		$resultats = Cel::db()->requeter($requete);
Line 212... Line 188...
212
 
188
 
213
		$idsImages = array();
189
		$idsImages = array();
214
		foreach ($resultats as $id_image) {
190
		foreach ($resultats as $id_image) {
215
			$idsImages[] = $id_image['id_image'];
191
			$idsImages[] = $id_image['id_image'];
216
		}
-
 
217
 
192
		}
218
		return $this->supprimerImage($idsImages);
193
		return $this->supprimerImage($idsImages);
Line 219... Line 194...
219
	}
194
	}
220
 
195
 
Line 271... Line 246...
271
			' -- '.__FILE__.' : '.__LINE__;
246
			' -- '.__FILE__.' : '.__LINE__;
Line 272... Line 247...
272
 
247
 
273
		$migration_releve = Cel::db()->executer($requete);
248
		$migration_releve = Cel::db()->executer($requete);
274
		return $migration_releve;
249
		return $migration_releve;
275
	}
-
 
276
}
-
 
277
?>
250
	}
-
 
251
}
278
252