auditionadmin/app/Observers/StudentObserver.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],
],
]);
}
}