theloftstore/public/userarea/client_files_upload.php

99 lines
3.2 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
require_once(__DIR__ . '/class/db-functions.php');
use Dotenv\Dotenv;
header('Content-Type: application/json');
try {
$db = DBHandlerSelect::getInstance();
$pdo = $db->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()]);
}