MIF_E31231594/routes/web.php

166 lines
13 KiB
PHP

<?php
use App\Http\Controllers\Admin\DashboardController as AdminDashboardController;
use App\Http\Controllers\Admin\DokumentasiController;
use App\Http\Controllers\Admin\KegiatanController;
use App\Http\Controllers\Admin\LaporanController;
use App\Http\Controllers\Admin\OrganisasiController as AdminOrganisasiController;
use App\Http\Controllers\Admin\ProfilController as AdminProfilController;
use App\Http\Controllers\Admin\UserController as AdminUserController;
use App\Http\Controllers\Admin\ValidasiController;
use App\Http\Controllers\Admin\AbsensiEkskulController as AdminAbsensiEkskulController;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\HomeController;
use App\Http\Controllers\Ketua\DashboardController as KetuaDashboardController;
use App\Http\Controllers\Ketua\DokumentasiController as KetuaDokumentasiController;
use App\Http\Controllers\Ketua\JadwalController as KetuaJadwalController;
use App\Http\Controllers\Ketua\LaporanController as KetuaLaporanController;
use App\Http\Controllers\Ketua\ProfilController as KetuaProfilController;
use App\Http\Controllers\Ketua\OrganisasiController as KetuaOrganisasiController;
use App\Http\Controllers\Ketua\KegiatanController as KetuaKegiatanController;
use App\Http\Controllers\Ketua\AnggotaController as KetuaAnggotaController;
use App\Http\Controllers\NotificationController;
use App\Http\Controllers\Pembina\DashboardController as PembinaDashboardController;
use App\Http\Controllers\Pembina\DokumentasiController as PembinaDokumentasiController;
use App\Http\Controllers\Pembina\JadwalController as PembinaJadwalController;
use App\Http\Controllers\Pembina\KegiatanController as PembinaKegiatanController;
use App\Http\Controllers\Pembina\LaporanController as PembinaLaporanController;
use App\Http\Controllers\Pembina\OrganisasiController as PembinaOrganisasiController;
use App\Http\Controllers\Pembina\ProfilController as PembinaProfilController;
use App\Http\Controllers\Pembina\ValidasiController as PembinaValidasiController;
use App\Http\Controllers\Pembina\AbsensiEkskulController as PembinaAbsensiEkskulController;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Storage;
Route::get('/', HomeController::class)->name('home');
Route::middleware('guest')->group(function (): void {
Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login');
Route::post('/login', [AuthController::class, 'login'])->name('login.attempt');
Route::get('/register', [AuthController::class, 'showRegisterForm'])->name('register');
Route::post('/register', [AuthController::class, 'register'])->name('register.store');
});
Route::post('/logout', [AuthController::class, 'logout'])
->middleware('auth')
->name('logout');
Route::middleware('auth')->group(function (): void {
Route::get('/dashboard', [AuthController::class, 'redirectDashboard'])->name('dashboard.redirect');
Route::post('/notifications/read-all', [NotificationController::class, 'readAll'])->name('notifications.read-all');
Route::post('/notifications/{notificationId}/read', [NotificationController::class, 'readOne'])->name('notifications.read-one');
Route::get('/proposal/{kegiatan}/download', function (\App\Models\Kegiatan $kegiatan) {
$path = $kegiatan->proposal;
if (! $path || ! Storage::disk('public')->exists($path)) {
abort(404);
}
$fullPath = Storage::disk('public')->path($path);
return response()->file($fullPath);
})->name('proposal.download');
});
Route::middleware(['auth', 'role:admin'])->group(function (): void {
Route::get('/admin/dashboard', AdminDashboardController::class)->name('admin.dashboard');
Route::get('/admin/profil', AdminProfilController::class)->name('admin.profil');
Route::put('/admin/profil', [AdminProfilController::class, 'update'])->name('admin.profil.update');
Route::get('/admin/users', AdminUserController::class)->name('admin.users');
Route::post('/admin/users', [AdminUserController::class, 'store'])->name('admin.users.store');
Route::put('/admin/users/{user}', [AdminUserController::class, 'update'])->name('admin.users.update');
Route::delete('/admin/users/{user}', [AdminUserController::class, 'destroy'])->name('admin.users.destroy');
Route::get('/admin/organisasi', AdminOrganisasiController::class)->name('admin.organisasi');
Route::post('/admin/organisasi', [AdminOrganisasiController::class, 'store'])->name('admin.organisasi.store');
Route::put('/admin/organisasi/{organisasi}', [AdminOrganisasiController::class, 'update'])->name('admin.organisasi.update');
Route::delete('/admin/organisasi/{organisasi}', [AdminOrganisasiController::class, 'destroy'])->name('admin.organisasi.destroy');
Route::get('/admin/kegiatan', KegiatanController::class)->name('admin.kegiatan');
Route::post('/admin/kegiatan', [KegiatanController::class, 'store'])->name('admin.kegiatan.store');
Route::put('/admin/kegiatan/{kegiatan}', [KegiatanController::class, 'update'])->name('admin.kegiatan.update');
Route::delete('/admin/kegiatan/{kegiatan}', [KegiatanController::class, 'destroy'])->name('admin.kegiatan.destroy');
Route::get('/admin/validasi', ValidasiController::class)->name('admin.validasi');
Route::post('/admin/validasi/{kegiatan}/approve', [ValidasiController::class, 'approve'])->name('admin.validasi.approve');
Route::post('/admin/validasi/{kegiatan}/reject', [ValidasiController::class, 'reject'])->name('admin.validasi.reject');
Route::get('/admin/dokumentasi', DokumentasiController::class)->name('admin.dokumentasi');
Route::post('/admin/dokumentasi', [DokumentasiController::class, 'store'])->name('admin.dokumentasi.store');
Route::put('/admin/dokumentasi/{dokumentasi}', [DokumentasiController::class, 'update'])->name('admin.dokumentasi.update');
Route::delete('/admin/dokumentasi/{dokumentasi}', [DokumentasiController::class, 'destroy'])->name('admin.dokumentasi.destroy');
Route::get('/admin/laporan', LaporanController::class)->name('admin.laporan');
Route::post('/admin/laporan', [LaporanController::class, 'store'])->name('admin.laporan.store');
Route::put('/admin/laporan/{laporan}', [LaporanController::class, 'update'])->name('admin.laporan.update');
Route::delete('/admin/laporan/{laporan}', [LaporanController::class, 'destroy'])->name('admin.laporan.destroy');
Route::get('/admin/laporan/export-pdf', [LaporanController::class, 'exportPdf'])->name('admin.laporan.export-pdf');
Route::get('/admin/laporan/{laporan}/download', [LaporanController::class, 'download'])->name('admin.laporan.download');
// Absensi Ekstrakurikuler
Route::get('/admin/absensi-ekskul', AdminAbsensiEkskulController::class)->name('admin.absensi-ekskul');
Route::get('/admin/absensi-ekskul/{organisasi}', [AdminAbsensiEkskulController::class, 'show'])->name('admin.absensi-ekskul.show');
Route::get('/admin/absensi-ekskul/{organisasi}/detail/{pertemuan}', [AdminAbsensiEkskulController::class, 'detail'])->name('admin.absensi-ekskul.detail');
Route::get('/admin/absensi-ekskul/{organisasi}/export-pdf', [AdminAbsensiEkskulController::class, 'exportPdf'])->name('admin.absensi-ekskul.export-pdf');
Route::get('/admin/absensi-ekskul/{organisasi}/pertemuan/{pertemuan}/export-pdf', [AdminAbsensiEkskulController::class, 'exportPertemuanPdf'])->name('admin.absensi-ekskul.export-pertemuan-pdf');
});
Route::middleware(['auth', 'role:ketua'])->group(function (): void {
Route::get('/ketua/dashboard', KetuaDashboardController::class)->name('ketua.dashboard');
Route::get('/ketua/profil', KetuaProfilController::class)->name('ketua.profil');
Route::put('/ketua/profil', [KetuaProfilController::class, 'update'])->name('ketua.profil.update');
Route::get('/ketua/organisasi', KetuaOrganisasiController::class)->name('ketua.organisasi');
Route::get('/ketua/kegiatan', KetuaKegiatanController::class)->name('ketua.kegiatan');
Route::post('/ketua/kegiatan', [KetuaKegiatanController::class, 'store'])->name('ketua.kegiatan.store');
Route::put('/ketua/kegiatan/{kegiatan}', [KetuaKegiatanController::class, 'update'])->name('ketua.kegiatan.update');
Route::delete('/ketua/kegiatan/{kegiatan}', [KetuaKegiatanController::class, 'destroy'])->name('ketua.kegiatan.destroy');
Route::get('/ketua/jadwal', KetuaJadwalController::class)->name('ketua.jadwal');
Route::get('/ketua/dokumentasi', KetuaDokumentasiController::class)->name('ketua.dokumentasi');
Route::post('/ketua/dokumentasi', [KetuaDokumentasiController::class, 'store'])->name('ketua.dokumentasi.store');
Route::put('/ketua/dokumentasi/{dokumentasi}', [KetuaDokumentasiController::class, 'update'])->name('ketua.dokumentasi.update');
Route::delete('/ketua/dokumentasi/{dokumentasi}', [KetuaDokumentasiController::class, 'destroy'])->name('ketua.dokumentasi.destroy');
Route::get('/ketua/laporan', KetuaLaporanController::class)->name('ketua.laporan');
Route::post('/ketua/laporan', [KetuaLaporanController::class, 'store'])->name('ketua.laporan.store');
Route::put('/ketua/laporan/{laporan}', [KetuaLaporanController::class, 'update'])->name('ketua.laporan.update');
Route::delete('/ketua/laporan/{laporan}', [KetuaLaporanController::class, 'destroy'])->name('ketua.laporan.destroy');
Route::get('/ketua/laporan/{laporan}/download', [KetuaLaporanController::class, 'download'])->name('ketua.laporan.download');
// Anggota Ekstrakurikuler
Route::get('/ketua/anggota', KetuaAnggotaController::class)->name('ketua.anggota');
Route::post('/ketua/anggota', [KetuaAnggotaController::class, 'store'])->name('ketua.anggota.store');
Route::put('/ketua/anggota/{anggota}', [KetuaAnggotaController::class, 'update'])->name('ketua.anggota.update');
Route::delete('/ketua/anggota/{anggota}', [KetuaAnggotaController::class, 'destroy'])->name('ketua.anggota.destroy');
});
Route::middleware(['auth', 'role:pembina'])->group(function (): void {
Route::get('/pembina/dashboard', PembinaDashboardController::class)->name('pembina.dashboard');
Route::get('/pembina/profil', PembinaProfilController::class)->name('pembina.profil');
Route::put('/pembina/profil', [PembinaProfilController::class, 'update'])->name('pembina.profil.update');
Route::get('/pembina/organisasi', PembinaOrganisasiController::class)->name('pembina.organisasi');
Route::get('/pembina/kegiatan', PembinaKegiatanController::class)->name('pembina.kegiatan');
Route::get('/pembina/kegiatan/{kegiatan}', [PembinaKegiatanController::class, 'show'])->name('pembina.kegiatan.show');
Route::get('/pembina/validasi', PembinaValidasiController::class)->name('pembina.validasi');
Route::post('/pembina/validasi/{kegiatan}/approve', [PembinaValidasiController::class, 'approve'])->name('pembina.validasi.approve');
Route::post('/pembina/validasi/{kegiatan}/reject', [PembinaValidasiController::class, 'reject'])->name('pembina.validasi.reject');
Route::get('/pembina/jadwal', PembinaJadwalController::class)->name('pembina.jadwal');
Route::get('/pembina/dokumentasi', PembinaDokumentasiController::class)->name('pembina.dokumentasi');
Route::post('/pembina/dokumentasi', [PembinaDokumentasiController::class, 'store'])->name('pembina.dokumentasi.store');
Route::put('/pembina/dokumentasi/{dokumentasi}', [PembinaDokumentasiController::class, 'update'])->name('pembina.dokumentasi.update');
Route::delete('/pembina/dokumentasi/{dokumentasi}', [PembinaDokumentasiController::class, 'destroy'])->name('pembina.dokumentasi.destroy');
Route::get('/pembina/laporan', PembinaLaporanController::class)->name('pembina.laporan');
Route::get('/pembina/laporan/{laporan}/download', [PembinaLaporanController::class, 'download'])->name('pembina.laporan.download');
Route::post('/pembina/laporan/{laporan}/approve', [PembinaLaporanController::class, 'approve'])->name('pembina.laporan.approve');
Route::post('/pembina/laporan/{laporan}/reject', [PembinaLaporanController::class, 'reject'])->name('pembina.laporan.reject');
// Absensi Ekstrakurikuler
Route::get('/pembina/absensi-ekskul', PembinaAbsensiEkskulController::class)->name('pembina.absensi-ekskul');
Route::get('/pembina/absensi-ekskul/create', [PembinaAbsensiEkskulController::class, 'create'])->name('pembina.absensi-ekskul.create');
Route::post('/pembina/absensi-ekskul', [PembinaAbsensiEkskulController::class, 'store'])->name('pembina.absensi-ekskul.store');
Route::get('/pembina/absensi-ekskul/rekap', [PembinaAbsensiEkskulController::class, 'rekap'])->name('pembina.absensi-ekskul.rekap');
Route::get('/pembina/absensi-ekskul/{pertemuan}', [PembinaAbsensiEkskulController::class, 'show'])->name('pembina.absensi-ekskul.show');
Route::get('/pembina/absensi-ekskul/{pertemuan}/edit', [PembinaAbsensiEkskulController::class, 'edit'])->name('pembina.absensi-ekskul.edit');
Route::put('/pembina/absensi-ekskul/{pertemuan}', [PembinaAbsensiEkskulController::class, 'update'])->name('pembina.absensi-ekskul.update');
Route::delete('/pembina/absensi-ekskul/{pertemuan}', [PembinaAbsensiEkskulController::class, 'destroy'])->name('pembina.absensi-ekskul.destroy');
});