pluck('project_mahasiswa_id'); // Memuat proyek yang ditambahkan pengguna sebagai anggota atau proyek yang ditambahkan oleh pengguna itu sendiri $projects = ProjectMahasiswa::with('Detail.users') ->where('user_id', $userId) ->orWhereIn('id', $projectIds) ->get(); return view('pages.tables.project-mhs', compact('projects')); } public function print() { $userId = Auth::id(); // Mendapatkan ID proyek yang ditambahkan pengguna sebagai anggota $projectIds = ProjectDetail::where('anggota', $userId)->pluck('project_mahasiswa_id'); // Memuat proyek yang ditambahkan pengguna sebagai anggota atau proyek yang ditambahkan oleh pengguna itu sendiri $projects = ProjectMahasiswa::with('Detail.users') ->where('user_id', $userId) ->orWhereIn('id', $projectIds) ->get(); return view('projectprint', compact('projects')); } public function store(Request $request) { // Validasi input $request->validate([ 'nama_aplikasi' => 'required|string', 'semester' => 'required|string', 'angkatan' => 'required|string', 'golongan' => 'required|string', 'kategori' => 'required|string', 'link_github' => 'nullable|string', 'link_website' => 'nullable|string', 'link_youtube' => 'required|string', 'gambar_1' => 'image|extensions:jpeg,png,jpg|max:2048', 'gambar_2' => 'image|extensions:jpeg,png,jpg|max:2048', 'gambar_3' => 'image|extensions:jpeg,png,jpg|max:2048', 'gambar_4' => 'image|extensions:jpeg,png,jpg|max:2048', 'anggota' => 'nullable|array', // Menambahkan validasi untuk anggota ]); // Lakukan operasi penyimpanan data jika validasi berhasil $userId = Auth::id(); $userNim = Auth::user()->nim; $project = new ProjectMahasiswa(); $project->user_id = $userId; $project->nama_aplikasi = $request->nama_aplikasi; $project->semester = $request->semester; $project->kategori = $request->kategori; $project->angkatan = $request->angkatan; $project->golongan = $request->golongan; // Cek kategori, jika "Tugas Akhir", abaikan nilai "ketua_kelompok" if ($request->kategori != 'Tugas Akhir') { $project->ketua_kelompok = $userNim; } $project->link_github = $request->link_github; $project->link_website = $request->link_website; $project->link_youtube = $request->link_youtube; $project->narasi = $request->narasi; // Upload gambar-gambar jika ada $gambarPaths = []; foreach (['gambar_1', 'gambar_2', 'gambar_3', 'gambar_4'] as $field) { if ($request->hasFile($field)) { $gambarPath = $request->file($field)->store('images/project_picture', 'public'); $gambarPaths[$field] = $gambarPath; } } $project->gambar_1 = $gambarPaths['gambar_1'] ?? null; $project->gambar_2 = $gambarPaths['gambar_2'] ?? null; $project->gambar_3 = $gambarPaths['gambar_3'] ?? null; $project->gambar_4 = $gambarPaths['gambar_4'] ?? null; // Simpan proyek if ($project->save()) { if ($request->has('anggota')) { foreach ($request->anggota as $anggota) { // Periksa apakah anggota telah terdaftar dalam proyek lain dengan semester yang sama $existingProjects = ProjectDetail::where('anggota', $anggota) ->whereHas('projectMahasiswa', function ($query) use ($project) { $query->where('semester', $project->semester); }) ->exists(); // Jika anggota telah terdaftar dalam proyek dengan semester yang sama, abaikan anggota tersebut if ($existingProjects) { continue; } // Tambahkan anggota ke proyek saat ini ProjectDetail::create([ 'project_mahasiswa_id' => $project->id, 'anggota' => $anggota ]); } } return redirect()->route('project-mhs')->with('success', 'Data proyek berhasil ditambahkan.'); } else { // Penanganan kesalahan jika penyimpanan proyek gagal return redirect()->back()->with('error', 'Gagal menyimpan data proyek. Silakan coba lagi.'); } } public function search(Request $request) { $searchTerm = $request->input('q'); // Mendapatkan kata kunci pencarian dari permintaan // Lakukan pencarian berdasarkan NIM atau nama untuk pengguna dengan peran mahasiswa $users = User::where(function ($query) use ($searchTerm) { $query->where('nim', 'like', "%{$searchTerm}%") ->orWhere('name', 'like', "%{$searchTerm}%"); }) ->where('role', 'mahasiswa') // Filter berdasarkan peran 'mahasiswa' ->get(); // Format hasil pencarian menjadi format yang diharapkan oleh Select2 $formattedUsers = []; foreach ($users as $user) { $formattedUsers[] = ['id' => $user->id, 'text' => $user->nim . ' - ' . $user->name]; } return response()->json($formattedUsers); } public function getMembers($projectId) { // Dapatkan anggota dari proyek tertentu yang memiliki peran mahasiswa $members = ProjectDetail::where('project_mahasiswa_id', $projectId) ->with('users') // Menggunakan 'users' karena itulah nama relasinya ->whereHas('users', function ($query) { $query->where('role', 'mahasiswa'); }) ->get() ->map(function ($detail) { return [ 'id' => $detail->users->id, // Menggunakan 'users' untuk mendapatkan data anggota 'name' => $detail->users->name, // Menggunakan 'users' untuk mendapatkan data anggota ]; }); // Kirim data anggota sebagai respons JSON return response()->json(['data' => $members]); } public function edit($id) { $project = ProjectMahasiswa::find($id); if (!$project) { return redirect()->route('project-mhs')->with('error', 'Proyek tidak ditemukan.'); } // Periksa izin pengguna untuk mengedit proyek if ($project->user_id !== Auth::id() && !ProjectDetail::where('project_mahasiswa_id', $id)->where('anggota', Auth::id())->exists()) { return redirect()->route('project-mhs')->with('error', 'Anda tidak memiliki izin untuk mengedit proyek ini.'); } // Lanjutkan untuk menampilkan modal edit dengan informasi proyek return view('pages.tables.project-mhs', compact('project')); // Perbaikan: Kirim data proyek ke view } public function update(Request $request, $id) { $project = ProjectMahasiswa::find($id); // Periksa apakah pengguna yang sedang melakukan permintaan adalah pemilik proyek atau anggota proyek if (!$project || ($project->user_id !== Auth::id() && !ProjectDetail::where('project_mahasiswa_id', $id)->where('anggota', Auth::id())->exists())) { return redirect()->route('project-mhs')->with('error', 'Proyek tidak ditemukan atau Anda tidak memiliki izin untuk mengedit proyek ini.'); } $request->validate([ 'nama_aplikasi' => 'required|string', 'golongan' => 'required|string', 'link_github' => 'required|string', 'link_website' => 'required|string', 'link_youtube' => 'required|string', 'narasi' => 'required|string', 'gambar_1' => 'nullable|image|mimes:jpeg,png,jpg|max:2048', 'gambar_2' => 'nullable|image|mimes:jpeg,png,jpg|max:2048', 'gambar_3' => 'nullable|image|mimes:jpeg,png,jpg|max:2048', 'gambar_4' => 'nullable|image|mimes:jpeg,png,jpg|max:2048', ]); // Update data proyek $project->nama_aplikasi = $request->nama_aplikasi; $project->golongan = $request->golongan; $project->link_github = $request->link_github; $project->link_website = $request->link_website; $project->link_youtube = $request->link_youtube; $project->narasi = $request->narasi; // Upload ulang gambar-gambar jika ada yang diunggah foreach (['gambar_1', 'gambar_2', 'gambar_3', 'gambar_4'] as $field) { if ($request->hasFile($field)) { // Hapus file lama jika ada if ($project->{$field}) { Storage::disk('public')->delete($project->{$field}); } // Upload file baru $gambarPath = $request->file($field)->store('images/project_picture', 'public'); $project->{$field} = $gambarPath; } } // Simpan perubahan pada proyek $project->save(); // Update project details (members) if ($request->has('anggota')) { // Dapatkan anggota yang sudah ada $existingMembers = $project->detail->pluck('anggota')->toArray(); // Loop melalui anggota yang ingin ditambahkan foreach ($request->anggota as $member) { // Periksa apakah anggota telah terdaftar dalam proyek lain dengan semester yang sama $existingProjects = ProjectDetail::where('anggota', $member) ->whereHas('projectMahasiswa', function ($query) use ($project) { $query->where('semester', $project->semester); }) ->exists(); // Jika anggota telah terdaftar dalam proyek dengan semester yang sama, abaikan anggota tersebut if ($existingProjects) { continue; } // Jika anggota belum ada dalam daftar anggota yang sudah ada, tambahkan anggota baru if (!in_array($member, $existingMembers)) { $projectDetail = new ProjectDetail(); $projectDetail->project_mahasiswa_id = $project->id; $projectDetail->anggota = $member; $projectDetail->save(); } } } return redirect()->route('project-mhs')->with('success', 'Proyek berhasil diperbarui.'); } }