isLocked) { http_response_code(403); msg_error("This topic is locked!"); exit; } $attachments = reArrayFiles($_FILES["files"]); if (count($attachments) > MAX_ATTACHMENT_COUNT) RequestUtils::triggerFormError(__("Too many attachments"), $formId); // check all attachments before saving one foreach ($attachments as $att) { if ($att["size"] > MAX_ATTACHMENT_SIZE) { RequestUtils::triggerFormError(__("Individual file size exceeded"), $formId); } } $message = trim(RequestUtils::getRequiredField("message", $formId)); if (strlen($message) < 1 || strlen($message) > 0x8000) { RequestUtils::triggerFormError(__("Message too short or too long!"), $formId); } $item = new Post(); $item->id = $db->generateId(); $item->authorId = $currentUser->id; $item->topicId = $topicId; $item->content = $message; $item->postDate = new DateTimeImmutable(); $item->deleted = false; $item->edited = false; $db->insert($item); foreach ($attachments as $att) { [ "name" => $name, "type" => $type, "tmp_name" => $tmpName, ] = $att; $attachment = new Attachment(); $attachment->id = $db->generateId(); $attachment->name = $name; $attachment->mimeType = $type; $attachment->postId = $item->id; $attachment->contents = file_get_contents($tmpName); $db->insert($attachment); } if (($_POST["subscribe"] ?? null) === "on") { $subscription = new Subscription; $subscription->userId = $currentUser->id; $subscription->topicId = $topic->id; if (!$db->fetchWhere($subscription, ["user_id", "topic_id"])) { $subscription->id = $db->generateId(); $db->insert($subscription); } } /** @var Subscription[] $allSubscriptions */ $allSubscriptions = $db->fetchCustom(Subscription::class, "WHERE topic_id = $1 AND user_id <> $2", [ $topicId, $currentUser->id ]); foreach ($allSubscriptions as $subscription) { $subUser = new User; $subUser->id = $subscription->userId; if (!$db->fetch($subUser)) continue; $email = new PendingEmail; $email->id = $db->generateId(); $email->sender = env("MAILER_FROM"); $email->recipient = (new Address($subUser->email, $subUser->displayName))->toString(); $email->subject = __("Someone made a new post in \"%topic%\"", [ "topic" => $topic->title, ]); $email->plaintextBody = __("Hello %name%,\n" . "\n" . "%otherName% has added the following post to \"%topic%\":\n" . "%content%\n" . "\n" . "Click here to view: %link%\n", [ "name" => $subUser->displayName, "otherName" => $currentUser->displayName, "topic" => $topic->title, "content" => quote_message(html_entity_decode(renderPostSummary($message))), "link" => env("PUBLIC_URL") . "?_action=viewtopic&topic=" . urlencode($topicId) . "#post-" . urlencode($item->id), ]); $db->insert($email); } header("Location: ?_action=viewtopic&topic=" . urlencode($topicId) . "#form");