Subversion Repositories Applications.annuaire

Rev

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

Rev 150 Rev 201
1
<?php
1
<?php
2
/**
2
/**
3
* PHP Version 5
3
* PHP Version 5
4
*
4
*
5
* @category  PHP
5
* @category  PHP
6
* @package   annuaire
6
* @package   annuaire
7
* @author    aurelien <aurelien@tela-botanica.org>
7
* @author    aurelien <aurelien@tela-botanica.org>
8
* @copyright 2010 Tela-Botanica
8
* @copyright 2010 Tela-Botanica
9
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
9
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
* @version   SVN: <svn_id>
10
* @version   SVN: <svn_id>
11
* @link      /doc/annuaire/
11
* @link      /doc/annuaire/
12
*/
12
*/
13
 
13
 
14
Class ImageModele extends Modele {
14
Class ImageModele extends Modele {
15
 
15
 
16
	private $extensions = '';
16
	private $extensions = '';
17
 
17
 
18
	public function verifierFormat($nom_fichier) {
18
	public function verifierFormat($nom_fichier) {
19
 
19
 
20
		$extensions = Config::get('extensions_acceptees');
20
		$extensions = Config::get('extensions_acceptees');
21
		$extensions = explode('|', $extensions);
21
		$extensions = explode('|', $extensions);
22
		$extension_fichier = strrchr($nom_fichier, '.');
22
		$extension_fichier = strrchr($nom_fichier, '.');
23
 
23
 
24
		return in_array($extension_fichier, $extensions);
24
		return in_array($extension_fichier, $extensions);
25
	}
25
	}
26
 
26
 
27
	// traite l'upload d'une fichier et le deplace en le renommant selon un identifiant donne
27
	// traite l'upload d'une fichier et le deplace en le renommant selon un identifiant donne
28
	public function stockerFichier($id_annuaire, $id_utilisateur, $fichier)
28
	public function stockerFichier($id_annuaire, $id_utilisateur, $fichier)
29
	{
29
	{
30
		$droits = 0777;
30
		$droits = 0777;
31
		umask(0);
31
		umask(0);
32
 
32
 
33
		$chemin_sur_serveur = Config::get('base_chemin_images') ;
33
		$chemin_sur_serveur = Config::get('base_chemin_images') ;
34
 
34
 
35
		if(!file_exists($chemin_sur_serveur.$id_annuaire.'/')) {
35
		if(!file_exists($chemin_sur_serveur.$id_annuaire.'/')) {
36
			if(mkdir($chemin_sur_serveur.'/'.$id_annuaire, $droits, true)) {
36
			if(mkdir($chemin_sur_serveur.'/'.$id_annuaire, $droits, true)) {
37
				//chmod($chemin_sur_serveur.'/'.$id_annuaire,$droits);
37
				//chmod($chemin_sur_serveur.'/'.$id_annuaire,$droits);
38
			}
38
			}
39
			else
39
			else
40
			{
40
			{
41
				trigger_error('ERROR : probleme durant l\'écriture du dossier des images pour l\'annuaire '.$id_annuaire.' \n'.$chemin_sur_serveur) ;
41
				trigger_error('ERROR : probleme durant l\'écriture du dossier des images pour l\'annuaire '.$id_annuaire.' \n'.$chemin_sur_serveur) ;
42
				return false;
42
				return false;
43
			}
43
			}
44
		}
44
		}
45
 
45
 
46
		$chemin_sur_serveur = $chemin_sur_serveur.$id_annuaire;
46
		$chemin_sur_serveur = $chemin_sur_serveur.$id_annuaire;
47
 
47
 
48
		$taille_max = Config::get('taille_max_images');
48
		$taille_max = Config::get('taille_max_images');
49
 
49
 
50
		$id = sprintf('%09s', $id_utilisateur) ;
50
		$id = sprintf('%09s', $id_utilisateur) ;
51
		$id = wordwrap($id, 3 , '_', true) ;
51
		$id = wordwrap($id, 3 , '_', true) ;
52
 
52
 
53
		$id_fichier = $id.".jpg" ;
53
		$id_fichier = $id.".jpg" ;
54
 
54
 
55
		$niveauDossier = split("_", $id) ;
55
		$niveauDossier = split("_", $id) ;
56
 
56
 
57
		$dossierNiveau1 = $niveauDossier[0] ;
57
		$dossierNiveau1 = $niveauDossier[0] ;
58
		$dossierNiveau2 = $niveauDossier[1] ;
58
		$dossierNiveau2 = $niveauDossier[1] ;
59
 
59
 
60
		if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S'))
60
		if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S'))
61
		{
61
		{
62
			if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S',$droits, true)) {
62
			if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S',$droits, true)) {
63
				chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S',$droits);
63
				chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S',$droits);
64
			}
64
			}
65
			else
65
			else
66
			{
66
			{
67
				trigger_error('ERROR : probleme durant l\'écriture du dossier s \n') ;
67
				trigger_error('ERROR : probleme durant l\'écriture du dossier s \n') ;
68
				return false;
68
				return false;
69
			}
69
			}
70
		}
70
		}
71
 
71
 
72
		if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M'))
72
		if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M'))
73
		{
73
		{
74
			if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M',$droits, true)) {
74
			if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M',$droits, true)) {
75
				chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M',$droits);
75
				chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M',$droits);
76
			}
76
			}
77
			else
77
			else
78
			{
78
			{
79
				trigger_error('ERROR : probleme durant l\'écriture du dossier m \n') ;
79
				trigger_error('ERROR : probleme durant l\'écriture du dossier m \n') ;
80
				return false;
80
				return false;
81
			}
81
			}
82
		}
82
		}
