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']);