has('admin_id')) { return redirect('/admin/login')->with('error', 'Please login first!'); } // Fetch courses and manually attach modules to each course object $courses = DB::table('courses')->orderBy('id', 'desc')->get(); foreach ($courses as $course) { $course->modules = DB::table('course_modules') ->where('course_id', $course->id) ->orderBy('semester', 'asc') ->orderBy('id', 'asc') ->get(); } return view('admin.adminmycourses', compact('courses')); } // --- COURSE CRUD METHODS --- public function store(Request $request) { $request->validate([ 'title' => 'required|string|max:255', 'course_code' => 'required|string|max:50', 'image' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp|max:2048', 'duration' => 'required|string', 'level' => 'required|string', 'author' => 'nullable|string', 'desc' => 'nullable|string', 'status' => 'required|string', ]); $imagePath = null; if ($request->hasFile('image')) { $imagePath = $request->file('image')->store('courses', 'public'); } DB::table('courses')->insert([ 'title' => $request->title, 'course_code' => $request->course_code, 'image' => $imagePath, 'duration' => $request->duration, 'level' => $request->level, 'author' => $request->author ?? 'Admin', 'desc' => $request->desc, 'student' => $request->student ?? 0, 'rating' => $request->rating ?? 0.0, 'badge' => $request->badge, 'trending' => $request->has('trending') ? 1 : 0, 'status' => $request->status, 'created_at' => now(), 'updated_at' => now(), ]); return redirect()->back()->with('success', 'Course added successfully!'); } public function update(Request $request, $id) { $request->validate([ 'title' => 'required|string|max:255', 'course_code' => 'required|string|max:50', 'image' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp|max:2048', 'duration' => 'required|string', 'level' => 'required|string', 'status' => 'required|string', ]); $course = DB::table('courses')->where('id', $id)->first(); if (!$course) { return redirect()->back()->with('error', 'Course not found!'); } $imagePath = $course->image; if ($request->hasFile('image')) { if ($course->image && Storage::disk('public')->exists($course->image)) { Storage::disk('public')->delete($course->image); } $imagePath = $request->file('image')->store('courses', 'public'); } DB::table('courses')->where('id', $id)->update([ 'title' => $request->title, 'course_code' => $request->course_code, 'image' => $imagePath, 'duration' => $request->duration, 'level' => $request->level, 'author' => $request->author ?? $course->author ?? 'Admin', 'desc' => $request->desc ?? $request->description ?? $course->desc, 'badge' => $request->badge ?? $course->badge, 'trending' => $request->has('trending') ? 1 : 0, 'status' => $request->status, 'updated_at' => now(), ]); return redirect()->back()->with('success', 'Course updated successfully!'); } public function destroy($id) { $course = DB::table('courses')->where('id', $id)->first(); if ($course) { if ($course->image && Storage::disk('public')->exists($course->image)) { Storage::disk('public')->delete($course->image); } // Clean up related modules DB::table('course_modules')->where('course_id', $id)->delete(); DB::table('courses')->where('id', $id)->delete(); return redirect()->back()->with('success', 'Course deleted successfully!'); } return redirect()->back()->with('error', 'Course not found!'); } // --- MODULE CRUD METHODS --- public function storeModule(Request $request) { $request->validate([ 'course_id' => 'required', 'module_code' => 'required|string|max:50', 'title' => 'required|string|max:255', 'semester' => 'required|string', 'credits' => 'nullable|integer', 'description' => 'nullable|string', ]); DB::table('course_modules')->insert([ 'course_id' => $request->course_id, 'module_code' => $request->module_code, 'title' => $request->title, 'semester' => $request->semester, 'credits' => $request->credits, 'description' => $request->description, 'created_at' => now(), 'updated_at' => now(), ]); return redirect()->back()->with('success', 'Module added successfully!'); } public function updateModule(Request $request, $id) { $request->validate([ 'module_code' => 'required|string|max:50', 'title' => 'required|string|max:255', 'semester' => 'required|string', 'credits' => 'nullable|integer', 'description' => 'nullable|string', ]); DB::table('course_modules')->where('id', $id)->update([ 'module_code' => $request->module_code, 'title' => $request->title, 'semester' => $request->semester, 'credits' => $request->credits, 'description' => $request->description, 'updated_at' => now(), ]); return redirect()->back()->with('success', 'Module updated successfully!'); } public function destroyModule($id) { DB::table('course_modules')->where('id', $id)->delete(); return redirect()->back()->with('success', 'Module deleted successfully!'); } }