128 lines
4.1 KiB
PHP
128 lines
4.1 KiB
PHP
<?php
|
|
include('include/headscript.php');
|
|
|
|
$conn = new mysqli($servername, $username, $password, $database);
|
|
$iduserlogin = $_SESSION['iduserlogin'];
|
|
$idhome = isset($_GET['idhome']) ? intval($_GET['idhome']) : 0;
|
|
$docpage = isset($_GET['slug']) ? $_GET['slug'] : '';
|
|
$showOnlyRequired = isset($_GET['showOnlyRequired']) && $_GET['showOnlyRequired'] === 'true';
|
|
$sectionId = (isset($_GET['sectionId']) && $_GET['sectionId'] !== '' && $_GET['sectionId'] !== 'null') ? $_GET['sectionId'] : null;
|
|
$searchName = (isset($_GET['searchName']) && $_GET['searchName'] !== '' && $_GET['searchName'] !== 'null') ? $_GET['searchName'] : null;
|
|
// Tag: lista di ID separati da virgola
|
|
$tagIds = [];
|
|
if (isset($_GET['tags']) && $_GET['tags'] !== '' && $_GET['tags'] !== 'null') {
|
|
$tagIds = array_values(array_filter(array_map('intval', explode(',', $_GET['tags']))));
|
|
}
|
|
|
|
$queryHome = $conn->prepare("SELECT * FROM home WHERE idhome = ? AND iduser = ?");
|
|
$queryHome->bind_param('ii', $idhome, $iduserlogin);
|
|
$queryHome->execute();
|
|
$resultHome = $queryHome->get_result();
|
|
$homeData = $resultHome->fetch_assoc();
|
|
|
|
if (!$homeData) {
|
|
header('HTTP/1.1 400 Bad Request');
|
|
die(json_encode(['error' => 'Casa non trovata o accesso non autorizzato']));
|
|
}
|
|
|
|
// Modalità trasversale: se ci sono tag selezionati, si ignora la categoria
|
|
$crossCutting = !empty($tagIds);
|
|
|
|
$page_id = null;
|
|
if (!$crossCutting) {
|
|
$queryPageId = $conn->prepare("SELECT idpages FROM pages WHERE slug = ?");
|
|
$queryPageId->bind_param('s', $docpage);
|
|
$queryPageId->execute();
|
|
$resultPageId = $queryPageId->get_result();
|
|
$pageData = $resultPageId->fetch_assoc();
|
|
|
|
if (!$pageData) {
|
|
header('HTTP/1.1 400 Bad Request');
|
|
die(json_encode(['error' => 'Pagina non valida']));
|
|
}
|
|
$page_id = $pageData['idpages'];
|
|
}
|
|
|
|
// Costruisci la query per i documenti
|
|
$sql = "
|
|
SELECT d.*, s.section_name AS section_name,
|
|
GROUP_CONCAT(DISTINCT t.tag_name ORDER BY t.tag_name SEPARATOR ', ') AS tags
|
|
FROM documents d
|
|
LEFT JOIN sections s ON d.idsections = s.idsections
|
|
LEFT JOIN document_tags dt ON dt.document_id = d.document_id
|
|
LEFT JOIN tags t ON t.tag_id = dt.tag_id
|
|
WHERE 1=1
|
|
";
|
|
$params = [];
|
|
$types = '';
|
|
|
|
if (!$crossCutting) {
|
|
$sql .= " AND d.page_id = ?";
|
|
$params[] = $page_id;
|
|
$types .= 'i';
|
|
}
|
|
|
|
if ($showOnlyRequired) {
|
|
$sql .= " AND d.is_required = 1";
|
|
}
|
|
|
|
if ($sectionId) {
|
|
$sql .= " AND md5(s.section_name) = ?";
|
|
$params[] = $sectionId;
|
|
$types .= 's';
|
|
}
|
|
|
|
if ($searchName) {
|
|
$sql .= " AND d.document_name = ?";
|
|
$params[] = $searchName;
|
|
$types .= 's';
|
|
}
|
|
|
|
// Filtro per tag (OR): il documento deve avere ALMENO UNO dei tag selezionati
|
|
if (!empty($tagIds)) {
|
|
$placeholders = implode(',', array_fill(0, count($tagIds), '?'));
|
|
$sql .= " AND d.document_id IN (
|
|
SELECT document_id FROM document_tags
|
|
WHERE tag_id IN ($placeholders)
|
|
)";
|
|
foreach ($tagIds as $tid) {
|
|
$params[] = $tid;
|
|
$types .= 'i';
|
|
}
|
|
}
|
|
$sql .= " GROUP BY d.document_id ORDER BY s.section_name, d.document_name";
|
|
|
|
$queryDocuments = $conn->prepare($sql);
|
|
if (!empty($params)) {
|
|
$queryDocuments->bind_param($types, ...$params);
|
|
}
|
|
$queryDocuments->execute();
|
|
$resultDocuments = $queryDocuments->get_result();
|
|
|
|
$documents = [];
|
|
while ($row = $resultDocuments->fetch_assoc()) {
|
|
$sectionName = $row['section_name'] ?: 'Senza sezione';
|
|
$documents[$sectionName][] = $row;
|
|
}
|
|
|
|
$queryLoadedDocuments = $conn->prepare("SELECT * FROM doc_storage WHERE idhome = ?");
|
|
$queryLoadedDocuments->bind_param('i', $idhome);
|
|
$queryLoadedDocuments->execute();
|
|
$resultLoadedDocuments = $queryLoadedDocuments->get_result();
|
|
|
|
$loadedDocuments = [];
|
|
while ($row = $resultLoadedDocuments->fetch_assoc()) {
|
|
$loadedDocuments[$row['document_id']][] = $row;
|
|
}
|
|
|
|
$response = [
|
|
'homeName' => $homeData['name'] ?? '',
|
|
'homeAddress' => ($homeData['address'] ?? '') . ', ' . ($homeData['city'] ?? '') . ' ' . ($homeData['zip'] ?? ''),
|
|
'documents' => $documents,
|
|
'loadedDocuments' => $loadedDocuments
|
|
];
|
|
|
|
header('Content-Type: application/json');
|
|
echo json_encode($response, JSON_PRETTY_PRINT);
|
|
exit;
|