public static function createNew($forum, $params, $poll = null)
{
$topic = new static(['forum_id' => $forum->forum_id, 'topic_time' => Carbon::now(), 'topic_title' => $params['title'] ?? null, 'topic_poster' => $params['user']->user_id, 'topic_first_poster_name' => $params['user']->username, 'topic_first_poster_colour' => $params['user']->user_colour]);
DB::transaction(function () use($forum, $topic, $params, $poll) {
$topic->save();
$topic->addPost($params['user'], $params['body']);
if ($poll !== null) {
$topic->poll($poll)->save();
}
if (($params['cover'] ?? null) !== null) {
$params['cover']->topic()->associate($topic);
$params['cover']->save();
}
});
return $topic->fresh();
}
public function store(HttpRequest $request, $forum_id) { $this->validate($request, ['title' => 'required', 'body' => 'required']); $forum = Forum::findOrFail($forum_id); $this->authorizePost($forum, null); $topic = Topic::createNew(['forum' => $forum, 'title' => $request->input('title'), 'poster' => Auth::user(), 'body' => $request->input('body'), 'notifyReplies' => false, 'cover' => TopicCover::findForUse(presence($request->input('cover_id')), Auth::user())]); Event::fire(new TopicWasCreated($topic, $topic->posts->last(), Auth::user())); return ujs_redirect(route('forum.topics.show', $topic)); }