Files
sistema_funcionando_lastwar/gallery.php

144 lines
7.3 KiB
PHP
Executable File

<?php
require_once __DIR__ . '/includes/session_check.php';
$gallery_path = __DIR__ . '/galeria';
$files = array_diff(scandir($gallery_path), array('.', '..'));
require_once __DIR__ . '/templates/header.php';
?>
<style>
/* Estilos para que el formulario de subida sea responsive en móviles */
@media (max-width: 576px) {
.upload-form .input-group {
flex-direction: column;
gap: 0.5rem; /* Espacio entre input y botón */
}
.upload-form .input-group .form-control,
.upload-form .input-group .btn {
width: 100%;
border-radius: var(--bs-border-radius) !important;
}
/* Ajuste específico para el input de archivo para evitar que se recorte */
.upload-form .input-group input[type="file"].form-control {
height: auto; /* Permite que el alto se ajuste al contenido */
padding: 0.75rem; /* Añade más espacio vertical */
}
}
</style>
<div class="container-fluid">
<h1 class="mt-4" data-translate="true">Galería de Imágenes</h1>
<?php if (isset($_GET['success'])):
$successMessages = [
'upload' => '<span data-translate="true">Imagen subida con éxito.</span>',
'deleted' => '<span data-translate="true">Imagen eliminada con éxito.</span>',
'renamed' => '<span data-translate="true">Nombre de la imagen cambiado con éxito.</span>'
];
$successKey = $_GET['success'];
if (array_key_exists($successKey, $successMessages)):
echo '<div class="alert alert-success">' . $successMessages[$successKey] . '</div>';
endif;
elseif (isset($_GET['error'])):
$errorMessages = [
'upload_failed' => '<span data-translate="true">Error al subir la imagen.</span>',
'delete_failed' => '<span data-translate="true">Error al eliminar la imagen.</span>',
'rename_failed' => '<span data-translate="true">Error al cambiar el nombre de la imagen.</span>',
'invalid_file' => '<span data-translate="true">Archivo no válido o no encontrado.</span>',
'not_found' => '<span data-translate="true">El archivo original no se encontró.</span>',
'name_exists' => '<span data-translate="true">Ya existe un archivo con ese nombre.</span>',
'empty_name' => '<span data-translate="true">El nuevo nombre no puede estar vacío.</span>'
];
$errorKey = $_GET['error'];
if (array_key_exists($errorKey, $errorMessages)):
echo '<div class="alert alert-danger">' . $errorMessages[$errorKey] . '</div>';
endif;
endif; ?>
<!-- Upload Form -->
<div class="card shadow-sm mb-4">
<div class="card-header"><h5 class="mb-0" data-translate="true">Subir Nueva Imagen</h5></div>
<div class="card-body upload-form">
<form action="upload.php" method="post" enctype="multipart/form-data">
<div class="input-group">
<input type="file" class="form-control" name="imageFile" id="imageFile" required data-translate-title="true" title="Seleccionar archivo">
<button class="btn btn-primary" type="submit" data-translate="true">Subir Imagen</button>
</div>
</form>
</div>
</div>
<!-- Image Grid -->
<div class="row">
<?php if (empty($files)): ?>
<div class="col-12"><p class="text-center text-muted" data-translate="true">No hay imágenes en la galería.</p></div>
<?php else: ?>
<?php foreach ($files as $file): if (is_file($gallery_path . '/' . $file)):
?>
<div class="col-lg-3 col-md-4 col-sm-6 mb-4">
<div class="card h-100">
<img src="<?php echo site_url('galeria/' . $file); ?>" class="card-img-top" alt="<?php echo htmlspecialchars($file); ?>" style="height: 200px; object-fit: cover;">
<div class="card-body">
<p class="card-text small text-truncate" title="<?php echo htmlspecialchars($file); ?>"><?php echo htmlspecialchars($file); ?></p>
</div>
<div class="card-footer text-center">
<button type="button" class="btn btn-sm btn-secondary" data-bs-toggle="modal" data-bs-target="#renameModal" data-filename="<?php echo htmlspecialchars($file); ?>" data-translate="true">Renombrar</button>
<form action="delete_image.php" method="POST" class="d-inline" onsubmit="return confirm(this.querySelector('[data-translate-confirm]').getAttribute('data-translate-confirm'));">
<input type="hidden" name="filename" value="<?php echo htmlspecialchars($file); ?>">
<input type="hidden" name="confirm_message" value="¿Estás seguro de que quieres eliminar esta imagen?" data-translate-confirm="¿Estás seguro de que quieres eliminar esta imagen?">
<button type="submit" class="btn btn-sm btn-danger" data-translate="true">Borrar</button>
</form>
</div>
</div>
</div>
<?php endif; endforeach; ?>
<?php endif; ?>
</div>
</div>
<!-- Rename Image Modal -->
<div class="modal fade" id="renameModal" tabindex="-1" aria-labelledby="renameModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="renameModalLabel" data-translate="true">Cambiar Nombre de Imagen</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" data-translate-aria-label="true"></button>
</div>
<form action="rename_image.php" method="POST">
<div class="modal-body">
<input type="hidden" name="old_filename" id="modalOldFilename">
<div class="mb-3">
<label for="new_filename" class="form-label" data-translate="true">Nuevo nombre (sin extensión):</label>
<input type="text" class="form-control" id="new_filename" name="new_filename" required data-translate-placeholder="true">
</div>
<p class="small text-muted" data-translate="true">La extensión del archivo se conservará.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" data-translate="true">Cerrar</button>
<button type="submit" class="btn btn-primary" data-translate="true">Guardar Cambios</button>
</div>
</form>
</div>
</div>
</div>
<?php require_once __DIR__ . '/templates/footer.php'; ?>
<script>
document.addEventListener('DOMContentLoaded', function () {
var renameModal = document.getElementById('renameModal');
renameModal.addEventListener('show.bs.modal', function (event) {
var button = event.relatedTarget;
var filename = button.getAttribute('data-filename');
var modalOldFilenameInput = renameModal.querySelector('#modalOldFilename');
var modalNewFilenameInput = renameModal.querySelector('#new_filename');
modalOldFilenameInput.value = filename;
// Pre-fill with the name without extension
modalNewFilenameInput.value = filename.substring(0, filename.lastIndexOf('.') || filename.length);
});
});
</script>