Tul xxx Tul
User / IP
:
216.73.216.227
Host / Server
:
45.84.207.204 / aircan.me
System
:
Linux lt-bnk-web1726.main-hosting.eu 5.14.0-611.36.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 3 11:23:52 EST 2026 x86_64
Command
|
Upload
|
Create
Mass Deface
|
Jumping
|
Symlink
|
Reverse Shell
Ping
|
Port Scan
|
DNS Lookup
|
Whois
|
Header
|
cURL
:
/
home
/
u931257429
/
domains
/
aircan.me
/
public_html
/
soporte
/
cliente
/
Viewing: soporte.php
<?php // cliente/soporte.php session_start(); require_once '../auth/database.php'; date_default_timezone_set('America/Managua'); use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once '../panel/includes/PHPMailer/Exception.php'; require_once '../panel/includes/PHPMailer/PHPMailer.php'; require_once '../panel/includes/PHPMailer/SMTP.php'; if (!isset($_SESSION['user_id']) || $_SESSION['rol'] !== 'cliente') { header("Location: ../auth/login.php"); exit; } $mensaje = ''; $tipo_mensaje = ''; $perfil_incompleto = false; $cliente_id = null; $ultimo_ticket = null; $stmt_cliente = $pdo->prepare(" SELECT c.id, c.sistema, u.email, u.nombre FROM clientes c JOIN usuarios u ON c.usuario_id = u.id WHERE u.id = ? "); $stmt_cliente->execute([$_SESSION['user_id']]); $cliente_data = $stmt_cliente->fetch(); if (!$cliente_data || $cliente_data['sistema'] === 'Pendiente') { $perfil_incompleto = true; } else { $cliente_id = $cliente_data['id']; $correo_cliente = $cliente_data['email']; $nombre_cliente = $cliente_data['nombre']; $directorio_subidas = __DIR__ . '/../uploads/tickets/'; if (!file_exists($directorio_subidas)) { mkdir($directorio_subidas, 0777, true); chmod($directorio_subidas, 0777); } if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['accion'])) { $accion = $_POST['accion']; if ($accion === 'crear_ticket') { $motivo = trim($_POST['motivo']); $urgencia = $_POST['urgencia']; $numero_ticket = 'TKT-' . date('ym') . '-' . rand(1000, 9999); $ruta_bd = null; if (isset($_FILES['imagen']) && $_FILES['imagen']['error'] === UPLOAD_ERR_OK) { $extension = pathinfo($_FILES['imagen']['name'], PATHINFO_EXTENSION); $nombre_archivo = time() . '_' . rand(100, 999) . '.' . $extension; if (move_uploaded_file($_FILES['imagen']['tmp_name'], $directorio_subidas . $nombre_archivo)) { $ruta_bd = '../uploads/tickets/' . $nombre_archivo; } } if (!empty($motivo)) { try { $stmt = $pdo->prepare("INSERT INTO tickets (numero_ticket, cliente_id, motivo, urgencia, imagen, estado) VALUES (?, ?, ?, ?, ?, 'sin revisar')"); $stmt->execute([$numero_ticket, $cliente_id, $motivo, $urgencia, $ruta_bd]); $stmt_ajustes = $pdo->query("SELECT * FROM ajustes_sistema WHERE id = 1"); $ajustes = $stmt_ajustes->fetch(); $info_correo = ""; // ==================================================================== // FORZADO: Quitamos la validación de $ajustes['notificaciones_email'] // Entrará a enviar correos OBLIGATORIAMENTE. // ==================================================================== if ($ajustes) { // CORREO AL CLIENTE $mailCliente = new PHPMailer(true); try { $mailCliente->isSMTP(); $mailCliente->Host = $ajustes['smtp_host']; $mailCliente->SMTPAuth = true; $mailCliente->Username = $ajustes['smtp_user']; $mailCliente->Password = $ajustes['smtp_pass']; $mailCliente->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mailCliente->Port = $ajustes['smtp_port']; $mailCliente->CharSet = 'UTF-8'; // Bypass SSL (Devuelto por si Localhost lo exige) $mailCliente->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) ); $mailCliente->setFrom($ajustes['smtp_user'], $ajustes['nombre_empresa']); $mailCliente->addAddress($correo_cliente, $nombre_cliente); $motivo_seguro = nl2br(htmlspecialchars($motivo)); $plantilla_cliente = " <div style='background-color: #f3f4f6; padding: 40px 20px; font-family: Arial, sans-serif;'> <div style='max-width: 600px; margin: 0 auto; background-color: #ffffff; border-radius: 12px; overflow: hidden; box-shadow: 0 4px 15px rgba(0,0,0,0.05);'> <div style='background-color: #6D28D9; padding: 30px; text-align: center;'> <h2 style='color: #ffffff; margin: 0; font-size: 24px;'>Hemos recibido tu reporte</h2> <p style='color: #FFD700; margin: 8px 0 0 0; font-size: 14px; font-weight: bold;'>Ticket {$numero_ticket}</p> </div> <div style='padding: 30px; color: #374151; font-size: 15px; line-height: 1.6;'> <p>Hola <strong>{$nombre_cliente}</strong>,</p> <p>Tu solicitud ha sido registrada exitosamente con nivel de urgencia <strong>".strtoupper($urgencia)."</strong>.</p> <div style='background: #f9fafb; padding: 15px; border-radius: 8px; border: 1px solid #e5e7eb; margin: 20px 0;'> <p style='margin: 0; font-size: 12px; color: #6b7280;'><strong>Detalles:</strong></p> <p style='margin: 5px 0 0 0; font-size: 14px; font-style: italic;'>\"{$motivo_seguro}\"</p> </div> <p>Nuestro equipo técnico revisará tu caso pronto.</p> <p style='margin-top: 30px;'>Atentamente,<br><strong>Equipo Técnico - {$ajustes['nombre_empresa']}</strong></p> </div> </div> </div>"; $mailCliente->isHTML(true); $mailCliente->Subject = "Soporte Técnico - " . $numero_ticket; $mailCliente->Body = $plantilla_cliente; $mailCliente->send(); $info_correo .= "<br><span class='text-[10px] text-green-600 font-bold'><i class='fa-solid fa-check'></i> Cliente notificado.</span>"; } catch (Exception $e) { $info_correo .= "<br><span class='text-[10px] text-red-500 font-bold'><i class='fa-solid fa-xmark'></i> Fallo cliente: {$mailCliente->ErrorInfo}</span>"; } // CORREO AL ADMINISTRADOR $mailAdmin = new PHPMailer(true); try { $mailAdmin->isSMTP(); $mailAdmin->Host = $ajustes['smtp_host']; $mailAdmin->SMTPAuth = true; $mailAdmin->Username = $ajustes['smtp_user']; $mailAdmin->Password = $ajustes['smtp_pass']; $mailAdmin->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mailAdmin->Port = $ajustes['smtp_port']; $mailAdmin->CharSet = 'UTF-8'; // Bypass SSL $mailAdmin->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) ); $mailAdmin->setFrom($ajustes['smtp_user'], $ajustes['nombre_empresa']); $mailAdmin->addAddress('lennynantoni29@gmail.com', 'Admin Stone Dev'); $plantilla_admin = " <div style='background-color: #1a0b2e; padding: 40px 20px; font-family: Arial, sans-serif;'> <div style='max-width: 600px; margin: 0 auto; background-color: #ffffff; border-radius: 12px; overflow: hidden; border: 2px solid #FFD700;'> <div style='background-color: #FFD700; padding: 20px; text-align: center;'> <h2 style='color: #1a0b2e; margin: 0; font-size: 22px; font-weight: 900;'>NUEVO TICKET PENDIENTE</h2> </div> <div style='padding: 30px; color: #374151; font-size: 14px;'> <p><strong>Cliente:</strong> {$nombre_cliente}</p> <p><strong>Correo:</strong> {$correo_cliente}</p> <p><strong>Urgencia:</strong> <span style='color: red; text-transform: uppercase; font-weight: bold;'>{$urgencia}</span></p> <hr style='border: 0; border-bottom: 1px solid #e5e7eb; margin: 15px 0;'> <p><strong>Motivo del reporte:</strong></p> <p style='background: #f3f4f6; padding: 15px; border-radius: 6px;'>{$motivo_seguro}</p> </div> </div> </div>"; $mailAdmin->isHTML(true); $mailAdmin->Subject = "Ticket " . $numero_ticket . " de " . $nombre_cliente; $mailAdmin->Body = $plantilla_admin; $mailAdmin->send(); $info_correo .= "<br><span class='text-[10px] text-green-600 font-bold'><i class='fa-solid fa-check'></i> Admin notificado.</span>"; } catch (Exception $e) { $info_correo .= "<br><span class='text-[10px] text-red-500 font-bold'><i class='fa-solid fa-xmark'></i> Fallo admin: {$mailAdmin->ErrorInfo}</span>"; } } $mensaje = "Tu reporte ($numero_ticket) se guardó." . $info_correo; $tipo_mensaje = "success"; } catch (PDOException $e) { $mensaje = "Error al guardar el ticket: " . $e->getMessage(); $tipo_mensaje = "error"; } } } elseif ($accion === 'editar_ticket') { $ticket_id = $_POST['ticket_id']; $motivo = trim($_POST['motivo']); $urgencia = $_POST['urgencia']; try { if (isset($_FILES['imagen']) && $_FILES['imagen']['error'] === UPLOAD_ERR_OK) { $extension = pathinfo($_FILES['imagen']['name'], PATHINFO_EXTENSION); $nombre_archivo = time() . '_' . rand(100, 999) . '.' . $extension; if (move_uploaded_file($_FILES['imagen']['tmp_name'], $directorio_subidas . $nombre_archivo)) { $ruta_bd = '../uploads/tickets/' . $nombre_archivo; $stmt = $pdo->prepare("UPDATE tickets SET motivo = ?, urgencia = ?, imagen = ? WHERE id = ? AND cliente_id = ?"); $stmt->execute([$motivo, $urgencia, $ruta_bd, $ticket_id, $cliente_id]); } } else { $stmt = $pdo->prepare("UPDATE tickets SET motivo = ?, urgencia = ? WHERE id = ? AND cliente_id = ?"); $stmt->execute([$motivo, $urgencia, $ticket_id, $cliente_id]); } $mensaje = "Tu reporte ha sido actualizado correctamente."; $tipo_mensaje = "success"; } catch (PDOException $e) { $mensaje = "Error al actualizar: " . $e->getMessage(); $tipo_mensaje = "error"; } } elseif ($accion === 'eliminar_ticket') { $ticket_id = $_POST['ticket_id']; try { $stmt = $pdo->prepare("DELETE FROM tickets WHERE id = ? AND cliente_id = ?"); $stmt->execute([$ticket_id, $cliente_id]); if ($stmt->rowCount() > 0) { $mensaje = "El reporte de soporte fue cancelado y eliminado."; $tipo_mensaje = "success"; } else { $mensaje = "No se pudo borrar el reporte."; $tipo_mensaje = "warning"; } } catch (PDOException $e) { $mensaje = "Error al eliminar: " . $e->getMessage(); $tipo_mensaje = "error"; } } } $stmt_ultimo = $pdo->prepare("SELECT * FROM tickets WHERE cliente_id = ? ORDER BY fecha_creacion DESC LIMIT 1"); $stmt_ultimo->execute([$cliente_id]); $ultimo_ticket = $stmt_ultimo->fetch(); } ?> <!DOCTYPE html> <html lang="es" class="h-full bg-[#F8FAFC]"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Centro de Soporte - Stone Dev</title> <script src="https://cdn.tailwindcss.com"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"> <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700;800&display=swap" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <style> body { font-family: 'Montserrat', sans-serif; } </style> </head> <body class="h-full flex overflow-hidden text-gray-800"> <?php include 'includes/sidebar.php'; ?> <div class="flex-1 flex flex-col h-full overflow-y-auto"> <?php include 'includes/header.php'; ?> <main class="p-4 lg:p-8 space-y-6 lg:space-y-8 max-w-7xl mx-auto w-full"> <div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4"> <div> <h2 class="text-xl lg:text-2xl font-extrabold text-[#6D28D9]">Solicitar Soporte Técnico</h2> <p class="text-xs lg:text-sm text-gray-500 mt-1">Envía un reporte detallado para que nuestro equipo pueda ayudarte rápidamente.</p> </div> </div> <?php if (!empty($mensaje)): ?> <script> document.addEventListener("DOMContentLoaded", function() { Swal.fire({ icon: '<?= $tipo_mensaje == "success" ? "success" : ($tipo_mensaje == "warning" ? "warning" : "error") ?>', title: '<?= $tipo_mensaje == "success" ? "¡Logrado!" : "Aviso del Sistema" ?>', html: "<?= $mensaje ?>", confirmButtonColor: '#6D28D9', confirmButtonText: 'Entendido', scrollbarPadding: false, heightAuto: false }); }); </script> <?php endif; ?> <?php if ($perfil_incompleto): ?> <div class="bg-white rounded-2xl shadow-sm border border-yellow-200 p-8 text-center flex flex-col items-center justify-center min-h-[400px]"> <div class="w-20 h-20 bg-yellow-50 text-yellow-500 rounded-full flex items-center justify-center mb-4"> <i class="fa-solid fa-user-gear text-4xl"></i> </div> <h3 class="text-xl font-bold text-gray-800 mb-2">Perfil Incompleto</h3> <p class="text-sm text-gray-500 max-w-md mb-6">Para poder generar tickets de soporte, primero necesitas configurar tu perfil de cliente en el sistema.</p> <a href="ajustes.php" class="bg-[#FFD700] hover:bg-yellow-400 text-[#1a0b2e] font-extrabold py-3 px-6 rounded-xl transition-all shadow-md uppercase tracking-wider text-xs flex items-center space-x-2"> <i class="fa-solid fa-arrow-right"></i> <span>Ir a Mis Ajustes</span> </a> </div> <?php else: ?> <div class="grid grid-cols-1 lg:grid-cols-3 gap-6 lg:gap-8 items-start"> <div class="bg-white p-6 lg:p-8 rounded-2xl shadow-sm border border-gray-100 lg:col-span-2 relative overflow-hidden" id="form-container"> <div class="absolute -right-10 -top-10 w-32 h-32 bg-purple-50 rounded-full blur-2xl opacity-60"></div> <div class="flex items-center space-x-3 mb-6 pb-4 border-b border-gray-100 relative z-10"> <div class="w-12 h-12 rounded-xl bg-purple-50 flex items-center justify-center text-[#6D28D9]" id="form-icon"> <i class="fa-solid fa-screwdriver-wrench text-xl"></i> </div> <div> <h3 class="text-lg font-bold text-gray-800" id="form-title">Generar Nuevo Ticket</h3> <p class="text-[11px] text-gray-400">Describe tu problema con la mayor cantidad de detalles.</p> </div> </div> <form action="soporte.php" method="POST" enctype="multipart/form-data" class="space-y-5 relative z-10" id="form-soporte" onsubmit="procesarFormularioEnvio(event, this)"> <input type="hidden" name="accion" id="input_accion" value="crear_ticket"> <input type="hidden" name="ticket_id" id="input_ticket_id" value=""> <div> <label class="block text-xs font-bold text-gray-500 uppercase tracking-wider mb-2">Nivel de Urgencia</label> <select name="urgencia" id="urgencia_select" required class="w-full px-4 py-3 bg-[#F8FAFC] border border-gray-200 rounded-xl focus:outline-none focus:border-[#6D28D9] focus:ring-1 focus:ring-[#6D28D9] text-sm text-gray-700 transition-all"> <option value="baja">Baja - Duda general o cambio menor</option> <option value="media" selected>Media - Error que afecta algunas funciones</option> <option value="alta">Alta - Falla importante que impide trabajar</option> <option value="critica">Crítica - El sistema está completamente caído</option> </select> </div> <div> <label class="block text-xs font-bold text-gray-500 uppercase tracking-wider mb-2">Descripción del Problema</label> <textarea name="motivo" id="motivo_text" rows="5" required placeholder="Ej: Estaba intentando acceder a la sección de ventas..." class="w-full px-4 py-3 bg-[#F8FAFC] border border-gray-200 rounded-xl focus:outline-none focus:border-[#6D28D9] focus:ring-1 focus:ring-[#6D28D9] text-sm resize-none transition-all"></textarea> </div> <div class="bg-gray-50 p-4 rounded-xl border border-gray-200 border-dashed"> <label class="block text-xs font-bold text-gray-500 uppercase tracking-wider mb-2"><i class="fa-solid fa-paperclip mr-1"></i> Evidencia (Captura de pantalla)</label> <input type="file" name="imagen" accept="image/*" class="w-full text-sm text-gray-500 file:mr-4 file:py-2 file:px-4 file:rounded-lg file:border-0 file:text-xs file:font-bold file:bg-purple-100 file:text-[#6D28D9] hover:file:bg-purple-200 cursor-pointer transition-colors"> <p class="text-[10px] text-gray-400 mt-2">Sube una nueva imagen solo si deseas reemplazar la anterior.</p> </div> <div class="flex space-x-3"> <button type="submit" class="w-full mt-2 bg-[#FFD700] hover:bg-yellow-400 text-[#1a0b2e] font-extrabold py-4 rounded-xl transition-all shadow-md flex items-center justify-center space-x-2 uppercase tracking-wider text-sm"> <i class="fa-solid fa-paper-plane"></i> <span id="btn-text">Enviar Reporte al Soporte</span> </button> <button type="button" id="btn-cancelar" onclick="cancelarEdicion()" class="hidden w-1/3 mt-2 bg-gray-200 hover:bg-gray-300 text-gray-700 font-extrabold py-4 rounded-xl transition-all shadow-sm flex items-center justify-center uppercase tracking-wider text-xs"> Cancelar </button> </div> </form> </div> <div class="lg:col-span-1 flex flex-col space-y-4"> <h3 class="text-sm font-bold text-gray-500 uppercase tracking-wider px-2">Estado Actual</h3> <?php if ($ultimo_ticket): $est = strtolower($ultimo_ticket['estado']); if ($est === 'sin revisar') { $bg_est = 'bg-gray-100 text-gray-600 border-gray-200'; $icono_est = 'fa-inbox'; } elseif ($est === 'revisando') { $bg_est = 'bg-blue-100 text-blue-700 border-blue-200'; $icono_est = 'fa-magnifying-glass'; } elseif ($est === 'actualizando') { $bg_est = 'bg-yellow-100 text-yellow-700 border-yellow-200'; $icono_est = 'fa-gears'; } elseif ($est === 'actualizado' || $est === 'reparado') { $bg_est = 'bg-green-100 text-green-700 border-green-200'; $icono_est = 'fa-check-double'; } elseif ($est === 'no renovar') { $bg_est = 'bg-orange-100 text-[#FF8C00] border-orange-200'; $icono_est = 'fa-ban'; } else { $bg_est = 'bg-red-100 text-red-700 border-red-200'; $icono_est = 'fa-triangle-exclamation'; } $urg = strtolower($ultimo_ticket['urgencia']); $col_urg = ($urg == 'baja') ? 'text-gray-500' : (($urg == 'media') ? 'text-blue-500' : (($urg == 'alta') ? 'text-orange-500' : 'text-red-600')); ?> <div class="bg-white rounded-2xl shadow-md border border-gray-100 overflow-hidden flex flex-col relative h-full"> <div class="bg-[#1a0b2e] p-5 text-center relative"> <p class="text-[#FFD700] text-[10px] font-bold uppercase tracking-widest mb-1">Último Reporte Generado</p> <h4 class="text-2xl font-black text-white tracking-wider"><?= htmlspecialchars($ultimo_ticket['numero_ticket']) ?></h4> <div class="absolute -bottom-2 -left-2 w-4 h-4 bg-[#F8FAFC] rounded-full"></div> <div class="absolute -bottom-2 -right-2 w-4 h-4 bg-[#F8FAFC] rounded-full"></div> </div> <div class="border-b-2 border-dashed border-gray-200 mx-4"></div> <div class="p-6 flex-1 flex flex-col space-y-5"> <div class="text-center"> <p class="text-[10px] font-bold text-gray-400 uppercase tracking-wider mb-2">Estado del Técnico</p> <div class="inline-flex items-center space-x-2 <?= $bg_est ?> border px-4 py-2 rounded-lg"> <i class="fa-solid <?= $icono_est ?>"></i> <span class="font-extrabold uppercase tracking-wide text-xs"><?= htmlspecialchars($est) ?></span> </div> </div> <div class="bg-gray-50 p-4 rounded-xl border border-gray-100"> <p class="text-[10px] font-bold text-gray-400 uppercase tracking-wider mb-1">Descripción enviada</p> <p class="text-xs text-gray-600 font-medium italic line-clamp-4 leading-relaxed"> "<?= htmlspecialchars($ultimo_ticket['motivo']) ?>" </p> </div> <div class="flex justify-between items-center text-xs"> <div> <p class="text-[10px] font-bold text-gray-400 uppercase tracking-wider">Urgencia</p> <p class="font-bold uppercase <?= $col_urg ?>"><i class="fa-solid fa-circle text-[8px] mr-1"></i> <?= htmlspecialchars($urg) ?></p> </div> <div class="text-right"> <p class="text-[10px] font-bold text-gray-400 uppercase tracking-wider">Fecha</p> <p class="font-bold text-gray-700"><?= date('d/m/Y', strtotime($ultimo_ticket['fecha_creacion'])) ?></p> </div> </div> <?php if (!empty($ultimo_ticket['imagen'])): ?> <div class="pt-2 text-center"> <a href="<?= htmlspecialchars($ultimo_ticket['imagen']) ?>" target="_blank" class="text-[#6D28D9] hover:text-[#5B21B6] font-bold text-xs flex items-center justify-center space-x-1"> <i class="fa-regular fa-image text-lg"></i> <span class="underline">Ver captura</span> </a> </div> <?php endif; ?> </div> <?php if ($est === 'sin revisar'): ?> <div class="bg-gray-50 p-3 border-t border-gray-100 flex justify-between space-x-2 mt-auto"> <button onclick="activarEdicion(<?= $ultimo_ticket['id'] ?>, '<?= $ultimo_ticket['urgencia'] ?>', '<?= addslashes(str_replace(array("\r", "\n"), array('\r', '\n'), $ultimo_ticket['motivo'])) ?>')" class="flex-1 bg-white border border-gray-200 text-[#6D28D9] hover:bg-purple-50 hover:border-purple-200 py-2 rounded-lg text-xs font-bold transition-colors"> <i class="fa-solid fa-pen mr-1"></i> Editar </button> <form action="soporte.php" method="POST" onsubmit="procesarFormularioEliminar(event, this)" class="flex-1"> <input type="hidden" name="accion" value="eliminar_ticket"> <input type="hidden" name="ticket_id" value="<?= $ultimo_ticket['id'] ?>"> <button type="submit" class="w-full bg-red-50 border border-red-100 text-red-500 hover:bg-red-500 hover:text-white py-2 rounded-lg text-xs font-bold transition-colors"> <i class="fa-solid fa-trash mr-1"></i> Borrar </button> </form> </div> <?php else: ?> <div class="bg-gray-100 p-3 border-t border-gray-200 text-center mt-auto"> <p class="text-[10px] text-gray-500 font-medium"><i class="fa-solid fa-lock mr-1"></i> El ticket ya está en proceso, no se puede editar.</p> </div> <?php endif; ?> </div> <?php else: ?> <div class="bg-white rounded-2xl shadow-sm border border-gray-100 p-8 text-center flex flex-col items-center justify-center h-full min-h-[300px]"> <div class="w-16 h-16 bg-gray-50 text-gray-300 rounded-full flex items-center justify-center mb-4"> <i class="fa-solid fa-clipboard-check text-3xl"></i> </div> <h4 class="text-gray-800 font-bold">Sin reportes recientes</h4> <p class="text-xs text-gray-400 mt-2">Cuando generes un ticket de soporte, podrás ver su estado en tiempo real aquí.</p> </div> <?php endif; ?> </div> </div> <?php endif; ?> </main> </div> <?php if (!$perfil_incompleto): ?> <script> function procesarFormularioEnvio(event, form) { event.preventDefault(); const isEdit = document.getElementById('input_accion').value === 'editar_ticket'; const textAccion = isEdit ? '¿Actualizar Reporte?' : '¿Enviar Reporte?'; Swal.fire({ title: textAccion, text: 'Asegúrate de haber detallado bien el problema.', icon: 'question', showCancelButton: true, confirmButtonColor: '#FFD700', cancelButtonColor: '#2d1b4e', confirmButtonText: '<span style="color:#1a0b2e; font-weight:bold;">Sí, Continuar</span>', cancelButtonText: '<span style="color:#ffffff;">Revisar</span>', scrollbarPadding: false, heightAuto: false }).then((result) => { if (result.isConfirmed) { Swal.fire({ title: 'Procesando...', text: 'Conectando con el servidor SMTP...', allowOutsideClick: false, didOpen: () => { Swal.showLoading() }, scrollbarPadding: false, heightAuto: false }); HTMLFormElement.prototype.submit.call(form); } }); } function procesarFormularioEliminar(event, form) { event.preventDefault(); Swal.fire({ title: '¿Cancelar y Eliminar?', text: 'Este reporte se borrará permanentemente.', icon: 'warning', showCancelButton: true, confirmButtonColor: '#ef4444', cancelButtonColor: '#9ca3af', confirmButtonText: 'Sí, Eliminar', cancelButtonText: 'Mantener Ticket', scrollbarPadding: false, heightAuto: false }).then((result) => { if (result.isConfirmed) { HTMLFormElement.prototype.submit.call(form); } }); } function activarEdicion(id, urgencia, motivo) { const formattedMotivo = motivo.replace(/\\n/g, '\n').replace(/\\r/g, ''); document.getElementById('input_accion').value = 'editar_ticket'; document.getElementById('input_ticket_id').value = id; document.getElementById('urgencia_select').value = urgencia; document.getElementById('motivo_text').value = formattedMotivo; document.getElementById('form-title').innerText = "Editando Ticket: TKT-..." ; document.getElementById('form-icon').innerHTML = '<i class="fa-solid fa-pen-to-square text-xl"></i>'; document.getElementById('btn-text').innerText = "Actualizar Cambios"; document.getElementById('btn-cancelar').classList.remove('hidden'); const container = document.getElementById('form-container'); container.classList.add('ring-2', 'ring-[#FFD700]'); window.scrollTo({ top: 0, behavior: 'smooth' }); } function cancelarEdicion() { document.getElementById('form-soporte').reset(); document.getElementById('input_accion').value = 'crear_ticket'; document.getElementById('input_ticket_id').value = ''; document.getElementById('form-title').innerText = "Generar Nuevo Ticket"; document.getElementById('form-icon').innerHTML = '<i class="fa-solid fa-screwdriver-wrench text-xl"></i>'; document.getElementById('btn-text').innerText = "Enviar Reporte al Soporte"; document.getElementById('btn-cancelar').classList.add('hidden'); document.getElementById('form-container').classList.remove('ring-2', 'ring-[#FFD700]'); } </script> <?php endif; ?> </body> </html>
Coded With 💗 by
0x6ick