diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index e9cd72f..7d109b7 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -37,8 +37,8 @@ public function index() $homepageSetting = setting('app-homepage'); if ($homepageSetting) { $id = intval(explode(':', $homepageSetting)[0]); - $customHomepage = $this->entityRepo->getById('page', $id); - $this->entityRepo->renderPage($customHomepage); + $customHomepage = $this->entityRepo->getById('page', $id, false, true); + $this->entityRepo->renderPage($customHomepage, true); } $view = $customHomepage ? 'home-custom' : 'home'; diff --git a/app/Repos/EntityRepo.php b/app/Repos/EntityRepo.php index b2067ad..a682e69 100644 --- a/app/Repos/EntityRepo.php +++ b/app/Repos/EntityRepo.php @@ -137,10 +137,15 @@ public function exists($type, $id) * @param string $type * @param integer $id * @param bool $allowDrafts + * @param bool $ignorePermissions * @return Entity */ - public function getById($type, $id, $allowDrafts = false) + public function getById($type, $id, $allowDrafts = false, $ignorePermissions = false) { + if ($ignorePermissions) { + $entity = $this->getEntity($type); + return $entity->newQuery()->find($id); + } return $this->entityQuery($type, $allowDrafts)->find($id); } @@ -671,9 +676,10 @@ protected function formatHtml($htmlText) /** * Render the page for viewing, Parsing and performing features such as page transclusion. * @param Page $page + * @param bool $ignorePermissions * @return mixed|string */ - public function renderPage(Page $page) + public function renderPage(Page $page, $ignorePermissions = false) { $content = $page->html; $matches = []; @@ -685,7 +691,7 @@ public function renderPage(Page $page) $pageId = intval($splitInclude[0]); if (is_nan($pageId)) continue; - $page = $this->getById('page', $pageId); + $page = $this->getById('page', $pageId, false, $ignorePermissions); if ($page === null) { $content = str_replace($matches[0][$index], '', $content); continue; diff --git a/tests/HomepageTest.php b/tests/HomepageTest.php new file mode 100644 index 0000000..7c77e94 --- /dev/null +++ b/tests/HomepageTest.php @@ -0,0 +1,33 @@ +asEditor(); + $homeVisit = $this->get('/'); + $homeVisit->assertSee('My Recently Viewed'); + $homeVisit->assertSee('Recently Updated Pages'); + $homeVisit->assertSee('Recent Activity'); + } + + public function test_custom_homepage() { + $this->asEditor(); + $name = 'My custom homepage'; + $content = 'This is the body content of my custom homepage.'; + $customPage = $this->newPage(['name' => $name, 'html' => $content]); + $this->setSettings(['app-homepage' => $customPage->id]); + + $homeVisit = $this->get('/'); + $homeVisit->assertSee($name); + $homeVisit->assertSee($content); + $homeVisit->assertSee('My Recently Viewed'); + $homeVisit->assertSee('Recently Updated Pages'); + $homeVisit->assertSee('Recent Activity'); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php index b008080..81bd93e 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -4,6 +4,7 @@ use BookStack\Chapter; use BookStack\Repos\EntityRepo; use BookStack\Role; +use BookStack\Services\SettingService; use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; @@ -88,4 +89,16 @@ public function newPage($input = ['name' => 'test page', 'html' => 'My new test $draftPage = $entityRepo->getDraftPage($book); return $entityRepo->publishPageDraft($draftPage, $input); } + + /** + * Quickly sets an array of settings. + * @param $settingsArray + */ + protected function setSettings($settingsArray) + { + $settings = app(SettingService::class); + foreach ($settingsArray as $key => $value) { + $settings->put($key, $value); + } + } } \ No newline at end of file