auditionadmin/app/Actions/Schools/SetHeadDirector.php

48 lines
1.2 KiB
PHP

<?php
namespace App\Actions\Schools;
use App\Exceptions\AuditionAdminException;
use App\Models\User;
use function auditionLog;
use function is_null;
class SetHeadDirector
{
public function __construct()
{
}
public function __invoke(User $user): void
{
$this->setHeadDirector($user);
}
/**
* @throws AuditionAdminException
*/
public function setHeadDirector(User $user): void
{
if (! User::where('id', $user->id)->exists()) {
throw new AuditionAdminException('User does not exist');
}
if ($user->hasFlag('head_director')) {
return;
}
if (is_null($user->school_id)) {
throw new AuditionAdminException('User is not associated with a school');
}
foreach ($user->school->directors as $director) {
$director->removeFlag('head_director');
}
$user->addFlag('head_director');
$logMessage = 'Set '.$user->full_name().' as head director at '.$user->school->name;
$logAffected = ['users' => [$user->id], 'schools' => [$user->school_id]];
auditionLog($logMessage, $logAffected);
}
}