Subversion Repositories Applications.annuaire

Rev

Rev 48 | Rev 150 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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