189 lines
6.4 KiB
PHP
189 lines
6.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class adminmycoursesController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
if (!session()->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!');
|
|
}
|
|
} |