mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-04-29 15:44:05 +08:00
parent
ed330f246c
commit
0bc5ccba32
@ -299,6 +299,7 @@ return [
|
|||||||
|
|
||||||
// Revision
|
// Revision
|
||||||
'revision_delete_confirm' => 'Are you sure you want to delete this revision?',
|
'revision_delete_confirm' => 'Are you sure you want to delete this revision?',
|
||||||
|
'revision_restore_confirm' => 'Are you sure you want to restore this revision? The current page contents will be replaced.',
|
||||||
'revision_delete_success' => 'Revision deleted',
|
'revision_delete_success' => 'Revision deleted',
|
||||||
'revision_cannot_delete_latest' => 'Cannot delete the latest revision.'
|
'revision_cannot_delete_latest' => 'Cannot delete the latest revision.'
|
||||||
];
|
];
|
@ -50,7 +50,20 @@
|
|||||||
@else
|
@else
|
||||||
<a href="{{ $revision->getUrl() }}" target="_blank">{{ trans('entities.pages_revisions_preview') }}</a>
|
<a href="{{ $revision->getUrl() }}" target="_blank">{{ trans('entities.pages_revisions_preview') }}</a>
|
||||||
<span class="text-muted"> | </span>
|
<span class="text-muted"> | </span>
|
||||||
<a href="{{ $revision->getUrl('restore') }}">{{ trans('entities.pages_revisions_restore') }}</a>
|
<a href="{{ $revision->getUrl('restore') }}"></a>
|
||||||
|
<div dropdown class="dropdown-container">
|
||||||
|
<a dropdown-toggle>{{ trans('entities.pages_revisions_restore') }}</a>
|
||||||
|
<ul>
|
||||||
|
<li class="px-m py-s"><small class="text-muted">{{trans('entities.revision_restore_confirm')}}</small></li>
|
||||||
|
<li>
|
||||||
|
<form action="{{ $revision->getUrl('/restore') }}" method="POST">
|
||||||
|
{!! csrf_field() !!}
|
||||||
|
<input type="hidden" name="_method" value="PUT">
|
||||||
|
<button type="submit" class="text-button text-primary">@icon('history'){{ trans('entities.pages_revisions_restore') }}</button>
|
||||||
|
</form>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
<span class="text-muted"> | </span>
|
<span class="text-muted"> | </span>
|
||||||
<div dropdown class="dropdown-container">
|
<div dropdown class="dropdown-container">
|
||||||
<a dropdown-toggle>{{ trans('common.delete') }}</a>
|
<a dropdown-toggle>{{ trans('common.delete') }}</a>
|
||||||
|
@ -77,7 +77,7 @@ Route::group(['middleware' => 'auth'], function () {
|
|||||||
Route::get('/{bookSlug}/page/{pageSlug}/revisions', 'PageController@showRevisions');
|
Route::get('/{bookSlug}/page/{pageSlug}/revisions', 'PageController@showRevisions');
|
||||||
Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}', 'PageController@showRevision');
|
Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}', 'PageController@showRevision');
|
||||||
Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}/changes', 'PageController@showRevisionChanges');
|
Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}/changes', 'PageController@showRevisionChanges');
|
||||||
Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}/restore', 'PageController@restoreRevision');
|
Route::put('/{bookSlug}/page/{pageSlug}/revisions/{revId}/restore', 'PageController@restoreRevision');
|
||||||
Route::delete('/{bookSlug}/page/{pageSlug}/revisions/{revId}/delete', 'PageController@destroyRevision');
|
Route::delete('/{bookSlug}/page/{pageSlug}/revisions/{revId}/delete', 'PageController@destroyRevision');
|
||||||
|
|
||||||
// Chapters
|
// Chapters
|
||||||
|
@ -71,51 +71,6 @@ class PageContentTest extends TestCase
|
|||||||
$pageResp->assertSee($content);
|
$pageResp->assertSee($content);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_page_revision_views_viewable()
|
|
||||||
{
|
|
||||||
$this->asEditor();
|
|
||||||
|
|
||||||
$pageRepo = app(PageRepo::class);
|
|
||||||
$page = Page::first();
|
|
||||||
$pageRepo->updatePage($page, $page->book_id, ['name' => 'updated page', 'html' => '<p>new content</p>', 'summary' => 'page revision testing']);
|
|
||||||
$pageRevision = $page->revisions->last();
|
|
||||||
|
|
||||||
$revisionView = $this->get($page->getUrl() . '/revisions/' . $pageRevision->id);
|
|
||||||
$revisionView->assertStatus(200);
|
|
||||||
$revisionView->assertSee('new content');
|
|
||||||
|
|
||||||
$revisionView = $this->get($page->getUrl() . '/revisions/' . $pageRevision->id . '/changes');
|
|
||||||
$revisionView->assertStatus(200);
|
|
||||||
$revisionView->assertSee('new content');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function test_page_revision_restore_updates_content()
|
|
||||||
{
|
|
||||||
$this->asEditor();
|
|
||||||
|
|
||||||
$pageRepo = app(PageRepo::class);
|
|
||||||
$page = Page::first();
|
|
||||||
$pageRepo->updatePage($page, $page->book_id, ['name' => 'updated page abc123', 'html' => '<p>new contente def456</p>', 'summary' => 'initial page revision testing']);
|
|
||||||
$pageRepo->updatePage($page, $page->book_id, ['name' => 'updated page again', 'html' => '<p>new content</p>', 'summary' => 'page revision testing']);
|
|
||||||
$page = Page::find($page->id);
|
|
||||||
|
|
||||||
|
|
||||||
$pageView = $this->get($page->getUrl());
|
|
||||||
$pageView->assertDontSee('abc123');
|
|
||||||
$pageView->assertDontSee('def456');
|
|
||||||
|
|
||||||
$revToRestore = $page->revisions()->where('name', 'like', '%abc123')->first();
|
|
||||||
$restoreReq = $this->get($page->getUrl() . '/revisions/' . $revToRestore->id . '/restore');
|
|
||||||
$page = Page::find($page->id);
|
|
||||||
|
|
||||||
$restoreReq->assertStatus(302);
|
|
||||||
$restoreReq->assertRedirect($page->getUrl());
|
|
||||||
|
|
||||||
$pageView = $this->get($page->getUrl());
|
|
||||||
$pageView->assertSee('abc123');
|
|
||||||
$pageView->assertSee('def456');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function test_page_content_scripts_escaped_by_default()
|
public function test_page_content_scripts_escaped_by_default()
|
||||||
{
|
{
|
||||||
$this->asEditor();
|
$this->asEditor();
|
||||||
|
@ -1,11 +1,55 @@
|
|||||||
<?php namespace Entity;
|
<?php namespace Entity;
|
||||||
|
|
||||||
|
|
||||||
use BookStack\Entities\Page;
|
use BookStack\Entities\Page;
|
||||||
|
use BookStack\Entities\Repos\PageRepo;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
|
||||||
class PageRevisionTest extends TestCase
|
class PageRevisionTest extends TestCase
|
||||||
{
|
{
|
||||||
|
public function test_page_revision_views_viewable()
|
||||||
|
{
|
||||||
|
$this->asEditor();
|
||||||
|
|
||||||
|
$pageRepo = app(PageRepo::class);
|
||||||
|
$page = Page::first();
|
||||||
|
$pageRepo->updatePage($page, $page->book_id, ['name' => 'updated page', 'html' => '<p>new content</p>', 'summary' => 'page revision testing']);
|
||||||
|
$pageRevision = $page->revisions->last();
|
||||||
|
|
||||||
|
$revisionView = $this->get($page->getUrl() . '/revisions/' . $pageRevision->id);
|
||||||
|
$revisionView->assertStatus(200);
|
||||||
|
$revisionView->assertSee('new content');
|
||||||
|
|
||||||
|
$revisionView = $this->get($page->getUrl() . '/revisions/' . $pageRevision->id . '/changes');
|
||||||
|
$revisionView->assertStatus(200);
|
||||||
|
$revisionView->assertSee('new content');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_page_revision_restore_updates_content()
|
||||||
|
{
|
||||||
|
$this->asEditor();
|
||||||
|
|
||||||
|
$pageRepo = app(PageRepo::class);
|
||||||
|
$page = Page::first();
|
||||||
|
$pageRepo->updatePage($page, $page->book_id, ['name' => 'updated page abc123', 'html' => '<p>new contente def456</p>', 'summary' => 'initial page revision testing']);
|
||||||
|
$pageRepo->updatePage($page, $page->book_id, ['name' => 'updated page again', 'html' => '<p>new content</p>', 'summary' => 'page revision testing']);
|
||||||
|
$page = Page::find($page->id);
|
||||||
|
|
||||||
|
|
||||||
|
$pageView = $this->get($page->getUrl());
|
||||||
|
$pageView->assertDontSee('abc123');
|
||||||
|
$pageView->assertDontSee('def456');
|
||||||
|
|
||||||
|
$revToRestore = $page->revisions()->where('name', 'like', '%abc123')->first();
|
||||||
|
$restoreReq = $this->put($page->getUrl() . '/revisions/' . $revToRestore->id . '/restore');
|
||||||
|
$page = Page::find($page->id);
|
||||||
|
|
||||||
|
$restoreReq->assertStatus(302);
|
||||||
|
$restoreReq->assertRedirect($page->getUrl());
|
||||||
|
|
||||||
|
$pageView = $this->get($page->getUrl());
|
||||||
|
$pageView->assertSee('abc123');
|
||||||
|
$pageView->assertSee('def456');
|
||||||
|
}
|
||||||
|
|
||||||
public function test_page_revision_count_increments_on_update()
|
public function test_page_revision_count_increments_on_update()
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user