Subversion Repositories eFlore/Applications.cel

Rev

Details | Last modification | View Log | RSS feed

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