]> BookStack Code Mirror - bookstack/blob - app/Activity/Controllers/AuditLogController.php
a90f45f3aa8f8615aad156b2b1a7b9dff22f1900
[bookstack] / app / Activity / Controllers / AuditLogController.php
1 <?php
2
3 namespace BookStack\Activity\Controllers;
4
5 use BookStack\Activity\ActivityType;
6 use BookStack\Activity\Models\Activity;
7 use BookStack\Http\Controllers\Controller;
8 use BookStack\Util\SimpleListOptions;
9 use Illuminate\Http\Request;
10
11 class AuditLogController extends Controller
12 {
13     public function index(Request $request)
14     {
15         $this->checkPermission('settings-manage');
16         $this->checkPermission('users-manage');
17
18         $sort = $request->get('sort', 'activity_date');
19         $order = $request->get('order', 'desc');
20         $listOptions = (new SimpleListOptions('', $sort, $order))->withSortOptions([
21             'created_at' => trans('settings.audit_table_date'),
22             'type' => trans('settings.audit_table_event'),
23         ]);
24
25         $filters = [
26             'event'     => $request->get('event', ''),
27             'date_from' => $request->get('date_from', ''),
28             'date_to'   => $request->get('date_to', ''),
29             'user'      => $request->get('user', ''),
30             'ip'        => $request->get('ip', ''),
31         ];
32
33         $query = Activity::query()
34             ->with([
35                 'entity' => fn ($query) => $query->withTrashed(),
36                 'user',
37             ])
38             ->orderBy($listOptions->getSort(), $listOptions->getOrder());
39
40         if ($filters['event']) {
41             $query->where('type', '=', $filters['event']);
42         }
43         if ($filters['user']) {
44             $query->where('user_id', '=', $filters['user']);
45         }
46
47         if ($filters['date_from']) {
48             $query->where('created_at', '>=', $filters['date_from']);
49         }
50         if ($filters['date_to']) {
51             $query->where('created_at', '<=', $filters['date_to']);
52         }
53         if ($filters['ip']) {
54             $query->where('ip', 'like', $filters['ip'] . '%');
55         }
56
57         $activities = $query->paginate(100);
58         $activities->appends($request->all());
59
60         $types = ActivityType::all();
61         $this->setPageTitle(trans('settings.audit'));
62
63         return view('settings.audit', [
64             'activities'    => $activities,
65             'filters'       => $filters,
66             'listOptions'   => $listOptions,
67             'activityTypes' => $types,
68         ]);
69     }
70 }