diff --git a/admin/allocations.php b/admin/allocations.php new file mode 100644 index 0000000..20a0dac --- /dev/null +++ b/admin/allocations.php @@ -0,0 +1,160 @@ +prepare("SELECT capacity, occupied FROM Rooms WHERE id = ?"); + $stmt->execute([$room_id]); + $room = $stmt->fetch(); + + if ($room && $room['occupied'] < $room['capacity']) { + // Allocate student + $stmt = $pdo->prepare("INSERT INTO Allocations (student_id, room_id, allocation_date, status) VALUES (?, ?, CURDATE(), 'Allocated')"); + $stmt->execute([$student_id, $room_id]); + + // Update room occupancy + $stmt = $pdo->prepare("UPDATE Rooms SET occupied = occupied + 1 WHERE id = ?"); + $stmt->execute([$room_id]); + } + header('Location: allocations.php'); + exit(); +} + +// Handle Deallocation +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['deallocate'])) { + $allocation_id = $_POST['allocation_id']; + + // Get allocation details + $stmt = $pdo->prepare("SELECT room_id FROM Allocations WHERE id = ?"); + $stmt->execute([$allocation_id]); + $allocation = $stmt->fetch(); + + if ($allocation) { + // Remove allocation + $stmt = $pdo->prepare("DELETE FROM Allocations WHERE id = ?"); + $stmt->execute([$allocation_id]); + + // Update room occupancy + $stmt = $pdo->prepare("UPDATE Rooms SET occupied = occupied - 1 WHERE id = ?"); + $stmt->execute([$allocation['room_id']]); + } + header('Location: allocations.php'); + exit(); +} + + +// Fetch unallocated students +$unallocated_students_stmt = $pdo->query("SELECT u.id, u.name FROM Users u LEFT JOIN Allocations a ON u.id = a.student_id WHERE a.id IS NULL AND u.role = 'Student'"); +$unallocated_students = $unallocated_students_stmt->fetchAll(); + +// Fetch available rooms +$available_rooms_stmt = $pdo->query("SELECT id, room_no, block FROM Rooms WHERE occupied < capacity"); +$available_rooms = $available_rooms_stmt->fetchAll(); + +// Fetch current allocations +$allocations_stmt = $pdo->query("SELECT a.id, u.name as student_name, r.room_no, r.block, a.allocation_date FROM Allocations a JOIN Users u ON a.student_id = u.id JOIN Rooms r ON a.room_id = r.id ORDER BY a.allocation_date DESC"); +$allocations = $allocations_stmt->fetchAll(); + +$pageTitle = "Room Allocations"; +include '../includes/header.php'; +?> + +
+
+
+
+
+

Manual Room Allocation

+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+

Current Room Allocations

+
+
+
+ + + + + + + + + + + + + + + + + + + +
Student NameRoom NoBlockAllocation DateAction
+
+ + +
+
+
+
+
+
+
+
+ + diff --git a/admin/dashboard.php b/admin/dashboard.php new file mode 100644 index 0000000..ba55b97 --- /dev/null +++ b/admin/dashboard.php @@ -0,0 +1,54 @@ + + +
+

Admin Dashboard

+

Welcome, !

+ +
+
+
+
+
Manage Rooms
+

Add, edit, and delete hostel rooms.

+ Go to Rooms +
+
+
+
+
+
+
Manage Students
+

View and manage student records.

+ Go to Students +
+
+
+
+
+
+
Manage Allocations
+

Allocate rooms to students.

+ Go to Allocations +
+
+
+
+
+
+
Room Requests
+

View and manage student room requests.

+ Go to Requests +
+
+
+
+
+ + diff --git a/admin/edit_room.php b/admin/edit_room.php new file mode 100644 index 0000000..417c3b6 --- /dev/null +++ b/admin/edit_room.php @@ -0,0 +1,80 @@ +prepare("UPDATE Rooms SET room_no = ?, block = ?, capacity = ?, type = ? WHERE id = ?"); + $stmt->execute([$room_no, $block, $capacity, $type, $id]); + + header("Location: rooms.php"); + exit(); +} + +$stmt = $db->prepare("SELECT * FROM Rooms WHERE id = ?"); +$stmt->execute([$id]); +$room = $stmt->fetch(); + +if (!$room) { + header("Location: rooms.php"); + exit(); +} +?> + +
+

