96 lines
2.7 KiB
PHP
96 lines
2.7 KiB
PHP
<?php
|
|
// upload_pdf_example.php
|
|
// Riceve un PDF di esempio via POST (multipart), lo salva in pdftemplates/
|
|
// e aggiorna la colonna sample_pdf del template.
|
|
//
|
|
// Rispecchia la logica di upload_xls_example.php ma per i PDF.
|
|
|
|
header('Content-Type: application/json');
|
|
|
|
include('include/headscript.php');
|
|
|
|
// --- Helper risposta JSON ---
|
|
function respond(bool $success, string $message = '', array $extra = []): void
|
|
{
|
|
echo json_encode(array_merge([
|
|
'success' => $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]);
|