Compare commits

...

12 Commits

Author SHA1 Message Date
niklas.ortmann 9c3ebc9877 Merge pull request 'WIP Suche implementiert, sowie Sortieren der Ergebnisse' (#19) from ImplementedSearch into dev
Reviewed-on: #19
2026-06-03 16:07:41 +02:00
NOrtmann1 a26e985edf Update README.md 2026-06-02 18:32:57 +02:00
NOrtmann1 cf9ac795eb Readme + Kommentare 2026-06-02 18:20:35 +02:00
niklas.ortmann a519387773 Update updateArticle-controller.php 2026-06-02 15:45:34 +02:00
niklas.ortmann ed40596389 Update createArticle.css 2026-06-02 15:43:37 +02:00
niklas.ortmann 4c855c05ed css 2026-06-02 15:42:07 +02:00
niklas.ortmann e7189245d5 css 2026-06-02 15:37:35 +02:00
niklas.ortmann 709a4ba83c commenting 2026-06-02 15:34:19 +02:00
niklas.ortmann fb54ba2462 updateArticle-Exceptions 2026-06-02 15:31:02 +02:00
niklas.ortmann c6b55030cf updateArticle - Exeptions 2026-06-02 15:22:18 +02:00
niklas.ortmann af04557f58 Update updateArticle-controller.php 2026-06-02 15:04:52 +02:00
niklas.ortmann 2c100bddf2 Update updateArticle-controller.php 2026-06-02 15:04:05 +02:00
15 changed files with 65 additions and 54 deletions
+23 -11
View File
@@ -1,13 +1,25 @@
Team Tag-Buchstabe: DI-14-C-Schulte-Eilers-Ortmann # Webprogrammierung: Gruppe DI-14-C
Namen der Studierenden:
- Name 1 Caroline Schulte
- Name 2 Jacques Eilers
- Name 3 Niklas Ortmann
Abgabe zu Aufgabenblatt 1
Hinweise: ## Beteiligte
index.html wurde zu einer index.php umbenannt. - Caroline Schulte
webhook.php bitte ignorieren. Diese dient nur als zukünftige Automatisierung des Repo-Pulls (s. https://docs.gitea.com/usage/webhooks) - Jacques Eilers
- Niklas Ortmann
Beim Verwenden der Navbar-Links bitte Folgendes beachten: nur die Kategorien Physik, Mathe, Informatik führen exemplarisch auf eine Beispiel-Seite. ## Login-Informationen für Dummy-User
Die anderen Links sind erstmal Platzhalter, dessen dynamischer Inhalt später mit PHP in die index.php eingefügt wird. Alle anderen Links führen auf eine 404-Seite. Jeweils im Format `Anmeldename, Passwort, Mailadresse`:
- `max.mustermann, test123, mustermann@web.de`
## Weitere Voraussetzungen zur Nutzung
## Ausgelassene Teilaufgaben
## Bekannte Fehler und Mängel
- Der Beitragseditor fügt beim Laden von Inhalten leere Zeichen ein.
- Bitte auf die gesetzten TODO's achten. Wenn Inhalte fehlen, sind sie i.d.R. als TODO kommentiert.
## Besonderheiten des Projektes
- Es wurde ein einfacher Beitrags-Editor erstellt. Mit diesem können Beiträge erstellt oder bearbeitet werden.
Es handelt es sich um eine einfache Version. Später sollen z.B. Bilder und die Positionierung der Elemente folgen.
- Es sind drei Dummy-Beiträge für den Nutzer max.mustermann hinterlegt.
- Beim Verwenden der Navbar-Links bitte Folgendes beachten: nur die Kategorien Physik, Mathe, Informatik führen exemplarisch auf eine Beispiel-Seite.
Die anderen Links sind erstmal Platzhalter und führen auf eine 404-Seite.
+1 -1
View File
@@ -62,7 +62,7 @@ if (!isset($_SESSION["user"])) {
<aside class="editor-sidebar"> <aside class="editor-sidebar">
<div class="sidebar-block"> <div class="sidebar-block">
<button type="submit" class="btn-publish">Veröffentlichen</button> <button type="submit" id="editor-button" class="button">Veröffentlichen</button>
</div> </div>
<div class="sidebar-block"> <div class="sidebar-block">
+1 -1
View File
@@ -37,7 +37,7 @@ $error = $error ?? null;
<button type="submit" <button type="submit"
value="anmelden" value="anmelden"
name="loginSubmit" name="loginSubmit"
class="login-button"> class="button">
anmelden anmelden
</button> </button>
+3 -3
View File
@@ -33,13 +33,13 @@ $user = $user ?? null;
</form> </form>
<br> <br>
<a href="index.php?pfad=deleteAccount" class="login-button"> <a href="index.php?pfad=deleteAccount" class="button">
Account löschen Account löschen
</a> </a>
<br><br> <br><br>
<a href="index.php?pfad=logout" class="login-button"> <a href="index.php?pfad=logout" class="button">
Abmelden Abmelden
</a> </a>
</div> </div>
@@ -86,7 +86,7 @@ $user = $user ?? null;
<?php endforeach; ?> <?php endforeach; ?>
<?php else: ?> <?php else: ?>
<p>Du hast noch keine Beiträge erstellt.</p> <p>Du hast noch keine Beiträge erstellt.</p>
<button type="button" class="login-button" onclick="window.location.href='index.php?pfad=createArticle';"> <button type="button" class="button" onclick="window.location.href='index.php?pfad=createArticle';">
Beitrag erstellen! Beitrag erstellen!
</button> </button>
<?php endif; ?> <?php endif; ?>
+1 -1
View File
@@ -52,7 +52,7 @@ $error = $error ?? null;
<button type="submit" <button type="submit"
value="register" value="register"
name="registerSubmit" name="registerSubmit"
class="login-button"> class="button">
kostenlos registrieren kostenlos registrieren
</button> </button>
+6 -1
View File
@@ -53,6 +53,11 @@ include_once 'php/controller/showArticle-controller.php';
Bei der Validierung deiner Daten ist ein Fehler aufgetreten. Bitte versuche es erneut. Bei der Validierung deiner Daten ist ein Fehler aufgetreten. Bitte versuche es erneut.
</p> </p>
<?php endif; ?> <?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "unauthorized_access"): ?>
<p class="alert-message is-error">
Sie sind nicht berechtigt, diesen Beitrag zu bearbeiten.
</p>
<?php endif; ?>
<?php <?php
unset($_SESSION["message"]); unset($_SESSION["message"]);
?> ?>
@@ -81,7 +86,7 @@ include_once 'php/controller/showArticle-controller.php';
<aside class="editor-sidebar"> <aside class="editor-sidebar">
<div class="sidebar-block"> <div class="sidebar-block">
<button type="submit" class="btn-publish">Änderungen speichern</button> <button type="submit" class="button">Änderungen speichern</button>
</div> </div>
<div class="sidebar-block"> <div class="sidebar-block">
+2 -14
View File
@@ -86,20 +86,8 @@
} }
/* Button-Zeugs */ /* Button-Zeugs */
.article-editor-scope .btn-publish { .button#editor-button {
background-color: #007cba; padding: 18px 12px;
color: white;
border: none;
padding: 12px;
border-radius: 4px;
font-weight: 600;
cursor: pointer;
font-size: 1rem;
width: 100%;
}
.article-editor-scope .btn-publish:hover {
background-color: #006ba1;
} }
/* Responsive Anpassungen unter 760px (für z.B. Smartphones) */ /* Responsive Anpassungen unter 760px (für z.B. Smartphones) */
+2 -2
View File
@@ -155,7 +155,7 @@ a, button, input, select, textarea, label, main{
color: #1f2937; color: #1f2937;
} }
.login-button { .button {
width: 100%; width: 100%;
padding: 12px; padding: 12px;
background-color: #2563eb; background-color: #2563eb;
@@ -168,7 +168,7 @@ a, button, input, select, textarea, label, main{
transition: background-color 0.2s, transform 0.2s, box-shadow 0.2s; transition: background-color 0.2s, transform 0.2s, box-shadow 0.2s;
} }
.login-button:hover { .button:hover {
background-color: #1d4ed8; background-color: #1d4ed8;
transform: translateY(-2px); transform: translateY(-2px);
box-shadow: 0 4px 10px rgba(0,0,0,0.15); box-shadow: 0 4px 10px rgba(0,0,0,0.15);
+1
View File
@@ -1,6 +1,7 @@
<!-- <!--
Artikel: Datenschutz vs Datensicherheit Artikel: Datenschutz vs Datensicherheit
Funktion: Inhalt zum Fach Informatik Funktion: Inhalt zum Fach Informatik
TODO: entfernen, wenn die Kategorie-Anzeige implementiert ist.
--> -->
<!DOCTYPE html> <!DOCTYPE html>
<html lang="de"> <html lang="de">
-4
View File
@@ -1,4 +0,0 @@
<?php
// mit $_SERVER['DOCUMENT_ROOT'] später umbauen?
$abs_path = __DIR__;
?>
+4 -4
View File
@@ -1,5 +1,5 @@
<?php <?php
session_start(); SESSION_START();
require_once '../model/LocalArticleManager.php'; require_once '../model/LocalArticleManager.php';
require_once '../model/ArticleManager.php'; require_once '../model/ArticleManager.php';
require_once '../model/Article.php'; require_once '../model/Article.php';
@@ -8,7 +8,7 @@ require_once '../validator/article-validator.php';
if ($_SERVER["REQUEST_METHOD"] === "POST") { if ($_SERVER["REQUEST_METHOD"] === "POST") {
$_SESSION["old_title"] = $_POST["title"] ?? ''; $_SESSION["old_title"] = $_POST["title"] ?? '';
$_SESSION["old_content"] = $_POST["content"] ?? ''; $_SESSION["old_content"] = $_POST["content"] ?? '';
$_SESSION["old_category"] = $_POST["category"] ?? ''; $_SESSION["old_category"] = $_POST["category"] ?? ''; // TODO: die Kategorie im Dropdown setzen, wenn der Editor erneut geöffnet wird.
$_SESSION["old_tags"] = $_POST["tags"] ?? ''; $_SESSION["old_tags"] = $_POST["tags"] ?? '';
if (isset($_GET["id"]) && !empty($_GET["id"])) { if (isset($_GET["id"]) && !empty($_GET["id"])) {
@@ -26,7 +26,7 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") {
}else{ }else{
$title = $_POST["title"]; $title = $_POST["title"];
$content = $_POST["content"]; $content = $_POST["content"];
$author = "max.mustermann"; // TODO: später aus Session den angemeldeten Nutzer beziehen. $author = $_SESSION["user_email"];
$category = $_POST["category"]; $category = $_POST["category"];
$tags = $_POST['tags'] ?? ''; $tags = $_POST['tags'] ?? '';
@@ -82,7 +82,7 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") {
$article->setTags($cleanedTags); $article->setTags($cleanedTags);
$articleManager->updateArticle($id ,$article, $author); $articleManager->updateArticle($id ,$article, $author);
} catch (Exception $e){ } catch (Exception $e){
$_SESSION["message"] = "internal_error"; $_SESSION["message"] = $e->getMessage();
header("location: ../../index.php?pfad=updateArticle"); header("location: ../../index.php?pfad=updateArticle");
exit(); exit();
} }
+14 -5
View File
@@ -1,5 +1,10 @@
<?php <?php
require_once "Article.php"; require_once "Article.php";
class NotFoundException extends Exception {}
class UnauthorizedAccessException extends Exception {}
class InternalServerErrorException extends Exception {}
/** /**
* Die Klasse beinhaltet alle Methoden für die Operation mit den Artikel-Daten. * Die Klasse beinhaltet alle Methoden für die Operation mit den Artikel-Daten.
* *
@@ -16,7 +21,7 @@ interface ArticleManagerDAO
* @param $tags string optionale Schlagworte für eine bessere Suche * @param $tags string optionale Schlagworte für eine bessere Suche
* *
* Mögliche Exceptions: * Mögliche Exceptions:
* TODO Fehlerbeschreibung hinzufügen & tags hinzufügen * TODO: Exceptions implementieren.
*/ */
public function addArticle($title, $content, $author, $category, $tags); public function addArticle($title, $content, $author, $category, $tags);
@@ -29,7 +34,10 @@ interface ArticleManagerDAO
* @param $author * @param $author
* @return void * @return void
* *
* TODO: Fehlerbeschreibung hinzufügen * @throws InternalServerErrorException
* @throws NotFoundException
* @throws UnauthorizedAccessException
* /
*/ */
public function updateArticle($id, $article, $author); public function updateArticle($id, $article, $author);
@@ -38,7 +46,7 @@ interface ArticleManagerDAO
* @param $id * @param $id
* @return void * @return void
* *
* TODO: Fehlerbeschreibung hinzufügen * TODO: Exceptions implementieren.
*/ */
public function deleteArticle($id); public function deleteArticle($id);
@@ -48,7 +56,7 @@ interface ArticleManagerDAO
* *
* @return Article * @return Article
* Mögliche Exceptions: * Mögliche Exceptions:
* TODO Fehlerbeschreibung hinzufügen * TODO: Exceptions implementieren.
*/ */
public function getArticle($id); public function getArticle($id);
@@ -56,7 +64,7 @@ interface ArticleManagerDAO
* Alle Beiträge aufrufen. * Alle Beiträge aufrufen.
* *
* Mögliche Exceptions: * Mögliche Exceptions:
* TODO Fehlerbeschreibung hinzufügen * TODO: Exceptions implementieren.
*/ */
public function getAllArticles(); public function getAllArticles();
@@ -64,6 +72,7 @@ interface ArticleManagerDAO
* Gibt alle Beiträge eines Nutzer mit einer gegebenen ID aus. * Gibt alle Beiträge eines Nutzer mit einer gegebenen ID aus.
* @param $author * @param $author
* @return Article[] * @return Article[]
* TODO: Exceptions implementieren.
*/ */
public function getArticlesByAuthor($author); public function getArticlesByAuthor($author);
+5 -7
View File
@@ -36,6 +36,7 @@ class LocalArticleManager implements ArticleManagerDAO {
* Speichert alle Artikel/Beiträge in der Datei. * Speichert alle Artikel/Beiträge in der Datei.
* @param $articles * @param $articles
* @return void * @return void
* TODO: Exceptions implementieren.
*/ */
public function saveArticle($articles) public function saveArticle($articles)
{ {
@@ -65,14 +66,12 @@ class LocalArticleManager implements ArticleManagerDAO {
public function updateArticle($id, $article, $author) public function updateArticle($id, $article, $author)
{ {
if (empty($article)) { if (empty($article)) {
// TODO: Implement Exception. throw new InternalServerErrorException("internal_error");
return;
} }
// Berechtigungsprüfung: // Berechtigungsprüfung:
if ($article->getAuthor() !== $author) { if ($article->getAuthor() !== $author) {
// TODO: Implement Exception. throw new UnauthorizedAccessException("unauthorized_access");
return;
} }
// Beitrag aktualisieren: // Beitrag aktualisieren:
@@ -92,15 +91,14 @@ class LocalArticleManager implements ArticleManagerDAO {
]; ];
$updated = true; $updated = true;
break; break;
}else{
// TODO: Implement Exception.
return;
} }
} }
// Nur speichern, wenn Beitrag geändert wurde: // Nur speichern, wenn Beitrag geändert wurde:
if ($updated) { if ($updated) {
$this->saveArticle($articles); $this->saveArticle($articles);
} else {
throw new NotFoundException("missing_id");
} }
} }
+1
View File
@@ -1,6 +1,7 @@
<!-- <!--
Artikel: Satz des Pythagoras Artikel: Satz des Pythagoras
Funktion: Inhalt zum Fach Mathe Funktion: Inhalt zum Fach Mathe
TODO: entfernen, wenn die Kategorie-Anzeige implementiert ist.
--> -->
<!DOCTYPE html> <!DOCTYPE html>
<html lang="de"> <html lang="de">
+1
View File
@@ -1,6 +1,7 @@
<!-- <!--
Artikel: Tunneleffekt Artikel: Tunneleffekt
Funktion: Inhalt zum Fach Physik Funktion: Inhalt zum Fach Physik
TODO: entfernen, wenn die Kategorie-Anzeige implementiert ist.
--> -->
<!DOCTYPE html> <!DOCTYPE html>
<html lang="de"> <html lang="de">