Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
node_modules
node_modules
uploads
18 changes: 18 additions & 0 deletions addEvent.html
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,23 @@
</div>
Event Calendar
</a>

<a class="nav-link collapsed" href="#" data-bs-toggle="collapse" data-bs-target="#collapseReviews" aria-expanded="false" aria-controls="collapseReviews">
<div class="sb-nav-link-icon">
<i class="fas fa-star"></i>
</div>
Review Management
<div class="sb-sidenav-collapse-arrow">
<i class="fas fa-angle-down"></i>
</div>
</a>
<div class="collapse" id="collapseReviews" aria-labelledby="headingOne" data-bs-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="addReview.html">Add Review</a>
<a class="nav-link" href="viewReviews.html">View Reviews</a>
</nav>
</div>

<!-- New Booking Details Link -->
<a class="nav-link" href="booking_details.html">
<div class="sb-nav-link-icon">
Expand Down Expand Up @@ -130,6 +147,7 @@
</div>
Manage Feedback
</a>

</div>
</div>
</nav>
Expand Down
221 changes: 221 additions & 0 deletions addreview.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<meta name="description" content="" />
<meta name="author" content="" />
<title>Dashboard - SB Admin</title>
<link
href="https://cdn.jsdelivr.net/npm/simple-datatables@7.1.2/dist/style.min.css"
rel="stylesheet"
/>
<link href="css/styles.css" rel="stylesheet" />
<script
src="https://use.fontawesome.com/releases/v6.3.0/js/all.js"
crossorigin="anonymous"
></script>
<style>
/* Ensure that the container of the cards is using flexbox */
#eventsCardContainer {
display: flex;
flex-wrap: wrap; /* Allows items to wrap to the next line */
justify-content: space-around; /* Space out items evenly */
}

.card {
width: 300px; /* Set a fixed width for all cards */
height: 600px; /* Set a fixed height to make them uniform */
margin: 20px; /* Adds spacing between the cards */
display: flex;
flex-direction: column;
justify-content: space-between; /* Ensure proper layout of content inside the card */
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
border-radius: 10px;
opacity: 1;
}

.card img {
width: 100%;
height: 200px; /* Fixed height for images */
object-fit: cover; /* Ensures images scale properly */
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}

.card-content {
padding: 15px;
flex-grow: 1; /* Takes up available space in the card */
}

.card-reveal {
padding: 15px;
}

.submit-btn {
background-color: #2196F3;
color: white;
padding: 10px;
border: none;
border-radius: 5px;
width: 100%;
text-align: center;
cursor: pointer;
}

.submit-btn:hover {
background-color: #1976D2;
}

.star-rating {
display: inline-flex;
flex-direction: row-reverse; /* Right to left */
}

.star-rating input {
display: none; /* Hide radio inputs */
}

.star-rating label {
font-size: 30px;
color: lightgray; /* Default color for stars */
cursor: pointer;
}

/* Highlight stars on hover and on selection */
.star-rating input:checked ~ label,
.star-rating label:hover,
.star-rating label:hover ~ label {
color: gold; /* Color of the highlighted stars */
}
</style>

</head>
<body class="sb-nav-fixed">
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
<!-- Navbar Brand-->
<a class="navbar-brand ps-3" href="dashboard.html">Event Manager</a>
<!-- Sidebar Toggle-->
<button
class="btn btn-link btn-sm order-1 order-lg-0 me-4 me-lg-0"
id="sidebarToggle"
href="#!"
>
<i class="fas fa-bars"></i>
</button>
<!-- Navbar Search-->
<form
class="d-none d-md-inline-block form-inline ms-auto me-0 me-md-3 my-2 my-md-0"
>
<div class="input-group">
<input
class="form-control"
type="text"
placeholder="Search for..."
aria-label="Search for..."
aria-describedby="btnNavbarSearch"
/>
<button class="btn btn-primary" id="btnNavbarSearch" type="button">
<i class="fas fa-search"></i>
</button>
</div>
</form>
<!-- Navbar-->
<ul class="navbar-nav ms-auto ms-md-0 me-3 me-lg-4">
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle"
id="navbarDropdown"
href="#"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
><i class="fas fa-user fa-fw"></i
></a>
<ul
class="dropdown-menu dropdown-menu-end"
aria-labelledby="navbarDropdown"
>
<li><a class="dropdown-item" href="#!">Settings</a></li>
<li><a class="dropdown-item" href="#!">Activity Log</a></li>
<li><hr class="dropdown-divider" /></li>
<li><a class="dropdown-item" id="logoutButton">Logout</a></li>
</ul>
</li>
</ul>
</nav>
<div id="layoutSidenav">
<div id="layoutSidenav_nav">
<nav class="sb-sidenav accordion sb-sidenav-dark" id="sidenavAccordion">
<div class="sb-sidenav-menu">
<div class="nav">
<a class="nav-link" href="dashboard.html">
<div class="sb-nav-link-icon">
<i class="fas fa-tachometer-alt"></i>
</div>
Dashboard
</a>
<a class="nav-link" href="myevents.html">
<div class="sb-nav-link-icon">
<i class="fas fa-list-ul"></i>
</div>
Manage My Events
</a>
<a class="nav-link" href="addEvent.html">
<div class="sb-nav-link-icon">
<i class="fas fa-plus-circle"></i>
</div>
Add Events
</a>
<a class="nav-link" href="calendar.html">
<div class="sb-nav-link-icon">
<i class="fas fa-calendar-alt"></i>
</div>
Event Calendar
</a>
<a class="nav-link collapsed" href="#" data-bs-toggle="collapse" data-bs-target="#collapseReviews" aria-expanded="false" aria-controls="collapseReviews">
<div class="sb-nav-link-icon">
<i class="fas fa-star"></i>
</div>
Review Management
<div class="sb-sidenav-collapse-arrow">
<i class="fas fa-angle-down"></i>
</div>
</a>
<div class="collapse" id="collapseReviews" aria-labelledby="headingOne" data-bs-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="addReview.html">Add Review</a>
<a class="nav-link" href="viewReviews.html">View Reviews</a>
</nav>
</div>
</div>
</div>
</nav>
</div>

