MIF_E31221225/app/Http/Controllers/Siswa/SubjekController.php

89 lines
2.6 KiB
PHP

<?php
namespace App\Http\Controllers\Siswa;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use App\Models\GuruMapel;
use App\Models\Materi;
use App\Models\TugasSiswa;
use App\Models\Tugas;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class SubjekController extends Controller
{
public function index(Request $request)
{
$user = Auth::user();
$siswa = $user->siswa;
if (!$siswa || !$siswa->kelas_id) {
abort(403, 'Siswa belum memiliki kelas.');
}
$mapelId = $request->mapel_id;
// Cek apakah mapel tersebut tersedia untuk kelas siswa
$validMapel = GuruMapel::where('kelas_id', $siswa->kelas_id)
->where('mapel_id', $mapelId)
->exists();
if (!$validMapel) {
abort(403, 'Akses ditolak: Mata pelajaran ini tidak tersedia untuk kelas Anda.');
}
// Ambil hanya materi yang tersedia untuk kelas ini dari tabel kelas_materi
$materiUtama = Materi::where('mapel_id', $mapelId)
->whereNull('parent_id')
->whereHas('kelas', function ($query) use ($siswa) {
$query->where('kelas_id', $siswa->kelas_id);
})
->orderBy('created_at')
->get();
$materiAnak = Materi::where('mapel_id', $mapelId)
->whereNotNull('parent_id')
->whereHas('kelas', function ($query) use ($siswa) {
$query->where('kelas_id', $siswa->kelas_id);
})
->orderBy('created_at')
->get();
return view('siswa.materi.index', compact('materiUtama', 'materiAnak'));
}
public function show($id)
{
$materi = Materi::findOrFail($id);
$user = Auth::user();
$siswa = $user->siswa;
if (!$siswa || !$siswa->kelas_id) {
abort(403, 'Siswa belum memiliki kelas.');
}
// Validasi akses materi berdasarkan kelas_materi
$valid = DB::table('kelas_materi')
->where('materi_id', $materi->id)
->where('kelas_id', $siswa->kelas_id)
->exists();
if (!$valid) {
abort(403, 'Akses ditolak: Materi ini tidak tersedia untuk kelas Anda.');
}
$tugas = Tugas::where('materi_id', $materi->id)->get();
$jawabanTugas = [];
foreach ($tugas as $t) {
$jawabanTugas[$t->id] = TugasSiswa::where('tugas_id', $t->id)
->where('siswa_id', $siswa->id)
->first();
}
return view('siswa.materi.show', compact('materi', 'tugas', 'jawabanTugas'));
}
}