fetch( "SELECT fr.*, u.name as user_name FROM file_requests fr LEFT JOIN users u ON fr.user_id = u.id WHERE fr.token = ?", [$token] ); } catch (Exception $e) { http_response_code(500); showErrorPage('Error del sistema', 'No se pudo verificar el enlace. Intenta de nuevo más tarde.'); exit; } if (!$request) { http_response_code(404); showErrorPage('Enlace no encontrado', 'Este enlace de carga no existe o ya fue eliminado.'); exit; } // Verificar expiración if (strtotime($request['expires_at']) < time()) { http_response_code(410); showErrorPage('Enlace expirado', 'Este enlace de carga ha expirado. Solicita uno nuevo al asesor.'); exit; } // Verificar estado if ($request['status'] === 'cancelled') { http_response_code(410); showErrorPage('Enlace cancelado', 'Esta solicitud fue cancelada. Contacta a tu asesor.'); exit; } // Verificar archivos ya subidos $uploadedFiles = []; try { $uploadedFiles = $db->fetchAll( "SELECT * FROM file_request_uploads WHERE request_id = ? ORDER BY created_at DESC", [$request['id']] ); } catch (Exception $e) { // No crítico } $alreadyUploaded = ($request['status'] === 'uploaded' && count($uploadedFiles) > 0); // Calcular tamaño máximo legible $maxSizeMB = round($request['max_file_size'] / (1024 * 1024)); $allowedTypes = explode(',', $request['allowed_types']); // Auto-detectar APP_URL $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http'; $appUrl = $protocol . '://' . $_SERVER['HTTP_HOST']; function showErrorPage($title, $message) { ?> <?= htmlspecialchars($title) ?>
⚠️

📎 Subir archivo

Subir archivo

Envía archivos de hasta MB de forma segura

¡Archivos recibidos!

Tus archivos fueron enviados correctamente. El asesor los recibirá en breve.

Puedes subir archivos adicionales si lo necesitas.
Este enlace es seguro y exclusivo para ti. Los archivos serán recibidos directamente por tu asesor.
Máximo: MB por archivo.
Toca para seleccionar o arrastra tus archivos aquí
Subiendo... 0%
Conexión cifrada y segura