117 lines
3.4 KiB
PHP
117 lines
3.4 KiB
PHP
<?php
|
|
require_once 'ArticleManagerDAO.php';
|
|
require_once 'Article.php';
|
|
/**
|
|
* Klasse: Eine lokale Lösung des ArticleManagerDAO.
|
|
* Schreibt zunächst Daten lokal in das Verzeichnis und kann diese wieder auslesen.
|
|
*
|
|
* @author Niklas Ortmann
|
|
*/
|
|
class LocalArticleManager implements ArticleManagerDAO {
|
|
|
|
private $file = '../../data/articles.json';
|
|
private static $instance = null;
|
|
|
|
/**
|
|
* Gibt die LocalArticleManager-Instanz zurück.
|
|
* @return LocalArticleManager
|
|
*/
|
|
public static function getInstance()
|
|
{
|
|
if (self::$instance == null) {
|
|
self::$instance = new LocalArticleManager();
|
|
// Dummy-Beiträge werden NUR beim ersten Mal hinzugefügt:
|
|
self::$instance->addArticle(
|
|
"Satz des Pythagoras",
|
|
"Der Satz des Pythagoras wurde von dem griechischen Philosophen Pythagoras von Samos formuliert und im dritten Jahrhundert vor Christus veröffentlicht. In der beigefügten Abbildung sehen wir ein rechtwinkliges Dreieck...",
|
|
"max.mustermann",
|
|
"Mathe",
|
|
"Dreiecke, Dreiecksseiten berechnen"
|
|
);
|
|
|
|
self::$instance->addArticle(
|
|
"Tunneleffekt",
|
|
"Der Tunneleffekt ist ein quantenmechanisches Phänomen, bei dem Teilchen...",
|
|
"max.mustermann",
|
|
"Physik",
|
|
"Quantenphysik, Energie"
|
|
);
|
|
|
|
self::$instance->addArticle(
|
|
"Datenschutz vs Datensicherheit",
|
|
"Datenschutz ist in unserer digital vernetzten Welt allgegenwärtig...",
|
|
"max.mustermann",
|
|
"Informatik",
|
|
"Daten, DSGVO"
|
|
);
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Speichert alle Artikel/Beiträge in der Datei.
|
|
* @param $articles
|
|
* @return void
|
|
*/
|
|
public function saveArticle($articles)
|
|
{
|
|
file_put_contents(
|
|
$this->file,
|
|
json_encode($articles, JSON_PRETTY_PRINT)
|
|
);
|
|
}
|
|
|
|
public function addArticle($title, $content, $author, $category, $tags)
|
|
{
|
|
$articles = $this->getAllArticles();
|
|
|
|
$articles[] = [
|
|
"id" => count($articles)+1,
|
|
"title" => $title,
|
|
"content" => $content,
|
|
"author" => $author,
|
|
"category" => $category,
|
|
"tags" => $tags,
|
|
"creationDate" => date("Y-m-d H:i:s")
|
|
];
|
|
|
|
$this->saveArticle($articles);
|
|
}
|
|
|
|
public function updateArticle($id, $title, $content, $author)
|
|
{
|
|
// TODO: Implement updateArticle() method.
|
|
}
|
|
|
|
public function deleteArticle($id)
|
|
{
|
|
// TODO: Implement deleteArticle() method.
|
|
}
|
|
|
|
public function getArticle($id)
|
|
{
|
|
$articles = $this->getAllArticles();
|
|
|
|
foreach ($articles as $article) {
|
|
if (isset($article['id']) && $article['id'] == $id) {
|
|
return new Article(intval($article['id']), $article['title'], $article['content'], $article['author'], $article['category'], $article['tags'], $article['creationDate']);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public function getAllArticles(): array
|
|
{
|
|
if (!file_exists($this->file)) {
|
|
return [];
|
|
}
|
|
|
|
$json = file_get_contents($this->file);
|
|
$articles = json_decode($json, true);
|
|
|
|
return is_array($articles) ? $articles : [];
|
|
}
|
|
|
|
}
|
|
?>
|