From c7469119b76fe63154a39131317d38644f6830ac Mon Sep 17 00:00:00 2001 From: lowercasename Date: Sat, 3 Aug 2019 14:31:37 +0100 Subject: Users can remove themselves, admins can remove all users from events --- public/css/style.css | 10 ++++++ routes.js | 78 ++++++++++++++++++++++++++++++++++++++++++++--- views/event.handlebars | 83 +++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 159 insertions(+), 12 deletions(-) diff --git a/public/css/style.css b/public/css/style.css index ebbc375..ec43118 100755 --- a/public/css/style.css +++ b/public/css/style.css @@ -251,3 +251,13 @@ body, html { height: 2.25rem !important; } +#removeAttendee { + position: absolute; + top: 110px; + left: 53px; + color: #fff; +} + +#removeAttendee:hover { + color: #c82333; +} diff --git a/routes.js b/routes.js index ab41656..ff218a1 100755 --- a/routes.js +++ b/routes.js @@ -146,10 +146,10 @@ router.get('/:eventID', (req, res) => { else { displayDate = moment.tz(event.start, event.timezone).format('dddd D MMMM YYYY [at] h:mm a') + moment.tz(event.end, event.timezone).format(' [] dddd D MMMM YYYY [at] h:mm a [](z)[]'); } - eventStartISO = moment.tz(event.start, event.timezone).toISOString(); - eventEndISO = moment.tz(event.end, event.timezone).toISOString(); + eventStartISO = moment.tz(event.start, "Etc/UTC").toISOString(); + eventEndISO = moment.tz(event.end, "Etc/UTC").toISOString(); parsedStart = moment.tz(event.start, event.timezone).format('YYYYMMDD[T]HHmmss'); - parsedEnd = moment.tz(event.start, event.timezone).format('YYYYMMDD[T]HHmmss'); + parsedEnd = moment.tz(event.end, event.timezone).format('YYYYMMDD[T]HHmmss'); let eventHasConcluded = false; if (moment.tz(event.end, event.timezone).isBefore(moment.tz(event.timezone))){ eventHasConcluded = true; @@ -588,6 +588,76 @@ router.post('/attendevent/:eventID', (req, res) => { }); }); +router.post('/unattendevent/:eventID', (req, res) => { + Event.update( + { id: req.params.eventID }, + { $pull: { attendees: { email: req.body.attendeeEmail } } } + ) + .then(response => { + console.log(response) + addToLog("removeEventAttendee", "success", "Attendee removed from event " + req.params.eventID); + if (sendEmails) { + if (req.body.attendeeEmail){ + const msg = { + to: req.body.attendeeEmail, + from: { + name: 'Gathio', + email: 'notifications@gath.io', + }, + templateId: 'd-56c97755d6394c23be212fef934b0f1f', + dynamic_template_data: { + subject: 'gathio: You have been removed from an event', + eventID: req.params.eventID + }, + }; + sgMail.send(msg); + } + } + res.writeHead(302, { + 'Location': '/' + req.params.eventID + }); + res.end(); + }) + .catch((err) => { + res.send('Database error, please try again :('); addToLog("removeEventAttendee", "error", "Attempt to remove attendee from event " + req.params.eventID + " failed with error: " + err); + }); +}); + +router.post('/removeattendee/:eventID/:attendeeID', (req, res) => { + Event.update( + { id: req.params.eventID }, + { $pull: { attendees: { _id: req.params.attendeeID } } } + ) + .then(response => { + console.log(response) + addToLog("removeEventAttendee", "success", "Attendee removed by admin from event " + req.params.eventID); + if (sendEmails) { + if (req.body.attendeeEmail){ + const msg = { + to: req.body.attendeeEmail, + from: { + name: 'Gathio', + email: 'notifications@gath.io', + }, + templateId: 'd-56c97755d6394c23be212fef934b0f1f', + dynamic_template_data: { + subject: 'gathio: You have been removed from an event', + eventID: req.params.eventID + }, + }; + sgMail.send(msg); + } + } + res.writeHead(302, { + 'Location': '/' + req.params.eventID + }); + res.end(); + }) + .catch((err) => { + res.send('Database error, please try again :('); addToLog("removeEventAttendee", "error", "Attempt to remove attendee by admin from event " + req.params.eventID + " failed with error: " + err); + }); +}); + router.post('/post/comment/:eventID', (req, res) => { let commentID = shortid.generate(); const newComment = { @@ -655,7 +725,7 @@ router.post('/post/reply/:eventID/:commentID', (req, res) => { event.save() .then(() => { addToLog("addEventReply", "success", "Reply added to comment " + commentID + " in event " + req.params.eventID); - if (sendEmails) { + if (sendEmails) { Event.findOne({id: req.params.eventID}).distinct('attendees.email', function(error, ids) { attendeeEmails = ids; if (!error){ diff --git a/views/event.handlebars b/views/event.handlebars index daacfc5..8d2559b 100755 --- a/views/event.handlebars +++ b/views/event.handlebars @@ -95,12 +95,17 @@ {{#if eventData.usersCanAttend}}
-
Attendees {{#if eventData.attendees}}({{eventData.attendees.length}}){{/if}}
+
Attendees {{#if eventData.attendees}}({{eventData.attendees.length}}){{/if}} +
+ + +
+
{{#if eventData.attendees}}
    {{#each eventData.attendees}} -
  • {{this.name}}
  • + {{this.name}}{{#if ../editingEnabled}}{{/if}} {{/each}}
{{else}} @@ -129,8 +134,8 @@
- - Optional - we'll use it to send you any updates to the event. + + We'll only use it to send you updates to the event.
@@ -142,8 +147,61 @@
+ + + + {{#if editingEnabled}} + + {{/if}} {{/if}} + {{#if eventData.usersCanComment}}
Discussion
@@ -220,7 +278,6 @@ {{#if editingEnabled}} {{#unless eventHasConcluded}} - {{> editeventmodal }} {{/unless}} @@ -248,9 +305,10 @@ {{/if}} - +{{#unless eventHasConcluded}} + +{{/unless}}