From 306385f2ae56a2566efcc7ed62bff6e34bc40fdc Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Thu, 5 Feb 2026 06:00:56 +0000 Subject: [PATCH] Autosave: 20260205-060056 --- configuracion.php | 339 ++++++++++++++++++++++++------- edit_column.php | 82 +++++--- save_banner_text.php | 2 +- save_cobertura_banner.php | 65 +++--- save_cobertura_xpress_banner.php | 61 +++--- 5 files changed, 381 insertions(+), 168 deletions(-) diff --git a/configuracion.php b/configuracion.php index 1767628..19cc4ab 100644 --- a/configuracion.php +++ b/configuracion.php @@ -1,5 +1,5 @@ query($query_manage_columns); -$management_columns = $stmt_manage_columns->fetchAll(PDO::FETCH_ASSOC); - - -// --- Visibilidad de Columnas --- - -// Obtener la configuración actual de visibilidad -$query_config = "SELECT * FROM configuracion WHERE id = 1"; -$result_config = $conn->query($query_config); -$config = $result_config->fetch(PDO::FETCH_ASSOC); - -$visible_columns = $config ? json_decode($config['kanban_columns'], true) : []; +// --- Procesamiento de Formularios --- +// Guardar visibilidad de columnas del Kanban if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_visibility'])) { - $new_visible_columns = $_POST['columns'] ?? []; - $json_columns = json_encode($new_visible_columns); - - // Usar INSERT ... ON DUPLICATE KEY UPDATE para seguridad - $update_query = "INSERT INTO configuracion (id, kanban_columns) VALUES (1, :kanban_columns) - ON DUPLICATE KEY UPDATE kanban_columns = :kanban_columns"; - $stmt = $conn->prepare($update_query); - $stmt->bindParam(':kanban_columns', $json_columns); + $visible_columns = $_POST['visible_columns'] ?? []; + $json_visible_columns = json_encode($visible_columns); + $stmt = $conn->prepare("INSERT INTO configuracion (clave, valor) VALUES ('kanban_visible_columns', :valor) ON DUPLICATE KEY UPDATE valor = :valor"); + $stmt->bindParam(':valor', $json_visible_columns); if ($stmt->execute()) { - echo "
Configuración de visibilidad guardada.
"; - $visible_columns = $new_visible_columns; // Actualizar para mostrar el cambio inmediatamente + $_SESSION['success_message'] = 'Visibilidad de columnas actualizada.'; } else { - echo "
Error al guardar la configuración de visibilidad.
"; + $_SESSION['error_message'] = 'Error al actualizar la visibilidad.'; } + header("Location: configuracion.php"); + exit(); } -// Obtener todas las columnas de kanban_columns para el formulario de visibilidad -$all_db_columns_query = "SELECT nombre FROM kanban_columns ORDER BY orden ASC"; -$stmt_all_db_columns = $conn->query($all_db_columns_query); + +// --- Carga de Datos para la Vista --- + +// Datos para la gestión de columnas +$stmt_manage_columns = $conn->query("SELECT * FROM kanban_columns ORDER BY orden ASC"); +$management_columns = $stmt_manage_columns->fetchAll(PDO::FETCH_ASSOC); + +// Datos para la visibilidad de columnas +$stmt_visible = $conn->prepare("SELECT valor FROM configuracion WHERE clave = 'kanban_visible_columns'"); +$stmt_visible->execute(); +$config_row = $stmt_visible->fetch(PDO::FETCH_ASSOC); +$visible_columns = $config_row ? json_decode($config_row['valor'], true) : []; +$stmt_all_db_columns = $conn->query("SELECT nombre FROM kanban_columns ORDER BY orden ASC"); $available_columns_for_visibility = $stmt_all_db_columns->fetchAll(PDO::FETCH_COLUMN); +// --- Datos para la GESTIÓN DE CONTENIDO DEL KANBAN --- +$products = $conn->query("SELECT id, nombre FROM products ORDER BY nombre ASC")->fetchAll(PDO::FETCH_ASSOC); +$kanban_columns_for_cards = $conn->query("SELECT id, nombre FROM kanban_columns ORDER BY orden, id")->fetchAll(PDO::FETCH_ASSOC); +$info_cards = $conn->query(" + SELECT ip.*, p.nombre as producto_nombre, kc.nombre as column_nombre + FROM info_productos ip + LEFT JOIN products p ON ip.producto_id = p.id + LEFT JOIN kanban_columns kc ON ip.column_id = kc.id + ORDER BY ip.orden, ip.id DESC +")->fetchAll(PDO::FETCH_ASSOC); + + +// Mostrar mensajes de éxito o error +if (isset($_SESSION['success_message'])) { + echo "
".$_SESSION['success_message']."
"; + unset($_SESSION['success_message']); +} +if (isset($_SESSION['error_message'])) { + echo "
".$_SESSION['error_message']."
"; + unset($_SESSION['error_message']); +} ?>
+ + +
+
+

