findOrFail() public method

Find a discussion by ID, optionally making sure it is visible to a certain user, or throw an exception.
public findOrFail ( integer $id, User $user = null ) : Discussion
$id integer
$user Flarum\Core\User
return Flarum\Core\Discussion
Example #1
0
 /**
  * @param PostReply $command
  * @return CommentPost
  * @throws \Flarum\Core\Exception\PermissionDeniedException
  */
 public function handle(PostReply $command)
 {
     $actor = $command->actor;
     // Make sure the user has permission to reply to this discussion. First,
     // make sure the discussion exists and that the user has permission to
     // view it; if not, fail with a ModelNotFound exception so we don't give
     // away the existence of the discussion. If the user is allowed to view
     // it, check if they have permission to reply.
     $discussion = $this->discussions->findOrFail($command->discussionId, $actor);
     $this->assertCan($actor, 'reply', $discussion);
     // Create a new Post entity, persist it, and dispatch domain events.
     // Before persistence, though, fire an event to give plugins an
     // opportunity to alter the post entity based on data in the command.
     $post = CommentPost::reply($discussion->id, array_get($command->data, 'attributes.content'), $actor->id, $command->ipAddress);
     if ($actor->isAdmin() && ($time = array_get($command->data, 'attributes.time'))) {
         $post->time = new DateTime($time);
     }
     $this->events->fire(new PostWillBeSaved($post, $actor, $command->data));
     $this->validator->assertValid($post->getAttributes());
     $post->save();
     $this->notifications->onePerUser(function () use($post, $actor) {
         $this->dispatchEventsFor($post, $actor);
     });
     return $post;
 }
Example #2
0
 /**
  * @param DeleteDiscussion $command
  * @return \Flarum\Core\Discussion
  * @throws PermissionDeniedException
  */
 public function handle(DeleteDiscussion $command)
 {
     $actor = $command->actor;
     $discussion = $this->discussions->findOrFail($command->discussionId, $actor);
     $this->assertCan($actor, 'delete', $discussion);
     $this->events->fire(new DiscussionWillBeDeleted($discussion, $actor, $command->data));
     $discussion->delete();
     $this->dispatchEventsFor($discussion, $actor);
     return $discussion;
 }
Example #3
0
 /**
  * {@inheritdoc}
  */
 protected function data(ServerRequestInterface $request, Document $document)
 {
     $discussionId = array_get($request->getQueryParams(), 'id');
     $actor = $request->getAttribute('actor');
     $include = $this->extractInclude($request);
     $discussion = $this->discussions->findOrFail($discussionId, $actor);
     if (in_array('posts', $include)) {
         $postRelationships = $this->getPostRelationships($include);
         $this->includePosts($discussion, $request, $postRelationships);
     }
     return $discussion;
 }
Example #4
0
 /**
  * @param ReadDiscussion $command
  * @return \Flarum\Core\DiscussionState
  * @throws \Flarum\Core\Exception\PermissionDeniedException
  */
 public function handle(ReadDiscussion $command)
 {
     $actor = $command->actor;
     $this->assertRegistered($actor);
     $discussion = $this->discussions->findOrFail($command->discussionId, $actor);
     $state = $discussion->stateFor($actor);
     $state->read($command->readNumber);
     $this->events->fire(new DiscussionStateWillBeSaved($state));
     $state->save();
     $this->dispatchEventsFor($state);
     return $state;
 }
Example #5
0
 /**
  * @param EditDiscussion $command
  * @return \Flarum\Core\Discussion
  * @throws PermissionDeniedException
  */
 public function handle(EditDiscussion $command)
 {
     $actor = $command->actor;
     $data = $command->data;
     $attributes = array_get($data, 'attributes', []);
     $discussion = $this->discussions->findOrFail($command->discussionId, $actor);
     if (isset($attributes['title'])) {
         $this->assertCan($actor, 'rename', $discussion);
         $discussion->rename($attributes['title']);
     }
     if (isset($attributes['isHidden'])) {
         $this->assertCan($actor, 'hide', $discussion);
         if ($attributes['isHidden']) {
             $discussion->hide($actor);
         } else {
             $discussion->restore();
         }
     }
     $this->events->fire(new DiscussionWillBeSaved($discussion, $actor, $data));
     $this->validator->assertValid($discussion->getDirty());
     $discussion->save();
     $this->dispatchEventsFor($discussion, $actor);
     return $discussion;
 }