statt txt -> json

This commit is contained in:
NOrtmann1
2026-05-27 16:03:56 +02:00
parent f2a9d8d1b3
commit 890187cff2
4 changed files with 120 additions and 37 deletions
+16 -4
View File
@@ -1,5 +1,5 @@
<?php <?php
/* /**
* Klasse: Artikel * Klasse: Artikel
* Diese Klasse stellt alle Daten eines Artikels (Beitrag) bereit * Diese Klasse stellt alle Daten eines Artikels (Beitrag) bereit
* *
@@ -15,6 +15,8 @@ class Article
private $category; private $category;
/** /**
* Konstruktor
*
* @param $id integer ID des Beitrages * @param $id integer ID des Beitrages
* @param $title string Titel des Beitrags * @param $title string Titel des Beitrags
* @param $content string Inhalt des Beitrags * @param $content string Inhalt des Beitrags
@@ -22,19 +24,21 @@ class Article
* @param $category string Kategorie des Beitrages * @param $category string Kategorie des Beitrages
* @param $date * @param $date
* @param $tags string[] optionale Schlagworte für eine bessere Suche * @param $tags string[] optionale Schlagworte für eine bessere Suche
*
*/ */
public function __construct($id, $title, $content, $author, $date) public function __construct($id, $title, $content, $author, $date, $category, array $tags)
{ {
$this->id = $id; $this->id = $id;
$this->title = $title; $this->title = $title;
$this->content = $content; $this->content = $content;
$this->author = $author; $this->author = $author;
$this->date = $date; $this->date = $date;
$this->category = $category;
$this->tags = $tags;
} }
/** /**
* Gibt die ID eines Artikels zurück. * Gibt die ID eines Artikels zurück.
* @return int
*/ */
public function getId() public function getId()
{ {
@@ -43,6 +47,7 @@ class Article
/** /**
* Gibt den Titel eines Artikels zurück. * Gibt den Titel eines Artikels zurück.
* @return string
*/ */
public function getTitle() public function getTitle()
{ {
@@ -50,7 +55,9 @@ class Article
} }
/** /**
* Setzt den Titel eines Artikels. * Setzt den Titel eines Artikels
* @param $title
* @return void
*/ */
public function setTitle($title) public function setTitle($title)
{ {
@@ -60,6 +67,7 @@ class Article
/** /**
* Gibt den Content eines Artikels zurück. * Gibt den Content eines Artikels zurück.
* TODO: Content muss noch definiert werden. * TODO: Content muss noch definiert werden.
* @return string
*/ */
public function getContent() public function getContent()
{ {
@@ -69,6 +77,8 @@ class Article
/** /**
* Setzt den Content eines Artikels. * Setzt den Content eines Artikels.
* TODO: Content muss noch definiert werden. * TODO: Content muss noch definiert werden.
* @param $content
* @return void
*/ */
public function setContent($content) public function setContent($content)
{ {
@@ -77,6 +87,7 @@ class Article
/** /**
* Gibt den Autor eines Artikels zurück. * Gibt den Autor eines Artikels zurück.
* @return string
*/ */
public function getAuthor() public function getAuthor()
{ {
@@ -85,6 +96,7 @@ class Article
/** /**
* Gibt das Veröffentlichungsdatum des Artikels zurück. * Gibt das Veröffentlichungsdatum des Artikels zurück.
* @return mixed
*/ */
public function getDate() public function getDate()
{ {
+37 -31
View File
@@ -1,15 +1,18 @@
<?php <?php
require_once 'ArticleManagerDAO.php'; require_once $abs_path . 'ArticleManagerDAO.php';
/** /**
* Klasse: Eine lokale Lösung der DatenbankDAO. * Klasse: Eine lokale Lösung des ArticleManagerDAO.
* schreibt zunächst Daten lokal in das Verzeichnis und kann diese wieder auslesen. * Schreibt zunächst Daten lokal in das Verzeichnis und kann diese wieder auslesen.
* *
* @author Niklas Ortmann * @author Niklas Ortmann
*/ */
class ArticleManager implements ArticleManagerDAO { class ArticleManager implements ArticleManagerDAO {
private string $file = $abs_path . "data/articles.json";
/** /**
* Gibt die Datenbank-Instanz zurück. * Gibt die ArticleManager-Instanz zurück.
* @return ArticleManager
*/ */
public static function getInstance() public static function getInstance()
{ {
@@ -20,38 +23,34 @@ class ArticleManager implements ArticleManagerDAO {
return self::$instance; return self::$instance;
} }
/** /**
* Prüft, ob die lokalen txt-Dateien existieren. * Speichert alle Artikel/Beiträge in der Datei.
* Wenn nicht, werden diese erstellt. * @param $articles
* @return void
*/ */
public function __construct() public function saveArticle($articles)
{ {
file_put_contents(
$this->file,
json_encode($articles, JSON_PRETTY_PRINT)
);
} }
public function newArticle($article) { public function addArticle($title, $content, $author, $category, array $tags)
$newData = array( {
"title" => $article->getTitle(), $articles = $this->getAllArticles();
"content" => $article->getContent(),
"author" => $article->getAuthor(), $articles[] = [
"category" => $article->getCategory(), "id" => count($articles)+1,
//"tags" => $article->getTags(), TODO: Später hinzufügen "title" => $title,
"date" => date("d.m.Y, H:i") "content" => $content,
); "author" => $author,
$newData = base64_encode(serialize($newData)); "category" => $category,
if (!file_exists("articles.txt")) { "tags" => $tags
$newData = fopen("articles.txt", "xb"); ];
fclose($newData);
} $this->saveArticle($articles);
$previousData = file_get_contents("articles.txt");
if (file_put_contents("articles.txt", "$newData\n$previousData")) {
// TODO: Vernünftige Rückmeldung implementieren.
echo "Artikel erfolgreich gespeichert!";
} else {
// TODO: passende Exceptions werfen.
echo "Fehler!";
}
} }
public function updateArticle($id, $title, $content, $author) public function updateArticle($id, $title, $content, $author)
@@ -71,7 +70,14 @@ class ArticleManager implements ArticleManagerDAO {
public function getAllArticles() public function getAllArticles()
{ {
// TODO: Implement getAllArticles() method. if (!file_exists($this->file)) {
return [];
}
$json = file_get_contents($this->file);
$articles = json_decode($json, true);
return is_array($articles) ? $articles : [];
} }
} }
+4 -2
View File
@@ -18,7 +18,7 @@ interface ArticleManagerDAO
* Mögliche Exceptions: * Mögliche Exceptions:
* TODO Fehlerbeschreibung hinzufügen & tags hinzufügen * TODO Fehlerbeschreibung hinzufügen & tags hinzufügen
*/ */
public function newArticle($title, $content, $author, $category); public function addArticle($title, $content, $author, $category, array $tags);
/* /*
* Ein angemeldeter Nutzer bearbeitet einen Beitrag. * Ein angemeldeter Nutzer bearbeitet einen Beitrag.
@@ -53,9 +53,11 @@ interface ArticleManagerDAO
*/ */
public function getArticle($id); public function getArticle($id);
/* /**
* Alle Beiträge aufrufen. * Alle Beiträge aufrufen.
* *
* @return Article
*
* Mögliche Exceptions: * Mögliche Exceptions:
* TODO Fehlerbeschreibung hinzufügen * TODO Fehlerbeschreibung hinzufügen
*/ */
+63
View File
@@ -0,0 +1,63 @@
<?php
class UserDAO {
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;
}
}