3 namespace BookStack\Entities\Repos;
5 use BookStack\Entities\Models\Page;
6 use BookStack\Entities\Models\PageRevision;
7 use BookStack\Entities\Queries\PageRevisionQueries;
11 public function __construct(
12 protected PageRevisionQueries $queries,
17 * Delete all drafts revisions, for the given page, belonging to the current user.
19 public function deleteDraftsForCurrentUser(Page $page): void
21 $this->queries->latestCurrentUserDraftsForPageId($page->id)->delete();
25 * Get a user update_draft page revision to update for the given page.
26 * Checks for an existing revisions before providing a fresh one.
28 public function getNewDraftForCurrentUser(Page $page): PageRevision
30 $draft = $this->queries->findLatestCurrentUserDraftsForPageId($page->id);
36 $draft = new PageRevision();
37 $draft->page_id = $page->id;
38 $draft->slug = $page->slug;
39 $draft->book_slug = $page->book->slug;
40 $draft->created_by = user()->id;
41 $draft->type = 'update_draft';
47 * Store a new revision in the system for the given page.
49 public function storeNewForPage(Page $page, ?string $summary = null): PageRevision
51 $revision = new PageRevision();
53 $revision->name = $page->name;
54 $revision->html = $page->html;
55 $revision->markdown = $page->markdown;
56 $revision->text = $page->text;
57 $revision->page_id = $page->id;
58 $revision->slug = $page->slug;
59 $revision->book_slug = $page->book->slug;
60 $revision->created_by = user()->id;
61 $revision->created_at = $page->updated_at;
62 $revision->type = 'version';
63 $revision->summary = $summary;
64 $revision->revision_number = $page->revision_count;
67 $this->deleteOldRevisions($page);
73 * Delete old revisions, for the given page, from the system.
75 protected function deleteOldRevisions(Page $page)
77 $revisionLimit = config('app.revision_limit');
78 if ($revisionLimit === false) {
82 $revisionsToDelete = PageRevision::query()
83 ->where('page_id', '=', $page->id)
84 ->orderBy('created_at', 'desc')
85 ->skip(intval($revisionLimit))
89 if ($revisionsToDelete->count() > 0) {
90 PageRevision::query()->whereIn('id', $revisionsToDelete->pluck('id'))->delete();