144 lines
7.3 KiB
PHP
Executable File
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>
|