summaryrefslogtreecommitdiff
path: root/src/routes
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes')
-rw-r--r--src/routes/event.ts2
-rw-r--r--src/routes/frontend.ts71
-rw-r--r--src/routes/group.ts2
3 files changed, 73 insertions, 2 deletions
diff --git a/src/routes/event.ts b/src/routes/event.ts
index fb9d8c7..6be5ff8 100644
--- a/src/routes/event.ts
+++ b/src/routes/event.ts
@@ -140,6 +140,7 @@ router.post(
viewPassword: "", // Backwards compatibility
editPassword: "", // Backwards compatibility
editToken: editToken,
+ showOnPublicList: eventData?.publicBoolean,
eventGroup: isPartOfEventGroup ? eventGroup?._id : null,
usersCanAttend: eventData.joinBoolean ? true : false,
showUsersList: false, // Backwards compatibility
@@ -371,6 +372,7 @@ router.put(
url: eventData.eventURL,
hostName: eventData.hostName,
image: eventImageFilename,
+ showOnPublicList: eventData.publicBoolean,
usersCanAttend: eventData.joinBoolean,
showUsersList: false, // Backwards compatibility
usersCanComment: eventData.interactionBoolean,
diff --git a/src/routes/frontend.ts b/src/routes/frontend.ts
index 0d8793a..4cdce8a 100644
--- a/src/routes/frontend.ts
+++ b/src/routes/frontend.ts
@@ -2,7 +2,7 @@ import { Router, Request, Response } from "express";
import moment from "moment-timezone";
import { marked } from "marked";
import { markdownToSanitizedHTML, renderPlain } from "../util/markdown.js";
-import getConfig, { frontendConfig } from "../lib/config.js";
+import getConfig, { frontendConfig, instanceRules } from "../lib/config.js";
import { addToLog, exportICal } from "../helpers.js";
import Event from "../models/Event.js";
import EventGroup, { IEventGroup } from "../models/EventGroup.js";
@@ -16,7 +16,20 @@ const config = getConfig();
const router = Router();
router.get("/", (_: Request, res: Response) => {
- res.render("home", frontendConfig());
+ if (config.general.show_public_event_list) {
+ return res.redirect("/events");
+ }
+ return res.render("home", {
+ ...frontendConfig(),
+ instanceRules: instanceRules(),
+ });
+});
+
+router.get("/about", (_: Request, res: Response) => {
+ return res.render("home", {
+ ...frontendConfig(),
+ instanceRules: instanceRules(),
+ });
});
router.get("/new", (_: Request, res: Response) => {
@@ -57,6 +70,51 @@ router.get("/new/:magicLinkToken", async (req: Request, res: Response) => {
});
});
+router.get("/events", async (_: Request, res: Response) => {
+ if (!config.general.show_public_event_list) {
+ return res.status(404).render("404", frontendConfig());
+ }
+ const events = await Event.find({ showOnPublicList: true })
+ .populate("eventGroup")
+ .lean()
+ .sort("start");
+ const updatedEvents = events.map((event) => {
+ const startMoment = moment.tz(event.start, event.timezone);
+ const endMoment = moment.tz(event.end, event.timezone);
+ const isSameDay = startMoment.isSame(endMoment, "day");
+
+ return {
+ id: event.id,
+ name: event.name,
+ location: event.location,
+ displayDate: isSameDay
+ ? startMoment.format("D MMM YYYY")
+ : `${startMoment.format("D MMM YYYY")} - ${endMoment.format(
+ "D MMM YYYY",
+ )}`,
+ eventHasConcluded: endMoment.isBefore(moment.tz(event.timezone)),
+ eventGroup: event.eventGroup,
+ };
+ });
+ const upcomingEvents = updatedEvents.filter(
+ (event) => event.eventHasConcluded === false,
+ );
+ const pastEvents = updatedEvents.filter(
+ (event) => event.eventHasConcluded === true,
+ );
+ const eventGroups = await EventGroup.find({
+ showOnPublicList: true,
+ }).lean();
+
+ res.render("publicEventList", {
+ title: "Public events",
+ upcomingEvents: upcomingEvents,
+ pastEvents: pastEvents,
+ eventGroups: eventGroups,
+ ...frontendConfig(),
+ });
+});
+
router.get("/:eventID", async (req: Request, res: Response) => {
try {
const event = await Event.findOne({
@@ -266,6 +324,11 @@ router.get("/:eventID", async (req: Request, res: Response) => {
firstLoad: firstLoad,
eventHasConcluded: eventHasConcluded,
eventHasBegun: eventHasBegun,
+ eventWillBeDeleted: config.general.delete_after_days > 0,
+ daysUntilDeletion: moment
+ .tz(event.end, event.timezone)
+ .add(config.general.delete_after_days, "days")
+ .fromNow(),
metadata: metadata,
jsonData: {
name: event.name,
@@ -276,6 +339,7 @@ router.get("/:eventID", async (req: Request, res: Response) => {
url: event.url,
hostName: event.hostName,
creatorEmail: event.creatorEmail,
+ showOnPublicList: event.showOnPublicList,
eventGroupID: event.eventGroup
? (event.eventGroup as unknown as IEventGroup).id
: null,
@@ -337,6 +401,7 @@ router.get("/group/:eventGroupID", async (req: Request, res: Response) => {
return {
id: event.id,
name: event.name,
+ location: event.location,
displayDate: isSameDay
? startMoment.format("D MMM YYYY")
: `${startMoment.format("D MMM YYYY")} - ${endMoment.format(
@@ -388,6 +453,7 @@ router.get("/group/:eventGroupID", async (req: Request, res: Response) => {
res.set("X-Robots-Tag", "noindex");
res.render("eventgroup", {
+ ...frontendConfig(),
domain: config.general.domain,
title: eventGroup.name,
eventGroupData: eventGroup,
@@ -409,6 +475,7 @@ router.get("/group/:eventGroupID", async (req: Request, res: Response) => {
creatorEmail: eventGroup.creatorEmail,
image: eventGroup.image,
editToken: editingEnabled ? eventGroupEditToken : null,
+ showOnPublicList: eventGroup.showOnPublicList,
},
});
} catch (err) {
diff --git a/src/routes/group.ts b/src/routes/group.ts
index 34377b0..c006a5d 100644
--- a/src/routes/group.ts
+++ b/src/routes/group.ts
@@ -81,6 +81,7 @@ router.post(
hostName: groupData.hostName,
editToken: editToken,
firstLoad: true,
+ showOnPublicList: groupData.publicBoolean,
});
await eventGroup.save();
@@ -206,6 +207,7 @@ router.put(
url: req.body.eventGroupURL,
hostName: req.body.hostName,
image: eventGroupImageFilename,
+ showOnPublicList: groupData.publicBoolean,
};
await EventGroup.findOneAndUpdate(