132 lines
3.5 KiB
PHP
132 lines
3.5 KiB
PHP
<?php
|
|
/**
|
|
* app/modules/floors/save.php
|
|
*
|
|
* Speichert / aktualisiert ein Stockwerk
|
|
*/
|
|
|
|
// Nur POST
|
|
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
|
header('Location: ?module=floors&action=list');
|
|
exit;
|
|
}
|
|
|
|
// =========================
|
|
// Daten einlesen
|
|
// =========================
|
|
$floorId = (int)($_POST['id'] ?? 0);
|
|
$name = trim($_POST['name'] ?? '');
|
|
$buildingId = (int)($_POST['building_id'] ?? 0);
|
|
$level = isset($_POST['level']) ? (int)$_POST['level'] : null;
|
|
$comment = trim($_POST['comment'] ?? '');
|
|
$floorSvgContent = trim($_POST['floor_svg_content'] ?? '');
|
|
|
|
// =========================
|
|
// Validierung
|
|
// =========================
|
|
$errors = [];
|
|
|
|
if (empty($name)) {
|
|
$errors[] = "Name ist erforderlich";
|
|
}
|
|
|
|
if ($buildingId <= 0) {
|
|
$errors[] = "Gebäude ist erforderlich";
|
|
}
|
|
|
|
// Falls Fehler: zurück zum Edit-Formular
|
|
if (!empty($errors)) {
|
|
$_SESSION['error'] = implode(', ', $errors);
|
|
$redirectUrl = $floorId ? "?module=floors&action=edit&id=$floorId" : "?module=floors&action=edit";
|
|
header("Location: $redirectUrl");
|
|
exit;
|
|
}
|
|
|
|
// =========================
|
|
// SVG aus Editor verarbeiten (optional)
|
|
// =========================
|
|
$svgPath = null;
|
|
if ($floorSvgContent !== '') {
|
|
$storedSvgPath = storeSvgEditorContent($sql, $floorId, $floorSvgContent);
|
|
if ($storedSvgPath === false) {
|
|
$_SESSION['error'] = "SVG aus dem Editor konnte nicht gespeichert werden";
|
|
$redirectUrl = $floorId ? "?module=floors&action=edit&id=$floorId" : "?module=floors&action=edit";
|
|
header("Location: $redirectUrl");
|
|
exit;
|
|
}
|
|
$svgPath = $storedSvgPath;
|
|
}
|
|
|
|
// =========================
|
|
// In DB speichern
|
|
// =========================
|
|
if ($floorId > 0) {
|
|
// UPDATE
|
|
if ($svgPath) {
|
|
$sql->set(
|
|
"UPDATE floors SET name = ?, building_id = ?, level = ?, comment = ?, svg_path = ? WHERE id = ?",
|
|
"siissi",
|
|
[$name, $buildingId, $level, $comment, $svgPath, $floorId]
|
|
);
|
|
} else {
|
|
$sql->set(
|
|
"UPDATE floors SET name = ?, building_id = ?, level = ?, comment = ? WHERE id = ?",
|
|
"siiss",
|
|
[$name, $buildingId, $level, $comment, $floorId]
|
|
);
|
|
}
|
|
} else {
|
|
// INSERT
|
|
$sql->set(
|
|
"INSERT INTO floors (name, building_id, level, comment, svg_path) VALUES (?, ?, ?, ?, ?)",
|
|
"siiss",
|
|
[$name, $buildingId, $level, $comment, $svgPath]
|
|
);
|
|
}
|
|
|
|
$_SESSION['success'] = "Stockwerk gespeichert";
|
|
|
|
// =========================
|
|
// Redirect
|
|
// =========================
|
|
header('Location: ?module=floors&action=list');
|
|
exit;
|
|
|
|
function storeSvgEditorContent($sql, $floorId, $content)
|
|
{
|
|
$normalized = trim($content);
|
|
if ($normalized === '' || stripos($normalized, '<svg') === false) {
|
|
return false;
|
|
}
|
|
|
|
$relativePath = null;
|
|
if ($floorId > 0) {
|
|
$existing = $sql->single(
|
|
"SELECT svg_path FROM floors WHERE id = ?",
|
|
"i",
|
|
[$floorId]
|
|
);
|
|
$candidate = trim((string)($existing['svg_path'] ?? ''));
|
|
if ($candidate !== '') {
|
|
$relativePath = ltrim($candidate, "/\\");
|
|
}
|
|
}
|
|
|
|
if (!$relativePath) {
|
|
$relativePath = 'uploads/floorplans/' . uniqid('floor_') . '.svg';
|
|
}
|
|
|
|
$absolutePath = __DIR__ . '/../../' . $relativePath;
|
|
$targetDir = dirname($absolutePath);
|
|
if (!is_dir($targetDir)) {
|
|
mkdir($targetDir, 0755, true);
|
|
}
|
|
|
|
$written = file_put_contents($absolutePath, $normalized);
|
|
if ($written === false) {
|
|
return false;
|
|
}
|
|
|
|
return $relativePath;
|
|
}
|