mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-08-27 20:51:57 +00:00
parent
7cd956b24b
commit
4ad4dfa55a
@ -413,6 +413,17 @@ class EntityRepo
|
|||||||
return collect($tree);
|
return collect($tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the bookshelves that a book is contained in.
|
||||||
|
* @param Book $book
|
||||||
|
* @return \Illuminate\Database\Eloquent\Collection|static[]
|
||||||
|
*/
|
||||||
|
public function getBookParentShelves(Book $book)
|
||||||
|
{
|
||||||
|
return $this->permissionService->enforceEntityRestrictions('shelf', $book->shelves())->get();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the child items for a chapter sorted by priority but
|
* Get the child items for a chapter sorted by priority but
|
||||||
* with draft items floated to the top.
|
* with draft items floated to the top.
|
||||||
|
@ -150,6 +150,7 @@ class BookController extends Controller
|
|||||||
$this->checkOwnablePermission('book-view', $book);
|
$this->checkOwnablePermission('book-view', $book);
|
||||||
|
|
||||||
$bookChildren = $this->bookRepo->getBookChildren($book);
|
$bookChildren = $this->bookRepo->getBookChildren($book);
|
||||||
|
$bookParentShelves = $this->bookRepo->getBookParentShelves($book);
|
||||||
|
|
||||||
Views::add($book);
|
Views::add($book);
|
||||||
if ($request->has('shelf')) {
|
if ($request->has('shelf')) {
|
||||||
@ -161,6 +162,7 @@ class BookController extends Controller
|
|||||||
'book' => $book,
|
'book' => $book,
|
||||||
'current' => $book,
|
'current' => $book,
|
||||||
'bookChildren' => $bookChildren,
|
'bookChildren' => $bookChildren,
|
||||||
|
'bookParentShelves' => $bookParentShelves,
|
||||||
'activity' => Activity::entityActivity($book, 20, 1)
|
'activity' => Activity::entityActivity($book, 20, 1)
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -135,6 +135,7 @@ return [
|
|||||||
'books_sort_chapters_last' => 'Chapters Last',
|
'books_sort_chapters_last' => 'Chapters Last',
|
||||||
'books_sort_show_other' => 'Show Other Books',
|
'books_sort_show_other' => 'Show Other Books',
|
||||||
'books_sort_save' => 'Save New Order',
|
'books_sort_save' => 'Save New Order',
|
||||||
|
'book_parent_shelves_empty' => 'Shelves that this book is on will appear here.',
|
||||||
|
|
||||||
// Chapters
|
// Chapters
|
||||||
'chapter' => 'Chapter',
|
'chapter' => 'Chapter',
|
||||||
|
@ -57,9 +57,7 @@
|
|||||||
|
|
||||||
@stop
|
@stop
|
||||||
|
|
||||||
|
|
||||||
@section('right')
|
@section('right')
|
||||||
|
|
||||||
<div class="mb-xl">
|
<div class="mb-xl">
|
||||||
<h5>{{ trans('common.details') }}</h5>
|
<h5>{{ trans('common.details') }}</h5>
|
||||||
<div class="text-small text-muted blended-links">
|
<div class="text-small text-muted blended-links">
|
||||||
@ -76,7 +74,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="actions mb-xl">
|
<div class="actions mb-xl">
|
||||||
<h5>{{ trans('common.actions') }}</h5>
|
<h5>{{ trans('common.actions') }}</h5>
|
||||||
<div class="icon-list text-primary">
|
<div class="icon-list text-primary">
|
||||||
@ -125,6 +122,16 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="actions mb-xl">
|
||||||
|
<h5>{{ trans('entities.shelves_long') }}</h5>
|
||||||
|
|
||||||
|
@if(count($bookParentShelves) > 0)
|
||||||
|
@include('partials.entity-list', ['entities' => $bookParentShelves, 'style' => 'compact'])
|
||||||
|
@else
|
||||||
|
<div class="body text-muted">{{ trans('entities.book_parent_shelves_empty') }}</div>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
|
||||||
@stop
|
@stop
|
||||||
|
|
||||||
@section('left')
|
@section('left')
|
||||||
|
@ -240,4 +240,32 @@ class BookShelfTest extends TestCase
|
|||||||
$pageVisit->assertElementNotContains('.breadcrumbs', $shelf->getShortName());
|
$pageVisit->assertElementNotContains('.breadcrumbs', $shelf->getShortName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_bookshelves_show_on_book()
|
||||||
|
{
|
||||||
|
// Create shelf
|
||||||
|
$shelfInfo = [
|
||||||
|
'name' => 'My test shelf' . Str::random(4),
|
||||||
|
'description' => 'Test shelf description ' . Str::random(10)
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->asEditor()->post('/shelves', $shelfInfo);
|
||||||
|
$shelf = Bookshelf::where('name', '=', $shelfInfo['name'])->first();
|
||||||
|
|
||||||
|
// Create book and add to shelf
|
||||||
|
$this->asEditor()->post($shelf->getUrl('/create-book'), [
|
||||||
|
'name' => 'Test book name',
|
||||||
|
'description' => 'Book in shelf description'
|
||||||
|
]);
|
||||||
|
|
||||||
|
$newBook = Book::query()->orderBy('id', 'desc')->first();
|
||||||
|
|
||||||
|
$resp = $this->asEditor()->get($newBook->getUrl());
|
||||||
|
$resp->assertSee($shelfInfo['name']);
|
||||||
|
|
||||||
|
// Remove shelf
|
||||||
|
$this->delete($shelf->getUrl());
|
||||||
|
|
||||||
|
$resp = $this->asEditor()->get($newBook->getUrl());
|
||||||
|
$resp->assertDontSee($shelfInfo['name']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user