184 lines
8.0 KiB
PHP
184 lines
8.0 KiB
PHP
<?php
|
|
$comments = [];
|
|
$mainComments = [];
|
|
$repliesByParent = [];
|
|
$articleObj = null;
|
|
|
|
include_once 'php/controller/showArticle-controller.php';
|
|
?>
|
|
<!--
|
|
Seite: Anzeige für Beiträge
|
|
Funktion: Stellt einen übergebenen Beitrag dar.
|
|
-->
|
|
<!-- Hauptcontainer für die Beitragsansicht (Ausschließlich der Content-Bereich) -->
|
|
<main class="article-view-container">
|
|
<?php include_once "includes/alertMessages.php"?>
|
|
|
|
<!-- Metadaten & Titel -->
|
|
<div class="article-view-top-section">
|
|
|
|
<div class="article-view-top-section">
|
|
|
|
<div class="category-and-likes-row">
|
|
<?php if (isset($category) && !empty($category)): ?>
|
|
<span class="article-view-category"><?php echo htmlspecialchars($category); ?></span>
|
|
<?php endif; ?>
|
|
|
|
<!-- Like-Anzeige und dynamischer Like-Button -->
|
|
<?php if (isset($articleObj) && $articleObj !== null): ?>
|
|
<div class="article-view-likes">
|
|
<span>❤️ <span class="like-count"><?php echo $articleObj->getLikeCount(); ?></span></span>
|
|
|
|
<?php if (isset($_SESSION["user_email"])): ?>
|
|
<a href="php/controller/like-controller.php?id=<?php echo $articleObj->getId(); ?>" class="like-toggle-btn">
|
|
<?php echo $articleObj->hasLiked($_SESSION["user_email"]) ? '👎 Gefällt mir nicht mehr' : '👍 Gefällt mir'; ?>
|
|
</a>
|
|
<?php else: ?>
|
|
<span class="login-hint">(Anmelden zum Liken)</span>
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
<h1 class="article-view-title">
|
|
<?php if (isset($title)) { echo htmlspecialchars($title); } ?>
|
|
</h1>
|
|
|
|
<div class="article-view-meta">
|
|
<?php if (isset($author) && !empty($author)): ?>
|
|
<span class="article-view-author">Von: <strong><?php echo htmlspecialchars($author); ?></strong></span>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- Beitrags-Inhalt -->
|
|
<div class="article-view-content">
|
|
<?php if (isset($content)): ?>
|
|
<?php
|
|
// Versuchen, den Inhalt von JSON in ein PHP-Array umzuwandeln
|
|
$blocks = json_decode($content, true);
|
|
|
|
// Wenn das JSON valide ist und Blöcke enthält
|
|
if (json_last_error() === JSON_ERROR_NONE && is_array($blocks)):
|
|
foreach ($blocks as $block):
|
|
if (isset($block['type']) && isset($block['value'])):
|
|
if ($block['type'] === 'text'): ?>
|
|
<!-- Textblock mit XSS-Schutz und Erhalt von Zeilenumbrüchen -->
|
|
<div class="article-view-body block-text">
|
|
<?php echo nl2br(htmlspecialchars($block['value'])); ?>
|
|
</div>
|
|
<?php elseif ($block['type'] === 'image'): ?>
|
|
<!-- Bildblock, der auf den relativen Pfad im uploads-Ordner verweist -->
|
|
<div class="article-view-body block-image">
|
|
<img src="<?php echo htmlspecialchars($block['value']); ?>" alt="Beitragsbild">
|
|
</div>
|
|
<?php endif;
|
|
endif;
|
|
endforeach;
|
|
else: ?>
|
|
<!-- Fallback: Wenn der Beitrag alten Reintext aus der DB enthält -->
|
|
<div class="article-view-body block-text">
|
|
<?php echo nl2br(htmlspecialchars($content)); ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
<!-- Beitrags-Endbereich (Tags) -->
|
|
<?php if (isset($tags) && !empty($tags)): ?>
|
|
<div class="article-view-bottom-section">
|
|
<div class="article-view-tags-label">Tags:</div>
|
|
<div class="article-view-tags-list">
|
|
<?php
|
|
// Falls $tags ein String ist (z.B. "Web, CSS"), in ein Array umwandeln
|
|
$tagArray = is_array($tags) ? $tags : explode(',', $tags);
|
|
foreach ($tagArray as $tag):
|
|
$trimmedTag = trim($tag);
|
|
if (!empty($trimmedTag)):
|
|
?>
|
|
<span class="article-view-tag-item"><?php echo htmlspecialchars($trimmedTag); ?></span>
|
|
<?php
|
|
endif;
|
|
endforeach;
|
|
?>
|
|
</div>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<section class="article-comments-section">
|
|
<h2>Kommentare</h2>
|
|
|
|
<div id="comments-list">
|
|
<?php if (!empty($mainComments)): ?>
|
|
<?php foreach ($mainComments as $comment): ?>
|
|
<div class="comment-item" data-comment-id="<?php echo htmlspecialchars($comment->getId()); ?>">
|
|
<p>
|
|
<strong><?php echo htmlspecialchars($comment->getAuthor()); ?></strong>
|
|
<span><?php echo htmlspecialchars($comment->getCreated()); ?></span>
|
|
</p>
|
|
|
|
<p><?php echo nl2br(htmlspecialchars($comment->getContent())); ?></p>
|
|
|
|
<?php if (isset($_SESSION["user_email"])): ?>
|
|
<button type="button"
|
|
class="reply-button"
|
|
data-comment-id="<?php echo htmlspecialchars($comment->getId()); ?>"
|
|
data-author="<?php echo htmlspecialchars($comment->getAuthor()); ?>">
|
|
Antworten
|
|
</button>
|
|
<?php endif; ?>
|
|
|
|
<div class="comment-replies">
|
|
<?php if (isset($repliesByParent[$comment->getId()])): ?>
|
|
<?php foreach ($repliesByParent[$comment->getId()] as $reply): ?>
|
|
<div class="comment-item comment-reply">
|
|
<p>
|
|
<strong><?php echo htmlspecialchars($reply->getAuthor()); ?></strong>
|
|
<span><?php echo htmlspecialchars($reply->getCreated()); ?></span>
|
|
</p>
|
|
|
|
<p><?php echo nl2br(htmlspecialchars($reply->getContent())); ?></p>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
<?php else: ?>
|
|
<p class="no-comments-message">
|
|
Noch keine Kommentare vorhanden.
|
|
</p>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
<?php if (isset($_SESSION["user_email"])): ?>
|
|
<form id="comment-form">
|
|
<input type="hidden"
|
|
name="article_id"
|
|
value="<?php echo htmlspecialchars($_GET["id"] ?? ""); ?>">
|
|
|
|
<input type="hidden"
|
|
name="parent_comment_id"
|
|
id="parent-comment-id"
|
|
value="">
|
|
|
|
<p id="reply-info" class="reply-info" style="display: none;"></p>
|
|
|
|
<textarea name="content"
|
|
id="comment-content"
|
|
placeholder="Schreibe einen Kommentar..."
|
|
required></textarea>
|
|
|
|
<button type="submit" class="button">
|
|
Kommentar senden
|
|
</button>
|
|
</form>
|
|
<?php else: ?>
|
|
<div class="comment-login-hint">
|
|
<p>Melde dich an, um einen Kommentar zu schreiben.</p>
|
|
<a href="index.php?pfad=login" class="button">Jetzt anmelden</a>
|
|
</div>
|
|
<?php endif; ?>
|
|
</section>
|
|
</main>
|