299 lines
16 KiB
PHP
299 lines
16 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\ProfileController;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
// admin
|
|
use App\Http\Controllers\Admin\GuruController;
|
|
use App\Http\Controllers\Admin\SiswaController;
|
|
use App\Http\Controllers\Admin\KelasController;
|
|
use App\Http\Controllers\Admin\MapelController;
|
|
use App\Http\Controllers\Admin\GuruMapelController;
|
|
use App\Http\Controllers\Admin\UserManagementController;
|
|
use App\Http\Controllers\Admin\InfoAngketController;
|
|
use App\Http\Controllers\Admin\ProdiLanjutanController;
|
|
use App\Http\Controllers\Admin\HasilAngketController;
|
|
use App\Http\Controllers\Admin\KelasMapelController;
|
|
use App\Http\Controllers\Admin\TahunAjaranController;
|
|
use App\Http\Controllers\Admin\AdminProfileController;
|
|
|
|
// guru
|
|
use App\Http\Controllers\Guru\ProfileController as GuruProfileController;
|
|
use App\Http\Controllers\Guru\PelajaranController;
|
|
use App\Http\Controllers\Guru\MateriController;
|
|
use App\Http\Controllers\Guru\UjianController;
|
|
use App\Http\Controllers\Guru\SoalPilganController;
|
|
use App\Http\Controllers\Guru\SoalEssayController;
|
|
use App\Http\Controllers\Guru\TugasController;
|
|
use App\Http\Controllers\Guru\NilaiEssayController;
|
|
use App\Http\Controllers\Guru\EvaluasiController;
|
|
|
|
|
|
// siswa
|
|
use App\Http\Controllers\Siswa\ProfileSiswaController;
|
|
use App\Http\Controllers\Siswa\ModulController;
|
|
use App\Http\Controllers\Siswa\SubjekController;
|
|
use App\Http\Controllers\Siswa\TugasSiswaController;
|
|
use App\Http\Controllers\Siswa\UjianSiswaController;
|
|
use App\Http\Controllers\Siswa\DashboardSiswaController;
|
|
use App\Http\Controllers\Siswa\EvaluasiSiswaController;
|
|
use App\Http\Controllers\Siswa\AngketController;
|
|
|
|
use Illuminate\Support\Facades\Mail;
|
|
|
|
Route::get('/kirim-email', function () {
|
|
Mail::raw('Ini adalah email tes dari Laravel via SendGrid.', function ($message) {
|
|
$message->to('targetemail@example.com')
|
|
->subject('Tes Email SendGrid');
|
|
});
|
|
|
|
return 'Email terkirim (jika konfigurasi benar).';
|
|
});
|
|
Route::get('/', function () {
|
|
return redirect()->route('login');
|
|
});
|
|
|
|
Route::get('/dashboard', function () {
|
|
return redirect()->route('redirect-dashboard');
|
|
});
|
|
|
|
// Group middleware untuk semua route yang membutuhkan autentikasi
|
|
Route::middleware('auth')->group(function () {
|
|
|
|
// Profile management routes
|
|
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
|
|
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
|
|
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
|
|
|
|
// Route redirect berdasarkan role login
|
|
Route::get('/redirect-dashboard', function () {
|
|
$user = auth()->user();
|
|
|
|
if (!$user) {
|
|
return redirect('/login')->withErrors(['email' => 'Anda harus login terlebih dahulu.']);
|
|
}
|
|
|
|
if (!$user->is_active) {
|
|
auth()->logout();
|
|
return redirect('/login')->withErrors(['email' => 'Akun belum diaktifkan admin.']);
|
|
}
|
|
|
|
switch ($user->role) {
|
|
case 'admin':
|
|
return redirect()->route('admin.dashboard');
|
|
case 'guru':
|
|
return redirect()->route('guru.dashboard');
|
|
case 'siswa':
|
|
return redirect()->route('siswa.dashboard');
|
|
default:
|
|
return abort(403);
|
|
}
|
|
})->name('redirect-dashboard');
|
|
|
|
// Group route untuk admin
|
|
Route::middleware(['role:admin'])->prefix('admin')->name('admin.')->group(function () {
|
|
Route::get('/dashboard', [App\Http\Controllers\Admin\DashboardController::class, 'index'])->name('dashboard');
|
|
Route::get('profile', [AdminProfileController::class, 'edit'])->name('profile.edit');
|
|
Route::put('profile', [AdminProfileController::class, 'update'])->name('profile.update');
|
|
Route::resource('guru', GuruController::class)->except(['show']);
|
|
Route::resource('mapel', MapelController::class);
|
|
Route::resource('kelas', KelasController::class);
|
|
Route::resource('tahun_ajaran', TahunAjaranController::class);
|
|
Route::resource('guru-mapel', GuruMapelController::class);
|
|
|
|
// Siswa
|
|
Route::get('/siswa/lulus', [SiswaController::class, 'siswaLulus'])->name('siswa.lulus');
|
|
Route::get('/siswa/create/{kelas_id?}', [SiswaController::class, 'create'])->name('siswa.create');
|
|
Route::post('/siswa/store', [SiswaController::class, 'store'])->name('siswa.store');
|
|
Route::get('/siswa', [SiswaController::class, 'index'])->name('siswa.index');
|
|
|
|
// Route dinamis yang bisa menangkap parameter apapun harus di bawah
|
|
Route::get('/siswa/{id}/edit', [SiswaController::class, 'edit'])->name('siswa.edit');
|
|
Route::put('/siswa/{id}', [SiswaController::class, 'update'])->name('siswa.update');
|
|
Route::delete('/siswa/{id}', [SiswaController::class, 'destroy'])->name('siswa.destroy');
|
|
Route::resource('/paket-mapel', \App\Http\Controllers\Admin\PaketMapelController::class)->names('paket-mapel');
|
|
// Route index
|
|
Route::get('/users', [UserManagementController::class, 'index'])->name('users.index');
|
|
|
|
// Edit user
|
|
Route::get('/users/{id}/edit', [UserManagementController::class, 'edit'])->name('users.edit');
|
|
|
|
// Update user
|
|
Route::put('/users/{id}', [UserManagementController::class, 'update'])->name('users.update');
|
|
|
|
// Delete user
|
|
Route::delete('/users/{id}', [UserManagementController::class, 'destroy'])->name('users.destroy');
|
|
|
|
// Toggle aktif user
|
|
Route::patch('/users/{id}/toggle', [UserManagementController::class, 'toggleAktif'])->name('users.toggle');
|
|
|
|
Route::resource('kelas_mapel', KelasMapelController::class);
|
|
|
|
//angket
|
|
Route::get('/angket', [HasilAngketController::class, 'index'])->name('angket.index');
|
|
|
|
// CRUD Info
|
|
Route::resource('info', InfoAngketController::class)->except(['show']);
|
|
|
|
// CRUD Prodi Lanjutan
|
|
Route::resource('prodi-lanjutan', ProdiLanjutanController::class)->except(['show']);
|
|
|
|
|
|
// Edit hasil pemilihan siswa
|
|
Route::get('hasil-pemilihan', [HasilAngketController::class, 'index'])->name('hasil.index');
|
|
Route::get('hasil-pemilihan/{siswa}/edit', [HasilAngketController::class, 'edit'])->name('hasil.edit');
|
|
Route::put('hasil-pemilihan/{siswa}', [HasilAngketController::class, 'update'])->name('hasil.update');
|
|
Route::delete('hasil-pemilihan/{siswa}', [HasilAngketController::class, 'destroy'])->name('hasil.destroy');
|
|
Route::get('/hasil-angket/hitung', [HasilAngketController::class, 'hitung'])->name('h');
|
|
|
|
Route::post('/siswa/import', [SiswaController::class, 'import'])->name('siswa.import');
|
|
Route::get('/siswa/export', [SiswaController::class, 'export'])->name('siswa.export');
|
|
Route::get('guru/export', [GuruController::class, 'export'])->name('guru.export');
|
|
Route::post('guru/import', [GuruController::class, 'import'])->name('guru.import');
|
|
|
|
});
|
|
|
|
// Dashboard Guru
|
|
Route::middleware(['auth', 'role:guru'])->prefix('guru')->name('guru.')->group(function () {
|
|
//dashboard
|
|
Route::get('/dashboard', [App\Http\Controllers\Guru\DashboardGuruController::class, 'index'])->name('dashboard');
|
|
//profile
|
|
Route::get('/profile', [GuruProfileController::class, 'index'])->name('profile.index');
|
|
Route::get('/profile/edit', [GuruProfileController::class, 'edit'])->name('profile.edit');
|
|
Route::post('/profile', [GuruProfileController::class, 'update'])->name('profile.update');
|
|
|
|
Route::resource('materi', MateriController::class);
|
|
|
|
// Route tugas tanpa nested materi (akses tugas langsung via /guru/tugas)
|
|
Route::prefix('tugas')->name('tugas.')->group(function () {
|
|
Route::get('/grafik', [\App\Http\Controllers\Guru\TugasController::class, 'grafik'])->name('grafik');
|
|
Route::get('/', [TugasController::class, 'index'])->name('index'); // GET /guru/tugas
|
|
Route::get('create', [TugasController::class, 'create'])->name('create'); // GET /guru/tugas/create
|
|
Route::post('/', [TugasController::class, 'store'])->name('store'); // POST /guru/tugas
|
|
Route::get('{tugas}', [TugasController::class, 'show'])->name('show'); // GET /guru/tugas/{tugas}
|
|
Route::get('{tugas}/edit', [TugasController::class, 'edit'])->name('edit'); // GET /guru/tugas/{tugas}/edit
|
|
Route::put('{tugas}', [TugasController::class, 'update'])->name('update'); // PUT /guru/tugas/{tugas}
|
|
Route::delete('{tugas}', [TugasController::class, 'destroy'])->name('destroy'); // DELETE /guru/tugas/{tugas}
|
|
Route::get('show/{id}', [TugasController::class, 'show'])->name('guru.tugas.show');
|
|
// Penilaian tugas
|
|
Route::get('{tugas}/penilaian', [TugasController::class, 'penilaian'])->name('penilaian');
|
|
Route::put('penilaian/update-nilai/{id}', [TugasController::class, 'updateNilai'])->name('nilai.update'); });
|
|
|
|
|
|
|
|
|
|
// Route pelajaran dan materi (sesuai contoh)
|
|
Route::get('/pelajaran', [PelajaranController::class, 'index'])->name('pelajaran.index');
|
|
|
|
Route::get('materi/{id}/preview', [MateriController::class, 'preview'])->name('materi.preview');
|
|
Route::get('materi/{id}/edit-isi', [MateriController::class, 'editIsi'])->name('materi.editIsi');
|
|
Route::put('materi/{id}/update-isi', [MateriController::class, 'updateIsi'])->name('materi.updateIsi');
|
|
Route::post('materi/upload', [MateriController::class, 'upload'])->name('materi.upload');
|
|
//ujian
|
|
Route::resource('ujian', UjianController::class)->except(['show']);
|
|
Route::get('ujian/{ujian}/preview', [UjianController::class, 'preview'])->name('ujian.preview');
|
|
Route::patch('ujian/{ujian}/status', [UjianController::class, 'updateStatus'])->name('ujian.updateStatus');
|
|
Route::get('ujian/hasil', [UjianController::class, 'daftarHasil'])->name('ujian.hasil.index');
|
|
Route::get('ujian/{ujian}/hasil', [UjianController::class, 'hasil'])->name('ujian.hasil');
|
|
Route::get('ujian/{ujian}/detail', [UjianController::class, 'detail'])
|
|
->name('ujian.detail');
|
|
|
|
// Soal Essay
|
|
Route::prefix('ujian/{ujian}')->name('ujian.')->group(function () {
|
|
Route::get('soal-essay', [SoalEssayController::class, 'index'])->name('soal_essay');
|
|
Route::get('soal-essay/create', [SoalEssayController::class, 'create'])->name('soal_essay.create');
|
|
Route::post('soal-essay', [SoalEssayController::class, 'store'])->name('soal_essay.store');
|
|
Route::get('soal-essay/{soal}/edit', [SoalEssayController::class, 'edit'])->name('soal_essay.edit');
|
|
Route::put('soal-essay/{soal}', [SoalEssayController::class, 'update'])->name('soal_essay.update');
|
|
Route::delete('soal-essay/{soal}', [SoalEssayController::class, 'destroy'])->name('soal_essay.destroy');
|
|
});
|
|
Route::prefix('ujian/{ujian_id}/soal_pilgan')->name('ujian.soal_pg.')->group(function () {
|
|
Route::get('/export', [SoalPilganController::class, 'exportExcel'])->name('export');
|
|
Route::post('/import', [SoalPilganController::class, 'importExcel'])->name('import');
|
|
});
|
|
|
|
// Soal Pilihan Ganda
|
|
Route::prefix('ujian/{ujian}')->name('ujian.')->group(function () {
|
|
Route::get('soal-pg', [SoalPilganController::class, 'index'])->name('soal_pg');
|
|
Route::get('soal-pg/create', [SoalPilganController::class, 'create'])->name('soal_pg.create');
|
|
Route::post('soal-pg', [SoalPilganController::class, 'store'])->name('soal_pg.store');
|
|
Route::get('soal-pg/{soal}/edit', [SoalPilganController::class, 'edit'])->name('soal_pg.edit');
|
|
Route::put('soal-pg/{soal}', [SoalPilganController::class, 'update'])->name('soal_pg.update');
|
|
Route::delete('soal-pg/{soal}', [SoalPilganController::class, 'destroy'])->name('soal_pg.destroy');
|
|
});
|
|
Route::get('/hasil/{id}/nilai-essay', [NilaiEssayController::class, 'edit'])->name('nilai_essay.edit');
|
|
Route::put('/hasil/{id}/nilai-essay', [NilaiEssayController::class, 'update'])->name('nilai_essay.update');
|
|
Route::get('/ujian/grafik', [\App\Http\Controllers\Guru\UjianController::class, 'grafik'])->name('ujian.grafik');
|
|
|
|
Route::get('/penilaian', [App\Http\Controllers\Guru\TugasController::class, 'daftarPenilaian'])
|
|
->name('penilaian.index');
|
|
|
|
Route::get('tugas/{tugas}/penilaian', [TugasController::class, 'penilaian'])->name('tugas.penilaian');
|
|
Route::put('tugas/penilaian/update-nilai/{id}', [TugasController::class, 'updateNilai'])->name('tugas.nilai.update');
|
|
|
|
//evaluasi
|
|
Route::prefix('evaluasi')->middleware(['auth', 'role:guru'])->group(function () {
|
|
Route::get('/', [EvaluasiController::class, 'index'])->name('evaluasi.index');
|
|
Route::post('/simpan-bobot', [EvaluasiController::class, 'simpanBobot'])->name('evaluasi.simpanBobot');
|
|
Route::post('/hitung-nilai', [EvaluasiController::class, 'hitungNilaiTotal'])->name('evaluasi.hitungNilaiTotal');
|
|
|
|
// Tambahkan ini:
|
|
Route::post('/simpan-nilai-sikap', [EvaluasiController::class, 'simpanNilaiSikap'])->name('evaluasi.simpanNilaiSikap');
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
// Dashboard Siswa
|
|
Route::middleware(['role:siswa'])->group(function () {
|
|
//dashboard
|
|
Route::get('/siswa/dashboard', [DashboardSiswaController::class, 'index'])->name('siswa.dashboard');
|
|
//profile
|
|
Route::get('/siswa/profile', [ProfileSiswaController::class, 'index'])->name('siswa.profile.show');
|
|
Route::get('/siswa/profile/edit', [ProfileSiswaController::class, 'edit'])->name('siswa.profile.edit');
|
|
Route::put('/siswa/profile', [ProfileSiswaController::class, 'update'])->name('siswa.profile.update');
|
|
//pelajaran
|
|
Route::get('/siswa/pelajaran', [ModulController::class, 'index'])->name('siswa.pelajaran.index');
|
|
Route::get('/siswa/materi', [SubjekController::class, 'index'])->name('siswa.materi.index');
|
|
Route::get('/siswa/materi/{id}', [SubjekController::class, 'show'])->name('siswa.materi.show');
|
|
Route::get('/siswa/materi/{materi}/tugas', [TugasSiswaController::class, 'index'])->name('siswa.materi.tugas.index');
|
|
|
|
// Detail tugas di materi tertentu
|
|
Route::get('siswa/materi/{id}', [SubjekController::class, 'show'])->name('siswa.materi.show');
|
|
Route::post('siswa/materi/{materi}/tugas/{tugas}/jawaban', [TugasSiswaController::class, 'store'])->name('siswa.tugas.store');
|
|
// Kirim jawaban tugas
|
|
Route::post('siswa/materi/{materi}/tugas/{tugas}', [TugasSiswaController::class, 'store'])->name('siswa.materi.tugas.store');
|
|
//ujian
|
|
Route::prefix('siswa/ujian')->middleware(['auth'])->name('siswa.ujian.')->group(function () {
|
|
Route::get('/', [UjianSiswaController::class, 'index'])->name('index');
|
|
Route::get('/{id}/kerjakan', [UjianSiswaController::class, 'kerjakan'])->name('kerjakan');
|
|
Route::post('/{id}/submit', [UjianSiswaController::class, 'submit'])->name('submit');
|
|
Route::get('/{id}/hasil', [UjianSiswaController::class, 'hasil'])->name('hasil');
|
|
Route::get('/{id}', [UjianSiswaController::class, 'show'])->name('show'); // <-- paling bawah
|
|
});
|
|
Route::get('/nilai/tugas', [TugasSiswaController::class, 'nilaiTugas'])->name('siswa.nilai.tugas');
|
|
|
|
Route::get('siswa/nilai', [UjianSiswaController::class, 'evaluasi'])->name('siswa.nilai');
|
|
//angket
|
|
Route::prefix('siswa')->name('siswa.')->group(function () {
|
|
Route::get('/angket', [AngketController::class, 'index'])->name('angket.index');
|
|
Route::get('/angket/info', [AngketController::class, 'info'])->name('angket.info');
|
|
Route::get('/angket/pilih', [AngketController::class, 'create'])->name('angket.create');
|
|
Route::post('/angket', [AngketController::class, 'store'])->name('angket.store');
|
|
Route::get('/angket/hasil', [AngketController::class, 'hasil'])->name('angket.hasil');
|
|
});
|
|
|
|
|
|
//evaluasi
|
|
Route::get('siswa/evaluasi/mapel', [EvaluasiSiswaController::class, 'mapel'])->name('siswa.evaluasi.mapel');
|
|
Route::get('evaluasi/mapel/pdf', [EvaluasiSiswaController::class, 'exportPdf'])->name('evaluasi.mapel.pdf'); // ✅ ini penting
|
|
Route::get('siswa/evaluasi/mapel/{mapel}', [EvaluasiSiswaController::class, 'detailEvaluasi'])->name('siswa.evaluasi.detail');
|
|
|
|
});
|
|
|
|
}); // << Penutup group middleware(auth) — penting!
|
|
|
|
// Route auth bawaan Laravel Breeze/Fortify/etc.
|
|
require __DIR__.'/auth.php';
|