siswa; if (!$siswa) abort(403, 'Siswa tidak ditemukan.'); // Validasi bahwa materi ada di kelas siswa $materi = Materi::where('id', $materiId) ->where('kelas_id', $siswa->kelas_id) ->firstOrFail(); // Ambil tugas yang terkait dengan materi dan kelas siswa $tugas = Tugas::with('kelas') ->where('materi_id', $materi->id) ->get() ->filter(function ($item) use ($siswa) { return $item->kelas->contains('id', $siswa->kelas_id); }); return view('siswa.tugas.index', compact('materi', 'tugas')); } // Menampilkan semua tugas untuk semua materi yang relevan dengan kelas siswa public function allTugas() { $siswa = Auth::user()->siswa; if (!$siswa) abort(403); $kelasId = $siswa->kelas_id; $tugas = Tugas::with(['materi', 'kelas']) ->whereHas('materi', function ($q) use ($kelasId) { $q->where('kelas_id', $kelasId); }) ->latest() ->get() ->filter(function ($item) use ($kelasId) { return $item->kelas->contains('id', $kelasId); }); return view('siswa.tugas.index', compact('tugas')); } // Menampilkan detail materi dan tugas yang bisa dikumpulkan public function show($materiId) { $siswa = Auth::user()->siswa; if (!$siswa) abort(403, 'Data siswa tidak ditemukan.'); // Ambil materi yang sesuai kelas siswa $materi = Materi::where('id', $materiId) ->where('kelas_id', $siswa->kelas_id) ->firstOrFail(); // Ambil tugas yang cocok untuk materi dan kelas siswa $tugas = Tugas::with('kelas') ->where('materi_id', $materi->id) ->get() ->filter(function ($item) use ($siswa) { return $item->kelas->contains('id', $siswa->kelas_id); }); // Ambil jawaban tugas yang sudah dikirim siswa $jawabanTugas = TugasSiswa::where('siswa_id', $siswa->id) ->whereIn('tugas_id', $tugas->pluck('id')) ->get() ->keyBy('tugas_id'); return view('siswa.materi.show', compact('materi', 'tugas', 'jawabanTugas')); } // Menyimpan jawaban tugas siswa public function store(Request $request, $materiId, $tugasId) { $request->validate([ 'jawaban' => 'nullable|string', 'file' => 'nullable|file|mimes:pdf,docx,jpg,png,mp4,mov|max:20480', ]); $siswa = Auth::user()->siswa; if (!$siswa) { return back()->withErrors('Anda bukan siswa atau data siswa tidak ditemukan.'); } $tugas = Tugas::with('kelas') ->where('id', $tugasId) ->where('materi_id', $materiId) ->firstOrFail(); if (!$tugas->kelas->contains('id', $siswa->kelas_id)) { abort(403, 'Tugas ini tidak untuk kelas Anda.'); } $data = [ 'jawaban' => $request->jawaban, ]; if ($request->hasFile('file')) { $data['file'] = $request->file('file')->store('jawaban_tugas', 'public'); } TugasSiswa::updateOrCreate( ['tugas_id' => $tugas->id, 'siswa_id' => $siswa->id], $data ); return back()->with('success', 'Jawaban berhasil dikirim.'); } public function nilaiTugas() { $siswa = Auth::user()->siswa; if (!$siswa) abort(403); // Ambil semua tugas siswa yang sudah dinilai (misal kolom 'nilai' di tabel tugas_siswa) $nilaiTugas = TugasSiswa::with('tugas') ->where('siswa_id', $siswa->id) ->whereNotNull('nilai') // hanya yang sudah dinilai ->get(); // Hitung total nilai (optional, sesuaikan dengan logika kamu) $totalNilai = $nilaiTugas->sum('nilai'); return view('siswa.nilai.tugas_nilai', compact('nilaiTugas', 'totalNilai')); } }