Subversion Repositories eFlore/Applications.cel

Rev

Rev 996 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
875 aurelien 2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
3
 
416 aurelien 4
/**
5
* PHP Version 5
6
*
7
* @category  PHP
8
* @package   jrest
9
* @author    aurelien <aurelien@tela-botanica.org>
10
* @copyright 2009 Tela-Botanica
11
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
12
* @version   SVN: <svn_id>
13
* @link      /doc/jrest/
14
*/
15
 
535 jpm 16
class InventoryMaintenance extends Cel {
436 aurelien 17
 
18
	private $nb_fichiers_orphelins = 0;
19
	private $espace_libere = 0;
416 aurelien 20
 
535 jpm 21
	function getElement($uid) {
22
		if ($this->authentifierAdmin()) {
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() {
875 aurelien 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 ';
416 aurelien 38
				'WHERE ci_meta_date IS NULL AND ci_meta_date_time IS NOT NULL' ;
39
 
535 jpm 40
		$DB = $this->connectDB($this->config,'cel_db');
416 aurelien 41
		$res =& $DB->query($query);
42
 
43
        if (PEAR::isError($res)) {
537 jpm 44
			logger('InventoryMaintenance','Erreur lors de la réparation des dates '.$query);
416 aurelien 45
        	die($res->getMessage());
46
        }
47
 
537 jpm 48
		header('content-type: text/html charset=utf-8');
49
		print "Réparation des dates effectuées";
875 aurelien 50
		exit() ;*/
436 aurelien 51
	}
52
 
53
	private function suppressionFichiersImagesOrphelins() {
416 aurelien 54
		header("content-type: text/html") ;
436 aurelien 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'];
125
       	$profondeur = 1;
126
 
127
       	echo '<ul id="liste_profondeur_0">';
128
			$this->itererRecursivement($chemin_base_images, $profondeur);
129
		echo '</ul>';
130
 
131
		print '<p class="resultat">Suppression des images orphelines effectu&eacute;es </p><br />' ;
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>';
133
		print '<p class="resultat">'.$this->convertir_poid($this->espace_libere).' d\'espace disque ont &eacute;t&eacute; &eacute;conomis&eacute; </p>';
416 aurelien 134
		exit() ;
135
	}
436 aurelien 136
 
537 jpm 137
	private function itererRecursivement($dossier, $profondeur) {
436 aurelien 138
		foreach (new DirectoryIterator($dossier) as $fichier_ou_dossier) {
537 jpm 139
			if ($fichier_ou_dossier->isDot()) {
436 aurelien 140
				continue;
141
			}
142
 
143
			$dossiers_autorises = array('L','M','S');
144
 
537 jpm 145
			if ($fichier_ou_dossier->getBasename() == 'export') {
436 aurelien 146
				continue;
147
			}
148
 
149
			echo '<li>';
150
 
537 jpm 151
		    if ($fichier_ou_dossier->isDir()) {
436 aurelien 152
		    	$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.'>' ;
154
	    			$this->itererRecursivement($fichier_ou_dossier->getPathname(), $profondeur_dossier_fils);
155
	    		echo '</ul><br /><br />';
156
		    } else {
157
		    	$nom_fichier = $fichier_ou_dossier->getFilename();
158
		    	$this->verifierImageSurDDExisteDansBaseDeDonnees($nom_fichier);
159
		    }
160
 
161
		    echo '</li>';
162
		}
163
	}
164
 
165
	private function verifierImageSurDDExisteDansBaseDeDonnees($nom_fichier) {
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
 
875 aurelien 175
		$requete_id_image_existe = 'SELECT COUNT(id_image) as image_existe FROM cel_images WHERE id_image = '.$id_image;
436 aurelien 176
		$image_existe = $this->executerRequete($requete_id_image_existe);
177
 
537 jpm 178
		if ($image_existe[0]['image_existe'] < 1) {
436 aurelien 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) {
537 jpm 185
		$chemin_sur_serveur = $this->config['cel_db']['chemin_images'];
416 aurelien 186
 
537 jpm 187
		$id = sprintf('%09s', $id);
188
		$id = wordwrap($id, 3 , '_', true);
436 aurelien 189
 
537 jpm 190
		$id_fichier = "$id.jpg";
436 aurelien 191
 
996 aurelien 192
		$niveauDossier = explode('_', $id);
436 aurelien 193
 
537 jpm 194
		$dossierNiveau1 = $niveauDossier[0];
195
		$dossierNiveau2 = $niveauDossier[1];
436 aurelien 196
 
537 jpm 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';
436 aurelien 200
 
201
		$erreur = false;
202
 
203
		echo '<ul class="liste_suppression">';
204
 
537 jpm 205
		if(file_exists($fichier_s)) {
436 aurelien 206
			$this->espace_libere += filesize($fichier_s);
207
			$suppression_s = true;
208
			//$suppression_s = unlink($fichier_s) ;
209
 
537 jpm 210
			if (!$suppression_s) {
436 aurelien 211
				$erreur =  '<li> probleme durant la suppression de l\'image '.$fichier_s.' </li>' ;
212
				echo $erreur;
213
			} else {
537 jpm 214
				//	$this->nb_fichiers_orphelins++;
436 aurelien 215
			}
216
		} else {
217
			$erreur =  '<li> probleme : l\'image '.$fichier_s.' n\'existe pas </li>' ;
218
			echo $erreur;
537 jpm 219
		}// Si le fichier existe
436 aurelien 220
 
537 jpm 221
		if (file_exists($fichier_m)) {
436 aurelien 222
			$this->espace_libere += filesize($fichier_m);
223
			$suppression_m = true;
224
			//$suppression_m = unlink($fichier_m) ;
225
 
537 jpm 226
			if (!$suppression_m) {
436 aurelien 227
				$erreur =  '<li> probleme durant la suppression de l\'image '.$fichier_m.' </li>' ;
228
				$this->logger('CEL_images_bugs',$erreur);
229
			} else {
537 jpm 230
				//	$this->nb_fichiers_orphelins++;
436 aurelien 231
			}
232
		} else {
233
			$erreur =  '<li> probleme : l\'image '.$fichier_m.' n\'existe pas </li>' ;
234
			echo $erreur;
235
		} // Si le fichier existe
236
 
535 jpm 237
		if (file_exists($fichier_l)) {
436 aurelien 238
			$this->espace_libere += filesize($fichier_l);
239
			$suppression_l = true;
240
			//$suppression_l = unlink($fichier_l) ;
241
 
242
			if(!$suppression_l) {
243
				$erreur =  '<li> probleme durant la suppression de l\'image '.$fichier_l.' </li>' ;
244
				echo $erreur;
245
			} else {
537 jpm 246
				//	$this->nb_fichiers_orphelins++;
436 aurelien 247
			}
248
		} else {
249
			$erreur =  '<li> probleme : l\'image '.$fichier_l.' n\'existe pas </li>' ;
250
			echo $erreur;
251
		} // Si le fichier existe
252
 
535 jpm 253
		if (!$erreur) {
436 aurelien 254
			echo '<p class="attention">Suppression dans tous les formats de l\'image '.$id.' effectuee </p>';
255
			$this->nb_fichiers_orphelins++;
256
		}
257
 
258
		echo '</ul>';
259
		echo '<br />';
260
	}
261
 
262
	private function convertir_poid($size) {
263
	    $units = array(' B', ' KB', ' MB', ' GB', ' TB');
264
	    for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
265
	    return round($size, 2).$units[$i];
266
	}
416 aurelien 267
}
268
?>