diff --git a/content/profile.php b/content/profile.php index aefdc10..4ac69fc 100644 --- a/content/profile.php +++ b/content/profile.php @@ -93,7 +93,7 @@ $isEditMode = (isset($_GET["edit"]) && $_GET["edit"] === "1") || !empty($error);
- +

Meine Beiträge

@@ -157,7 +157,9 @@ $isEditMode = (isset($_GET["edit"]) && $_GET["edit"] === "1") || !empty($error);
- +
@@ -180,9 +181,41 @@ $isEditMode = (isset($_GET["edit"]) && $_GET["edit"] === "1") || !empty($error); + + +
+ +

Meine Kommentare

+ +
+ 0): ?> + + +
+ + +

+ getContent())); ?> +

+ + + Zum Beitrag + +
+ + + +

Du hast noch keine Kommentare geschrieben.

+
+ diff --git a/php/controller/profile-controller.php b/php/controller/profile-controller.php index e183b20..9990fbc 100644 --- a/php/controller/profile-controller.php +++ b/php/controller/profile-controller.php @@ -3,6 +3,7 @@ require_once "php/model/UserManager.php"; require_once "php/model/Article.php"; require_once "php/model/ArticleManager.php"; +require_once "php/model/CommentManager.php"; require_once "php/validator/user-validator.php"; $error = null; @@ -76,6 +77,9 @@ try { $articleManager = ArticleManager::getInstance(); $userArticles = $articleManager->getArticlesByAuthor($_SESSION["user_email"]); + $commentManager = CommentManager::getInstance(); + $userComments = $commentManager->getCommentsByAuthor($_SESSION["user_email"]); + if (!isset($userArticles)) { $_SESSION["message"] = "user_has_no_articles"; } diff --git a/php/model/CommentManagerDAO.php b/php/model/CommentManagerDAO.php index 63aaf83..348126e 100644 --- a/php/model/CommentManagerDAO.php +++ b/php/model/CommentManagerDAO.php @@ -42,4 +42,13 @@ interface CommentManagerDAO public function getCommentsByArticle( $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); } \ No newline at end of file diff --git a/php/model/DatabaseCommentManager.php b/php/model/DatabaseCommentManager.php index 5f61e13..29f2699 100644 --- a/php/model/DatabaseCommentManager.php +++ b/php/model/DatabaseCommentManager.php @@ -1,222 +1,68 @@ -getConnection(); - /** - * 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(); +$sql = " +SELECT +id, +article_id, +CASE +WHEN parent_comment_id IS NULL THEN NULL +WHEN parent_comment_id = '' THEN NULL +WHEN parent_comment_id = 0 THEN NULL +ELSE parent_comment_id +END AS parent_comment_id, +author, +content, +created +FROM comments +WHERE author = :author +ORDER BY created DESC +"; - $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 - ); - "); +$command = $db->prepare($sql); - $columns = $db->query("PRAGMA table_info(comments);")->fetchAll(PDO::FETCH_ASSOC); - $hasParentColumn = false; +$command->execute([ +":author" => $author +]); - foreach ($columns as $column) { - if ($column["name"] === "parent_comment_id") { - $hasParentColumn = true; - break; - } - } +$comments = []; - if (!$hasParentColumn) { - $db->exec("ALTER TABLE comments ADD COLUMN parent_comment_id INTEGER NULL;"); - } +while ($row = $command->fetch(PDO::FETCH_ASSOC)) { +$parentCommentId = null; - unset($db); +if ( +isset($row["parent_comment_id"]) +&& $row["parent_comment_id"] !== null +&& $row["parent_comment_id"] !== "" +&& intval($row["parent_comment_id"]) !== 0 +) { +$parentCommentId = intval($row["parent_comment_id"]); +} - } catch (PDOException $e) { - throw new RuntimeException( - "Kommentardatenbank konnte nicht erstellt werden." - ); - } - } +$comments[] = new Comment( +intval($row["id"]), +intval($row["article_id"]), +$parentCommentId, +$row["author"], +$row["content"], +$row["created"] +); +} - /** - * Baut die Verbindung zur SQLite-Datenbank auf. - * - * @return PDO Datenbankverbindung - */ - private function getConnection() - { - try { - $dsn = 'sqlite:' . __DIR__ . '/../../db/comments.db'; +return $comments; - $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[] - */ - public function getCommentsByArticle( - $articleId - ) { - try { - $db = $this->getConnection(); - - $sql = " - SELECT - id, - article_id, - CASE - WHEN parent_comment_id IS NULL THEN NULL - WHEN parent_comment_id = '' THEN NULL - WHEN parent_comment_id = 0 THEN NULL - ELSE parent_comment_id - END AS parent_comment_id, - author, - content, - created - FROM comments - WHERE article_id = :articleId - ORDER BY created ASC - "; - - $command = $db->prepare($sql); - - $command->execute([ - ":articleId" => $articleId - ]); - - $comments = []; - - while ($row = $command->fetch(PDO::FETCH_ASSOC)) { - $parentCommentId = null; - - if ( - isset($row["parent_comment_id"]) - && $row["parent_comment_id"] !== null - && $row["parent_comment_id"] !== "" - && intval($row["parent_comment_id"]) !== 0 - ) { - $parentCommentId = intval($row["parent_comment_id"]); - } - - $comments[] = new Comment( - intval($row["id"]), - intval($row["article_id"]), - $parentCommentId, - $row["author"], - $row["content"], - $row["created"] - ); - } - - return $comments; - - } catch (PDOException $e) { - throw new RuntimeException( - "Kommentare konnten nicht geladen werden." - ); - } - } +} catch (PDOException $e) { +throw new RuntimeException( +"Kommentare konnten nicht geladen werden." +); +} } \ No newline at end of file