X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/c7a2d568bf693add30c8402d68d1f46f09a44c5b..refs/pull/3333/head:/app/Entities/Models/Page.php diff --git a/app/Entities/Models/Page.php b/app/Entities/Models/Page.php index 8ad05e7aa..c28b9a305 100644 --- a/app/Entities/Models/Page.php +++ b/app/Entities/Models/Page.php @@ -1,56 +1,60 @@ - 'boolean', + 'template' => 'boolean', + ]; /** * Get the entities that are visible to the current user. */ - public function scopeVisible(Builder $query) + public function scopeVisible(Builder $query): Builder { - $query = Permissions::enforceDraftVisiblityOnQuery($query); - return parent::scopeVisible($query); - } + $query = Permissions::enforceDraftVisibilityOnQuery($query); - /** - * Converts this page into a simplified array. - * @return mixed - */ - public function toSimpleArray() - { - $array = array_intersect_key($this->toArray(), array_flip($this->simpleAttributes)); - $array['url'] = $this->getUrl(); - return $array; + return parent::scopeVisible($query); } /** * Get the chapter that this page is in, If applicable. + * * @return BelongsTo */ public function chapter() @@ -60,24 +64,36 @@ class Page extends BookChild /** * Check if this page has a chapter. - * @return bool */ - public function hasChapter() + public function hasChapter(): bool { return $this->chapter()->count() > 0; } /** * Get the associated page revisions, ordered by created date. - * @return mixed + * Only provides actual saved page revision instances, Not drafts. */ - public function revisions() + public function revisions(): HasMany { - return $this->hasMany(PageRevision::class)->where('type', '=', 'version')->orderBy('created_at', 'desc')->orderBy('id', 'desc'); + return $this->allRevisions() + ->where('type', '=', 'version') + ->orderBy('created_at', 'desc') + ->orderBy('id', 'desc'); + } + + /** + * Get all revision instances assigned to this page. + * Includes all types of revisions. + */ + public function allRevisions(): HasMany + { + return $this->hasMany(PageRevision::class); } /** * Get the attachments assigned to this page. + * * @return HasMany */ public function attachments() @@ -86,30 +102,40 @@ class Page extends BookChild } /** - * Get the url for this page. - * @param string|bool $path - * @return string + * Get the url of this page. */ - public function getUrl($path = false) + public function getUrl(string $path = ''): string { - $bookSlug = $this->getAttribute('bookSlug') ? $this->getAttribute('bookSlug') : $this->book->slug; - $midText = $this->draft ? '/draft/' : '/page/'; - $idComponent = $this->draft ? $this->id : urlencode($this->slug); + $parts = [ + 'books', + urlencode($this->book_slug ?? $this->book->slug), + $this->draft ? 'draft' : 'page', + $this->draft ? $this->id : urlencode($this->slug), + trim($path, '/'), + ]; - $url = '/books/' . urlencode($bookSlug) . $midText . $idComponent; - if ($path !== false) { - $url .= '/' . trim($path, '/'); - } - - return url($url); + return url('/' . implode('/', $parts)); } /** - * Get the current revision for the page if existing + * Get the current revision for the page if existing. + * * @return PageRevision|null */ public function getCurrentRevision() { return $this->revisions()->first(); } + + /** + * Get this page for JSON display. + */ + public function forJsonDisplay(): self + { + $refreshed = $this->refresh()->unsetRelations()->load(['tags', 'createdBy', 'updatedBy', 'ownedBy']); + $refreshed->setHidden(array_diff($refreshed->getHidden(), ['html', 'markdown'])); + $refreshed->html = (new PageContent($refreshed))->render(); + + return $refreshed; + } }