set lms parts
This commit is contained in:
parent
705917497d
commit
5d76c711f7
|
|
@ -3,40 +3,75 @@
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\Models\Feedback;
|
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class FeedbackController extends Controller
|
class FeedbackController extends Controller
|
||||||
{
|
{
|
||||||
// public function feedback(Request $request)
|
|
||||||
// {
|
|
||||||
|
|
||||||
// $request->validate([
|
public function index(Request $request)
|
||||||
// 'feedback_type' => 'required',
|
{
|
||||||
// 'subject' => 'required|string|max:255',
|
$studentLogId = session('student_log_id') ?? session('student_id');
|
||||||
// 'feedback_text' => 'required|string',
|
|
||||||
// ]);
|
if (!$studentLogId) {
|
||||||
|
return redirect('/')->with('error', 'Please login first!');
|
||||||
|
}
|
||||||
|
|
||||||
|
$feedbacks = DB::table('feedback')
|
||||||
|
->where('student_id', $studentLogId)
|
||||||
|
->orderBy('created_at', 'desc')
|
||||||
|
->get();
|
||||||
|
|
||||||
|
return view('Feedback&Complain', compact('feedbacks'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// $studentLogId = session('student_portal_log_id');
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
$studentLogId = session('student_log_id') ?? session('student_id');
|
||||||
|
|
||||||
|
if (!$studentLogId) {
|
||||||
|
return redirect('/')->with('error', 'Please login first to submit!');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// if (!$studentLogId) {
|
$isComplaint = $request->has('is_complaint') && $request->is_complaint == "1";
|
||||||
// return redirect('/')->with('error', 'Please login first to submit feedback!');
|
|
||||||
// }
|
if ($isComplaint) {
|
||||||
|
|
||||||
|
$request->validate([
|
||||||
|
'complaint_category' => 'required',
|
||||||
|
'complaint_title' => 'required|string|max:255',
|
||||||
|
'complaint_details' => 'required|string',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$type = 'Complaint - ' . $request->complaint_category;
|
||||||
|
$subject = $request->complaint_title;
|
||||||
|
$text = $request->complaint_details;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$request->validate([
|
||||||
|
'feedback_type' => 'required',
|
||||||
|
'subject' => 'required|string|max:255',
|
||||||
|
'feedback_text' => 'required|string',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$type = 'Feedback - ' . $request->feedback_type;
|
||||||
|
$subject = $request->subject;
|
||||||
|
$text = $request->feedback_text;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// DB::table('feedbacks')->insert([
|
DB::table('feedback')->insert([
|
||||||
// 'student_id' => $studentLogId,
|
'student_id' => $studentLogId,
|
||||||
// 'feedback_type' => $request->feedback_type,
|
'feedback_type' => $type,
|
||||||
// 'subject' => $request->subject,
|
'subject' => $subject,
|
||||||
// 'feedback_text' => $request->feedback_text,
|
'feedback_text' => $text,
|
||||||
// 'status' => 'Pending',
|
'status' => 'Pending',
|
||||||
// 'created_at' => now(),
|
'created_at' => now(),
|
||||||
// 'updated_at' => now(),
|
'updated_at' => now(),
|
||||||
// ]);
|
]);
|
||||||
|
|
||||||
|
return redirect()->back()->with('success', ($isComplaint ? 'Complaint' : 'Feedback') . ' submitted successfully!');
|
||||||
|
}
|
||||||
|
|
||||||
// return redirect()->back()->with('success', 'Feedback submitted successfully!');
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
@ -4,43 +4,52 @@ namespace App\Http\Controllers;
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use App\Models\StudentPortalLog ;
|
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class StudentPortalController extends Controller
|
class StudentPortalController extends Controller
|
||||||
{
|
{
|
||||||
public function studentlogin(Request $request)
|
|
||||||
{
|
public function studentlogin(Request $request)
|
||||||
|
{
|
||||||
|
|
||||||
$request->validate([
|
$request->validate([
|
||||||
'username' => 'required',
|
'username' => 'required|string',
|
||||||
'password' => 'required',
|
'password' => 'required|string',
|
||||||
'pin' => 'required|numeric',
|
'pin' => 'required|numeric',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
$student = DB::table('student_portal_logs')
|
$student = DB::table('student_portal_logs')
|
||||||
->where('email', $request->username)
|
->where('email', $request->username)
|
||||||
|
->orWhere('studentid', $request->username)
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
|
|
||||||
if ($student && Hash::check($request->password, $student->password) && $student->pin == $request->pin) {
|
if ($student && Hash::check($request->password, $student->password) && $student->pin == $request->pin) {
|
||||||
if ($student->status !== 'active' && $student->status !== '') {
|
|
||||||
return redirect('/')->with('error', 'Your account is inactive!');
|
if ($student->status !== 'active' && $student->status !== '' && !is_null($student->status)) {
|
||||||
|
return redirect()->back()->with('error', 'Your account is inactive!');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$request->session()->put('student_id', $student->studentid);
|
$request->session()->put('student_id', $student->studentid);
|
||||||
|
$request->session()->put('student_log_id', $student->id ?? null);
|
||||||
|
|
||||||
|
$name = trim(($student->first_name ?? '') . ' ' . ($student->last_name ?? ''));
|
||||||
|
$request->session()->put('student_name', $name ?: ($student->email ?? $student->studentid));
|
||||||
|
|
||||||
return redirect()->route('student.portal')->with('success', 'Logged in successfully!');
|
return redirect()->route('student.portal')->with('success', 'Logged in successfully!');
|
||||||
}
|
}
|
||||||
return redirect('/')->with('error', 'Invalid Email, Password, or PIN!');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
return redirect()->back()->with('error', 'Invalid Email/Username, Password, or PIN!');
|
||||||
|
}
|
||||||
|
|
||||||
public function showProfile(Request $request)
|
public function showProfile(Request $request)
|
||||||
{
|
{
|
||||||
|
|
||||||
$log_id = $request->session()->get('student_log_id');
|
$log_id = $request->session()->get('student_log_id');
|
||||||
$student_code = $request->session()->get('student_id');
|
$student_code = $request->session()->get('student_id');
|
||||||
|
|
||||||
|
|
||||||
if (!$log_id && !$student_code) {
|
if (!$log_id && !$student_code) {
|
||||||
return redirect('/')->with('error', 'Please login first!');
|
return redirect('/')->with('error', 'Please login first!');
|
||||||
}
|
}
|
||||||
|
|
@ -52,108 +61,33 @@ public function showProfile(Request $request)
|
||||||
$query->where('student_portal_log_id', $log_id);
|
$query->where('student_portal_log_id', $log_id);
|
||||||
}
|
}
|
||||||
if ($student_code) {
|
if ($student_code) {
|
||||||
|
|
||||||
|
if ($log_id) {
|
||||||
$query->orWhere('student_id', $student_code);
|
$query->orWhere('student_id', $student_code);
|
||||||
|
} else {
|
||||||
|
$query->where('student_id', $student_code);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
|
|
||||||
if (!$student) {
|
if (!$student) {
|
||||||
return redirect()->back()->with('error', 'Student details not found in database!');
|
return redirect()->route('student.portal')->with('error', 'Student details not found in database!');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return view('StudentProfile', compact('student'));
|
return view('StudentProfile', compact('student'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function studentlogout(Request $request)
|
||||||
|
{
|
||||||
// public function showProfile(Request $request)
|
$request->session()->forget(['student_id', 'student_log_id', 'student_name']);
|
||||||
// {
|
$request->session()->invalidate();
|
||||||
|
$request->session()->regenerateToken();
|
||||||
// $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!');
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// $student = DB::table('student_details')
|
|
||||||
// ->where('student_portal_log_id', $log_id)
|
|
||||||
// ->orWhere('student_id', $student_code)
|
|
||||||
// ->first();
|
|
||||||
|
|
||||||
|
|
||||||
// if (!$student) {
|
|
||||||
// return redirect()->back()->with('error', 'Student details not found in database!');
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return view('StudentProfile', compact('student'));
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// public function showProfile(Request $request)
|
|
||||||
// {
|
|
||||||
|
|
||||||
// $log_id = $request->session()->get('student_log_id');
|
|
||||||
// $student_code = $request->session()->get('student_id');
|
|
||||||
|
|
||||||
// if (!$log_id && !$student_code) {
|
|
||||||
// return redirect('/')->with('error', 'Please login first!');
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// $student = DB::table('student_details')
|
|
||||||
// ->where('student_portal_log_id', $log_id)
|
|
||||||
// ->orWhere('student_id', $student_code)
|
|
||||||
// ->first();
|
|
||||||
|
|
||||||
|
|
||||||
// if (!$student) {
|
|
||||||
// return redirect()->back()->with('error', 'Student details not found in database!');
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return view('StudentProfile', compact('student'));
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// public function showProfile(Request $request)
|
|
||||||
// {
|
|
||||||
|
|
||||||
// $log_id = $request->session()->get('student_id');
|
|
||||||
|
|
||||||
// if (!$log_id) {
|
|
||||||
// return redirect('/')->with('error', 'Please login first!');
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// $student = DB::table('student_details')
|
|
||||||
// ->where('student_id', $log_id)
|
|
||||||
// ->orWhere('student_portal_log_id', $log_id)
|
|
||||||
// ->first();
|
|
||||||
|
|
||||||
|
|
||||||
// if (!$student) {
|
|
||||||
// $student = (object)[
|
|
||||||
// 'image' => '',
|
|
||||||
// 'full_name' => 'Data Not Found (Check DB)',
|
|
||||||
// 'student_id' => $log_id,
|
|
||||||
// 'nic_passport' => 'N/A',
|
|
||||||
// 'date_of_birth' => '2000-01-01',
|
|
||||||
// 'gender' => 'N/A',
|
|
||||||
// 'email' => 'N/A',
|
|
||||||
// 'phone' => 'N/A',
|
|
||||||
// 'qualification' => 'N/A',
|
|
||||||
// 'institute' => 'N/A',
|
|
||||||
// 'year_completed' => 'N/A',
|
|
||||||
// 'course_name' => 'N/A',
|
|
||||||
// 'duration' => 'N/A',
|
|
||||||
// 'current_semester' => 'N/A',
|
|
||||||
// 'trainer_name' => 'N/A'
|
|
||||||
// ];
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return view('StudentProfile', compact('student'));
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
@ -11,11 +11,7 @@ class studentportalnavController extends Controller
|
||||||
{
|
{
|
||||||
|
|
||||||
$request->session()->forget(['student_log_id', 'student_id']);
|
$request->session()->forget(['student_log_id', 'student_id']);
|
||||||
|
|
||||||
|
|
||||||
Auth::logout();
|
Auth::logout();
|
||||||
|
|
||||||
|
|
||||||
$request->session()->invalidate();
|
$request->session()->invalidate();
|
||||||
$request->session()->regenerateToken();
|
$request->session()->regenerateToken();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,21 +6,19 @@
|
||||||
|
|
||||||
<!-- Bootstrap 5 -->
|
<!-- Bootstrap 5 -->
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Font Awesome -->
|
<!-- Font Awesome -->
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||||
|
|
||||||
<!-- Google Font -->
|
<!-- Google Font -->
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
:root {
|
:root {
|
||||||
--theme-navy: #2D355B; /* Primary Navy */
|
--theme-navy: #2D355B;
|
||||||
--theme-navy-dark: #1F2541; /* Dark Navy */
|
--theme-navy-dark: #1F2541;
|
||||||
--theme-red: #822424; /* Primary Accent Red */
|
--theme-red: #822424;
|
||||||
--theme-red-hover: #df2c3e; /* Red Hover */
|
--theme-red-hover: #df2c3e;
|
||||||
--theme-yellow: #FFEA85; /* Accent Yellow/Gold */
|
--theme-yellow: #FFEA85;
|
||||||
--bg-light: #F6F6F6; /* Page Background */
|
--bg-light: #F6F6F6;
|
||||||
--white: #ffffff;
|
--white: #ffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -29,7 +27,6 @@ body {
|
||||||
background: var(--bg-light);
|
background: var(--bg-light);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Header */
|
|
||||||
.feedback-header {
|
.feedback-header {
|
||||||
background: linear-gradient(135deg, #2B293F 0%, #94A6F959 100%) !important;
|
background: linear-gradient(135deg, #2B293F 0%, #94A6F959 100%) !important;
|
||||||
color: var(--white);
|
color: var(--white);
|
||||||
|
|
@ -40,16 +37,6 @@ body {
|
||||||
border-left: 5px solid var(--theme-red);
|
border-left: 5px solid var(--theme-red);
|
||||||
}
|
}
|
||||||
|
|
||||||
.feedback-header h2 {
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
.feedback-header p {
|
|
||||||
color: rgba(255, 255, 255, 0.85);
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Cards */
|
|
||||||
.feedback-card {
|
.feedback-card {
|
||||||
background: var(--white);
|
background: var(--white);
|
||||||
border: 1px solid #e2e8f0;
|
border: 1px solid #e2e8f0;
|
||||||
|
|
@ -70,28 +57,19 @@ body {
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Form Controls */
|
|
||||||
.form-label {
|
.form-label {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: var(--theme-navy);
|
color: var(--theme-navy);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-control,
|
.form-control, .form-select {
|
||||||
.form-select {
|
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
padding: 12px 15px;
|
padding: 12px 15px;
|
||||||
border: 1px solid #cbd5e1;
|
border: 1px solid #cbd5e1;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-control:focus,
|
|
||||||
.form-select:focus {
|
|
||||||
border-color: var(--theme-navy);
|
|
||||||
box-shadow: 0 0 0 0.25rem rgba(45, 53, 91, 0.15);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Buttons */
|
|
||||||
.submit-btn {
|
.submit-btn {
|
||||||
background: var(--theme-red) !important;
|
background: var(--theme-red) !important;
|
||||||
color: var(--white) !important;
|
color: var(--white) !important;
|
||||||
|
|
@ -108,7 +86,6 @@ body {
|
||||||
color: var(--white) !important;
|
color: var(--white) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* History Card */
|
|
||||||
.history-card {
|
.history-card {
|
||||||
margin-top: 35px;
|
margin-top: 35px;
|
||||||
background: var(--white);
|
background: var(--white);
|
||||||
|
|
@ -124,11 +101,6 @@ body {
|
||||||
padding: 18px 25px;
|
padding: 18px 25px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.history-head h5 {
|
|
||||||
font-weight: 700;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table th {
|
.table th {
|
||||||
background: #f8fafc;
|
background: #f8fafc;
|
||||||
color: var(--theme-navy);
|
color: var(--theme-navy);
|
||||||
|
|
@ -142,7 +114,6 @@ body {
|
||||||
padding: 14px 20px;
|
padding: 14px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Status Badges */
|
|
||||||
.badge-status {
|
.badge-status {
|
||||||
padding: 6px 14px;
|
padding: 6px 14px;
|
||||||
border-radius: 30px;
|
border-radius: 30px;
|
||||||
|
|
@ -160,12 +131,6 @@ body {
|
||||||
background: #d1e7dd;
|
background: #d1e7dd;
|
||||||
color: #0f5132;
|
color: #0f5132;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width:768px) {
|
|
||||||
.feedback-header, .feedback-card {
|
|
||||||
padding: 25px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div class="container py-4">
|
<div class="container py-4">
|
||||||
|
|
@ -176,7 +141,7 @@ body {
|
||||||
<p>Share your suggestions, feedback, or complaints with the Automobile Engineering Academy management team.</p>
|
<p>Share your suggestions, feedback, or complaints with the Automobile Engineering Academy management team.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Alert Messages (Validation & Success) -->
|
<!-- Alert Messages -->
|
||||||
@if(session('success'))
|
@if(session('success'))
|
||||||
<div class="alert alert-success alert-dismissible fade show rounded-3 mb-4" role="alert">
|
<div class="alert alert-success alert-dismissible fade show rounded-3 mb-4" role="alert">
|
||||||
<i class="fas fa-check-circle me-2"></i>{{ session('success') }}
|
<i class="fas fa-check-circle me-2"></i>{{ session('success') }}
|
||||||
|
|
@ -184,6 +149,13 @@ body {
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
|
@if(session('error'))
|
||||||
|
<div class="alert alert-danger alert-dismissible fade show rounded-3 mb-4" role="alert">
|
||||||
|
<i class="fas fa-exclamation-circle me-2"></i>{{ session('error') }}
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
@if ($errors->any())
|
@if ($errors->any())
|
||||||
<div class="alert alert-danger rounded-3 mb-4">
|
<div class="alert alert-danger rounded-3 mb-4">
|
||||||
<ul class="mb-0 ps-3">
|
<ul class="mb-0 ps-3">
|
||||||
|
|
@ -238,7 +210,7 @@ body {
|
||||||
|
|
||||||
<form id="complaintForm" action="{{ route('feedback.store') }}" method="POST">
|
<form id="complaintForm" action="{{ route('feedback.store') }}" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
<input type="hidden" name="is_complaint" value="1"> <!-- IF NEEDED FOR BACKEND -->
|
<input type="hidden" name="is_complaint" value="1">
|
||||||
|
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label class="form-label"> Complaint Category</label>
|
<label class="form-label"> Complaint Category</label>
|
||||||
|
|
@ -269,10 +241,10 @@ body {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Previous History Table -->
|
<!-- Dynamic History Table -->
|
||||||
<div class="history-card">
|
<div class="history-card">
|
||||||
<div class="history-head">
|
<div class="history-head">
|
||||||
<h5><i class="fas fa-history me-2" style="color: var(--theme-yellow);"></i> Previous Requests</h5>
|
<h5 class="m-0"><i class="fas fa-history me-2" style="color: var(--theme-yellow);"></i> Previous Requests</h5>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
|
|
@ -282,23 +254,36 @@ body {
|
||||||
<th> Type </th>
|
<th> Type </th>
|
||||||
<th> Subject </th>
|
<th> Subject </th>
|
||||||
<th> Date </th>
|
<th> Date </th>
|
||||||
<th>Status</th>
|
<th> Status </th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
<tbody id="historyTableBody">
|
<tbody id="historyTableBody">
|
||||||
|
@forelse ($feedbacks as $item)
|
||||||
<tr>
|
<tr>
|
||||||
<td><span class="fw-semibold" style="color: var(--theme-navy);">Feedback</span></td>
|
<td>
|
||||||
<td>Workshop Equipment </td>
|
<span class="fw-semibold" style="color: var(--theme-navy);">
|
||||||
<td>10 July 2026</td>
|
{{ $item->feedback_type }}
|
||||||
<td><span class="badge-status resolved"><i class="fas fa-check me-1"></i> Resolved</span></td>
|
</span>
|
||||||
|
</td>
|
||||||
|
<td>{{ $item->subject }}</td>
|
||||||
|
<td>{{ \Carbon\Carbon::parse($item->created_at)->format('d M Y') }}</td>
|
||||||
|
<td>
|
||||||
|
@if(strtolower($item->status) == 'resolved')
|
||||||
|
<span class="badge-status resolved"><i class="fas fa-check me-1"></i> Resolved</span>
|
||||||
|
@else
|
||||||
|
<span class="badge-status pending"><i class="fas fa-clock me-1"></i> {{ $item->status ?? 'Pending' }}</span>
|
||||||
|
@endif
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@empty
|
||||||
<tr>
|
<tr>
|
||||||
<td><span class="fw-semibold" style="color: var(--theme-navy);">Complaint</span></td>
|
<td colspan="4" class="text-center py-4 text-muted">
|
||||||
<td>Class Schedule Issue </td>
|
<i class="fas fa-inbox fa-2x mb-2 d-block"></i>
|
||||||
<td>05 July 2026 </td>
|
No feedback or complaints submitted yet.
|
||||||
<td><span class="badge-status pending"><i class="fas fa-clock me-1"></i> Pending </span></td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@endforelse
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -11,14 +11,13 @@
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
/* Global Root Variables based on Master Layout */
|
|
||||||
:root {
|
:root {
|
||||||
--theme-navy: #2D355B; /* Primary Dark Navy */
|
--theme-navy: #2D355B;
|
||||||
--theme-footer-navy: #1F2541; /* Dark Navy for active/hover states */
|
--theme-footer-navy: #1F2541;
|
||||||
--theme-red: #822424; /* Primary Accent Red */
|
--theme-red: #822424;
|
||||||
--theme-red-hover: #df2c3e; /* Red Hover state */
|
--theme-red-hover: #df2c3e;
|
||||||
--theme-yellow: #FFEA85; /* Accent Yellow/Gold */
|
--theme-yellow: #FFEA85;
|
||||||
--theme-bg: #F6F6F6; /* Light Background */
|
--theme-bg: #F6F6F6;
|
||||||
--sidebar-width: 260px;
|
--sidebar-width: 260px;
|
||||||
--text-dark: #333333;
|
--text-dark: #333333;
|
||||||
}
|
}
|
||||||
|
|
@ -38,7 +37,6 @@
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------- Sidebar Style ---------- */
|
|
||||||
.sidebar {
|
.sidebar {
|
||||||
width: var(--sidebar-width);
|
width: var(--sidebar-width);
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
|
|
@ -91,7 +89,6 @@
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hover & Active states matched to Main Theme */
|
|
||||||
.sidebar .nav-link:hover {
|
.sidebar .nav-link:hover {
|
||||||
background: rgba(255, 255, 255, 0.08);
|
background: rgba(255, 255, 255, 0.08);
|
||||||
color: var(--theme-yellow) !important;
|
color: var(--theme-yellow) !important;
|
||||||
|
|
@ -105,7 +102,6 @@
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* User Profile Section inside Sidebar */
|
|
||||||
.sidebar-user-profile {
|
.sidebar-user-profile {
|
||||||
padding: 15px 24px;
|
padding: 15px 24px;
|
||||||
border-top: 1px solid rgba(255,255,255,.15);
|
border-top: 1px solid rgba(255,255,255,.15);
|
||||||
|
|
@ -127,20 +123,6 @@
|
||||||
color: var(--theme-yellow);
|
color: var(--theme-yellow);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Custom Theme Buttons */
|
|
||||||
.btn-theme-register {
|
|
||||||
background-color: var(--theme-red);
|
|
||||||
color: white;
|
|
||||||
border: 1px solid #ffffff;
|
|
||||||
transition: background-color 0.2s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-theme-register:hover {
|
|
||||||
background-color: var(--theme-red-hover);
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------- Main Content Layout ---------- */
|
|
||||||
.main {
|
.main {
|
||||||
margin-left: var(--sidebar-width);
|
margin-left: var(--sidebar-width);
|
||||||
width: calc(100% - var(--sidebar-width));
|
width: calc(100% - var(--sidebar-width));
|
||||||
|
|
@ -150,7 +132,6 @@
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mobile Header Toggle Bar */
|
|
||||||
.mobile-header {
|
.mobile-header {
|
||||||
display: none;
|
display: none;
|
||||||
background: var(--theme-navy);
|
background: var(--theme-navy);
|
||||||
|
|
@ -187,7 +168,6 @@
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Overlay Background when sidebar open on Mobile */
|
|
||||||
.sidebar-overlay {
|
.sidebar-overlay {
|
||||||
display: none;
|
display: none;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
|
@ -206,7 +186,6 @@
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Responsive Breakpoints */
|
|
||||||
@media (max-width: 991px) {
|
@media (max-width: 991px) {
|
||||||
.sidebar {
|
.sidebar {
|
||||||
left: calc(-1 * var(--sidebar-width));
|
left: calc(-1 * var(--sidebar-width));
|
||||||
|
|
@ -239,17 +218,16 @@
|
||||||
<i class="fa-solid fa-car-side me-1"></i> AutoEdu Portal
|
<i class="fa-solid fa-car-side me-1"></i> AutoEdu Portal
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Mobile View User Profile Dropdown -->
|
|
||||||
<div class="mobile-user-profile">
|
<div class="mobile-user-profile">
|
||||||
@if(Auth::check())
|
@if(session()->has('student_id'))
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<a class="text-white text-decoration-none dropdown-toggle d-flex align-items-center gap-2" href="#" role="button" id="userMenuMobile" data-bs-toggle="dropdown" aria-expanded="false">
|
<a class="text-white text-decoration-none dropdown-toggle d-flex align-items-center gap-2" href="#" role="button" id="userMenuMobile" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
<i class="fa-solid fa-circle-user" style="font-size: 26px; color: var(--theme-yellow);"></i>
|
<i class="fa-solid fa-circle-user" style="font-size: 26px; color: var(--theme-yellow);"></i>
|
||||||
<span class="fw-semibold small">{{ Auth::user()->first_name }}</span>
|
<span class="fw-semibold small">{{ session('student_name') }}</span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-menu-end shadow" aria-labelledby="userMenuMobile">
|
<ul class="dropdown-menu dropdown-menu-end shadow" aria-labelledby="userMenuMobile">
|
||||||
<li>
|
<li>
|
||||||
<a class="dropdown-item" href="/StudentProfile">
|
<a class="dropdown-item" href="{{ route('StudentProfile') }}">
|
||||||
<i class="fa-solid fa-user me-2"></i> Profile
|
<i class="fa-solid fa-user me-2"></i> Profile
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
@ -262,12 +240,11 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<a href="/signin" class="btn btn-sm btn-outline-light"><i class="fa-solid fa-right-to-bracket me-1"></i> Sign In</a>
|
<a href="/" class="btn btn-sm btn-outline-light"><i class="fa-solid fa-right-to-bracket me-1"></i> Sign In</a>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<!-- Overlay dim background element -->
|
|
||||||
<div class="sidebar-overlay" id="sidebarOverlay"></div>
|
<div class="sidebar-overlay" id="sidebarOverlay"></div>
|
||||||
|
|
||||||
<!-- Sidebar Navigation -->
|
<!-- Sidebar Navigation -->
|
||||||
|
|
@ -276,7 +253,6 @@
|
||||||
<i class="fa-solid fa-car-side me-2"></i> AutoEdu
|
<i class="fa-solid fa-car-side me-2"></i> AutoEdu
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Navigation Links -->
|
|
||||||
<nav class="nav">
|
<nav class="nav">
|
||||||
<a href="/Dashboard" class="nav-link {{ request()->is('Dashboard*') ? 'active' : '' }}">
|
<a href="/Dashboard" class="nav-link {{ request()->is('Dashboard*') ? 'active' : '' }}">
|
||||||
<i class="fa-solid fa-gauge"></i> Dashboard
|
<i class="fa-solid fa-gauge"></i> Dashboard
|
||||||
|
|
@ -296,29 +272,22 @@
|
||||||
<a href="/Feedback&Complain" class="nav-link {{ request()->is('Feedback&Complain*') ? 'active' : '' }}">
|
<a href="/Feedback&Complain" class="nav-link {{ request()->is('Feedback&Complain*') ? 'active' : '' }}">
|
||||||
<i class="fa-solid fa-comments"></i> Feedback & Complain
|
<i class="fa-solid fa-comments"></i> Feedback & Complain
|
||||||
</a>
|
</a>
|
||||||
<!-- <a href="/StudentProfile" class="nav-link {{ request()->is('StudentProfile*') ? 'active' : '' }}">
|
|
||||||
<i class="fa-solid fa-user"></i> Student Profile
|
|
||||||
</a> -->
|
|
||||||
<a href="{{ route('StudentProfile') }}" class="nav-link {{ request()->routeIs('StudentProfile') ? 'active' : '' }}">
|
<a href="{{ route('StudentProfile') }}" class="nav-link {{ request()->routeIs('StudentProfile') ? 'active' : '' }}">
|
||||||
<i class="fa-solid fa-user"></i> Student Profile
|
<i class="fa-solid fa-user"></i> Student Profile
|
||||||
</a>
|
</a>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Sidebar User Profile (Desktop View Footer) -->
|
|
||||||
<div class="sidebar-user-profile">
|
<div class="sidebar-user-profile">
|
||||||
@if(Auth::check())
|
@if(session()->has('student_id'))
|
||||||
@php
|
|
||||||
$displayName = Auth::user()->first_name . ' ' . Auth::user()->last_name;
|
|
||||||
@endphp
|
|
||||||
<div class="dropdown dropup">
|
<div class="dropdown dropup">
|
||||||
<a class="user-dropdown-toggle dropdown-toggle" href="#" role="button" id="userMenuDesktop" data-bs-toggle="dropdown" aria-expanded="false">
|
<a class="user-dropdown-toggle dropdown-toggle" href="#" role="button" id="userMenuDesktop" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
<i class="fa-solid fa-circle-user" style="font-size: 24px; color: var(--theme-yellow);"></i>
|
<i class="fa-solid fa-circle-user" style="font-size: 24px; color: var(--theme-yellow);"></i>
|
||||||
<span class="text-truncate" style="max-width: 150px;">{{ $displayName }}</span>
|
<span class="text-truncate" style="max-width: 150px;">{{ session('student_name') }}</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<ul class="dropdown-menu dropdown-menu-start shadow w-100" aria-labelledby="userMenuDesktop">
|
<ul class="dropdown-menu dropdown-menu-start shadow w-100" aria-labelledby="userMenuDesktop">
|
||||||
<li>
|
<li>
|
||||||
<a class="dropdown-item" href="/StudentProfile">
|
<a class="dropdown-item" href="{{ route('StudentProfile') }}">
|
||||||
<i class="fa-solid fa-user me-2"></i> Profile
|
<i class="fa-solid fa-user me-2"></i> Profile
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
@ -332,25 +301,40 @@
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="d-flex gap-2">
|
<div class="d-flex gap-2">
|
||||||
<a href="/signin" class="btn btn-outline-light btn-sm w-50">Sign In</a>
|
<a href="/" class="btn btn-outline-light btn-sm w-100">Sign In</a>
|
||||||
<a href="/signup" class="btn btn-theme-register btn-sm w-50">Register</a>
|
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
<!-- Main Content Area -->
|
|
||||||
<main class="main">
|
<main class="main">
|
||||||
@yield('content')
|
@yield('content')
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<!-- Scripts -->
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
// Sidebar Toggle Logic
|
||||||
|
const toggleBtn = document.getElementById('toggleBtn');
|
||||||
|
const sidebar = document.getElementById('sidebar');
|
||||||
|
const overlay = document.getElementById('sidebarOverlay');
|
||||||
|
|
||||||
function submitLogout() {
|
if(toggleBtn) {
|
||||||
|
toggleBtn.addEventListener('click', () => {
|
||||||
|
sidebar.classList.toggle('show');
|
||||||
|
overlay.classList.toggle('show');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(overlay) {
|
||||||
|
overlay.addEventListener('click', () => {
|
||||||
|
sidebar.classList.remove('show');
|
||||||
|
overlay.classList.remove('show');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Logout Logic
|
||||||
|
function submitLogout() {
|
||||||
const tokenEl = document.querySelector('meta[name="csrf-token"]');
|
const tokenEl = document.querySelector('meta[name="csrf-token"]');
|
||||||
|
|
||||||
fetch('/studentlogout', {
|
fetch('/studentlogout', {
|
||||||
|
|
@ -364,8 +348,7 @@ function submitLogout() {
|
||||||
.then(res => res.json())
|
.then(res => res.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.success) {
|
if (data.success) {
|
||||||
|
window.location.href = '/';
|
||||||
window.location.href = '/signin';
|
|
||||||
} else {
|
} else {
|
||||||
alert('Logout failed. Please try again.');
|
alert('Logout failed. Please try again.');
|
||||||
}
|
}
|
||||||
|
|
@ -374,56 +357,7 @@ function submitLogout() {
|
||||||
console.error('Error:', err);
|
console.error('Error:', err);
|
||||||
alert('Server side error occurred during logout.');
|
alert('Server side error occurred during logout.');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- <script>
|
|
||||||
// Sidebar Toggle Logic
|
|
||||||
const toggleBtn = document.getElementById('toggleBtn');
|
|
||||||
const sidebar = document.getElementById('sidebar');
|
|
||||||
const overlay = document.getElementById('sidebarOverlay');
|
|
||||||
|
|
||||||
toggleBtn.addEventListener('click', () => {
|
|
||||||
sidebar.classList.toggle('show');
|
|
||||||
overlay.classList.toggle('show');
|
|
||||||
});
|
|
||||||
|
|
||||||
overlay.addEventListener('click', () => {
|
|
||||||
sidebar.classList.remove('show');
|
|
||||||
overlay.classList.remove('show');
|
|
||||||
});
|
|
||||||
|
|
||||||
// Dynamic Logout Logic
|
|
||||||
function submitLogout() {
|
|
||||||
const tokenEl = document.querySelector('meta[name="csrf-token"]');
|
|
||||||
|
|
||||||
fetch('/studentlogout', {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
'Accept': 'application/json',
|
|
||||||
'X-CSRF-TOKEN': tokenEl ? tokenEl.getAttribute('content') : ''
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.then(res => {
|
|
||||||
if (!res.ok) {
|
|
||||||
return res.text().then(text => { throw new Error(text) });
|
|
||||||
}
|
|
||||||
return res.json();
|
|
||||||
})
|
|
||||||
.then(data => {
|
|
||||||
if (data.success) {
|
|
||||||
alert('Logged out successfully!');
|
|
||||||
window.location.href = '/students';
|
|
||||||
} else {
|
|
||||||
alert('Logout failed. Please try again.');
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
console.error('Error:', err);
|
|
||||||
alert('Server side error occurred during logout.');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script> -->
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -309,8 +309,8 @@ body {
|
||||||
|
|
||||||
.custom-feature-card:hover {
|
.custom-feature-card:hover {
|
||||||
transform: translateY(-5px);
|
transform: translateY(-5px);
|
||||||
background: rgba(255, 255, 255, 0.07);
|
background: rgba(0, 0, 0, 0.07);
|
||||||
border-color: rgba(255, 255, 255, 0.2);
|
border-color: rgb(255, 255, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon-box {
|
.icon-box {
|
||||||
|
|
|
||||||
137
routes/web.php
137
routes/web.php
|
|
@ -6,15 +6,13 @@ use App\Http\Controllers\StudentPortalController;
|
||||||
use App\Http\Controllers\ContactMsgController;
|
use App\Http\Controllers\ContactMsgController;
|
||||||
use App\Http\Controllers\FeedbackController;
|
use App\Http\Controllers\FeedbackController;
|
||||||
use App\Http\Controllers\studentportalnavController;
|
use App\Http\Controllers\studentportalnavController;
|
||||||
use App\Http\Controllers\auth\asswordController;
|
|
||||||
use App\Http\Controllers\Auth\ForgotPasswordController;
|
use App\Http\Controllers\Auth\ForgotPasswordController;
|
||||||
use App\Http\Controllers\coursesController;
|
use App\Http\Controllers\coursesController;
|
||||||
use App\Http\Controllers\ApplyController;
|
use App\Http\Controllers\ApplyController;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Web Routes
|
| Public Routes & General Pages
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -24,85 +22,106 @@ Route::get('/', function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::get('/courses', [coursesController::class, 'index'])->name('courses.index');
|
Route::get('/courses', [coursesController::class, 'index'])->name('courses.index');
|
||||||
|
Route::view('/students', 'students')->name('students');
|
||||||
|
Route::view('/abouts', 'abouts')->name('abouts');
|
||||||
|
Route::view('/contact', 'contacts')->name('contact');
|
||||||
|
|
||||||
|
// Guest Authentication View Routes
|
||||||
|
Route::view('/signin', 'signin')->name('signin');
|
||||||
|
Route::view('/signup', 'signup')->name('signup');
|
||||||
|
|
||||||
Route::middleware(['auth'])->group(function () {
|
/*
|
||||||
Route::get('/apply', [ApplyController::class, 'index'])->name('apply.index');
|
|--------------------------------------------------------------------------
|
||||||
Route::post('/apply', [ApplyController::class, 'store'])->name('apply.store');
|
| System Auth & Contact Routes (POST)
|
||||||
});
|
|--------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
Route::post('/signuppage', [AuthController::class, 'register']);
|
||||||
|
Route::post('/signin', [AuthController::class, 'login']);
|
||||||
|
Route::post('/custom-logout', [AuthController::class, 'logout']);
|
||||||
|
|
||||||
|
Route::post('/contact-submit', [ContactMsgController::class, 'store'])->name('contact.store');
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Password Reset Routes (For Guest Users)
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
Route::middleware('guest')->group(function () {
|
Route::middleware('guest')->group(function () {
|
||||||
|
|
||||||
Route::get('/password/reset', [ForgotPasswordController::class, 'index'])->name('password.request');
|
Route::get('/password/reset', [ForgotPasswordController::class, 'index'])->name('password.request');
|
||||||
Route::post('/resetEmail', [ForgotPasswordController::class, 'resetEmail'])->name('password.email');
|
Route::post('/resetEmail', [ForgotPasswordController::class, 'resetEmail'])->name('password.email');
|
||||||
Route::post('/verify-otp', [ForgotPasswordController::class, 'verifyOtpEmail'])->name('password.verify.otp');
|
Route::post('/verify-otp', [ForgotPasswordController::class, 'verifyOtpEmail'])->name('password.verify.otp');
|
||||||
Route::post('/update-password', [ForgotPasswordController::class, 'updatePassword'])->name('password.update');
|
Route::post('/update-password', [ForgotPasswordController::class, 'updatePassword'])->name('password.update');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Regular Auth Protected Routes (Laravel Default Auth)
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
Route::post('/studentlogout', [studentportalnavController::class, 'logout'])->name('student.logout');
|
*/
|
||||||
|
|
||||||
Route::get('/StudentProfile', [StudentPortalController::class, 'showProfile'])->name('StudentProfile');
|
|
||||||
|
|
||||||
// Route::post('/studentlogout', [studentportalnavController::class, 'logout']);
|
|
||||||
|
|
||||||
Route::post('/feedback/store', [FeedbackController::class, 'feedback']) ->middleware('auth') ->name('feedback.store');
|
|
||||||
|
|
||||||
Route::post('/contact-submit', [ContactMsgController::class, 'store'])->name('contact.store');
|
|
||||||
|
|
||||||
Route::put('/profile/update', [AuthController::class, 'update'])->name('profile.update')->middleware('auth');
|
|
||||||
|
|
||||||
Route::middleware(['auth'])->group(function () {
|
Route::middleware(['auth'])->group(function () {
|
||||||
|
Route::get('/apply', [ApplyController::class, 'index'])->name('apply.index');
|
||||||
|
Route::post('/apply', [ApplyController::class, 'store'])->name('apply.store');
|
||||||
|
Route::put('/profile/update', [AuthController::class, 'update'])->name('profile.update');
|
||||||
Route::get('/profile', [AuthController::class, 'profilview'])->name('profile.view');
|
Route::get('/profile', [AuthController::class, 'profilview'])->name('profile.view');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Authentication Routes
|
/*
|
||||||
Route::post('/signuppage', [AuthController::class, 'register']);
|
|--------------------------------------------------------------------------
|
||||||
Route::post('/signin', [AuthController::class, 'login']);
|
| STUDENT PORTAL ROUTES (Session-Based Auth)
|
||||||
Route::post('/custom-logout', [AuthController::class, 'logout']);
|
|--------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
// --- STUDENT PORTAL SYSTEM ROUTES ---
|
|
||||||
|
|
||||||
|
|
||||||
|
// Student Login & Logout Action Routes
|
||||||
Route::post('/student-login', [StudentPortalController::class, 'studentlogin'])->name('student.login.submit');
|
Route::post('/student-login', [StudentPortalController::class, 'studentlogin'])->name('student.login.submit');
|
||||||
// Route::get('/student-login', [StudentPortalController::class, 'studentlogin'])->name('student.login.submit');
|
Route::post('/studentlogout', [StudentPortalController::class, 'studentlogout'])->name('student.logout');
|
||||||
|
|
||||||
|
// Student Portal Section (Protected by Student Session Check)
|
||||||
|
Route::middleware(['web'])->group(function () {
|
||||||
|
|
||||||
|
// Main Portal Landing Page
|
||||||
Route::get('/student-portal', function () {
|
Route::get('/student-portal', function () {
|
||||||
if (!session()->has('student_id')) {
|
if (!session()->has('student_id')) {
|
||||||
return redirect()->back()->with('error', 'Please login first!');
|
return redirect('/signin')->with('error', 'Please login first!');
|
||||||
}
|
}
|
||||||
return view('StudentPortal');
|
return view('StudentPortal');
|
||||||
})->name('student.portal');
|
})->name('student.portal');
|
||||||
|
|
||||||
// Route::get('/student-logout', function () {
|
// Profile Page (DB Dynamic Data)
|
||||||
// session()->forget('student_id');
|
Route::get('/StudentProfile', [StudentPortalController::class, 'showProfile'])->name('StudentProfile');
|
||||||
// return redirect()->to('/students')->with('success', 'Logged out successfully!');
|
|
||||||
// })->name('student.logout');
|
// Other Navigation Sub-pages
|
||||||
|
Route::get('/Dashboard', function () {
|
||||||
|
if (!session()->has('student_id')) { return redirect('/signin')->with('error', 'Please login first!'); }
|
||||||
|
return view('StudentPortal');
|
||||||
|
})->name('Dashboard');
|
||||||
|
|
||||||
|
Route::get('/mycourse', function () {
|
||||||
|
if (!session()->has('student_id')) { return redirect('/signin')->with('error', 'Please login first!'); }
|
||||||
|
return view('mycourse');
|
||||||
|
})->name('mycourse');
|
||||||
|
|
||||||
|
Route::get('/timetable', function () {
|
||||||
|
if (!session()->has('student_id')) { return redirect('/signin')->with('error', 'Please login first!'); }
|
||||||
|
return view('timetable');
|
||||||
|
})->name('timetable');
|
||||||
|
|
||||||
|
Route::get('/Assignments', function () {
|
||||||
|
if (!session()->has('student_id')) { return redirect('/signin')->with('error', 'Please login first!'); }
|
||||||
|
return view('Assignments');
|
||||||
|
})->name('Assignments');
|
||||||
|
|
||||||
|
Route::get('/Studentguidelines', function () {
|
||||||
|
if (!session()->has('student_id')) { return redirect('/signin')->with('error', 'Please login first!'); }
|
||||||
|
return view('Studentguidelines');
|
||||||
|
})->name('Studentguidelines');
|
||||||
|
|
||||||
|
Route::get('/results', function () {
|
||||||
|
if (!session()->has('student_id')) { return redirect('/signin')->with('error', 'Please login first!'); }
|
||||||
|
return view('results');
|
||||||
|
})->name('results');
|
||||||
|
|
||||||
|
|
||||||
Route::view('/apply', 'apply')->name('apply');
|
Route::get('/Feedback&Complain', [FeedbackController::class, 'index'])->name('feedback.index');
|
||||||
// Route::view('/courses', 'courses')->name('courses');
|
Route::post('/Feedback&Complain/store', [FeedbackController::class, 'store'])->name('feedback.store');
|
||||||
Route::view('/students', 'students')->name('students');
|
|
||||||
Route::view('/abouts', 'abouts')->name('abouts');
|
|
||||||
Route::view('/contact', 'contacts')->name('contact');
|
|
||||||
|
|
||||||
|
});
|
||||||
Route::view('/signin', 'signin')->name('signin');
|
|
||||||
Route::view('/signup', 'signup')->name('signup');
|
|
||||||
|
|
||||||
//student protal
|
|
||||||
Route::view('/Dashboard','StudentPortal')->name('Dashboard');
|
|
||||||
Route::view('/mycourse', 'mycourse')->name('mycourse');
|
|
||||||
Route::view('/timetable','timetable')->name('timetable');
|
|
||||||
Route::view('/Assignments','Assignments')->name('Assignments');
|
|
||||||
Route::view('/Studentguidelines','Studentguidelines')->name('Studentguidelines');
|
|
||||||
Route::view('/results','results')->name('results');
|
|
||||||
Route::view('/Feedback&Complain','Feedback&Complain')->name('Feedback&Complain');
|
|
||||||
// Route::view('/StudentProfile','StudentProfile')->name('StudentProfile');
|
|
||||||
Loading…
Reference in New Issue