auditionadmin/app/Observers/UserObserver.php

114 lines
4.0 KiB
PHP

<?php
namespace App\Observers;
use App\Models\School;
use App\Models\User;
class UserObserver
{
public function created(User $user): void
{
$message = 'Added User '.$user->full_name();
if ($user->school_id) {
$message .= '<br>School: '.$user->school->name;
}
$message .= '<br>Email: '.$user->email;
$message .= '<br>Phone: '.$user->cell_phone;
$message .= '<br>Judging Pref: '.$user->judging_preference;
$message .= '<br>Admin Privileges: '.$user->is_admin ? 'Yes' : 'No';
$message .= '<br>Tabulator Privileges: '.$user->is_tab ? 'Yes' : 'No';
$affected = ['users' => [$user->id]];
auditionLog($message, $affected);
}
public function updated(User $user): void
{
if ($user->isDirty('password')) {
$message = 'Changed password for User '.$user->full_name().' <'.$user->getOriginal('email').'>';
$affected = ['users' => [$user->id]];
auditionLog($message, $affected);
if (array_keys($user->getDirty()) === ['password']) {
return;
}
}
if ($user->isDirty('email_verified_at')) {
$message = 'User '.$user->full_name().' <'.$user->getOriginal('email').' >'.' verified their email address';
$affected = ['users' => [$user->id]];
auditionLog($message, $affected);
if (array_keys($user->getDirty()) === ['email_verified_at']) {
return;
}
}
if ($user->isDirty('school_id')) {
$oldSchool = $user->getOriginal('school_id') ? School::find($user->getOriginal('school_id'))->name : null;
$newSchool = $user->school_id ? School::find($user->school_id)->name : null;
//Log if we removed a school
if ($oldSchool && ! $newSchool) {
$message = 'Removed '.$user->full_name().' from '.$oldSchool;
$affected = ['users' => [$user->id], 'schools' => [$user->getOrigianl('school_id')]];
auditionLog($message, $affected);
}
// Log if we added a school
if ($newSchool && ! $oldSchool) {
$message = 'Added '.$user->full_name().' to '.$newSchool;
$affected = ['users' => [$user->id], 'schools' => [$user->school_id]];
auditionLog($message, $affected);
}
// Log if we changed schools
if ($oldSchool && $newSchool) {
$message = 'Changed school for '.$user->full_name().' from '.$oldSchool.' to '.$newSchool;
$affected = ['users' => [$user->id], 'schools' => [$user->getOriginal('school_id'), $user->school_id]];
auditionLog($message, $affected);
}
if (array_keys($user->getDirty()) === ['school_id']) {
return;
}
}
$message = 'Updated User '.$user->full_name().'< '.$user->getOriginal('email').' >';
if ($user->isDirty('school_id') && $user->school_id) {
$user->refresh();
$message .= '<br>School: '.$user->school->name;
}
if ($user->isDirty('email')) {
$message .= '<br>Email: '.$user->email;
}
if ($user->isDirty('cell_phone')) {
$message .= '<br>Phone: '.$user->cell_phone;
}
if ($user->isDirty('judging_preference')) {
$message .= '<br>Judging Pref: '.$user->judging_preference;
}
if ($user->isDirty('is_admin')) {
$message .= '<br>Admin Privileges: '.($user->is_admin ? 'Yes' : 'No');
}
if ($user->isDirty('is_tab')) {
$message .= '<br>Tabulator Privileges: '.($user->is_tab ? 'Yes' : 'No');
}
$affected = ['users' => [$user->id]];
auditionLog($message, $affected);
}
public function deleted(User $user): void
{
$message = 'Removed User '.$user->full_name().' <'.$user->email.' >';
$affected = ['users' => [$user->id]];
auditionLog($message, $affected);
}
}