Gestionar Contenido del Kanban

+
+
+

Aquí puedes crear, editar y eliminar las tarjetas de información que aparecen en el tablero Kanban.

+ + +
+
+
Añadir Nueva Tarjeta
+
+
+
+ +
+ + +
+
+ + +
+
+ +
+ + + Sube una imagen para añadir o reemplazar la actual. +
+
+ + +
+ + +
+
+
+ + +
+
+
Tarjetas Existentes
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
ProductoImagenTextoColumnaAcciones
No hay tarjetas creadas.
+ + Imagen + + + + Eliminar +
+
+
+
+
+
+ +
+
+

Imágenes de Cobertura

+
+
+ +
+
Banner de Cobertura
+
+
+ + +
+ +
+
+

Imagen actual:

+ Banner de Cobertura +
+
+
+ +
+
Banner de Cobertura Xpress
+
+
+ + +
+ +
+
+

Imagen actual:

+ Banner de Cobertura Xpress +
+
+
+
+

Gestionar Columnas del Kanban

-

Aquí puedes añadir, editar y eliminar las columnas que se usarán en el tablero Kanban.

- - Añadir Nueva Columna - - - - - - - - - - - + +
+
+
Añadir Nueva Columna
+
+
+
+
+ + +
+ + +
+
+ + +
Columnas Actuales
+
+
Nombre de la ColumnaAcciones
+ - + + + - - - - - - - - - -
No hay columnas definidas.OrdenNombreAcciones
- - Editar - - - Eliminar - -
+ + + + No hay columnas definidas. + + + + + + + Editar + Eliminar + + + + + + +
-

Configurar Visibilidad de Columnas

+

Configurar Visibilidad de Columnas en Kanban

-

Selecciona las columnas que deseas que sean visibles en el tablero Kanban.

-
+

Selecciona las columnas que quieres que sean visibles en el tablero Kanban principal.

