X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/78bf044a7acf39dfc91588099435cd27038b61b2..refs/pull/4002/head:/app/Http/Controllers/AuditLogController.php diff --git a/app/Http/Controllers/AuditLogController.php b/app/Http/Controllers/AuditLogController.php index a3ef01baa..da8009d78 100644 --- a/app/Http/Controllers/AuditLogController.php +++ b/app/Http/Controllers/AuditLogController.php @@ -3,49 +3,68 @@ 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; class AuditLogController extends Controller { - public function index(Request $request) { $this->checkPermission('settings-manage'); $this->checkPermission('users-manage'); - $listDetails = [ - 'order' => $request->get('order', 'desc'), - 'event' => $request->get('event', ''), - 'sort' => $request->get('sort', 'created_at'), + $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', ''), 'date_from' => $request->get('date_from', ''), - 'date_to' => $request->get('date_to', ''), + 'date_to' => $request->get('date_to', ''), + 'user' => $request->get('user', ''), + 'ip' => $request->get('ip', ''), ]; $query = Activity::query() - ->with(['entity', 'user']) - ->orderBy($listDetails['sort'], $listDetails['order']); + ->with([ + 'entity' => fn ($query) => $query->withTrashed(), + 'user', + ]) + ->orderBy($listOptions->getSort(), $listOptions->getOrder()); - if ($listDetails['event']) { - $query->where('key', '=', $listDetails['event']); + if ($filters['event']) { + $query->where('type', '=', $filters['event']); + } + 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 ($filters['date_to']) { + $query->where('created_at', '<=', $filters['date_to']); } - if ($listDetails['date_to']) { - $query->where('created_at', '<=', $listDetails['date_to']); + if ($filters['ip']) { + $query->where('ip', 'like', $filters['ip'] . '%'); } $activities = $query->paginate(100); - $activities->appends($listDetails); + $activities->appends($request->all()); - $keys = DB::table('activities')->select('key')->distinct()->pluck('key'); + $types = ActivityType::all(); $this->setPageTitle(trans('settings.audit')); + return view('settings.audit', [ - 'activities' => $activities, - 'listDetails' => $listDetails, - 'activityKeys' => $keys, + 'activities' => $activities, + 'filters' => $filters, + 'listOptions' => $listOptions, + 'activityTypes' => $types, ]); } }