120 lines
3.4 KiB
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.');
|
|
}
|
|
|
|
}
|