PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC] ); } if (!in_array($publicScriptName, $publicAccessAllowlist, true) && !$canAccessCurrentPage) { if (!$loggedIn) { header('Location: ' . $publicBasePath . 'login.php'); exit; } $userHasPagePermission = false; if ($pdoHeader !== null && isset($manageablePublicPages[$publicScriptName], $_SESSION['user_id'])) { try { $stmtPagePermission = $pdoHeader->prepare(" SELECT 1 FROM `app_user_page_permissions` WHERE `user_id` = :user_id AND `page_key` = :page_key LIMIT 1 "); $stmtPagePermission->execute([ ':user_id' => (int) $_SESSION['user_id'], ':page_key' => $publicScriptName, ]); $userHasPagePermission = (bool) $stmtPagePermission->fetchColumn(); } catch (Throwable $e) { $userHasPagePermission = false; } } if ($userHasPagePermission) { $canAccessCurrentPage = true; } } if (!in_array($publicScriptName, $publicAccessAllowlist, true) && !$canAccessCurrentPage) { if (!$loggedIn) { header('Location: ' . $publicBasePath . 'login.php'); exit; } http_response_code(403); ?> Zugriff verweigert

Zugriff verweigert

Diese Seite ist aktuell nur für Benutzer mit der Rolle admin oder master freigegeben.

Abmelden

prepare( 'SELECT id, name, latitude, longitude, elevation, timezone FROM app_user_locations WHERE user_id = ? AND is_default = 1 LIMIT 1' ); $stmtLoc->execute([(int)$_SESSION['user_id']]); $currentLocation = $stmtLoc->fetch() ?: null; } if ($hasFullAdminAccess && $pdoHeader !== null) { $stmtPendingUsers = $pdoHeader->query('SELECT COUNT(*) FROM app_users WHERE is_active = 0'); $pendingApprovals = (int)$stmtPendingUsers->fetchColumn(); } // Favoriten-Kometen des eingeloggten Users für den Sternenhimmel laden $favCometsForCanvas = []; if ($loggedIn && isset($_SESSION['user_id']) && $pdoHeader !== null) { try { $stmtFavComets = $pdoHeader->prepare( 'SELECT c.designation_and_name FROM app_user_comets uc JOIN comets_mpc c ON c.id = uc.comet_id WHERE uc.user_id = ? AND uc.is_favorite = 1 ORDER BY c.designation_and_name LIMIT 8' ); $stmtFavComets->execute([(int)$_SESSION['user_id']]); $favCometsForCanvas = $stmtFavComets->fetchAll(PDO::FETCH_COLUMN); } catch (Throwable $e) { $favCometsForCanvas = []; } } $menuGroups = [ [ 'title' => 'Himmel & Planeten', 'links' => [ ['href' => 'moonphase.php', 'label' => 'Mondphase'], ['href' => 'moonyear.php', 'label' => 'Mondphasen-Jahresübersicht'], ['href' => 'planetensichtbarkeit.php', 'label' => 'Planetensichtbarkeit'], ['href' => 'ephemeriden.php', 'label' => 'Ephemeriden'], ['href' => 'comets.php', 'label' => 'Kometen'], ['href' => 'astronomical_conversions.php', 'label' => 'Astronomical Conversions'], ['href' => 'tcrb_lightcurve.php', 'label' => 'T CrB Lichtkurve'], ['href' => 'solarsystem.php', 'label' => 'Sonnensystem'], ['href' => 'mars.php', 'label' => 'Mars'], ['href' => 'jupitersystem.php', 'label' => 'Jupitersystem'], ['href' => 'tagbogen.php', 'label' => 'Tagbogen'], ['href' => 'sternenhimmel.php', 'label' => 'Sternenhimmel'], ['href' => 'drehbare_sternkarte.php', 'label' => 'Drehbare Sternkarte'], ['href' => 'satellitenhimmel.php', 'label' => 'Satellitenhimmel'], ['href' => 'meteorshowers.php', 'label' => 'Meteorströme'], ['href' => 'asteroid_temp.php', 'label' => 'Asteroid-Temperatur'], ['href' => 'geocron/index.php', 'label' => 'Geocron'], ['href' => 'geocron3d.php', 'label' => 'Geocron 3D'], ['href' => 'geocron3d_C.php', 'label' => 'Geocron 3D Cesium'], ['href' => 'universesandbox.php', 'label' => 'Universe Sandbox'], ], ], [ 'title' => 'Finsternisse & Bedeckungen', 'links' => [ ['href' => 'mondfinsternis.php', 'label' => 'Mondfinsternis'], ['href' => 'sonnenfinsternis.php', 'label' => 'Sonnenfinsternis'], ['href' => 'bedeckung.php', 'label' => 'Bedeckungsphänomene'], ['href' => 'sternbedeckungen.php', 'label' => 'Mond-Stern-Bedeckungen'], ], ], ]; $adminLinks = [ ['href' => 'admin_users.php', 'label' => 'Benutzerverwaltung'], ['href' => 'monatsvorhersage.php', 'label' => 'Monatsvorhersage'], ['href' => 'telegram/broadcast_test.php', 'label' => 'Telegram-Test'], ]; $accountLinks = [ ['href' => 'settings.php', 'label' => 'Einstellungen'], ['href' => 'my_favorites.php', 'label' => 'Favoriten'], ]; if ($loggedIn && !$hasFullAdminAccess && $pdoHeader !== null) { $allowedPageKeys = []; try { $stmtAllowedPages = $pdoHeader->prepare(" SELECT `page_key` FROM `app_user_page_permissions` WHERE `user_id` = :user_id "); $stmtAllowedPages->execute([ ':user_id' => (int) ($_SESSION['user_id'] ?? 0), ]); foreach ($stmtAllowedPages as $allowedPageRow) { $pageKey = trim((string) ($allowedPageRow['page_key'] ?? '')); if ($pageKey !== '') { $allowedPageKeys[$pageKey] = true; } } } catch (Throwable $e) { $allowedPageKeys = []; } foreach ($menuGroups as &$group) { $group['links'] = array_values(array_filter( $group['links'], static function (array $link) use ($allowedPageKeys, $publicAccessAllowlist): bool { $href = trim((string) ($link['href'] ?? '')); return $href !== '' && (isset($allowedPageKeys[$href]) || in_array($href, $publicAccessAllowlist, true)); } )); } unset($group); $menuGroups = array_values(array_filter( $menuGroups, static fn (array $group): bool => !empty($group['links']) )); $accountLinks = array_values(array_filter( $accountLinks, static function (array $link) use ($allowedPageKeys, $publicAccessAllowlist): bool { $href = trim((string) ($link['href'] ?? '')); return $href !== '' && (isset($allowedPageKeys[$href]) || in_array($href, $publicAccessAllowlist, true)); } )); } ?> <?= htmlspecialchars($title, ENT_QUOTES, 'UTF-8') ?> >