set lms parts

This commit is contained in:
imadhigp 2026-08-04 10:36:33 +05:30
parent 705917497d
commit 5d76c711f7
7 changed files with 300 additions and 397 deletions

View File

@ -3,40 +3,75 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Feedback;
use Illuminate\Support\Facades\DB;
class FeedbackController extends Controller
{
// public function feedback(Request $request)
// {
// $request->validate([
// 'feedback_type' => 'required',
// 'subject' => 'required|string|max:255',
// 'feedback_text' => 'required|string',
// ]);
public function index(Request $request)
{
$studentLogId = session('student_log_id') ?? session('student_id');
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'));
}
public function store(Request $request)
{
$studentLogId = session('student_log_id') ?? session('student_id');
if (!$studentLogId) {
return redirect('/')->with('error', 'Please login first to submit!');
}
$isComplaint = $request->has('is_complaint') && $request->is_complaint == "1";
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('feedback')->insert([
'student_id' => $studentLogId,
'feedback_type' => $type,
'subject' => $subject,
'feedback_text' => $text,
'status' => 'Pending',
'created_at' => now(),
'updated_at' => now(),
]);
return redirect()->back()->with('success', ($isComplaint ? 'Complaint' : 'Feedback') . ' submitted successfully!');
}
// $studentLogId = session('student_portal_log_id');
// if (!$studentLogId) {
// return redirect('/')->with('error', 'Please login first to submit feedback!');
// }
// DB::table('feedbacks')->insert([
// 'student_id' => $studentLogId,
// 'feedback_type' => $request->feedback_type,
// 'subject' => $request->subject,
// 'feedback_text' => $request->feedback_text,
// 'status' => 'Pending',
// 'created_at' => now(),
// 'updated_at' => now(),
// ]);
// return redirect()->back()->with('success', 'Feedback submitted successfully!');
// }
}

View File

@ -4,43 +4,52 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\StudentPortalLog ;
use Illuminate\Support\Facades\Hash;
class StudentPortalController extends Controller
{
public function studentlogin(Request $request)
{
$request->validate([
'username' => 'required',
'password' => 'required',
'username' => 'required|string',
'password' => 'required|string',
'pin' => 'required|numeric',
]);
$student = DB::table('student_portal_logs')
->where('email', $request->username)
->orWhere('studentid', $request->username)
->first();
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!');
}
$request->session()->put('student_id', $student->studentid);
return redirect()->route('student.portal')->with('success', 'Logged in successfully!');
}
return redirect('/')->with('error', 'Invalid Email, Password, or PIN!');
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_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()->back()->with('error', 'Invalid Email/Username, Password, or PIN!');
}
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!');
}
@ -52,108 +61,33 @@ public function showProfile(Request $request)
$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 details not found in database!');
return redirect()->route('student.portal')->with('error', 'Student details not found in database!');
}
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();
return response()->json(['success' => true]);
}
// 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_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'));
// }
}

View File

