diff --git a/arbre-img.php b/arbre-img.php index ccb4592..8c3b6b2 100644 --- a/arbre-img.php +++ b/arbre-img.php @@ -111,6 +111,49 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $_SESSION['success_message'] = "$deleteCount image(s) supprimée(s)."; } break; + + case 'move': + $images = $_POST['images'] ?? []; + $destinationPath = $_POST['destination_path'] ?? ''; + $moveCount = 0; + $errors = []; + + // Vérifier que le dossier de destination existe et est valide + if (!empty($destinationPath) && is_dir($destinationPath) && isSecurePath($destinationPath)) { + foreach ($images as $image) { + $sourcePath = $currentPath . '/' . basename($image); + $destPath = $destinationPath . '/' . basename($image); + + // Vérifier que le fichier source existe et est dans un chemin sécurisé + if (file_exists($sourcePath) && isSecurePath($sourcePath)) { + // Vérifier si un fichier du même nom existe déjà dans la destination + if (file_exists($destPath)) { + $info = pathinfo($destPath); + $i = 1; + while (file_exists($destPath)) { + $destPath = $destinationPath . '/' . $info['filename'] . '_' . $i . '.' . $info['extension']; + $i++; + } + } + + if (rename($sourcePath, $destPath)) { + $moveCount++; + } else { + $errors[] = "Erreur lors du déplacement de " . basename($image); + } + } + } + + if ($moveCount > 0) { + $_SESSION['success_message'] = "$moveCount image(s) déplacée(s) avec succès."; + } + if (!empty($errors)) { + $_SESSION['error_message'] = implode("\n", $errors); + } + } else { + $_SESSION['error_message'] = "Dossier de destination invalide."; + } + break; } } header('Location: arbre-img.php?path=' . urlencode($currentPath)); @@ -156,7 +199,7 @@ $images = array_map(function($img) {
-

+

+ ?> +
- + Retour
-
+ + + +
+
@@ -197,10 +366,10 @@ $images = array_map(function($img) {
-
- + +
-
+ class="image-checkbox" onchange="updateActionButtons()">
<?php echo htmlspecialchars($image); ?> + alt="" loading="lazy">
+ + + + + diff --git a/styles-admin.css b/styles-admin.css index 4674b11..0749a1f 100644 --- a/styles-admin.css +++ b/styles-admin.css @@ -118,6 +118,37 @@ body { background-color: #5a6268; } +.action-button-warning { + background-color: #ffc107; + color: #000; +} + +.action-button-warning:hover { + background-color: #e0a800; +} + +.form-select { + width: 100%; + padding: 0.8rem; + border: none; + border-radius: 0.5rem; + background-color: #2a2a2a; + color: white; + font-size: 1rem; + cursor: pointer; +} + +.form-select:focus { + outline: 2px solid #2196f3; + background-color: #333; +} + +.form-select option { + background-color: #2a2a2a; + color: white; + padding: 0.5rem; +} + /* Menu administration */ .admin-menu { display: grid;