From 6f1ef0704802c072fb51bb2169a3b6e10ff91c46 Mon Sep 17 00:00:00 2001 From: KaviSaparamadu Date: Mon, 10 Aug 2026 11:04:54 +0530 Subject: [PATCH] ui chng --- .../Controllers/StudentPortalController.php | 126 ++- .../1786340066_6a7962e2b508b.png | Bin 0 -> 29720 bytes resources/views/StudentPortal.blade.php | 671 ++++++++----- resources/views/StudentProfile.blade.php | 919 ++++++++++++++---- .../views/layouts/studentportalnav.blade.php | 274 +++++- resources/views/timetable.blade.php | 611 ++++++++---- routes/web.php | 1 + 7 files changed, 1898 insertions(+), 704 deletions(-) create mode 100644 public/uploads/student_images/1786340066_6a7962e2b508b.png diff --git a/app/Http/Controllers/StudentPortalController.php b/app/Http/Controllers/StudentPortalController.php index 34efbe4..804ce60 100644 --- a/app/Http/Controllers/StudentPortalController.php +++ b/app/Http/Controllers/StudentPortalController.php @@ -80,14 +80,126 @@ class StudentPortalController extends Controller return view('StudentProfile', compact('student')); } - public function studentlogout(Request $request) - { - $request->session()->forget(['student_id', 'student_log_id', 'student_name']); - $request->session()->invalidate(); - $request->session()->regenerateToken(); + public function updateProfile(Request $request) + { + $log_id = $request->session()->get('student_log_id'); + $student_code = $request->session()->get('student_id'); - return response()->json(['success' => true]); + if (!$log_id && !$student_code) { + return redirect('/')->with('error', 'Please login first!'); } - + $request->validate([ + 'full_name' => 'required|string|max:255', + 'nic_passport' => 'nullable|string|max:100', + 'date_of_birth' => 'nullable|date', + 'gender' => 'nullable|string|max:20', + 'email' => 'required|email|max:255', + 'phone' => 'nullable|string|max:50', + 'qualification' => 'nullable|string|max:255', + 'institute' => 'nullable|string|max:255', + 'year_completed' => 'nullable|string|max:50', + 'profile_image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:5120', + ]); + + $student = DB::table('student_details') + ->where(function ($query) use ($log_id, $student_code) { + if ($log_id) { + $query->where('student_portal_log_id', $log_id); + } + if ($student_code) { + if ($log_id) { + $query->orWhere('student_id', $student_code); + } else { + $query->where('student_id', $student_code); + } + } + }) + ->first(); + + if (!$student) { + return redirect()->back()->with('error', 'Student profile record not found!'); + } + + $updateData = [ + 'full_name' => $request->full_name, + 'nic_passport' => $request->nic_passport, + 'date_of_birth' => $request->date_of_birth, + 'gender' => $request->gender, + 'email' => $request->email, + 'phone' => $request->phone, + 'qualification' => $request->qualification, + 'institute' => $request->institute, + 'year_completed' => $request->year_completed, + 'updated_at' => now(), + ]; + + // 1. Check if user requested to REMOVE image + if ($request->input('remove_profile_image') == '1') { + if (!empty($student->image) && file_exists(public_path($student->image))) { + @unlink(public_path($student->image)); + } + $updateData['image'] = null; + } + // 2. Check if user provided CROPPED Base64 image + elseif (!empty($request->input('cropped_image_data'))) { + $base64Image = $request->input('cropped_image_data'); + if (preg_match('/^data:image\/(\w+);base64,/', $base64Image, $type)) { + $data = substr($base64Image, strpos($base64Image, ',') + 1); + $type = strtolower($type[1]); + if (in_array($type, ['jpg', 'jpeg', 'gif', 'png'])) { + $data = base64_decode($data); + if ($data !== false) { + $filename = time() . '_' . uniqid() . '.png'; + $destinationPath = public_path('uploads/student_images'); + if (!file_exists($destinationPath)) { + mkdir($destinationPath, 0777, true); + } + file_put_contents($destinationPath . '/' . $filename, $data); + + // Delete old image if existed + if (!empty($student->image) && file_exists(public_path($student->image))) { + @unlink(public_path($student->image)); + } + + $updateData['image'] = 'uploads/student_images/' . $filename; + } + } + } + } + // 3. Fallback to normal direct file upload + elseif ($request->hasFile('profile_image')) { + $file = $request->file('profile_image'); + $filename = time() . '_' . uniqid() . '.' . $file->getClientOriginalExtension(); + $destinationPath = public_path('uploads/student_images'); + if (!file_exists($destinationPath)) { + mkdir($destinationPath, 0777, true); + } + $file->move($destinationPath, $filename); + + if (!empty($student->image) && file_exists(public_path($student->image))) { + @unlink(public_path($student->image)); + } + + $updateData['image'] = 'uploads/student_images/' . $filename; + } + + DB::table('student_details') + ->where('id', $student->id) + ->update($updateData); + + if (!empty($student->student_portal_log_id)) { + DB::table('student_portal_logs') + ->where('id', $student->student_portal_log_id) + ->update([ + 'email' => $request->email, + 'updated_at' => now(), + ]); + } + + $request->session()->put('student_name', $request->full_name); + $request->session()->put('student_email', $request->email); + + return redirect()->back()->with('success', 'Profile updated successfully!'); + } } \ No newline at end of file diff --git a/public/uploads/student_images/1786340066_6a7962e2b508b.png b/public/uploads/student_images/1786340066_6a7962e2b508b.png new file mode 100644 index 0000000000000000000000000000000000000000..0eb0dded1d066863d13b825e09fa5515d7f3cad7 GIT binary patch literal 29720 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 literal 0 HcmV?d00001 diff --git a/resources/views/StudentPortal.blade.php b/resources/views/StudentPortal.blade.php index 2a4f236..f4d9243 100644 --- a/resources/views/StudentPortal.blade.php +++ b/resources/views/StudentPortal.blade.php @@ -1,344 +1,493 @@ @extends('layouts.studentportalnav') -@section('title', 'Dashboard') +@section('title', 'Student Dashboard') @section('content') -
+
- -
-
-

Welcome Back, {{ Auth::check() ? Auth::user()->first_name : 'Student' }}!

-

Manage your academic activities and course updates from your dashboard.

-
- - @if(Auth::check()) -
- {{ strtoupper(substr(Auth::user()->first_name, 0, 1)) }} + +
+
+
+
+ + Active Academic Year 2026 + + {{ date('l, F j, Y') }} +
+

+ Welcome Back, {{ Auth::check() ? Auth::user()->first_name : 'Student' }}! 👋 +

+

+ Manage your academic activities, course schedules, and exam performance directly from your portal dashboard. +

- @endif + + @if(Auth::check()) +
+
+ {{ strtoupper(substr(Auth::user()->first_name, 0, 1)) }} +
+
+
{{ Auth::user()->first_name }} {{ Auth::user()->last_name }}
+
{{ Auth::user()->email }}
+
+
+ @endif +
- -
+ +
-
-
-
- +
+
+
+
+ +
+ + Active + +
+
+
6
+
Enrolled Courses
-

6

-

Enrolled Courses

-
-
-
- +
+
+
+
+ +
+ + Pending + +
+
+
3
+
Assignments Due
-

3

-

Assignments

-
-
-
- +
+
+
+
+ +
+ + Grade B+ + +
+
+
78%
+
Average Result
-

78%

-

Average Result

-
-
-
- +
+
+
+
+ +
+ + Upcoming + +
+
+
2
+
Exam Notices
-

2

-

Exam Notices

- -
- Student Services + + -
+ +
+
+ Official Academic Documents (PDF) +
- + - - -
- Official Document Downloads (PDF) -
- - diff --git a/resources/views/StudentProfile.blade.php b/resources/views/StudentProfile.blade.php index 64a8d85..94b030d 100644 --- a/resources/views/StudentProfile.blade.php +++ b/resources/views/StudentProfile.blade.php @@ -4,289 +4,836 @@ @section('content') - - - - - - - - + + + -
+
- -
-

Student Profile

-

Manage your personal information and academic details.

+ @if(session('success')) + + @endif + + @if(session('error')) + + @endif + + +
+
+
+ + Verified Student Profile + +
+

+ Student Profile +

+

+ Manage your personal information, credentials, and academic details. +

+
-
- +
+
-
- Profile Image +
+
+
+ @if(!empty($student->image)) + {{ $student->full_name }} + @endif +
+ {{ strtoupper(substr($student->full_name ?? 'S', 0, 1)) }} +
+
+
-

{{ $student->full_name }}

+

{{ $student->full_name }}

- - Student ID : {{ $student->student_id }} - -
+
+ + Student ID : {{ $student->student_id }} + +
- +
+ +
-
-

- Personal Information +
+

+ Personal Information

-
- Full Name - {{ $student->full_name }} +
+ Full Name + {{ $student->full_name }}
-
- NIC / Passport - {{ $student->nic_passport }} +
+ NIC / Passport + {{ $student->nic_passport }}
-
- Date of Birth - +
+ Date of Birth + {{ !empty($student->date_of_birth) ? date('d F Y', strtotime($student->date_of_birth)) : 'N/A' }}
-
- Gender - {{ $student->gender }} +
+ Gender + {{ $student->gender }}
-
- Email - {{ $student->email }} +
+ Email Address + {{ $student->email }}
-
- Phone - {{ $student->phone }} +
+ Phone Number + {{ $student->phone }}
-
- +
+
-
-

- Educational Background +
+

+ Educational Background

-
- Qualification - {{ $student->qualification }} +
+ Qualification + {{ $student->qualification }}
-
- Institute - {{ $student->institute }} +
+ Institute + {{ $student->institute }}
-
- Year Completed - {{ $student->year_completed }} +
+ Year Completed + {{ $student->year_completed }}
-
-

Course Details

+
+

+ Course Details +

-
- {{ $student->course_name }} +
+ +
+ Enrolled Course + {{ $student->course_name }} +
-
- Duration : {{ $student->duration }} +
+ +
+ Duration + {{ $student->duration }} +
-
- Current Semester : {{ $student->current_semester }} +
+ +
+ Current Semester + {{ $student->current_semester }} +
-
- Trainer : {{ $student->trainer_name }} +
+ +
+ Instructor / Trainer + {{ $student->trainer_name }} +
+ + + + + + + + + @endsection \ No newline at end of file diff --git a/resources/views/layouts/studentportalnav.blade.php b/resources/views/layouts/studentportalnav.blade.php index 6b4dee2..9559086 100644 --- a/resources/views/layouts/studentportalnav.blade.php +++ b/resources/views/layouts/studentportalnav.blade.php @@ -6,27 +6,28 @@ @yield('title', 'Student Portal - Automobile Academic') - + + -
+
- -