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ées </p><br />' ;
print '<p class="resultat">'.$this->nb_fichiers_orphelins.' fichiers orphelins ont été détectés et supprimés</p>';
print '<p class="resultat">'.$this->convertir_poid($this->espace_libere).' d\'espace disque ont été économisé </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.' 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 = 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];
}
}
?>