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 "
-
Selecciona las columnas que deseas que sean visibles en el tablero Kanban.
-
-
+
+
+
\ 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;
}
?>
-
-
+
\ 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