Subversion Repositories eFlore/Applications.cel

Rev

Rev 996 | Blame | Last modification | View Log | RSS feed

<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //

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

class InventoryMaintenance extends Cel {
        
        private $nb_fichiers_orphelins = 0;
        private $espace_libere = 0;

        function getElement($uid) {                     
                if ($this->authentifierAdmin()) {
                        if($uid[0] == "dates_images") {
                                $this->reparerDatesImages();
                        }
                        
                        if($uid[0] == "suppression_images_orphelines") {
                                $this->suppressionFichiersImagesOrphelins();
                        }
                }
        }

        private function reparerDatesImages() {
                
                // TODO : effectuer une réexctraction de la date grâce au metadonnées
                // pas urgent
                /*$query = 'UPDATE cel_images SET date_prise_de_vue = ci_meta_date_time ';
                                'WHERE ci_meta_date IS NULL AND ci_meta_date_time IS NOT NULL' ;

                $DB = $this->connectDB($this->config,'cel_db');
                $res =& $DB->query($query);

        if (PEAR::isError($res)) {
                        logger('InventoryMaintenance','Erreur lors de la réparation des dates '.$query);
                die($res->getMessage());
        }

                header('content-type: text/html charset=utf-8');
                print "Réparation des dates effectuées";
                exit() ;*/
        }
        
        private function suppressionFichiersImagesOrphelins() {
                header("content-type: text/html") ;
                $header_html = '
                <head>          
                        <title>Maintenance</title>
                        
                        <style type="text/css">
                        
                                h1 {
                                        color: blue;
                                }
                                
                                h2 {
                                        color: green;
                                }
                                
                                .titre_dossier {
                                        cursor: pointer;
                                }
                                
                                li {
                                        list-style-type: none;
                                }
                                
                                .liste_profondeur_1 {
                                        border: 1px solid blue;
                                        background-color: #DFDFFF;
                                }
                                
                                .liste_profondeur_2 {
                                        border: 1px solid green;
                                        background-color: #E1FFDF;
                                        width: 1500px;
                                }
                                
                                .liste_profondeur_3 {
                                        border: 1px solid yellow;
                                        background-color: #FFFCDF;
                                        width: 1200px;
                                }
                                
                                .attention {
                                        border: 1px solid red;
                                        background-color: white;
                                        width: 600px;
                                }
                                
                        </style>
                        
                        <script src="http://162.38.234.9/cel_consultation/squelettes/js/jquery-1.4.2.min.js" type="text/javascript"></script>
                        <script type="text/javascript" language="javascript">
                        //<![CDATA[
                        
                                function initialiserElementsPliables() {
                                        $(\'.titre_dossier\').bind(\'click\', function() {

                                                $(this).siblings(\'li\').toggle();
                                                return false;
                                        });
                                }
                                
                                $(document).ready(function() {
                                        initialiserElementsPliables();
                                });
                        //]]>
                        </script> ';'
                        
                </head>';
                
                echo $header_html;
                
        $chemin_base_images = $this->config['cel_db']['chemin_images'];
        $profondeur = 1;
        
        echo '<ul id="liste_profondeur_0">';
                        $this->itererRecursivement($chemin_base_images, $profondeur);
                echo '</ul>';
        
                print '<p class="resultat">Suppression des images orphelines effectu&eacute;es </p><br />' ;
                print '<p class="resultat">'.$this->nb_fichiers_orphelins.' fichiers orphelins ont &eacute;t&eacute; d&eacute;tect&eacute;s et supprim&eacute;s</p>';
                print '<p class="resultat">'.$this->convertir_poid($this->espace_libere).' d\'espace disque ont &eacute;t&eacute; &eacute;conomis&eacute; </p>';
                exit() ;
        }
        
        private function itererRecursivement($dossier, $profondeur) {   
                foreach (new DirectoryIterator($dossier) as $fichier_ou_dossier) {
                        if ($fichier_ou_dossier->isDot()) {
                                continue;
                        }
                                
                        $dossiers_autorises = array('L','M','S');
                        
                        if ($fichier_ou_dossier->getBasename() == 'export') {
                                continue;
                        }
                        
                        echo '<li>';
                        
                    if ($fichier_ou_dossier->isDir()) {
                        $profondeur_dossier_fils = $profondeur + 1;
                        echo '<ul class="liste_profondeur_'.$profondeur.'"> <h'.$profondeur.' class="titre_dossier"> analyse du dossier '.$fichier_ou_dossier->getPathname().'</h'.$profondeur.'>' ;
                                $this->itererRecursivement($fichier_ou_dossier->getPathname(), $profondeur_dossier_fils);
                        echo '</ul><br /><br />';
                    } else {            
                        $nom_fichier = $fichier_ou_dossier->getFilename();
                        $this->verifierImageSurDDExisteDansBaseDeDonnees($nom_fichier);
                    }
                    
                    echo '</li>';
                }
        }
        
