3 namespace BookStack\Http\Controllers;
5 use Illuminate\Http\Request;
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;
13 class SearchController extends Controller
17 protected $chapterRepo;
20 * SearchController constructor.
25 public function __construct(PageRepo $pageRepo, BookRepo $bookRepo, ChapterRepo $chapterRepo)
27 $this->pageRepo = $pageRepo;
28 $this->bookRepo = $bookRepo;
29 $this->chapterRepo = $chapterRepo;
30 parent::__construct();
34 * Searches all entities.
35 * @param Request $request
36 * @return \Illuminate\View\View
37 * @internal param string $searchTerm
39 public function searchAll(Request $request)
41 if (!$request->has('term')) {
42 return redirect()->back();
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', [
53 'chapters' => $chapters,
54 'searchTerm' => $searchTerm
59 * Search only the pages in the system.
60 * @param Request $request
61 * @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View
63 public function searchPages(Request $request)
65 if (!$request->has('term')) return redirect()->back();
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', [
73 'title' => 'Page Search Results',
74 'searchTerm' => $searchTerm
79 * Search only the chapters in the system.
80 * @param Request $request
81 * @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View
83 public function searchChapters(Request $request)
85 if (!$request->has('term')) return redirect()->back();
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
99 * Search only the books in the system.
100 * @param Request $request
101 * @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View
103 public function searchBooks(Request $request)
105 if (!$request->has('term')) return redirect()->back();
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
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
125 public function searchBook(Request $request, $bookId)
127 if (!$request->has('term')) {
128 return redirect()->back();
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]);