Subversion Repositories eFlore/Applications.cel

Rev

Rev 1198 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1198 Rev 1224
Line 1... Line 1...
1
<?php
1
<?php
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
2
// declare(encoding='UTF-8');
3
 
-
 
4
/**
3
/**
-
 
4
 * Réalise la maintenance des images.
5
* PHP Version 5
5
 * Action :
-
 
6
 * - suppression_images_orphelines : supprime les images qui ne sont plus dans la bdd.
-
 
7
 * Utilisation : /opt/lampp/bin/php cli.php ImagesMaintenance suppression_images_orphelines
6
*
8
 *
7
* @category  PHP
9
 * @category	php 5.2
8
* @package   jrest
10
 * @package		Cel/Scripts
9
* @author    aurelien <aurelien@tela-botanica.org>
11
 * @author		Aurelien PERONNET <aurelien@tela-botanica.org>
10
* @copyright 2009 Tela-Botanica
12
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
-
 
13
 * @copyright	Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
11
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
14
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
12
* @version   SVN: <svn_id>
15
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
13
* @link      /doc/jrest/
16
 * @version		$Id$
14
*/
17
 */
15
 
-
 
16
class InventoryMaintenance extends Cel {
18
class ImagesMaintenance {
17
	
19
 
-
 
20
	private $bdd = null;
-
 
21
	private $script = null;
-
 
22
	private $chemin_base_images = '';
18
	private $nb_fichiers_orphelins = 0;
23
	private $nbFichiersSupprimes = 0;
19
	private $espace_libere = 0;
24
	private $espaceLibere = 0;
20
 
25
 
21
	function getElement($uid) {			
26
	public function __construct(Conteneur $conteneur) {
22
		if ($this->authentifierAdmin()) {
27
		$this->chemin_base_images = $conteneur->getParametre('cel.chemin_images');
23
			if($uid[0] == "dates_images") {
28
		$this->bdd = $conteneur->getBdd();
24
				$this->reparerDatesImages();
29
		$this->script = $conteneur->getScript();
25
			}
30
	}
26
			
31
 
-
 
32
	public function executer($arguments) {
-
 
33
		if (isset($arguments[0]) == false) {
-
 
34
			throw new Exception("Veuillez indiquer l'action à réaliser en paramètre.", E_USER_ERROR);
-
 
35
		}
-
 
36
		$action = $arguments[0];
-
 
37
		switch ($action) {
27
			if($uid[0] == "suppression_images_orphelines") {
38
			case 'suppression_images_orphelines' :
28
				$this->suppressionFichiersImagesOrphelins();
39
				$this->supprimerFichiersImagesOrphelins();
29
			}
40
				break;
30
		}
41
		}
31
	}
42
	}
Line 32... Line -...
32
 
-
 
33
	private function reparerDatesImages() {
-
 
34
		
-
 
35
		// TODO : effectuer une réexctraction de la date grâce au metadonnées
-
 
36
		// pas urgent
-
 
37
		/*$query = 'UPDATE cel_images SET date_prise_de_vue = ci_meta_date_time ';
-
 
38
				'WHERE ci_meta_date IS NULL AND ci_meta_date_time IS NOT NULL' ;
-
 
39
 
-
 
40
		$DB = $this->connectDB($this->config,'cel_db');
-
 
41
		$res =& $DB->query($query);
-
 
42
 
-
 
43
        if (PEAR::isError($res)) {
-
 
44
			logger('InventoryMaintenance','Erreur lors de la réparation des dates '.$query);
-
 
45
        	die($res->getMessage());
-
 
46
        }
-
 
47
 
-
 
48
		header('content-type: text/html charset=utf-8');
-
 
49
		print "Réparation des dates effectuées";
-
 
50
		exit() ;*/
-
 
51
	}
-
 
52
	
43
 
53
	private function suppressionFichiersImagesOrphelins() {
-
 
54
		header("content-type: text/html") ;
-
 
55
		$header_html = '
-
 
56
		<head>		
-
 
57
			<title>Maintenance</title>
-
 
58
			
-
 
59
			<style type="text/css">
-
 
60
			
-
 
61
				h1 {
-
 
62
					color: blue;
-
 
63
				}
-
 
64
				
-
 
65
				h2 {
-
 
66
					color: green;
-
 
67
				}
-
 
68
				
-
 
69
				.titre_dossier {
-
 
70
					cursor: pointer;
-
 
71
				}
-
 
72
				
-
 
73
				li {
-
 
74
					list-style-type: none;
-
 
75
				}
-
 
76
				
-
 
77
				.liste_profondeur_1 {
-
 
78
					border: 1px solid blue;
-
 
79
					background-color: #DFDFFF;
-
 
80
				}
-
 
81
				
-
 
82
				.liste_profondeur_2 {
-
 
83
					border: 1px solid green;
-
 
84
					background-color: #E1FFDF;
-
 
85
					width: 1500px;
-
 
86
				}
-
 
87
				
-
 
88
				.liste_profondeur_3 {
-
 
89
					border: 1px solid yellow;
-
 
90
					background-color: #FFFCDF;
-
 
91
					width: 1200px;
-
 
92
				}
-
 
93
				
-
 
94
				.attention {
-
 
95
					border: 1px solid red;
-
 
96
					background-color: white;
-
 
97
					width: 600px;
-
 
98
				}
-
 
99
				
-
 
100
			</style>
-
 
101
			
-
 
102
			<script src="http://162.38.234.9/cel_consultation/squelettes/js/jquery-1.4.2.min.js" type="text/javascript"></script>
-
 
103
			<script type="text/javascript" language="javascript">
-
 
104
			//<![CDATA[
-
 
105
			
-
 
106
				function initialiserElementsPliables() {
-
 
107
					$(\'.titre_dossier\').bind(\'click\', function() {
-
 
108
 
-
 
109
						$(this).siblings(\'li\').toggle();
-
 
110
						return false;
-
 
111
					});
-
 
112
				}
-
 
113
				
-
 
114
				$(document).ready(function() {
-
 
115
					initialiserElementsPliables();
-
 
116
				});
-
 
117
			//]]>
-
 
118
			</script> ';'
-
 
119
			
-
 
120
		</head>';
-
 
121
		
-
 
122
		echo $header_html;
-
 
123
		
-
 
124
        $chemin_base_images = $this->config['cel_db']['chemin_images'];
44
	private function supprimerFichiersImagesOrphelins() {
125
       	$profondeur = 1;
-
 
126
       	
-
 
127
       	echo '<ul id="liste_profondeur_0">';
45
       	$profondeur = 1;
128
			$this->itererRecursivement($chemin_base_images, $profondeur);
-
 
129
		echo '</ul>';
46
		$this->itererRecursivement($this->chemin_base_images, $profondeur);
130
        
47
 
-
 
48
		print "Suppression des images orphelines effectuées\n";
131
		print '<p class="resultat">Suppression des images orphelines effectu&eacute;es </p><br />' ;
49
		$fichiersSupprimes = $this->nbFichiersSupprimes;
132
		print '<p class="resultat">'.$this->nb_fichiers_orphelins.' fichiers orphelins ont &eacute;t&eacute; d&eacute;tect&eacute;s et supprim&eacute;s</p>';
50
		print "Fichiers orphelins détectés et supprimés : $fichiersSupprimes\n";
133
		print '<p class="resultat">'.$this->convertir_poid($this->espace_libere).' d\'espace disque ont &eacute;t&eacute; &eacute;conomis&eacute; </p>';
51
		$espaceLibere = $this->convertirOctets($this->espaceLibere);
134
		exit() ;
52
		print "Espace disque économisé : $espaceLibere \n";
135
	}
53
	}
136
	
54
 
137
	private function itererRecursivement($dossier, $profondeur) {	
55
	private function itererRecursivement($dossier, $profondeur) {
138
		foreach (new DirectoryIterator($dossier) as $fichier_ou_dossier) {
56
		$dossiersAIgnorer = array('export');
139
			if ($fichier_ou_dossier->isDot()) {
-
 
140
				continue;
-
 
141
			}
-
 
142
				
57
		$iterateur = new DirectoryIterator($dossier);
143
			$dossiers_autorises = array('L','M','S');
-
 
144
			
58
		foreach ($iterateur as $element) {
145
			if ($fichier_ou_dossier->getBasename() == 'export') {
59
			if ($element->isDot() || in_array($element->getBasename(), $dossiersAIgnorer)) {
146
				continue;
60
				continue;
147
			}
61
			}
148
			
62
 
149
			echo '<li>';
-
 
150
			
63
			$indentation = str_repeat("\t", ($profondeur - 1));
151
		    if ($fichier_ou_dossier->isDir()) {
64
		    if ($element->isDir()) {
152
		    	$profondeur_dossier_fils = $profondeur + 1;
65
		    	$profondeur_dossier_fils = $profondeur + 1;
153
	    		echo '<ul class="liste_profondeur_'.$profondeur.'"> <h'.$profondeur.' class="titre_dossier"> analyse du dossier '.$fichier_ou_dossier->getPathname().'</h'.$profondeur.'>' ;
66
		    	print "$indentation Analyse dossier : {$element->getPathname()}\n";
154
	    			$this->itererRecursivement($fichier_ou_dossier->getPathname(), $profondeur_dossier_fils);
-
 
155
	    		echo '</ul><br /><br />';
67
	    		$this->itererRecursivement($element->getPathname(), $profondeur_dossier_fils);
156
		    } else {	    	
68
		    } else {
157
		    	$nom_fichier = $fichier_ou_dossier->getFilename();
69
		    	print "$indentation Vérif fichier : {$element->getBasename()}\n";
-
 
70
		    	$existe = $this->verifierPresenceImageDansBdd($element);
-
 
71
		    	if ($existe == false) {
-
 
72
		    		$this->supprimerFichierImage($element);
158
		    	$this->verifierImageSurDDExisteDansBaseDeDonnees($nom_fichier);
73
		    	}
159
		    }
-
 
160
		    
-
 
161
		    echo '</li>';
74
		    }
162
		}
75
		}
163
	}
76
	}
164
	
77
 
165
	private function verifierImageSurDDExisteDansBaseDeDonnees($nom_fichier) {
78
	private function verifierPresenceImageDansBdd($element) {
166
		$nom_fichier_sans_extension = trim($nom_fichier, '.jpg');
79
		$existe = true;
167
		$nom_fichier_sans_extension = trim($nom_fichier_sans_extension, '_L');
80
		$nom_fichier = $element->getFilename();
168
		$nom_fichier_sans_extension = trim($nom_fichier_sans_extension, '_M');
81
		if (preg_match('/^([0-9]{3})_([0-9]{3})_([0-9]{3})_[^.]+[.](jpg|xml)$/', $nom_fichier, $match)) {
169
		$nom_fichier_sans_extension = trim($nom_fichier_sans_extension, '_S');
82
			$id_image = $match[1].$match[2].$match[3];
170
		$id_image = str_replace('_', '', $nom_fichier_sans_extension);
83
			$id_image = ltrim($id_image, '0');
-
 
84
 
171
		
85
			$requete = 'SELECT COUNT(ci_id_image) AS image_existe '.
172
		// suppression des 0 devant
86
				'FROM cel_images '.
173
		$id_image += 0;
87
				"WHERE ci_id_image = $id_image ";
174
		
-
 
175
		$requete_id_image_existe = 'SELECT COUNT(id_image) as image_existe FROM cel_images WHERE id_image = '.$id_image;
88
 
176
		$image_existe = $this->executerRequete($requete_id_image_existe);
-
 
177
		
89
			$imageExiste = $this->bdd->requeter($requete, Bdd::SQL_RETOUR_COLONNE);
178
		if ($image_existe[0]['image_existe'] < 1) {
90
			if ($imageExiste < 1) {
179
			echo $nom_fichier.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Image introuvable dans la base de donn&eacute;es';
91
				print "Image $id_image introuvable dans la base de données\n";
-
 
92
				$existe = false;
180
			$this->supprimerImage($id_image);
93
			}
-
 
94
		}
181
		}
95
		return $existe;
182
	}
96
	}
183
	
97
 
184
	private function supprimerImage($id) {
-
 
185
		$chemin_sur_serveur = $this->config['cel_db']['chemin_images'];
-
 
186
 
98
	private function supprimerFichierImage($element) {
187
		$id = sprintf('%09s', $id);
-
 
188
		$id = wordwrap($id, 3 , '_', true);
-
 
189
	
-
 
190
		$id_fichier = "$id.jpg";
-
 
191
	
-
 
192
		$niveauDossier = explode('_', $id);
-
 
193
	
-
 
194
		$dossierNiveau1 = $niveauDossier[0];
99
		$fichier = $element->getPathname();
195
		$dossierNiveau2 = $niveauDossier[1];
-
 
196
		
-
 
197
		$fichier_s = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg';
-
 
198
		$fichier_m = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M/'.$id.'_M.jpg';
-
 
199
		$fichier_l = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L/'.$id.'_L.jpg';
-
 
200
		
-
 
201
		$erreur = false;
-
 
202
		
-
 
203
		echo '<ul class="liste_suppression">';
-
 
204
		
-
 
205
		if(file_exists($fichier_s)) {
-
 
206
			$this->espace_libere += filesize($fichier_s);
-
 
207
			$suppression_s = true;
-
 
208
			//$suppression_s = unlink($fichier_s) ;
-
 
209
	
-
 
210
			if (!$suppression_s) {
-
 
211
				$erreur =  '<li> probleme durant la suppression de l\'image '.$fichier_s.' </li>' ;
-
 
212
				echo $erreur;
-
 
213
			} else {
-
 
214
				//	$this->nb_fichiers_orphelins++;
-
 
215
			}
-
 
216
		} else {
-
 
217
			$erreur =  '<li> probleme : l\'image '.$fichier_s.' n\'existe pas </li>' ;
-
 
218
			echo $erreur;
-
 
219
		}// Si le fichier existe
-
 
220
	
100
		$fichierNom = $element->getBasename();
221
		if (file_exists($fichier_m)) {
101
		if (file_exists($fichier)) {
222
			$this->espace_libere += filesize($fichier_m);
-
 
223
			$suppression_m = true;
-
 
224
			//$suppression_m = unlink($fichier_m) ;
-
 
225
			
-
 
226
			if (!$suppression_m) {
-
 
227
				$erreur =  '<li> probleme durant la suppression de l\'image '.$fichier_m.' </li>' ;
-
 
228
				$this->logger('CEL_images_bugs',$erreur);
-
 
229
			} else {
-
 
230
				//	$this->nb_fichiers_orphelins++;
-
 
231
			}
-
 
232
		} else {
-
 
233
			$erreur =  '<li> probleme : l\'image '.$fichier_m.' n\'existe pas </li>' ;
-
 
234
			echo $erreur;
-
 
235
		} // Si le fichier existe
-
 
236
	
102
			$this->espaceLibere += $element->getSize();
237
		if (file_exists($fichier_l)) {
-
 
238
			$this->espace_libere += filesize($fichier_l);
-
 
239
			$suppression_l = true;
-
 
240
			//$suppression_l = unlink($fichier_l) ;
-
 
241
			
-
 
242
			if(!$suppression_l) {
103
			if (unlink($fichier) === false) {
243
				$erreur =  '<li> probleme durant la suppression de l\'image '.$fichier_l.' </li>' ;
-
 
244
				echo $erreur;
104
				throw new Exception("Problème lors de la suppression du fichier : $fichier \n", E_USER_ERROR);
245
			} else {
105
			} else {
-
 
106
				$this->nbFichiersSupprimes++;
246
				//	$this->nb_fichiers_orphelins++;
107
				print "Suppression du fichier : $fichierNom\n";
247
			}
108
			}
248
		} else {
109
		} else {
249
			$erreur =  '<li> probleme : l\'image '.$fichier_l.' n\'existe pas </li>' ;
-
 
250
			echo $erreur;
-
 
251
		} // Si le fichier existe
-
 
252
		
-
 
253
		if (!$erreur) {
-
 
254
			echo '<p class="attention">Suppression dans tous les formats de l\'image '.$id.' effectuee </p>';
-
 
255
			$this->nb_fichiers_orphelins++;
110
			throw new Exception("Problème le fichier n'existe pas : $fichier\n", E_USER_ERROR);
256
		}
-
 
257
 
-
 
258
		echo '</ul>';
-
 
259
		echo '<br />';
111
		}
260
	}
112
	}
261
	
113
 
262
	private function convertir_poid($size) {
114
	private function convertirOctets($taille) {
263
	    $units = array(' B', ' KB', ' MB', ' GB', ' TB');
115
	    $units = array('B', 'KB', 'MB', 'GB', 'TB');
264
	    for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
116
	    for ($i = 0; $taille >= 1024 && $i < 4; $i++) $taille /= 1024;
265
	    return round($size, 2).$units[$i];
117
	    return round($taille, 2).' '.$units[$i];
266
	}
118
	}
267
}
119
}
268
?>
120
?>