diff --git a/app/Http/Controllers/Staff/StudiesController.php b/app/Http/Controllers/Staff/StudiesController.php index b5fd47c..7b71cb0 100644 --- a/app/Http/Controllers/Staff/StudiesController.php +++ b/app/Http/Controllers/Staff/StudiesController.php @@ -4,6 +4,7 @@ use App\Http\Controllers\HashidControllerBase; use App\Models\Study; +use App\Services\AuditTrail\Activity; class StudiesController extends HashidControllerBase { @@ -20,6 +21,10 @@ public function details() { $this->decodeKeys(); $study = Study::with(['series', 'details'])->findOrFail($this->key); + audit() + ->did(Activity::Study_Metadata_View) + ->on($study) + ->log(); //return view('staff.studies.details', compact('study')); return response()->json($study); diff --git a/app/Services/AuditTrail/Activity.php b/app/Services/AuditTrail/Activity.php index 2141a0c..a256fb3 100644 --- a/app/Services/AuditTrail/Activity.php +++ b/app/Services/AuditTrail/Activity.php @@ -7,11 +7,13 @@ final class Activity // studies public const int Study_Open = 101; - public const int Study_Metadata_Edit = 102; + public const int Study_Metadata_View = 102; - public const int Study_History_View = 103; + public const int Study_Metadata_Edit = 103; - public const int Study_History_Update = 104; + public const int Study_History_View = 104; + + public const int Study_History_Update = 105; // report diff --git a/app/Services/AuditTrail/ActivityLogger.php b/app/Services/AuditTrail/ActivityLogger.php index 60c5268..a4d697a 100644 --- a/app/Services/AuditTrail/ActivityLogger.php +++ b/app/Services/AuditTrail/ActivityLogger.php @@ -22,6 +22,13 @@ class ActivityLogger private ?string $userAgent = null; + private ?string $ipAddr = null; + + /** + * @var true + */ + private bool $anonymous = false; + public function __construct() { $this->category = Category::GENERAL; @@ -34,10 +41,10 @@ public function on(Study $study): static return $this; } - public function by(Authenticatable|int $user): static + public function by(Authenticatable|int|null $user = null): static { - if ($user == null) { - return $this; + if ($user === null) { + $user = auth()->user(); } if ($user instanceof Authenticatable) { @@ -84,14 +91,38 @@ public function ua(?string $agent = null): static return $this; } - public function log(): bool + public function ip(?string $addr = null): static { + $this->ipAddr = $addr ?? request()->ip(); + + return $this; + } + + public function anon() + { + $this->anonymous = true; + $this->userId = null; + + return $this; + } + + public function log(bool $initDefaults = true): bool + { + if ($initDefaults) { + $this->ip(); + $this->url(); + $this->ua(); + if ($this->userId === null && ! $this->anonymous) { + $this->by(); + } + } + return DB::table('audit_logs')->insert([ 'study_id' => $this->studyId, 'user_id' => $this->userId, 'category' => $this->category, 'activity' => $this->activity, - 'ip_addr' => request()->ip(), + 'ip_addr' => $this->ipAddr, 'user_agent' => $this->userAgent, 'url' => $this->url, 'notes' => $this->notes,