bus = $bus; } /** * {@inheritdoc} */ protected function data(ServerRequestInterface $request, Document $document) { $actor = RequestUtil::getActor($request); $discussionId = Arr::get($request->getQueryParams(), 'id'); $data = Arr::get($request->getParsedBody(), '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 = Arr::get($data, 'attributes.lastReadPostNumber')) { $state = $this->bus->dispatch( new ReadDiscussion($discussionId, $actor, $readNumber) ); $discussion = $state->discussion; } if ($posts = $discussion->getModifiedPosts()) { $posts = (new Collection($posts))->load('discussion', 'user'); $discussionPosts = $discussion->posts()->whereVisibleTo($actor)->oldest()->pluck('id')->all(); foreach ($discussionPosts as &$id) { foreach ($posts as $post) { if ($id == $post->id) { $id = $post; } } } $discussion->setRelation('posts', $discussionPosts); $this->include = array_merge($this->include, ['posts', 'posts.discussion', 'posts.user']); } return $discussion; } }