Index: /extensions/PHP_Optimisateur/config.xml
===================================================================
--- /extensions/PHP_Optimisateur/config.xml	(revision 8194)
+++ /extensions/PHP_Optimisateur/config.xml	(revision 8195)
Index: /extensions/PHP_Optimisateur/files/display_config.php
===================================================================
--- /extensions/PHP_Optimisateur/files/display_config.php	(revision 8194)
+++ /extensions/PHP_Optimisateur/files/display_config.php	(revision 8195)
@@ -2,5 +2,5 @@
 /***************************************\
 |			PHP OPTIMISATEUR			|
-|			   Version 1.1				|
+|			   Version 1.2				|
 \***************************************/
 
@@ -24,4 +24,9 @@
 				<span class="title">'.l10n('Options').'</span>
 				<table>
+					<tr>
+						<td><b>'.l10n('silentORNOT').' :</b></td>
+						<td>'.l10n($silentORNOT).'</td>
+					</tr>
+
 					<tr>
 						<td><b>'.l10n('DIRhighORNOT').' :</b></td>
@@ -111,60 +116,30 @@
 					</tr>
 				</table>
-			</li>
-			<li>
-				<span class="title">'.l10n('PluginsBefore').'</span>
-				<ul>';
-					foreach ($PluginsBefore as $name => $config) {
-						echo '<li>
-							<b>'.$name.' :</b>
-							<table>';
-								foreach ($config as $key => $value) {
-									echo '<tr>
-										<td>'.$key.' :</td>
-										<td>'.bool_to_string($value).'</td>
-									</tr>';
-								}
-							echo '</table>
-						</li>';
-					}
-				echo '</ul>
-			</li>
-			<li>
-				<span class="title">'.l10n('PluginsProcess').'</span>
-				<ul>';
-					foreach ($PluginsProcess as $name => $config) {
-						echo '<li>
-							<b>'.$name.' :</b>
-							<table>';
-								foreach ($config as $key => $value) {
-									echo '<tr>
-										<td>'.$key.' :</td>
-										<td>'.bool_to_string($value).'</td>
-									</tr>';
-								}
-							echo '</table>
-						</li>';
-					}
-				echo '</ul>
-			</li>
-			<li>
-				<span class="title">'.l10n('PluginsAfter').'</span>
-				<ul>';
-					foreach ($PluginsAfter as $name => $config) {
-						echo '<li>
-							<b>'.$name.' :</b>
-							<table>';
-								foreach ($config as $key => $value) {
-									echo '<tr>
-										<td>'.$key.' :</td>
-										<td>'.bool_to_string($value).'</td>
-									</tr>';
-								}
-							echo '</table>
-						</li>';
-					}
-				echo '</ul>
-			</li>
-		</ul>
+			</li>';
+			
+			// Affichage des plugins, un bloc par mode
+			foreach (array('PluginsBefore','PluginsProcess','PluginsAfter') as $mode) {
+				echo '<li>
+					<span class="title">'.l10n($mode).'</span>
+					<ul>';
+						// Un bloc par plugin
+						foreach (${$mode} as $name => $config) {
+							echo '<li>';
+								echo '<b>'.$name.' :</b>
+								<table>';
+									foreach ($config as $key => $value) {
+										echo '<tr>
+											<td>'.$key.' :</td>
+											<td>'.bool_to_string($value).'</td>
+										</tr>';
+									}
+								echo '</table>
+							</li>';
+						}
+					echo '</ul>
+				</li>';
+			}
+			
+		echo '</ul>
 	</div>';
 ?>
Index: /extensions/PHP_Optimisateur/files/functions.php
===================================================================
--- /extensions/PHP_Optimisateur/files/functions.php	(revision 8194)
+++ /extensions/PHP_Optimisateur/files/functions.php	(revision 8195)
@@ -2,5 +2,5 @@
 /***************************************\
 |			PHP OPTIMISATEUR			|
-|			   Version 1.1				|
+|			   Version 1.2				|
 \***************************************/
 
Index: /extensions/PHP_Optimisateur/files/header.php
===================================================================
--- /extensions/PHP_Optimisateur/files/header.php	(revision 8194)
+++ /extensions/PHP_Optimisateur/files/header.php	(revision 8195)
@@ -2,9 +2,9 @@
 /***************************************\
 |			PHP OPTIMISATEUR			|
-|			   Version 1.1				|
+|			   Version 1.2				|
 \***************************************/
 
 session_start();
-$APPversion = '1.1';
+$APPversion = '1.2';
 $user_lang = GetLanguage();
 include('language/'.$user_lang['Lang'].'/'.$user_lang['Lang'].'.php');
@@ -21,10 +21,12 @@
 <body>
 <div class="title">
-	PHP Optimisateur '.$APPversion;
+	PHP Optimisateur '.$APPversion.'
 	
+	<span class="lang">';
 	foreach ($user_lang['languages'] as $key) {
-		echo '<a class="lang" href="index.php?Lang='.$key.'"><img src="language/'.$key.'/'.$key.'.png"/></a>';
+		echo '<a class="lang" href="index.php?Lang='.$key.'" title="'.$key.'"><img src="language/'.$key.'/'.$key.'.png"/></a>';
 	}
+	echo '</span>
 	
-echo '</div>';
+</div>';
 ?>
Index: /extensions/PHP_Optimisateur/files/style.css
===================================================================
--- /extensions/PHP_Optimisateur/files/style.css	(revision 8194)
+++ /extensions/PHP_Optimisateur/files/style.css	(revision 8195)
@@ -31,4 +31,11 @@
 		border-color:#eee;
 	}
+	div.footer {
+		clear:both;
+		width:942px;
+		text-align:center;
+		font-size:0.9em;
+		border:none;
+	}
 	div.files li {
 		margin-top:0;
@@ -46,11 +53,13 @@
 		font-size:1.2em;
 	}
-
+	div.link {
+		border:none;
+	}
+	
 a {
-	color:#EF9700;
+	color:#EF8100;
 	text-decoration:none;
-	padding:0 10px;
-	float:right;
-	margin-bottom:1px;
+	font-size:1.2em;
+	font-style:italic;
 }
 	a:hover {
@@ -58,4 +67,13 @@
 		border-bottom:1px dotted #555;
 		margin-bottom:0;
+	}
+	div.link a {
+		margin:0 10px;
+		float:right;
+		margin-bottom:1px;
+	}
+	span.lang a {
+		margin:-4px 10px;
+		float:right;
 	}
 
@@ -80,8 +98,14 @@
 	-moz-border-radius:3px;
 }
+	input[type="submit"], input[type="reset"] {
+		padding:2px 5px;
+	}
 
-b.new:after {
-	content:' New !';
+b.new {
 	color:#0ABF00;
+	font-style:italic;
+}
+b.miss {
+	color:#BF0008;
 	font-style:italic;
 }
@@ -93,9 +117,12 @@
 }
 
