Compare commits

...

23 Commits

Author SHA1 Message Date
niklas.ortmann a5131e33dc search-Methode angepasst 2026-06-10 20:42:32 +02:00
niklas.ortmann a19d1db990 search-Methode in DatabaseArticleManager 2026-06-10 20:39:27 +02:00
niklas.ortmann b6e7da6808 Update README.md 2026-06-10 20:36:15 +02:00
niklas.ortmann f21fab937f new_article Alert 2026-06-10 20:33:05 +02:00
niklas.ortmann 30fccfe69b Update dataSources.local.xml 2026-06-10 20:32:51 +02:00
NOrtmann1 b692d76f7d session_start wird nun vorher geprüft, ob diese schon läuft 2026-06-10 18:39:39 +02:00
NOrtmann1 56533d4a16 Update deleteAccount-controller.php 2026-06-10 18:34:49 +02:00
NOrtmann1 8a22b475f9 Update deleteAccount-controller.php 2026-06-10 18:33:44 +02:00
NOrtmann1 ae3a1be5e1 Update deleteAccount-controller.php 2026-06-10 18:32:12 +02:00
NOrtmann1 8199afc88f Update navbar.css 2026-06-10 18:27:55 +02:00
NOrtmann1 2d7ef8fc1d Update navbar.css 2026-06-10 18:27:09 +02:00
NOrtmann1 d75d78ccb3 css 2026-06-10 18:26:39 +02:00
NOrtmann1 42489f50b6 Update deleteAccount-controller.php 2026-06-10 18:24:06 +02:00
NOrtmann1 52fde19380 Update deleteAccount-controller.php 2026-06-10 18:22:36 +02:00
NOrtmann1 b1fb3e5baa Update navbar.php 2026-06-10 18:14:13 +02:00
NOrtmann1 5f3dae64c1 Update deleteAccount-controller.php 2026-06-10 18:12:02 +02:00
NOrtmann1 b31ce66ef9 Abmelden-Button aus Profile entfernt 2026-06-10 18:10:48 +02:00
NOrtmann1 93bd561ff9 refactoring 2026-06-10 18:08:23 +02:00
NOrtmann1 d0d93be96b Update profile.php 2026-06-10 18:06:52 +02:00
NOrtmann1 327a05cf63 Profil -> Beitrag Link 2026-06-10 18:01:51 +02:00
NOrtmann1 1394467abe refactoring 2026-06-10 17:55:02 +02:00
niklas.ortmann ace73f15ef Merge pull request 'Beiträge_loeschen' (#29) from Beitrag_loeschen into dev
Reviewed-on: #29
2026-06-10 17:51:34 +02:00
viratex 12facddcd5 PDF vom Datenschema 2026-06-10 17:09:24 +02:00
26 changed files with 128 additions and 211 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="dataSourceStorageLocal" created-in="IU-261.24374.151"> <component name="dataSourceStorageLocal" created-in="IU-261.25134.95">
<data-source name="articles" uuid="315cb5c9-2b0f-435b-b602-59823b160908"> <data-source name="articles" uuid="315cb5c9-2b0f-435b-b602-59823b160908">
<database-info product="SQLite" version="3.51.1" jdbc-version="4.2" driver-name="SQLite JDBC" driver-version="3.51.1.0" dbms="SQLITE" exact-version="3.51.1" exact-driver-version="3.51"> <database-info product="SQLite" version="3.51.1" jdbc-version="4.2" driver-name="SQLite JDBC" driver-version="3.51.1.0" dbms="SQLITE" exact-version="3.51.1" exact-driver-version="3.51">
<identifier-quote-string>&quot;</identifier-quote-string> <identifier-quote-string>&quot;</identifier-quote-string>
+6 -9
View File
@@ -6,8 +6,8 @@
- Niklas Ortmann - Niklas Ortmann
## Login-Informationen für Dummy-User ## Login-Informationen für Dummy-User
Jeweils im Format `Anmeldename, Passwort, Mailadresse`: `Anmeldename, Passwort, Mailadresse`:
- `max.mustermann, test123, mustermann@web.de` - `max.mustermann, test12345, mustermann@web.de`
## Weitere Voraussetzungen zur Nutzung ## Weitere Voraussetzungen zur Nutzung
- Per Klick auf das Logo gelangt man auf die Home-Seite. - Per Klick auf das Logo gelangt man auf die Home-Seite.
@@ -15,7 +15,6 @@ Jeweils im Format `Anmeldename, Passwort, Mailadresse`:
## Ausgelassene Teilaufgaben ## Ausgelassene Teilaufgaben
## Bekannte Fehler und Mängel ## 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. - Bitte auf die gesetzten TODO's achten. Wenn Inhalte fehlen, sind sie i.d.R. als TODO kommentiert.
- Die Navbar hat noch keine onHover-Effekte und erschwert etwas die Bedienung. - Die Navbar hat noch keine onHover-Effekte und erschwert etwas die Bedienung.
- Suchleiste in der Nav ist in der mobilen Ansicht etwas schmal. Ggf. ein alternatives (kleineres) Logo implementieren. - Suchleiste in der Nav ist in der mobilen Ansicht etwas schmal. Ggf. ein alternatives (kleineres) Logo implementieren.
@@ -26,10 +25,8 @@ Jeweils im Format `Anmeldename, Passwort, Mailadresse`:
- Es wurde ein einfacher Beitrags-Editor erstellt. Mit diesem können Beiträge erstellt oder bearbeitet werden. - 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 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. - 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 - Die Such-Seite umfasst eine Such- und Sortierfunktion. Jedoch fehlt noch eine
exemplarisch auf eine Beispiel-Seite.
Die anderen Links sind erstmal Platzhalter und führen auf eine 404-Seite.
- Die Such-Seite umfasst eine Suchfunktion (aber noch nicht nach Tags) und Sortierfunktion. Jedoch fehlt noch eine
Filterfunktion (z.B. nur Mathe anzeigen). Filterfunktion (z.B. nur Mathe anzeigen).
Wenn die Filterfunktion implementiert ist, dann können die statischen Seiten "Informatik", "Mathe", "Physik" entfernt
und dynamisch auf der Suchseite nach gefiltertem Fach angezeigt werden. (Vorläufige showCategory.php implementiert). ## Sonstiges
- Das Datenschema befindet sich unter /planung/Datenschema.pdf
+2 -38
View File
@@ -12,44 +12,8 @@ if (!isset($_SESSION["user"])) {
<form method="post" action="php/controller/createArticle-controller.php" id="editor-form" class="article-editor-scope.editor-container article-editor-scope editor-container"> <form method="post" action="php/controller/createArticle-controller.php" id="editor-form" class="article-editor-scope.editor-container article-editor-scope editor-container">
<main class="editor-main"> <main class="editor-main">
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "internal_error"): ?> <?php include_once "includes/alertMessages.php"?>
<p class="alert-message is-error">
Es ist ein interner Fehler beim Speichern aufgetreten. Bitte versuche es erneut.
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "missing_parameters"): ?>
<p class="alert-message is-error">
Jeder Beitrag muss einen Titel, Kategorie und Inhalt besitzen.
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "invalid_title"): ?>
<p class="alert-message is-error">
Der Titel enthält ungültige Zeichen oder erfüllt die Länge von 5-120 Zeichen nicht.
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "invalid_content"): ?>
<p class="alert-message is-error">
Der Text erlaubt eine Länge von 10 bis maximal 7.000 Zeichen (ca. 1.000 Wörter).
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "invalid_category"): ?>
<p class="alert-message is-error">
Die ausgewählte Kategorie ist ungültig.
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "invalid_tags"): ?>
<p class="alert-message is-error">
Ungültige Schlagworte gefunden. Erlaubt sind nur Buchstaben, Zahlen, Leerzeichen und Bindestriche (2-50 Zeichen).
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "validation_missing"): ?>
<p class="alert-message is-error">
Bei der Validierung deiner Daten ist ein Fehler aufgetreten. Bitte versuche es erneut.
</p>
<?php endif; ?>
<?php
unset($_SESSION["message"]);
?>
<input type="text" id="title" name="title" <input type="text" id="title" name="title"
value="<?php echo htmlspecialchars($_SESSION['old_title'] ?? ''); unset($_SESSION['old_title']); ?>" value="<?php echo htmlspecialchars($_SESSION['old_title'] ?? ''); unset($_SESSION['old_title']); ?>"
placeholder="Titel hier eingeben" required> placeholder="Titel hier eingeben" required>
+1 -18
View File
@@ -7,24 +7,7 @@ include_once 'php/controller/home-controller.php';
Inhalt: Beinhaltet den Inhalt der Startseite Inhalt: Beinhaltet den Inhalt der Startseite
--> -->
<main> <main>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "internal_error"): ?> <?php include_once "includes/alertMessages.php"?>
<p class="alert-message is-error">
Es ist ein Fehler beim Speichern aufgetreten. Bitte versuche es erneut.
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "new_article"): ?>
<p class="alert-message is-success">
Dein Beitrag wurde erfolgreich veröffentlicht!
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "invalid_category"): ?>
<p class="alert-message is-error">
Diese Kategorie ist nicht gültig.
</p>
<?php endif; ?>
<?php
unset($_SESSION["message"]);
?>
<h1>Home</h1> <h1>Home</h1>
<p> <p>
-21
View File
@@ -1,21 +0,0 @@
<!--
Seite: Informatik
Inhalt: Eine Übersicht über alle Beiträge zum Fach
-->
<main>
<h1>Informatik</h1>
<p>
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et
dolore magna aliquyam erat, 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. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
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.
</p>
<h2>Artikel:</h2>
<div>
<a href="datenschutzVSdatensicherheit.php">Datenschutz vs. Datensicherheit</a>
</div>
</main>
-22
View File
@@ -1,22 +0,0 @@
<!--
Seite: Mathe
Inhalt: Eine Übersicht über alle Beiträge zum Fach
-->
<main>
<h1>Mathe</h1>
<p>
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et
dolore magna aliquyam erat, 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. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
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.
</p>
<h2>Artikel:</h2>
<div>
<a href="pythagoras.php">Satz des Pythagoras</a>
</div>
</main>
-23
View File
@@ -1,23 +0,0 @@
<!--
Seite: Physik
Inhalt: Eine Übersicht über alle Beiträge zum Fach
-->
<main>
<h1>Physik</h1>
<p>
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et
dolore magna aliquyam erat, 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. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
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.
</p>
<h2>Artikel:</h2>
<div>
<a href="tunneleffekt.php">Der Tunneleffekt</a>
</div>
</main>
+10 -9
View File
@@ -81,15 +81,14 @@ $isEditMode = (isset($_GET["edit"]) && $_GET["edit"] === "1") || !empty($error);
<br> <br>
<a href="index.php?pfad=deleteAccount" class="button"> <form action="php/controller/deleteAccount-controller.php" method="POST">
Account löschen <button type="submit"
</a> class="button"
onclick="return confirm('Möchtest du deinen Account wirklich unwiderruflich löschen?');">
Account löschen
</button>
</form>
<br><br>
<a href="index.php?pfad=logout" class="button">
Abmelden
</a>
</div> </div>
<div class="container"> <div class="container">
@@ -120,7 +119,9 @@ $isEditMode = (isset($_GET["edit"]) && $_GET["edit"] === "1") || !empty($error);
</div> </div>
<h3 class="article-title"> <h3 class="article-title">
<?php echo htmlspecialchars($userArticle->getTitle()); ?> <a href="index.php?pfad=showArticle&id=<?php echo $userArticle->getID(); ?>">
<?php echo htmlspecialchars($userArticle->getTitle()); ?>
</a>
</h3> </h3>
<?php <?php
+4 -1
View File
@@ -1,5 +1,7 @@
<?php <?php
session_start(); if (session_status() === PHP_SESSION_NONE) {
session_start();
}
$results = $_SESSION["search_results"] ?? []; $results = $_SESSION["search_results"] ?? [];
$query = $_SESSION["search_query"] ?? ""; $query = $_SESSION["search_query"] ?? "";
@@ -11,6 +13,7 @@ $resultCount = count($results);
Inhalt: Zeigt die Ergebnisse einer Suche an Inhalt: Zeigt die Ergebnisse einer Suche an
--> -->
<div class="s-res-layout-grid"> <div class="s-res-layout-grid">
<?php include_once "includes/alertMessages.php"?>
<!-- Links: Seitenleiste für Filter und Suche --> <!-- Links: Seitenleiste für Filter und Suche -->
<aside class="s-res-sidebar"> <aside class="s-res-sidebar">
+1
View File
@@ -3,6 +3,7 @@ include_once "php/controller/showCategory-controller.php";
?> ?>
<main> <main>
<?php include_once "includes/alertMessages.php"?>
<h1><?php if (isset($category) && !empty($category)){ echo htmlspecialchars($category); } ?></h1> <h1><?php if (isset($category) && !empty($category)){ echo htmlspecialchars($category); } ?></h1>
+2 -53
View File
@@ -13,59 +13,8 @@ include_once 'php/controller/showArticle-controller.php';
<form method="post" action="php/controller/updateArticle-controller.php?id=<?php if(isset($id) && !empty($id)){echo htmlspecialchars($id);}else{$_SESSION["message"] = "missing_id";} ?>" id="editor-form" class="article-editor-scope.editor-container article-editor-scope editor-container"> <form method="post" action="php/controller/updateArticle-controller.php?id=<?php if(isset($id) && !empty($id)){echo htmlspecialchars($id);}else{$_SESSION["message"] = "missing_id";} ?>" id="editor-form" class="article-editor-scope.editor-container article-editor-scope editor-container">
<main class="editor-main"> <main class="editor-main">
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "internal_error"): ?> <?php include_once "includes/alertMessages.php"?>
<p class="alert-message is-error">
Es ist ein interner Fehler beim Speichern aufgetreten. Bitte versuche es erneut.
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "missing_id"): ?>
<p class="alert-message is-error">
Es ist ein Fehler aufgetreten. Die ID konnte nicht ausgelesen werden. Bitte versuche es erneut.
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "missing_parameters"): ?>
<p class="alert-message is-error">
Jeder Beitrag muss einen Titel, Kategorie und Inhalt besitzen.
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "invalid_title"): ?>
<p class="alert-message is-error">
Der Titel enthält ungültige Zeichen oder erfüllt die Länge von 5-120 Zeichen nicht.
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "invalid_content"): ?>
<p class="alert-message is-error">
Der Text erlaubt eine Länge von 10 bis maximal 7.000 Zeichen (ca. 1.000 Wörter).
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "invalid_category"): ?>
<p class="alert-message is-error">
Die ausgewählte Kategorie ist ungültig.
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "invalid_tags"): ?>
<p class="alert-message is-error">
Ungültige Schlagworte gefunden. Erlaubt sind nur Buchstaben, Zahlen, Leerzeichen und Bindestriche (2-20 Zeichen).
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "validation_missing"): ?>
<p class="alert-message is-error">
Bei der Validierung deiner Daten ist ein Fehler aufgetreten. Bitte versuche es erneut.
</p>
<?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 if (isset($_SESSION["message"]) && $_SESSION["message"] == "not_found_article"): ?>
<p class="alert-message is-error">
Der zu bearbeitende Artikel wurde nicht gefunden. Bitte versuche es erneut.
</p>
<?php endif; ?>
<?php
unset($_SESSION["message"]);
?>
<input type="text" id="title" name="title" <input type="text" id="title" name="title"
value="<?php value="<?php
if (isset($_SESSION['old_title']) && !empty($_SESSION['old_title'])){ if (isset($_SESSION['old_title']) && !empty($_SESSION['old_title'])){
+2 -2
View File
@@ -115,8 +115,8 @@ CSS für die navbar
display: block; display: block;
} }
/* Responsive Anpassung unter 1210px */ /* Responsive Anpassung unter 1240px */
@media (max-width: 1210px) { @media (max-width: 1240px) {
.nav { .nav {
flex-wrap: wrap; /* zweite Nav-Zeile*/ flex-wrap: wrap; /* zweite Nav-Zeile*/
padding: 0.5rem 1rem; padding: 0.5rem 1rem;
+5
View File
@@ -58,6 +58,11 @@
Der Beitrag wurde erfolgreich gelöscht. Der Beitrag wurde erfolgreich gelöscht.
</p> </p>
<?php endif; ?> <?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "new_article"): ?>
<p class="alert-message is-success">
Dein Beitrag wurde erfolgreich veröffentlicht!
</p>
<?php endif; ?>
<?php <?php
unset($_SESSION["message"]); unset($_SESSION["message"]);
?> ?>
+3 -1
View File
@@ -1,5 +1,7 @@
<?php <?php
session_start(); if (session_status() === PHP_SESSION_NONE) {
session_start();
}
?> ?>
<!-- <!--
+3 -1
View File
@@ -1,5 +1,7 @@
<?php <?php
session_start(); if (session_status() === PHP_SESSION_NONE) {
session_start();
}
ob_start(); ob_start();
$pfad = $_GET["pfad"] ?? "home"; $pfad = $_GET["pfad"] ?? "home";
+3 -1
View File
@@ -1,5 +1,7 @@
<?php <?php
SESSION_START(); if (session_status() === PHP_SESSION_NONE) {
session_start();
}
require_once '../model/LocalArticleManager.php'; require_once '../model/LocalArticleManager.php';
require_once '../model/ArticleManager.php'; require_once '../model/ArticleManager.php';
require_once '../validator/article-validator.php'; require_once '../validator/article-validator.php';
+16 -3
View File
@@ -1,6 +1,10 @@
<?php <?php
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
require_once "php/model/UserManager.php"; require_once __DIR__ . "/../model/UserManager.php";
require_once __DIR__ . "/../model/ArticleManager.php";
/* /*
Deregistrierung Deregistrierung
@@ -10,21 +14,30 @@ require_once "php/model/UserManager.php";
try { try {
$dao = UserManager::getInstance(); $dao = UserManager::getInstance();
$articleManager = ArticleManager::getInstance();
if (isset($_SESSION["user_email"])) { if (isset($_SESSION["user_email"])) {
$dao->deleteUser($_SESSION["user_email"]); $dao->deleteUser($_SESSION["user_email"]);
$articles = $articleManager->getArticlesByAuthor($_SESSION["user_email"]);
foreach ($articles as $article) {
$articleManager->deleteArticle($article->getId(), $_SESSION["user_email"]);
}
} else {
throw new NotFoundException("missing_user_email");
} }
$_SESSION = []; $_SESSION = [];
session_destroy(); session_destroy();
header("Location: index.php"); header("Location: ../../index.php");
exit(); exit();
} catch (Exception $e) { } catch (Exception $e) {
$_SESSION["message"] = "internal_error"; $_SESSION["message"] = "internal_error";
header("Location: index.php?pfad=profile"); header("Location: ../../index.php?pfad=profile");
exit(); exit();
} }
+1 -1
View File
@@ -13,7 +13,7 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") {
$_SESSION = []; $_SESSION = [];
session_destroy(); session_destroy();
header("Location: index.php"); header("Location: ../../index.php");
exit(); exit();
} }
+3 -1
View File
@@ -1,5 +1,7 @@
<?php <?php
session_start(); if (session_status() === PHP_SESSION_NONE) {
session_start();
}
require_once 'php/model/Article.php'; require_once 'php/model/Article.php';
require_once 'php/model/ArticleManager.php'; require_once 'php/model/ArticleManager.php';
require_once 'php/model/LocalArticleManager.php'; require_once 'php/model/LocalArticleManager.php';
+3 -1
View File
@@ -1,5 +1,7 @@
<?php <?php
session_start(); if (session_status() === PHP_SESSION_NONE) {
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';
+4 -1
View File
@@ -1,5 +1,8 @@
<?php <?php
session_start(); if (session_status() === PHP_SESSION_NONE) {
session_start();
}
require_once 'php/model/Article.php'; require_once 'php/model/Article.php';
require_once 'php/model/ArticleManager.php'; require_once 'php/model/ArticleManager.php';
+4 -1
View File
@@ -1,5 +1,8 @@
<?php <?php
SESSION_START(); if (session_status() === PHP_SESSION_NONE) {
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';
+1
View File
@@ -80,6 +80,7 @@ interface ArticleManagerDAO
* (Unabhängig von Groß-und Kleinschreibung) * (Unabhängig von Groß-und Kleinschreibung)
* @param string $keyword Der eingegebene Suchbegriff. * @param string $keyword Der eingegebene Suchbegriff.
* @return array Ein Array von Artikeln ,die dem Suchkriterium entsprechen. Wenn nichts gefunden wird, ein leeres Array. * @return array Ein Array von Artikeln ,die dem Suchkriterium entsprechen. Wenn nichts gefunden wird, ein leeres Array.
* @throws InternalServerErrorException
*/ */
public function search(string $keyword): array; public function search(string $keyword): array;
+51 -2
View File
@@ -306,8 +306,57 @@ class DatabaseArticleManager implements ArticleManagerDAO {
public function search(string $keyword): array public function search(string $keyword): array
{ {
// TODO: implement search() $cleankeyword = trim($keyword);
return [];
// Leeren Suchbegriff sofort abfangen
if ($cleankeyword === '') {
return [];
}
try {
$db = $this->getConnection();
$sql = "SELECT id, title, content, author, category, tags, created
FROM articles
WHERE title LIKE :keyword
OR content LIKE :keyword;";
$command = $db->prepare($sql);
if (!$command) {
throw new InternalServerErrorException("internal_error");
}
// Wildcards für die Suche hinzufügen
$searchParam = '%' . $cleankeyword . '%';
$success = $command->execute([
":keyword" => $searchParam
]);
if (!$success) {
throw new InternalServerErrorException("internal_error");
}
$rows = $command->fetchAll(PDO::FETCH_ASSOC);
$filteredArticles = [];
foreach ($rows as $row) {
$filteredArticles[] = new Article(
intval($row['id']),
$row['title'] ?? '',
$row['content'] ?? '',
$row['author'] ?? '',
$row['category'] ?? '',
$row['tags'] ?? '',
$row['created'] ?? '' // Nutzt 'created' aus deiner DB-Struktur
);
}
return $filteredArticles;
} catch (PDOException $e) {
throw new InternalServerErrorException("internal_error");
}
} }
} }
+1
View File
@@ -1,4 +1,5 @@
<?php <?php
/** /**
* Prüft, ob der Autor auch der Eigentümer des Beitrags ist. * Prüft, ob der Autor auch der Eigentümer des Beitrags ist.
* @param $author * @param $author
Binary file not shown.