| 
									
										
										
										
											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; | 
					
						
							| 
									
										
										
										
											2018-10-13 18:27:55 +08:00
										 |  |  | use BookStack\Entities\Repos\EntityRepo; | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-02-20 20:37:06 +08:00
										 |  |  |     protected $entityRepo; | 
					
						
							| 
									
										
										
										
											2015-08-17 03:11:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * HomeController constructor. | 
					
						
							| 
									
										
										
										
											2016-02-20 20:37:06 +08:00
										 |  |  |      * @param EntityRepo $entityRepo | 
					
						
							| 
									
										
										
										
											2015-08-17 03:11:21 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-02-20 20:37:06 +08:00
										 |  |  |     public function __construct(EntityRepo $entityRepo) | 
					
						
							| 
									
										
										
										
											2015-08-17 03:11:21 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-02-20 20:37:06 +08:00
										 |  |  |         $this->entityRepo = $entityRepo; | 
					
						
							| 
									
										
										
										
											2015-08-29 22:03:42 +08:00
										 |  |  |         parent::__construct(); | 
					
						
							| 
									
										
										
										
											2015-08-17 03:11:21 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Display the homepage. | 
					
						
							|  |  |  |      * @return Response | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function index() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-02-20 20:37:06 +08:00
										 |  |  |         $activity = Activity::latest(10); | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |         $draftPages = $this->signedIn ? $this->entityRepo->getUserDraftPages(6) : []; | 
					
						
							|  |  |  |         $recentFactor = count($draftPages) > 0 ? 0.5 : 1; | 
					
						
							| 
									
										
										
										
											2017-08-20 20:57:25 +08:00
										 |  |  |         $recents = $this->signedIn ? Views::getUserRecentlyViewed(12*$recentFactor, 0) : $this->entityRepo->getRecentlyCreated('book', 12*$recentFactor); | 
					
						
							|  |  |  |         $recentlyUpdatedPages = $this->entityRepo->getRecentlyUpdated('page', 12); | 
					
						
							| 
									
										
										
										
											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; | 
					
						
							|  |  |  |             $view = setting()->getUser($this->currentUser, $key . '_view_type', config('app.views.' . $key)); | 
					
						
							|  |  |  |             $sort = setting()->getUser($this->currentUser, $key . '_sort', 'name'); | 
					
						
							|  |  |  |             $order = setting()->getUser($this->currentUser, $key . '_sort_order', 'asc'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $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-04-07 00:31:59 +08:00
										 |  |  |             $shelves = $this->entityRepo->getAllPaginated('bookshelf', 18, $commonData['sort'], $commonData['order']); | 
					
						
							| 
									
										
										
										
											2019-05-08 05:42:12 +08:00
										 |  |  |             foreach ($shelves as $shelf) { | 
					
						
							|  |  |  |                 $shelf->books = $this->entityRepo->getBookshelfChildren($shelf); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											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-04-07 00:31:59 +08:00
										 |  |  |             $books = $this->entityRepo->getAllPaginated('book', 18, $commonData['sort'], $commonData['order']); | 
					
						
							|  |  |  |             $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]); | 
					
						
							|  |  |  |             $customHomepage = $this->entityRepo->getById('page', $id, false, true); | 
					
						
							|  |  |  |             $this->entityRepo->renderPage($customHomepage, true); | 
					
						
							|  |  |  |             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() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-04-07 01:36:17 +08:00
										 |  |  |         return view('partials.custom-head-content'); | 
					
						
							| 
									
										
										
										
											2017-12-08 19:52:43 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-03-31 19:41:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Show the view for /robots.txt | 
					
						
							|  |  |  |      * @return $this | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getRobots() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $sitePublic = setting('app-public', false); | 
					
						
							|  |  |  |         $allowRobots = config('app.allow_robots'); | 
					
						
							|  |  |  |         if ($allowRobots === null) { | 
					
						
							|  |  |  |             $allowRobots = $sitePublic; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         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
										 |  |  | } |