        private function verifierImageSurDDExisteDansBaseDeDonnees($nom_fichier) {
                $nom_fichier_sans_extension = trim($nom_fichier, '.jpg');
                $nom_fichier_sans_extension = trim($nom_fichier_sans_extension, '_L');
                $nom_fichier_sans_extension = trim($nom_fichier_sans_extension, '_M');
                $nom_fichier_sans_extension = trim($nom_fichier_sans_extension, '_S');
                $id_image = str_replace('_', '', $nom_fichier_sans_extension);
                
                // suppression des 0 devant
                $id_image += 0;
                
                $requete_id_image_existe = 'SELECT COUNT(id_image) as image_existe FROM cel_images WHERE id_image = '.$id_image;
                $image_existe = $this->executerRequete($requete_id_image_existe);
                
                if ($image_existe[0]['image_existe'] < 1) {
                        echo $nom_fichier.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Image introuvable dans la base de donn&eacute;es';
                        $this->supprimerImage($id_image);
                }
        }
        
        private function supprimerImage($id) {
                $chemin_sur_serveur = $this->config['cel_db']['chemin_images'];

                $id = sprintf('%09s', $id);
                $id = wordwrap($id, 3 , '_', true);
        
                $id_fichier = "$id.jpg";
        
                $niveauDossier = explode('_', $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';
                
                $erreur = false;
                
                echo '<ul class="liste_suppression">';
                
                if(file_exists($fichier_s)) {
                        $this->espace_libere += filesize($fichier_s);
                        $suppression_s = true;
                        //$suppression_s = unlink($fichier_s) ;
        
                        if (!$suppression_s) {
                                $erreur =  '<li> probleme durant la suppression de l\'image '.$fichier_s.' </li>' ;
                                echo $erreur;
                        } else {
                                //      $this->nb_fichiers_orphelins++;
                        }
                } else {
                        $erreur =  '<li> probleme : l\'image '.$fichier_s.' n\'existe pas </li>' ;
                        echo $erreur;
                }// Si le fichier existe
        
                if (file_exists($fichier_m)) {
                        $this->espace_libere += filesize($fichier_m);
                        $suppression_m = true;
                        //$suppression_m = unlink($fichier_m) ;
                        
                        if (!$suppression_m) {
                                $erreur =  '<li> probleme durant la suppression de l\'image '.$fichier_m.' </li>' ;
                                $this->logger('CEL_images_bugs',$erreur);
                        } else {
                                //      $this->nb_fichiers_orphelins++;
                        }
                } else {
                        $erreur =  '<li> probleme : l\'image '.$fichier_m.' n\'existe pas </li>' ;
                        echo $erreur;
                } // Si le fichier existe
        
                if (file_exists($fichier_l)) {
                        $this->espace_libere += filesize($fichier_l);
                        $suppression_l = true;
                        //$suppression_l = unlink($fichier_l) ;
                        
                        if(!$suppression_l) {
                                $erreur =  '<li> probleme durant la suppression de l\'image '.$fichier_l.' </li>' ;
                                echo $erreur;
                        } else {
                                //      $this->nb_fichiers_orphelins++;
                        }
                } else {
                        $erreur =  '<li> probleme : l\'image '.$fichier_l.' n\'existe pas </li>' ;
                        echo $erreur;
                } // Si le fichier existe
                
                if (!$erreur) {
                        echo '<p class="attention">Suppression dans tous les formats de l\'image '.$id.' effectuee </p>';
                        $this->nb_fichiers_orphelins++;
                }

                echo '</ul>';
                echo '<br />';
        }
        
        private function convertir_poid($size) {
            $units = array(' B', ' KB', ' MB', ' GB', ' TB');
            for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
            return round($size, 2).$units[$i];
        }
}
?>