MIF_E31230356/app/Http/Controllers/Admin/ChallengeController.php

102 lines
2.9 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
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
{
public function index()
{
$challenges = Challenge::latest()->get();
$kelass = Kelas::all();
return view('admin.challenge.index', compact('challenges', 'kelass'));
}
public function create()
{
return view('admin.challenge.create');
}
public function store(Request $request)
{
$request->validate([
'judul_challenge' => 'required',
'exp' => 'required|integer|min:1',
'tenggat_waktu' => 'required|date',
'kelas' => 'required|array',
'pertanyaan' => 'required|array|min:1'
]);
DB::transaction(function () use ($request) {
$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)
{
$challenge = Challenge::findOrFail($id);
return view('admin.challenge.edit', compact('challenge'));
}
public function update(Request $request, $id)
{
$challenge = Challenge::findOrFail($id);
$challenge->update([
'judul_challenge' => $request->judul_challenge,
'deskripsi' => $request->deskripsi,
'exp' => $request->exp,
'tenggat_waktu' => $request->tenggat_waktu,
]);
return redirect()->route('admin.challenge.index')
->with('success', 'Challenge berhasil diupdate!');
}
public function destroy($id)
{
$challenge = Challenge::findOrFail($id);
$challenge->delete();
return redirect()->route('admin.challenge.index')
->with('success', 'Challenge berhasil dihapus!');
}
}