-td {
-	width:50%;
+table {
+	min-width:50%;
 }
-	tr td:first-child {
-		text-align:right;
-		padding-right:5px;
+	td {
+		width:50%;
 	}
+		tr td:first-child {
+			text-align:right;
+			padding-right:5px;
+		}
Index: /extensions/PHP_Optimisateur/index.php
===================================================================
--- /extensions/PHP_Optimisateur/index.php	(revision 8194)
+++ /extensions/PHP_Optimisateur/index.php	(revision 8195)
@@ -2,5 +2,5 @@
 /***************************************\
 |			PHP OPTIMISATEUR			|
-|			   Version 1.1				|
+|			   Version 1.2				|
 \***************************************/
 
@@ -23,7 +23,5 @@
 
 	// Afficher la configuration
-	if (!$silentORNOT) {
-		include('files/display_config.php');
-	}
+	include('files/display_config.php');
 
 	// Dossiers
@@ -37,21 +35,20 @@
 		$Errors['ErrorFolderIn'] = true;
 	}
-	if ($silentORNOT) {
-		rrmdir($DIRsortie); // Si mode silencieux
-		mkdir($DIRsortie); // vidage automatique du dossier de sortie
-	} else if (!is_dir_empty($DIRsortie)) {
+	if (!is_dir_empty($DIRsortie) AND $silentORNOT == 'block') {
 		$Errors['ErrorFolderOut'] = true;
 	}
+	if (!file_exists('files\nconvert.exe')) {
+		$Errors['ErrorNconvert'] = true;
+	}
 }
+
 
 
 ### ERREURS ###
 if (isset($Errors)) {
-	$i=0;
 	foreach ($Errors as $key => $null) {
-		// Dégueulasse les ternaires à la suite ! mais j'aime ça
-		echo '<div class="error">'.l10n($key).' '.(($i==0)?'<a href="index.php">'.l10n('Back').'</a> '.(($key!='ErrorFile')?'<a href="setup.php">'.l10n('Config').'</a></div>':'</div>'):'</div>');
-		$i++;
-	}
+		echo '<div class="error">'.l10n($key).'</div>';
+	}
+	echo '<div class="link"><a href="index.php">&raquo; '.l10n('Back').'</a> <a href="setup.php">&raquo; '.l10n('Config').'</a></div>';
 }
 
@@ -60,5 +57,11 @@
 ### EXECUTION ###
 if (isset($_GET['Process']) AND !isset($Errors)) {
-
+	// Si mode silencieux vidage automatique du dossier de sortie
+	if ($silentORNOT == 'erase') {
+		rrmdir($DIRsortie);
+		mkdir($DIRsortie);
+	}
+
+	
 	### Supprimer les caractères spéciaux - dossiers & fichiers ###
 	// Les caractères '%' et '$' sont systématiquement échappés, ca génère des bugs dans les noms de fichiers
@@ -84,5 +87,5 @@
 
 
-	### Copyright ###
+	### Copyright & Options générales des conversion ###
 	$copyright = utf8_decode($copyright);
 	
@@ -98,4 +101,6 @@
 		$copyNormal = null;
 	}
+	
+	$convOptions = '-ratio -rtype lanczos -rflag decr';
 
 
@@ -109,23 +114,34 @@
 
 	### Processus principal ###
-
 	// Tableau avec les fichiers source
 	$FilesSource = array();
 	recursive_readdir($DIRsource, 'FilesSource');
+	
 	// Tableau avec les fichiers de sortie
 	$FilesSortie = str_replace($DIRsource, $DIRsortie, $FilesSource);
 
+	// Boucle sur tous les fichiers
 	for ($i=0; $i<count($FilesSource); $i++) {
 		// Découpe le nom de fichier : dossier/fichier
 		preg_match('#(.*)/(.*)$#', $FilesSortie[$i], $matches);
-		# matches[1] = dossier sortie
-		# matches[2] = fichier.ext
+		$FileFolder = $matches[1];
+		$FileName = $matches[2];
 			
 		// Crée les sous-dossiers de sortie & 'pwg_high' & 'thumbnail'
-		if (!file_exists($matches[1].'/pwg_high') AND $DIRhighORNOT) {
-			mkdir($matches[1].'/pwg_high', 0777, true);
-		}
-		if (!file_exists($matches[1].'/thumbnail')) {
-			mkdir($matches[1].'/thumbnail', 0777, true);
+		if (!file_exists($FileFolder.'/pwg_high') AND $DIRhighORNOT) {
+			mkdir($FileFolder.'/pwg_high', 0777, true);
+		}
+		if (!file_exists($FileFolder.'/thumbnail')) {
+			mkdir($FileFolder.'/thumbnail', 0777, true);
+		}
+		
+		// Informations sur le fichier
+		exec('files\nconvert.exe -info "'.$FilesSource[$i].'"', $FileInfos);
+		for ($m=0; $m<=5; $m++) {
+			unset($FileInfos[$m]);
+		}
+		foreach ($FileInfos as $key) {
+			$a = explode(':', $key);
+			$FileInfos[trim($a[0])] = trim($a[1]);
 		}
 			
@@ -139,35 +155,35 @@
 		// Compresse les fichiers dans le dossier de sortie
 		if (!isset($BlockNormal)) { 
-			exec('nconvert.exe -q '.$Qnormal.' -out jpeg -o "'.$matches[1].'/'.$matches[2].'" -dpi 72 -ratio -rtype lanczos -resize '.$DIMnormal.' '.$DIMnormal.' '.$copyNormal.' "'.$FilesSource[$i].'"');
+			exec('files\nconvert.exe -q '.$Qnormal.' -out jpeg -o "'.$FileFolder.'/'.$FileName.'" -dpi 72 '.$convOptions.' -resize '.$DIMnormal.' '.$DIMnormal.' '.$copyNormal.' "'.$FilesSource[$i].'"');
 		}
 		if (!isset($BlockThumbnail)) { 
-			exec('nconvert.exe -q '.$Qthumbnail.' -out jpeg -o "'.$matches[1].'/thumbnail/'.$prefixe_mini.$matches[2].'" -dpi 72 -ratio -rtype lanczos -rflag decr -resize '.$DIMthumbnail.' '.$DIMthumbnail.' -rmeta -rexifthumb 	"'.$FilesSource[$i].'"');
-		}
-		if ($DIRhighORNOT AND !isset($BlockHigh)) {
+			exec('files\nconvert.exe -q '.$Qthumbnail.' -out jpeg -o "'.$FileFolder.'/thumbnail/'.$prefixe_mini.$FileName.'" -dpi 72 '.$convOptions.'-resize '.$DIMthumbnail.' '.$DIMthumbnail.' -rmeta -rexifthumb 	"'.$FilesSource[$i].'"');
+		}
+		if (!isset($BlockHigh) AND $DIRhighORNOT) {
 			if ($DIMhdORNOT) {
-				exec('nconvert.exe -q '.$Qhd.' -out jpeg -o "'.$matches[1].'/pwg_high/'.$matches[2].'" -dpi '.$DPI.' -ratio -rtype lanczos -rflag decr -resize '.$DIMhd.' '.$DIMhd.' '.$copyHD.' "'.$FilesSource[$i].'"');
+				exec('files\nconvert.exe -q '.$Qhd.' -out jpeg -o "'.$FileFolder.'/pwg_high/'.$FileName.'" -dpi '.$DPI.' '.$convOptions.' -resize '.$DIMhd.' '.$DIMhd.' '.$copyHD.' "'.$FilesSource[$i].'"');
 			} else {
-				copy($FilesSource[$i], $matches[1].'/pwg_high/'.$matches[2]);
+				copy($FilesSource[$i], $FileFolder.'/pwg_high/'.$FileName);
 			}
 		}
 		
 		// Réinitialise les bloqueurs
+		unset($FileInfos);
 		unset($BlockNormal);
 		unset($BlockThumbnail);
 		unset($BlockHigh);
-
-	}
-
-	if (!$silentORNOT) {
-		echo '<div class="files">
-			<h2>'.l10n('Source files').'</h2>
-			<ul>';
-				foreach ($FilesSource as $value) {
-					echo '<li>'.$value.'</li>';
-				}
-			echo '</ul>
-			<i>'.l10n('%d files', count($FilesSource)).'</i>
-		</div>';
-	}
+	}
+
+	
+	### Affichage des fichiers traités ###
+	echo '<div class="files">
+		<h2>'.l10n('Source files').'</h2>
+		<ul>';
+			foreach ($FilesSource as $value) {
+				echo '<li>'.$value.'</li>';
+			}
+		echo '</ul>
+		<i>'.l10n('%d files', count($FilesSource)).'</i>
+	</div>';
 
 	unset($FilesSource);
