* @copyright 2009 Tela-Botanica * @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL * @version SVN: * @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() { $query = 'UPDATE cel_images SET ci_meta_date = 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 = ' Maintenance ';' '; echo $header_html; $chemin_base_images = $this->config['cel_db']['chemin_images']; $profondeur = 1; echo ''; print '

Suppression des images orphelines effectuées


' ; print '

'.$this->nb_fichiers_orphelins.' fichiers orphelins ont été détectés et supprimés

'; print '

'.$this->convertir_poid($this->espace_libere).' d\'espace disque ont été économisé

'; 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 '
  • '; if ($fichier_ou_dossier->isDir()) { $profondeur_dossier_fils = $profondeur + 1; echo '

    '; } else { $nom_fichier = $fichier_ou_dossier->getFilename(); $this->verifierImageSurDDExisteDansBaseDeDonnees($nom_fichier); } echo '
  • '; } } 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(ci_id_image) as image_existe FROM cel_images WHERE ci_id_image = '.$id_image; $image_existe = $this->executerRequete($requete_id_image_existe); if ($image_existe[0]['image_existe'] < 1) { echo $nom_fichier.'     Image introuvable dans la base de donné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 = 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'; $erreur = false; echo ''; echo '
    '; } 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]; } } ?>