diff --git a/inc/menu.php b/inc/menu.php index 79444fd..34e692b 100755 --- a/inc/menu.php +++ b/inc/menu.php @@ -39,7 +39,7 @@
= htmlspecialchars($current_release['version']) ?>
-Veröffentlicht am: = date('d.m.Y', strtotime($current_release['release_date'])) ?>
-Keine Release Notes vorhanden.
- - -Veröffentlicht am: = date('d.m.Y', strtotime($release['release_date'])) ?>
-Neue Features:
\nBehobene Fehler:
\nHallo $recipient_name,
+Es wurde soeben eine neue Version in DoMiLi veröffentlicht:
+Dein DoMiLi-Admin
+ "; + + $mail->isHTML(true); + $mail->Subject = "DoMiLi: Neue Version veröffentlicht – " . $release_data['version']; + $mail->Body = $html_body; + $mail->AltBody = $text_body; + $mail->addAddress($recipient_email); + $mail->send(); + } catch (Exception $e) { + error_log("PHPMailer Fehler beim Senden an $recipient_email: " . $mail->ErrorInfo); + } + } + } + + $_SESSION['message'] = "Version veröffentlicht!"; + $_SESSION['message_type'] = 'success'; + } else { + $_SESSION['message'] = "Fehler beim Freigeben."; + $_SESSION['message_type'] = 'danger'; + } + header("Location: version.php"); + exit(); + } + + if (isset($_GET['action']) && $_GET['action'] === 'delete' && isset($_GET['id'])) { + $id = (int)$_GET['id']; + $stmt = mysqli_prepare($conn, "DELETE FROM releases WHERE id = ?"); + mysqli_stmt_bind_param($stmt, "i", $id); + if (mysqli_stmt_execute($stmt)) { + $_SESSION['message'] = "Version gelöscht!"; + $_SESSION['message_type'] = 'success'; + } else { + $_SESSION['message'] = "Fehler beim Löschen."; + $_SESSION['message_type'] = 'danger'; + } + mysqli_stmt_close($stmt); + header("Location: version.php"); + exit(); + } + + if (isset($_GET['action']) && $_GET['action'] === 'edit' && isset($_GET['id'])) { + $id = (int)$_GET['id']; + $stmt = mysqli_prepare($conn, "SELECT id, version, release_date, features, bugfixes, is_draft FROM releases WHERE id = ?"); + mysqli_stmt_bind_param($stmt, "i", $id); + mysqli_stmt_execute($stmt); + $edit_release = mysqli_fetch_assoc(mysqli_stmt_get_result($stmt)); + mysqli_stmt_close($stmt); + $edit_mode = true; + if (!$edit_release) { + $_SESSION['message'] = "Version nicht gefunden."; + $_SESSION['message_type'] = 'warning'; + } + } + + if ($_SERVER["REQUEST_METHOD"] === "POST") { + $version = trim($_POST['version'] ?? ''); + $date = trim($_POST['date'] ?? ''); + $features = trim($_POST['features'] ?? ''); + $bugfixes = trim($_POST['bugfixes'] ?? ''); + $id = !empty($_POST['id']) ? (int)$_POST['id'] : null; + + if (empty($version) || empty($date)) { + $_SESSION['message'] = "Versionsnummer und Datum sind erforderlich."; + $_SESSION['message_type'] = 'danger'; + } elseif (!preg_match('/^v\d+\.\d+\.\d+$/', $version)) { + $_SESSION['message'] = "Ungültiges Versionsformat. Beispiel: v1.4.2"; + $_SESSION['message_type'] = 'danger'; + } elseif (!strtotime($date)) { + $_SESSION['message'] = "Ungültiges Datum."; + $_SESSION['message_type'] = 'danger'; + } else { + if ($id) { + $stmt = mysqli_prepare($conn, "UPDATE releases SET version = ?, release_date = ?, features = ?, bugfixes = ? WHERE id = ?"); + mysqli_stmt_bind_param($stmt, "ssssi", $version, $date, $features, $bugfixes, $id); + } else { + $stmt = mysqli_prepare($conn, "INSERT INTO releases (version, release_date, features, bugfixes, is_draft) VALUES (?, ?, ?, ?, 1)"); + mysqli_stmt_bind_param($stmt, "ssss", $version, $date, $features, $bugfixes); + } + + if (mysqli_stmt_execute($stmt)) { + $_SESSION['message'] = $id ? "Version aktualisiert!" : "Entwurf gespeichert!"; + $_SESSION['message_type'] = 'success'; + mysqli_stmt_close($stmt); + header("Location: version.php"); + exit(); + } else { + $_SESSION['message'] = "Fehler beim Speichern."; + $_SESSION['message_type'] = 'danger'; + } + mysqli_stmt_close($stmt); + } + } +} + +if (isset($_SESSION['message'])) { + $message = $_SESSION['message']; + $message_type = $_SESSION['message_type']; + unset($_SESSION['message'], $_SESSION['message_type']); +} + +if ($is_admin) { + $result = mysqli_query($conn, "SELECT id, version, release_date, features, bugfixes, is_draft FROM releases ORDER BY release_date DESC, id DESC"); +} else { + $result = mysqli_query($conn, "SELECT id, version, release_date, features, bugfixes FROM releases WHERE is_draft = 0 ORDER BY release_date DESC, id DESC"); +} + +$releases = []; +while ($row = mysqli_fetch_assoc($result)) { + $row['features_list'] = array_filter(array_map('trim', explode("\n", $row['features'] ?? ''))); + $row['bugfixes_list'] = array_filter(array_map('trim', explode("\n", $row['bugfixes'] ?? ''))); + $releases[] = $row; +} + +$latest_published_version = null; +foreach ($releases as $rel) { + if (($rel['is_draft'] ?? 0) == 0) { + $latest_published_version = $rel['version']; + break; + } +} + +require_once('inc/header.php'); +?> + +Keine veröffentlichten Release Notes vorhanden.
+ + +Veröffentlicht am: = date('d.m.Y', strtotime($release['release_date'])) ?>
+ + +Neue Features:
+Behobene Fehler:
+