Edit Room

+ +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
+ + diff --git a/admin/edit_student.php b/admin/edit_student.php new file mode 100644 index 0000000..f4ca61b --- /dev/null +++ b/admin/edit_student.php @@ -0,0 +1,89 @@ +prepare("UPDATE Users SET name = ?, email = ?, gender = ?, year = ?, department = ? WHERE id = ?"); + $stmt->execute([$name, $email, $gender, $year, $department, $student_id]); + + header("Location: students.php?success=1"); + exit(); +} + +// Fetch student data +$stmt = $pdo->prepare("SELECT name, email, gender, year, department FROM Users WHERE id = ? AND role = 'Student'"); +$stmt->execute([$student_id]); +$student = $stmt->fetch(PDO::FETCH_ASSOC); + +if (!$student) { + header("Location: students.php"); + exit(); +} + +include_once '../includes/header.php'; +?> + +
+
+
+
+
+

Edit Student Details

+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + Cancel +
+
+
+
+
+
+ + diff --git a/admin/requests.php b/admin/requests.php new file mode 100644 index 0000000..45a732a --- /dev/null +++ b/admin/requests.php @@ -0,0 +1,91 @@ +beginTransaction(); + try { + // 1. Add to Allocations + $stmt = $pdo->prepare("INSERT INTO Allocations (student_id, room_id) VALUES (?, ?)"); + $stmt->execute([$student_id, $room_id]); + + // 2. Update RoomRequest status + $stmt = $pdo->prepare("UPDATE RoomRequests SET status = 'approved' WHERE request_id = ?"); + $stmt->execute([$request_id]); + + // 3. Reject other pending requests for the same room + $stmt = $pdo->prepare("UPDATE RoomRequests SET status = 'rejected' WHERE room_id = ? AND status = 'pending'"); + $stmt->execute([$room_id]); + + // 4. Reject other pending requests from the same student + $stmt = $pdo->prepare("UPDATE RoomRequests SET status = 'rejected' WHERE student_id = ? AND status = 'pending'"); + $stmt->execute([$student_id]); + + $pdo->commit(); + } catch (Exception $e) { + $pdo->rollBack(); + die("Error: " . $e->getMessage()); + } + } elseif (isset($_POST['reject'])) { + $stmt = $pdo->prepare("UPDATE RoomRequests SET status = 'rejected' WHERE request_id = ?"); + $stmt->execute([$request_id]); + } + header('Location: requests.php'); + exit; +} + +$stmt = $pdo->query("SELECT rr.*, u.name as student_name, r.room_number FROM RoomRequests rr JOIN Users u ON rr.student_id = u.id JOIN Rooms r ON rr.room_id = r.id ORDER BY rr.request_date DESC"); +$requests = $stmt->fetchAll(); +?> + +
+

Room Requests

+ + + + + + + + + + + + + + + + + + + + + +
StudentRoomStatusDateAction
+ +
+ + + + + +
+ +
+ Back to Dashboard +
+ + diff --git a/admin/rooms.php b/admin/rooms.php new file mode 100644 index 0000000..3649855 --- /dev/null +++ b/admin/rooms.php @@ -0,0 +1,124 @@ +prepare("INSERT INTO Rooms (room_no, block, capacity, type) VALUES (?, ?, ?, ?)"); + $stmt->execute([$room_no, $block, $capacity, $type]); + + header("Location: rooms.php"); + exit(); +} + +// Handle Delete Room +if (isset($_GET['delete_id'])) { + $id = $_GET['delete_id']; + $stmt = $db->prepare("DELETE FROM Rooms WHERE id = ?"); + $stmt->execute([$id]); + + header("Location: rooms.php"); + exit(); +} + +$rooms = $db->query("SELECT * FROM Rooms ORDER BY room_no ASC")->fetchAll(); + +?> + +
+

