84 lines
2.8 KiB
PHP
84 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace App\Observers;
|
|
|
|
use App\Models\AuditLogEntry;
|
|
use App\Models\School;
|
|
use App\Models\Student;
|
|
|
|
use function auth;
|
|
use function request;
|
|
|
|
class StudentObserver
|
|
{
|
|
/**
|
|
* Handle the Student "created" event.
|
|
*/
|
|
public function created(Student $student): void
|
|
{
|
|
$message = 'Created student #'.$student->id.' - '.$student->full_name().'<br>Grade: '.$student->grade.'<br>School: '.$student->school->name;
|
|
AuditLogEntry::create([
|
|
'user' => auth()->user()->email ?? 'none',
|
|
'ip_address' => request()->ip(),
|
|
'message' => $message,
|
|
'affected' => [
|
|
'students' => [$student->id],
|
|
'schools' => [$student->school_id],
|
|
],
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Handle the Student "updated" event.
|
|
*/
|
|
public function updated(Student $student): void
|
|
{
|
|
$message = 'Updated student #'.$student->id;
|
|
|
|
$message .= '<br>Name: '.$student->getOriginal('first_name').' '.$student->getOriginal('last_name');
|
|
if ($student->getOriginal('first_name') !== $student->first_name || $student->getOriginal('last_name') !== $student->last_name) {
|
|
$message .= ' -> '.$student->first_name.' '.$student->last_name;
|
|
}
|
|
|
|
$message .= '<br>Grade: '.$student->getOriginal('grade');
|
|
if ($student->getOriginal('grade') !== $student->grade) {
|
|
$message .= ' -> '.$student->grade;
|
|
}
|
|
|
|
$originalSchool = School::find($student->getOriginal('school_id'))->name;
|
|
$schoolsAffected[] = $student->school_id;
|
|
$message .= '<br>School: '.$originalSchool.' (#'.$student->getOriginal('school_id').')';
|
|
if ($student->school_id !== $student->getOriginal('school_id')) {
|
|
$schoolsAffected[] = $student->getOriginal('school_id');
|
|
$message .= ' -> '.$student->school->name.' (#'.$student->school_id.')';
|
|
}
|
|
|
|
AuditLogEntry::create([
|
|
'user' => auth()->user()->email ?? 'none',
|
|
'ip_address' => request()->ip(),
|
|
'message' => $message,
|
|
'affected' => [
|
|
'students' => [$student->id],
|
|
'schools' => $schoolsAffected,
|
|
],
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Handle the Student "deleted" event.
|
|
*/
|
|
public function deleted(Student $student): void
|
|
{
|
|
$message = 'Deleted student #'.$student->id.' - '.$student->full_name().'<br>Grade: '.$student->grade.'<br>School: '.$student->school->name;
|
|
AuditLogEntry::create([
|
|
'user' => auth()->user()->email ?? 'none',
|
|
'ip_address' => request()->ip(),
|
|
'message' => $message,
|
|
'affected' => [
|
|
'students' => [$student->id],
|
|
'schools' => [$student->school_id],
|
|
],
|
|
]);
|
|
}
|
|
}
|