From 9f71e5e3f588b0bfb1ebc39202146bc64bfb1ba4 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Sat, 10 Aug 2024 20:23:14 -0500 Subject: [PATCH] Administrators can make a user head director from school page Work on #64 --- app/Http/Controllers/Admin/SchoolController.php | 12 ++++++++++++ resources/views/admin/schools/show.blade.php | 11 ++++++++++- routes/admin.php | 1 + tests/Feature/Pages/Admin/UsersEditTest.php | 5 +++-- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Admin/SchoolController.php b/app/Http/Controllers/Admin/SchoolController.php index 702b602..a224006 100644 --- a/app/Http/Controllers/Admin/SchoolController.php +++ b/app/Http/Controllers/Admin/SchoolController.php @@ -2,10 +2,12 @@ namespace App\Http\Controllers\Admin; +use App\Actions\Schools\SetHeadDirector; use App\Http\Controllers\Controller; use App\Models\AuditLogEntry; use App\Models\School; use App\Models\SchoolEmailDomain; +use App\Models\User; use App\Services\Invoice\InvoiceDataService; use Illuminate\Support\Facades\Auth; @@ -176,4 +178,14 @@ class SchoolController extends Controller return view('dashboard.invoice', compact('school', 'invoiceData')); } + + public function setHeadDirector(School $school, User $user, SetHeadDirector $headSetter) + { + if ($user->school_id !== $school->id) { + return redirect()->back()->with('error', 'That user is not at that school'); + } + $headSetter->setHeadDirector($user); + + return redirect()->back()->with('success', 'Head director set'); + } } diff --git a/resources/views/admin/schools/show.blade.php b/resources/views/admin/schools/show.blade.php index 8f1b7e0..6ae3d6f 100644 --- a/resources/views/admin/schools/show.blade.php +++ b/resources/views/admin/schools/show.blade.php @@ -37,7 +37,16 @@
@foreach($school->directors as $director) - {{ $director->full_name() }} + + {{ $director->full_name() }} + @if($director->hasFlag('head_director')) + Head Director + @else + + [ Make Head Director ] + + @endif +

{{ $director->cell_phone }}

diff --git a/routes/admin.php b/routes/admin.php index 11529cb..87de676 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -150,6 +150,7 @@ Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('admin/')-> Route::post('/', 'store')->name('admin.schools.store'); Route::delete('/domain/{domain}', 'destroy_domain')->name('admin.schools.destroy_domain'); Route::delete('/{school}', 'destroy')->name('admin.schools.destroy'); + Route::get('/{school}/set_head_director/{user}', 'setHeadDirector')->name('admin.schools.set_head_director'); }); diff --git a/tests/Feature/Pages/Admin/UsersEditTest.php b/tests/Feature/Pages/Admin/UsersEditTest.php index 260a368..3c36588 100644 --- a/tests/Feature/Pages/Admin/UsersEditTest.php +++ b/tests/Feature/Pages/Admin/UsersEditTest.php @@ -7,6 +7,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use function Pest\Laravel\actingAs; use function Pest\Laravel\assertDatabaseHas; use function Pest\Laravel\delete; +use function Pest\Laravel\from; use function Pest\Laravel\get; use function Pest\Laravel\patch; @@ -150,7 +151,7 @@ it('allows an administrator to modify a user', function () { 'school_id' => $newSchool->id, ]; // Act - $response = patch(route('admin.users.update', $this->users[0]), $newData); + $response = from(route('admin.users.index'))->patch(route('admin.users.update', $this->users[0]), $newData); /** @noinspection PhpUnhandledExceptionInspection */ $response ->assertSessionHasNoErrors() @@ -186,7 +187,7 @@ it('allows a users school to be set to no school', function () { ]; actAsAdmin(); // Act & Assert - $response = patch(route('admin.users.update', $user), $newData); + $response = from(route('admin.users.index'))->patch(route('admin.users.update', $user), $newData); /** @noinspection PhpUnhandledExceptionInspection */ $response ->assertSessionHasNoErrors()