getConnection(); if ($_SERVER['REQUEST_METHOD'] !== 'POST') { throw new Exception("Invalid request method."); } $idclient = intval($_POST['idclient'] ?? 0); $file_type = $_POST['file_type'] ?? ''; $uploaded_by = $_POST['uploaded_by'] ?? null; // opzionale $notes = $_POST['notes'] ?? null; if ($idclient <= 0 || empty($file_type) || !isset($_FILES['file'])) { throw new Exception("Missing required parameters."); } // Cartella di upload $uploadDir = __DIR__ . '/../uploads/client_files/'; if (!is_dir($uploadDir)) { mkdir($uploadDir, 0777, true); } $file = $_FILES['file']; if ($file['error'] !== UPLOAD_ERR_OK) { throw new Exception("File upload error."); } $filename = time() . '_' . preg_replace('/[^A-Za-z0-9_.-]/', '_', basename($file['name'])); $targetPath = $uploadDir . $filename; if (!move_uploaded_file($file['tmp_name'], $targetPath)) { throw new Exception("Failed to move uploaded file."); } // === 1️⃣ Inserisci nel DB senza source_id inizialmente === $stmt = $pdo->prepare(" INSERT INTO client_files (idclient, file_type, filename, uploaded_by, notes) VALUES (:idclient, :file_type, :filename, :uploaded_by, :notes) "); $stmt->execute([ ':idclient' => $idclient, ':file_type' => $file_type, ':filename' => $filename, ':uploaded_by' => $uploaded_by, ':notes' => $notes ]); $insertId = $pdo->lastInsertId(); // === 2️⃣ Upload verso ChatPDF === $dotenv = Dotenv::createImmutable(dirname(__DIR__, 2)); $dotenv->load(); $apiKey = $_ENV['CHATPDF_API_KEY'] ?? null; if (!$apiKey) { throw new Exception("ChatPDF API key not found in .env"); } $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => "https://api.chatpdf.com/v1/sources/add-file", CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["x-api-key: $apiKey"], CURLOPT_POST => true, CURLOPT_POSTFIELDS => [ "file" => new CURLFile($targetPath) ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) throw new Exception("ChatPDF API error: $err"); $json = json_decode($response, true); $sourceId = $json['sourceId'] ?? null; // === 3️⃣ Se ChatPDF restituisce un source_id, aggiorniamo il DB === if ($sourceId) { $upd = $pdo->prepare("UPDATE client_files SET source_id = :source_id WHERE id = :id"); $upd->execute([':source_id' => $sourceId, ':id' => $insertId]); $msg = "File uploaded and ChatPDF registered (sourceId: $sourceId)"; } else { $msg = "File uploaded, but ChatPDF did not return a source ID. Response: " . json_encode($json); } echo json_encode(['status' => 'ok', 'message' => $msg, 'source_id' => $sourceId]); } catch (Exception $e) { echo json_encode(['status' => 'error', 'message' => $e->getMessage()]); }