Kommentare ohne js verfassen
This commit is contained in:
+156
-30
@@ -3,32 +3,153 @@ if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
header("Content-Type: application/json");
|
||||
|
||||
require_once "../model/CommentManager.php";
|
||||
|
||||
if (!isset($_SESSION["user_email"])) {
|
||||
echo json_encode([
|
||||
"success" => false,
|
||||
"message" => "Du musst angemeldet sein, um zu kommentieren."
|
||||
]);
|
||||
/**
|
||||
* Prüft, ob die Anfrage durch JavaScript per AJAX gesendet wurde.
|
||||
*/
|
||||
$isAjaxRequest = isset($_SERVER["HTTP_X_REQUESTED_WITH"])
|
||||
&& strtolower($_SERVER["HTTP_X_REQUESTED_WITH"]) === "xmlhttprequest";
|
||||
|
||||
/**
|
||||
* Gibt das Ergebnis entweder als JSON zurück oder leitet
|
||||
* bei einem normalen Formularaufruf wieder zum Beitrag zurück.
|
||||
*
|
||||
* @param bool $success War das Speichern erfolgreich?
|
||||
* @param string $message Rückmeldung für den Benutzer
|
||||
* @param int|null $articleId ID des Beitrags
|
||||
* @param array $additionalData Zusätzliche Daten für AJAX
|
||||
*/
|
||||
function sendCommentResponse(
|
||||
$success,
|
||||
$message,
|
||||
$articleId,
|
||||
$additionalData = []
|
||||
) {
|
||||
global $isAjaxRequest;
|
||||
|
||||
if ($isAjaxRequest) {
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
|
||||
echo json_encode(
|
||||
array_merge(
|
||||
[
|
||||
"success" => $success,
|
||||
"message" => $message
|
||||
],
|
||||
$additionalData
|
||||
)
|
||||
);
|
||||
|
||||
exit();
|
||||
}
|
||||
|
||||
/*
|
||||
* Bei deaktiviertem JavaScript wird die Rückmeldung
|
||||
* in der Session gespeichert und die Beitragsseite neu geladen.
|
||||
*/
|
||||
$_SESSION["comment_message"] = $message;
|
||||
$_SESSION["comment_message_type"] = $success ? "success" : "error";
|
||||
|
||||
if ($articleId !== null) {
|
||||
header(
|
||||
"Location: ../../index.php?pfad=showArticle&id="
|
||||
. urlencode((string) $articleId)
|
||||
. "#comments"
|
||||
);
|
||||
} else {
|
||||
header("Location: ../../index.php");
|
||||
}
|
||||
|
||||
exit();
|
||||
}
|
||||
|
||||
$articleId = $_POST["article_id"] ?? null;
|
||||
$content = trim($_POST["content"] ?? "");
|
||||
$parentCommentId = $_POST["parent_comment_id"] ?? null;
|
||||
/*
|
||||
* Nur POST-Anfragen dürfen Kommentare erstellen.
|
||||
*/
|
||||
if ($_SERVER["REQUEST_METHOD"] !== "POST") {
|
||||
sendCommentResponse(
|
||||
false,
|
||||
"Ungültige Anfrage.",
|
||||
null
|
||||
);
|
||||
}
|
||||
|
||||
if ($parentCommentId === "" || $parentCommentId === "0") {
|
||||
/*
|
||||
* Die Beitrags-ID wird zuerst eingelesen,
|
||||
* damit bei Fehlern wieder zum Beitrag zurückgeleitet werden kann.
|
||||
*/
|
||||
$articleId = filter_input(
|
||||
INPUT_POST,
|
||||
"article_id",
|
||||
FILTER_VALIDATE_INT
|
||||
);
|
||||
|
||||
/*
|
||||
* Ein Benutzer muss angemeldet sein.
|
||||
*/
|
||||
if (!isset($_SESSION["user_email"])) {
|
||||
sendCommentResponse(
|
||||
false,
|
||||
"Du musst angemeldet sein, um zu kommentieren.",
|
||||
$articleId !== false ? $articleId : null
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
* Weitere Formulardaten einlesen.
|
||||
*/
|
||||
|
||||
$content = trim($_POST["content"] ?? "");
|
||||
|
||||
$parentCommentId = filter_input(
|
||||
INPUT_POST,
|
||||
"parent_comment_id",
|
||||
FILTER_VALIDATE_INT
|
||||
);
|
||||
|
||||
/*
|
||||
* Ein leerer Wert bedeutet, dass es sich um einen
|
||||
* normalen Hauptkommentar handelt.
|
||||
*/
|
||||
if (
|
||||
!isset($_POST["parent_comment_id"])
|
||||
|| $_POST["parent_comment_id"] === ""
|
||||
|| $_POST["parent_comment_id"] === "0"
|
||||
) {
|
||||
$parentCommentId = null;
|
||||
}
|
||||
|
||||
if (empty($articleId) || empty($content)) {
|
||||
echo json_encode([
|
||||
"success" => false,
|
||||
"message" => "Kommentar darf nicht leer sein."
|
||||
]);
|
||||
exit();
|
||||
if ($articleId === false || $articleId === null) {
|
||||
sendCommentResponse(
|
||||
false,
|
||||
"Der zugehörige Beitrag ist ungültig.",
|
||||
null
|
||||
);
|
||||
}
|
||||
|
||||
if ($content === "") {
|
||||
sendCommentResponse(
|
||||
false,
|
||||
"Der Kommentar darf nicht leer sein.",
|
||||
$articleId
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
* Eine ungültige Eltern-ID darf nicht gespeichert werden.
|
||||
*/
|
||||
if (
|
||||
isset($_POST["parent_comment_id"])
|
||||
&& $_POST["parent_comment_id"] !== ""
|
||||
&& $_POST["parent_comment_id"] !== "0"
|
||||
&& $parentCommentId === false
|
||||
) {
|
||||
sendCommentResponse(
|
||||
false,
|
||||
"Der ausgewählte Kommentar ist ungültig.",
|
||||
$articleId
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -41,18 +162,23 @@ try {
|
||||
$parentCommentId
|
||||
);
|
||||
|
||||
echo json_encode([
|
||||
"success" => true,
|
||||
"commentId" => $commentId,
|
||||
"author" => $_SESSION["user_email"],
|
||||
"content" => $content,
|
||||
"created" => date("Y-m-d H:i:s"),
|
||||
"parentCommentId" => $parentCommentId
|
||||
]);
|
||||
sendCommentResponse(
|
||||
true,
|
||||
"Der Kommentar wurde erfolgreich gespeichert.",
|
||||
$articleId,
|
||||
[
|
||||
"commentId" => $commentId,
|
||||
"author" => $_SESSION["user_email"],
|
||||
"content" => $content,
|
||||
"created" => date("Y-m-d H:i:s"),
|
||||
"parentCommentId" => $parentCommentId
|
||||
]
|
||||
);
|
||||
|
||||
} catch (Exception $e) {
|
||||
echo json_encode([
|
||||
"success" => false,
|
||||
"message" => "Kommentar konnte nicht gespeichert werden."
|
||||
]);
|
||||
} catch (Throwable $e) {
|
||||
sendCommentResponse(
|
||||
false,
|
||||
"Der Kommentar konnte nicht gespeichert werden.",
|
||||
$articleId
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user