<div class="container mt-5">
<br>
<h2>Review Management</h2>
<div id="eventsCardContainer" class="row"></div>
</div>
</div>


<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"
crossorigin="anonymous"
></script>
<script src="scripts.js"></script>

<script
src="https://cdn.jsdelivr.net/npm/simple-datatables@7.1.2/dist/umd/simple-datatables.min.js"
crossorigin="anonymous"
></script>

</body>
</html>
86 changes: 76 additions & 10 deletions controllers/addeventsController.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,87 @@
const addeventsModel = require('../models/addeventsModel');

// const addEvent = (req, res) => {
// // Check if user is authenticated
// if (!req.session.userId) {
// return res.status(401).json({ message: 'Unauthorized: Please log in to add events' });
// }

// let event = req.body;
// event.userId = req.session.userId; // Associate event with the logged-in user

// addeventsModel.createEvent(event, (err, result) => {
// if (err) {
// res.status(500).json({ message: 'Error adding event' });
// } else {
// res.status(201).json({ message: 'Event added successfully' });
// }
// });
// };

// module.exports = { addEvent };

const multer = require('multer');
const path = require('path');

// Configure Multer for file storage
const storage = multer.diskStorage({
destination: './uploads/', // Directory where files will be stored
filename: (req, file, cb) => {
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
},
});

// Initialize Multer middleware
const upload = multer({
storage: storage,
limits: { fileSize: 5 * 1024 * 1024 }, // Limit file size to 5MB
fileFilter: (req, file, cb) => {
const filetypes = /jpeg|jpg|png|gif/;
const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
const mimetype = filetypes.test(file.mimetype);

if (mimetype && extname) {
return cb(null, true);
} else {
cb('Error: Only images are allowed');
}
},
}).single('eventPhoto'); // 'eventPhoto' is the name of the file input field

// Add Event Controller with image upload
const addEvent = (req, res) => {
// Check if user is authenticated
if (!req.session.userId) {
return res.status(401).json({ message: 'Unauthorized: Please log in to add events' });
upload(req, res, (err) => {
if (err) {
return res.status(400).json({ message: err });
}

let event = req.body;
event.userId = req.session.userId; // Associate event with the logged-in user
if (!req.file) {
return res.status(400).json({ message: 'No file uploaded' });
}

// Event data including the file path for the image
const event = {
eventName: req.body.eventName,
eventDate: req.body.eventDate,
eventTime: req.body.eventTime,
venue: req.body.venue,
aboutEvent: req.body.aboutEvent,
specialNotes: req.body.specialNotes,
type: req.body.type,
eventPhoto: req.file.filename, // Save the uploaded file's filename
userId: req.session.userId, // Associate event with the logged-in user
};

// Save event data to your database
addeventsModel.createEvent(event, (err, result) => {
if (err) {
res.status(500).json({ message: 'Error adding event' });
} else {
res.status(201).json({ message: 'Event added successfully' });
}
if (err) {
return res.status(500).json({ message: 'Error adding event' });
} else {
return res.status(201).json({ message: 'Event added successfully', event: result });
}
});
});
};

module.exports = { addEvent };

13 changes: 12 additions & 1 deletion controllers/dashboardController.js
Original file line number Diff line number Diff line change
@@ -1 +1,12 @@
//this is dashboarcontroller
const dashboardModel = require("../models/dashboardModel");

const getLatestEvents = (req, res) => {
dashboardModel.getLatestEvents((err, events) => {
if (err) {
return res.status(500).json({ message: "Error fetching latest events" });
}
res.status(200).json(events);
});
};

module.exports = { getLatestEvents };
Loading