]> BookStack Code Mirror - bookstack/blob - app/Http/Controllers/SearchController.php
Found the source of the issue, not sure how to fix
[bookstack] / app / Http / Controllers / SearchController.php
1 <?php
2
3 namespace BookStack\Http\Controllers;
4
5 use Illuminate\Http\Request;
6
7 use BookStack\Http\Requests;
8 use BookStack\Http\Controllers\Controller;
9 use BookStack\Repos\BookRepo;
10 use BookStack\Repos\ChapterRepo;
11 use BookStack\Repos\PageRepo;
12
13 class SearchController extends Controller
14 {
15     protected $pageRepo;
16     protected $bookRepo;
17     protected $chapterRepo;
18
19     /**
20      * SearchController constructor.
21      * @param $pageRepo
22      * @param $bookRepo
23      * @param $chapterRepo
24      */
25     public function __construct(PageRepo $pageRepo, BookRepo $bookRepo, ChapterRepo $chapterRepo)
26     {
27         $this->pageRepo = $pageRepo;
28         $this->bookRepo = $bookRepo;
29         $this->chapterRepo = $chapterRepo;
30         parent::__construct();
31     }
32
33     /**
34      * Searches all entities.
35      * @param Request $request
36      * @return \Illuminate\View\View
37      * @internal param string $searchTerm
38      */
39     public function searchAll(Request $request)
40     {
41         if (!$request->has('term')) {
42             return redirect()->back();
43         }
44         $searchTerm = $request->get('term');
45         $paginationAppends = $request->only('term');
46         $pages = $this->pageRepo->getBySearch($searchTerm, [], 20, $paginationAppends);
47         $books = $this->bookRepo->getBySearch($searchTerm, 10, $paginationAppends);
48         $chapters = $this->chapterRepo->getBySearch($searchTerm, [], 10, $paginationAppends);
49         $this->setPageTitle('Search For ' . $searchTerm);
50         return view('search/all', [
51             'pages' => $pages,
52             'books' => $books,
53             'chapters' => $chapters,
54             'searchTerm' => $searchTerm
55         ]);
56     }
57
58     /**
59      * Search only the pages in the system.
60      * @param Request $request
61      * @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View
62      */
63     public function searchPages(Request $request)
64     {
65         if (!$request->has('term')) return redirect()->back();
66
67         $searchTerm = $request->get('term');
68         $paginationAppends = $request->only('term');
69         $pages = $this->pageRepo->getBySearch($searchTerm, [], 20, $paginationAppends);
70         $this->setPageTitle('Page Search For ' . $searchTerm);
71         return view('search/entity-search-list', [
72             'entities' => $pages,
73             'title' => 'Page Search Results',
74             'searchTerm' => $searchTerm
75         ]);
76     }
77
78     /**
79      * Search only the chapters in the system.
80      * @param Request $request
81      * @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View
82      */
83     public function searchChapters(Request $request)
84     {
85         if (!$request->has('term')) return redirect()->back();
86
87         $searchTerm = $request->get('term');
88         $paginationAppends = $request->only('term');
89         $chapters = $this->chapterRepo->getBySearch($searchTerm, [], 20, $paginationAppends);
90         $this->setPageTitle('Chapter Search For ' . $searchTerm);
91         return view('search/entity-search-list', [
92             'entities' => $chapters,
93             'title' => 'Chapter Search Results',
94             'searchTerm' => $searchTerm
95         ]);
96     }
97
98     /**
99      * Search only the books in the system.
100      * @param Request $request
101      * @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View
102      */
103     public function searchBooks(Request $request)
104     {
105         if (!$request->has('term')) return redirect()->back();
106
107         $searchTerm = $request->get('term');
108         $paginationAppends = $request->only('term');
109         $books = $this->bookRepo->getBySearch($searchTerm, 20, $paginationAppends);
110         $this->setPageTitle('Book Search For ' . $searchTerm);
111         return view('search/entity-search-list', [
112             'entities' => $books,
113             'title' => 'Book Search Results',
114             'searchTerm' => $searchTerm
115         ]);
116     }
117
118     /**
119      * Searches all entities within a book.
120      * @param Request $request
121      * @param integer $bookId
122      * @return \Illuminate\View\View
123      * @internal param string $searchTerm
124      */
125     public function searchBook(Request $request, $bookId)
126     {
127         if (!$request->has('term')) {
128             return redirect()->back();
129         }
130         $searchTerm = $request->get('term');
131         $searchWhereTerms = [['book_id', '=', $bookId]];
132         $pages = $this->pageRepo->getBySearch($searchTerm, $searchWhereTerms);
133         $chapters = $this->chapterRepo->getBySearch($searchTerm, $searchWhereTerms);
134         return view('search/book', ['pages' => $pages, 'chapters' => $chapters, 'searchTerm' => $searchTerm]);
135     }
136
137 }