X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a274406038e13cf678e14d65dfa70d04ead67206..refs/pull/5689/head:/app/Entities/Models/Page.php diff --git a/app/Entities/Models/Page.php b/app/Entities/Models/Page.php index a3a04f403..499ef4d72 100644 --- a/app/Entities/Models/Page.php +++ b/app/Entities/Models/Page.php @@ -3,36 +3,42 @@ namespace BookStack\Entities\Models; use BookStack\Entities\Tools\PageContent; +use BookStack\Entities\Tools\PageEditorType; +use BookStack\Permissions\PermissionApplicator; use BookStack\Uploads\Attachment; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; -use Permissions; +use Illuminate\Database\Eloquent\Relations\HasOne; /** * Class Page. * - * @property int $chapter_id - * @property string $html - * @property string $markdown - * @property string $text - * @property bool $template - * @property bool $draft - * @property int $revision_count - * @property Chapter $chapter - * @property Collection $attachments + * @property int $chapter_id + * @property string $html + * @property string $markdown + * @property string $text + * @property bool $template + * @property bool $draft + * @property int $revision_count + * @property string $editor + * @property Chapter $chapter + * @property Collection $attachments + * @property Collection $revisions + * @property PageRevision $currentRevision */ class Page extends BookChild { - public static $listAttributes = ['name', 'id', 'slug', 'book_id', 'text', 'created_at', 'updated_at']; - public static $contentAttributes = ['name', 'id', 'slug', 'book_id', 'html', 'text', 'created_at', 'updated_at']; + use HasFactory; - protected $fillable = ['name', 'priority', 'markdown']; + protected $fillable = ['name', 'priority']; - public $textField = 'text'; + public string $textField = 'text'; + public string $htmlField = 'html'; - protected $hidden = ['html', 'markdown', 'text', 'restricted', 'pivot', 'deleted_at']; + protected $hidden = ['html', 'markdown', 'text', 'pivot', 'deleted_at']; protected $casts = [ 'draft' => 'boolean', @@ -44,7 +50,7 @@ class Page extends BookChild */ public function scopeVisible(Builder $query): Builder { - $query = Permissions::enforceDraftVisibilityOnQuery($query); + $query = app()->make(PermissionApplicator::class)->restrictDraftsOnPageQuery($query); return parent::scopeVisible($query); } @@ -61,10 +67,8 @@ 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; } @@ -81,6 +85,17 @@ class Page extends BookChild ->orderBy('id', 'desc'); } + /** + * Get the current revision for the page if existing. + */ + public function currentRevision(): HasOne + { + return $this->hasOne(PageRevision::class) + ->where('type', '=', 'version') + ->orderBy('created_at', 'desc') + ->orderBy('id', 'desc'); + } + /** * Get all revision instances assigned to this page. * Includes all types of revisions. @@ -103,7 +118,7 @@ class Page extends BookChild /** * Get the url of this page. */ - public function getUrl($path = ''): string + public function getUrl(string $path = ''): string { $parts = [ 'books', @@ -116,23 +131,14 @@ class Page extends BookChild return url('/' . implode('/', $parts)); } - /** - * 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(): Page + public function forJsonDisplay(): self { $refreshed = $this->refresh()->unsetRelations()->load(['tags', 'createdBy', 'updatedBy', 'ownedBy']); $refreshed->setHidden(array_diff($refreshed->getHidden(), ['html', 'markdown'])); + $refreshed->setAttribute('raw_html', $refreshed->html); $refreshed->html = (new PageContent($refreshed))->render(); return $refreshed;