-@extends('simple-layout')
+@extends('layouts.simple')
@section('body')
-<div class="container">
+ <div class="container">
- <div class="grid left-focus v-center no-row-gap">
- <div class="py-m">
- @include('settings.navbar', ['selected' => 'audit'])
- </div>
- </div>
+ @include('settings.parts.navbar', ['selected' => 'audit'])
+
+ <div class="card content-wrap auto-height">
+ <h1 class="list-heading">{{ trans('settings.audit') }}</h1>
+ <p class="text-muted">{{ trans('settings.audit_desc') }}</p>
+
+ <form action="{{ url('/settings/audit') }}" method="get"
+ class="flex-container-row wrap justify-flex-start gap-x-m gap-y-xs">
+
+ @foreach(request()->only(['order', 'sort']) as $key => $val)
+ <input type="hidden" name="{{ $key }}" value="{{ $val }}">
+ @endforeach
+
+ <div component="dropdown" class="list-sort-type dropdown-container relative">
+ <label for="">{{ trans('settings.audit_event_filter') }}</label>
+ <button refs="dropdown@toggle"
+ type="button"
+ aria-haspopup="true"
+ aria-expanded="false"
+ aria-label="{{ trans('common.sort_options') }}"
+ class="input-base text-left">{{ $filters['event'] ?: trans('settings.audit_event_filter_no_filter') }}</button>
+ <ul refs="dropdown@menu" class="dropdown-menu">
+ <li @if($filters['event'] === '') class="active" @endif><a
+ href="{{ $filterSortUrl->withOverrideData(['event' => ''])->build() }}"
+ class="text-item">{{ trans('settings.audit_event_filter_no_filter') }}</a></li>
+ @foreach($activityTypes as $type)
+ <li @if($type === $filters['event']) class="active" @endif><a
+ href="{{ $filterSortUrl->withOverrideData(['event' => $type])->build() }}"
+ class="text-item">{{ $type }}</a></li>
+ @endforeach
+ </ul>
+ </div>
+
+ @if(!empty($filters['event']))
+ <input type="hidden" name="event" value="{{ $filters['event'] }}">
+ @endif
+
+ @foreach(['date_from', 'date_to'] as $filterKey)
+ <div class=>
+ <label for="audit_filter_{{ $filterKey }}">{{ trans('settings.audit_' . $filterKey) }}</label>
+ <input id="audit_filter_{{ $filterKey }}"
+ component="submit-on-change"
+ type="date"
+ name="{{ $filterKey }}"
+ value="{{ $filters[$filterKey] ?? '' }}">
+ </div>
+ @endforeach
+
+ <div class="form-group"
+ component="submit-on-change"
+ option:submit-on-change:filter='[name="user"]'>
+ <label for="owner">{{ trans('settings.audit_table_user') }}</label>
+ @include('form.user-select', ['user' => $filters['user'] ? \BookStack\Users\Models\User::query()->find($filters['user']) : null, 'name' => 'user'])
+ </div>
- <div class="card content-wrap auto-height">
- <h2 class="list-heading">{{ trans('settings.audit') }}</h2>
- <p class="text-muted">{{ trans('settings.audit_desc') }}</p>
-
- <div class="flex-container-row">
- <div component="dropdown" class="list-sort-type dropdown-container mr-m">
- <label for="">{{ trans('settings.audit_event_filter') }}</label>
- <button refs="dropdown@toggle" aria-haspopup="true" aria-expanded="false" aria-label="{{ trans('common.sort_options') }}" class="input-base text-left">{{ $listDetails['event'] ?: trans('settings.audit_event_filter_no_filter') }}</button>
- <ul refs="dropdown@menu" class="dropdown-menu">
- <li @if($listDetails['event'] === '') class="active" @endif><a href="{{ sortUrl('/settings/audit', $listDetails, ['event' => '']) }}">{{ trans('settings.audit_event_filter_no_filter') }}</a></li>
- @foreach($activityTypes as $type)
- <li @if($type === $listDetails['event']) class="active" @endif><a href="{{ sortUrl('/settings/audit', $listDetails, ['event' => $type]) }}">{{ $type }}</a></li>
- @endforeach
- </ul>
+
+ <div class="form-group">
+ <label for="ip">{{ trans('settings.audit_table_ip') }}</label>
+ @include('form.text', ['name' => 'ip', 'model' => (object) $filters])
+ <input type="submit" style="display: none">
+ </div>
+ </form>
+
+ <hr class="mt-m mb-s">
+
+ <div class="flex-container-row justify-space-between items-center wrap">
+ <div class="flex-2 min-width-xl">{{ $activities->links() }}</div>
+ <div class="flex-none min-width-m py-m">
+ @include('common.sort', array_merge($listOptions->getSortControlData(), ['useQuery' => true]))
+ </div>
</div>
- @foreach(['date_from', 'date_to'] as $filterKey)
- <form action="{{ url('/settings/audit') }}" method="get" class="block mr-m">
- @foreach($listDetails as $param => $val)
- @if(!empty($val) && $param !== $filterKey)
- <input type="hidden" name="{{ $param }}" value="{{ $val }}">
- @endif
- @endforeach
- <label for="audit_filter_{{ $filterKey }}">{{ trans('settings.audit_' . $filterKey) }}</label>
- <input id="audit_filter_{{ $filterKey }}"
- component="submit-on-change"
- type="date"
- name="{{ $filterKey }}"
- value="{{ $listDetails[$filterKey] ?? '' }}">
- </form>
- @endforeach
+ <div class="item-list">
+ <div class="item-list-row flex-container-row items-center bold hide-under-m">
+ <div class="flex-2 px-m py-xs flex-container-row items-center">{{ trans('settings.audit_table_user') }}</div>
+ <div class="flex-2 px-m py-xs">{{ trans('settings.audit_table_event') }}</div>
+ <div class="flex-3 px-m py-xs">{{ trans('settings.audit_table_related') }}</div>
+ <div class="flex-container-row flex-3">
+ <div class="flex px-m py-xs">{{ trans('settings.audit_table_ip') }}</div>
+ <div class="flex-2 px-m py-xs text-right">{{ trans('settings.audit_table_date') }}</div>
+ </div>
+ </div>
+ @foreach($activities as $activity)
+ <div class="item-list-row flex-container-row items-center wrap py-xxs">
+ <div class="flex-2 px-m py-xxs flex-container-row items-center min-width-m">
+ @include('settings.parts.table-user', ['user' => $activity->user, 'user_id' => $activity->user_id])
+ </div>
+ <div class="flex-2 px-m py-xxs min-width-m"><strong
+ class="mr-xs hide-over-m">{{ trans('settings.audit_table_event') }}
+ :</strong> {{ $activity->type }}</div>
+ <div class="flex-3 px-m py-xxs min-width-l">
+ @if($activity->loggable instanceof \BookStack\Entities\Models\Entity)
+ @include('entities.icon-link', ['entity' => $activity->loggable])
+ @elseif($activity->detail && $activity->isForEntity())
+ <div>
+ {{ trans('settings.audit_deleted_item') }} <br>
+ {{ trans('settings.audit_deleted_item_name', ['name' => $activity->detail]) }}
+ </div>
+ @elseif($activity->detail)
+ <div>{{ $activity->detail }}</div>
+ @endif
+ </div>
+ <div class="flex-container-row flex-3 min-width-m">
+ <div class="flex-2 px-m py-xxs min-width-xs break-text"><strong
+ class="mr-xs hide-over-m">{{ trans('settings.audit_table_ip') }}
+ :<br></strong> {{ $activity->ip }}</div>
+ <div class="flex-3 px-m py-xxs text-m-right min-width-xs"><strong
+ class="mr-xs hide-over-m">{{ trans('settings.audit_table_date') }}
+ :<br></strong> {{ $activity->created_at }}</div>
+ </div>
+ </div>
+ @endforeach
+ </div>
+
+ <div class="py-m">
+ {{ $activities->links() }}
+ </div>
</div>
- <hr class="mt-l mb-s">
-
- {{ $activities->links() }}
-
- <table class="table">
- <tbody>
- <tr>
- <th>{{ trans('settings.audit_table_user') }}</th>
- <th>
- <a href="{{ sortUrl('/settings/audit', $listDetails, ['sort' => 'key']) }}">{{ trans('settings.audit_table_event') }}</a>
- </th>
- <th>{{ trans('settings.audit_table_related') }}</th>
- <th>
- <a href="{{ sortUrl('/settings/audit', $listDetails, ['sort' => 'created_at']) }}">{{ trans('settings.audit_table_date') }}</a></th>
- </tr>
- @foreach($activities as $activity)
- <tr>
- <td>
- @include('partials.table-user', ['user' => $activity->user, 'user_id' => $activity->user_id])
- </td>
- <td>{{ $activity->type }}</td>
- <td width="40%">
- @if($activity->entity)
- <a href="{{ $activity->entity->getUrl() }}" class="table-entity-item">
- <span role="presentation" class="icon text-{{$activity->entity->getType()}}">@icon($activity->entity->getType())</span>
- <div class="text-{{ $activity->entity->getType() }}">
- {{ $activity->entity->name }}
- </div>
- </a>
- @elseif($activity->detail && $activity->isForEntity())
- <div class="px-m">
- {{ trans('settings.audit_deleted_item') }} <br>
- {{ trans('settings.audit_deleted_item_name', ['name' => $activity->detail]) }}
- </div>
- @elseif($activity->detail)
- <div class="px-m">{{ $activity->detail }}</div>
- @endif
- </td>
- <td>{{ $activity->created_at }}</td>
- </tr>
- @endforeach
- </tbody>
- </table>
-
- {{ $activities->links() }}
</div>
-
-</div>
@stop