diff --git a/app/Http/Controllers/PageRevisionController.php b/app/Http/Controllers/PageRevisionController.php index 85ee6c2bc..3da5e7c2d 100644 --- a/app/Http/Controllers/PageRevisionController.php +++ b/app/Http/Controllers/PageRevisionController.php @@ -8,6 +8,8 @@ use BookStack\Entities\Repos\PageRepo; use BookStack\Entities\Tools\PageContent; use BookStack\Exceptions\NotFoundException; use BookStack\Facades\Activity; +use BookStack\Util\SimpleListOptions; +use Illuminate\Http\Request; use Ssddanbrown\HtmlDiff\Diff; class PageRevisionController extends Controller @@ -24,22 +26,29 @@ class PageRevisionController extends Controller * * @throws NotFoundException */ - public function index(string $bookSlug, string $pageSlug) + public function index(Request $request, string $bookSlug, string $pageSlug) { $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); + $listOptions = SimpleListOptions::fromRequest($request, 'page_revisions', true)->withSortOptions([ + 'id' => trans('entities.pages_revisions_sort_number') + ]); + $revisions = $page->revisions()->select([ - 'id', 'page_id', 'name', 'created_at', 'created_by', 'updated_at', - 'type', 'revision_number', 'summary', - ]) + 'id', 'page_id', 'name', 'created_at', 'created_by', 'updated_at', + 'type', 'revision_number', 'summary', + ]) ->selectRaw("IF(markdown = '', false, true) as is_markdown") ->with(['page.book', 'createdBy']) - ->get(); + ->reorder('id', $listOptions->getOrder()) + ->reorder('created_at', $listOptions->getOrder()) + ->paginate(50); $this->setPageTitle(trans('entities.pages_revisions_named', ['pageName' => $page->getShortName()])); return view('pages.revisions', [ - 'revisions' => $revisions, - 'page' => $page, + 'revisions' => $revisions, + 'page' => $page, + 'listOptions' => $listOptions, ]); } diff --git a/app/Http/Controllers/UserPreferencesController.php b/app/Http/Controllers/UserPreferencesController.php index ca77dcd0b..972742e03 100644 --- a/app/Http/Controllers/UserPreferencesController.php +++ b/app/Http/Controllers/UserPreferencesController.php @@ -62,7 +62,7 @@ class UserPreferencesController extends Controller */ public function changeSort(Request $request, string $id, string $type) { - $validSortTypes = ['books', 'bookshelves', 'shelf_books', 'users', 'roles', 'webhooks', 'tags']; + $validSortTypes = ['books', 'bookshelves', 'shelf_books', 'users', 'roles', 'webhooks', 'tags', 'page_revisions']; if (!in_array($type, $validSortTypes)) { return redirect()->back(500); } diff --git a/app/Util/SimpleListOptions.php b/app/Util/SimpleListOptions.php index f6daa6954..cb7e75a2d 100644 --- a/app/Util/SimpleListOptions.php +++ b/app/Util/SimpleListOptions.php @@ -28,11 +28,11 @@ class SimpleListOptions * Create a new instance from the given request. * Takes the item type (plural) that's used as a key for storing sort preferences. */ - public static function fromRequest(Request $request, string $typeKey): self + public static function fromRequest(Request $request, string $typeKey, bool $sortDescDefault = false): self { $search = $request->get('search', ''); $sort = setting()->getForCurrentUser($typeKey . '_sort', ''); - $order = setting()->getForCurrentUser($typeKey . '_sort_order', 'asc'); + $order = setting()->getForCurrentUser($typeKey . '_sort_order', $sortDescDefault ? 'desc' : 'asc'); return new static($typeKey, $sort, $order, $search); } diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index b3dfb0bf7..e7fbe37d9 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -233,12 +233,14 @@ return [ 'pages_permissions_success' => 'Page permissions updated', 'pages_revision' => 'Revision', 'pages_revisions' => 'Page Revisions', + 'pages_revisions_desc' => 'Listed below are all the past revisions of this page. You can look back upon, compare, and restore old page versions if permissions allow. The full history of the page may not be fully reflected here since, depending on system configuration, old revisions could be auto-deleted.', 'pages_revisions_named' => 'Page Revisions for :pageName', 'pages_revision_named' => 'Page Revision for :pageName', 'pages_revision_restored_from' => 'Restored from #:id; :summary', 'pages_revisions_created_by' => 'Created By', 'pages_revisions_date' => 'Revision Date', 'pages_revisions_number' => '#', + 'pages_revisions_sort_number' => 'Revision Number', 'pages_revisions_numbered' => 'Revision #:id', 'pages_revisions_numbered_changes' => 'Revision #:id Changes', 'pages_revisions_editor' => 'Editor Type', diff --git a/resources/sass/_layout.scss b/resources/sass/_layout.scss index 105b6a16f..a5f895f80 100644 --- a/resources/sass/_layout.scss +++ b/resources/sass/_layout.scss @@ -202,6 +202,15 @@ body.flexbox { /** * Min width utilities */ +.min-width-xxxxs { + min-width: 60px; +} +.min-width-xxxs { + min-width: 80px; +} +.min-width-xxs { + min-width: 100px; +} .min-width-xs { min-width: 120px; } diff --git a/resources/views/pages/parts/revision-table-row.blade.php b/resources/views/pages/parts/revisions-index-row.blade.php similarity index 62% rename from resources/views/pages/parts/revision-table-row.blade.php rename to resources/views/pages/parts/revisions-index-row.blade.php index 24301adc3..597b53234 100644 --- a/resources/views/pages/parts/revision-table-row.blade.php +++ b/resources/views/pages/parts/revisions-index-row.blade.php @@ -1,38 +1,43 @@ - - {{ $revision->revision_number == 0 ? '' : $revision->revision_number }} - +
+
+ {{ trans('entities.pages_revisions_number') }} + {{ $revision->revision_number == 0 ? '' : $revision->revision_number }} +
+
{{ $revision->name }}
- ({{ $revision->is_markdown ? 'Markdown' : 'WYSIWYG' }}) - - - @if($revision->createdBy) - {{ $revision->createdBy->name }} - @endif - - - @if($revision->createdBy) {{ $revision->createdBy->name }} @else {{ trans('common.deleted_user') }} @endif -
-
- {{ $revision->created_at->formatLocalized('%e %B %Y %H:%M:%S') }} - ({{ $revision->created_at->diffForHumans() }}) + ({{ trans('entities.pages_revisions_editor') }}: {{ $revision->is_markdown ? 'Markdown' : 'WYSIWYG' }}) +
+
+
+ @if($revision->createdBy) + {{ $revision->createdBy->name }} + @endif +
+ @if($revision->createdBy) {{ $revision->createdBy->name }} @else {{ trans('common.deleted_user') }} @endif +
+
+ {{ $revision->created_at->formatLocalized('%e %B %Y %H:%M:%S') }} + ({{ $revision->created_at->diffForHumans() }}) +
+
- - +
+
{{ $revision->summary }} - - +
+
{{ trans('entities.pages_revisions_changes') }} -  |  +  |  - @if ($index === 0) + @if ($current) {{ trans('entities.pages_revisions_current') }} @else {{ trans('entities.pages_revisions_preview') }} @if(userCan('page-update', $revision->page)) -  |  +  |  +
\ No newline at end of file diff --git a/resources/views/pages/revisions.blade.php b/resources/views/pages/revisions.blade.php index 3e7edad99..9f462e930 100644 --- a/resources/views/pages/revisions.blade.php +++ b/resources/views/pages/revisions.blade.php @@ -17,26 +17,36 @@

{{ trans('entities.pages_revisions') }}

+ +

{{ trans('entities.pages_revisions_desc') }}

+ +
+ {{ $revisions->links() }} +
+ @include('common.sort', $listOptions->getSortControlData()) +
+
+ @if(count($revisions) > 0) - - - - - - - - - +
+
+
{{ trans('entities.pages_revisions_number') }}
+
{{ trans('entities.pages_name') }} / {{ trans('entities.pages_revisions_editor') }}
+
{{ trans('entities.pages_revisions_created_by') }} / {{ trans('entities.pages_revisions_date') }}
+
{{ trans('entities.pages_revisions_changelog') }}
+
{{ trans('common.actions') }}
+
@foreach($revisions as $index => $revision) - @include('pages.parts.revision-table-row', ['revision' => $revision]) + @include('pages.parts.revisions-index-row', ['revision' => $revision, 'current' => $page->revision_count === $revision->revision_number]) @endforeach -
{{ trans('entities.pages_revisions_number') }} - {{ trans('entities.pages_name') }} / {{ trans('entities.pages_revisions_editor') }} - {{ trans('entities.pages_revisions_created_by') }} / {{ trans('entities.pages_revisions_date') }}{{ trans('entities.pages_revisions_changelog') }}{{ trans('common.actions') }}
- +
@else

{{ trans('entities.pages_revisions_none') }}

@endif + +
+ {{ $revisions->links() }} +