From: Dan Brown Date: Sun, 30 Oct 2022 20:24:08 +0000 (+0000) Subject: Revised audit log list to new responsive format X-Git-Tag: v22.11~1^2~20^2~12 X-Git-Url: http://source.bookstackapp.com/bookstack/commitdiff_plain/2bbf7b2194237a82cee722bb9b936ceeaae78241 Revised audit log list to new responsive format --- diff --git a/app/Http/Controllers/AuditLogController.php b/app/Http/Controllers/AuditLogController.php index ec3f36975..da8009d78 100644 --- a/app/Http/Controllers/AuditLogController.php +++ b/app/Http/Controllers/AuditLogController.php @@ -3,6 +3,8 @@ namespace BookStack\Http\Controllers; use BookStack\Actions\Activity; +use BookStack\Actions\ActivityType; +use BookStack\Util\SimpleListOptions; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -13,10 +15,15 @@ class AuditLogController extends Controller $this->checkPermission('settings-manage'); $this->checkPermission('users-manage'); - $listDetails = [ - 'order' => $request->get('order', 'desc'), + $sort = $request->get('sort', 'activity_date'); + $order = $request->get('order', 'desc'); + $listOptions = (new SimpleListOptions('', $sort, $order))->withSortOptions([ + 'created_at' => trans('settings.audit_table_date'), + 'type' => trans('settings.audit_table_event'), + ]); + + $filters = [ 'event' => $request->get('event', ''), - 'sort' => $request->get('sort', 'created_at'), 'date_from' => $request->get('date_from', ''), 'date_to' => $request->get('date_to', ''), 'user' => $request->get('user', ''), @@ -25,39 +32,38 @@ class AuditLogController extends Controller $query = Activity::query() ->with([ - 'entity' => function ($query) { - $query->withTrashed(); - }, + 'entity' => fn ($query) => $query->withTrashed(), 'user', ]) - ->orderBy($listDetails['sort'], $listDetails['order']); + ->orderBy($listOptions->getSort(), $listOptions->getOrder()); - if ($listDetails['event']) { - $query->where('type', '=', $listDetails['event']); + if ($filters['event']) { + $query->where('type', '=', $filters['event']); } - if ($listDetails['user']) { - $query->where('user_id', '=', $listDetails['user']); + if ($filters['user']) { + $query->where('user_id', '=', $filters['user']); } - if ($listDetails['date_from']) { - $query->where('created_at', '>=', $listDetails['date_from']); + if ($filters['date_from']) { + $query->where('created_at', '>=', $filters['date_from']); } - if ($listDetails['date_to']) { - $query->where('created_at', '<=', $listDetails['date_to']); + if ($filters['date_to']) { + $query->where('created_at', '<=', $filters['date_to']); } - if ($listDetails['ip']) { - $query->where('ip', 'like', $listDetails['ip'] . '%'); + if ($filters['ip']) { + $query->where('ip', 'like', $filters['ip'] . '%'); } $activities = $query->paginate(100); - $activities->appends($listDetails); + $activities->appends($request->all()); - $types = DB::table('activities')->select('type')->distinct()->pluck('type'); + $types = ActivityType::all(); $this->setPageTitle(trans('settings.audit')); return view('settings.audit', [ 'activities' => $activities, - 'listDetails' => $listDetails, + 'filters' => $filters, + 'listOptions' => $listOptions, 'activityTypes' => $types, ]); } diff --git a/resources/js/components/list-sort-control.js b/resources/js/components/list-sort-control.js index 23fc64ae6..3b642dbde 100644 --- a/resources/js/components/list-sort-control.js +++ b/resources/js/components/list-sort-control.js @@ -1,17 +1,22 @@ /** * ListSortControl * Manages the logic for the control which provides list sorting options. + * @extends {Component} */ class ListSortControl { - constructor(elem) { - this.elem = elem; - this.menu = elem.querySelector('ul'); + setup() { + this.elem = this.$el; + this.menu = this.$refs.menu; - this.sortInput = elem.querySelector('[name="sort"]'); - this.orderInput = elem.querySelector('[name="order"]'); - this.form = elem.querySelector('form'); + this.sortInput = this.$refs.sort; + this.orderInput = this.$refs.order; + this.form = this.$refs.form; + this.setupListeners(); + } + + setupListeners() { this.menu.addEventListener('click', event => { if (event.target.closest('[data-sort-value]') !== null) { this.sortOptionClick(event); @@ -34,8 +39,7 @@ class ListSortControl { sortDirectionClick(event) { const currentDir = this.orderInput.value; - const newDir = (currentDir === 'asc') ? 'desc' : 'asc'; - this.orderInput.value = newDir; + this.orderInput.value = (currentDir === 'asc') ? 'desc' : 'asc'; event.preventDefault(); this.form.submit(); } diff --git a/resources/sass/_layout.scss b/resources/sass/_layout.scss index d4413d32c..51389dc69 100644 --- a/resources/sass/_layout.scss +++ b/resources/sass/_layout.scss @@ -144,6 +144,10 @@ body.flexbox { flex-direction: column; } +.flex-container-row.inline, .flex-container-column.inline { + display: inline-flex !important; +} + .flex-container-column.wrap, .flex-container-row.wrap { flex-wrap: wrap; } diff --git a/resources/sass/styles.scss b/resources/sass/styles.scss index ab97466a5..44d0055b5 100644 --- a/resources/sass/styles.scss +++ b/resources/sass/styles.scss @@ -352,15 +352,4 @@ input.scroll-box-search, .scroll-box-header-item { transform: rotate(180deg); } } -} - -table.table .table-user-item { - display: grid; - grid-template-columns: 42px 1fr; - align-items: center; -} -table.table .table-entity-item { - display: grid; - grid-template-columns: 36px 1fr; - align-items: center; } \ No newline at end of file diff --git a/resources/views/common/sort.blade.php b/resources/views/common/sort.blade.php index f81ed797f..996f7a837 100644 --- a/resources/views/common/sort.blade.php +++ b/resources/views/common/sort.blade.php @@ -2,25 +2,40 @@ $selectedSort = (isset($sort) && array_key_exists($sort, $options)) ? $sort : array_keys($options)[0]; $order = (isset($order) && in_array($order, ['asc', 'desc'])) ? $order : 'asc'; ?> -
+
{{ trans('common.sort') }}
-
id ."/change-sort/{$type}") }}" method="post"> + id ."/change-sort/{$type}") }}" + method="post" + @endif + > - {!! csrf_field() !!} - {!! method_field('PATCH') !!} - - + @if($useQuery ?? false) + @foreach(array_filter(request()->except(['sort', 'order'])) as $key => $value) + + @endforeach + @else + {!! method_field('PATCH') !!} + {!! csrf_field() !!} + @endif + + +
- diff --git a/resources/views/settings/audit.blade.php b/resources/views/settings/audit.blade.php index 2daeb8a82..2df2499ab 100644 --- a/resources/views/settings/audit.blade.php +++ b/resources/views/settings/audit.blade.php @@ -9,7 +9,11 @@