@@ -176,5 +192,4 @@
 
 	### Supprime les dossiers vides et copie les fichiers index.php ###
-	// Tableau avec les dossiers de sortie
 	$DirsSortie = array();
 	recursive_readdir($DIRsortie, 'DirsSortie', true);
@@ -199,13 +214,24 @@
 
 
-	echo '<div class="finish">'.l10n('Finish %d seconds', intval((microtime(true)-$TIME_START))).' <a href="index.php">'.l10n('Back').'</a> <a href="setup.php">'.l10n('Config').'</a></div>';
-
-	
-	
+	### Message final ###
+	echo '<div class="finish">'.l10n('Finish %d seconds', intval((microtime(true)-$TIME_START))).'</div>
+	<div class="link"><a href="index.php">&raquo; '.l10n('Back').'</a> <a href="setup.php">&raquo; '.l10n('Config').'</a></div>';
+
+	
+	
+### READY ###
 } else if (!isset($Errors)) {
-	echo '<div class="finish">'.l10n('Ready').' <a href="index.php?Process=true">'.l10n('Launch').'</a> <a href="setup.php">'.l10n('Config').'</a></div>';
+	echo '<div class="finish">'.l10n('Ready').' <span id="loader" style="display:none;float:right;margin:-8px 0 -10px 0;"><img src="files/loader.gif" /></span></div>
+	<div class="link"><a href="index.php?Process=true" onClick="document.getElementById(\'loader\').style.display=\'block\';">&raquo; '.l10n('Launch').'</a> <a href="setup.php">&raquo; '.l10n('Config').'</a></div>';
 }
 
-echo '</body>
+
+
+### FIN ###
+echo '<div class="footer">
+	2010 - <a href="http://www.strangeplanet.fr">Damien Sorel</a> - <a href="http://fr.piwigo.org/forum/viewtopic.php?id=19117">Forum</a>
+</div>
+
+</body>
 </html>';
 ?>
Index: /extensions/PHP_Optimisateur/language/en/en.php
===================================================================
--- /extensions/PHP_Optimisateur/language/en/en.php	(revision 8194)
+++ /extensions/PHP_Optimisateur/language/en/en.php	(revision 8195)
@@ -2,10 +2,11 @@
 /***************************************\
 |			PHP OPTIMISATEUR			|
-|			   Version 1.1				|
+|			   Version 1.2				|
 \***************************************/
 
 $Lang['ErrorFile'] = "Fatal error : Configuration file missing.";
 $Lang['ErrorFolderIn'] = "Fatal error : Source folder empty.";
-$Lang['ErrorFolderOut'] = "Fatal error : Exite folder not empty.";
+$Lang['ErrorFolderOut'] = "Fatal error : Exit folder not empty.";
+$Lang['ErrorNconvert'] = "The program nconvert.exe is unavailable.";
 $Lang['Source files'] = "Files";
 $Lang['%d files'] = "%d files";
@@ -20,5 +21,5 @@
 $Lang['FolderOut'] = "Exit folder";
 $Lang['Options'] = "Options";
-$Lang['silentORNOT'] = "Silent mode";
+$Lang['silentORNOT'] = "If exit folder not empty";
 $Lang['DIRhighORNOT'] = "Create high-definition folders";
 $Lang['DIMhdORNOT'] = "Resize HD pictures";
@@ -55,4 +56,10 @@
 $Lang['left'] = "left";
 $Lang['right'] = "right";
-$Lang[''] = "";
+$Lang['erase'] = "Erase";
+$Lang['pass'] = "Continue";
+$Lang['block'] = "Block";
+$Lang['New !'] = " New !";
+$Lang['Missing !'] = " Missing !";
+$Lang['Reset'] = "Reset";
+$Lang['Valid'] = "Valid";
 ?>
Index: /extensions/PHP_Optimisateur/language/fr/fr.php
===================================================================
--- /extensions/PHP_Optimisateur/language/fr/fr.php	(revision 8194)
+++ /extensions/PHP_Optimisateur/language/fr/fr.php	(revision 8195)
@@ -2,5 +2,5 @@
 /***************************************\
 |			PHP OPTIMISATEUR			|
-|			   Version 1.1				|
+|			   Version 1.2				|
 \***************************************/
 
@@ -8,4 +8,5 @@
 $Lang['ErrorFolderIn'] = "Erreur fatale : Dossier source vide.";
 $Lang['ErrorFolderOut'] = "Erreur fatale : Dossier de sortie non vide.";
+$Lang['ErrorNconvert'] = "Le programme nconvert.exe est introuvable.";
 $Lang['Source files'] = "Fichiers";
 $Lang['%d files'] = "%d fichiers";
@@ -20,5 +21,5 @@
 $Lang['FolderOut'] = "Répertoire de sortie";
 $Lang['Options'] = "Options";
