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