diff --git a/app/Http/Middleware/IsAdmin.php b/app/Http/Middleware/IsAdmin.php new file mode 100644 index 0000000..dc6130f --- /dev/null +++ b/app/Http/Middleware/IsAdmin.php @@ -0,0 +1,44 @@ +auth = $auth; + } + + /** + * Handle an incoming request. + * + * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next + */ + public function handle(Request $request, Closure $next): Response + { + if (!$this->auth->user()->is_admin) { + session()->flash('error_msg', 'This resource is restricted to Administrators!'); + return redirect()->route('home'); + } + + return $next($request); + } +} diff --git a/app/Livewire/ApplicationList.php b/app/Livewire/ApplicationList.php new file mode 100644 index 0000000..8c1f9e0 --- /dev/null +++ b/app/Livewire/ApplicationList.php @@ -0,0 +1,39 @@ +resetPage(); + } + + public function approveApplication($uuid) + { + Application::where('uuid', $uuid)->update(['status' => 1]); + } + + public function rejectApplication($uuid) + { + Application::where('uuid', $uuid)->update(['status' => 2]); + } + + public function render() + { + $applications = Application::with('uploads') + ->when($this->hideApproved !== false, fn($query) => $query->where('status', 0)) + ->latest() + ->paginate(10); + + return view('livewire.application-list', compact('applications')); + } +} diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php index 05fb5d9..bd49b20 100644 --- a/database/migrations/0001_01_01_000000_create_users_table.php +++ b/database/migrations/0001_01_01_000000_create_users_table.php @@ -17,6 +17,7 @@ return new class extends Migration $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); + $table->boolean('is_admin')->default(false); $table->rememberToken(); $table->timestamps(); }); diff --git a/resources/views/components/layouts/app/sidebar.blade.php b/resources/views/components/layouts/app/sidebar.blade.php index e48f59d..781550e 100644 --- a/resources/views/components/layouts/app/sidebar.blade.php +++ b/resources/views/components/layouts/app/sidebar.blade.php @@ -7,28 +7,14 @@ - - - - - {{ __('Dashboard') }} + {{ __('Applications') }} - - - {{ __('Repository') }} - - - - {{ __('Documentation') }} - - - -
-
-
- -
-
- -
-
- -
-
-
- -
-
+ @livewire('application-list') diff --git a/resources/views/livewire/application-form.blade.php b/resources/views/livewire/application-form.blade.php index 767dab3..1e76bac 100644 --- a/resources/views/livewire/application-form.blade.php +++ b/resources/views/livewire/application-form.blade.php @@ -5,7 +5,7 @@ Your application has been submitted You can check its status here: View Application Status + href="{{ route('application', ['uuid' => $applicationUuid]) }}">View Application Status diff --git a/resources/views/livewire/application-list.blade.php b/resources/views/livewire/application-list.blade.php new file mode 100644 index 0000000..ee04472 --- /dev/null +++ b/resources/views/livewire/application-list.blade.php @@ -0,0 +1,69 @@ +
+
+

Application Management

+ +
+ +
+ + + + + + + + + + + + + @forelse ($applications as $app) + + + + + + + + @empty + + + + @endforelse + +
UUIDStatusUploadsSubmittedActions
{{ $app->uuid }} + @if ($app->status === 0) + Pending + @elseif ($app->status === 1) + Approved + @elseif ($app->status === 2) + Denied + @endif + {{ $app->uploads->count() }}{{ $app->created_at->diffForHumans() }} + + View + + + @if ($app->status === 0) + + Approve + + + Reject + + @endif + +
No applications found.
+ +
+ {{ $applications->links() }} +
+
+ +
diff --git a/resources/views/livewire/application-status.blade.php b/resources/views/livewire/application-status.blade.php index cf59043..367064f 100644 --- a/resources/views/livewire/application-status.blade.php +++ b/resources/views/livewire/application-status.blade.php @@ -1,34 +1,41 @@
-
-
- Application Status - @php - $status = [ - 0 => 'Pending Review', - 1 => 'Approved', - 2 => 'Denied', - ]; - @endphp - -

- Status: - {{ $status[$application->status] }} -

-

- Created: - {{ Carbon\Carbon::parse($application->created_at)->diffForHumans(['parts' => 2]) }} -

-
-
+
+ @if ($application->status === 0) +
+ @elseif ($application->status === 1) +
+ @elseif ($application->status === 2) +
+ @endif -

Uploaded Photos:

-
- @foreach ($application->uploads as $upload) -
- -
- @endforeach -
+ Application Status + @php + $status = [ + 0 => 'Pending Review', + 1 => 'Approved', + 2 => 'Denied', + ]; + @endphp + +

+ Status: + {{ $status[$application->status] }} +

+

+ Created: + {{ Carbon\Carbon::parse($application->created_at)->diffForHumans(['parts' => 2]) }} +

+
+
+ +

Uploaded Photos:

+
+ @foreach ($application->uploads as $upload) +
+ +
+ @endforeach
+
diff --git a/routes/web.php b/routes/web.php index 0c91538..bfe22e7 100644 --- a/routes/web.php +++ b/routes/web.php @@ -9,7 +9,7 @@ Route::get('/', App\Livewire\ApplicationForm::class)->name('home'); Route::get('/application-status/{uuid}', App\Livewire\ApplicationStatus::class)->name('application'); Route::view('dashboard', 'dashboard') - ->middleware(['auth', 'verified']) + ->middleware(['auth', 'verified', App\Http\Middleware\IsAdmin::class]) ->name('dashboard'); Route::middleware(['auth'])->group(function () {