-$Lang['silentORNOT'] = "Mode silencieux";
+$Lang['silentORNOT'] = "Si dossier de sortie non vide";
 $Lang['DIRhighORNOT'] = "Créer le dossier haute définition";
 $Lang['DIMhdORNOT'] = "Redimensionner les images HD";
@@ -55,4 +56,10 @@
 $Lang['left'] = "gauche";
 $Lang['right'] = "droite";
-$Lang[''] = "";
+$Lang['erase'] = "Effacer";
+$Lang['pass'] = "Continuer";
+$Lang['block'] = "Bloquer";
+$Lang['New !'] = " Nouveau !";
+$Lang['Missing !'] = " Manquant !";
+$Lang['Reset'] = "Réinitialiser";
+$Lang['Valid'] = "Valider";
 ?>
Index: /extensions/PHP_Optimisateur/plugins/convert_pan.php
===================================================================
--- /extensions/PHP_Optimisateur/plugins/convert_pan.php	(revision 8194)
+++ /extensions/PHP_Optimisateur/plugins/convert_pan.php	(revision 8195)
@@ -2,5 +2,5 @@
 /***************************************\
 |			PHP OPTIMISATEUR			|
-|			Plugin ConvertPan			|
+|		  Plugin ConvertPan 1.1			|
 \***************************************/
 
@@ -12,10 +12,19 @@
 $DIMthumbnailV = $DIMthumbnail/$PluginsProcess['convert_pan']['RatioPanThumb']; // Taille verticale des miniatures
 
