diff --git a/app/Http/Controllers/Guru/MapelController.php b/app/Http/Controllers/Guru/MapelController.php index 1f607e2..ac91899 100644 --- a/app/Http/Controllers/Guru/MapelController.php +++ b/app/Http/Controllers/Guru/MapelController.php @@ -16,12 +16,10 @@ public function index() { $guru = Auth::guard('guru')->user(); - // Ambil mengajar dengan relasi mapel & kelas - // Group by id_mapel agar tidak duplikat jika guru ajar mapel sama di kelas berbeda $mengajars = Mengajar::with(['mapel', 'kelas']) ->where('id_guru', $guru->id_guru) ->get() - ->groupBy('id_mapel'); // group by mapel + ->groupBy('id_mapel'); return view('guru.mapel.index', compact('mengajars')); } @@ -43,16 +41,15 @@ public function storeMateri(Request $request) 'lampiran_materi.max' => 'Ukuran file maksimal 10MB.', ]); - // Pastikan mengajar ini milik guru yang login $mengajar = Mengajar::where('id_mengajar', $request->id_mengajar) ->where('id_guru', $guru->id_guru) ->firstOrFail(); $path = null; if ($request->hasFile('lampiran_materi')) { - $file = $request->file('lampiran_materi'); + $file = $request->file('lampiran_materi'); $filename = 'materi_' . $guru->id_guru . '_' . time() . '.' . $file->getClientOriginalExtension(); - $path = $file->storeAs('materi', $filename, 'public'); + $path = $file->storeAs('materi', $filename, 'public'); } Materi::create([ @@ -74,24 +71,33 @@ public function storeTugas(Request $request) $guru = Auth::guard('guru')->user(); $request->validate([ - 'id_mengajar' => 'required|exists:mengajars,id_mengajar', - 'judul_tugas' => 'required|string|max:200', - 'keterangan' => 'nullable|string', - 'deadline' => 'required|date|after:now', + 'id_mengajar' => 'required|exists:mengajars,id_mengajar', + 'judul_tugas' => 'required|string|max:200', + 'keterangan' => 'nullable|string', + 'deadline' => 'required|date|after:now', + 'lampiran_tugas' => 'nullable|file|max:10240', // semua tipe file, maks 10MB ], [ - 'deadline.after' => 'Deadline harus lebih dari waktu sekarang.', + 'deadline.after' => 'Deadline harus lebih dari waktu sekarang.', + 'lampiran_tugas.max' => 'Ukuran file maksimal 10MB.', ]); - // Pastikan mengajar ini milik guru yang login $mengajar = Mengajar::where('id_mengajar', $request->id_mengajar) ->where('id_guru', $guru->id_guru) ->firstOrFail(); + $path = null; + if ($request->hasFile('lampiran_tugas')) { + $file = $request->file('lampiran_tugas'); + $filename = 'tugas_' . $guru->id_guru . '_' . time() . '.' . $file->getClientOriginalExtension(); + $path = $file->storeAs('tugas', $filename, 'public'); + } + Tugas::create([ 'id_mengajar' => $request->id_mengajar, 'judul_tugas' => $request->judul_tugas, 'keterangan' => $request->keterangan, 'deadline' => $request->deadline, + 'lampiran' => $path, ]); return redirect()->route('guru.mapel.index') @@ -105,7 +111,6 @@ public function historyMateri() { $guru = Auth::guard('guru')->user(); - // Ambil id_mengajar milik guru ini $idMengajars = Mengajar::where('id_guru', $guru->id_guru) ->pluck('id_mengajar'); @@ -130,7 +135,6 @@ public function destroyMateri($id) ->where('id_materi', $id) ->firstOrFail(); - // Hapus file jika ada if ($materi->lampiran_materi && \Storage::disk('public')->exists($materi->lampiran_materi)) { \Storage::disk('public')->delete($materi->lampiran_materi); } @@ -193,6 +197,11 @@ public function destroyTugas($id) ->where('id_tugas', $id) ->firstOrFail(); + // Hapus file lampiran jika ada + if ($tugas->lampiran && \Storage::disk('public')->exists($tugas->lampiran)) { + \Storage::disk('public')->delete($tugas->lampiran); + } + $tugas->delete(); return redirect()->route('guru.tugas.history') diff --git a/app/Models/Tugas.php b/app/Models/Tugas.php index 8ddd25e..c395fd7 100644 --- a/app/Models/Tugas.php +++ b/app/Models/Tugas.php @@ -17,6 +17,7 @@ class Tugas extends Model 'judul_tugas', 'keterangan', 'deadline', + 'lampiran', ]; protected $casts = [ diff --git a/database/migrations/2026_04_08_130639_add_lampiran_to_tugas_table.php b/database/migrations/2026_04_08_130639_add_lampiran_to_tugas_table.php new file mode 100644 index 0000000..dfd43fe --- /dev/null +++ b/database/migrations/2026_04_08_130639_add_lampiran_to_tugas_table.php @@ -0,0 +1,22 @@ +string('lampiran')->nullable()->after('deadline'); + }); + } + + public function down(): void + { + Schema::table('tugas', function (Blueprint $table) { + $table->dropColumn('lampiran'); + }); + } +}; \ No newline at end of file diff --git a/public/images/icon/gurud/1.png b/public/images/icon/gurud/1.png new file mode 100644 index 0000000..615fa96 Binary files /dev/null and b/public/images/icon/gurud/1.png differ diff --git a/public/images/icon/gurud/2.png b/public/images/icon/gurud/2.png new file mode 100644 index 0000000..c0fa0dd Binary files /dev/null and b/public/images/icon/gurud/2.png differ diff --git a/public/images/icon/gurud/3.png b/public/images/icon/gurud/3.png new file mode 100644 index 0000000..2ca995b Binary files /dev/null and b/public/images/icon/gurud/3.png differ diff --git a/public/images/icon/gurud/add-file.png b/public/images/icon/gurud/add-file.png new file mode 100644 index 0000000..38a70b0 Binary files /dev/null and b/public/images/icon/gurud/add-file.png differ diff --git a/public/images/icon/gurud/alarm.png b/public/images/icon/gurud/alarm.png new file mode 100644 index 0000000..4e7c070 Binary files /dev/null and b/public/images/icon/gurud/alarm.png differ diff --git a/public/images/icon/gurud/alert.png b/public/images/icon/gurud/alert.png new file mode 100644 index 0000000..591966c Binary files /dev/null and b/public/images/icon/gurud/alert.png differ diff --git a/public/images/icon/gurud/bell.png b/public/images/icon/gurud/bell.png new file mode 100644 index 0000000..9e49a00 Binary files /dev/null and b/public/images/icon/gurud/bell.png differ diff --git a/public/images/icon/gurud/bin.png b/public/images/icon/gurud/bin.png new file mode 100644 index 0000000..fb661aa Binary files /dev/null and b/public/images/icon/gurud/bin.png differ diff --git a/public/images/icon/gurud/buku1.png b/public/images/icon/gurud/buku1.png new file mode 100644 index 0000000..db5ef3c Binary files /dev/null and b/public/images/icon/gurud/buku1.png differ diff --git a/public/images/icon/gurud/buku2.png b/public/images/icon/gurud/buku2.png new file mode 100644 index 0000000..c44efa1 Binary files /dev/null and b/public/images/icon/gurud/buku2.png differ diff --git a/public/images/icon/siswat/icons8-upload-to-cloud-64.png b/public/images/icon/gurud/cloud.png similarity index 100% rename from public/images/icon/siswat/icons8-upload-to-cloud-64.png rename to public/images/icon/gurud/cloud.png diff --git a/public/images/icon/gurud/confetti.png b/public/images/icon/gurud/confetti.png new file mode 100644 index 0000000..6bb533c Binary files /dev/null and b/public/images/icon/gurud/confetti.png differ diff --git a/public/images/icon/gurud/crown.png b/public/images/icon/gurud/crown.png new file mode 100644 index 0000000..0de3667 Binary files /dev/null and b/public/images/icon/gurud/crown.png differ diff --git a/public/images/icon/gurud/doc.png b/public/images/icon/gurud/doc.png new file mode 100644 index 0000000..181fac7 Binary files /dev/null and b/public/images/icon/gurud/doc.png differ diff --git a/public/images/icon/gurud/download.png b/public/images/icon/gurud/download.png new file mode 100644 index 0000000..a59a6e6 Binary files /dev/null and b/public/images/icon/gurud/download.png differ diff --git a/public/images/icon/gurud/eye.png b/public/images/icon/gurud/eye.png new file mode 100644 index 0000000..3fe3061 Binary files /dev/null and b/public/images/icon/gurud/eye.png differ diff --git a/public/images/icon/gurud/file.png b/public/images/icon/gurud/file.png new file mode 100644 index 0000000..6bd8373 Binary files /dev/null and b/public/images/icon/gurud/file.png differ diff --git a/public/images/icon/gurud/file2.png b/public/images/icon/gurud/file2.png new file mode 100644 index 0000000..fdeb90f Binary files /dev/null and b/public/images/icon/gurud/file2.png differ diff --git a/public/images/icon/gurud/guru.png b/public/images/icon/gurud/guru.png new file mode 100644 index 0000000..bb1430c Binary files /dev/null and b/public/images/icon/gurud/guru.png differ diff --git a/public/images/icon/gurud/history.blade.php b/public/images/icon/gurud/history.blade.php new file mode 100644 index 0000000..d002656 --- /dev/null +++ b/public/images/icon/gurud/history.blade.php @@ -0,0 +1,203 @@ +@extends('guru.layouts.app') + +@section('title', 'History Materi') + +@push('styles') + +@endpush + +@section('content') + +โ Kembali ke Mata Pelajaran + +
+ Semua materi yang pernah Anda upload. +
+ +@if(session('success')) +Belum ada materi yang diupload.
+| No | +Judul Materi | +Mata Pelajaran | +Kelas | +Tanggal Upload | +File | +Aksi | +
|---|---|---|---|---|---|---|
| {{ $materiList->firstItem() + $i }} | +
+ {{ $materi->judul_materi }}
+ @if($materi->deskripsi)
+
+ {{ Str::limit($materi->deskripsi, 60) }}
+
+ @endif
+ |
+ + + {{ optional(optional($materi->mengajar)->mapel)->nama_mapel ?? '-' }} + + | ++ + {{ optional(optional($materi->mengajar)->kelas)->tingkat }} + {{ optional(optional($materi->mengajar)->kelas)->nama_kelas ?? '-' }} + + | ++ {{ \Carbon\Carbon::parse($materi->tanggal_upload)->format('d M Y, H:i') }} + | ++ @if($materi->lampiran_materi) + @php + $ext = strtolower(pathinfo($materi->lampiran_materi, PATHINFO_EXTENSION)); + $icon = match(true) { + in_array($ext, ['pdf']) => '๐', + in_array($ext, ['doc','docx']) => '๐', + in_array($ext, ['ppt','pptx']) => '๐', + in_array($ext, ['jpg','jpeg','png']) => '๐ผ๏ธ', + default => '๐', + }; + @endphp + + {{ $icon }} Unduh + + @else + Tidak ada file + @endif + | ++ + | +