@ -11,11 +11,7 @@ class studentportalnavController extends Controller
{
$request->session()->forget(['student_log_id', 'student_id']);
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();

View File

@ -6,21 +6,19 @@
<!-- Bootstrap 5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<!-- Google Font -->
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
:root {
--theme-navy: #2D355B; /* Primary Navy */
--theme-navy-dark: #1F2541; /* Dark Navy */
--theme-red: #822424; /* Primary Accent Red */
--theme-red-hover: #df2c3e; /* Red Hover */
--theme-yellow: #FFEA85; /* Accent Yellow/Gold */
--bg-light: #F6F6F6; /* Page Background */
--theme-navy: #2D355B;
--theme-navy-dark: #1F2541;
--theme-red: #822424;
--theme-red-hover: #df2c3e;
--theme-yellow: #FFEA85;
--bg-light: #F6F6F6;
--white: #ffffff;
}
@ -29,7 +27,6 @@ body {
background: var(--bg-light);
}
/* Header */
.feedback-header {
background: linear-gradient(135deg, #2B293F 0%, #94A6F959 100%) !important;
color: var(--white);
@ -40,16 +37,6 @@ body {
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 {
background: var(--white);
border: 1px solid #e2e8f0;
@ -70,28 +57,19 @@ body {
margin-right: 8px;
}
/* Form Controls */
.form-label {
font-weight: 600;
color: var(--theme-navy);
font-size: 14px;
}
.form-control,
.form-select {
.form-control, .form-select {
border-radius: 10px;
padding: 12px 15px;
border: 1px solid #cbd5e1;
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 {
background: var(--theme-red) !important;
color: var(--white) !important;
@ -108,7 +86,6 @@ body {
color: var(--white) !important;
}
/* History Card */
.history-card {
margin-top: 35px;
background: var(--white);
@ -124,11 +101,6 @@ body {
padding: 18px 25px;
}
.history-head h5 {
font-weight: 700;
margin: 0;
}
.table th {
background: #f8fafc;
color: var(--theme-navy);
@ -142,7 +114,6 @@ body {
padding: 14px 20px;
}
/* Status Badges */
.badge-status {
padding: 6px 14px;
border-radius: 30px;
@ -160,12 +131,6 @@ body {
background: #d1e7dd;
color: #0f5132;
}
@media(max-width:768px) {
.feedback-header, .feedback-card {
padding: 25px;
}
}
</style>
<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>
</div>
<!-- Alert Messages (Validation & Success) -->
<!-- Alert Messages -->
@if(session('success'))
<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') }}
@ -184,6 +149,13 @@ body {
</div>
@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())
<div class="alert alert-danger rounded-3 mb-4">
<ul class="mb-0 ps-3">
@ -238,7 +210,7 @@ body {
<form id="complaintForm" action="{{ route('feedback.store') }}" method="POST">
@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">
<label class="form-label"> Complaint Category</label>
@ -269,10 +241,10 @@ body {
</div>
</div>
<!-- Previous History Table -->
<!-- Dynamic History Table -->
<div class="history-card">
<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 class="table-responsive">
@ -287,18 +259,31 @@ body {
</thead>
<tbody id="historyTableBody">
@forelse ($feedbacks as $item)
<tr>
<td><span class="fw-semibold" style="color: var(--theme-navy);">Feedback</span></td>
<td>Workshop Equipment </td>
<td>10 July 2026</td>
<td><span class="badge-status resolved"><i class="fas fa-check me-1"></i> Resolved</span></td>
<td>
<span class="fw-semibold" style="color: var(--theme-navy);">
{{ $item->feedback_type }}
</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>
@empty
<tr>
<td><span class="fw-semibold" style="color: var(--theme-navy);">Complaint</span></td>
<td>Class Schedule Issue </td>
<td>05 July 2026 </td>
<td><span class="badge-status pending"><i class="fas fa-clock me-1"></i> Pending </span></td>
<td colspan="4" class="text-center py-4 text-muted">
<i class="fas fa-inbox fa-2x mb-2 d-block"></i>
No feedback or complaints submitted yet.
</td>
</tr>
@endforelse
</tbody>
</table>
</div>

View File

@ -11,14 +11,13 @@
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
/* Global Root Variables based on Master Layout */
:root {
--theme-navy: #2D355B; /* Primary Dark Navy */
--theme-footer-navy: #1F2541; /* Dark Navy for active/hover states */
--theme-red: #822424; /* Primary Accent Red */
--theme-red-hover: #df2c3e; /* Red Hover state */
--theme-yellow: #FFEA85; /* Accent Yellow/Gold */
--theme-bg: #F6F6F6; /* Light Background */
--theme-navy: #2D355B;
--theme-footer-navy: #1F2541;
--theme-red: #822424;
--theme-red-hover: #df2c3e;
--theme-yellow: #FFEA85;
--theme-bg: #F6F6F6;
--sidebar-width: 260px;
--text-dark: #333333;
}
@ -38,7 +37,6 @@
overflow-x: hidden;
}
/* ---------- Sidebar Style ---------- */
.sidebar {
width: var(--sidebar-width);
height: 100vh;
@ -91,7 +89,6 @@
text-align: center;
}
/* Hover & Active states matched to Main Theme */
.sidebar .nav-link:hover {
background: rgba(255, 255, 255, 0.08);
color: var(--theme-yellow) !important;
@ -105,7 +102,6 @@
font-weight: 700;
}
/* User Profile Section inside Sidebar */
.sidebar-user-profile {
padding: 15px 24px;
border-top: 1px solid rgba(255,255,255,.15);
@ -127,20 +123,6 @@
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 {
margin-left: var(--sidebar-width);
width: calc(100% - var(--sidebar-width));
@ -150,7 +132,6 @@
transition: all 0.3s ease;
}
/* Mobile Header Toggle Bar */
.mobile-header {
display: none;
background: var(--theme-navy);
@ -187,7 +168,6 @@
color: #ffffff;
}
/* Overlay Background when sidebar open on Mobile */
.sidebar-overlay {
display: none;
position: fixed;
@ -206,7 +186,6 @@
opacity: 1;
}
/* Responsive Breakpoints */
@media (max-width: 991px) {
.sidebar {
left: calc(-1 * var(--sidebar-width));
@ -239,17 +218,16 @@
<i class="fa-solid fa-car-side me-1"></i> AutoEdu Portal
</div>
<!-- Mobile View User Profile Dropdown -->
<div class="mobile-user-profile">
@if(Auth::check())
@if(session()->has('student_id'))
<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">
<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>
<ul class="dropdown-menu dropdown-menu-end shadow" aria-labelledby="userMenuMobile">
<li>
<a class="dropdown-item" href="/StudentProfile">
<a class="dropdown-item" href="{{ route('StudentProfile') }}">
<i class="fa-solid fa-user me-2"></i> Profile
</a>
</li>
@ -262,12 +240,11 @@
</ul>
</div>
@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
</div>
</header>
<!-- Overlay dim background element -->
<div class="sidebar-overlay" id="sidebarOverlay"></div>
<!-- Sidebar Navigation -->
@ -276,7 +253,6 @@
<i class="fa-solid fa-car-side me-2"></i> AutoEdu
</div>
<!-- Navigation Links -->
<nav class="nav">
<a href="/Dashboard" class="nav-link {{ request()->is('Dashboard*') ? 'active' : '' }}">
<i class="fa-solid fa-gauge"></i> Dashboard
@ -296,29 +272,22 @@
<a href="/Feedback&Complain" class="nav-link {{ request()->is('Feedback&Complain*') ? 'active' : '' }}">
<i class="fa-solid fa-comments"></i> Feedback & Complain
</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' : '' }}">
<i class="fa-solid fa-user"></i> Student Profile
</a>
</nav>
<!-- Sidebar User Profile (Desktop View Footer) -->
<div class="sidebar-user-profile">
@if(Auth::check())
@php
$displayName = Auth::user()->first_name . ' ' . Auth::user()->last_name;
@endphp
@if(session()->has('student_id'))
<div class="dropdown dropup">
<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>
<span class="text-truncate" style="max-width: 150px;">{{ $displayName }}</span>
<span class="text-truncate" style="max-width: 150px;">{{ session('student_name') }}</span>
</a>
<ul class="dropdown-menu dropdown-menu-start shadow w-100" aria-labelledby="userMenuDesktop">
<li>
<a class="dropdown-item" href="/StudentProfile">
<a class="dropdown-item" href="{{ route('StudentProfile') }}">
<i class="fa-solid fa-user me-2"></i> Profile
</a>
</li>
@ -332,24 +301,39 @@
</div>
@else
<div class="d-flex gap-2">
<a href="/signin" class="btn btn-outline-light btn-sm w-50">Sign In</a>
<a href="/signup" class="btn btn-theme-register btn-sm w-50">Register</a>
<a href="/" class="btn btn-outline-light btn-sm w-100">Sign In</a>
</div>
@endif
</div>
</aside>
<!-- Main Content Area -->
<main class="main">
@yield('content')
</main>
<!-- Scripts -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script>
// Sidebar Toggle Logic
const toggleBtn = document.getElementById('toggleBtn');
const sidebar = document.getElementById('sidebar');
const overlay = document.getElementById('sidebarOverlay');
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"]');
@ -364,8 +348,7 @@ function submitLogout() {
.then(res => res.json())
.then(data => {
if (data.success) {
window.location.href = '/signin';
window.location.href = '/';
} else {
alert('Logout failed. Please try again.');
}
@ -376,54 +359,5 @@ function submitLogout() {
});
}
</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>
</html>

View File

@ -309,8 +309,8 @@ body {
.custom-feature-card:hover {
transform: translateY(-5px);
background: rgba(255, 255, 255, 0.07);
border-color: rgba(255, 255, 255, 0.2);
background: rgba(0, 0, 0, 0.07);
border-color: rgb(255, 255, 255);
}
.icon-box {

View File

@ -6,15 +6,13 @@ use App\Http\Controllers\StudentPortalController;
use App\Http\Controllers\ContactMsgController;
use App\Http\Controllers\FeedbackController;
use App\Http\Controllers\studentportalnavController;
use App\Http\Controllers\auth\asswordController;
use App\Http\Controllers\Auth\ForgotPasswordController;
use App\Http\Controllers\coursesController;
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::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::get('/password/reset', [ForgotPasswordController::class, 'index'])->name('password.request');
Route::post('/resetEmail', [ForgotPasswordController::class, 'resetEmail'])->name('password.email');
Route::post('/verify-otp', [ForgotPasswordController::class, 'verifyOtpEmail'])->name('password.verify.otp');
Route::post('/update-password', [ForgotPasswordController::class, 'updatePassword'])->name('password.update');
});
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');
/*
|--------------------------------------------------------------------------
| Regular Auth Protected Routes (Laravel Default Auth)
|--------------------------------------------------------------------------
*/
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');
});
// Authentication Routes
Route::post('/signuppage', [AuthController::class, 'register']);
Route::post('/signin', [AuthController::class, 'login']);
Route::post('/custom-logout', [AuthController::class, 'logout']);
// --- STUDENT PORTAL SYSTEM ROUTES ---
/*
|--------------------------------------------------------------------------
| STUDENT PORTAL ROUTES (Session-Based Auth)
|--------------------------------------------------------------------------
*/
// Student Login & Logout Action Routes
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 () {
if (!session()->has('student_id')) {
return redirect()->back()->with('error', 'Please login first!');
return redirect('/signin')->with('error', 'Please login first!');
}
return view('StudentPortal');
})->name('student.portal');
// Route::get('/student-logout', function () {
// session()->forget('student_id');
// return redirect()->to('/students')->with('success', 'Logged out successfully!');
// })->name('student.logout');
// Profile Page (DB Dynamic Data)
Route::get('/StudentProfile', [StudentPortalController::class, 'showProfile'])->name('StudentProfile');
// 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::view('/courses', 'courses')->name('courses');
Route::view('/students', 'students')->name('students');
Route::view('/abouts', 'abouts')->name('abouts');
Route::view('/contact', 'contacts')->name('contact');
Route::get('/Feedback&Complain', [FeedbackController::class, 'index'])->name('feedback.index');
Route::post('/Feedback&Complain/store', [FeedbackController::class, 'store'])->name('feedback.store');
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');
});