83
 
83
 
84
		if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L'))
84
		if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L'))
85
		{
85
		{
86
			if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L',$droits, true)) {
86
			if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L',$droits, true)) {
87
				chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L',$droits);
87
				chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L',$droits);
88
			}
88
			}
89
			else
89
			else
90
			{
90
			{
91
				trigger_error('ERROR : probleme durant l\'écriture du dossier l \n') ;
91
				trigger_error('ERROR : probleme durant l\'écriture du dossier l \n') ;
92
				return false;
92
				return false;
93
			}
93
			}
94
		}
94
		}
95
 
95
 
96
		$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ;
96
		$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ;
97
 
97
 
98
		$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id.".jpg" ;
98
		$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id.".jpg" ;
99
 
99
 
100
		if(move_uploaded_file($fichier['tmp_name'],$chemin_fichier))
100
		if(move_uploaded_file($fichier['tmp_name'],$chemin_fichier))
101
		{
101
		{
102
			// on redimensionne
102
			// on redimensionne
103
			list($width, $height) = getimagesize($chemin_fichier);
103
			list($width, $height) = getimagesize($chemin_fichier);
104
 
104
 
105
			$small_height = 100;
105
			$small_height = 100;
106
			if($height > $small_height) {
106
			if($height > $small_height) {
107
				$small_height = 100;
107
				$small_height = 100;
108
				$ratio = $height/$small_height;
108
				$ratio = $height/$small_height;
109
				$small_width = $width/$ratio;
109
				$small_width = $width/$ratio;
110
			} else {
110
			} else {
111
				$small_height = $height;
111
				$small_height = $height;
112
				$small_width = $width;
112
				$small_width = $width;
113
			}
113
			}
114
 
114
 
115
			$medium_height = 300;
115
			$medium_height = 300;
116
			if($height > $medium_height) {
116
			if($height > $medium_height) {
117
				$ratio = $height/$medium_height;
117
				$ratio = $height/$medium_height;
118
				$medium_width = $width/$ratio;
118
				$medium_width = $width/$ratio;
119
			} else {
119
			} else {
120
				$medium_height = $height;
120
				$medium_height = $height;
121
				$medium_width = $width;
121
				$medium_width = $width;
122
			}
122
			}
123
 
123
 
124
			// on reechantillonne
124
			// on reechantillonne
125
			$image_p = imagecreatetruecolor($small_width, $small_height);
125
			$image_p = imagecreatetruecolor($small_width, $small_height);
126
			$image_m = imagecreatetruecolor($medium_width, $medium_height);
126
			$image_m = imagecreatetruecolor($medium_width, $medium_height);
127
			$image_l = imagecreatetruecolor($width, $height);
127
			$image_l = imagecreatetruecolor($width, $height);
128
 
128
 
129
			$image = imagecreatefromjpeg($chemin_fichier);
129
			$image = imagecreatefromjpeg($chemin_fichier);
130
 
130
 
131
	        $ratio_compression = 100 ;
131
	        $ratio_compression = 100 ;
132
 
132
 
133
	        if(filesize($chemin_fichier) >= $taille_max) {
133
	        if(filesize($chemin_fichier) >= $taille_max) {
134
	            $ratio_compression = 85 ;
134
	            $ratio_compression = 85 ;
135
	        }
135
	        }
136
 
136
 
137
			if($image == null)
137
			if($image == null)
138
			{
138
			{
139
				trigger_error('Probleme durant la création des images resamplées \n') ;
139
				trigger_error('Probleme durant la création des images resamplées \n') ;
140
				return false ;
140
				return false ;
141
			}
141
			}
142
 
142
 
143
			// et on copie les nouvelles images (pour la galerie et la liste)
143
			// et on copie les nouvelles images (pour la galerie et la liste)
144
			imagecopyresampled($image_p, $image, 0, 0, 0, 0, $small_width, $small_height, $width, $height);
144
			imagecopyresampled($image_p, $image, 0, 0, 0, 0, $small_width, $small_height, $width, $height);
145
			imagecopyresampled($image_m, $image, 0, 0, 0, 0, $medium_width, $medium_height, $width, $height);
145
			imagecopyresampled($image_m, $image, 0, 0, 0, 0, $medium_width, $medium_height, $width, $height);
146
			imagecopyresampled($image_l, $image, 0, 0, 0, 0, $width, $height, $width, $height);
146
			imagecopyresampled($image_l, $image, 0, 0, 0, 0, $width, $height, $width, $height);
147
 
147
 
148
			imagejpeg($image_p, $chemin_sur_serveur_final.'/S/'.$id.'_S.jpg', 85);
148
			imagejpeg($image_p, $chemin_sur_serveur_final.'/S/'.$id.'_S.jpg', 85);
149
			chmod($chemin_sur_serveur_final.'/S/'.$id.'_S.jpg',$droits);
149
			chmod($chemin_sur_serveur_final.'/S/'.$id.'_S.jpg',$droits);
150
 
150
 
151
			imagejpeg($image_m,$chemin_sur_serveur_final.'/M/'.$id.'_M.jpg', 85);
151
			imagejpeg($image_m,$chemin_sur_serveur_final.'/M/'.$id.'_M.jpg', 85);
152
			chmod($chemin_sur_serveur_final.'/M/'.$id.'_M.jpg',$droits);
152
			chmod($chemin_sur_serveur_final.'/M/'.$id.'_M.jpg',$droits);
153
 
153
 
154
			imagejpeg($image_l,$chemin_sur_serveur_final.'/L/'.$id.'_L.jpg', $ratio_compression);
154
			imagejpeg($image_l,$chemin_sur_serveur_final.'/L/'.$id.'_L.jpg', $ratio_compression);
155
			chmod($chemin_sur_serveur_final.'/L/'.$id.'_L.jpg',$droits);
155
			chmod($chemin_sur_serveur_final.'/L/'.$id.'_L.jpg',$droits);
156
 
156
 
157
			unlink($chemin_fichier) ;
157
			unlink($chemin_fichier) ;
158
			
158
			
159
			chmod($chemin_sur_serveur, $droits);
159
			chmod($chemin_sur_serveur, $droits);
160
 
160
 
161
	  		return $id_utilisateur;
161
	  		return $id_utilisateur;
162
	  	}
162
	  	}
