151 lines
5.4 KiB
PHP
151 lines
5.4 KiB
PHP
<?php
|
|
// upload_photo.php
|
|
include('include/headscript.php');
|
|
|
|
header('Content-Type: application/json');
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] !== 'POST' || !isset($_FILES['photo']) || (!isset($_POST['iddatadb']) && !isset($_POST['idquotations']))) {
|
|
echo json_encode(['success' => false, 'message' => 'Richiesta non valida']);
|
|
exit;
|
|
}
|
|
|
|
$iddatadb = isset($_POST['iddatadb']) ? intval($_POST['iddatadb']) : null;
|
|
$idquotations = isset($_POST['idquotations']) ? intval($_POST['idquotations']) : null;
|
|
|
|
if ($iddatadb && $idquotations) {
|
|
echo json_encode(['success' => false, 'message' => 'Non è possibile specificare sia iddatadb che idquotations']);
|
|
exit;
|
|
}
|
|
|
|
if (!$iddatadb && !$idquotations) {
|
|
echo json_encode(['success' => false, 'message' => 'ID TRF o ID quotations mancante']);
|
|
exit;
|
|
}
|
|
|
|
// Verifica che l'utente loggato esista in auth_users
|
|
$db = DBHandlerSelect::getInstance();
|
|
$pdo = $db->getConnection();
|
|
|
|
$stmt = $pdo->prepare("SELECT id FROM auth_users WHERE id = ?");
|
|
$stmt->execute([$iduserlogin]);
|
|
$userExists = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$userExists) {
|
|
echo json_encode(['success' => false, 'message' => 'Utente non valido']);
|
|
exit;
|
|
}
|
|
|
|
// Verifica l'esistenza dell'ID nella tabella corrispondente
|
|
try {
|
|
if ($iddatadb) {
|
|
$stmt = $pdo->prepare("SELECT iddatadb FROM datadb WHERE iddatadb = ?");
|
|
$stmt->execute([$iddatadb]);
|
|
if (!$stmt->fetch()) {
|
|
echo json_encode(['success' => false, 'message' => 'iddatadb non valido']);
|
|
exit;
|
|
}
|
|
} else {
|
|
$stmt = $pdo->prepare("SELECT id FROM quotations WHERE id = ?");
|
|
$stmt->execute([$idquotations]);
|
|
if (!$stmt->fetch()) {
|
|
echo json_encode(['success' => false, 'message' => 'idquotations non valido']);
|
|
exit;
|
|
}
|
|
}
|
|
} catch (PDOException $e) {
|
|
echo json_encode(['success' => false, 'message' => 'Errore nella validazione: ' . $e->getMessage()]);
|
|
exit;
|
|
}
|
|
|
|
// Usa un percorso assoluto per la cartella photostrf
|
|
$uploadDir = realpath(__DIR__ . '/../photostrf') . '/';
|
|
if (!is_dir($uploadDir)) {
|
|
if (!mkdir($uploadDir, 0755, true)) {
|
|
echo json_encode(['success' => false, 'message' => 'Impossibile creare la cartella photostrf']);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
// Verifica i permessi della cartella
|
|
if (!is_writable($uploadDir)) {
|
|
echo json_encode(['success' => false, 'message' => 'La cartella photostrf non è scrivibile']);
|
|
exit;
|
|
}
|
|
|
|
// Verifica che il file sia un'immagine (inclusi HEIC/HEIF)
|
|
$photo = $_FILES['photo'];
|
|
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif', 'image/heic', 'image/heif'];
|
|
if (!in_array($photo['type'], $allowedTypes)) {
|
|
echo json_encode(['success' => false, 'message' => 'Il file deve essere un\'immagine (JPEG, PNG, GIF, HEIC)']);
|
|
exit;
|
|
}
|
|
|
|
// Verifica che il file temporaneo esista
|
|
if (!file_exists($photo['tmp_name']) || !is_uploaded_file($photo['tmp_name'])) {
|
|
echo json_encode(['success' => false, 'message' => 'File temporaneo non valido']);
|
|
exit;
|
|
}
|
|
|
|
// Rinomina il file: id-timestamp-nomeoriginale.estensione
|
|
$timestamp = date('YmdHis');
|
|
$originalName = pathinfo($photo['name'], PATHINFO_FILENAME);
|
|
$extension = strtolower(pathinfo($photo['name'], PATHINFO_EXTENSION));
|
|
$id = $iddatadb ?: $idquotations;
|
|
|
|
// Se il file è HEIC/HEIF, convertilo in JPEG
|
|
if (in_array($photo['type'], ['image/heic', 'image/heif'])) {
|
|
// Verifica che la libreria GD sia disponibile
|
|
if (!extension_loaded('gd')) {
|
|
echo json_encode(['success' => false, 'message' => 'La libreria GD non è disponibile per convertire il file HEIC']);
|
|
exit;
|
|
}
|
|
|
|
// Carica il file HEIC
|
|
$image = imagecreatefromstring(file_get_contents($photo['tmp_name']));
|
|
if ($image === false) {
|
|
echo json_encode(['success' => false, 'message' => 'Impossibile caricare il file HEIC']);
|
|
exit;
|
|
}
|
|
|
|
// Crea un nuovo nome per il file JPEG
|
|
$newFileName = "{$id}-{$timestamp}-{$originalName}.jpg";
|
|
$destination = $uploadDir . $newFileName;
|
|
|
|
// Salva l'immagine come JPEG
|
|
if (!imagejpeg($image, $destination, 90)) {
|
|
imagedestroy($image);
|
|
echo json_encode(['success' => false, 'message' => 'Errore durante la conversione del file HEIC in JPEG']);
|
|
exit;
|
|
}
|
|
|
|
// Libera la memoria
|
|
imagedestroy($image);
|
|
} else {
|
|
// Per i formati non HEIC, usa il nome e l'estensione originali
|
|
$newFileName = "{$id}-{$timestamp}-{$originalName}.{$extension}";
|
|
$destination = $uploadDir . $newFileName;
|
|
|
|
// Salva il file
|
|
if (!move_uploaded_file($photo['tmp_name'], $destination)) {
|
|
$error = error_get_last();
|
|
echo json_encode(['success' => false, 'message' => 'Errore durante il caricamento del file: ' . (isset($error['message']) ? $error['message'] : 'Sconosciuto')]);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
// Debug: verifica i percorsi
|
|
error_log("Upload directory: $uploadDir");
|
|
error_log("Destination: $destination");
|
|
error_log("Temp file: " . $photo['tmp_name']);
|
|
|
|
// Salva il riferimento nel database
|
|
try {
|
|
$stmt = $pdo->prepare("INSERT INTO datadb_photos (iddatadb, idquotations, file_path, file_name, uploaded_by) VALUES (?, ?, ?, ?, ?)");
|
|
$stmt->execute([$iddatadb, $idquotations, $newFileName, $newFileName, $iduserlogin]);
|
|
} catch (PDOException $e) {
|
|
echo json_encode(['success' => false, 'message' => 'Errore durante il salvataggio nel database: ' . $e->getMessage()]);
|
|
exit;
|
|
}
|
|
|
|
echo json_encode(['success' => true, 'message' => 'Foto caricata con successo']);
|