diff --git a/app/Http/Controllers/BookController.php b/app/Http/Controllers/BookController.php index 7f743db41..91c965145 100644 --- a/app/Http/Controllers/BookController.php +++ b/app/Http/Controllers/BookController.php @@ -151,7 +151,7 @@ class BookController extends Controller { $book = $this->bookRepo->getBySlug($bookSlug); $this->checkOwnablePermission('book-update', $book); - $bookChildren = $this->bookRepo->getChildren($book); + $bookChildren = $this->bookRepo->getChildren($book, true); $books = $this->bookRepo->getAll(false); $this->setPageTitle('Sort Book ' . $book->getShortName()); return view('books/sort', ['book' => $book, 'current' => $book, 'books' => $books, 'bookChildren' => $bookChildren]); diff --git a/app/Repos/BookRepo.php b/app/Repos/BookRepo.php index b74821d31..1a56843ae 100644 --- a/app/Repos/BookRepo.php +++ b/app/Repos/BookRepo.php @@ -198,16 +198,23 @@ class BookRepo extends EntityRepo * Returns a sorted collection of Pages and Chapters. * Loads the bookslug onto child elements to prevent access database access for getting the slug. * @param Book $book + * @param bool $filterDrafts * @return mixed */ - public function getChildren(Book $book) + public function getChildren(Book $book, $filterDrafts = false) { $pageQuery = $book->pages()->where('chapter_id', '=', 0); $pageQuery = $this->restrictionService->enforcePageRestrictions($pageQuery, 'view'); + + if ($filterDrafts) { + $pageQuery = $pageQuery->where('draft', '=', false); + } + $pages = $pageQuery->get(); - $chapterQuery = $book->chapters()->with(['pages' => function($query) { + $chapterQuery = $book->chapters()->with(['pages' => function($query) use ($filterDrafts) { $this->restrictionService->enforcePageRestrictions($query, 'view'); + if ($filterDrafts) $query->where('draft', '=', false); }]); $chapterQuery = $this->restrictionService->enforceChapterRestrictions($chapterQuery, 'view'); $chapters = $chapterQuery->get(); diff --git a/app/Repos/PageRepo.php b/app/Repos/PageRepo.php index 9a7502754..ef470c01d 100644 --- a/app/Repos/PageRepo.php +++ b/app/Repos/PageRepo.php @@ -154,10 +154,10 @@ class PageRepo extends EntityRepo /** * Get a new draft page instance. * @param Book $book - * @param Chapter|null $chapter + * @param Chapter|bool $chapter * @return static */ - public function getDraftPage(Book $book, $chapter) + public function getDraftPage(Book $book, $chapter = false) { $page = $this->page->newInstance(); $page->name = 'New Page'; diff --git a/tests/Entity/SortTest.php b/tests/Entity/SortTest.php new file mode 100644 index 000000000..8792a0a06 --- /dev/null +++ b/tests/Entity/SortTest.php @@ -0,0 +1,25 @@ +book = \BookStack\Book::first(); + } + + public function test_drafts_do_not_show_up() + { + $this->asAdmin(); + $pageRepo = app('\BookStack\Repos\PageRepo'); + $draft = $pageRepo->getDraftPage($this->book); + + $this->visit($this->book->getUrl()) + ->see($draft->name) + ->visit($this->book->getUrl() . '/sort') + ->dontSee($draft->name); + } + +} \ No newline at end of file