diff --git a/app/Http/Controllers/Admin/ChallengeController.php b/app/Http/Controllers/Admin/ChallengeController.php index e8504fe..b93ad44 100644 --- a/app/Http/Controllers/Admin/ChallengeController.php +++ b/app/Http/Controllers/Admin/ChallengeController.php @@ -6,7 +6,10 @@ use Illuminate\Http\Request; use App\Models\Challenge; use App\Models\Kelas; +use App\Models\SoalChallenge; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; + class ChallengeController extends Controller { @@ -22,59 +25,49 @@ public function create() return view('admin.challenge.create'); } - public function store(Request $request) +public function store(Request $request) { $request->validate([ 'judul_challenge' => 'required', 'exp' => 'required|integer|min:1', 'tenggat_waktu' => 'required|date', - 'kelas' => 'required|array' + 'kelas' => 'required|array', + 'pertanyaan' => 'required|array|min:1' ]); - $challenge = Challenge::create([ - 'id_admin' => auth('admin')->id(), - 'judul_challenge' => $request->judul_challenge, - 'deskripsi' => $request->deskripsi, - 'exp' => $request->exp, - 'tenggat_waktu' => $request->tenggat_waktu, - ]); + DB::transaction(function () use ($request) { - // attach kelas - $challenge->kelas()->attach($request->kelas); - - return redirect()->route('admin.challenge.soal.create', $challenge->id_challenge); - } - - public function createSoal($id) - { - $challenge = Challenge::findOrFail($id); - return view('admin.challenge.soal', compact('challenge')); - } - - public function storeSoal(Request $request, $id) - { - $challenge = Challenge::findOrFail($id); - - $jumlahSoal = count($request->pertanyaan); - $expPerSoal = floor($challenge->exp / $jumlahSoal); - - foreach ($request->pertanyaan as $key => $pertanyaan) { - SoalChallenge::create([ - 'id_challenge' => $id, - 'pertanyaan' => $pertanyaan, - 'opsi_a' => $request->opsi_a[$key], - 'opsi_b' => $request->opsi_b[$key], - 'opsi_c' => $request->opsi_c[$key], - 'opsi_d' => $request->opsi_d[$key], - 'jawaban_benar' => $request->jawaban_benar[$key], - 'exp_per_soal' => $expPerSoal, + $challenge = Challenge::create([ + 'id_admin' => auth('admin')->id(), + 'judul_challenge' => $request->judul_challenge, + 'deskripsi' => $request->deskripsi, + 'exp' => $request->exp, + 'tenggat_waktu' => $request->tenggat_waktu, ]); - } + + $challenge->kelas()->attach($request->kelas); + + $jumlahSoal = count($request->pertanyaan); + $expPerSoal = floor($request->exp / $jumlahSoal); + + foreach ($request->pertanyaan as $i => $pertanyaan) { + SoalChallenge::create([ + 'id_challenge' => $challenge->id_challenge, + 'pertanyaan' => $pertanyaan, + 'opsi_a' => $request->opsi_a[$i], + 'opsi_b' => $request->opsi_b[$i], + 'opsi_c' => $request->opsi_c[$i], + 'opsi_d' => $request->opsi_d[$i], + 'jawaban_benar' => $request->jawaban_benar[$i], + 'exp_per_soal' => $expPerSoal, + ]); + } + + }); return redirect()->route('admin.challenge.index') ->with('success', 'Challenge & soal berhasil dibuat!'); - } - +} public function edit($id) { diff --git a/app/Models/SoalChallenge.php b/app/Models/SoalChallenge.php new file mode 100644 index 0000000..0a33ca2 --- /dev/null +++ b/app/Models/SoalChallenge.php @@ -0,0 +1,22 @@ + - -
- - - @foreach($kelass as $kelas) -
- - - -
- @endforeach -
- - @@ -266,17 +302,74 @@ -@endsection +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 51e83b5..ec420ba 100644 --- a/routes/web.php +++ b/routes/web.php @@ -102,18 +102,10 @@ ->only(['index']); Route::resource('challenge', AdminChallengeController::class); - Route::get('challenge/{id}/soal', - [AdminChallengeController::class, 'createSoal'] - )->name('challenge.soal.create'); - - Route::post('challenge/{id}/soal', - [AdminChallengeController::class, 'storeSoal'] - )->name('challenge.soal.store'); - // LOGOUT ADMIN Route::post('/logout', [LoginController::class, 'logout']) ->name('logout'); -}); + }); // =======================================================