From 4130fd431d8c54573f231b4334dc02196d35f832 Mon Sep 17 00:00:00 2001 From: Connor Thomson Date: Sun, 20 Sep 2026 20:21:07 -0700 Subject: Add a drop down menu and signout --- css/desktop/dropdown.css | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ css/desktop/navbar.css | 5 +---- html/account.html | 8 +++++++- html/stylesheets.html | 1 + php/session.php | 19 ++++++++++++++++++ signout/index.php | 28 ++++++++++++++++++++++++++ 6 files changed, 108 insertions(+), 5 deletions(-) create mode 100755 css/desktop/dropdown.css create mode 100755 signout/index.php diff --git a/css/desktop/dropdown.css b/css/desktop/dropdown.css new file mode 100755 index 0000000..4691602 --- /dev/null +++ b/css/desktop/dropdown.css @@ -0,0 +1,52 @@ +/* + * GNUfault.org - GNUfault's website + * Copyright (C) 2026 Connor Thomson + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +.account .toggle { + display: none; +} + +.account .username { + margin: 3px; + cursor: pointer; +} + +.account .username:hover { + text-decoration: underline; +} + +.account .menu { + display: none; + position: absolute; + top: 100%; + right: 5px; + padding: 3px; + background-color: white; + border: 1px solid #12A3EB; + border-radius: 3px; +} + +.account .toggle:checked ~ .menu { + display: block; +} + +.account .menu a { + display: block; + margin: 0; + padding: 1px 3px 1px 3px; + white-space: nowrap; +} diff --git a/css/desktop/navbar.css b/css/desktop/navbar.css index c013565..c1e8ee2 100755 --- a/css/desktop/navbar.css +++ b/css/desktop/navbar.css @@ -17,6 +17,7 @@ */ .header .navbar { + position: relative; height: 35px; padding: 5px; background-color: #CADCEB; @@ -35,7 +36,3 @@ .header .navbar a:hover { text-decoration: underline; } - -.header .navbar .username { - margin: 3px; -} diff --git a/html/account.html b/html/account.html index cad5558..251d33e 100755 --- a/html/account.html +++ b/html/account.html @@ -16,4 +16,10 @@ along with this program. If not, see . --> -{{username}} + diff --git a/html/stylesheets.html b/html/stylesheets.html index 4e3852c..8c97095 100755 --- a/html/stylesheets.html +++ b/html/stylesheets.html @@ -26,3 +26,4 @@ + diff --git a/php/session.php b/php/session.php index acb2df3..6f2d714 100755 --- a/php/session.php +++ b/php/session.php @@ -84,6 +84,25 @@ function set_user_id(int $user_id): void { $_SESSION['user_id'] = $user_id; } +function sign_out(): void { + if (!has_session()) { + return; + } + + start_session(); + + $_SESSION = []; + + $parameters = session_cookie(0); + $parameters['expires'] = time() - 3600; + + unset($parameters['lifetime']); + + setcookie(session_name(), '', $parameters); + + session_destroy(); +} + function get_user_id(): ?int { if (!has_session()) { return null; diff --git a/signout/index.php b/signout/index.php new file mode 100755 index 0000000..cf44de6 --- /dev/null +++ b/signout/index.php @@ -0,0 +1,28 @@ +. + */ + +define('ROOT', rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/'); + +require_once ROOT . '/php/session.php'; + +sign_out(); + +header("Location: /"); + +?> -- cgit v1.2.3