use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Auth; use App\Http\Controllers\Auth\LoginPageController; use App\Http\Controllers\Auth\RegisterController; use App\Http\Controllers\Auth\ForgotPasswordController; use App\Http\Controllers\Auth\ResetPasswordController; use App\Http\Controllers\Admin\AdminHomeController; use App\Http\Controllers\Admin\AnalyticsController; use App\Http\Controllers\Admin\AttendanceController; use App\Http\Controllers\Admin\BooksController; use App\Http\Controllers\Admin\CirculationController; use App\Http\Controllers\Admin\ContentController; use App\Http\Controllers\Admin\ReportController; use App\Http\Controllers\Admin\SectionController; use App\Http\Controllers\Admin\CategoryController; use App\Http\Controllers\Admin\StudentsController; use App\Http\Controllers\Admin\CirculationKioskController; use App\Http\Controllers\Admin\StudentVerificationController; use App\Http\Controllers\Admin\AdminProfileController; use App\Http\Controllers\User\ProfileController; use App\Http\Controllers\UserSide\AboutController; use App\Http\Controllers\UserSide\ContactUsController; use App\Http\Controllers\UserSide\DatabaseController; use App\Http\Controllers\UserSide\EventsController; use App\Http\Controllers\UserSide\HomeController; use App\Http\Controllers\UserSide\LRController; use App\Http\Controllers\UserSide\NewsController; use App\Http\Controllers\UserSide\OPACController; use App\Http\Controllers\UserSide\PersonnelController; use App\Http\Controllers\UserSide\ProfileController as UserSideProfileController; use App\Http\Controllers\UserSide\MyFeedbackController; use App\Http\Controllers\Admin\NotificationController; use App\Http\Controllers\Admin\FeedbackController; use App\Http\Controllers\Admin\ArchiveController; // ========================================== // AUTHENTICATION (Public Routes) // ========================================== Route::get('Register', [RegisterController::class, 'index'])->name('Register'); Route::post('Register', [RegisterController::class, 'store'])->name('register.store'); Route::get('under-verification', function () { return view('Auth.under-verification'); })->name('verification.notice'); Route::get('login', [LoginPageController::class, 'index'])->name('login'); Route::post('login', [LoginPageController::class, 'store'])->name('login.store'); Route::get('forgot-password', [ForgotPasswordController::class, 'create'])->name('password.request'); Route::post('forgot-password', [ForgotPasswordController::class, 'store'])->name('password.email'); Route::get('reset-password/{token}', [ResetPasswordController::class, 'create'])->name('password.reset'); Route::post('reset-password', [ResetPasswordController::class, 'store'])->name('password.update'); Route::post('logout', [LoginPageController::class, 'logout'])->name('logout'); Route::get('PrivacyPolicy', function(){ return view('Auth.partials.privacypolicy'); })->name('privacypolicy'); // ========================================== // ADMIN-SIDE (Protected by 'admin' guard) // ========================================== Route::middleware(['auth:admin'])->group(function () { Route::get('AdminHome', [AdminHomeController::class, 'index'])->name('AdminHome'); // --> NEW: Routes for Dynamic School Year Management Route::post('/admin/advance-school-year', [AdminHomeController::class, 'advanceSchoolYear'])->name('Admin.AdvanceSchoolYear'); Route::post('/admin/school-year/store', [AdminHomeController::class, 'storeSchoolYear'])->name('Admin.StoreSchoolYear'); Route::put('/admin/school-year/{id}', [AdminHomeController::class, 'updateSchoolYear'])->name('Admin.UpdateSchoolYear'); Route::delete('/admin/school-year/{id}', [AdminHomeController::class, 'destroySchoolYear'])->name('Admin.DestroySchoolYear'); // Admin Profile Route::get('Profile', [AdminProfileController::class, 'index'])->name('Admin.Profile'); Route::put('Profile/Update', [AdminProfileController::class, 'update'])->name('Admin.Profile.update'); Route::put('Profile/Password', [AdminProfileController::class, 'updatePassword'])->name('Admin.Profile.password'); // === NEW: Feedback / Messages === Route::get('Feedback', [FeedbackController::class, 'index'])->name('Admin.Feedback'); Route::post('Feedback/{id}/reply', [FeedbackController::class, 'reply'])->name('Admin.Feedback.reply'); // Student Verifications Route::get('Verification', [StudentVerificationController::class, 'index'])->name('Admin.VerificationList'); Route::get('Verification/{id}', [StudentVerificationController::class, 'show'])->name('Admin.VerificationShow'); Route::post('Verification/{id}/Approve', [StudentVerificationController::class, 'approve'])->name('Admin.VerificationApprove'); Route::delete('Verification/{id}/Reject', [StudentVerificationController::class, 'reject'])->name('Admin.VerificationReject'); // Students Route::get('Students', [StudentsController::class, 'index'])->name('Students'); Route::get('Students/CreateStudent', [StudentsController::class, 'create'])->name('CreateStudent'); Route::post('Students/Store', [StudentsController::class, 'store'])->name('Students.store'); Route::get('Students/SearchExisting', [StudentsController::class, 'searchExisting'])->name('Students.searchExisting'); Route::get('Students/StudentImport', [StudentsController::class, 'Studentimport'])->name('StudentImport'); Route::post('/students/import', [StudentsController::class, 'import'])->name('Students.import'); Route::get('/students/export', [StudentsController::class, 'export'])->name('Students.export'); Route::get('Students/{id}/export-history', [StudentsController::class, 'exportStudentData'])->name('Students.exportHistory'); Route::get('Students/{id}', [StudentsController::class, 'show'])->name('ViewStudent'); Route::get('Students/{id}/Edit', [StudentsController::class, 'edit'])->name('EditStudent'); Route::put('Students/{id}/Update', [StudentsController::class, 'update'])->name('Students.update'); Route::delete('Students/{id}/Delete', [StudentsController::class, 'destroy'])->name('Students.destroy'); Route::post('/Students/bulk-delete', [StudentsController::class, 'bulkDestroy'])->name('Students.bulkDestroy'); // Sections Route::get('/Sections', [SectionController::class, 'index'])->name('StudentSections'); Route::post('/Sections/Store', [SectionController::class, 'store'])->name('Sections.store'); Route::get('/Sections/{id}/Edit', [SectionController::class, 'edit'])->name('Sections.edit'); Route::put('/Sections/{id}', [SectionController::class, 'update'])->name('Sections.update'); Route::delete('/Sections/{id}', [SectionController::class, 'destroy'])->name('Sections.destroy'); // Books Route::get('/Books', [BooksController::class, 'index'])->name('Books'); Route::get('/Books/AddBooks', [BooksController::class, 'create'])->name('AddBooks'); Route::post('/Books/Store', [BooksController::class, 'store'])->name('Books.store'); Route::get('/Books/ImportBooks', [BooksController::class, 'ImportBooks'])->name('ImportBooks'); Route::post('/Books/Import', [BooksController::class, 'import'])->name('Books.import'); Route::get('/Books/export', [BooksController::class, 'export'])->name('Books.export'); Route::get('/Books/{id}', [BooksController::class, 'show'])->name('Books.show'); Route::get('/Books/{id}/Edit', [BooksController::class, 'edit'])->name('Books.edit'); Route::put('/Books/{id}', [BooksController::class, 'update'])->name('Books.update'); Route::post('/Books/bulk-delete', [BooksController::class, 'bulkDestroy'])->name('Books.bulkDestroy'); Route::delete('/Books/{id}', [BooksController::class, 'destroy'])->name('Books.destroy'); // Weeding Books Routes Route::get('/Books-Weeding', [BooksController::class, 'weeding'])->name('Books.weeding'); Route::get('/Books-Weeding/Search', [BooksController::class, 'searchWeeding'])->name('Books.weeding.search'); Route::post('/Books-Weeding/Process', [BooksController::class, 'processWeeding'])->name('Books.weeding.process'); // Categories Route::get('/Categories', [CategoryController::class, 'index'])->name('Categories'); Route::post('/Categories/Store', [CategoryController::class, 'store'])->name('Categories.store'); Route::put('/Categories/{id}', [CategoryController::class, 'update'])->name('Categories.update'); Route::delete('/Categories/{id}', [CategoryController::class, 'destroy'])->name('Categories.destroy'); // Sub-Categories Route::post('/SubCategories/Store', [CategoryController::class, 'storeSubCategory'])->name('SubCategories.store'); Route::put('/SubCategories/{id}', [CategoryController::class, 'updateSubCategory'])->name('SubCategories.update'); Route::delete('/SubCategories/{id}', [CategoryController::class, 'destroySubCategory'])->name('SubCategories.destroy'); // Circulation Route::get('/Circulation', [CirculationController::class, 'index'])->name('Circulation'); Route::get('/CirculationKiosk', [CirculationKioskController::class, 'index'])->name('CirculationKiosk'); Route::get('/admin/kiosk/check-book', [CirculationKioskController::class, 'checkBook']); Route::get('/admin/kiosk/check-student', [CirculationKioskController::class, 'checkStudent']); Route::post('/admin/kiosk/transaction', [CirculationKioskController::class, 'storeTransaction']); Route::get('/circulation/export', [CirculationController::class, 'export'])->name('Circulation.export'); Route::post('/circulation/bulk-return', [CirculationController::class, 'bulkReturn'])->name('Circulation.bulkReturn'); Route::post('/circulation/bulk-remind', [CirculationController::class, 'bulkRemind'])->name('Circulation.bulkRemind'); Route::post('/circulation/{id}/return', [CirculationController::class, 'returnBook'])->name('Circulation.return'); Route::post('/circulation/{id}/remind', [CirculationController::class, 'sendReminder'])->name('Circulation.remind'); Route::get('/admin/circulation/search-student', [CirculationController::class, 'searchStudent']); Route::get('/admin/circulation/search-book', [CirculationController::class, 'searchBook']); Route::post('/admin/circulation/manual', [CirculationController::class, 'storeManual'])->name('Circulation.storeManual'); // Attendance Route::get('/Attendance', [AttendanceController::class, 'index'])->name('Attendance'); Route::get('/AttendanceKiosk', [AttendanceController::class, 'kiosk'])->name('AttendanceKiosk'); Route::get('/admin/attendance/check-student', [AttendanceController::class, 'checkStudent']); Route::post('/admin/attendance/kiosk/log', [AttendanceController::class, 'logAccess'])->name('attendance.log'); Route::post('/admin/attendance/manual', [AttendanceController::class, 'storeManual'])->name('Attendance.storeManual'); Route::post('/admin/attendance/{id}/checkout', [AttendanceController::class, 'checkoutManual'])->name('Attendance.checkoutManual'); Route::post('/admin/attendance/bulk-checkout', [AttendanceController::class, 'bulkCheckout'])->name('Attendance.bulkCheckout'); Route::get('/attendance/export', [AttendanceController::class, 'export'])->name('Attendance.export'); // Analytics Route::get('/Analytics', [AnalyticsController::class, 'index'])->name('Analytics'); // --- Content Management Routes --- Route::get('admin/content', [ContentController::class, 'index'])->name('Content'); // Update Routes for Main Pages Route::put('admin/content/general', [ContentController::class, 'updateGeneral'])->name('Content.General.update'); Route::put('admin/content/home', [ContentController::class, 'updateHome'])->name('Content.Home.update'); Route::put('admin/content/about', [ContentController::class, 'updateAbout'])->name('Content.About.update'); Route::put('admin/content/personnel', [ContentController::class, 'updatePersonnel'])->name('Content.Personnel.update'); Route::put('admin/content/contact', [ContentController::class, 'updateContact'])->name('Content.Contact.update'); // Database Routes Route::post('admin/content/database/resource', [ContentController::class, 'storeDatabaseResource'])->name('Content.Database.store'); Route::put('admin/content/database/resource/{id}', [ContentController::class, 'updateDatabaseResource'])->name('Content.Database.update'); Route::delete('admin/content/database/resource/{id}', [ContentController::class, 'destroyDatabaseResource'])->name('Content.Database.destroy'); // News Routes Route::post('admin/content/news', [ContentController::class, 'storeNews'])->name('Content.News.store'); Route::get('admin/content/news/create', [ContentController::class, 'createNews'])->name('Content.News.create'); Route::get('admin/content/news/{id}/edit', [ContentController::class, 'editNews'])->name('Content.News.edit'); Route::put('admin/content/news/{id}', [ContentController::class, 'updateNews'])->name('Content.News.update'); Route::delete('admin/content/news/{id}', [ContentController::class, 'destroyNews'])->name('Content.News.destroy'); // Events Routes Route::post('admin/content/events', [ContentController::class, 'storeEvent'])->name('Content.Events.store'); Route::get('admin/content/events/create', [ContentController::class, 'createEvent'])->name('Content.Events.create'); Route::get('admin/content/events/{id}/edit', [ContentController::class, 'editEvent'])->name('Content.Events.edit'); Route::put('admin/content/events/{id}', [ContentController::class, 'updateEvent'])->name('Content.Events.update'); Route::delete('admin/content/events/{id}', [ContentController::class, 'destroyEvent'])->name('Content.Events.destroy'); // Specifics/Extensions Routes Route::post('admin/content/services', [ContentController::class, 'storeService'])->name('Content.Services.store'); Route::put('admin/content/services/{id}', [ContentController::class, 'updateService'])->name('Content.Services.update'); Route::delete('admin/content/services/{id}', [ContentController::class, 'destroyService'])->name('Content.Services.destroy'); Route::post('admin/content/rules', [ContentController::class, 'storeRule'])->name('Content.Rules.store'); Route::put('admin/content/rules/{id}', [ContentController::class, 'updateRule'])->name('Content.Rules.update'); Route::delete('admin/content/rules/{id}', [ContentController::class, 'destroyRule'])->name('Content.Rules.destroy'); Route::post('admin/content/facilities', [ContentController::class, 'storeFacility'])->name('Content.Facilities.store'); Route::put('admin/content/facilities/{id}', [ContentController::class, 'updateFacility'])->name('Content.Facilities.update'); Route::delete('admin/content/facilities/{id}', [ContentController::class, 'destroyFacility'])->name('Content.Facilities.destroy'); Route::post('admin/content/faqs', [ContentController::class, 'storeFaq'])->name('Content.Faqs.store'); Route::put('admin/content/faqs/{id}', [ContentController::class, 'updateFaq'])->name('Content.Faqs.update'); Route::delete('admin/content/faqs/{id}', [ContentController::class, 'destroyFaq'])->name('Content.Faqs.destroy'); // Report Route::get('/Report', [ReportController::class, 'index'])->name('Report'); Route::post('/Report/Generate', [ReportController::class, 'generate'])->name('Report.generate'); Route::get('/Report/Download/{filename}', [ReportController::class, 'download'])->name('Report.download'); Route::get('/Report/Preview/{filename}', [ReportController::class, 'preview'])->name('Report.preview'); Route::delete('/Report/ClearHistory', [ReportController::class, 'clearHistory'])->name('Report.clearHistory'); // Notifications Route::get('/notifications', [NotificationController::class, 'index'])->name('notifications.index'); Route::post('/notifications/mark-read', [NotificationController::class, 'markAllRead'])->name('notifications.markAllRead'); Route::get('/admin/badge-counts', [NotificationController::class, 'getBadgeCounts'])->name('admin.badgeCounts'); // === NEW: ARCHIVE SYSTEM ROUTES === Route::get('/Archive', [ArchiveController::class, 'index'])->name('Archive.index'); Route::post('/Archive/Books/{id}/restore', [ArchiveController::class, 'restoreBook'])->name('Archive.Books.restore'); Route::delete('/Archive/Books/{id}/force-delete', [ArchiveController::class, 'forceDeleteBook'])->name('Archive.Books.forceDelete'); Route::post('/Archive/Copies/{id}/restore', [ArchiveController::class, 'restoreCopy'])->name('Archive.Copies.restore'); Route::delete('/Archive/Copies/{id}/force-delete', [ArchiveController::class, 'forceDeleteCopy'])->name('Archive.Copies.forceDelete'); Route::post('/Archive/Students/{id}/restore', [ArchiveController::class, 'restoreStudent'])->name('Archive.Students.restore'); Route::delete('/Archive/Students/{id}/force-delete', [ArchiveController::class, 'forceDeleteStudent'])->name('Archive.Students.forceDelete'); // === NEW: CONTENT ARCHIVE ROUTES === Route::post('/Archive/News/{id}/restore', [ArchiveController::class, 'restoreNews'])->name('Archive.News.restore'); Route::delete('/Archive/News/{id}/force-delete', [ArchiveController::class, 'forceDeleteNews'])->name('Archive.News.forceDelete'); Route::post('/Archive/Events/{id}/restore', [ArchiveController::class, 'restoreEvent'])->name('Archive.Events.restore'); Route::delete('/Archive/Events/{id}/force-delete', [ArchiveController::class, 'forceDeleteEvent'])->name('Archive.Events.forceDelete'); // Existing Role-Specific Routes Route::middleware(['role:admin'])->group(function () { Route::get('/admin/dashboard', [AdminHomeController::class, 'index']); }); Route::middleware(['role:staff'])->group(function () { Route::get('/staff/books', [AdminHomeController::class, 'index']); }); }); // ========================================== // USER-SIDE / FRONTEND (Public Routes) // ========================================== Route::get('/', [HomeController::class, 'index'])->name('index'); Route::get('/Home', [HomeController::class, 'index'])->name('Home'); Route::get('/Database', [DatabaseController::class, 'index'])->name('Database'); Route::get('/About', [AboutController::class, 'index'])->name('About'); Route::get('/OPAC', [OPACController::class, 'index'])->name('OPAC'); Route::get('/opac/book/{id}', [OPACController::class, 'show'])->name('opac.show'); Route::get('/News', [NewsController::class, 'index'])->name('News'); Route::get('/News/{id}', [NewsController::class, 'show'])->name('News.show'); Route::get('/Events', [EventsController::class, 'index'])->name('Events'); Route::get('/Events/{id}', [EventsController::class, 'show'])->name('Events.show'); Route::get('/ContactUs', [ContactUsController::class, 'index'])->name('Contact'); Route::post('/ContactUs', [ContactUsController::class, 'store'])->name('Contact.store'); Route::get('/LR', [LRController::class, 'index'])->name('LR'); Route::get('/Personnel',[PersonnelController::class,'index'])->name('Personnel'); Route::get('/get-qr-code', function () { if (Auth::guard('web')->check()) { return redirect()->route('profile.show'); } return redirect()->route('login'); })->name('GetQRCode'); Route::middleware(['auth'])->group(function () { Route::get('/profile', [UserSideProfileController::class, 'show'])->name('profile.show'); Route::put('/profile', [UserSideProfileController::class, 'update'])->name('profile.update'); Route::get('/my-concerns', [MyFeedbackController::class, 'index'])->name('MyFeedback.index'); });