prepare(" SELECT sharing_type, shared_sections, iduser FROM home_sharing WHERE idhome = ? AND idshareduser = ? AND status = 'accepted' "); $querySharing->bind_param('ii', $idhome, $iduserlogin); $querySharing->execute(); $sharingData = $querySharing->get_result()->fetch_assoc(); if (!$sharingData) { die("Accesso negato o condivisione non trovata."); } $sharedSections = json_decode($sharingData['shared_sections'], true); $sharingIdUser = $sharingData['iduser']; // Recupera i dettagli della casa $queryHome = $conn->prepare("SELECT * FROM home WHERE idhome = ?"); $queryHome->bind_param('i', $idhome); $queryHome->execute(); $homeData = $queryHome->get_result()->fetch_assoc(); $homeName = preg_replace('/[^A-Za-z0-9\-]/', '_', $homeData['name']); // Recupera i documenti caricati $queryLoaded = $conn->prepare(" SELECT ds.filename, ds.document_id, d.document_name, s.section_name FROM doc_storage ds LEFT JOIN documents d ON ds.document_id = d.document_id LEFT JOIN sections s ON d.idsections = s.idsections LEFT JOIN home_sharing hs ON hs.idhome = ds.idhome WHERE ds.idhome = ? AND hs.idshareduser = ? AND hs.status = 'accepted' AND d.idsections IN (" . implode(',', array_map('intval', $sharedSections)) . ") "); $queryLoaded->bind_param('ii', $idhome, $iduserlogin); $queryLoaded->execute(); $resultLoaded = $queryLoaded->get_result(); $files = []; while ($row = $resultLoaded->fetch_assoc()) { $files[] = [ 'filename' => $row['filename'], 'document_name' => $row['document_name'], 'section_name' => $row['section_name'] ]; } // Crea il PDF del report // ... (codice precedente fino alla creazione del PDF) ... class MYPDF extends TCPDF { protected $homeName; public function __construct($homeName, $orientation, $unit, $format) { parent::__construct($orientation, $unit, $format); $this->homeName = $homeName; } public function Header() { $this->SetFont('helvetica', 'B', 16); $this->SetTextColor(0, 63, 127); $this->Cell(80, 10, 'Report Immobile', 0, 0, 'L'); $this->SetFont('helvetica', 'B', 14); $this->Cell(0, 10, htmlspecialchars($this->homeName), 0, 1, 'R'); $this->SetFont('helvetica', '', 10); $this->SetTextColor(100, 100, 100); $this->Cell(0, 5, 'Generato il ' . date('d/m/Y H:i'), 0, 1, 'C'); $this->Ln(5); $this->SetLineStyle(array('width' => 0.5, 'color' => array(0, 63, 127))); $this->Line(15, $this->GetY(), $this->getPageWidth() - 15, $this->GetY()); } public function Footer() { $this->SetY(-15); $this->SetFont('helvetica', 'I', 8); $this->SetTextColor(100, 100, 100); $this->Cell(0, 10, 'CasaDoc - Pagina ' . $this->getAliasNumPage() . '/' . $this->getAliasNbPages(), 0, 0, 'C'); } } $pdf = new MYPDF($homeData['name'], PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf->SetMargins(15, 35, 15); $pdf->SetHeaderMargin(10); $pdf->SetFooterMargin(10); $pdf->SetAutoPageBreak(true, 25); $pdf->AddPage(); // ... (resto del codice per il PDF e lo ZIP invariato) ... $html = '

' . htmlspecialchars($homeData['name']) . '

'; $html .= '

Indirizzo: ' . htmlspecialchars($homeData['fulladdress']) . '

'; $html .= '

Città: ' . htmlspecialchars($homeData['city']) . ', ' . htmlspecialchars($homeData['country']) . ' ' . htmlspecialchars($homeData['zip']) . '

'; $html .= '

Note: ' . htmlspecialchars($homeData['comment']) . '

'; $html .= '

Dati Catastali

'; $html .= '

Comune Catastale: ' . htmlspecialchars($homeData['cadastral_municipality']) . '

'; $html .= '

Sezione: ' . htmlspecialchars($homeData['cadastral_section']) . '

'; $html .= '

Foglio: ' . htmlspecialchars($homeData['cadastral_sheet']) . '

'; $html .= '

Particella: ' . htmlspecialchars($homeData['cadastral_particle']) . '

'; $html .= '

Subalterno: ' . htmlspecialchars($homeData['cadastral_sub']) . '

'; $html .= '

Categoria: ' . htmlspecialchars($homeData['cadastral_category']) . '

'; $html .= '

Classe: ' . htmlspecialchars($homeData['cadastral_class']) . '

'; $html .= '

Superficie: ' . htmlspecialchars($homeData['cadastral_surface']) . ' mq

'; $html .= '

Rendita: €' . htmlspecialchars($homeData['cadastral_rendita']) . '

'; $pdf->writeHTML($html, true, false, true, false, ''); $imageFile = !empty($homeData['mainphoto']) ? 'mainphoto/' . $homeData['mainphoto'] : 'assets/images/no-image.jpg'; if (file_exists($imageFile)) { $pdf->Image($imageFile, 15, $pdf->GetY() + 10, 100, 0, '', '', '', false, 300, '', false, false, 0); } $reportFilePath = sys_get_temp_dir() . "/Report_Immobile_{$homeName}_" . date('Ymd_His') . ".pdf"; $pdf->Output($reportFilePath, 'F'); // Salva il PDF temporaneamente // Crea lo ZIP $zip = new ZipArchive(); $zipFileName = "Documenti_Condivisi_{$homeName}_" . date('Ymd_His') . ".zip"; $zipFilePath = sys_get_temp_dir() . '/' . $zipFileName; if ($zip->open($zipFilePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) { die("Errore nella creazione del file ZIP."); } // Aggiungi i documenti allo ZIP foreach ($files as $file) { $filePath = "homedocuments/{$file['filename']}"; if (file_exists($filePath)) { $zip->addFile($filePath, "{$file['section_name']}/{$file['document_name']}_{$file['filename']}"); } } // Aggiungi il PDF del report if (file_exists($reportFilePath)) { $zip->addFile($reportFilePath, "Report_Immobile_{$homeName}.pdf"); } $zip->close(); // Download dello ZIP header('Content-Type: application/zip'); header('Content-Disposition: attachment; filename="' . $zipFileName . '"'); header('Content-Length: ' . filesize($zipFilePath)); readfile($zipFilePath); // Pulizia unlink($zipFilePath); unlink($reportFilePath); exit;