Subversion Repositories eFlore/Applications.cel

Rev

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