Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1198 → Rev 1224

/trunk/jrest/scripts/ImagesMaintenance.php/InventoryMaintenance.php
1,268 → 1,120
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// declare(encoding='UTF-8');
/**
* 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/
*/
* Réalise la maintenance des images.
* Action :
* - suppression_images_orphelines : supprime les images qui ne sont plus dans la bdd.
* Utilisation : /opt/lampp/bin/php cli.php ImagesMaintenance suppression_images_orphelines
*
* @category php 5.2
* @package Cel/Scripts
* @author Aurelien PERONNET <aurelien@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version $Id$
*/
class ImagesMaintenance {
 
class InventoryMaintenance extends Cel {
private $nb_fichiers_orphelins = 0;
private $espace_libere = 0;
private $bdd = null;
private $script = null;
private $chemin_base_images = '';
private $nbFichiersSupprimes = 0;
private $espaceLibere = 0;
 
function getElement($uid) {
if ($this->authentifierAdmin()) {
if($uid[0] == "dates_images") {
$this->reparerDatesImages();
}
if($uid[0] == "suppression_images_orphelines") {
$this->suppressionFichiersImagesOrphelins();
}
public function __construct(Conteneur $conteneur) {
$this->chemin_base_images = $conteneur->getParametre('cel.chemin_images');
$this->bdd = $conteneur->getBdd();
$this->script = $conteneur->getScript();
}
 
public function executer($arguments) {
if (isset($arguments[0]) == false) {
throw new Exception("Veuillez indiquer l'action à réaliser en paramètre.", E_USER_ERROR);
}
$action = $arguments[0];
switch ($action) {
case 'suppression_images_orphelines' :
$this->supprimerFichiersImagesOrphelins();
break;
}
}
 
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' ;
private function supprimerFichiersImagesOrphelins() {
$profondeur = 1;
$this->itererRecursivement($this->chemin_base_images, $profondeur);
 
$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() ;*/
print "Suppression des images orphelines effectuées\n";
$fichiersSupprimes = $this->nbFichiersSupprimes;
print "Fichiers orphelins détectés et supprimés : $fichiersSupprimes\n";
$espaceLibere = $this->convertirOctets($this->espaceLibere);
print "Espace disque économisé : $espaceLibere \n";
}
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()) {
private function itererRecursivement($dossier, $profondeur) {
$dossiersAIgnorer = array('export');
$iterateur = new DirectoryIterator($dossier);
foreach ($iterateur as $element) {
if ($element->isDot() || in_array($element->getBasename(), $dossiersAIgnorer)) {
continue;
}
$dossiers_autorises = array('L','M','S');
if ($fichier_ou_dossier->getBasename() == 'export') {
continue;
}
echo '<li>';
if ($fichier_ou_dossier->isDir()) {
 
$indentation = str_repeat("\t", ($profondeur - 1));
if ($element->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);
print "$indentation Analyse dossier : {$element->getPathname()}\n";
$this->itererRecursivement($element->getPathname(), $profondeur_dossier_fils);
} else {
print "$indentation Vérif fichier : {$element->getBasename()}\n";
$existe = $this->verifierPresenceImageDansBdd($element);
if ($existe == false) {
$this->supprimerFichierImage($element);
}
}
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 verifierPresenceImageDansBdd($element) {
$existe = true;
$nom_fichier = $element->getFilename();
if (preg_match('/^([0-9]{3})_([0-9]{3})_([0-9]{3})_[^.]+[.](jpg|xml)$/', $nom_fichier, $match)) {
$id_image = $match[1].$match[2].$match[3];
$id_image = ltrim($id_image, '0');
 
$requete = 'SELECT COUNT(ci_id_image) AS image_existe '.
'FROM cel_images '.
"WHERE ci_id_image = $id_image ";
 
$imageExiste = $this->bdd->requeter($requete, Bdd::SQL_RETOUR_COLONNE);
if ($imageExiste < 1) {
print "Image $id_image introuvable dans la base de données\n";
$existe = false;
}
}
return $existe;
}
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;
private function supprimerFichierImage($element) {
$fichier = $element->getPathname();
$fichierNom = $element->getBasename();
if (file_exists($fichier)) {
$this->espaceLibere += $element->getSize();
if (unlink($fichier) === false) {
throw new Exception("Problème lors de la suppression du fichier : $fichier \n", E_USER_ERROR);
} else {
// $this->nb_fichiers_orphelins++;
$this->nbFichiersSupprimes++;
print "Suppression du fichier : $fichierNom\n";
}
} 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++;
throw new Exception("Problème le fichier n'existe pas : $fichier\n", E_USER_ERROR);
}
}
 
echo '</ul>';
echo '<br />';
private function convertirOctets($taille) {
$units = array('B', 'KB', 'MB', 'GB', 'TB');
for ($i = 0; $taille >= 1024 && $i < 4; $i++) $taille /= 1024;
return round($taille, 2).' '.$units[$i];
}
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];
}
}
?>
?>