190 lines
7.2 KiB
PHP
190 lines
7.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Guru;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Challenge;
|
|
use App\Models\SoalChallenge;
|
|
use App\Models\Kelas;
|
|
use App\Models\Badge;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class ChallengeController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$guru = Auth::guard('guru')->user();
|
|
|
|
$query = Challenge::with(['kelas', 'soal'])
|
|
->withCount('soal')
|
|
->where('id_guru', $guru->id_guru);
|
|
|
|
if ($request->filled('search')) {
|
|
$query->where('judul_challenge', 'like', '%' . $request->search . '%');
|
|
}
|
|
|
|
$challenges = $query->orderBy('created_at', 'desc')
|
|
->paginate(10)
|
|
->appends($request->all());
|
|
|
|
$kelas = Kelas::orderBy('tingkat')->orderBy('nama_kelas')->get();
|
|
$badges = Badge::all();
|
|
|
|
return view('guru.challenge.index', compact('challenges', 'kelas', 'badges'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'judul_challenge' => 'required|string|max:200',
|
|
'deskripsi' => 'nullable|string',
|
|
'tenggat_waktu' => 'required|date|after:now',
|
|
'durasi_pengerjaan' => 'required|integer|min:1|max:360',
|
|
'id_kelas' => 'required|array|min:1',
|
|
'id_kelas.*' => 'exists:kelas,id_kelas',
|
|
'pertanyaan' => 'required|array|min:1',
|
|
'pertanyaan.*' => 'required|string',
|
|
'opsi_a.*' => 'required|string',
|
|
'opsi_b.*' => 'required|string',
|
|
'opsi_c.*' => 'required|string',
|
|
'opsi_d.*' => 'required|string',
|
|
'jawaban_benar.*' => 'required|in:A,B,C,D',
|
|
], [
|
|
'tenggat_waktu.after' => 'Tenggat waktu harus lebih dari sekarang.',
|
|
'pertanyaan.required' => 'Minimal harus ada 1 soal.',
|
|
'id_kelas.required' => 'Pilih minimal 1 kelas.',
|
|
]);
|
|
|
|
DB::transaction(function () use ($request) {
|
|
$guru = Auth::guard('guru')->user();
|
|
|
|
$challenge = Challenge::create([
|
|
'id_guru' => $guru->id_guru,
|
|
'judul_challenge' => $request->judul_challenge,
|
|
'deskripsi' => $request->deskripsi,
|
|
'id_badge' => $request->id_badge,
|
|
'tenggat_waktu' => $request->tenggat_waktu,
|
|
'durasi_pengerjaan' => $request->durasi_pengerjaan,
|
|
]);
|
|
|
|
$challenge->kelas()->sync($request->id_kelas);
|
|
|
|
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],
|
|
]);
|
|
}
|
|
});
|
|
|
|
return redirect()->route('guru.challenge.index')
|
|
->with('success', 'Challenge berhasil dibuat!');
|
|
}
|
|
|
|
public function show($id)
|
|
{
|
|
$guru = Auth::guard('guru')->user();
|
|
$challenge = Challenge::with(['kelas', 'soal'])
|
|
->where('id_guru', $guru->id_guru)
|
|
->findOrFail($id);
|
|
|
|
return view('guru.challenge.show', compact('challenge'));
|
|
}
|
|
|
|
public function edit($id)
|
|
{
|
|
$guru = Auth::guard('guru')->user();
|
|
$challenge = Challenge::with(['kelas', 'soal'])
|
|
->where('id_guru', $guru->id_guru)
|
|
->findOrFail($id);
|
|
|
|
$kelas = Kelas::orderBy('tingkat')->orderBy('nama_kelas')->get();
|
|
$badges = Badge::all();
|
|
|
|
return view('guru.challenge.edit', compact('challenge', 'kelas', 'badges'));
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
$guru = Auth::guard('guru')->user();
|
|
$challenge = Challenge::where('id_guru', $guru->id_guru)->findOrFail($id);
|
|
|
|
$request->validate([
|
|
'judul_challenge' => 'required|string|max:200',
|
|
'deskripsi' => 'nullable|string',
|
|
'tenggat_waktu' => 'required|date',
|
|
'durasi_pengerjaan' => 'required|integer|min:1|max:360',
|
|
'id_kelas' => 'required|array|min:1',
|
|
'id_kelas.*' => 'exists:kelas,id_kelas',
|
|
'pertanyaan' => 'required|array|min:1',
|
|
'pertanyaan.*' => 'required|string',
|
|
'opsi_a.*' => 'required|string',
|
|
'opsi_b.*' => 'required|string',
|
|
'opsi_c.*' => 'required|string',
|
|
'opsi_d.*' => 'required|string',
|
|
'jawaban_benar.*' => 'required|in:A,B,C,D',
|
|
]);
|
|
|
|
DB::transaction(function () use ($request, $challenge) {
|
|
$challenge->update([
|
|
'judul_challenge' => $request->judul_challenge,
|
|
'deskripsi' => $request->deskripsi,
|
|
'id_badge' => $request->id_badge,
|
|
'tenggat_waktu' => $request->tenggat_waktu,
|
|
'durasi_pengerjaan' => $request->durasi_pengerjaan,
|
|
]);
|
|
|
|
$challenge->kelas()->sync($request->id_kelas);
|
|
|
|
SoalChallenge::where('id_challenge', $challenge->id_challenge)->delete();
|
|
|
|
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],
|
|
]);
|
|
}
|
|
});
|
|
|
|
return redirect()->route('guru.challenge.index')
|
|
->with('success', 'Challenge berhasil diupdate!');
|
|
}
|
|
|
|
public function destroy($id)
|
|
{
|
|
$guru = Auth::guard('guru')->user();
|
|
Challenge::where('id_guru', $guru->id_guru)->findOrFail($id)->delete();
|
|
|
|
return redirect()->route('guru.challenge.index')
|
|
->with('success', 'Challenge berhasil dihapus.');
|
|
}
|
|
|
|
public function editData($id)
|
|
{
|
|
$guru = Auth::guard('guru')->user();
|
|
$challenge = Challenge::with(['kelas', 'soal'])
|
|
->where('id_guru', $guru->id_guru)
|
|
->findOrFail($id);
|
|
|
|
return response()->json([
|
|
'judul_challenge' => $challenge->judul_challenge,
|
|
'deskripsi' => $challenge->deskripsi,
|
|
'tenggat_waktu' => $challenge->tenggat_waktu,
|
|
'durasi_pengerjaan' => $challenge->durasi_pengerjaan,
|
|
'kelas' => $challenge->kelas->pluck('id_kelas'),
|
|
'soal' => $challenge->soal,
|
|
]);
|
|
}
|
|
} |