Files
zibo-dashboard/public/userarea/save_matrice.php
T

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());
}