query("SELECT id, nombre FROM products ORDER BY nombre ASC"); $productos = $stmt_products->fetchAll(PDO::FETCH_ASSOC); // Obtener videos existentes $stmt_videos = $db->query("SELECT mv.*, p.nombre as nombre_producto FROM marketing_videos mv LEFT JOIN products p ON mv.producto_id = p.id ORDER BY mv.orden ASC, mv.fecha_creacion DESC"); $videos = $stmt_videos->fetchAll(PDO::FETCH_ASSOC); $statusOptions = ['PENDIENTE', 'EN PROCESO', 'TERMINADO', 'OBSERVADO', 'APROBADO', 'PUBLICADO']; $resultOptions = ['DESCONTINUADO', 'REDIMIENTO MEDIUM', 'BUEN RENDIMIENTO']; $isAdminUser = in_array($_SESSION['user_role'] ?? ($_SESSION['role'] ?? ''), ['Administrador', 'admin'], true); function marketing_status_badge_class(?string $estado): string { return match ($estado) { 'PENDIENTE' => 'bg-warning text-dark', 'EN PROCESO' => 'bg-info text-white', 'TERMINADO' => 'bg-primary text-white', 'OBSERVADO' => 'bg-danger text-white', 'APROBADO' => 'bg-success text-white', 'PUBLICADO' => 'bg-dark text-white', default => 'bg-secondary text-white', }; } function marketing_result_row_class(?string $resultados): string { return match (strtoupper(trim((string)$resultados))) { 'DESCONTINUADO' => 'video-row-result-descontinuado', 'REDIMIENTO MEDIUM' => 'video-row-result-medium', 'BUEN RENDIMIENTO' => 'video-row-result-buen-rendimiento', default => '', }; } // Contadores de estado $stats = [ 'TOTAL' => count($videos), 'PENDIENTE' => 0, 'EN PROCESO' => 0, 'TERMINADO' => 0, 'APROBADO' => 0 ]; foreach ($videos as $v) { if (isset($stats[$v['estado']])) { $stats[$v['estado']]++; } } ?>
Gestión de activos y flujo de trabajo creativo
Las columnas Observación y Estado se guardan al salir del campo o al cambiar la opción. Resultados solo puede editarlo el rol Administrador y puedes volver a Sin definir para limpiar la selección.