| 
									
										
										
										
											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; | 
					
						
							| 
									
										
										
										
											2016-02-20 20:37:06 +08:00
										 |  |  | use BookStack\Repos\EntityRepo; | 
					
						
							| 
									
										
										
										
											2018-02-18 03:49:00 +08:00
										 |  |  | use Illuminate\Http\Request; | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							|  |  |  |         // Custom homepage
 | 
					
						
							|  |  |  |         $customHomepage = false; | 
					
						
							|  |  |  |         $homepageSetting = setting('app-homepage'); | 
					
						
							|  |  |  |         if ($homepageSetting) { | 
					
						
							|  |  |  |             $id = intval(explode(':', $homepageSetting)[0]); | 
					
						
							| 
									
										
										
										
											2017-08-28 20:55:39 +08:00
										 |  |  |             $customHomepage = $this->entityRepo->getById('page', $id, false, true); | 
					
						
							|  |  |  |             $this->entityRepo->renderPage($customHomepage, true); | 
					
						
							| 
									
										
										
										
											2017-08-28 20:38:32 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $view = $customHomepage ? 'home-custom' : 'home'; | 
					
						
							|  |  |  |         return view($view, [ | 
					
						
							| 
									
										
										
										
											2016-02-20 20:37:06 +08:00
										 |  |  |             'activity' => $activity, | 
					
						
							|  |  |  |             'recents' => $recents, | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |             'recentlyUpdatedPages' => $recentlyUpdatedPages, | 
					
						
							| 
									
										
										
										
											2017-08-28 20:38:32 +08:00
										 |  |  |             'draftPages' => $draftPages, | 
					
						
							|  |  |  |             'customHomepage' => $customHomepage | 
					
						
							| 
									
										
										
										
											2016-02-20 20:37:06 +08:00
										 |  |  |         ]); | 
					
						
							| 
									
										
										
										
											2015-08-17 03:11:21 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-31 22:27:40 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Get a js representation of the current translations | 
					
						
							|  |  |  |      * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response | 
					
						
							| 
									
										
										
										
											2017-12-08 19:52:43 +08:00
										 |  |  |      * @throws \Exception | 
					
						
							| 
									
										
										
										
											2016-12-31 22:27:40 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2018-01-29 00:58:52 +08:00
										 |  |  |     public function getTranslations() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2017-04-29 23:47:41 +08:00
										 |  |  |         $locale = app()->getLocale(); | 
					
						
							| 
									
										
										
										
											2016-12-31 22:27:40 +08:00
										 |  |  |         $cacheKey = 'GLOBAL_TRANSLATIONS_' . $locale; | 
					
						
							|  |  |  |         if (cache()->has($cacheKey) && config('app.env') !== 'development') { | 
					
						
							|  |  |  |             $resp = cache($cacheKey); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $translations = [ | 
					
						
							|  |  |  |                 // Get only translations which might be used in JS
 | 
					
						
							|  |  |  |                 'common' => trans('common'), | 
					
						
							|  |  |  |                 'components' => trans('components'), | 
					
						
							|  |  |  |                 'entities' => trans('entities'), | 
					
						
							|  |  |  |                 'errors' => trans('errors') | 
					
						
							|  |  |  |             ]; | 
					
						
							|  |  |  |             if ($locale !== 'en') { | 
					
						
							|  |  |  |                 $enTrans = [ | 
					
						
							| 
									
										
										
										
											2017-03-05 22:10:55 +08:00
										 |  |  |                     'common' => trans('common', [], 'en'), | 
					
						
							|  |  |  |                     'components' => trans('components', [], 'en'), | 
					
						
							|  |  |  |                     'entities' => trans('entities', [], 'en'), | 
					
						
							|  |  |  |                     'errors' => trans('errors', [], 'en') | 
					
						
							| 
									
										
										
										
											2016-12-31 22:27:40 +08:00
										 |  |  |                 ]; | 
					
						
							|  |  |  |                 $translations = array_replace_recursive($enTrans, $translations); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $resp = 'window.translations = ' . json_encode($translations); | 
					
						
							|  |  |  |             cache()->put($cacheKey, $resp, 120); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return response($resp, 200, [ | 
					
						
							|  |  |  |             'Content-Type' => 'application/javascript' | 
					
						
							|  |  |  |         ]); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-18 03:49:00 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Get an icon via image request. | 
					
						
							|  |  |  |      * Can provide a 'color' parameter with hex value to color the icon. | 
					
						
							|  |  |  |      * @param $iconName | 
					
						
							|  |  |  |      * @param Request $request | 
					
						
							|  |  |  |      * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getIcon($iconName, Request $request) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $attrs = []; | 
					
						
							|  |  |  |         if ($request->filled('color')) { | 
					
						
							|  |  |  |             $attrs['fill'] = '#' . $request->get('color'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $icon = icon($iconName, $attrs); | 
					
						
							|  |  |  |         return response($icon, 200, [ | 
					
						
							|  |  |  |             'Content-Type' => 'image/svg+xml', | 
					
						
							|  |  |  |             'Cache-Control' => 'max-age=3600', | 
					
						
							|  |  |  |         ]); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return view('partials/custom-head-content'); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-08-17 03:11:21 +08:00
										 |  |  | } |