Пример #1
0
 /**
  * Get all posts for a thread.
  *
  * @param Topic $topic       The thread to fetch the posts for.
  * @param bool  $withTrashed Find trashed posts?
  *
  * @return mixed
  */
 public function allForTopic(Topic $topic, $withTrashed = false)
 {
     $postsPerPage = $this->settings->get('user.posts_per_page', 10);
     $baseQuery = $this->postModel->with(['author', 'likes'])->where('topic_id', '=', $topic->id);
     if ($withTrashed) {
         $baseQuery = $baseQuery->withTrashed();
     }
     return $baseQuery->paginate($postsPerPage);
 }
Пример #2
0
 /**
  * @param PermissionChecker $permissionChecker
  * @param SearchRequest     $searchRequest
  *
  * @return \Illuminate\Http\RedirectResponse
  */
 public function makeSearch(PermissionChecker $permissionChecker, SearchRequest $searchRequest)
 {
     if ($searchRequest->result != 'posts') {
         $searchRequest->result = 'topics';
     }
     if ($searchRequest->result == 'topics') {
         $query = Topic::with(['firstPost']);
         $query->leftJoin('posts', 'topics.first_post_id', '=', 'posts.id');
         $query->where(function ($query) use(&$searchRequest) {
             $query->where(function ($query) use(&$searchRequest) {
                 $query->where('topics.title', 'like', '%' . $searchRequest->keyword . '%');
                 $query->orWhere('posts.content', 'like', '%' . $searchRequest->keyword . '%');
             });
         });
     } else {
         $query = Post::with(['topic']);
         $query->leftJoin('topics', 'posts.topic_id', '=', 'topics.id');
         $query->where('posts.content', 'like', '%' . $searchRequest->keyword . '%');
     }
     if ($searchRequest->author) {
         $query->leftJoin('users', 'posts.user_id', '=', 'users.id');
         $query->where(function ($query) use(&$searchRequest) {
             if ($searchRequest->matchusername) {
                 $query->where('users.name', $searchRequest->author);
                 $query->orWhere('posts.username', $searchRequest->author);
             } else {
                 $query->where('users.name', 'like', '%' . $searchRequest->author . '%');
                 $query->orWhere('posts.username', 'like', '%' . $searchRequest->author . '%');
             }
         });
     }
     if ($searchRequest->topic_replies_type) {
         switch ($searchRequest->topic_replies_type) {
             case 'atmost':
                 $query->where('topics.num_posts', '<=', $searchRequest->topic_replies);
                 break;
             case 'atleast':
                 $query->where('topics.num_posts', '>=', $searchRequest->topic_replies);
                 break;
             case 'exactly':
             default:
                 $query->where('topics.num_posts', $searchRequest->topic_replies);
                 break;
         }
     }
     if ($searchRequest->post_date) {
         $postDateType = '>=';
         if ($searchRequest->post_date_type == 'older') {
             $postDateType = '<=';
         }
         switch ($searchRequest->post_date) {
             case 'yesterday':
                 $postDate = '-1 day';
                 break;
             case 'oneweek':
                 $postDate = '-1 week';
                 break;
             case 'twoweek':
                 $postDate = '-2 weeks';
                 break;
             case 'onemonth':
                 $postDate = '-1 month';
                 break;
             case 'threemonth':
                 $postDate = '-3 months';
                 break;
             case 'sixmonth':
                 $postDate = '-3 months';
                 break;
             case 'oneyear':
                 $postDate = '-1 year';
                 break;
             default:
                 $postDate = '';
                 break;
         }
         if ($postDate) {
             $query->where($searchRequest->result . '.created_at', $postDateType, new \DateTime('today ' . $postDate));
         }
     }
     if (is_array($searchRequest->forums) && (!empty($searchRequest->forums) || !in_array('-1', $searchRequest->forums))) {
         $query->whereIn('topics.forum_id', $searchRequest->forums);
     }
     // Forum permissions need to be checked
     $unviewableForums = $permissionChecker->getUnviewableIdsForContent('forum');
     if (!empty($unviewableForums)) {
         $query->whereNotIn('topics.forum_id', $unviewableForums);
     }
     if (!$searchRequest->sortby) {
         $searchRequest->sortby = 'postdate';
         $searchRequest->sorttype = 'asc';
     }
     if (!$searchRequest->sorttype) {
         $searchRequest->sorttype = 'asc';
     }
     $topics = [];
     $posts = [];
     $results = $query->get();
     if ($searchRequest->result == 'topics') {
         foreach ($results as $result) {
             $topics[] = $result->id;
             $posts[] = $result->firstPost->id;
         }
     } else {
         foreach ($results as $result) {
             $topics[] = $result->topic->id;
             $posts[] = $result->id;
         }
     }
     $searchlog = $this->searchRepository->create(['topics' => implode(',', $topics), 'posts' => implode(',', $posts), 'keywords' => $searchRequest->keyword, 'as_topics' => $searchRequest->result == 'topics']);
     return redirect()->route('search.results', ['id' => $searchlog->id, 'orderBy' => $searchRequest->sortby, 'orderDir' => $searchRequest->sorttype]);
 }