| 
									
										
										
										
											2017-03-05 22:10:55 +08:00
										 |  |  | <?php namespace BookStack\Http\Controllers; | 
					
						
							| 
									
										
										
										
											2015-08-17 03:11:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-22 01:22:14 +08:00
										 |  |  | use Activity; | 
					
						
							| 
									
										
										
										
											2020-11-22 08:17:45 +08:00
										 |  |  | use BookStack\Entities\Models\Book; | 
					
						
							| 
									
										
										
										
											2020-11-22 07:20:54 +08:00
										 |  |  | use BookStack\Entities\Tools\PageContent; | 
					
						
							| 
									
										
										
										
											2020-11-22 08:17:45 +08:00
										 |  |  | use BookStack\Entities\Models\Page; | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  | use BookStack\Entities\Repos\BookRepo; | 
					
						
							|  |  |  | use BookStack\Entities\Repos\BookshelfRepo; | 
					
						
							| 
									
										
										
										
											2017-01-02 00:05:44 +08:00
										 |  |  | use Illuminate\Http\Response; | 
					
						
							| 
									
										
										
										
											2015-11-22 01:22:14 +08:00
										 |  |  | use Views; | 
					
						
							| 
									
										
										
										
											2015-08-17 03:11:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | class HomeController extends Controller | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Display the homepage. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function index() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-02-20 20:37:06 +08:00
										 |  |  |         $activity = Activity::latest(10); | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $draftPages = []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($this->isSignedIn()) { | 
					
						
							| 
									
										
										
										
											2020-10-04 01:44:12 +08:00
										 |  |  |             $draftPages = Page::visible() | 
					
						
							|  |  |  |                 ->where('draft', '=', true) | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |                 ->where('created_by', '=', user()->id) | 
					
						
							| 
									
										
										
										
											2020-10-04 01:44:12 +08:00
										 |  |  |                 ->orderBy('updated_at', 'desc') | 
					
						
							| 
									
										
										
										
											2021-01-02 09:22:41 +08:00
										 |  |  |                 ->with('book') | 
					
						
							| 
									
										
										
										
											2020-10-04 01:44:12 +08:00
										 |  |  |                 ->take(6) | 
					
						
							|  |  |  |                 ->get(); | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |         $recentFactor = count($draftPages) > 0 ? 0.5 : 1; | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $recents = $this->isSignedIn() ? | 
					
						
							| 
									
										
										
										
											2020-09-28 06:24:33 +08:00
										 |  |  |               Views::getUserRecentlyViewed(12*$recentFactor, 1) | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |             : Book::visible()->orderBy('created_at', 'desc')->take(12 * $recentFactor)->get(); | 
					
						
							| 
									
										
										
										
											2021-01-02 09:22:41 +08:00
										 |  |  |         $recentlyUpdatedPages = Page::visible()->with('book') | 
					
						
							|  |  |  |             ->where('draft', false) | 
					
						
							|  |  |  |             ->orderBy('updated_at', 'desc') | 
					
						
							|  |  |  |             ->take(12) | 
					
						
							|  |  |  |             ->get(); | 
					
						
							| 
									
										
										
										
											2017-08-28 20:38:32 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |         $homepageOptions = ['default', 'books', 'bookshelves', 'page']; | 
					
						
							|  |  |  |         $homepageOption = setting('app-homepage-type', 'default'); | 
					
						
							|  |  |  |         if (!in_array($homepageOption, $homepageOptions)) { | 
					
						
							|  |  |  |             $homepageOption = 'default'; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-05-10 11:35:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |         $commonData = [ | 
					
						
							|  |  |  |             'activity' => $activity, | 
					
						
							|  |  |  |             'recents' => $recents, | 
					
						
							|  |  |  |             'recentlyUpdatedPages' => $recentlyUpdatedPages, | 
					
						
							|  |  |  |             'draftPages' => $draftPages, | 
					
						
							|  |  |  |         ]; | 
					
						
							| 
									
										
										
										
											2018-05-10 11:35:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-07 00:31:59 +08:00
										 |  |  |         // Add required list ordering & sorting for books & shelves views.
 | 
					
						
							|  |  |  |         if ($homepageOption === 'bookshelves' || $homepageOption === 'books') { | 
					
						
							|  |  |  |             $key = $homepageOption; | 
					
						
							| 
									
										
										
										
											2021-02-08 07:12:05 +08:00
										 |  |  |             $view = setting()->getForCurrentUser($key . '_view_type'); | 
					
						
							| 
									
										
										
										
											2019-09-20 07:18:28 +08:00
										 |  |  |             $sort = setting()->getForCurrentUser($key . '_sort', 'name'); | 
					
						
							|  |  |  |             $order = setting()->getForCurrentUser($key . '_sort_order', 'asc'); | 
					
						
							| 
									
										
										
										
											2019-04-07 00:31:59 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |             $sortOptions = [ | 
					
						
							|  |  |  |                 'name' => trans('common.sort_name'), | 
					
						
							|  |  |  |                 'created_at' => trans('common.sort_created_at'), | 
					
						
							|  |  |  |                 'updated_at' => trans('common.sort_updated_at'), | 
					
						
							|  |  |  |             ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $commonData = array_merge($commonData, [ | 
					
						
							|  |  |  |                 'view' => $view, | 
					
						
							|  |  |  |                 'sort' => $sort, | 
					
						
							|  |  |  |                 'order' => $order, | 
					
						
							|  |  |  |                 'sortOptions' => $sortOptions, | 
					
						
							|  |  |  |             ]); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |         if ($homepageOption === 'bookshelves') { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |             $shelves = app(BookshelfRepo::class)->getAllPaginated(18, $commonData['sort'], $commonData['order']); | 
					
						
							| 
									
										
										
										
											2019-04-07 00:31:59 +08:00
										 |  |  |             $data = array_merge($commonData, ['shelves' => $shelves]); | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |             return view('common.home-shelves', $data); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($homepageOption === 'books') { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |             $bookRepo = app(BookRepo::class); | 
					
						
							|  |  |  |             $books = $bookRepo->getAllPaginated(18, $commonData['sort'], $commonData['order']); | 
					
						
							| 
									
										
										
										
											2019-04-07 00:31:59 +08:00
										 |  |  |             $data = array_merge($commonData, ['books' => $books]); | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |             return view('common.home-book', $data); | 
					
						
							| 
									
										
										
										
											2018-05-10 11:35:18 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |         if ($homepageOption === 'page') { | 
					
						
							|  |  |  |             $homepageSetting = setting('app-homepage', '0:'); | 
					
						
							|  |  |  |             $id = intval(explode(':', $homepageSetting)[0]); | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |             $customHomepage = Page::query()->where('draft', '=', false)->findOrFail($id); | 
					
						
							|  |  |  |             $pageContent = new PageContent($customHomepage); | 
					
						
							|  |  |  |             $customHomepage->html = $pageContent->render(true); | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |             return view('common.home-custom', array_merge($commonData, ['customHomepage' => $customHomepage])); | 
					
						
							| 
									
										
										
										
											2017-08-28 20:38:32 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |         return view('common.home', $commonData); | 
					
						
							| 
									
										
										
										
											2015-08-17 03:11:21 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-08 19:52:43 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Get custom head HTML, Used in ajax calls to show in editor. | 
					
						
							|  |  |  |      * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function customHeadContent() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-05-04 06:59:52 +08:00
										 |  |  |         return view('partials.custom-head'); | 
					
						
							| 
									
										
										
										
											2017-12-08 19:52:43 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-03-31 19:41:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Show the view for /robots.txt | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getRobots() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $sitePublic = setting('app-public', false); | 
					
						
							|  |  |  |         $allowRobots = config('app.allow_robots'); | 
					
						
							| 
									
										
										
										
											2021-01-17 21:41:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 19:41:40 +08:00
										 |  |  |         if ($allowRobots === null) { | 
					
						
							|  |  |  |             $allowRobots = $sitePublic; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-01-17 21:41:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 19:41:40 +08:00
										 |  |  |         return response() | 
					
						
							| 
									
										
										
										
											2019-04-07 01:36:17 +08:00
										 |  |  |             ->view('common.robots', ['allowRobots' => $allowRobots]) | 
					
						
							| 
									
										
										
										
											2018-03-31 19:41:40 +08:00
										 |  |  |             ->header('Content-Type', 'text/plain'); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-05-20 00:01:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Show the route for 404 responses. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getNotFound() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-04-07 01:36:17 +08:00
										 |  |  |         return response()->view('errors.404', [], 404); | 
					
						
							| 
									
										
										
										
											2018-05-20 00:01:33 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-08-17 03:11:21 +08:00
										 |  |  | } |