diff --git a/app/Http/Controllers/AdminAuthController.php b/app/Http/Controllers/AdminAuthController.php index 8461cf2..0dfdcc7 100644 --- a/app/Http/Controllers/AdminAuthController.php +++ b/app/Http/Controllers/AdminAuthController.php @@ -8,58 +8,73 @@ use Illuminate\Support\Facades\Hash; class AdminAuthController extends Controller { - + /** + * Admin Login View එක පෙන්වීම + */ public function showLoginForm() { return view('adminlogin'); } - - public function login(Request $request) -{ - $request->validate([ - 'username' => 'required', - 'password' => 'required', - ]); - - $admin = DB::table('adminlogins')->where('username', $request->username)->first(); - - if ($admin && Hash::check($request->password, $admin->password)) { - - session([ - 'admin_id' => $admin->id, - 'admin_username' => $admin->username + /** + * Admin Login Process එක සිදු කිරීම + */ + public function login(Request $request) + { + // 1. Validation සිදු කිරීම + $request->validate([ + 'username' => 'required', + 'password' => 'required', ]); + // 2. Database එකෙන් Admin පරීක්ෂා කිරීම + $admin = DB::table('adminlogins')->where('username', $request->username)->first(); + + // 3. Password එක හරියටම ගැලපේ නම් + if ($admin && Hash::check($request->password, $admin->password)) { + + // Session Fixation ආරක්ෂාව සඳහා Session ID එක Regenerate කිරීම + $request->session()->regenerate(); + + // Session එකට Admin Data තැන්පත් කිරීම + session([ + 'admin_id' => $admin->id, + 'admin_username' => $admin->username + ]); + + return response()->json([ + 'success' => true, + 'message' => 'Login Successful!', + 'redirect_url' => route('admin.mycourses') // නැතහොත් route('admin.admindashboard') + ]); + } + + // 4. Username හෝ Password වැරදි නම් return response()->json([ - 'success' => true, - 'message' => 'Login Successful!', - 'redirect_url' => url('admin/adminmycourese') - ]); + 'success' => false, + 'message' => 'Wrong Username or Password!' + ], 401); } - return response()->json([ - 'success' => false, - 'message' => 'Wrong Username or Password!' - ], 401); -} - -public function logout(Request $request) -{ - // 1. Session එකෙන් Admin දත්ත ඉවත් කර Session එක Invalidate කිරීම - $request->session()->forget(['admin_id', 'admin_username']); - $request->session()->invalidate(); - $request->session()->regenerateToken(); + /** + * Admin Logout Process එක සිදු කිරීම + */ + public function logout(Request $request) + { + // 1. Session එකෙන් Data ඉවත් කර Session එක Invalidate කිරීම + $request->session()->forget(['admin_id', 'admin_username']); + $request->session()->invalidate(); + $request->session()->regenerateToken(); - // 2. Request එක AJAX / JSON එකක් නම් JSON Response එකක් යැවීම - if ($request->ajax() || $request->wantsJson()) { - return response()->json([ - 'success' => true, - 'redirect_url' => route('admin.login') - ]); + // 2. Request එක AJAX / JSON නම් JSON Response එකක් යැවීම + if ($request->ajax() || $request->wantsJson()) { + return response()->json([ + 'success' => true, + 'redirect_url' => route('admin.login') + ]); + } + + // 3. Normal Form Submit එකක් නම් Redirect කිරීම + return redirect()->route('admin.login')->with('success', 'Logged out successfully!'); } - - // 3. Normal Form submit එකක් නම් කෙලින්ම Login page එකට Redirect කිරීම - return redirect()->route('admin.login')->with('success', 'Logged out successfully!'); -} } \ No newline at end of file diff --git a/app/Http/Controllers/AdminTimetableController.php b/app/Http/Controllers/AdminTimetableController.php index 3a687e4..5ef62a5 100644 --- a/app/Http/Controllers/AdminTimetableController.php +++ b/app/Http/Controllers/AdminTimetableController.php @@ -17,7 +17,7 @@ class AdminTimetableController extends Controller // DB එකේ තියෙන ඔක්කොම Timetable entries ගන්නවා $allTimetables = Timetable::all(); - // ඊට පස්සේ Time Slot එකයි Day එකයි අනුව Map කරගන්නවා + // Time Slot එකයි Day එකයි අනුව Grid Map කරගන්නවා $grid = []; foreach ($allTimetables as $item) { $grid[$item->time_slot][$item->day] = $item; @@ -25,11 +25,12 @@ class AdminTimetableController extends Controller $days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']; + // Image එකේ තියෙන Exact Time Slots $timeSlots = [ - '08:30 - 10:00', - '10:45 - 12:15', - '12:15 - 01:00', // Lunch / Interval - '01:00 - 03:00' + '08:30 - 10:30', + '10:45 - 12:30', + '12:30 - 01:30', // Lunch / Rest Time + '01:30 - 03:30' ]; // Today's Day Name @@ -40,6 +41,7 @@ class AdminTimetableController extends Controller } // Save or Update Entry + // Save or Update Entry public function store(Request $request) { $request->validate([ @@ -49,22 +51,22 @@ class AdminTimetableController extends Controller 'type' => 'required|string', ]); - // අදාළ Day එකටයි Time Slot එකටයි කලින් Data තිබුණොත් Update කරනවා, නැත්නම් අලුතෙන් Add කරනවා + // student_log_id පේළිය ඉවත් කර ඇත Timetable::updateOrCreate( [ 'day' => $request->day, 'time_slot' => $request->time_slot, ], [ - 'subject_name' => $request->subject_name, - 'type' => $request->type, - 'student_log_id' => $request->student_log_id, + 'subject_name' => $request->subject_name, + 'type' => $request->type, ] ); - return redirect()->back()->with('success', 'Timetable updated successfully!'); + return redirect()->back()->with('success', 'Timetable saved successfully!'); } + // Delete Single Slot public function destroy($id) { diff --git a/app/Http/Controllers/TimetableController.php b/app/Http/Controllers/TimetableController.php index 7b49797..2c51498 100644 --- a/app/Http/Controllers/TimetableController.php +++ b/app/Http/Controllers/TimetableController.php @@ -10,19 +10,14 @@ class TimetableController extends Controller { public function index() { - $studentLogId = session('student_log_id') ?? session('student_id'); if (!$studentLogId) { return redirect('/signin')->with('error', 'Please login first!'); } - - $rawTimetables = Timetable::whereNull('student_log_id') - ->orWhere('student_log_id', $studentLogId) - ->orderBy('sort_order', 'asc') - ->get(); - + // DB එකේ නැති student_log_id සහ sort_order query එකෙන් ඉවත් කර ඇත + $rawTimetables = Timetable::all(); $schedule = []; $timeSlots = []; @@ -34,15 +29,10 @@ class TimetableController extends Controller $schedule[$item->time_slot][$item->day] = $item; } - + // Today's Schedule (දැනට ඇති columns වලින් පමණක් Filter කර ඇත) $todayName = Carbon::now()->format('l'); $todaySchedule = Timetable::where('day', $todayName) - ->where(function($q) use ($studentLogId) { - $q->whereNull('student_log_id') - ->orWhere('student_log_id', $studentLogId); - }) ->where('type', '!=', 'Break') - ->orderBy('sort_order', 'asc') ->get(); $days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']; diff --git a/app/Http/Controllers/adminmycoursesController.php b/app/Http/Controllers/adminmycoursesController.php index b5d2c0a..54bde8b 100644 --- a/app/Http/Controllers/adminmycoursesController.php +++ b/app/Http/Controllers/adminmycoursesController.php @@ -102,18 +102,23 @@ class adminmycoursesController extends Controller } // 4. Course එක Delete කිරීම (Delete) - public function destroy($id) - { - $course = DB::table('courses')->where('id', $id)->first(); + // Course එක Delete කිරීම (Delete) +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); - } - DB::table('courses')->where('id', $id)->delete(); - return redirect()->back()->with('success', 'Course deleted successfully!'); + if ($course) { + // Image එක Storage එකෙන් Delete කිරීම + if ($course->image && Storage::disk('public')->exists($course->image)) { + Storage::disk('public')->delete($course->image); } - return redirect()->back()->with('error', 'Course not found!'); + // Database record එක Delete කිරීම + DB::table('courses')->where('id', $id)->delete(); + + return redirect()->back()->with('success', 'Course deleted successfully!'); } + + return redirect()->back()->with('error', 'Course not found!'); +} } \ No newline at end of file diff --git a/resources/views/admin/adminmycourses.blade.php b/resources/views/admin/adminmycourses.blade.php index 716ac78..f087d81 100644 --- a/resources/views/admin/adminmycourses.blade.php +++ b/resources/views/admin/adminmycourses.blade.php @@ -300,13 +300,14 @@ -
- @csrf - @method('DELETE') - -
+ +
+ @csrf + @method('DELETE') + +
diff --git a/resources/views/admin/admintimetable.blade.php b/resources/views/admin/admintimetable.blade.php index 9801dbf..81aa53c 100644 --- a/resources/views/admin/admintimetable.blade.php +++ b/resources/views/admin/admintimetable.blade.php @@ -9,29 +9,59 @@ color: white; border-radius: 12px; } - /* Badge Colors based on UI design */ - .badge-theory { background-color: #1e293b; color: #ffffff; } - .badge-practical { background-color: #881337; color: #ffffff; } - .badge-workshop { background-color: #c2410c; color: #ffffff; } + + /* Badge Colors matching the design */ + .badge-type { + font-size: 11px; + font-weight: 600; + padding: 3px 12px; + border-radius: 12px; + letter-spacing: 0.3px; + display: inline-block; + } + .badge-theory { background-color: #1e2035; color: #ffffff; } + .badge-practical { background-color: #6b1d1d; color: #ffffff; } + .badge-workshop { background-color: #ea580c; color: #ffffff; } .badge-exam { background-color: #ca8a04; color: #ffffff; } + /* Table Custom Styles */ + .table-timetable { + border-collapse: separate; + border-spacing: 0; + border: 1px solid #e2e8f0; + border-radius: 10px; + overflow: hidden; + } .table-timetable th { text-align: center; vertical-align: middle; - font-weight: 600; - padding: 12px; + font-weight: 700; + padding: 14px 10px; + color: #334155; + background-color: #f8fafc; + border-bottom: 1px solid #e2e8f0; } .table-timetable td { text-align: center; vertical-align: middle; - height: 85px; - position: relative; + height: 90px; + padding: 6px; + border-bottom: 1px solid #e2e8f0; + border-right: 1px solid #e2e8f0; } + .table-timetable tr:last-child td { + border-bottom: none; + } + .table-timetable td:last-child { + border-right: none; + } + + /* Cell Hover & Click */ .timetable-cell { cursor: pointer; padding: 8px; - border-radius: 6px; - transition: background-color 0.2s; + border-radius: 8px; + transition: all 0.2s ease-in-out; height: 100%; display: flex; flex-direction: column; @@ -39,10 +69,13 @@ align-items: center; } .timetable-cell:hover { - background-color: #e2e8f0; + background-color: #f1f5f9; + transform: translateY(-1px); } + + /* Today's Red Header Highlight */ .today-header { - background-color: #dc2626 !important; + background-color: #d9383a !important; color: white !important; } @@ -78,8 +111,8 @@ @forelse($todaySchedule as $item)
- {{ $item->type }} -
{{ $item->subject_name }}
+ {{ $item->type }} +
{{ $item->subject_name }}
{{ $item->time_slot }}
@@ -100,14 +133,14 @@
- Theory - Practical - Workshop - Exam + Theory + Practical + Workshop + Exam

- How to Edit: Click on any timetable slot in the table below to edit or add subject details. + How to Edit / Add: Click on any timetable slot in the table below to add or edit class details.

@@ -116,10 +149,10 @@
-
+
- - +
+ @foreach($days as $day) @@ -133,12 +166,12 @@ @foreach($timeSlots as $slot) - + - @if($slot == '12:15 - 01:00') - - @else @@ -146,19 +179,19 @@ @php $item = $grid[$slot][$day] ?? null; @endphp -
Time
{{ $slot }}{{ $slot }} - ☕ Interval / Lunch Break + @if($slot == '12:30 - 01:30') + + + 🍱 LUNCH BREAK / REST TIME +
@if($item) - + {{ $item->type }}
{{ $item->subject_name }}
@else - Add + Add @endif
@@ -174,12 +207,12 @@ - +