+ -
+
-
-
- > - -
+
+ > +
-
- + + + \ No newline at end of file diff --git a/edit_column.php b/edit_column.php index d426f79..e4d256e 100644 --- a/edit_column.php +++ b/edit_column.php @@ -3,80 +3,98 @@ $pageTitle = "Editar Columna del Kanban"; require_once 'layout_header.php'; require_once 'db/config.php'; -// Asegurarse de que el usuario sea administrador -if ($_SESSION['user_role'] !== 'Administrador' && $_SESSION['user_role'] !== 'admin') { +// 1. Validar rol de administrador +if (!isset($_SESSION['user_role']) || ($_SESSION['user_role'] !== 'Administrador' && $_SESSION['user_role'] !== 'admin')) { echo "
Acceso denegado.
"; require_once 'layout_footer.php'; exit(); } -$message = ''; -$column = null; - -if (!isset($_GET['id']) || !is_numeric($_GET['id'])) { +// 2. Validar el ID de la columna +if (!isset($_GET['id']) || !filter_var($_GET['id'], FILTER_VALIDATE_INT)) { header('Location: configuracion.php'); exit; } - $column_id = $_GET['id']; +$message = ''; +$column_name = ''; + try { $pdo = db(); - // Procesar el formulario cuando se envía + // 3. Si se envía el formulario (POST), actualizar la base de datos if ($_SERVER['REQUEST_METHOD'] === 'POST') { - $nombre = trim($_POST['nombre'] ?? ''); + $new_name = trim($_POST['nombre'] ?? ''); - if (!empty($nombre)) { + if (empty($new_name)) { + $message = "
El nombre no puede estar vacío.
"; + // Volver a cargar el nombre actual para mostrarlo en el formulario + $stmt = $pdo->prepare('SELECT nombre FROM kanban_columns WHERE id = ?'); + $stmt->execute([$column_id]); + $column_name = $stmt->fetchColumn(); + } else { $stmt = $pdo->prepare('UPDATE kanban_columns SET nombre = ? WHERE id = ?'); - if ($stmt->execute([$nombre, $column_id])) { - $_SESSION['success_message'] = "Columna actualizada a '" . htmlspecialchars($nombre) . "'."; + if ($stmt->execute([$new_name, $column_id])) { + $_SESSION['success_message'] = "Columna actualizada correctamente."; header('Location: configuracion.php'); exit; } else { $message = "
Error al actualizar la columna.
"; + $column_name = $new_name; // Mantener el valor que el usuario intentó guardar } - } else { - $message = "
El nombre de la columna no puede estar vacío.
"; + } + } else { + // 4. Si se carga la página (GET), obtener el nombre actual de la columna + $stmt = $pdo->prepare('SELECT nombre FROM kanban_columns WHERE id = ?'); + $stmt->execute([$column_id]); + $column_name = $stmt->fetchColumn(); + + if ($column_name === false) { + echo "
La columna no existe o no se pudo encontrar.
"; + require_once 'layout_footer.php'; + exit; } } - // Obtener los datos de la columna para mostrar en el formulario - $stmt = $pdo->prepare('SELECT * FROM kanban_columns WHERE id = ?'); - $stmt->execute([$column_id]); - $column = $stmt->fetch(PDO::FETCH_ASSOC); - - if (!$column) { - echo "
La columna no existe.
"; - require_once 'layout_footer.php'; - exit; - } - } catch (PDOException $e) { + // Manejo de errores de la base de datos $message = "
Error de base de datos: " . $e->getMessage() . "
"; + // Desactivar el formulario si hay un error grave + $column_name = false; } ?>
-
+
-

Editar Columna del Kanban

+

Editar Columna

+ - + +
- +
- - Cancelar + + + Cancelar +
+ +

No se puede mostrar el formulario de edición debido a un error.

+ Volver a Configuración +
- + \ No newline at end of file diff --git a/save_banner_text.php b/save_banner_text.php index 2666ee4..e4b96b7 100644 --- a/save_banner_text.php +++ b/save_banner_text.php @@ -16,7 +16,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { ]); // Redirect back to the info page - header('Location: info_producto.php'); + header('Location: configuracion.php'); exit; } catch (PDOException $e) { diff --git a/save_cobertura_banner.php b/save_cobertura_banner.php index 21c3e15..67d5f20 100644 --- a/save_cobertura_banner.php +++ b/save_cobertura_banner.php @@ -1,46 +1,49 @@ \ No newline at end of file +?> diff --git a/save_cobertura_xpress_banner.php b/save_cobertura_xpress_banner.php index e8b7621..3f055ea 100644 --- a/save_cobertura_xpress_banner.php +++ b/save_cobertura_xpress_banner.php @@ -1,43 +1,48 @@ +?> \ No newline at end of file