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('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 }}
+ |
- {{ $activity->ip }} | -{{ $activity->created_at }} | -