102 lines
3.4 KiB
PHP
102 lines
3.4 KiB
PHP
<?php
|
|
ob_start();
|
|
include('include/headscript.php');
|
|
|
|
$db = DBHandlerSelect::getInstance();
|
|
$pdo = $db->getConnection();
|
|
|
|
function jsonOut($success, $message = '', $extra = [])
|
|
{
|
|
if (ob_get_length()) ob_clean();
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
echo json_encode(array_merge(['success' => $success, 'message' => $message], $extra));
|
|
exit;
|
|
}
|
|
|
|
$id = (int)($_POST['id'] ?? 0);
|
|
$nome = trim($_POST['nome'] ?? '');
|
|
$cliente = trim($_POST['cliente'] ?? '');
|
|
$data = trim($_POST['data'] ?? '');
|
|
$removePhoto = ($_POST['remove_photo'] ?? '0') === '1';
|
|
|
|
if ($nome === '') {
|
|
jsonOut(false, 'Il nome matrice è obbligatorio');
|
|
}
|
|
|
|
$data = ($data !== '' && preg_match('/^\d{4}-\d{2}-\d{2}$/', $data)) ? $data : null;
|
|
$cliente = $cliente !== '' ? $cliente : null;
|
|
|
|
$photoDir = __DIR__ . '/photos/matrici/';
|
|
if (!is_dir($photoDir)) {
|
|
mkdir($photoDir, 0775, true);
|
|
}
|
|
|
|
// Validazione file (se presente)
|
|
$hasUpload = isset($_FILES['photo']) && $_FILES['photo']['error'] !== UPLOAD_ERR_NO_FILE;
|
|
$ext = '';
|
|
if ($hasUpload) {
|
|
if ($_FILES['photo']['error'] !== UPLOAD_ERR_OK) {
|
|
jsonOut(false, 'Errore upload foto (codice ' . $_FILES['photo']['error'] . ')');
|
|
}
|
|
if ($_FILES['photo']['size'] > 10 * 1024 * 1024) {
|
|
jsonOut(false, 'La foto supera i 10 MB');
|
|
}
|
|
$ext = strtolower(pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION));
|
|
if (!in_array($ext, ['jpg', 'jpeg', 'png', 'gif', 'webp'], true)) {
|
|
jsonOut(false, 'Formato foto non consentito (jpg, jpeg, png, gif, webp)');
|
|
}
|
|
if (@getimagesize($_FILES['photo']['tmp_name']) === false) {
|
|
jsonOut(false, 'Il file caricato non è un\'immagine valida');
|
|
}
|
|
}
|
|
|
|
try {
|
|
$pdo->beginTransaction();
|
|
|
|
$oldPhoto = null;
|
|
|
|
if ($id > 0) {
|
|
$st = $pdo->prepare("SELECT photo FROM matrice WHERE id = ?");
|
|
$st->execute([$id]);
|
|
$row = $st->fetch(PDO::FETCH_ASSOC);
|
|
if (!$row) {
|
|
$pdo->rollBack();
|
|
jsonOut(false, 'Matrice non trovata');
|
|
}
|
|
$oldPhoto = $row['photo'];
|
|
|
|
$st = $pdo->prepare("UPDATE matrice SET nome = ?, cliente = ?, data_produzione = ? WHERE id = ?");
|
|
$st->execute([$nome, $cliente, $data, $id]);
|
|
} else {
|
|
$st = $pdo->prepare("INSERT INTO matrice (nome, cliente, data_produzione) VALUES (?, ?, ?)");
|
|
$st->execute([$nome, $cliente, $data]);
|
|
$id = (int)$pdo->lastInsertId();
|
|
}
|
|
|
|
// Nuova foto
|
|
if ($hasUpload) {
|
|
$newName = 'matrice_' . $id . '_' . time() . '.' . $ext;
|
|
if (!move_uploaded_file($_FILES['photo']['tmp_name'], $photoDir . $newName)) {
|
|
$pdo->rollBack();
|
|
jsonOut(false, 'Impossibile salvare la foto sul server');
|
|
}
|
|
$pdo->prepare("UPDATE matrice SET photo = ? WHERE id = ?")->execute([$newName, $id]);
|
|
|
|
if ($oldPhoto && is_file($photoDir . basename($oldPhoto))) {
|
|
@unlink($photoDir . basename($oldPhoto));
|
|
}
|
|
} elseif ($removePhoto && $oldPhoto) {
|
|
// Rimozione foto
|
|
$pdo->prepare("UPDATE matrice SET photo = NULL WHERE id = ?")->execute([$id]);
|
|
if (is_file($photoDir . basename($oldPhoto))) {
|
|
@unlink($photoDir . basename($oldPhoto));
|
|
}
|
|
}
|
|
|
|
$pdo->commit();
|
|
jsonOut(true, 'Matrice salvata correttamente', ['id' => $id]);
|
|
} catch (Throwable $e) {
|
|
if ($pdo->inTransaction()) $pdo->rollBack();
|
|
jsonOut(false, 'Errore: ' . $e->getMessage());
|
|
}
|