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 + +

WavingHistory Materi

+

+ Semua materi yang pernah Anda upload. +

+ +@if(session('success')) +
Waving{{ session('success') }}
+@endif + +
+ @if($materiList->isEmpty()) +
+
๐Ÿ“ญ
+

Belum ada materi yang diupload.

+
+ @else + + + + + + + + + + + + + + @foreach($materiList as $i => $materi) + + + + + + + + + + @endforeach + +
NoJudul MateriMata PelajaranKelasTanggal UploadFileAksi
{{ $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 + +
+ @csrf + @method('DELETE') + +
+
+ +
+ {{ $materiList->links() }} +
+ @endif +
+ +@endsection \ No newline at end of file diff --git a/public/images/icon/gurud/history.png b/public/images/icon/gurud/history.png new file mode 100644 index 0000000..420515e Binary files /dev/null and b/public/images/icon/gurud/history.png differ diff --git a/public/images/icon/gurud/image.png b/public/images/icon/gurud/image.png new file mode 100644 index 0000000..25efc31 Binary files /dev/null and b/public/images/icon/gurud/image.png differ diff --git a/public/images/icon/gurud/jam-pasir.png b/public/images/icon/gurud/jam-pasir.png new file mode 100644 index 0000000..cc94d03 Binary files /dev/null and b/public/images/icon/gurud/jam-pasir.png differ diff --git a/public/images/icon/gurud/jml-m.png b/public/images/icon/gurud/jml-m.png new file mode 100644 index 0000000..db5ef3c Binary files /dev/null and b/public/images/icon/gurud/jml-m.png differ diff --git a/public/images/icon/gurud/lb.png b/public/images/icon/gurud/lb.png new file mode 100644 index 0000000..4413251 Binary files /dev/null and b/public/images/icon/gurud/lb.png differ diff --git a/public/images/icon/gurud/link.png b/public/images/icon/gurud/link.png new file mode 100644 index 0000000..5ffd1b7 Binary files /dev/null and b/public/images/icon/gurud/link.png differ diff --git a/public/images/icon/gurud/mailbox.png b/public/images/icon/gurud/mailbox.png new file mode 100644 index 0000000..eddb712 Binary files /dev/null and b/public/images/icon/gurud/mailbox.png differ diff --git a/public/images/icon/gurud/mapel.png b/public/images/icon/gurud/mapel.png new file mode 100644 index 0000000..747a379 Binary files /dev/null and b/public/images/icon/gurud/mapel.png differ diff --git a/public/images/icon/gurud/medal-pita.png b/public/images/icon/gurud/medal-pita.png new file mode 100644 index 0000000..8681669 Binary files /dev/null and b/public/images/icon/gurud/medal-pita.png differ diff --git a/public/images/icon/gurud/notif.png b/public/images/icon/gurud/notif.png new file mode 100644 index 0000000..99d132a Binary files /dev/null and b/public/images/icon/gurud/notif.png differ diff --git a/public/images/icon/gurud/pdf.png b/public/images/icon/gurud/pdf.png new file mode 100644 index 0000000..b2f90db Binary files /dev/null and b/public/images/icon/gurud/pdf.png differ diff --git a/public/images/icon/gurud/pencil.png b/public/images/icon/gurud/pencil.png new file mode 100644 index 0000000..1d18064 Binary files /dev/null and b/public/images/icon/gurud/pencil.png differ diff --git a/public/images/icon/gurud/pengumpulan.png b/public/images/icon/gurud/pengumpulan.png new file mode 100644 index 0000000..879f06a Binary files /dev/null and b/public/images/icon/gurud/pengumpulan.png differ diff --git a/public/images/icon/gurud/piala.png b/public/images/icon/gurud/piala.png new file mode 100644 index 0000000..fc14798 Binary files /dev/null and b/public/images/icon/gurud/piala.png differ diff --git a/public/images/icon/gurud/save.png b/public/images/icon/gurud/save.png new file mode 100644 index 0000000..ecbbfb5 Binary files /dev/null and b/public/images/icon/gurud/save.png differ diff --git a/public/images/icon/gurud/school.png b/public/images/icon/gurud/school.png new file mode 100644 index 0000000..c5f9206 Binary files /dev/null and b/public/images/icon/gurud/school.png differ diff --git a/public/images/icon/gurud/siswa.png b/public/images/icon/gurud/siswa.png new file mode 100644 index 0000000..1296ac4 Binary files /dev/null and b/public/images/icon/gurud/siswa.png differ diff --git a/public/images/icon/gurud/stacked.png b/public/images/icon/gurud/stacked.png new file mode 100644 index 0000000..affe0f6 Binary files /dev/null and b/public/images/icon/gurud/stacked.png differ diff --git a/public/images/icon/gurud/star.png b/public/images/icon/gurud/star.png new file mode 100644 index 0000000..682e996 Binary files /dev/null and b/public/images/icon/gurud/star.png differ diff --git a/public/images/icon/gurud/target.png b/public/images/icon/gurud/target.png new file mode 100644 index 0000000..7e2f646 Binary files /dev/null and b/public/images/icon/gurud/target.png differ diff --git a/public/images/icon/gurud/upload.png b/public/images/icon/gurud/upload.png new file mode 100644 index 0000000..e9094c3 Binary files /dev/null and b/public/images/icon/gurud/upload.png differ diff --git a/public/images/icon/gurud/v.png b/public/images/icon/gurud/v.png new file mode 100644 index 0000000..9efe5d1 Binary files /dev/null and b/public/images/icon/gurud/v.png differ diff --git a/public/images/icon/gurud/wavinghand.png b/public/images/icon/gurud/wavinghand.png new file mode 100644 index 0000000..4124d80 Binary files /dev/null and b/public/images/icon/gurud/wavinghand.png differ diff --git a/public/images/icon/gurud/x.png b/public/images/icon/gurud/x.png new file mode 100644 index 0000000..cf6915c Binary files /dev/null and b/public/images/icon/gurud/x.png differ diff --git a/public/images/icon/siswat/cloud.png b/public/images/icon/siswat/cloud.png new file mode 100644 index 0000000..55924ad Binary files /dev/null and b/public/images/icon/siswat/cloud.png differ diff --git a/resources/views/admin/challenge/index.blade.php b/resources/views/admin/challenge/index.blade.php index 603d39e..ea9d3d9 100644 --- a/resources/views/admin/challenge/index.blade.php +++ b/resources/views/admin/challenge/index.blade.php @@ -54,12 +54,22 @@ .action-icon { width: 20px; cursor: pointer; margin: 0 4px; } +/* Icon kecil inline (di dalam teks / badge / label) */ +.inline-icon { + width: 16px; + height: 16px; + vertical-align: middle; + display: inline-block; +} + .deadline-badge { font-size: 11px; font-weight: 700; padding: 3px 8px; border-radius: 99px; - display: inline-block; + display: inline-flex; + align-items: center; + gap: 4px; } .deadline-aktif { background: #dcfce7; color: #16a34a; } @@ -93,6 +103,9 @@ margin-bottom: 16px; font-weight: 500; font-size: 14px; + display: flex; + align-items: center; + gap: 8px; } /* โ”€โ”€ MODAL SHARED โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ @@ -110,7 +123,13 @@ border-radius: 16px 16px 0 0; padding: 18px 24px; } -.modal-header-yellow .modal-title { font-weight: 800; font-size: 18px; } +.modal-header-yellow .modal-title { + font-weight: 800; + font-size: 18px; + display: flex; + align-items: center; + gap: 8px; +} .modal-header-yellow .btn-close { filter: none; } /* Header ungu (Edit โ€” tetap seperti semula) */ @@ -344,6 +363,9 @@ .soal-scroll-area::-webkit-scrollbar-thumb:hover { background: #94a3b8; } .section-divider { + display: flex; + align-items: center; + gap: 6px; font-size: 13px; font-weight: 700; color: #667eea; @@ -374,20 +396,23 @@

DAFTAR CHALLENGE

@if(session('success')) -
โœ… {{ session('success') }}
+
+ Berhasil + {{ session('success') }} +
@endif
@@ -425,7 +450,11 @@ {{ $ch->exp }} EXP - {{ $isLewat ? 'โฐ Lewat' : 'โœ… Aktif' }} + @if($isLewat) + Lewat Lewat + @else + Aktif Aktif + @endif
{{ \Carbon\Carbon::parse($ch->tenggat_waktu)->format('d M Y, H:i') }} @@ -434,18 +463,18 @@ - Detail + Lihat Detail
@csrf @method('DELETE')
@@ -471,7 +500,9 @@ {{-- Header kuning --}} @@ -493,7 +524,9 @@ {{-- โ”€โ”€โ”€ STEP 1: Info Challenge โ”€โ”€โ”€ --}}
-
๐Ÿ“‹ Informasi Challenge
+
+ Informasi Informasi Challenge +
@@ -529,7 +562,9 @@
-
๐Ÿซ Target Kelas
+
+ Kelas Target Kelas +
@foreach($kelas as $k)