Room Management

+ + +
+
+ Add New Room +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+ + +
+
+ Existing Rooms +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Room No.BlockCapacityOccupiedTypeActions
No rooms found.
+ Edit + Delete +
+
+
+
+ + diff --git a/admin/students.php b/admin/students.php new file mode 100644 index 0000000..42541d4 --- /dev/null +++ b/admin/students.php @@ -0,0 +1,85 @@ +prepare("DELETE FROM Allocations WHERE student_id = ?"); + $stmt->execute([$delete_id]); + $stmt = $pdo->prepare("DELETE FROM Requests WHERE student_id = ?"); + $stmt->execute([$delete_id]); + $stmt = $pdo->prepare("DELETE FROM Users WHERE id = ? AND role = 'Student'"); + $stmt->execute([$delete_id]); + header("Location: students.php"); + exit(); +} + +// Fetch all students +$stmt = $pdo->query("SELECT id, name, email, gender, year, department FROM Users WHERE role = 'Student' ORDER BY name ASC"); +$students = $stmt->fetchAll(PDO::FETCH_ASSOC); + +include_once '../includes/header.php'; +?> + +
+

Student Management

+ + +
Student updated successfully!
+ + +
+
+
All Students
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameEmailGenderYearDepartmentActions
No students found.
+ Edit + Delete +
+
+
+
+
+ + diff --git a/assets/css/custom.css b/assets/css/custom.css new file mode 100644 index 0000000..e8067bd --- /dev/null +++ b/assets/css/custom.css @@ -0,0 +1,47 @@ +html { + scroll-behavior: smooth; + scroll-padding-top: 70px; +} + +body { + font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + background-color: #F8F9FA; +} + +.hero-section { + background: linear-gradient(45deg, #0D6EFD, #0A58CA); + padding: 100px 0; +} + +.navbar-brand { + color: #0D6EFD !important; +} + +.nav-link { + color: #6C757D; + font-weight: 500; +} + +.nav-link:hover, .nav-link.active { + color: #0D6EFD; +} + +.card { + border: none; + border-radius: 0.5rem; + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + transition: transform 0.2s ease-in-out; +} + +.card:hover { + transform: translateY(-5px); +} + +.accordion-button:not(.collapsed) { + color: #fff; + background-color: #0D6EFD; +} + +.accordion-button:focus { + box-shadow: none; +} diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 0000000..3bb9710 --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,3 @@ +// This script can be used for custom interactions in the future. +// For now, smooth scrolling is handled by CSS. +console.log("Hostel Allocation System JS Loaded."); diff --git a/auth/forgot-password.php b/auth/forgot-password.php new file mode 100644 index 0000000..4759686 --- /dev/null +++ b/auth/forgot-password.php @@ -0,0 +1,63 @@ +prepare("SELECT * FROM Users WHERE email = ?"); + $stmt->execute([$email]); + $user = $stmt->fetch(); + + if ($user) { + $token = bin2hex(random_bytes(50)); + $expires = new DateTime('now'); + $expires->add(new DateInterval('PT1H')); // 1 hour expiration + + $stmt = $pdo->prepare("UPDATE Users SET reset_token = ?, reset_token_expires = ? WHERE email = ?"); + $stmt->execute([$token, $expires->format('Y-m-d H:i:s'), $email]); + + $reset_link = "http://" . $_SERVER['HTTP_HOST'] . "/auth/reset-password.php?token=" . $token; + + $subject = "Password Reset Request"; + $body_html = "Click the following link to reset your password: {$reset_link}"; + $body_text = "Click the following link to reset your password: {$reset_link}"; + + MailService::sendMail($email, $subject, $body_html, $body_text); + + $message = "A password reset link has been sent to your email address."; + } else { + $message = "No user found with that email address."; + } +} +?> + +
+
+
+
+
+

Forgot Password

+
+
+ +
+ +
+
+ + +
+ +
+
+
+
+
+
+ + diff --git a/auth/login.php b/auth/login.php new file mode 100644 index 0000000..84bfe60 --- /dev/null +++ b/auth/login.php @@ -0,0 +1,88 @@ +prepare("SELECT * FROM Users WHERE email = ?"); + $stmt->execute([$email]); + $user = $stmt->fetch(PDO::FETCH_ASSOC); + + if ($user && password_verify($password, $user['password'])) { + // Password is correct, start session + $_SESSION['id'] = $user['id']; + $_SESSION['name'] = $user['name']; + $_SESSION['role'] = $user['role']; + + // Redirect based on role + if ($user['role'] === 'Admin') { + header("Location: /admin/dashboard.php"); + exit; + } else { + header("Location: /student/dashboard.php"); + exit; + } + } else { + $errors[] = 'Invalid email or password.'; + } + } catch (PDOException $e) { + $errors[] = "Database error: " . $e->getMessage(); + } + } +} + +require_once __DIR__ . '/../includes/header.php'; +?> + +
+
+
+
+
+

Login

+
+
+ +
+ +

+ +
+ +
+
+ + +
+
+ + +
+ +
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/auth/logout.php b/auth/logout.php new file mode 100644 index 0000000..73ea6b0 --- /dev/null +++ b/auth/logout.php @@ -0,0 +1,7 @@ + diff --git a/auth/reset-password.php b/auth/reset-password.php new file mode 100644 index 0000000..06f92b8 --- /dev/null +++ b/auth/reset-password.php @@ -0,0 +1,73 @@ +prepare("SELECT * FROM Users WHERE reset_token = ? AND reset_token_expires > NOW()"); +$stmt->execute([$token]); +$user = $stmt->fetch(); + +if (!$user) { + $error = "Invalid or expired token."; +} + +if ($_SERVER['REQUEST_METHOD'] === 'POST' && $user) { + $password = $_POST['password']; + $password_confirm = $_POST['password_confirm']; + + if ($password === $password_confirm) { + $hashed_password = password_hash($password, PASSWORD_DEFAULT); + $stmt = $pdo->prepare("UPDATE Users SET password = ?, reset_token = NULL, reset_token_expires = NULL WHERE id = ?"); + $stmt->execute([$hashed_password, $user['id']]); + $message = "Your password has been reset successfully. You can now login."; + } else { + $error = "Passwords do not match."; + } +} + +?> + +
+
+
+
+
+

Reset Password

+
+
+ +
+ + +
+ + + +
+
+ + +
+
+ + +
+ +
+ +
+
+
+
+
+ + diff --git a/auth/signup.php b/auth/signup.php new file mode 100644 index 0000000..9436f54 --- /dev/null +++ b/auth/signup.php @@ -0,0 +1,147 @@ +prepare("SELECT COUNT(*) FROM Users WHERE email = ?"); + $stmt->execute([$email]); + if ($stmt->fetchColumn() > 0) { + $errors[] = 'Email address is already registered.'; + } else { + // Hash password + $hashed_password = password_hash($password, PASSWORD_DEFAULT); + + // Set default role + $role = 'Student'; + + // Insert user into database + $sql = "INSERT INTO Users (name, email, password, role, gender, year, department) VALUES (?, ?, ?, ?, ?, ?, ?)"; + $stmt = $pdo->prepare($sql); + + if ($stmt->execute([$name, $email, $hashed_password, $role, $gender, $year, $department])) { + $success = 'Registration successful! You can now log in.'; + } else { + $errors[] = 'Something went wrong. Please try again later.'; + } + } + } catch (PDOException $e) { + $errors[] = "Database error: " . $e->getMessage(); + } + } +} +?> + +
+
+
+
+
+

Sign Up

+
+
+ +
+ +

+ +
+ + +
+

+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ +
+ +
+
+
+
+ + \ No newline at end of file diff --git a/db/migrations/001_initial_schema.sql b/db/migrations/001_initial_schema.sql new file mode 100644 index 0000000..56ebd2e --- /dev/null +++ b/db/migrations/001_initial_schema.sql @@ -0,0 +1,41 @@ +CREATE TABLE IF NOT EXISTS `Users` ( + `id` INT AUTO_INCREMENT PRIMARY KEY, + `name` VARCHAR(255) NOT NULL, + `email` VARCHAR(255) NOT NULL UNIQUE, + `password` VARCHAR(255) NOT NULL, + `role` ENUM('Admin', 'Student', 'Super Admin') NOT NULL, + `gender` ENUM('Male', 'Female', 'Other'), + `year` INT, + `department` VARCHAR(255), + `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS `Rooms` ( + `id` INT AUTO_INCREMENT PRIMARY KEY, + `room_no` VARCHAR(50) NOT NULL, + `block` VARCHAR(50), + `capacity` INT NOT NULL, + `occupied` INT DEFAULT 0, + `type` VARCHAR(100), + `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS `Allocations` ( + `id` INT AUTO_INCREMENT PRIMARY KEY, + `student_id` INT NOT NULL, + `room_id` INT NOT NULL, + `allocation_date` DATE, + `status` VARCHAR(100), + `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (`student_id`) REFERENCES `Users`(`id`) ON DELETE CASCADE, + FOREIGN KEY (`room_id`) REFERENCES `Rooms`(`id`) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS `Requests` ( + `id` INT AUTO_INCREMENT PRIMARY KEY, + `student_id` INT NOT NULL, + `room_preference` VARCHAR(255), + `approval_status` VARCHAR(100) DEFAULT 'Pending', + `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (`student_id`) REFERENCES `Users`(`id`) ON DELETE CASCADE +); \ No newline at end of file diff --git a/db/migrations/002_create_room_requests_table.sql b/db/migrations/002_create_room_requests_table.sql new file mode 100644 index 0000000..89fecef --- /dev/null +++ b/db/migrations/002_create_room_requests_table.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS `RoomRequests` ( + `request_id` INT AUTO_INCREMENT PRIMARY KEY, + `student_id` INT NOT NULL, + `room_id` INT NOT NULL, + `status` VARCHAR(50) NOT NULL DEFAULT 'pending', + `request_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (`student_id`) REFERENCES `Users`(`id`) ON DELETE CASCADE, + FOREIGN KEY (`room_id`) REFERENCES `Rooms`(`id`) ON DELETE CASCADE +); diff --git a/db/migrations/003_add_password_reset_to_users.sql b/db/migrations/003_add_password_reset_to_users.sql new file mode 100644 index 0000000..12d519b --- /dev/null +++ b/db/migrations/003_add_password_reset_to_users.sql @@ -0,0 +1,3 @@ +ALTER TABLE `Users` +ADD COLUMN `reset_token` VARCHAR(255) NULL, +ADD COLUMN `reset_token_expires` DATETIME NULL; diff --git a/includes/footer.php b/includes/footer.php new file mode 100644 index 0000000..f48276d --- /dev/null +++ b/includes/footer.php @@ -0,0 +1,5 @@ + + + + + diff --git a/includes/header.php b/includes/header.php new file mode 100644 index 0000000..0c65b63 --- /dev/null +++ b/includes/header.php @@ -0,0 +1,41 @@ + + + + + + + Hostel Room Allocation + + + + + + + +
\ No newline at end of file diff --git a/index.php b/index.php index 7205f3d..39abf5b 100644 --- a/index.php +++ b/index.php @@ -1,150 +1,172 @@ - - + - - - New Style - - - - - - - - - - - - - - - - - - - + + + Hostel Room Allocation System + + + + + + + + + + + -
-
-

Analyzing your requirements and generating your website…

-
- Loading… -
-

AI is collecting your requirements and applying the first changes.

-

This page will update automatically as the plan is implemented.

-

Runtime: PHP — UTC

-
-
- + + + +
+
+

Hostel Room Allocation Made Easy

+

A seamless, automated system for students and admins.

+ Get Started +
+
+ +
+
+
+
+
+

About the System

+

Our platform simplifies the entire hostel room allocation process, from initial student requests to final assignments. It's designed to be fair, transparent, and efficient for both students and administrators. We automate the heavy lifting so you can focus on what matters.

+
+
+ +
+
+
+
+ +
+
+

Hostel Rules

+

Please read the following rules carefully.

+
+
+
+ +
+
Gender Separation
+

Rooms and floors are strictly separated by gender to ensure safety and comfort.

+
+
+
+
+
+ +
+
Curfew
+

All students must return to the hostel by the designated curfew time every night.

+
+
+
+
+
+ +
+
No Visitors
+

Visitors are not permitted in student rooms to maintain privacy and security.

+
+
+
+
+
+
+ +
+
+

Frequently Asked Questions

+
+
+

+ +

+
+
+ Rooms are assigned automatically based on your preferences (like room type), gender, and availability. The system follows a first-come, first-served principle. +
+
+
+
+

+ +

+
+
+ Yes. After your initial assignment, you can log in to the student portal to submit a room change request, which will be reviewed by the hostel admin. +
+
+
+
+

+ +

+
+
+ You must inform the hostel admin. Your bed will be marked as available, and the system may reassign it to a waitlisted student. Refund policies will apply. +
+
+
+
+
+
+ +
+
+

Contact Us

+

Have questions? Get in touch with the administration.

+
+
+
+

For any inquiries, please email us at support@yourhostel.com or visit the admin office during work hours.

+
+
+
+
+
+ +
+
+

Room Request Form

+

This is a placeholder for the room request form.

+
+
+ +
+ + + + + - + \ No newline at end of file diff --git a/student/dashboard.php b/student/dashboard.php new file mode 100644 index 0000000..1543f2a --- /dev/null +++ b/student/dashboard.php @@ -0,0 +1,44 @@ +prepare("SELECT r.room_number, r.details FROM Allocations a JOIN Rooms r ON a.room_id = r.id WHERE a.student_id = ?"); +$stmt->execute([$_SESSION['id']]); +$allocation = $stmt->fetch(); +?> + +
+

Student Dashboard

+

Welcome, !

+ +
+
+ My Room Allocation +
+
+ +
You are allocated to Room:
+

Details:

+ +

You have not been allocated a room yet.

+ +
+
+ +
+
+ Room Request +
+ +
+
+ + diff --git a/student/request_room.php b/student/request_room.php new file mode 100644 index 0000000..026c272 --- /dev/null +++ b/student/request_room.php @@ -0,0 +1,61 @@ +prepare("SELECT * FROM RoomRequests WHERE student_id = ? AND (status = 'pending' OR status = 'approved')"); +$stmt->execute([$student_id]); +$existing_request = $stmt->fetch(); + +// Check if student is already allocated a room +$stmt = $pdo->prepare("SELECT * FROM Allocations WHERE student_id = ?"); +$stmt->execute([$student_id]); +$allocation = $stmt->fetch(); + +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['request_room']) && !$existing_request && !$allocation) { + $room_id = $_POST['room_id']; + $stmt = $pdo->prepare("INSERT INTO RoomRequests (student_id, room_id) VALUES (?, ?)"); + $stmt->execute([$student_id, $room_id]); + header('Location: request_room.php'); + exit; +} + +// Fetch available rooms (not occupied) +$stmt = $pdo->query("SELECT * FROM Rooms WHERE id NOT IN (SELECT room_id FROM Allocations)"); +$available_rooms = $stmt->fetchAll(); + +?> + +
+

Request a Room

+ +
You are already allocated to a room.
+ +
+ You have a room request. Please wait for an admin to review it. +
+ +
+
+ + +
+ +
+ + Back to Dashboard +
+ +