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 @@
  • paletteFarben
  • eventTerminplanung
  • groupBenutzer
  • -
  • infoRelease Notes
  • +
  • infoRelease Notes
  • diff --git a/info.php b/info.php deleted file mode 100755 index 589c42e..0000000 --- a/info.php +++ /dev/null @@ -1,215 +0,0 @@ - - -
    - - - - -
    -
    -

    ℹ️ Info & Versionshinweise

    - - -
    -
    -

    Aktuelle Version

    -
    -
    -

    -

    Veröffentlicht am:

    -
    -
    - - -
    -
    -

    Release Notes

    - - - -
    -
    - - -
    -
    -
    -
    - - - -
    - - -
    Format: v1.4.2
    -
    -
    - - -
    -
    - - -
    -
    - - Abbrechen -
    -
    -
    -
    - - - -

    Keine Release Notes vorhanden.

    - - -
    -
    -
    -

    Veröffentlicht am:

    -
      - -
    • - -
    -
    - - - -
    - - - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/version.php b/version.php new file mode 100755 index 0000000..42ef130 --- /dev/null +++ b/version.php @@ -0,0 +1,402 @@ +$1', $text); + $text = preg_replace('/\[i\](.*?)\[\/i\]/i', '$1', $text); + return $text; +} + +// 🔹 Holt alle Benutzer mit gültiger E-Mail +function get_all_user_emails($conn) +{ + $stmt = mysqli_prepare($conn, "SELECT id, username, email FROM users WHERE email IS NOT NULL AND email != ''"); + mysqli_stmt_execute($stmt); + $result = mysqli_stmt_get_result($stmt); + $users = []; + while ($row = mysqli_fetch_assoc($result)) { + $users[] = $row; + } + mysqli_stmt_close($stmt); + return $users; +} + +$is_admin = ($_SESSION['role'] === 'admin'); +$message = ''; +$message_type = ''; +$edit_mode = false; +$edit_release = null; + +if ($is_admin) { + if (isset($_GET['action']) && $_GET['action'] === 'publish' && isset($_GET['id'])) { + $id = (int)$_GET['id']; + + $stmt_data = mysqli_prepare($conn, "SELECT version, release_date, features, bugfixes FROM releases WHERE id = ?"); + mysqli_stmt_bind_param($stmt_data, "i", $id); + mysqli_stmt_execute($stmt_data); + $release_data = mysqli_fetch_assoc(mysqli_stmt_get_result($stmt_data)); + mysqli_stmt_close($stmt_data); + + if (!$release_data) { + $_SESSION['message'] = "Version nicht gefunden."; + $_SESSION['message_type'] = 'danger'; + header("Location: version.php"); + exit(); + } + + $stmt = mysqli_prepare($conn, "UPDATE releases SET is_draft = 0 WHERE id = ?"); + mysqli_stmt_bind_param($stmt, "i", $id); + $success = mysqli_stmt_execute($stmt); + mysqli_stmt_close($stmt); + + if ($success) { + // 🔹 Sende E-Mail an alle Benutzer mit gültiger E-Mail + $all_users = get_all_user_emails($conn); + + if (!empty($all_users) && file_exists(__DIR__ . '/vendor/autoload.php')) { + require_once __DIR__ . '/vendor/autoload.php'; + + $version = htmlspecialchars($release_data['version']); + $release_date_raw = date('d.m.Y', strtotime($release_data['release_date'])); + $version_url = APP_URL . '/version.php'; + $app_url = APP_URL; + + $features = array_filter(array_map('trim', explode("\n", $release_data['features'] ?? ''))); + $bugs = array_filter(array_map('trim', explode("\n", $release_data['bugfixes'] ?? ''))); + + foreach ($all_users as $user) { + $recipient_email = $user['email']; + $recipient_name = $user['username'] ?? 'Benutzer'; + + try { + $mail = new \PHPMailer\PHPMailer\PHPMailer(true); + $mail->CharSet = 'UTF-8'; + $mail->isSMTP(); + $mail->Host = SMTP_HOST; + $mail->SMTPAuth = true; + $mail->Username = SMTP_USERNAME; + $mail->Password = SMTP_PASSWORD; + $mail->SMTPSecure = SMTP_ENCRYPTION; + $mail->Port = SMTP_PORT; + $mail->setFrom(MAIL_FROM_ADDRESS, MAIL_FROM_NAME); + + // Text-Version + $text_body = "Hallo $recipient_name,\n\n"; + $text_body .= "Es wurde soeben eine neue Version in DoMiLi veröffentlicht:\n\n"; + $text_body .= "Version: $version\n"; + $text_body .= "Veröffentlicht am: $release_date_raw\n"; + $text_body .= "Details: $version_url\n\n"; + + if (!empty($features)) { + $text_body .= "Neue Features:\n"; + foreach ($features as $f) { + $text_body .= "- " . strip_tags(parse_formatting($f)) . "\n"; + } + $text_body .= "\n"; + } + if (!empty($bugs)) { + $text_body .= "Behobene Fehler:\n"; + foreach ($bugs as $b) { + $text_body .= "- " . strip_tags(parse_formatting($b)) . "\n"; + } + $text_body .= "\n"; + } + + $text_body .= "Direkt zur App: $app_url\n\n"; + $text_body .= "Dein DoMiLi-Admin"; + + // HTML-Version + $html_features = ''; + if (!empty($features)) { + $html_features .= "

    Neue Features:

    \n\n"; + } + + $html_bugs = ''; + if (!empty($bugs)) { + $html_bugs .= "

    Behobene Fehler:

    \n\n"; + } + + $html_body = " +

    Hallo $recipient_name,

    +

    Es wurde soeben eine neue Version in DoMiLi veröffentlicht:

    + + $html_features + $html_bugs +

    Direkt zur App

    +

    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'); +?> + +
    + + + + +
    +
    +

    ℹ️ Info & Versionshinweise

    + +
    +
    +

    Release Notes

    + + + +
    +
    + + +
    +
    +
    +
    + + + +
    + + +
    Format: v1.4.2
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + Abbrechen +
    +
    +
    +
    + + + +

    Keine veröffentlichten Release Notes vorhanden.

    + + +
    +
    +
    + + + Entwurf + + aktuelle Version + +
    +

    Veröffentlicht am:

    + + +

    Neue Features:

    +
      + +
    • + +
    + + + +

    Behobene Fehler:

    +
      + +
    • + +
    + +
    + + + +
    + + + +
    +
    +
    +
    +
    + + \ No newline at end of file