{{ trans('settings.audit') }}

{{ trans('settings.audit_desc') }}

- + + + @foreach(request()->only(['order', 'sort']) as $key => $val) + + @endforeach - @if(!empty($listDetails['event'])) - + @if(!empty($filters['event'])) + @endif @foreach(['date_from', 'date_to'] as $filterKey) @@ -38,7 +42,7 @@ component="submit-on-change" type="date" name="{{ $filterKey }}" - value="{{ $listDetails[$filterKey] ?? '' }}"> + value="{{ $filters[$filterKey] ?? '' }}">
@endforeach @@ -46,44 +50,47 @@ component="submit-on-change" option:submit-on-change:filter='[name="user"]'> - @include('form.user-select', ['user' => $listDetails['user'] ? \BookStack\Auth\User::query()->find($listDetails['user']) : null, 'name' => 'user']) + @include('form.user-select', ['user' => $filters['user'] ? \BookStack\Auth\User::query()->find($filters['user']) : null, 'name' => 'user'])
- @include('form.text', ['name' => 'ip', 'model' => (object) $listDetails]) + @include('form.text', ['name' => 'ip', 'model' => (object) $filters])
-
- - {{ $activities->links() }} - - - - - - - - - - +
+ +
+
{{ $activities->links() }}
+
+ @include('common.sort', [...$listOptions->getSortControlData(), 'useQuery' => true]) +
+
+ +
+
+
{{ trans('settings.audit_table_user') }}
+
{{ trans('settings.audit_table_event') }}
+
{{ trans('settings.audit_table_related') }}
+
+
{{ trans('settings.audit_table_ip') }}
+
{{ trans('settings.audit_table_date') }}
+
+
@foreach($activities as $activity) -
- - - - - - + +
+
{{ trans('settings.audit_table_ip') }}:
{{ $activity->ip }}
+
{{ trans('settings.audit_table_date') }}:
{{ $activity->created_at }}
+
+ @endforeach - -
{{ trans('settings.audit_table_user') }} - {{ trans('settings.audit_table_event') }} - {{ trans('settings.audit_table_related') }}{{ trans('settings.audit_table_ip') }} - {{ trans('settings.audit_table_date') }}
+
+
@include('settings.parts.table-user', ['user' => $activity->user, 'user_id' => $activity->user_id]) -
{{ $activity->type }} + +
{{ trans('settings.audit_table_event') }}: {{ $activity->type }}
+
@if($activity->entity) - - @icon($activity->entity->getType()) -
+ + @icon($activity->entity->getType()) +
{{ $activity->entity->name }}
@@ -95,15 +102,18 @@ @elseif($activity->detail)
{{ $activity->detail }}
@endif -
{{ $activity->ip }}{{ $activity->created_at }}
+
- {{ $activities->links() }} +
+ {{ $activities->links() }} +
diff --git a/resources/views/settings/parts/table-user.blade.php b/resources/views/settings/parts/table-user.blade.php index a8f2777f0..d29ad1979 100644 --- a/resources/views/settings/parts/table-user.blade.php +++ b/resources/views/settings/parts/table-user.blade.php @@ -3,9 +3,9 @@ $user - User mode to display, Can be null. $user_id - Id of user to show. Must be provided. --}} @if($user) - -
{{ $user->name }}
-
{{ $user->name }}
+
+
{{ $user->name }}
+
{{ $user->name }}
@else [ID: {{ $user_id }}] {{ trans('common.deleted_user') }}