MIF_E31221225/app/Http/Controllers/Guru/SoalPilganController.php

120 lines
3.4 KiB
PHP

<?php
namespace App\Http\Controllers\Guru;
use App\Http\Controllers\Controller;
use App\Models\SoalPilgan;
use App\Models\Ujian;
use App\Exports\SoalPilganExport;
use App\Imports\SoalPilganImport;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Http\Request;
class SoalPilganController extends Controller
{
// Menampilkan daftar soal
public function index($ujian_id)
{
$ujian = Ujian::findOrFail($ujian_id);
$soalPilgan = SoalPilgan::where('ujian_id', $ujian_id)->get();
return view('guru.soal_pilgan.index', compact('ujian', 'soalPilgan'));
}
// Menampilkan form tambah soal
public function create($ujian_id)
{
$ujian = Ujian::findOrFail($ujian_id);
return view('guru.soal_pilgan.create', compact('ujian'));
}
// Menyimpan soal baru
public function store(Request $request, $ujian_id)
{
$data = $request->validate([
'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',
]);
// Menyimpan soal
SoalPilgan::create(array_merge($data, ['ujian_id' => $ujian_id]));
return redirect()
->route('guru.ujian.soal_pg', $ujian_id)
->with('success', 'Soal PG berhasil ditambahkan.');
}
// Menampilkan form edit soal
public function edit($ujian_id, $soal_id)
{
// Mencari soal berdasarkan ID soal dan ID ujian
$soal = SoalPilgan::where('ujian_id', $ujian_id)->findOrFail($soal_id);
return view('guru.soal_pilgan.edit', compact('soal', 'ujian_id'));
}
// Memperbarui soal
public function update(Request $request, $ujian_id, $soal_id)
{
// Mencari soal berdasarkan ID soal dan ID ujian
$soal = SoalPilgan::where('ujian_id', $ujian_id)->findOrFail($soal_id);
// Validasi input
$data = $request->validate([
'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',
]);
// Memperbarui soal
$soal->update($data);
return redirect()
->route('guru.ujian.soal_pg', $ujian_id)
->with('success', 'Soal PG berhasil diperbarui.');
}
// Menghapus soal
public function destroy($ujian_id, $soal_id)
{
// Mencari soal berdasarkan ID soal dan ID ujian
$soal = SoalPilgan::where('ujian_id', $ujian_id)->findOrFail($soal_id);
// Menghapus soal
$soal->delete();
return redirect()
->route('guru.ujian.soal_pg', $ujian_id)
->with('success', 'Soal PG berhasil dihapus.');
}
// Export Excel
public function exportExcel($ujian_id)
{
$fileName = 'soal_pilgan_ujian_'.$ujian_id.'.xlsx';
return Excel::download(new SoalPilganExport($ujian_id), $fileName);
}
// Import Excel (form upload)
public function importExcel(Request $request, $ujian_id)
{
$request->validate([
'file' => 'required|file|mimes:xlsx,xls,csv',
]);
Excel::import(new SoalPilganImport($ujian_id), $request->file('file'));
return redirect()
->route('guru.ujian.soal_pg', $ujian_id)
->with('success', 'Soal PG berhasil diimport dari Excel.');
}
}