X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/c7a2d568bf693add30c8402d68d1f46f09a44c5b..refs/pull/5676/head:/app/Entities/Models/Chapter.php diff --git a/app/Entities/Models/Chapter.php b/app/Entities/Models/Chapter.php index 69dafe8ac..088d199da 100644 --- a/app/Entities/Models/Chapter.php +++ b/app/Entities/Models/Chapter.php @@ -1,71 +1,71 @@ - $pages + * @property ?int $default_template_id + * @property ?Page $defaultTemplate */ class Chapter extends BookChild { - public $searchFactor = 1.3; + use HasFactory; + use HasHtmlDescription; + + public float $searchFactor = 1.2; - protected $fillable = ['name', 'description', 'priority', 'book_id']; - protected $hidden = ['restricted', 'pivot']; + protected $fillable = ['name', 'description', 'priority']; + protected $hidden = ['pivot', 'deleted_at', 'description_html']; /** * Get the pages that this chapter contains. - * @param string $dir - * @return mixed + * + * @return HasMany */ - public function pages($dir = 'ASC') + public function pages(string $dir = 'ASC'): HasMany { return $this->hasMany(Page::class)->orderBy('priority', $dir); } /** * Get the url of this chapter. - * @param string|bool $path - * @return string */ - public function getUrl($path = false) + public function getUrl(string $path = ''): string { - $bookSlug = $this->getAttribute('bookSlug') ? $this->getAttribute('bookSlug') : $this->book->slug; - $fullPath = '/books/' . urlencode($bookSlug) . '/chapter/' . urlencode($this->slug); - - if ($path !== false) { - $fullPath .= '/' . trim($path, '/'); - } - - return url($fullPath); - } + $parts = [ + 'books', + urlencode($this->book_slug ?? $this->book->slug), + 'chapter', + urlencode($this->slug), + trim($path, '/'), + ]; - /** - * Get an excerpt of this chapter's description to the specified length or less. - * @param int $length - * @return string - */ - public function getExcerpt(int $length = 100) - { - $description = $this->text ?? $this->description; - return mb_strlen($description) > $length ? mb_substr($description, 0, $length-3) . '...' : $description; + return url('/' . implode('/', $parts)); } /** - * Check if this chapter has any child pages. - * @return bool + * Get the Page that is used as default template for newly created pages within this Chapter. */ - public function hasChildren() + public function defaultTemplate(): BelongsTo { - return count($this->pages) > 0; + return $this->belongsTo(Page::class, 'default_template_id'); } /** * Get the visible pages in this chapter. + * @returns Collection */ public function getVisiblePages(): Collection { - return $this->pages()->visible() + return $this->pages() + ->scopes('visible') ->orderBy('draft', 'desc') ->orderBy('priority', 'asc') ->get();