diff --git a/app/Http/Controllers/adminmycoursesController.php b/app/Http/Controllers/adminmycoursesController.php index 9541867..4ef0694 100644 --- a/app/Http/Controllers/adminmycoursesController.php +++ b/app/Http/Controllers/adminmycoursesController.php @@ -8,18 +8,28 @@ use Illuminate\Support\Facades\Storage; class adminmycoursesController extends Controller { - public function index() { if (!session()->has('admin_id')) { - return redirect('/adminlogin')->with('error', 'Please login first!'); + 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([ @@ -58,7 +68,6 @@ class adminmycoursesController extends Controller return redirect()->back()->with('success', 'Course added successfully!'); } - public function update(Request $request, $id) { $request->validate([ @@ -101,18 +110,17 @@ class adminmycoursesController extends Controller 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!'); @@ -120,4 +128,59 @@ class adminmycoursesController extends Controller 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!'); + } } \ No newline at end of file diff --git a/app/Models/courseModules.php b/app/Models/courseModules.php new file mode 100644 index 0000000..906b490 --- /dev/null +++ b/app/Models/courseModules.php @@ -0,0 +1,10 @@ + + */ + protected $fillable = [ + 'course_id', + 'module_code', + 'title', + 'semester', + 'credits', + 'description', + ]; + + /** + * Get the course that owns the module. + */ + public function course() + { + return $this->belongsTo(Course::class); + } +} \ No newline at end of file diff --git a/database/migrations/2026_08_17_043854_add_semester_to_modules_table.php b/database/migrations/2026_08_17_043854_add_semester_to_modules_table.php new file mode 100644 index 0000000..4c44402 --- /dev/null +++ b/database/migrations/2026_08_17_043854_add_semester_to_modules_table.php @@ -0,0 +1,28 @@ +string('semester')->after('title')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('modules', function (Blueprint $table) { + $table->dropColumn('semester'); + }); + } +}; diff --git a/database/migrations/2026_08_17_045702_create_course_modules_table.php b/database/migrations/2026_08_17_045702_create_course_modules_table.php new file mode 100644 index 0000000..bc76d9d --- /dev/null +++ b/database/migrations/2026_08_17_045702_create_course_modules_table.php @@ -0,0 +1,33 @@ +id(); + $table->foreignId('course_id')->constrained('courses')->onDelete('cascade'); + $table->string('module_code'); + $table->string('title'); + $table->string('semester'); + $table->integer('credits')->nullable(); + $table->text('description')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('course_modules'); + } +}; diff --git a/resources/views/admin/adminmycourses.blade.php b/resources/views/admin/adminmycourses.blade.php index f087d81..1a6e1a9 100644 --- a/resources/views/admin/adminmycourses.blade.php +++ b/resources/views/admin/adminmycourses.blade.php @@ -292,6 +292,13 @@ @endif + + + - +
+ @csrf + @method('DELETE') + +
+ + +