-if (strpos($matches[2], $NAMEpanorama) !== false) {
-	exec('nconvert.exe -q '.$Qnormal.' -out jpeg -o "'.$matches[1].'/'.$matches[2].'" -dpi 72 -ratio -rtype lanczos -resize 0 '.$DIMpanorama.' '.$copyNormal.' "'.$FilesSource[$i].'"');
-	exec('nconvert.exe -q '.$Qthumbnail.' -out jpeg -o "'.$matches[1].'/thumbnail/'.$prefixe_mini.$matches[2].'" -dpi 72 -ratio -rtype lanczos -rflag decr -resize 0 '.$DIMthumbnailV.' -crop 0 0 '.$DIMthumbnail.' '.$DIMthumbnailV.' -rmeta -rexifthumb "'.$FilesSource[$i].'"');
+if (strpos($FileName, $NAMEpanorama) !== false) {
 
-	$BlockNormal = true;
-	$BlockThumbnail = true;
+	// on prend la miniature au milieu du panorama
+	$tmp_x = $FileInfos['Width'] * $DIMthumbnailV / $FileInfos['Height'];
+	$offset_x = ($tmp_x - $DIMthumbnail) / 2;
+
+	if (!isset($BlockNormal)) { 
+		exec('files\nconvert.exe -q '.$Qnormal.' -out jpeg -o "'.$FileFolder.'/'.$FileName.'" -dpi 72 '.$convOptions.' -resize 0 '.$DIMpanorama.' '.$copyNormal.' "'.$FilesSource[$i].'"');
+		$BlockNormal = true;
+	}
+	
+	if (!isset($BlockThumbnail)) { 
+		exec('files\nconvert.exe -q '.$Qthumbnail.' -out jpeg -o "'.$FileFolder.'/thumbnail/'.$prefixe_mini.$FileName.'" -dpi 72 '.$convOptions.' -resize 0 '.$DIMthumbnailV.' -crop '.$offset_x.' 0 '.$DIMthumbnail.' '.$DIMthumbnailV.' -rmeta -rexifthumb "'.$FilesSource[$i].'"');
+		$BlockThumbnail = true;
+	}
 }
 ?>
Index: /extensions/PHP_Optimisateur/plugins/create_custom_thumbs.php
===================================================================
--- /extensions/PHP_Optimisateur/plugins/create_custom_thumbs.php	(revision 8195)
+++ /extensions/PHP_Optimisateur/plugins/create_custom_thumbs.php	(revision 8195)
@@ -0,0 +1,33 @@
+<?php
+/***************************************\
+|			PHP OPTIMISATEUR			|
+|	  Plugin CreateCustomThumbs 1.1		|
+\***************************************/
+
+## Crée des miniatures de taille fixe
+## Dépend de la valeur de $DIMthumbnail
+
+// CreateCustomThumbs à la priorité sur ConvertPan
+if (isset($PluginsProcess['convert_pan']) OR !isset($BlockThumbnail)) { 
+	$DIMthumbnailV = $PluginsProcess['create_custom_thumbs']['DIMthumbnailV']; // Hauteur de l'image
+	$max = max($DIMthumbnail, $DIMthumbnailV);
+
+	// on prend la miniature au milieu de l'image
+	if ($FileInfos['Height'] >= $FileInfos['Width']) {
+		$resize_param = $max.' 0';
+		$tmp_x = $max;
+		$tmp_y = $max * $FileInfos['Height'] / $FileInfos['Width'];
+	} else {
+		$resize_param = '0 '.$max;
+		$tmp_x = $max * $FileInfos['Width'] / $FileInfos['Height'];
+		$tmp_y = $max;
+	}
+	
+	$offset_x = ($tmp_x - $DIMthumbnail) / 2;
+	$offset_y = ($tmp_y - $DIMthumbnailV) / 2;
+	
+	exec('files\nconvert.exe -overwrite -q '.$Qthumbnail.' -out jpeg -o "'.$FileFolder.'/thumbnail/'.$prefixe_mini.$FileName.'" -dpi 72 '.$convOptions.' -resize '.$resize_param.' -crop '.$offset_x.' '.$offset_y.' '.$DIMthumbnail.' '.$DIMthumbnailV.' -rmeta -rexifthumb 	"'.$FilesSource[$i].'"');
+	
+	$BlockThumbnail = true;
+}
+?>
Index: /extensions/PHP_Optimisateur/plugins/create_custom_thumbs.xml
===================================================================
--- /extensions/PHP_Optimisateur/plugins/create_custom_thumbs.xml	(revision 8195)
+++ /extensions/PHP_Optimisateur/plugins/create_custom_thumbs.xml	(revision 8195)
@@ -0,0 +1,5 @@
+<create_custom_thumbs>
+	<mode>PluginsProcess</mode>
+	<active>true</active>
+	<DIMthumbnailV>120</DIMthumbnailV>
+</create_custom_thumbs>
Index: /extensions/PHP_Optimisateur/plugins/create_folders_alpha.php
===================================================================
--- /extensions/PHP_Optimisateur/plugins/create_folders_alpha.php	(revision 8194)
+++ /extensions/PHP_Optimisateur/plugins/create_folders_alpha.php	(revision 8195)
@@ -2,5 +2,5 @@
 /***************************************\
 |			PHP OPTIMISATEUR			|
-|		Plugin CretaFoldersAlpha		|
+|	  Plugin CreateFoldersAlpha 1.0		|
 \***************************************/
 
Index: /extensions/PHP_Optimisateur/plugins/front2back_support.php
===================================================================
--- /extensions/PHP_Optimisateur/plugins/front2back_support.php	(revision 8194)
+++ /extensions/PHP_Optimisateur/plugins/front2back_support.php	(revision 8195)
@@ -2,5 +2,5 @@
 /***************************************\
 |			PHP OPTIMISATEUR			|
-|		Plugin Front2Back Support		|
+|	  Plugin Front2Back Support 1.1		|
 \***************************************/
 
@@ -12,23 +12,22 @@
 $MOVEverso = $PluginsProcess['front2back_support']['MOVEverso']; // Déplacer les images originales dans un sous dosssier 'verso'
 
-if (strpos($matches[2], $NAMEverso) !== false) {
-	$matches[3] = str_replace($NAMEverso, '', $matches[2]);
-	# matches[3] = fichier sans verso
+if (strpos($FileName, $NAMEverso) !== false) {
+	$FileNameClean = str_replace($NAMEverso, '', $FileName);
 	
 	// Image normale
-	if (!file_exists($matches[1].'/thumbnail/verso')) {
-		mkdir($matches[1].'/thumbnail/verso');
+	if (!file_exists($FileFolder.'/thumbnail/verso')) {
+		mkdir($FileFolder.'/thumbnail/verso');
 	}
-	exec('nconvert.exe -q '.$Qnormal.' -out jpeg -o "'.$matches[1].'/thumbnail/verso/'.$matches[3].'" -dpi 72 -ratio -rtype lanczos -resize '.$DIMnormal.' '.$DIMnormal.' '.$copyNormal.' "'.$FilesSource[$i].'"');
+	exec('files\nconvert.exe -q '.$Qnormal.' -out jpeg -o "'.$FileFolder.'/thumbnail/verso/'.$FileNameClean.'" -dpi 72 '.$convOptions.' -resize '.$DIMnormal.' '.$DIMnormal.' '.$copyNormal.' "'.$FilesSource[$i].'"');
 	
 	// Image hd
 	if ($DIRhighORNOT) {
-		if (!file_exists($matches[1].'/pwg_high/verso')) {
-			mkdir($matches[1].'/pwg_high/verso');
+		if (!file_exists($FileFolder.'/pwg_high/verso')) {
+			mkdir($FileFolder.'/pwg_high/verso');
 		}
 		if ($DIMhdORNOT) {
-			exec('nconvert.exe -q '.$Qhd.' -out jpeg -o "'.$matches[1].'/pwg_high/verso/'.$matches[3].'" -dpi '.$DPI.' -ratio -rtype lanczos -rflag decr -resize '.$DIMhd.' '.$DIMhd.' '.$copyHD.' "'.$FilesSource[$i].'"');
+			exec('files\nconvert.exe -q '.$Qhd.' -out jpeg -o "'.$FileFolder.'/pwg_high/verso/'.$FileNameClean.'" -dpi '.$DPI.' '.$convOptions.' -resize '.$DIMhd.' '.$DIMhd.' '.$copyHD.' "'.$FilesSource[$i].'"');
 		} else {
-			copy($FilesSource[$i], $matches[1].'/pwg_high/verso/'.$matches[3]);
+			copy($FilesSource[$i], $FileFolder.'/pwg_high/verso/'.$FileNameClean);
 		}
 	}
@@ -36,10 +35,9 @@
 	// Déplacement de l'image originale
 	if ($MOVEverso) {
-		$matches[4] = str_replace(substr($DIRsortie,0,-1), substr($DIRsource,0,-1), $matches[1]);
-		# matches[4] = dossier source
-		if (!file_exists($matches[4].'/verso')) {
-			mkdir($matches[4].'/verso', 0777, true);
+		$FileFolderSource = str_replace(substr($DIRsortie,0,-1), substr($DIRsource,0,-1), $FileFolder);
+		if (!file_exists($FileFolderSource.'/verso')) {
+			mkdir($FileFolderSource.'/verso', 0777, true);
 		}
-		rename($matches[4].'/'.$matches[2], $matches[4].'/verso/'.$matches[3]);
+		rename($FileFolderSource.'/'.$FileName, $FileFolderSource.'/verso/'.$FileNameClean);
 	}
 	
Index: /extensions/PHP_Optimisateur/plugins/watermark.php
===================================================================
--- /extensions/PHP_Optimisateur/plugins/watermark.php	(revision 8194)
+++ /extensions/PHP_Optimisateur/plugins/watermark.php	(revision 8195)
@@ -2,5 +2,5 @@
 /***************************************\
 |			PHP OPTIMISATEUR			|
-|			Plugin Watermark			|
+|		  Plugin Watermark 1.1			|
 \***************************************/
 
Index: /extensions/PHP_Optimisateur/setup.php
===================================================================
--- /extensions/PHP_Optimisateur/setup.php	(revision 8194)
+++ /extensions/PHP_Optimisateur/setup.php	(revision 8195)
@@ -2,17 +2,28 @@
 /***************************************\
 |			PHP OPTIMISATEUR			|
-|			   Version 1.1				|
+|			   Version 1.2				|
 \***************************************/
 
 include('files/functions.php');
 
-### Création de nouveau fichier de configuration ###
+
+### NOUVELLE CONFIGURATION ###
 if (isset($_POST['DIRsource'])) {
-	// Quelques traitements avant d'enregistrer
+	// Quelques traitements
 	$_POST['copyCOLOR'] = implode(' ', $_POST['copyCOLOR']);
 	$_POST['copyPOS'] = implode('-', $_POST['copyPOS']);
-	if(!isset($_POST['PluginsBefore'])) $_POST['PluginsBefore'] = null;
-	if(!isset($_POST['PluginsProcess'])) $_POST['PluginsProcess'] = null;
-	if(!isset($_POST['PluginsAfter'])) $_POST['PluginsAfter'] = null;
+	
+	// Plugins : ensembles existants même si vides & supprime les plugins manquants
+	foreach (array('PluginsBefore','PluginsProcess','PluginsAfter') as $mode) {
+		if (!isset($_POST[$mode])) {
+			$_POST[$mode] = null;
+		} else {
+			foreach ($_POST[$mode] as $name => $config) {
+				if (isset($config['delete'])) unset($_POST[$mode][$name]);
+			}
+		}
+	}
+	
+	// Ajoute les / en fin d'URI
 	if (!preg_match('#(.*)/$#', $_POST['DIRsource'])) $_POST['DIRsource'] .= '/';
 	if (!preg_match('#(.*)/$#', $_POST['DIRsortie'])) $_POST['DIRsortie'] .= '/';
@@ -30,7 +41,10 @@
 include('files/header.php');
 
-// Fichier de configuration
+
+### CONFIGURATION ###
 if (!file_exists('config.xml')) {
 	$Errors['ErrorFile'] = true;
+} else {
+	extract(load_config());
 }
 
@@ -39,10 +53,8 @@
 ### ERREURS ###
 if (isset($Errors)) {
-	$i=0;
 	foreach ($Errors as $key => $null) {
-		// Dégueulasse les ternaires à la suite ! mais j'aime ça
-		echo '<div class="error">'.l10n($key).' '.(($i==0)?'<a href="setup.php">'.l10n('Back').'</a></div>':'</div>');
-		$i++;
+		echo '<div class="error">'.l10n($key).'</div>';
 	}
+	echo '<div class="link"><a href="index.php">'.l10n('Back').'</a> <a href="setup.php">'.l10n('Config').'</a></div>';
 }
 
@@ -51,15 +63,7 @@
 ### EXECUTION ###
 if (!isset($Errors)) {
-	// Configuration
-	extract(load_config());
-
-	$copyCOLOR = explode(' ', $copyCOLOR);
-	$copyPOS = explode('-', $copyPOS);
-
-
 	### Gestion des nouveaux plugins ###
 	// Ajoute la configuration des plugins non-installés aux tableaux, il faut valider le formulaire pour les installer
 	$Plugins = glob('plugins/*.xml');
-	$NewPlugins = array();
 
 	foreach ($Plugins as $plugin) {
@@ -76,9 +80,24 @@
 			${$plugin_mode}[$plugin_name] = $plugin;
 			$NewPlugins[$plugin_name] = true;
+		} else if (!file_exists('plugins/'.$plugin_name.'.php')) {
+			$MissingPlugins[$plugin_name] = true;
 		}
 	}
+	
+	
+	### Gestion des plugins manquants ###
+	foreach (array('PluginsBefore','PluginsProcess','PluginsAfter') as $mode) {
+		foreach (${$mode} as $plugin_name => $config) {
+			if (!file_exists('plugins/'.$plugin_name.'.php')) {
+				$MissingPlugins[$plugin_name] = true;
+			}
+		}
+	}
 
 
 	### Formulaire ###
+	$copyCOLOR = explode(' ', $copyCOLOR);
+	$copyPOS = explode('-', $copyPOS);
+	
 	echo '
 	<script type="text/javascript">
@@ -91,193 +110,215 @@
 		
 	<form action="setup.php" method="post">
-	<div class="config">
-		<h2>'.l10n('Configuration').'</h2>
-		<ul>
-			<li>
-				<span class="title">'.l10n('Folders').'</span>
-				<table>
-					<tr>
-						<td><b>'.l10n('FolderIn').' :</b></td>
-						<td><input type="text" name="DIRsource" value="'.$DIRsource.'"/></td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('FolderOut').' :</b></td>
-						<td><input type="text" name="DIRsortie" value="'.$DIRsortie.'"/></td>
-					</tr>
-				</table>
-			</li>
-			<li>
-				<span class="title">'.l10n('Options').'</span>
-				<table>
-					<tr>
-						<td><b>'.l10n('silentORNOT').' :</b></td>
-						<td><input type="radio" name="silentORNOT" value="true" '.(($silentORNOT)?'checked':'').'/> '.l10n('yes').' <input type="radio" name="silentORNOT" value="false" '.((!$silentORNOT)?'checked':'').'/> '.l10n('no').'</td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('DIRhighORNOT').' :</b></td>
-						<td><input type="radio" name="DIRhighORNOT" value="true" '.(($DIRhighORNOT)?'checked':'').'/> '.l10n('yes').' <input type="radio" name="DIRhighORNOT" value="false" '.((!$DIRhighORNOT)?'checked':'').'/> '.l10n('no').'</td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('DIMhdORNOT').' :</b></td>
-						<td><input type="radio" name="DIMhdORNOT" value="true" '.(($DIMhdORNOT)?'checked':'').'/> '.l10n('yes').' <input type="radio" name="DIMhdORNOT" value="false" '.((!$DIMhdORNOT)?'checked':'').'/> '.l10n('no').'</td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('renameORNOT').' :</b></td>
-						<td><input type="radio" name="renameORNOT" value="true" '.(($renameORNOT)?'checked':'').'/> '.l10n('yes').' <input type="radio" name="renameORNOT" value="false" '.((!$renameORNOT)?'checked':'').'/> '.l10n('no').'</td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('indexORNOT').' :</b></td>
-						<td><input type="radio" name="indexORNOT" value="true" '.(($indexORNOT)?'checked':'').'/> '.l10n('yes').' <input type="radio" name="indexORNOT" value="false" '.((!$indexORNOT)?'checked':'').'/> '.l10n('no').'</td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('prefixe_mini').' :</b></td>
-						<td><input type="text" name="prefixe_mini" value="'.$prefixe_mini.'" size="8"/></td>
-					</tr>
-				</table>
-			</li>
-			<li>
-				<span class="title">'.l10n('Sizes and quality').'</span>
-				<table>
-					<tr>
-						<td><b>'.l10n('DIMhd').' :</b></td>
-						<td><input type="text" name="DIMhd" value="'.$DIMhd.'" size="4"/></td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('DIMnormal').' :</b></td>
-						<td><input type="text" name="DIMnormal" value="'.$DIMnormal.'" size="3"/></td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('DIMthumbnail').' :</b></td>
-						<td><input type="text" name="DIMthumbnail" value="'.$DIMthumbnail.'" size="3"/></td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('Qhd').' :</b></td>
-						<td><input type="text" name="Qhd" value="'.$Qhd.'" size="3"/></td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('Qnormal').' :</b></td>
-						<td><input type="text" name="Qnormal" value="'.$Qnormal.'" size="3"/></td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('Qthumbnail').' :</b></td>
-						<td><input type="text" name="Qthumbnail" value="'.$Qthumbnail.'" size="3"/></td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('DPI').' :</b></td>
-						<td><input type="text" name="DPI" value="'.$DPI.'" size="3"/></td>
-					</tr>
-				</table>
-			</li>
-			<li>
-				<span class="title">'.l10n('Copyright').'</span>
-				<table>
-					<tr>
-						<td><b>'.l10n('Content').' :</b></td>
-						<td><input type="text" name="copyright" value="'.$copyright.'"/></td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('copyONhd').' :</b></td>
-						<td><input type="radio" name="copyONhd" value="true" '.(($copyONhd)?'checked':'').'/> '.l10n('yes').' <input type="radio" name="copyONhd" value="false" '.((!$copyONhd)?'checked':'').'/> '.l10n('no').'</td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('copyONnormal').' :</b></td>
-						<td><input type="radio" name="copyONnormal" value="true" '.(($copyONnormal)?'checked':'').'/> '.l10n('yes').' <input type="radio" name="copyONnormal" value="false" '.((!$copyONnormal)?'checked':'').'/> '.l10n('no').'</td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('copyPOS%s', l10n('copyPOSv')).' :</b></td>
-						<td><input type="radio" name="copyPOS[0]" value="top" '.(($copyPOS[0]=='top')?'checked':'').'/> '.l10n('top').' <input type="radio" name="copyPOS[0]" value="center" '.(($copyPOS[0]=='center')?'checked':'').'/> '.l10n('center').' <input type="radio" name="copyPOS[0]" value="bottom" '.(($copyPOS[0]=='bottom')?'checked':'').'/> '.l10n('bottom').'</td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('copyPOS%s', l10n('copyPOSh')).' :</b></td>
-						<td><input type="radio" name="copyPOS[1]" value="left" '.(($copyPOS[1]=='left')?'checked':'').'/> '.l10n('left').' <input type="radio" name="copyPOS[1]" value="center" '.(($copyPOS[1]=='center')?'checked':'').'/> '.l10n('center').' <input type="radio" name="copyPOS[1]" value="right" '.(($copyPOS[1]=='right')?'checked':'').'/> '.l10n('right').'</td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('copySIZE').' :</b></td>
-						<td><input type="text" name="copySIZE" value="'.$copySIZE.'" size="5"/></td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('copyCOLOR').' :</b></td>
-						<td>
-							<input type="text" name="copyCOLOR[0]" value="'.$copyCOLOR[0].'" size="3" onFocus="this.select();" onKeyUp="suivant(this,\'copyCOLOR[1]\', 3)"/>
-							<input type="text" name="copyCOLOR[1]" value="'.$copyCOLOR[1].'" size="3" onFocus="this.select();" onKeyUp="suivant(this,\'copyCOLOR[2]\', 3)"/>
-							<input type="text" name="copyCOLOR[2]" value="'.$copyCOLOR[2].'" size="3" onFocus="this.select();" />
-						</td>
-					</tr>
-					<tr>
-						<td><b>'.l10n('copyFONT').' :</b></td>
-						<td><input type="text" name="copyFONT" value="'.$copyFONT.'"/></td>
-					</tr>
-				</table>
-			</li>
-		</ul>
-	</div>
-
-	<div class="config">
-		<h2>'.l10n('Plugins').'</h2>
-		<ul>
-			<li>
-				<span class="title">'.l10n('PluginsBefore').'</span>
-				<ul>';
-					foreach ($PluginsBefore as $name => $config) {
-						echo '<li>
-							<b class="'.((isset($NewPlugins[$name]))?'new':'').'">'.$name.' :</b>
-							<table>';
-								foreach ($config as $key => $value) {
-									echo '<tr>
-										<td>'.$key.' :</td>
-										<td><input type="text" name="PluginsBefore['.$name.']['.$key.']" value="'.bool_to_string($value,1).'" size="7"/></td>
-									</tr>';
-								}
-							echo '</table>
-						</li>';
-					}
-				echo '</ul>
-			</li>
-			<li>
-				<span class="title">'.l10n('PluginsProcess').'</span>
-				<ul>';
-					foreach ($PluginsProcess as $name => $config) {
-						echo '<li>
-							<b class="'.((isset($NewPlugins[$name]))?'new':'').'">'.$name.' :</b>
-							<table>';
-								foreach ($config as $key => $value) {
-									echo '<tr>
-										<td>'.$key.' :</td>
-										<td><input type="text" name="PluginsProcess['.$name.']['.$key.']" value="'.bool_to_string($value,1).'" size="7"/></td>
-									</tr>';
-								}
-							echo '</table>
-						</li>';
-					}
-				echo '</ul>
-			</li>
-			<li>
-				<span class="title">'.l10n('PluginsAfter').'</span>
-				<ul>';
-					foreach ($PluginsAfter as $name => $config) {
-						echo '<li>
-							<b class="'.((isset($NewPlugins[$name]))?'new':'').'">'.$name.' :</b>
-							<table>';
-								foreach ($config as $key => $value) {
-									echo '<tr>
-										<td>'.$key.' :</td>
-										<td><input type="text" name="PluginsAfter['.$name.']['.$key.']" value="'.bool_to_string($value,1).'" size="7"/></td>
-									</tr>';
-								}
-							echo '</table>
-						</li>';
-					}
-				echo '</ul>
-			</li>
-		</ul>
-	</div>
-
-	<div class="finish">	
-		<input type="submit"/> <input type="reset"/> <a href="index.php">'.l10n('Back').'</a>
-	</div>
+		<div class="config">
+			<h2>'.l10n('Configuration').'</h2>
+			<ul>
+				<li>
+					<span class="title">'.l10n('Folders').'</span>
+					<table>
+						<tr>
+							<td><b>'.l10n('FolderIn').' :</b></td>
+							<td><input type="text" name="DIRsource" value="'.$DIRsource.'"/></td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('FolderOut').' :</b></td>
+							<td><input type="text" name="DIRsortie" value="'.$DIRsortie.'"/></td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<span class="title">'.l10n('Options').'</span>
+					<table>
+						<tr>
+							<td><b>'.l10n('silentORNOT').' :</b></td>
+							<td>
+								<input type="radio" name="silentORNOT" value="erase" '.(($silentORNOT=='erase')?'checked':'').'/> '.l10n('erase').'
+								<input type="radio" name="silentORNOT" value="block" '.(($silentORNOT=='block')?'checked':'').'/> '.l10n('block').'
+								<input type="radio" name="silentORNOT" value="pass" '.(($silentORNOT=='pass')?'checked':'').'/> '.l10n('pass').'
+							</td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('DIRhighORNOT').' :</b></td>
+							<td>
+								<input type="radio" name="DIRhighORNOT" value="true" '.(($DIRhighORNOT)?'checked':'').'/> '.l10n('yes').'
+								<input type="radio" name="DIRhighORNOT" value="false" '.((!$DIRhighORNOT)?'checked':'').'/> '.l10n('no').'
+							</td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('DIMhdORNOT').' :</b></td>
+							<td>
+								<input type="radio" name="DIMhdORNOT" value="true" '.(($DIMhdORNOT)?'checked':'').'/> '.l10n('yes').'
+								<input type="radio" name="DIMhdORNOT" value="false" '.((!$DIMhdORNOT)?'checked':'').'/> '.l10n('no').'
+							</td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('renameORNOT').' :</b></td>
+							<td>
+								<input type="radio" name="renameORNOT" value="true" '.(($renameORNOT)?'checked':'').'/> '.l10n('yes').'
+								<input type="radio" name="renameORNOT" value="false" '.((!$renameORNOT)?'checked':'').'/> '.l10n('no').'
+							</td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('indexORNOT').' :</b></td>
+							<td>
+								<input type="radio" name="indexORNOT" value="true" '.(($indexORNOT)?'checked':'').'/> '.l10n('yes').'
+								<input type="radio" name="indexORNOT" value="false" '.((!$indexORNOT)?'checked':'').'/> '.l10n('no').'
+							</td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('prefixe_mini').' :</b></td>
+							<td><input type="text" name="prefixe_mini" value="'.$prefixe_mini.'" size="8"/></td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<span class="title">'.l10n('Sizes and quality').'</span>
+					<table>
+						<tr>
+							<td><b>'.l10n('DIMhd').' :</b></td>
+							<td><input type="text" name="DIMhd" value="'.$DIMhd.'" size="4"/></td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('DIMnormal').' :</b></td>
+							<td><input type="text" name="DIMnormal" value="'.$DIMnormal.'" size="3"/></td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('DIMthumbnail').' :</b></td>
+							<td><input type="text" name="DIMthumbnail" value="'.$DIMthumbnail.'" size="3"/></td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('Qhd').' :</b></td>
+							<td><input type="text" name="Qhd" value="'.$Qhd.'" size="3"/></td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('Qnormal').' :</b></td>
+							<td><input type="text" name="Qnormal" value="'.$Qnormal.'" size="3"/></td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('Qthumbnail').' :</b></td>
+							<td><input type="text" name="Qthumbnail" value="'.$Qthumbnail.'" size="3"/></td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('DPI').' :</b></td>
+							<td><input type="text" name="DPI" value="'.$DPI.'" size="3"/></td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<span class="title">'.l10n('Copyright').'</span>
+					<table>
+						<tr>
+							<td><b>'.l10n('Content').' :</b></td>
+							<td><input type="text" name="copyright" value="'.$copyright.'"/></td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('copyONhd').' :</b></td>
+							<td>
+								<input type="radio" name="copyONhd" value="true" '.(($copyONhd)?'checked':'').'/> '.l10n('yes').'
+								<input type="radio" name="copyONhd" value="false" '.((!$copyONhd)?'checked':'').'/> '.l10n('no').'
+							</td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('copyONnormal').' :</b></td>
+							<td>
+								<input type="radio" name="copyONnormal" value="true" '.(($copyONnormal)?'checked':'').'/> '.l10n('yes').'
+								<input type="radio" name="copyONnormal" value="false" '.((!$copyONnormal)?'checked':'').'/> '.l10n('no').'
+							</td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('copyPOS%s', l10n('copyPOSv')).' :</b></td>
+							<td>
+								<input type="radio" name="copyPOS[0]" value="top" '.(($copyPOS[0]=='top')?'checked':'').'/> '.l10n('top').'
+								<input type="radio" name="copyPOS[0]" value="center" '.(($copyPOS[0]=='center')?'checked':'').'/> '.l10n('center').'
+								<input type="radio" name="copyPOS[0]" value="bottom" '.(($copyPOS[0]=='bottom')?'checked':'').'/> '.l10n('bottom').'
+							</td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('copyPOS%s', l10n('copyPOSh')).' :</b></td>
+							<td>
+								<input type="radio" name="copyPOS[1]" value="left" '.(($copyPOS[1]=='left')?'checked':'').'/> '.l10n('left').'
+								<input type="radio" name="copyPOS[1]" value="center" '.(($copyPOS[1]=='center')?'checked':'').'/> '.l10n('center').'
+								<input type="radio" name="copyPOS[1]" value="right" '.(($copyPOS[1]=='right')?'checked':'').'/> '.l10n('right').'
+							</td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('copySIZE').' :</b></td>
+							<td><input type="text" name="copySIZE" value="'.$copySIZE.'" size="5"/></td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('copyCOLOR').' :</b></td>
+							<td>
+								<input type="text" name="copyCOLOR[0]" value="'.$copyCOLOR[0].'" size="3" onFocus="this.select();" onKeyUp="suivant(this,\'copyCOLOR[1]\', 3)"/>
+								<input type="text" name="copyCOLOR[1]" value="'.$copyCOLOR[1].'" size="3" onFocus="this.select();" onKeyUp="suivant(this,\'copyCOLOR[2]\', 3)"/>
+								<input type="text" name="copyCOLOR[2]" value="'.$copyCOLOR[2].'" size="3" onFocus="this.select();" />
+							</td>
+						</tr>
+						<tr>
+							<td><b>'.l10n('copyFONT').' :</b></td>
+							<td><input type="text" name="copyFONT" value="'.$copyFONT.'"/></td>
+						</tr>
+					</table>
+				</li>
+			</ul>
+		</div>
+
+		<div class="config">
+			<h2>'.l10n('Plugins').'</h2>
+			<ul>';
+				// Affichage des plugins, un bloc par mode
+				foreach (array('PluginsBefore','PluginsProcess','PluginsAfter') as $mode) {
+					echo '<li>
+						<span class="title">'.l10n($mode).'</span>
+						<ul>';
+							// Un bloc par plugin
+							foreach (${$mode} as $name => $config) {
+								echo '<li>';
+									echo '<b>'.$name.' :</b>';
+									
+									// Cas spéciaux dans le titre(nouveau, manquant)
+									if (isset($NewPlugins[$name])) {
+										echo '<b class="new">'.l10n('New !').'</b>';
+									} else if (isset($MissingPlugins[$name])) {
+										echo '<b class="miss">'.l10n('Missing !').'</b>';
+									}
+									
+									echo '<table>';
+										// Si il est manquant on ne met que la checkbox de suppression
+										if (isset($MissingPlugins[$name])) {
+											echo '<tr>
+												<td>'.l10n('erase').' :</td>
+												<td><input type="checkbox" name="'.$mode.'['.$name.'][delete]" value="true" checked="checked"/></td>
+											</tr>';
+										// sinon on affiche sa configuration
+										} else {
+											foreach ($config as $key => $value) {
+												echo '<tr>
+													<td>'.$key.' :</td>
+													<td><input type="text" name="'.$mode.'['.$name.']['.$key.']" value="'.bool_to_string($value,1).'" size="'.strlen(bool_to_string($value,1)).'"/></td>
+												</tr>';
+											}
+										}
+									echo '</table>
+								</li>';
+							}
+						echo '</ul>
+					</li>';
+				}
+				
+			echo '</ul>
+		</div>
+
+		<div class="finish"><input type="submit" value="'.l10n('Valid').'"/> <input type="reset" value="'.l10n('Reset').'"/></div>
+		<div class="link"><a href="index.php">&raquo; '.l10n('Back').'</a></div>
 	</form>';
 }
 
-echo '</body>
+
+
+### FIN ###
+echo '<div class="footer">
+	2010 - <a href="http://www.strangeplanet.fr">Damien Sorel</a> - <a href="http://fr.piwigo.org/forum/viewtopic.php?id=19117">Forum</a>
+</div>
+
+</body>
 </html>';
 ?>
