Subversion Repositories Applications.annuaire

Rev

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

<?php
/**
* PHP Version 5
*
* @category  PHP
* @package   annuaire
* @author    aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version   SVN: <svn_id>
* @link      /doc/annuaire/
*/

Class ImageModele extends Modele {

        private $extensions = '';

        public function verifierFormat($nom_fichier) {

                $extensions = Config::get('extensions_acceptees');
                $extensions = explode('|', $extensions);
                $extension_fichier = strrchr($nom_fichier, '.');

                return in_array($extension_fichier, $extensions);
        }

        // traite l'upload d'une fichier et le deplace en le renommant selon un identifiant donne
        public function stockerFichier($id_annuaire, $id_utilisateur, $fichier)
        {
                $droits = 0777;
                umask(0);

                $chemin_sur_serveur = Config::get('base_chemin_images') ;

                if(!file_exists($chemin_sur_serveur.$id_annuaire.'/')) {
                        if(mkdir($chemin_sur_serveur.'/'.$id_annuaire, $droits, true)) {
                                //chmod($chemin_sur_serveur.'/'.$id_annuaire,$droits);
                        }
                        else
                        {
                                trigger_error('ERROR : probleme durant l\'écriture du dossier des images pour l\'annuaire '.$id_annuaire.' \n'.$chemin_sur_serveur) ;
                                return false;
                        }
                }

                $chemin_sur_serveur = $chemin_sur_serveur.$id_annuaire;

                $taille_max = Config::get('taille_max_images');

                $id = sprintf('%09s', $id_utilisateur) ;
                $id = wordwrap($id, 3 , '_', true) ;

                $id_fichier = $id.".jpg" ;

                $niveauDossier = split("_", $id) ;

                $dossierNiveau1 = $niveauDossier[0] ;
                $dossierNiveau2 = $niveauDossier[1] ;

                if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S'))
                {
                        if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S',$droits, true)) {
                                chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S',$droits);
                        }
                        else
                        {
                                trigger_error('ERROR : probleme durant l\'écriture du dossier s \n') ;
                                return false;
                        }
                }

                if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M'))
                {
                        if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M',$droits, true)) {
                                chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M',$droits);
                        }
                        else
                        {
                                trigger_error('ERROR : probleme durant l\'écriture du dossier m \n') ;
                                return false;
                        }
                }

                if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L'))
                {
                        if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L',$droits, true)) {
                                chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L',$droits);
                        }
                        else
                        {
                                trigger_error('ERROR : probleme durant l\'écriture du dossier l \n') ;
                                return false;
                        }
                }

                $chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ;

                $chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id.".jpg" ;

                if(move_uploaded_file($fichier['tmp_name'],$chemin_fichier))
                {
                        // on redimensionne
                        list($width, $height) = getimagesize($chemin_fichier);

                        $small_height = 100;
                        if($height > $small_height) {
                                $small_height = 100;
                                $ratio = $height/$small_height;
                                $small_width = $width/$ratio;
                        } else {
                                $small_height = $height;
                                $small_width = $width;
                        }

                        $medium_height = 300;
                        if($height > $medium_height) {
                                $ratio = $height/$medium_height;
                                $medium_width = $width/$ratio;
                        } else {
                                $medium_height = $height;
                                $medium_width = $width;
                        }

                        // on reechantillonne
                        $image_p = imagecreatetruecolor($small_width, $small_height);
                        $image_m = imagecreatetruecolor($medium_width, $medium_height);
                        $image_l = imagecreatetruecolor($width, $height);

                        $image = imagecreatefromjpeg($chemin_fichier);

                $ratio_compression = 100 ;

                if(filesize($chemin_fichier) >= $taille_max) {
                    $ratio_compression = 85 ;
                }

                        if($image == null)
                        {
                                trigger_error('Probleme durant la création des images resamplées \n') ;
                                return false ;
                        }

                        // et on copie les nouvelles images (pour la galerie et la liste)
                        imagecopyresampled($image_p, $image, 0, 0, 0, 0, $small_width, $small_height, $width, $height);
                        imagecopyresampled($image_m, $image, 0, 0, 0, 0, $medium_width, $medium_height, $width, $height);
                        imagecopyresampled($image_l, $image, 0, 0, 0, 0, $width, $height, $width, $height);

                        imagejpeg($image_p, $chemin_sur_serveur_final.'/S/'.$id.'_S.jpg', 85);
                        chmod($chemin_sur_serveur_final.'/S/'.$id.'_S.jpg',$droits);

                        imagejpeg($image_m,$chemin_sur_serveur_final.'/M/'.$id.'_M.jpg', 85);
                        chmod($chemin_sur_serveur_final.'/M/'.$id.'_M.jpg',$droits);

                        imagejpeg($image_l,$chemin_sur_serveur_final.'/L/'.$id.'_L.jpg', $ratio_compression);
                        chmod($chemin_sur_serveur_final.'/L/'.$id.'_L.jpg',$droits);

                        unlink($chemin_fichier) ;
                        
                        chmod($chemin_sur_serveur, $droits);

                        return $id_utilisateur;
                }
                else
                {
                        trigger_error('Probleme durant le déplacement du fichier temporaire \n') ;
                        return false ;
                }
        }

        public static function obtenirEmplacementFichierParId($id_utilisateur, $id_annuaire, $taille = 'M') {

                $id = sprintf('%09s', $id_utilisateur) ;
                $id = wordwrap($id, 3 , '_', true) ;

                $niveauDossier = split("_", $id) ;

                $dossierNiveau1 = $niveauDossier[0] ;
                $dossierNiveau2 = $niveauDossier[1] ;

                $base_url = Config::get('base_url_images').$id_annuaire;

                if($taille == 'A') {
                        $url = array('S' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg',
                                                        'M' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg',
                                                                'L' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg');
                } else {
                        $url = $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/'.$taille.'/'.$id.'_'.$taille.'.jpg';
                }

                return $url;
        }
        
        public static function obtenirUrlFichierParId($id_utilisateur, $id_annuaire, $taille = 'M') {
                $id = sprintf('%09s', $id_utilisateur) ;
                $id = wordwrap($id, 3 , '_', true) ;

                $niveauDossier = split("_", $id) ;

                $dossierNiveau1 = $niveauDossier[0] ;
                $dossierNiveau2 = $niveauDossier[1] ;

                $base_url = 'http://'.$_SERVER['SERVER_NAME'].Config::get('base_url_images').$id_annuaire;

                if($taille == 'A') {
                        $url = array('S' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg',
                                                        'M' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg',
                                                                'L' => $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg');
                } else {
                        $url = $base_url.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/'.$taille.'/'.$id.'_'.$taille.'.jpg';
                }

                return $url;
        }

        public function supprimerFichier($id)
        {
                $chemin_sur_serveur = Config::get('base_chemin_images') ;

                $id = sprintf('%09s', $id) ;
                $id = wordwrap($id, 3 , '_', true) ;

                $id_fichier = $id.".jpg" ;

                $niveauDossier = split("_", $id) ;

                $dossierNiveau1 = $niveauDossier[0] ;
                $dossierNiveau2 = $niveauDossier[1] ;

                $fichier_s = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg' ;
                $fichier_m = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M/'.$id.'_M.jpg' ;
                $fichier_l = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L/'.$id.'_L.jpg' ;

                if(file_exists($fichier_s))
                {
                        unlink($fichier_s) ;
                } // Si le fichier existe

                if(file_exists($fichier_m))
                {
                        unlink($fichier_m) ;
                } // Si le fichier existe

                if(file_exists($fichier_l))
                {
                        unlink($fichier_l) ;
                } // Si le fichier existe

        }
}
?>