Exemple #1
0
 /**
  * Find posts by their IDs, optionally making sure they are visible to a
  * certain user.
  *
  * @param array $ids
  * @param \Flarum\Core\User|null $actor
  * @return \Illuminate\Database\Eloquent\Collection
  */
 public function findByIds(array $ids, User $actor = null)
 {
     $discussions = $this->getDiscussionsForPosts($ids, $actor);
     $posts = Post::whereIn('id', $ids)->where(function ($query) use($discussions, $actor) {
         foreach ($discussions as $discussion) {
             $query->orWhere(function ($query) use($discussion, $actor) {
                 $query->where('discussion_id', $discussion->id);
                 event(new ScopePostVisibility($discussion, $query, $actor));
             });
         }
     })->get();
     $posts = $posts->sort(function ($a, $b) use($ids) {
         $aPos = array_search($a->id, $ids);
         $bPos = array_search($b->id, $ids);
         if ($aPos === $bPos) {
             return 0;
         }
         return $aPos < $bPos ? -1 : 1;
     });
     return $posts;
 }
Exemple #2
0
 /**
  * @param array $ids
  * @param User|null $actor
  * @return mixed
  */
 protected function queryIds(array $ids, User $actor = null)
 {
     $discussions = $this->getDiscussionsForPosts($ids, $actor);
     return Post::whereIn('id', $ids)->where(function ($query) use($discussions, $actor) {
         foreach ($discussions as $discussion) {
             $query->orWhere(function ($query) use($discussion, $actor) {
                 $query->where('discussion_id', $discussion->id);
                 event(new ScopePostVisibility($discussion, $query, $actor));
             });
         }
         $query->orWhereRaw('FALSE');
     });
 }