bus = $bus; } /** * Update a discussion according to input from the API request, and return * it ready to be serialized and assigned to the JsonApi response. * * @param JsonApiRequest $request * @param Document $document * @return \Flarum\Core\Discussions\Discussion */ protected function data(JsonApiRequest $request, Document $document) { $actor = $request->actor; $discussionId = $request->get('id'); $data = $request->get('data'); $discussion = $this->bus->dispatch( new EditDiscussion($discussionId, $actor, $data) ); // TODO: Refactor the ReadDiscussion (state) command into EditDiscussion? // That's what extensions will do anyway. if ($readNumber = array_get($data, 'attributes.readNumber')) { $state = $this->bus->dispatch( new ReadDiscussion($discussionId, $actor, $readNumber) ); $discussion = $state->discussion; } if ($posts = $discussion->getModifiedPosts()) { $discussion->posts_ids = $discussion->postsVisibleTo($actor)->orderBy('time')->lists('id'); $discussion->posts = array_filter($posts, function ($post) { return $post->exists; }); $request->include = array_merge($request->include, ['posts']); $request->link = array_merge($request->include, ['posts', 'posts.discussion', 'posts.user']); } return $discussion; } }