X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/257a5a23ecaf7ce779969d575ff8a0b976181d13..refs/pull/2023/head:/app/Http/Controllers/HomeController.php diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 4d536c1b3..260952fd1 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -1,24 +1,16 @@ entityRepo = $entityRepo; - parent::__construct(); - } - /** * Display the homepage. @@ -27,10 +19,20 @@ class HomeController extends Controller public function index() { $activity = Activity::latest(10); - $draftPages = $this->signedIn ? $this->entityRepo->getUserDraftPages(6) : []; + $draftPages = []; + + if ($this->isSignedIn()) { + $draftPages = Page::visible()->where('draft', '=', true) + ->where('created_by', '=', user()->id) + ->orderBy('updated_at', 'desc')->take(6)->get(); + } + $recentFactor = count($draftPages) > 0 ? 0.5 : 1; - $recents = $this->signedIn ? Views::getUserRecentlyViewed(12*$recentFactor, 0) : $this->entityRepo->getRecentlyCreated('book', 12*$recentFactor); - $recentlyUpdatedPages = $this->entityRepo->getRecentlyUpdated('page', 12); + $recents = $this->isSignedIn() ? + Views::getUserRecentlyViewed(12*$recentFactor, 0) + : Book::visible()->orderBy('created_at', 'desc')->take(12 * $recentFactor)->get(); + $recentlyUpdatedPages = Page::visible()->where('draft', false) + ->orderBy('updated_at', 'desc')->take(12)->get(); $homepageOptions = ['default', 'books', 'bookshelves', 'page']; $homepageOption = setting('app-homepage-type', 'default'); @@ -45,75 +47,63 @@ class HomeController extends Controller 'draftPages' => $draftPages, ]; + // Add required list ordering & sorting for books & shelves views. + if ($homepageOption === 'bookshelves' || $homepageOption === 'books') { + $key = $homepageOption; + $view = setting()->getForCurrentUser($key . '_view_type', config('app.views.' . $key)); + $sort = setting()->getForCurrentUser($key . '_sort', 'name'); + $order = setting()->getForCurrentUser($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, + ]); + } + if ($homepageOption === 'bookshelves') { - $shelves = $this->entityRepo->getAllPaginated('bookshelf', 18); - $shelvesViewType = setting()->getUser($this->currentUser, 'bookshelves_view_type', config('app.views.bookshelves', 'grid')); - $data = array_merge($commonData, ['shelves' => $shelves, 'shelvesViewType' => $shelvesViewType]); + $shelfRepo = app(BookshelfRepo::class); + $shelves = app(BookshelfRepo::class)->getAllPaginated(18, $commonData['sort'], $commonData['order']); + foreach ($shelves as $shelf) { + $shelf->books = $shelf->visibleBooks; + } + $data = array_merge($commonData, ['shelves' => $shelves]); return view('common.home-shelves', $data); } if ($homepageOption === 'books') { - $books = $this->entityRepo->getAllPaginated('book', 18); - $booksViewType = setting()->getUser($this->currentUser, 'books_view_type', config('app.views.books', 'list')); - $data = array_merge($commonData, ['books' => $books, 'booksViewType' => $booksViewType]); + $bookRepo = app(BookRepo::class); + $books = $bookRepo->getAllPaginated(18, $commonData['sort'], $commonData['order']); + $data = array_merge($commonData, ['books' => $books]); return view('common.home-book', $data); } 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); + $customHomepage = Page::query()->where('draft', '=', false)->findOrFail($id); + $pageContent = new PageContent($customHomepage); + $customHomepage->html = $pageContent->render(true); return view('common.home-custom', array_merge($commonData, ['customHomepage' => $customHomepage])); } return view('common.home', $commonData); } - /** - * Get a js representation of the current translations - * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response - * @throws \Exception - */ - public function getTranslations() - { - $locale = app()->getLocale(); - $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 = [ - 'common' => trans('common', [], 'en'), - 'components' => trans('components', [], 'en'), - 'entities' => trans('entities', [], 'en'), - 'errors' => trans('errors', [], 'en') - ]; - $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' - ]); - } - /** * 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'); + return view('partials.custom-head-content'); } /** @@ -128,7 +118,7 @@ class HomeController extends Controller $allowRobots = $sitePublic; } return response() - ->view('common/robots', ['allowRobots' => $allowRobots]) + ->view('common.robots', ['allowRobots' => $allowRobots]) ->header('Content-Type', 'text/plain'); } @@ -137,6 +127,6 @@ class HomeController extends Controller */ public function getNotFound() { - return response()->view('errors/404', [], 404); + return response()->view('errors.404', [], 404); } }