| 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 | 	{
 | 
        
           | 150 | aurelien | 30 | 		$droits = 0777;
 | 
        
           |  |  | 31 | 		umask(0);
 | 
        
           | 10 | aurelien | 32 |   | 
        
           |  |  | 33 | 		$chemin_sur_serveur = Config::get('base_chemin_images') ;
 | 
        
           |  |  | 34 |   | 
        
           |  |  | 35 | 		if(!file_exists($chemin_sur_serveur.$id_annuaire.'/')) {
 | 
        
           |  |  | 36 | 			if(mkdir($chemin_sur_serveur.'/'.$id_annuaire, $droits, true)) {
 | 
        
           | 150 | aurelien | 37 | 				//chmod($chemin_sur_serveur.'/'.$id_annuaire,$droits);
 | 
        
           | 10 | aurelien | 38 | 			}
 | 
        
           |  |  | 39 | 			else
 | 
        
           |  |  | 40 | 			{
 | 
        
           | 97 | aurelien | 41 | 				trigger_error('ERROR : probleme durant l\'écriture du dossier des images pour l\'annuaire '.$id_annuaire.' \n'.$chemin_sur_serveur) ;
 | 
        
           | 10 | aurelien | 42 | 				return false;
 | 
        
           |  |  | 43 | 			}
 | 
        
           |  |  | 44 | 		}
 | 
        
           |  |  | 45 |   | 
        
           |  |  | 46 | 		$chemin_sur_serveur = $chemin_sur_serveur.$id_annuaire;
 | 
        
           |  |  | 47 |   | 
        
           |  |  | 48 | 		$taille_max = Config::get('taille_max_images');
 | 
        
           |  |  | 49 |   | 
        
           |  |  | 50 | 		$id = sprintf('%09s', $id_utilisateur) ;
 | 
        
           | 17 | aurelien | 51 | 		$id = wordwrap($id, 3 , '_', true) ;
 | 
        
           | 10 | aurelien | 52 |   | 
        
           |  |  | 53 | 		$id_fichier = $id.".jpg" ;
 | 
        
           |  |  | 54 |   | 
        
           |  |  | 55 | 		$niveauDossier = split("_", $id) ;
 | 
        
           |  |  | 56 |   | 
        
           |  |  | 57 | 		$dossierNiveau1 = $niveauDossier[0] ;
 | 
        
           |  |  | 58 | 		$dossierNiveau2 = $niveauDossier[1] ;
 | 
        
           |  |  | 59 |   | 
        
           |  |  | 60 | 		if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S'))
 | 
        
           |  |  | 61 | 		{
 | 
        
           |  |  | 62 | 			if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S',$droits, true)) {
 | 
        
           |  |  | 63 | 				chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S',$droits);
 | 
        
           |  |  | 64 | 			}
 | 
        
           |  |  | 65 | 			else
 | 
        
           |  |  | 66 | 			{
 | 
        
           |  |  | 67 | 				trigger_error('ERROR : probleme durant l\'écriture du dossier s \n') ;
 | 
        
           |  |  | 68 | 				return false;
 | 
        
           |  |  | 69 | 			}
 | 
        
           |  |  | 70 | 		}
 | 
        
           |  |  | 71 |   | 
        
           |  |  | 72 | 		if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M'))
 | 
        
           |  |  | 73 | 		{
 | 
        
           |  |  | 74 | 			if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M',$droits, true)) {
 | 
        
           |  |  | 75 | 				chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M',$droits);
 | 
        
           |  |  | 76 | 			}
 | 
        
           |  |  | 77 | 			else
 | 
        
           |  |  | 78 | 			{
 | 
        
           |  |  | 79 | 				trigger_error('ERROR : probleme durant l\'écriture du dossier m \n') ;
 | 
        
           |  |  | 80 | 				return false;
 | 
        
           |  |  | 81 | 			}
 | 
        
           |  |  | 82 | 		}
 | 
        
           |  |  | 83 |   | 
        
           |  |  | 84 | 		if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L'))
 | 
        
           |  |  | 85 | 		{
 | 
        
           |  |  | 86 | 			if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L',$droits, true)) {
 | 
        
           |  |  | 87 | 				chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L',$droits);
 | 
        
           |  |  | 88 | 			}
 | 
        
           |  |  | 89 | 			else
 | 
        
           |  |  | 90 | 			{
 | 
        
           |  |  | 91 | 				trigger_error('ERROR : probleme durant l\'écriture du dossier l \n') ;
 | 
        
           |  |  | 92 | 				return false;
 | 
        
           |  |  | 93 | 			}
 | 
        
           |  |  | 94 | 		}
 | 
        
           |  |  | 95 |   | 
        
           |  |  | 96 | 		$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ;
 | 
        
           |  |  | 97 |   | 
        
           |  |  | 98 | 		$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id.".jpg" ;
 | 
        
           |  |  | 99 |   | 
        
           |  |  | 100 | 		if(move_uploaded_file($fichier['tmp_name'],$chemin_fichier))
 | 
        
           |  |  | 101 | 		{
 | 
        
           |  |  | 102 | 			// on redimensionne
 | 
        
           |  |  | 103 | 			list($width, $height) = getimagesize($chemin_fichier);
 | 
        
           |  |  | 104 |   | 
        
           |  |  | 105 | 			$small_height = 100;
 | 
        
           |  |  | 106 | 			if($height > $small_height) {
 | 
        
           |  |  | 107 | 				$small_height = 100;
 | 
        
           |  |  | 108 | 				$ratio = $height/$small_height;
 | 
        
           |  |  | 109 | 				$small_width = $width/$ratio;
 | 
        
           |  |  | 110 | 			} else {
 | 
        
           |  |  | 111 | 				$small_height = $height;
 | 
        
           |  |  | 112 | 				$small_width = $width;
 | 
        
           |  |  | 113 | 			}
 | 
        
           |  |  | 114 |   | 
        
           |  |  | 115 | 			$medium_height = 300;
 | 
        
           |  |  | 116 | 			if($height > $medium_height) {
 | 
        
           |  |  | 117 | 				$ratio = $height/$medium_height;
 | 
        
           |  |  | 118 | 				$medium_width = $width/$ratio;
 | 
        
           |  |  | 119 | 			} else {
 | 
        
           |  |  | 120 | 				$medium_height = $height;
 | 
        
           |  |  | 121 | 				$medium_width = $width;
 | 
        
           |  |  | 122 | 			}
 | 
        
           |  |  | 123 |   | 
        
           |  |  | 124 | 			// on reechantillonne
 | 
        
           |  |  | 125 | 			$image_p = imagecreatetruecolor($small_width, $small_height);
 | 
        
           |  |  | 126 | 			$image_m = imagecreatetruecolor($medium_width, $medium_height);
 | 
        
           |  |  | 127 | 			$image_l = imagecreatetruecolor($width, $height);
 | 
        
           |  |  | 128 |   | 
        
           |  |  | 129 | 			$image = imagecreatefromjpeg($chemin_fichier);
 | 
        
           |  |  | 130 |   | 
        
           |  |  | 131 | 	        $ratio_compression = 100 ;
 | 
        
           |  |  | 132 |   | 
        
           |  |  | 133 | 	        if(filesize($chemin_fichier) >= $taille_max) {
 | 
        
           |  |  | 134 | 	            $ratio_compression = 85 ;
 | 
        
           |  |  | 135 | 	        }
 | 
        
           |  |  | 136 |   | 
        
           |  |  | 137 | 			if($image == null)
 | 
        
           |  |  | 138 | 			{
 | 
        
           |  |  | 139 | 				trigger_error('Probleme durant la création des images resamplées \n') ;
 | 
        
           |  |  | 140 | 				return false ;
 | 
        
           |  |  | 141 | 			}
 | 
        
           |  |  | 142 |   | 
        
           |  |  | 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);
 | 
        
           |  |  | 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);
 | 
        
           |  |  | 147 |   | 
        
           |  |  | 148 | 			imagejpeg($image_p, $chemin_sur_serveur_final.'/S/'.$id.'_S.jpg', 85);
 | 
        
           |  |  | 149 | 			chmod($chemin_sur_serveur_final.'/S/'.$id.'_S.jpg',$droits);
 | 
        
           |  |  | 150 |   | 
        
           |  |  | 151 | 			imagejpeg($image_m,$chemin_sur_serveur_final.'/M/'.$id.'_M.jpg', 85);
 | 
        
           |  |  | 152 | 			chmod($chemin_sur_serveur_final.'/M/'.$id.'_M.jpg',$droits);
 | 
        
           |  |  | 153 |   | 
        
           |  |  | 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);
 | 
        
           |  |  | 156 |   | 
        
           |  |  | 157 | 			unlink($chemin_fichier) ;
 | 
        
           | 150 | aurelien | 158 |   | 
        
           |  |  | 159 | 			chmod($chemin_sur_serveur, $droits);
 | 
        
           | 10 | aurelien | 160 |   | 
        
           |  |  | 161 | 	  		return $id_utilisateur;
 | 
        
           |  |  | 162 | 	  	}
 | 
        
           |  |  | 163 | 	  	else
 | 
        
           |  |  | 164 | 	  	{
 | 
        
           |  |  | 165 | 			trigger_error('Probleme durant le déplacement du fichier temporaire \n') ;
 | 
        
           |  |  | 166 | 			return false ;
 | 
        
           |  |  | 167 | 	  	}
 | 
        
           |  |  | 168 | 	}
 | 
        
           |  |  | 169 |   | 
        
           | 97 | aurelien | 170 | 	public static function obtenirEmplacementFichierParId($id_utilisateur, $id_annuaire, $taille = 'M') {
 | 
        
           | 10 | aurelien | 171 |   | 
        
           |  |  | 172 | 		$id = sprintf('%09s', $id_utilisateur) ;
 | 
        
           | 17 | aurelien | 173 | 		$id = wordwrap($id, 3 , '_', true) ;
 | 
        
           | 10 | aurelien | 174 |   | 
        
           |  |  | 175 | 		$niveauDossier = split("_", $id) ;
 | 
        
           |  |  | 176 |   | 
        
           |  |  | 177 | 		$dossierNiveau1 = $niveauDossier[0] ;
 | 
        
           |  |  | 178 | 		$dossierNiveau2 = $niveauDossier[1] ;
 | 
        
           |  |  | 179 |   | 
        
           | 97 | aurelien | 180 | 		$base_url = Config::get('base_url_images').$id_annuaire;
 | 
        
           | 10 | aurelien | 181 |   | 
        
           |  |  | 182 | 		if($taille == 'A') {
 | 
        
           |  |  | 183 | 			$url = array('S' => $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');
 | 
        
           |  |  | 186 | 		} else {
 | 
        
           |  |  | 187 | 			$url = $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/'.$taille.'/'.$id.'_'.$taille.'.jpg';
 | 
        
           |  |  | 188 | 		}
 | 
        
           | 17 | aurelien | 189 |   | 
        
           | 10 | aurelien | 190 | 		return $url;
 | 
        
           |  |  | 191 | 	}
 | 
        
           | 201 | aurelien | 192 |   | 
        
           |  |  | 193 | 	public static function obtenirUrlFichierParId($id_utilisateur, $id_annuaire, $taille = 'M') {
 | 
        
           |  |  | 194 | 		$id = sprintf('%09s', $id_utilisateur) ;
 | 
        
           |  |  | 195 | 		$id = wordwrap($id, 3 , '_', true) ;
 | 
        
           | 10 | aurelien | 196 |   | 
        
           | 201 | aurelien | 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 | 	}
 | 
        
           |  |  | 214 |   | 
        
           | 17 | aurelien | 215 | 	public function supprimerFichier($id)
 | 
        
           | 10 | aurelien | 216 | 	{
 | 
        
           |  |  | 217 | 		$chemin_sur_serveur = Config::get('base_chemin_images') ;
 | 
        
           |  |  | 218 |   | 
        
           |  |  | 219 | 		$id = sprintf('%09s', $id) ;
 | 
        
           |  |  | 220 | 		$id = wordwrap($id, 3 , '_', true) ;
 | 
        
           |  |  | 221 |   | 
        
           |  |  | 222 | 		$id_fichier = $id.".jpg" ;
 | 
        
           |  |  | 223 |   | 
        
           |  |  | 224 | 		$niveauDossier = split("_", $id) ;
 | 
        
           |  |  | 225 |   | 
        
           |  |  | 226 | 		$dossierNiveau1 = $niveauDossier[0] ;
 | 
        
           |  |  | 227 | 		$dossierNiveau2 = $niveauDossier[1] ;
 | 
        
           |  |  | 228 |   | 
        
           |  |  | 229 | 		$fichier_s = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg' ;
 | 
        
           |  |  | 230 | 		$fichier_m = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M/'.$id.'_M.jpg' ;
 | 
        
           |  |  | 231 | 		$fichier_l = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L/'.$id.'_L.jpg' ;
 | 
        
           |  |  | 232 |   | 
        
           |  |  | 233 | 		if(file_exists($fichier_s))
 | 
        
           |  |  | 234 | 		{
 | 
        
           |  |  | 235 | 			unlink($fichier_s) ;
 | 
        
           |  |  | 236 | 		} // Si le fichier existe
 | 
        
           |  |  | 237 |   | 
        
           |  |  | 238 | 		if(file_exists($fichier_m))
 | 
        
           |  |  | 239 | 		{
 | 
        
           |  |  | 240 | 			unlink($fichier_m) ;
 | 
        
           |  |  | 241 | 		} // Si le fichier existe
 | 
        
           |  |  | 242 |   | 
        
           |  |  | 243 | 		if(file_exists($fichier_l))
 | 
        
           |  |  | 244 | 		{
 | 
        
           |  |  | 245 | 			unlink($fichier_l) ;
 | 
        
           |  |  | 246 | 		} // Si le fichier existe
 | 
        
           |  |  | 247 |   | 
        
           |  |  | 248 | 	}
 | 
        
           |  |  | 249 | }
 | 
        
           |  |  | 250 | ?>
 |