Kommentare im Profil anzeigen
This commit is contained in:
+35
-2
@@ -157,7 +157,9 @@ $isEditMode = (isset($_GET["edit"]) && $_GET["edit"] === "1") || !empty($error);
|
|||||||
</a>
|
</a>
|
||||||
|
|
||||||
<form action="php/controller/deleteArticle-controller.php" method="POST">
|
<form action="php/controller/deleteArticle-controller.php" method="POST">
|
||||||
<input type="hidden" name="id" value="<?php echo htmlspecialchars($userArticle->getID()); ?>">
|
<input type="hidden"
|
||||||
|
name="id"
|
||||||
|
value="<?php echo htmlspecialchars($userArticle->getID()); ?>">
|
||||||
|
|
||||||
<button type="submit"
|
<button type="submit"
|
||||||
class="button"
|
class="button"
|
||||||
@@ -165,7 +167,6 @@ $isEditMode = (isset($_GET["edit"]) && $_GET["edit"] === "1") || !empty($error);
|
|||||||
Löschen
|
Löschen
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
|
|
||||||
@@ -180,9 +181,41 @@ $isEditMode = (isset($_GET["edit"]) && $_GET["edit"] === "1") || !empty($error);
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<h2 class="section-title">Meine Kommentare</h2>
|
||||||
|
|
||||||
|
<div class="articles-list">
|
||||||
|
<?php if (isset($userComments) && count($userComments) > 0): ?>
|
||||||
|
|
||||||
|
<?php foreach ($userComments as $comment): ?>
|
||||||
|
<div class="article-item">
|
||||||
|
<div class="article-meta">
|
||||||
|
<span class="article-date">
|
||||||
|
<?php echo htmlspecialchars($comment->getCreated()); ?>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?php echo nl2br(htmlspecialchars($comment->getContent())); ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a href="index.php?pfad=showArticle&id=<?php echo htmlspecialchars($comment->getArticleId()); ?>"
|
||||||
|
class="edit-link-button">
|
||||||
|
Zum Beitrag
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
|
||||||
|
<?php else: ?>
|
||||||
|
<p>Du hast noch keine Kommentare geschrieben.</p>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php unset($_SESSION["message"]); ?>
|
<?php unset($_SESSION["message"]); ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
require_once "php/model/UserManager.php";
|
require_once "php/model/UserManager.php";
|
||||||
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/CommentManager.php";
|
||||||
require_once "php/validator/user-validator.php";
|
require_once "php/validator/user-validator.php";
|
||||||
|
|
||||||
$error = null;
|
$error = null;
|
||||||
@@ -76,6 +77,9 @@ try {
|
|||||||
$articleManager = ArticleManager::getInstance();
|
$articleManager = ArticleManager::getInstance();
|
||||||
$userArticles = $articleManager->getArticlesByAuthor($_SESSION["user_email"]);
|
$userArticles = $articleManager->getArticlesByAuthor($_SESSION["user_email"]);
|
||||||
|
|
||||||
|
$commentManager = CommentManager::getInstance();
|
||||||
|
$userComments = $commentManager->getCommentsByAuthor($_SESSION["user_email"]);
|
||||||
|
|
||||||
if (!isset($userArticles)) {
|
if (!isset($userArticles)) {
|
||||||
$_SESSION["message"] = "user_has_no_articles";
|
$_SESSION["message"] = "user_has_no_articles";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,4 +42,13 @@ interface CommentManagerDAO
|
|||||||
public function getCommentsByArticle(
|
public function getCommentsByArticle(
|
||||||
$articleId
|
$articleId
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gibt alle Kommentare eines Autors zurück.
|
||||||
|
*
|
||||||
|
* @param string $author E-Mail-Adresse des Autors
|
||||||
|
*
|
||||||
|
* @return Comment[] Liste der Kommentare
|
||||||
|
*/
|
||||||
|
public function getCommentsByAuthor($author);
|
||||||
}
|
}
|
||||||
@@ -1,165 +1,12 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once "CommentManagerDAO.php";
|
|
||||||
require_once "Comment.php";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verwaltet die Speicherung und das Laden von Kommentaren
|
* Lädt alle Kommentare eines Autors.
|
||||||
* über eine SQLite-Datenbank.
|
|
||||||
*
|
*
|
||||||
* @author Caroline Schulte
|
* @param string $author E-Mail-Adresse des Autors
|
||||||
*/
|
|
||||||
class DatabaseCommentManager implements CommentManagerDAO
|
|
||||||
{
|
|
||||||
private static $instance = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Erstellt die Kommentartabelle,
|
|
||||||
* falls diese noch nicht existiert.
|
|
||||||
*
|
|
||||||
* Zusätzlich wird geprüft, ob die Spalte parent_comment_id existiert.
|
|
||||||
*/
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$db = $this->getConnection();
|
|
||||||
|
|
||||||
$db->exec("
|
|
||||||
CREATE TABLE IF NOT EXISTS comments (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
article_id INTEGER NOT NULL,
|
|
||||||
parent_comment_id INTEGER NULL,
|
|
||||||
author TEXT NOT NULL,
|
|
||||||
content TEXT NOT NULL,
|
|
||||||
created TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
");
|
|
||||||
|
|
||||||
$columns = $db->query("PRAGMA table_info(comments);")->fetchAll(PDO::FETCH_ASSOC);
|
|
||||||
$hasParentColumn = false;
|
|
||||||
|
|
||||||
foreach ($columns as $column) {
|
|
||||||
if ($column["name"] === "parent_comment_id") {
|
|
||||||
$hasParentColumn = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$hasParentColumn) {
|
|
||||||
$db->exec("ALTER TABLE comments ADD COLUMN parent_comment_id INTEGER NULL;");
|
|
||||||
}
|
|
||||||
|
|
||||||
unset($db);
|
|
||||||
|
|
||||||
} catch (PDOException $e) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"Kommentardatenbank konnte nicht erstellt werden."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Baut die Verbindung zur SQLite-Datenbank auf.
|
|
||||||
*
|
|
||||||
* @return PDO Datenbankverbindung
|
|
||||||
*/
|
|
||||||
private function getConnection()
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$dsn = 'sqlite:' . __DIR__ . '/../../db/comments.db';
|
|
||||||
|
|
||||||
$db = new PDO($dsn, null, null);
|
|
||||||
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
||||||
|
|
||||||
return $db;
|
|
||||||
|
|
||||||
} catch (PDOException $e) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"Verbindung zur Kommentardatenbank fehlgeschlagen."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gibt die Singleton-Instanz zurück.
|
|
||||||
*
|
|
||||||
* @return DatabaseCommentManager
|
|
||||||
*/
|
|
||||||
public static function getInstance()
|
|
||||||
{
|
|
||||||
if (self::$instance === null) {
|
|
||||||
self::$instance = new DatabaseCommentManager();
|
|
||||||
}
|
|
||||||
|
|
||||||
return self::$instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Speichert einen neuen Kommentar oder eine Antwort.
|
|
||||||
*
|
|
||||||
* @param int $articleId ID des Beitrags
|
|
||||||
* @param string $author Autor des Kommentars
|
|
||||||
* @param string $content Inhalt des Kommentars
|
|
||||||
* @param int|null $parentCommentId ID des Eltern-Kommentars oder null
|
|
||||||
*
|
|
||||||
* @return int ID des neu gespeicherten Kommentars
|
|
||||||
*/
|
|
||||||
public function addComment(
|
|
||||||
$articleId,
|
|
||||||
$author,
|
|
||||||
$content,
|
|
||||||
$parentCommentId = null
|
|
||||||
) {
|
|
||||||
try {
|
|
||||||
$db = $this->getConnection();
|
|
||||||
|
|
||||||
if ($parentCommentId === "" || $parentCommentId === 0 || $parentCommentId === "0") {
|
|
||||||
$parentCommentId = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$sql = "
|
|
||||||
INSERT INTO comments (
|
|
||||||
article_id,
|
|
||||||
parent_comment_id,
|
|
||||||
author,
|
|
||||||
content
|
|
||||||
)
|
|
||||||
VALUES (
|
|
||||||
:articleId,
|
|
||||||
:parentCommentId,
|
|
||||||
:author,
|
|
||||||
:content
|
|
||||||
)
|
|
||||||
";
|
|
||||||
|
|
||||||
$command = $db->prepare($sql);
|
|
||||||
|
|
||||||
$command->execute([
|
|
||||||
":articleId" => $articleId,
|
|
||||||
":parentCommentId" => $parentCommentId,
|
|
||||||
":author" => $author,
|
|
||||||
":content" => $content
|
|
||||||
]);
|
|
||||||
|
|
||||||
return intval($db->lastInsertId());
|
|
||||||
|
|
||||||
} catch (PDOException $e) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"Kommentar konnte nicht gespeichert werden."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Lädt alle Kommentare eines Beitrags.
|
|
||||||
*
|
|
||||||
* @param int $articleId ID des Beitrags
|
|
||||||
*
|
*
|
||||||
* @return Comment[]
|
* @return Comment[]
|
||||||
*/
|
*/
|
||||||
public function getCommentsByArticle(
|
public function getCommentsByAuthor($author)
|
||||||
$articleId
|
{
|
||||||
) {
|
|
||||||
try {
|
try {
|
||||||
$db = $this->getConnection();
|
$db = $this->getConnection();
|
||||||
|
|
||||||
@@ -177,14 +24,14 @@ class DatabaseCommentManager implements CommentManagerDAO
|
|||||||
content,
|
content,
|
||||||
created
|
created
|
||||||
FROM comments
|
FROM comments
|
||||||
WHERE article_id = :articleId
|
WHERE author = :author
|
||||||
ORDER BY created ASC
|
ORDER BY created DESC
|
||||||
";
|
";
|
||||||
|
|
||||||
$command = $db->prepare($sql);
|
$command = $db->prepare($sql);
|
||||||
|
|
||||||
$command->execute([
|
$command->execute([
|
||||||
":articleId" => $articleId
|
":author" => $author
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$comments = [];
|
$comments = [];
|
||||||
@@ -219,4 +66,3 @@ class DatabaseCommentManager implements CommentManagerDAO
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user