mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-10-26 11:11:56 +00:00
Some checks are pending
analyse-php / build (push) Waiting to run
lint-php / build (push) Waiting to run
test-migrations / build (8.2) (push) Waiting to run
test-migrations / build (8.3) (push) Waiting to run
test-migrations / build (8.4) (push) Waiting to run
test-php / build (8.2) (push) Waiting to run
test-php / build (8.3) (push) Waiting to run
test-php / build (8.4) (push) Waiting to run
Updated base entity class, and worked through BaseRepo. Need to go through other repos next. Removed a couple of redundant interfaces as part of this since we can move the logic onto the shared ContainerData model as needed.
71 lines
1.7 KiB
PHP
71 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace BookStack\Entities\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
|
use Illuminate\Support\Collection;
|
|
|
|
/**
|
|
* Class Chapter.
|
|
*
|
|
* @property Collection<Page> $pages
|
|
* @property ?int $default_template_id
|
|
* @property ?Page $defaultTemplate
|
|
*/
|
|
class Chapter extends BookChild
|
|
{
|
|
use HasFactory;
|
|
|
|
public float $searchFactor = 1.2;
|
|
protected $hidden = ['pivot', 'deleted_at', 'description_html'];
|
|
|
|
/**
|
|
* Get the pages that this chapter contains.
|
|
*
|
|
* @return HasMany<Page, $this>
|
|
*/
|
|
public function pages(string $dir = 'ASC'): HasMany
|
|
{
|
|
return $this->hasMany(Page::class)->orderBy('priority', $dir);
|
|
}
|
|
|
|
/**
|
|
* Get the url of this chapter.
|
|
*/
|
|
public function getUrl(string $path = ''): string
|
|
{
|
|
$parts = [
|
|
'books',
|
|
urlencode($this->book_slug ?? $this->book->slug),
|
|
'chapter',
|
|
urlencode($this->slug),
|
|
trim($path, '/'),
|
|
];
|
|
|
|
return url('/' . implode('/', $parts));
|
|
}
|
|
|
|
/**
|
|
* Get the Page that is used as default template for newly created pages within this Chapter.
|
|
*/
|
|
public function defaultTemplate(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Page::class, 'default_template_id');
|
|
}
|
|
|
|
/**
|
|
* Get the visible pages in this chapter.
|
|
* @return Collection<Page>
|
|
*/
|
|
public function getVisiblePages(): Collection
|
|
{
|
|
return $this->pages()
|
|
->scopes('visible')
|
|
->orderBy('draft', 'desc')
|
|
->orderBy('priority', 'asc')
|
|
->get();
|
|
}
|
|
}
|