163
	  	else
163
	  	else
164
	  	{
164
	  	{
165
			trigger_error('Probleme durant le déplacement du fichier temporaire \n') ;
165
			trigger_error('Probleme durant le déplacement du fichier temporaire \n') ;
166
			return false ;
166
			return false ;
167
	  	}
167
	  	}
168
	}
168
	}
169
 
169
 
170
	public static function obtenirEmplacementFichierParId($id_utilisateur, $id_annuaire, $taille = 'M') {
170
	public static function obtenirEmplacementFichierParId($id_utilisateur, $id_annuaire, $taille = 'M') {
171
 
171
 
172
		$id = sprintf('%09s', $id_utilisateur) ;
172
		$id = sprintf('%09s', $id_utilisateur) ;
173
		$id = wordwrap($id, 3 , '_', true) ;
173
		$id = wordwrap($id, 3 , '_', true) ;
174
 
174
 
175
		$niveauDossier = split("_", $id) ;
175
		$niveauDossier = split("_", $id) ;
176
 
176
 
177
		$dossierNiveau1 = $niveauDossier[0] ;
177
		$dossierNiveau1 = $niveauDossier[0] ;
178
		$dossierNiveau2 = $niveauDossier[1] ;
178
		$dossierNiveau2 = $niveauDossier[1] ;
179
 
179
 
180
		$base_url = Config::get('base_url_images').$id_annuaire;
180
		$base_url = Config::get('base_url_images').$id_annuaire;
181
 
181
 
182
		if($taille == 'A') {
182
		if($taille == 'A') {
183
			$url = array('S' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg',
183
			$url = array('S' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg',
184
							'M' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg',
184
							'M' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg',
185
								'L' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg');
185
								'L' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg');
186
		} else {
186
		} else {
187
			$url = $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/'.$taille.'/'.$id.'_'.$taille.'.jpg';
187
			$url = $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/'.$taille.'/'.$id.'_'.$taille.'.jpg';
188
		}
188
		}
189
 
189
 
190
		return $url;
190
		return $url;
191
	}
191
	}
-
 
192
	
-
 
193
	public static function obtenirUrlFichierParId($id_utilisateur, $id_annuaire, $taille = 'M') {
-
 
194
		$id = sprintf('%09s', $id_utilisateur) ;
-
 
195
		$id = wordwrap($id, 3 , '_', true) ;
-
 
196
 
-
 
197
		$niveauDossier = split("_", $id) ;
-
 
198
 
-
 
199
		$dossierNiveau1 = $niveauDossier[0] ;
-
 
200
		$dossierNiveau2 = $niveauDossier[1] ;
-
 
201
 
-
 
202
		$base_url = 'http://'.$_SERVER['SERVER_NAME'].Config::get('base_url_images').$id_annuaire;
-
 
203
 
-
 
204
		if($taille == 'A') {
-
 
205
			$url = array('S' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg',
-
 
206
							'M' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg',
-
 
207
								'L' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg');
-
 
208
		} else {
-
 
209
			$url = $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/'.$taille.'/'.$id.'_'.$taille.'.jpg';
-
 
210
		}
-
 
211
 
-
 
212
		return $url;
-
 
213
	}
192
 
214
 
193
	public function supprimerFichier($id)
215
	public function supprimerFichier($id)
194
	{
216
	{
195
		$chemin_sur_serveur = Config::get('base_chemin_images') ;
217
		$chemin_sur_serveur = Config::get('base_chemin_images') ;
196
 
218
 
197
		$id = sprintf('%09s', $id) ;
219
		$id = sprintf('%09s', $id) ;
198
		$id = wordwrap($id, 3 , '_', true) ;
220
		$id = wordwrap($id, 3 , '_', true) ;
199
 
221
 
200
		$id_fichier = $id.".jpg" ;
222
		$id_fichier = $id.".jpg" ;
201
 
223
 
202
		$niveauDossier = split("_", $id) ;
224
		$niveauDossier = split("_", $id) ;
203
 
225
 
204
		$dossierNiveau1 = $niveauDossier[0] ;
226
		$dossierNiveau1 = $niveauDossier[0] ;
205
		$dossierNiveau2 = $niveauDossier[1] ;
227
		$dossierNiveau2 = $niveauDossier[1] ;
206
 
228
 
207
		$fichier_s = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg' ;
229
		$fichier_s = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg' ;
208
		$fichier_m = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M/'.$id.'_M.jpg' ;
230
		$fichier_m = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M/'.$id.'_M.jpg' ;
209
		$fichier_l = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L/'.$id.'_L.jpg' ;
231
		$fichier_l = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L/'.$id.'_L.jpg' ;
210
 
232
 
211
		if(file_exists($fichier_s))
233
		if(file_exists($fichier_s))
212
		{
234
		{
213
			unlink($fichier_s) ;
235
			unlink($fichier_s) ;
214
		} // Si le fichier existe
236
		} // Si le fichier existe
215
 
237
 
216
		if(file_exists($fichier_m))
238
		if(file_exists($fichier_m))
217
		{
239
		{
218
			unlink($fichier_m) ;
240
			unlink($fichier_m) ;
219
		} // Si le fichier existe
241
		} // Si le fichier existe
220
 
242
 
221
		if(file_exists($fichier_l))
243
		if(file_exists($fichier_l))
222
		{
244
		{
223
			unlink($fichier_l) ;
245
			unlink($fichier_l) ;
224
		} // Si le fichier existe
246
		} // Si le fichier existe
225
 
247
 
226
	}
248
	}
227
}
249
}
228
?>
250
?>