{
$text = $chapter->name . "\n\n";
$text .= $chapter->description . "\n\n";
- foreach ($chapter->pages as $page) {
+ foreach ($chapter->getVisiblePages() as $page) {
$text .= $this->pageToPlainText($page);
}
return $text;
*/
public function bookToPlainText(Book $book): string
{
- $bookTree = (new BookContents($book))->getTree(false, true);
+ $bookTree = (new BookContents($book))->getTree(false, false);
$text = $book->name . "\n\n";
foreach ($bookTree as $bookChild) {
if ($bookChild->isA('chapter')) {
--- /dev/null
+<?php namespace Tests\Permissions;
+
+use BookStack\Entities\Book;
+use BookStack\Entities\Chapter;
+use Illuminate\Support\Str;
+use Tests\TestCase;
+
+class ExportPermissionsTest extends TestCase
+{
+
+ public function test_page_content_without_view_access_hidden_on_chapter_export()
+ {
+ $chapter = Chapter::query()->first();
+ $page = $chapter->pages()->firstOrFail();
+ $pageContent = Str::random(48);
+ $page->html = '<p>' . $pageContent . '</p>';
+ $page->save();
+ $viewer = $this->getViewer();
+ $this->actingAs($viewer);
+ $formats = ['html', 'plaintext'];
+
+ foreach ($formats as $format) {
+ $resp = $this->get($chapter->getUrl("export/{$format}"));
+ $resp->assertStatus(200);
+ $resp->assertSee($page->name);
+ $resp->assertSee($pageContent);
+ }
+
+ $this->setEntityRestrictions($page, []);
+
+ foreach ($formats as $format) {
+ $resp = $this->get($chapter->getUrl("export/{$format}"));
+ $resp->assertStatus(200);
+ $resp->assertDontSee($page->name);
+ $resp->assertDontSee($pageContent);
+ }
+ }
+
+ public function test_page_content_without_view_access_hidden_on_book_export()
+ {
+ $book = Book::query()->first();
+ $page = $book->pages()->firstOrFail();
+ $pageContent = Str::random(48);
+ $page->html = '<p>' . $pageContent . '</p>';
+ $page->save();
+ $viewer = $this->getViewer();
+ $this->actingAs($viewer);
+ $formats = ['html', 'plaintext'];
+
+ foreach ($formats as $format) {
+ $resp = $this->get($book->getUrl("export/{$format}"));
+ $resp->assertStatus(200);
+ $resp->assertSee($page->name);
+ $resp->assertSee($pageContent);
+ }
+
+ $this->setEntityRestrictions($page, []);
+
+ foreach ($formats as $format) {
+ $resp = $this->get($book->getUrl("export/{$format}"));
+ $resp->assertStatus(200);
+ $resp->assertDontSee($page->name);
+ $resp->assertDontSee($pageContent);
+ }
+ }
+
+}
\ No newline at end of file