mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-05-04 08:10:26 +00:00
Added deletion of revisions on page delete
Added testing to cover. Closes #2668
This commit is contained in:
parent
d326417edc
commit
eb76e882c5
3 changed files with 43 additions and 3 deletions
|
@ -75,11 +75,23 @@ class Page extends BookChild
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the associated page revisions, ordered by created date.
|
* 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -151,6 +151,7 @@ class TrashCan
|
||||||
protected function destroyPage(Page $page): int
|
protected function destroyPage(Page $page): int
|
||||||
{
|
{
|
||||||
$this->destroyCommonRelations($page);
|
$this->destroyCommonRelations($page);
|
||||||
|
$page->allRevisions()->delete();
|
||||||
|
|
||||||
// Delete Attached Files
|
// Delete Attached Files
|
||||||
$attachmentService = app(AttachmentService::class);
|
$attachmentService = app(AttachmentService::class);
|
||||||
|
|
|
@ -71,6 +71,33 @@ class PageTest extends TestCase
|
||||||
$redirectReq->assertNotificationContains('Page Successfully Deleted');
|
$redirectReq->assertNotificationContains('Page Successfully Deleted');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_page_full_delete_removes_all_revisions()
|
||||||
|
{
|
||||||
|
/** @var Page $page */
|
||||||
|
$page = Page::query()->first();
|
||||||
|
$page->revisions()->create([
|
||||||
|
'html' => '<p>ducks</p>',
|
||||||
|
'name' => 'my page revision',
|
||||||
|
'type' => 'draft',
|
||||||
|
]);
|
||||||
|
$page->revisions()->create([
|
||||||
|
'html' => '<p>ducks</p>',
|
||||||
|
'name' => 'my page revision',
|
||||||
|
'type' => 'revision',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('page_revisions', [
|
||||||
|
'page_id' => $page->id,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->asEditor()->delete($page->getUrl());
|
||||||
|
$this->asAdmin()->post('/settings/recycle-bin/empty');
|
||||||
|
|
||||||
|
$this->assertDatabaseMissing('page_revisions', [
|
||||||
|
'page_id' => $page->id,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
public function test_page_copy()
|
public function test_page_copy()
|
||||||
{
|
{
|
||||||
$page = Page::first();
|
$page = Page::first();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue