Compare commits

...

60 Commits

Author SHA1 Message Date
niklas.ortmann c62ff5b2c0 refactoring 2026-06-01 22:53:28 +02:00
niklas.ortmann ad422a134d refactoring 2026-06-01 22:52:42 +02:00
niklas.ortmann 9fce9ec8dd refactoring 2026-06-01 22:51:46 +02:00
niklas.ortmann a329137de2 refactoring 2026-06-01 22:48:39 +02:00
caroline.slt 21bdb0d66d Weitere Reviewänderungen 2026-05-31 22:53:58 +02:00
caroline.slt 5db4ad3e63 Weitere Reviewänderungen 2026-05-31 22:49:13 +02:00
caroline.slt 2ce13cef72 Weitere Reviewänderungen 2026-05-31 22:42:16 +02:00
caroline.slt 02551049e0 Weitere Reviewänderungen 2026-05-31 22:38:29 +02:00
caroline.slt 55e9fa6a20 Weitere Reviewänderungen 2026-05-31 22:34:11 +02:00
caroline.slt c82378baa8 Weitere Reviewänderungen 2026-05-31 22:26:39 +02:00
caroline.slt 541d5b4c5e Weitere Reviewänderungen 2026-05-31 22:21:50 +02:00
caroline.slt f9ab3f8db2 session start entfernt 2026-05-31 21:53:30 +02:00
caroline.slt 6c5047be30 Review Changes 2026-05-31 21:42:46 +02:00
caroline.slt 25f6d2bf4a Review Changes 2026-05-31 21:35:54 +02:00
caroline.slt 4d8f338649 DAO Pattern angepasst & Passwörter gehashed 2026-05-27 19:25:58 +02:00
caroline.slt 46a307a5b0 First Implementation 2026-05-26 23:14:12 +02:00
caroline.slt 7706c7dfbf First Implementation 2026-05-26 23:06:22 +02:00
caroline.slt a946cee891 First Implementation 2026-05-26 22:59:48 +02:00
caroline.slt 4d4b8aeb99 First Implementation 2026-05-26 00:20:34 +02:00
NOrtmann1 ee7986bef3 Update index.php 2026-05-21 21:03:38 +02:00
NOrtmann1 8de1b1bdb5 Update index.php 2026-05-21 21:02:46 +02:00
NOrtmann1 4a663391ef Update navbar.css 2026-05-21 21:00:20 +02:00
niklas.ortmann 4cd877ea4c Merge pull request 'PHP: Dynamischer Content' (#8) from PHP_DynamischerContent into dev
Reviewed-on: #8
2026-05-21 20:57:26 +02:00
NOrtmann1 0f573d30ae linkanpassungen 2026-05-21 17:36:18 +02:00
NOrtmann1 fdd56c10b8 Update home.php 2026-05-21 17:33:42 +02:00
NOrtmann1 46daf72a14 Update index.php 2026-05-21 17:32:43 +02:00
NOrtmann1 896e6abcd8 login & register -> /content/ 2026-05-21 17:31:45 +02:00
NOrtmann1 95e5cf0908 navbar linkanpassungen 2026-05-21 17:30:07 +02:00
NOrtmann1 be35a00cef Dateien in richtige Ordner + statische HTML vom content entfernt 2026-05-21 17:19:40 +02:00
NOrtmann1 b616251511 dynamic content test
profil wird dynamisch in die index.php integriert (Test)
2026-05-21 17:13:52 +02:00
NOrtmann1 3f5313dd00 Update 404.php 2026-05-19 14:49:06 +02:00
NOrtmann1 f909d0453b Update 404.php 2026-05-13 22:55:47 +02:00
NOrtmann1 d5f4f2b8a5 Update main.css 2026-05-13 22:53:32 +02:00
niklas.ortmann 87a8e9b7d2 Merge pull request 'designcss2 zu dev' (#7) from designcss2 into dev
Reviewed-on: #7
2026-05-13 22:50:24 +02:00
NOrtmann1 729b0f08a1 Update main.css 2026-05-13 22:49:57 +02:00
NOrtmann1 2907bcdd67 Update home.php 2026-05-13 22:44:23 +02:00
NOrtmann1 65935c644b Update profile.php 2026-05-13 22:09:59 +02:00
NOrtmann1 8645900035 Update profile.php 2026-05-13 22:09:25 +02:00
NOrtmann1 49a8d49296 logo aus login und register entfernt 2026-05-13 21:53:59 +02:00
NOrtmann1 bc1051e4a2 Update register.php 2026-05-13 21:50:06 +02:00
NOrtmann1 d8f8fbbdd4 Update login.php 2026-05-13 21:48:35 +02:00
NOrtmann1 baf3f88e1e Update login.php 2026-05-13 21:47:51 +02:00
NOrtmann1 480b6cd4ae Update 404.php 2026-05-13 18:43:35 +02:00
NOrtmann1 29b588babb testing... 2026-05-13 18:41:29 +02:00
NOrtmann1 a29e48efad Update main.css 2026-05-13 18:11:03 +02:00
NOrtmann1 84a9f7063a Merge branch 'navbar' into dev 2026-05-13 18:08:42 +02:00
niklas.ortmann 58f7be9d52 Merge pull request 'Last Implementation' (#6) from designcss into dev
Reviewed-on: #6
2026-05-13 18:00:19 +02:00
caroschulte02-alt d497ea4fc3 First Implementation 2026-05-13 16:29:31 +02:00
caroschulte02-alt 80316e080a First Implementation 2026-05-13 16:18:12 +02:00
viratex bf06df461d Merge pull request 'Home, sowie Login und Register Website haben nun CSS implementiert' (#5) from responsiveCSS into dev
Reviewed-on: #5
2026-05-13 15:14:37 +02:00
viratex 503df76d6b Merge branch 'dev' into responsiveCSS 2026-05-13 15:13:22 +02:00
rirat-0 829d532518 font weight anpassung 2026-05-13 14:31:14 +02:00
rirat-0 33b0283758 update der register seite 2026-05-13 13:27:23 +02:00
rirat-0 6abc244be7 anpassung der login seite und main css fuer accessibility 2026-05-13 12:48:35 +02:00
rirat-0 012e3b8b9b update css fuer login seite 2026-05-13 12:39:11 +02:00
rirat-0 9375ab90b0 update der login seite 2026-05-13 12:04:55 +02:00
niklas.ortmann 6198d7b9ae Merge pull request 'Fehlende CRUD-Operationen' (#3) from Fehlende-CRUD-Operationen into dev
Reviewed-on: #3
2026-05-13 12:04:38 +02:00
NOrtmann1 52bede8277 Update profile.php 2026-05-13 11:27:46 +02:00
rirat-0 b81216cef1 kleine fehler und farbe behoben 2026-05-12 18:03:37 +02:00
rirat-0 43f0c78b3d Napassung von home.php und der main.css fuer responsive design 2026-05-12 14:19:57 +02:00
29 changed files with 788 additions and 520 deletions
View File
Generated
+1
View File
@@ -10,6 +10,7 @@
<option name="highlightLevel" value="WARNING" /> <option name="highlightLevel" value="WARNING" />
<option name="transferred" value="true" /> <option name="transferred" value="true" />
</component> </component>
<component name="PhpProjectSharedConfiguration" php_language_level="8.5" />
<component name="PhpStanOptionsConfiguration"> <component name="PhpStanOptionsConfiguration">
<option name="transferred" value="true" /> <option name="transferred" value="true" />
</component> </component>
-41
View File
@@ -1,41 +0,0 @@
<!--
Seite: 404 Seite nicht gefunden
Funktion: Wenn eine Seite nicht gefunden wurde oder noch fehlt, dann wird hierauf verwiesen.
-->
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
<body>
<main>
<?php
include_once 'includes/navbar.php';
?>
<h1>404 - Seite nicht vorhanden</h1>
<p>
Später im Projekt sollen über index.php?pfad= ... der Inhalt der index.php dynamisch gesetzt werden.
Alle Content-Links der Navbar führen zunächst hier her. Exemplarisch wurden für die Fächer Informatik, Physik, Mathematik der Content als Seite erstellt und kann über die Navbar ausgekundschaftet werden.
</p>
</main>
<?php
include_once 'includes/footer.php';
?>
</body>
</html>
+12
View File
@@ -0,0 +1,12 @@
<!--
Seite: 404 Seite nicht gefunden
Funktion: Wenn eine Seite nicht gefunden wurde oder noch fehlt, dann wird hierauf verwiesen.
-->
<main>
<h1>404 - Seite nicht vorhanden</h1>
<p>
Später im Projekt sollen über index.php?pfad= ... der Inhalt der index.php dynamisch gesetzt werden.
Alle Content-Links der Navbar führen zunächst hier her. Exemplarisch wurden für die Fächer Informatik, Physik, Mathematik der Content als Seite erstellt und kann über die Navbar ausgekundschaftet werden.
</p>
</main>
@@ -2,28 +2,6 @@
Seite: Datenschutzerklärung Seite: Datenschutzerklärung
Inhalt: Informationen zur Datenverarbeitung gemäß DSGVO Inhalt: Informationen zur Datenverarbeitung gemäß DSGVO
--> -->
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
<body>
<?php
include_once 'includes/navbar.php';
?>
<main> <main>
<h1>Datenschutz</h1> <h1>Datenschutz</h1>
@@ -38,10 +16,3 @@ include_once 'includes/navbar.php';
</p> </p>
</main> </main>
<?php
include_once 'includes/footer.php';
?>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?php
require_once "php/model/LocalUserDAO.php";
$dao = new LocalUserDAO();
/*
Deregistrierung
Funktion: Entfernt User aus Dummy-Daten und beendet Session
*/
if (isset($_SESSION["user_email"])) {
$dao->deleteUser($_SESSION["user_email"]);
}
$_SESSION = [];
session_destroy();
header("Location: index.php");
exit();
+23 -17
View File
@@ -13,22 +13,28 @@
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no
sea takimata sanctus est Lorem ipsum dolor sit amet. sea takimata sanctus est Lorem ipsum dolor sit amet.
</p> </p>
<div>
<a href = "informatik.php" style = "padding: 5px; text-align: center; text-decoration: none; display: inline-block;"><b>Informatik</b></a> <br> <!-- Flexbox -->
<div> <div class="flexbox">
<a href="datenschutzVSdatensicherheit.php">Datenschutz vs. Datensicherheit</a> <div class="container">
</div> <a href="index.php?pfad=informatik" class="category-link">Informatik</a>
</div> <div class="article-link">
<div> <a href="datenschutzVSdatensicherheit.php">Datenschutz vs. Datensicherheit</a>
<a href = "mathe.php" style = "padding: 5px; text-align: center; text-decoration: none; display: inline-block;"><b>Mathe</b></a> <br> </div>
<div> </div>
<a href="pythagoras.php">Satz des Pythagoras</a>
</div> <div class="container">
</div> <a href="index.php?pfad=mathe" class="category-link">Mathe</a>
<div> <div class="article-link">
<a href = "physik.php" style = "padding: 5px; text-align: center; text-decoration: none; display: inline-block;"><b>Physik</b></a> <a href="pythagoras.php">Satz des Pythagoras</a>
<div> </div>
<a href="tunneleffekt.php">Der Tunneleffekt</a> </div>
</div>
<div class="container">
<a href="index.php?pfad=physik" class="category-link">Physik</a>
<div class="article-link">
<a href="tunneleffekt.php">Der Tunneleffekt</a>
</div>
</div>
</div> </div>
</main> </main>
-28
View File
@@ -2,27 +2,6 @@
Seite: Impressum Seite: Impressum
Inhalt: wer wie was auf der Webseite Inhalt: wer wie was auf der Webseite
--> -->
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
<body>
<?php
include_once 'includes/navbar.php';
?>
<main> <main>
@@ -38,10 +17,3 @@ include_once 'includes/navbar.php';
</p> </p>
</main> </main>
<?php
include_once 'includes/footer.php';
?>
</body>
</html>
-27
View File
@@ -2,26 +2,6 @@
Seite: Informatik Seite: Informatik
Inhalt: Eine Übersicht über alle Beiträge zum Fach Inhalt: Eine Übersicht über alle Beiträge zum Fach
--> -->
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
<body>
<?php
include_once 'includes/navbar.php';
?>
<main> <main>
<h1>Informatik</h1> <h1>Informatik</h1>
@@ -39,10 +19,3 @@ include_once 'includes/navbar.php';
<a href="datenschutzVSdatensicherheit.php">Datenschutz vs. Datensicherheit</a> <a href="datenschutzVSdatensicherheit.php">Datenschutz vs. Datensicherheit</a>
</div> </div>
</main> </main>
<?php
include_once 'includes/footer.php';
?>
</body>
</html>
+53
View File
@@ -0,0 +1,53 @@
<?php
$error = $error ?? null;
?>
<!--
Form: Login-Bereich
Funktion: Benutzerauthentifizierung und Zugang zum eigenen Profil, Erstellen von Beiträgen, etc.
-->
<main class="login-page">
<div class="login-container">
<h1>Bitte anmelden</h1>
<?php if ($error): ?>
<p style="color:red;">
<?php echo htmlspecialchars($error); ?>
</p>
<?php endif; ?>
<form method="post" action="index.php?pfad=login">
<p class="input-label">Benutzername/E-Mail-Adresse:</p>
<input type="email"
name="email"
class="login-input"
placeholder="E-Mail-Adresse"
required
autofocus>
<p class="input-label">Passwort:</p>
<input type="password"
name="password"
class="login-input"
placeholder="Passwort"
required>
<button type="submit"
value="anmelden"
name="loginSubmit"
class="login-button">
anmelden
</button>
<div class="register-link">
<a href="index.php?pfad=register">
Noch keinen Account? Jetzt hier registrieren!
</a>
</div>
</form>
</div>
</main>
+6
View File
@@ -0,0 +1,6 @@
<?php
$_SESSION = [];
session_destroy();
header("Location: index.php");
exit();
+1 -29
View File
@@ -2,27 +2,6 @@
Seite: Mathe Seite: Mathe
Inhalt: Eine Übersicht über alle Beiträge zum Fach Inhalt: Eine Übersicht über alle Beiträge zum Fach
--> -->
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
<body>
<?php
include_once 'includes/navbar.php';
?>
<main> <main>
<h1>Mathe</h1> <h1>Mathe</h1>
@@ -40,11 +19,4 @@ include_once 'includes/navbar.php';
<div> <div>
<a href="pythagoras.php">Satz des Pythagoras</a> <a href="pythagoras.php">Satz des Pythagoras</a>
</div> </div>
</main> </main>
<?php
include_once 'includes/footer.php';
?>
</body>
</html>
+1 -29
View File
@@ -2,27 +2,6 @@
Seite: Physik Seite: Physik
Inhalt: Eine Übersicht über alle Beiträge zum Fach Inhalt: Eine Übersicht über alle Beiträge zum Fach
--> -->
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
<body>
<?php
include_once 'includes/navbar.php';
?>
<main> <main>
<h1>Physik</h1> <h1>Physik</h1>
@@ -41,11 +20,4 @@ include_once 'includes/navbar.php';
<a href="tunneleffekt.php">Der Tunneleffekt</a> <a href="tunneleffekt.php">Der Tunneleffekt</a>
</div> </div>
</main> </main>
<?php
include_once 'includes/footer.php';
?>
</body>
</html>
+45
View File
@@ -0,0 +1,45 @@
<?php
include_once 'php/controller/profile-controller.php';
$user = $user ?? null;
?>
<main class="form-page">
<div class="form-container">
<h1>Mein Profil</h1>
<form>
<label class="input-label">Name</label>
<input type="text"
class="login-input"
readonly
value="<?php echo htmlspecialchars($user["username"] ?? ""); ?>">
<label class="input-label">Email-Adresse</label>
<input type="email"
class="login-input"
readonly
value="<?php echo htmlspecialchars($user["email"] ?? ""); ?>">
<label class="input-label">Passwort</label>
<input type="password"
class="login-input"
readonly
value="********">
</form>
<br>
<a href="index.php?pfad=deleteAccount" class="login-button">
Account löschen
</a>
<br><br>
<a href="index.php?pfad=logout" class="login-button">
Abmelden
</a>
</div>
</main>
+62
View File
@@ -0,0 +1,62 @@
<?php
include_once 'php/controller/register-controller.php';
$error = $error ?? null;
?>
<!--
Form: Registrierung
Funktion: Erstellung neuer Benutzerkonten
-->
<main class="login-page">
<div class="login-container">
<h1>Jetzt Registrieren!</h1>
<?php if ($error): ?>
<p style="color:red;">
<?php echo htmlspecialchars($error); ?>
</p>
<?php endif; ?>
<form method="post" action="index.php?pfad=register">
<p class="input-label">Email:</p>
<input type="email"
name="email"
class="login-input"
placeholder="mustermann@web.de"
required>
<p class="input-label">Vorname:</p>
<input type="text"
name="vorname"
class="login-input"
placeholder="Max"
required>
<p class="input-label">Nachname:</p>
<input type="text"
name="nachname"
class="login-input"
placeholder="Mustermann"
required>
<p class="input-label">Passwort:</p>
<input type="password"
name="password"
class="login-input"
placeholder="Passwort"
required>
<button type="submit"
value="register"
name="registerSubmit"
class="login-button">
kostenlos registrieren
</button>
</form>
</div>
</main>
+203 -5
View File
@@ -1,7 +1,205 @@
body {
background-color: coral; main {
max-width:1200px;
margin: 0 auto;
padding: 20px;
} }
a, button, input, select, textarea, label{ body {
font-family: Arial, Helvetica, sans-serif; background-color: #eef2f7;
} color: #1f2937;
margin: 0;
}
a, button, input, select, textarea, label, main{
font-family: Arial, Helvetica, sans-serif;
}
.flexbox {
display: flex;
flex-direction: column;
gap: 20px;
margin-top: 30px;
}
.container {
background-color: white;
border-radius: 8px;
padding: 15px;
border: 1px solid #dbe3ec;
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
transition: transform 0.2s, box-shadow 0.2s;
}
.container:hover {
transform: translateY(-3px);
box-shadow: 0 6px 18px rgba(0,0,0,0.12);
}
.category-link {
display: block;
text-align: left;
text-decoration: none;
font-weight: bold;
padding: 12px;
background-color: #2563eb;
color: white;
border-radius: 8px;
margin-bottom: 10px;
transition: background-color 0.2s, transform 0.2s, box-shadow 0.2s;
}
.category-link:hover {
background-color: #1d4ed8;
transform: translateY(-2px);
box-shadow: 0 4px 10px rgba(0,0,0,0.15);
}
.article-link a {
color: #1f2937;
text-decoration: none;
font-weight: bold;
transition: color 0.2s;
}
.article-link a:hover {
color: #2563eb;
text-decoration: underline;
}
@media (min-width: 1024px) {
.container {
padding: 25px;
}
}
/* Seite wird horizontal und vertikal zentriert */
.login-page {
display: flex;
justify-content: center;
align-items: center;
min-height: 80vh;
}
.login-container {
width: 90%;
max-width: 450px;
padding: 30px;
border: 1px solid #dbe3ec;
border-radius: 10px;
background-color: white;
box-shadow: 0 6px 20px rgba(0,0,0,0.1);
}
.logo-wrapper {
text-align: center;
margin-bottom: 20px;
}
.login-logo {
width: 120px;
height: auto;
}
.login-container h1 {
text-align: center;
margin-bottom: 25px;
font-size: 1.7rem;
color: #1e293b;
}
.input-label {
margin-bottom: 5px;
font-weight: bold;
width: 100%;
color: #1f2937;
}
.input-label {
margin-bottom: 5px;
font-weight: bold;
width: 100%;
color: #1f2937;
}
.login-input {
width: 100%;
padding: 12px;
margin-bottom: 20px;
border: 1px solid #d1d5db;
border-radius: 6px;
box-sizing: border-box;
font-size: 1rem;
background-color: white;
}
.login-input:focus {
outline: none;
border-color: #2563eb;
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);
}
.checkbox-wrapper {
margin-bottom: 20px;
color: #1f2937;
}
.login-button {
width: 100%;
padding: 12px;
background-color: #2563eb;
color: white;
border: none;
border-radius: 8px;
font-size: 1rem;
font-weight: bold;
cursor: pointer;
transition: background-color 0.2s, transform 0.2s, box-shadow 0.2s;
}
.login-button:hover {
background-color: #1d4ed8;
transform: translateY(-2px);
box-shadow: 0 4px 10px rgba(0,0,0,0.15);
}
.register-link {
margin-top: 20px;
text-align: center;
font-size: 0.9rem;
color: #1f2937;
}
.register-link a {
color: #2563eb;
text-decoration: none;
font-weight: bold;
transition: color 0.2s;
}
.register-link a:hover {
color: #1d4ed8;
text-decoration: underline;
}
/* Versteckt das doppelte Label fuer Screenreader/Accessibility */
.screenreader-only {
display: none;
}
/* Allgemeine Formularseiten */
.form-page {
display: flex;
justify-content: center;
padding: 40px 20px;
}
.form-container {
width: 90%;
max-width: 600px;
padding: 30px;
background-color: white;
border: 1px solid #dbe3ec;
border-radius: 10px;
box-shadow: 0 6px 20px rgba(0,0,0,0.1);
}
+2 -2
View File
@@ -149,8 +149,8 @@ CSS für die navbar
display: none; display: none;
} }
/* Responsive Anpassungen unter 660px (für z.B. Smartphones) */ /* Responsive Anpassungen unter 760px (für z.B. Smartphones) */
@media (max-width: 660px) { @media (max-width: 760px) {
.nav { .nav {
flex-direction: row; flex-direction: row;
flex-wrap: wrap; flex-wrap: wrap;
+1
View File
@@ -0,0 +1 @@
[]
+106 -66
View File
@@ -1,70 +1,84 @@
<?php
session_start();
?>
<!-- <!--
Globales Menü, wird via PHP später in alle Seiten eingebunden Globales Menü, wird via PHP später in alle Seiten eingebunden
--> -->
<nav class="nav"> <nav class="nav">
<div class="nav__left"> <div class="nav__left">
<a href="index.php" class="nav__logo"> <a href="index.php" class="nav__logo">
<img src="images/logos/logo_full.png" alt="Logo"> <img src="images/logos/logo_full.png" alt="Logo">
</a> </a>
</div> </div>
<!-- Mobile navbar mit Burger-Symbol --> <!-- Mobile navbar mit Burger-Symbol -->
<input type="checkbox" id="nav-toggle" class="nav__checkbox"> <input type="checkbox" id="nav-toggle" class="nav__checkbox">
<label for="nav-toggle" id="mobile-nav"> <label for="nav-toggle" id="mobile-nav">
<span></span> <!-- Burger Icon Symbol --> <span>☰</span>
</label> </label>
<ul id="mobile-nav" class="nav__mobile-menu"> <ul id="mobile-nav" class="nav__mobile-menu">
<li><a href="profile.php">Profil</a></li>
<li><a href="login.php">Anmelden</a></li> <?php if (isset($_SESSION['user'])): ?>
<li><a href="register.php">Registrieren</a></li>
<li><a href="index.php?pfad=profile">Profil</a></li>
<li><a href="index.php?pfad=logout">Abmelden</a></li>
<?php else: ?>
<li><a href="index.php?pfad=login">Anmelden</a></li>
<li><a href="index.php?pfad=register">Registrieren</a></li>
<?php endif; ?>
<li> <li>
<label class="nav__mobile-label">Sprachen</label> <label class="nav__mobile-label">Sprachen</label>
<ul class="nav__mobile-submenu"> <ul class="nav__mobile-submenu">
<li><a href="404.php">Deutsch</a></li> <li><a href="index.php?pfad=deutsch">Deutsch</a></li>
<li><a href="404.php">Englisch</a></li> <li><a href="index.php?pfad=englisch">Englisch</a></li>
<li><a href="404.php">Französisch</a></li> <li><a href="index.php?pfad=franzoesisch">Französisch</a></li>
<li><a href="404.php">Latein</a></li> <li><a href="index.php?pfad=latein">Latein</a></li>
<li><a href="404.php">Literatur</a></li> <li><a href="index.php?pfad=literatur">Literatur</a></li>
</ul> </ul>
</li> </li>
<li> <li>
<label class="nav__mobile-label">MINT</label> <label class="nav__mobile-label">MINT</label>
<ul class="nav__mobile-submenu"> <ul class="nav__mobile-submenu">
<li><a href="mathe.php">Mathematik</a></li> <li><a href="index.php?pfad=mathe">Mathematik</a></li>
<li><a href="404.php">Biologie</a></li> <li><a href="index.php?pfad=biologie">Biologie</a></li>
<li><a href="404.php">Chemie</a></li> <li><a href="index.php?pfad=chemie">Chemie</a></li>
<li><a href="physik.php">Physik</a></li> <li><a href="index.php?pfad=physik">Physik</a></li>
<li><a href="informatik.php">Informatik</a></li> <li><a href="index.php?pfad=informatik">Informatik</a></li>
<li><a href="404.php">Astronomie</a></li> <li><a href="index.php?pfad=astronomie">Astronomie</a></li>
</ul> </ul>
</li> </li>
<li> <li>
<label class="nav__mobile-label">Gesellschaft & Werte</label> <label class="nav__mobile-label">Gesellschaft & Werte</label>
<ul class="nav__mobile-submenu"> <ul class="nav__mobile-submenu">
<li><a href="404.php">Geschichte</a></li> <li><a href="index.php?pfad=geschichte">Geschichte</a></li>
<li><a href="404.php">Erdkunde</a></li> <li><a href="index.php?pfad=erdkunde">Erdkunde</a></li>
<li><a href="404.php">Sozialkunde</a></li> <li><a href="index.php?pfad=sozialkunde">Sozialkunde</a></li>
<li><a href="404.php">Wirtschaftskunde</a></li> <li><a href="index.php?pfad=wirtschaft">Wirtschaftskunde</a></li>
<li><a href="404.php">Religion</a></li> <li><a href="index.php?pfad=religion">Religion</a></li>
<li><a href="404.php">Ethikunterricht</a></li> <li><a href="index.php?pfad=ethik">Ethikunterricht</a></li>
<li><a href="404.php">Philosophie</a></li> <li><a href="index.php?pfad=philosophie">Philosophie</a></li>
<li><a href="404.php">Psychologie</a></li> <li><a href="index.php?pfad=psychologie">Psychologie</a></li>
<li><a href="404.php">Kunst</a></li> <li><a href="index.php?pfad=kunst">Kunst</a></li>
<li><a href="404.php">Musik</a></li> <li><a href="index.php?pfad=musik">Musik</a></li>
<li><a href="404.php">Theater</a></li> <li><a href="index.php?pfad=theater">Theater</a></li>
</ul> </ul>
</li> </li>
<li> <li>
<label class="nav__mobile-label">Technik & Praxis</label> <label class="nav__mobile-label">Technik & Praxis</label>
<ul class="nav__mobile-submenu"> <ul class="nav__mobile-submenu">
<li><a href="404.php">Technik</a></li> <li><a href="index.php?pfad=technik">Technik</a></li>
<li><a href="404.php">Werken</a></li> <li><a href="index.php?pfad=werken">Werken</a></li>
<li><a href="404.php">Hauswirtschaft</a></li> <li><a href="index.php?pfad=hauswirtschaft">Hauswirtschaft</a></li>
<li><a href="404.php">Sport</a></li> <li><a href="index.php?pfad=sport">Sport</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@@ -74,59 +88,85 @@ Globales Menü, wird via PHP später in alle Seiten eingebunden
<div class="nav__item nav__dropdown"> <div class="nav__item nav__dropdown">
<button class="nav__dropdown-toggle">Sprachen</button> <button class="nav__dropdown-toggle">Sprachen</button>
<div class="nav__dropdown-menu"> <div class="nav__dropdown-menu">
<a href="404.php">Deutsch</a> <a href="index.php?pfad=deutsch">Deutsch</a>
<a href="404.php">Englisch</a> <a href="index.php?pfad=englisch">Englisch</a>
<a href="404.php">Französisch</a> <a href="index.php?pfad=franzoesisch">Französisch</a>
<a href="404.php">Latein</a> <a href="index.php?pfad=latein">Latein</a>
<a href="404.php">Literatur</a> <a href="index.php?pfad=literatur">Literatur</a>
</div> </div>
</div> </div>
<div class="nav__item nav__dropdown"> <div class="nav__item nav__dropdown">
<button class="nav__dropdown-toggle">MINT</button> <button class="nav__dropdown-toggle">MINT</button>
<div class="nav__dropdown-menu"> <div class="nav__dropdown-menu">
<a href="mathe.php">Mathematik</a> <a href="index.php?pfad=mathe">Mathematik</a>
<a href="404.php">Biologie</a> <a href="index.php?pfad=biologie">Biologie</a>
<a href="404.php">Chemie</a> <a href="index.php?pfad=chemie">Chemie</a>
<a href="physik.php">Physik</a> <a href="index.php?pfad=physik">Physik</a>
<a href="informatik.php">Informatik</a> <a href="index.php?pfad=informatik">Informatik</a>
<a href="404.php">Astronomie</a> <a href="index.php?pfad=astronomie">Astronomie</a>
</div> </div>
</div> </div>
<div class="nav__item nav__dropdown"> <div class="nav__item nav__dropdown">
<button class="nav__dropdown-toggle">Gesellschaft & Werte</button> <button class="nav__dropdown-toggle">Gesellschaft & Werte</button>
<div class="nav__dropdown-menu"> <div class="nav__dropdown-menu">
<a href="404.php">Geschichte</a> <a href="index.php?pfad=geschichte">Geschichte</a>
<a href="404.php">Erdkunde</a> <a href="index.php?pfad=erdkunde">Erdkunde</a>
<a href="404.php">Sozialkunde</a> <a href="index.php?pfad=sozialkunde">Sozialkunde</a>
<a href="404.php">Wirtschaftskunde</a> <a href="index.php?pfad=wirtschaft">Wirtschaftskunde</a>
<a href="404.php">Religion</a> <a href="index.php?pfad=religion">Religion</a>
<a href="404.php">Ethikunterricht</a> <a href="index.php?pfad=ethik">Ethikunterricht</a>
<a href="404.php">Philosophie</a> <a href="index.php?pfad=philosophie">Philosophie</a>
<a href="404.php">Psychologie</a> <a href="index.php?pfad=psychologie">Psychologie</a>
<a href="404.php">Kunst</a> <a href="index.php?pfad=kunst">Kunst</a>
<a href="404.php">Musik</a> <a href="index.php?pfad=musik">Musik</a>
<a href="404.php">Theater</a> <a href="index.php?pfad=theater">Theater</a>
</div> </div>
</div> </div>
<div class="nav__item nav__dropdown"> <div class="nav__item nav__dropdown">
<button class="nav__dropdown-toggle">Technik & Praxis</button> <button class="nav__dropdown-toggle">Technik & Praxis</button>
<div class="nav__dropdown-menu"> <div class="nav__dropdown-menu">
<a href="404.php">Technik</a> <a href="index.php?pfad=technik">Technik</a>
<a href="404.php">Werken</a> <a href="index.php?pfad=werken">Werken</a>
<a href="404.php">Hauswirtschaft</a> <a href="index.php?pfad=hauswirtschaft">Hauswirtschaft</a>
<a href="404.php">Sport</a> <a href="index.php?pfad=sport">Sport</a>
</div> </div>
</div> </div>
</div> </div>
<div class="nav__right"> <div class="nav__right">
<a href = "profile.php" class="nav_item nav__link">Profil</a>
<div class="nav__search"> <?php if (isset($_SESSION['user'])): ?>
<?php
include_once 'search.php'; <a href="index.php?pfad=profile" class="nav__item nav__link">
?> Profil
</div> </a>
<a href = "login.php" class="nav__item nav__button">Anmelden</a>
<a href = "register.php" class="nav__item nav__button">Registrieren</a> <div class="nav__search">
<?php include_once 'search.php'; ?>
</div>
<a href="index.php?pfad=logout" class="nav__item nav__button">
Abmelden
</a>
<?php else: ?>
<div class="nav__search">
<?php include_once 'search.php'; ?>
</div>
<a href="index.php?pfad=login" class="nav__item nav__button">
Anmelden
</a>
<a href="index.php?pfad=register" class="nav__item nav__button">
Registrieren
</a>
<?php endif; ?>
</div> </div>
</nav> </nav>
+63 -25
View File
@@ -1,34 +1,72 @@
<!-- <?php
Seite: Hompage der Lernplattform session_start();
Funktion: Webseitengerüst, Anzeigen von Beiträgen, Suchfunktion etc. ob_start();
-->
<!DOCTYPE html>
<html lang="de">
<head> $pfad = $_GET["pfad"] ?? "home";
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
/*
Controller für Aktionen werden vor der HTML-Ausgabe geladen,
damit Weiterleitungen mit header() funktionieren.
*/
if ($pfad === "login") {
include_once "php/controller/login-controller.php";
}
<body> if ($pfad === "register") {
include_once "php/controller/register-controller.php";
}
if ($pfad === "logout") {
include_once "content/logout.php";
exit();
}
if ($pfad === "deleteAccount") {
include_once "content/deleteAccount.php";
exit();
}
?>
<!--
Seite: Index der Lernplattform
Funktion: Webseitengerüst, Anzeigen von Content
-->
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
<body>
<?php <?php
include_once 'includes/navbar.php'; include_once 'includes/navbar.php';
//Dynamischer Inhalt (später mit php...):
include_once 'content/home.php'; /*
?> Dynamischer Inhalt:
Je nach pfad-Parameter wird die passende Datei aus content geladen.
*/
if (file_exists('content/' . $pfad . '.php')) {
include_once 'content/' . $pfad . '.php';
} else {
include_once 'content/404.php';
}
<?php
include_once 'includes/footer.php'; include_once 'includes/footer.php';
?> ?>
</body>
</html> </body>
</html>
<?php
ob_end_flush();
?>
-51
View File
@@ -1,51 +0,0 @@
<!--
Form: Login-Bereich
Funktion: Benutzerauthentifizierung und Zugang zum eigenen Profil, Erstellen von Beiträgen, etc.
-->
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
<body>
<?php
include_once 'includes/navbar.php';
?>
<main>
<div style="width: 50%">
<h1 style="width: 60%; text-align: center">Bitte anmelden</h1><br>
<label id="inputEmail" >E-Mail-Adresse / </label>
<p style="width: 80%;">Benutzername/E-Mail-Adresse:</p>
<input type="email" name="email" style="width: 80%;" placeholder="E-Mail-Adresse" required autofocus>
<p style="width: 80%;">Passwort:</p>
<input type="password" name="password" style="width: 80%;" placeholder="Passwort" required>
<div style="width: 80%;">
<label>
<input type="checkbox" name="remember-me" value="1"> angemeldet bleiben
</label>
</div>
<button type="submit" value="anmelden" name="loginSubmit" style="width: 80%;">anmelden</button><br>
<div style="width: 70%; text-align: center">
<a href="register.php" style="text-align: center;"> Noch keinen Account? Jetzt hier registrieren! </a>
</div>
</div>
</main>
<?php
include_once 'includes/footer.php';
?>
</body>
</html>
+30
View File
@@ -0,0 +1,30 @@
<?php
require_once "php/model/LocalUserDAO.php";
$dao = new LocalUserDAO();
$error = null;
/*
Verarbeitung des Login-Formulars
Funktion: Prüft Benutzerdaten und erstellt Session für eingeloggten Nutzer
*/
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$email = $_POST["email"] ?? "";
$password = $_POST["password"] ?? "";
$user = $dao->findUser($email);
if ($user && password_verify($password, $user["password"])) {
$_SESSION["user"] = $user["username"];
$_SESSION["user_email"] = $user["email"];
header("Location: index.php");
exit();
} else {
$error = "Login fehlgeschlagen. Bitte überprüfe deine Eingaben.";
}
}
+20
View File
@@ -0,0 +1,20 @@
<?php
require_once "php/model/LocalUserDAO.php";
$dao = new LocalUserDAO();
if (!isset($_SESSION["user"])) {
header("Location: index.php?pfad=login");
exit();
}
$user = $dao->findUser($_SESSION["user_email"] ?? "");
if (!$user) {
$_SESSION = [];
session_destroy();
header("Location: index.php?pfad=login");
exit();
}
+40
View File
@@ -0,0 +1,40 @@
<?php
require_once "php/model/LocalUserDAO.php";
$dao = new LocalUserDAO();
$error = null;
/*
Verarbeitung des Registrierungs-Formulars
Funktion: Erstellt neuen Benutzer und speichert ihn im DAO + Session
*/
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$email = $_POST["email"] ?? "";
$vorname = $_POST["vorname"] ?? "";
$nachname = $_POST["nachname"] ?? "";
$password = password_hash(
$_POST["password"] ?? "",
PASSWORD_DEFAULT
);
if ($dao->findUser($email)) {
$error = "Diese E-Mail-Adresse ist bereits registriert.";
} else {
$dao->addUser(
$email,
$vorname . " " . $nachname,
$password
);
$_SESSION["user"] = $vorname . " " . $nachname;
$_SESSION["user_email"] = $email;
header("Location: index.php");
exit();
}
}
+64
View File
@@ -0,0 +1,64 @@
<?php
require_once "UserDAOInterface.php";
class LocalUserDAO implements UserDAOInterface {
private string $file = "data/users.json";
private function loadUsers() {
if (!file_exists($this->file)) {
return [];
}
$json = file_get_contents($this->file);
$users = json_decode($json, true);
return is_array($users) ? $users : [];
}
private function saveUsers($users) {
file_put_contents(
$this->file,
json_encode($users, JSON_PRETTY_PRINT)
);
}
public function findUser($email) {
$users = $this->loadUsers();
foreach ($users as $user) {
if ($user["email"] === $email) {
return $user;
}
}
return null;
}
public function addUser($email, $username, $password) {
$users = $this->loadUsers();
$users[] = [
"email" => $email,
"username" => $username,
"password" => $password
];
$this->saveUsers($users);
}
public function deleteUser($email) {
$users = $this->loadUsers();
foreach ($users as $i => $user) {
if ($user["email"] === $email) {
unset($users[$i]);
$users = array_values($users);
$this->saveUsers($users);
return true;
}
}
return false;
}
}
+36
View File
@@ -0,0 +1,36 @@
<?php
/**
* Interface für den Zugriff auf Benutzerdaten.
*
* Definiert die Methoden, die jede UserDAO-Implementierung
* bereitstellen muss.
*/
interface UserDAOInterface {
/**
* Sucht einen Benutzer anhand seiner E-Mail-Adresse.
*
* @param string $email E-Mail-Adresse des gesuchten Benutzers
* @return array|null Benutzerdaten als Array oder null
*/
public function findUser($email);
/**
* Fügt einen neuen Benutzer hinzu.
*
* @param string $email E-Mail-Adresse des Benutzers
* @param string $username Benutzername des Benutzers
* @param string $password Passwort des Benutzers
* @return void
*/
public function addUser($email, $username, $password);
/**
* Löscht einen Benutzer anhand seiner E-Mail-Adresse.
*
* @param string $email E-Mail-Adresse des zu löschenden Benutzers
* @return bool true, wenn der Benutzer gelöscht wurde, sonst false
*/
public function deleteUser($email);
}
-63
View File
@@ -1,63 +0,0 @@
<!--
Seite: Profil
Inhalt: Das eigene Profil, wenn man angemeldet ist. Dort hat man die Möglichkeit seine Angaben zu ändern.
-->
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
<body>
<?php
include_once 'includes/navbar.php';
?>
<main>
<hr>
<div>
<div>
<h1>Benutzerdaten ändern</h1>
</div>
<div>
<div>
<label id="Vorname">Vorname</label>
<input type="text" name="Vorname" required placeholder="Vorname" value="<?php //DB-Daten ?>">
</div>
<div>
<label id="Nachname">Nachname</label>
<input type="text" name="Nachname" required placeholder="Nachname" value="<?php //DB-Daten ?>">
</div>
<div>
<label id="Email">Email-Adresse</label>
<input type="email" name="Email" required placeholder="mustermann@web.de" value="<?php //DB-Daten ?>">
</div>
<div>
<label id="Passwort">Passwort</label>
<input type="password" name="Passwort" required placeholder="Passwort">
</div>
<div>
<br>
<button type="submit" name="submit"><i></i> Speichern</button>
</div>
</div>
</div>
</main>
<?php
include_once 'includes/footer.php';
?>
</body>
</html>
-52
View File
@@ -1,52 +0,0 @@
<!--
Form: Registrierung
Funktion: Erstellung neuer Benutzerkonten
-->
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
<body>
<?php
include_once 'includes/navbar.php';
?>
<main>
<div style="width: 50%">
<h1 style="width: 50%; text-align: center">Jetzt Registrieren!</h1><br>
<p style="width: 80%;"> Email:</p>
<input type="email" name="email" style="width: 80%;" placeholder="mustermann@web.de" required>
<p style="width: 80%;"> Vorname:</p>
<input type="text" name="vorname" style="width: 80%;" placeholder="Max" required>
<p style="width: 80%;"> Nachname:</p>
<input type="text" name="nachname" style="width: 80%;" placeholder="Mustermann" required>
<p style="width: 80%;"> Passwort:</p>
<input type="password" name="password" style="width: 80%;" placeholder="Passwort" required>
<div style="width: 80%;">
<label>
<input type="checkbox" value="remember-me"> angemeldet bleiben
</label>
</div>
<button type="submit" value="anmelden" name="loginSubmit" style="width: 80%;">kostenlos registrieren</button>
</div>
</main>
<?php
include_once 'includes/footer.php';
?>
</body>
</html>
-56
View File
@@ -1,56 +0,0 @@
<?php
// Webhook: erfasst einen push auf dem dev (und aktualisiert das Webverzeichnis des Servers)
// Quelle: https://docs.gitea.com/usage/webhooks
ini_set('error_log', __DIR__ . '/tmp.log');
$secret_key = '763489347';
// check for POST request
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
error_log('FAILED - not POST - '. $_SERVER['REQUEST_METHOD']);
exit();
}
// get content type
$content_type = isset($_SERVER['CONTENT_TYPE']) ? strtolower(trim($_SERVER['CONTENT_TYPE'])) : '';
if ($content_type != 'application/json') {
error_log('FAILED - not application/json - '. $content_type);
exit();
}
// get payload
$payload = trim(file_get_contents("php://input"));
if (empty($payload)) {
error_log('FAILED - no payload');
exit();
}
// get header signature
$header_signature = isset($_SERVER['HTTP_X_GITEA_SIGNATURE']) ? $_SERVER['HTTP_X_GITEA_SIGNATURE'] : '';
if (empty($header_signature)) {
error_log('FAILED - header signature missing');
exit();
}
// calculate payload signature
$payload_signature = hash_hmac('sha256', $payload, $secret_key, false);
// check payload signature against header signature
if ($header_signature !== $payload_signature) {
error_log('FAILED - payload signature');
exit();
}
// convert json to array
$decoded = json_decode($payload, true);
// check for json decode errors
if (json_last_error() !== JSON_ERROR_NONE) {
error_log('FAILED - json decode - '. json_last_error());
exit();
}
// success, do something
error_log('SUCCESS - Webhook hat funktioniert');