$success, 'message' => $message, ], $extra)); exit; } // --- Validazione input --- $templateId = isset($_POST['template_id']) ? (int)$_POST['template_id'] : 0; if ($templateId <= 0) { respond(false, 'Missing or invalid template_id.'); } if (!isset($_FILES['pdf_file']) || $_FILES['pdf_file']['error'] !== UPLOAD_ERR_OK) { respond(false, 'No file uploaded or upload error.'); } $file = $_FILES['pdf_file']; // --- Controllo estensione e MIME --- $originalName = $file['name']; $ext = strtolower(pathinfo($originalName, PATHINFO_EXTENSION)); if ($ext !== 'pdf') { respond(false, 'Only PDF files are allowed.'); } $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $file['tmp_name']); finfo_close($finfo); if ($mime !== 'application/pdf') { respond(false, 'The uploaded file is not a valid PDF (mime: ' . htmlspecialchars($mime) . ').'); } // --- Cartella di destinazione --- $targetDir = __DIR__ . '/pdftemplates'; if (!is_dir($targetDir)) { if (!mkdir($targetDir, 0775, true) && !is_dir($targetDir)) { respond(false, 'Cannot create destination folder pdftemplates/.'); } } if (!is_writable($targetDir)) { respond(false, 'Destination folder pdftemplates/ is not writable.'); } // --- Nome file sicuro e univoco --- $safeBase = preg_replace('/[^A-Za-z0-9_\-]/', '_', pathinfo($originalName, PATHINFO_FILENAME)); $safeBase = trim($safeBase, '_'); if ($safeBase === '') { $safeBase = 'sample'; } $filename = 'tpl' . $templateId . '_' . $safeBase . '_' . date('YmdHis') . '.pdf'; $targetPath = $targetDir . '/' . $filename; // --- Sposta il file --- if (!move_uploaded_file($file['tmp_name'], $targetPath)) { respond(false, 'Failed to move uploaded file.'); } // --- Aggiorna il database --- try { $db = DBHandlerSelect::getInstance(); $pdo = $db->getConnection(); $stmt = $pdo->prepare("UPDATE excel_templates SET sample_pdf = :sample_pdf WHERE id = :id"); $stmt->execute([ ':sample_pdf' => $filename, ':id' => $templateId, ]); } catch (Throwable $e) { // Se il DB fallisce, rimuovo il file per non lasciare orfani @unlink($targetPath); respond(false, 'Database update failed: ' . $e->getMessage()); } respond(true, 'File uploaded successfully.', ['filename' => $filename]);