This commit is contained in:
les
2019-09-11 19:12:24 +02:00
parent 93baf01a55
commit 2fe956d117
65 changed files with 762 additions and 721 deletions

View File

@@ -9,7 +9,7 @@ const federation = require('../../federation/helpers')
const eventController = {
async addComment(req, res) {
async addComment (req, res) {
// comment could be added to an event or to another comment
let event = await Event.findOne({ where: { activitypub_id: { [Op.eq]: req.body.id } } })
if (!event) {
@@ -21,11 +21,11 @@ const eventController = {
res.json(comment)
},
async getMeta(req, res) {
async getMeta (req, res) {
const places = await Place.findAll({
order: [[Sequelize.literal('weigth'), 'DESC']],
attributes: {
include: [[Sequelize.fn('count', Sequelize.col('events.placeId')) , 'weigth']],
include: [[Sequelize.fn('count', Sequelize.col('events.placeId')), 'weigth']],
exclude: ['weigth', 'createdAt', 'updatedAt']
},
include: [{ model: Event, attributes: [] }],
@@ -36,25 +36,25 @@ const eventController = {
order: [['weigth', 'DESC']],
attributes: {
exclude: ['createdAt', 'updatedAt']
},
}
})
res.json({ tags, places })
},
async getNotifications(event) {
function match(event, filters) {
async getNotifications (event) {
function match (event, filters) {
// matches if no filter specified
if (!filters) return true
if (!filters) { return true }
// check for visibility
if (typeof filters.is_visible !== 'undefined' && filters.is_visible !== event.is_visible) return false
if (typeof filters.is_visible !== 'undefined' && filters.is_visible !== event.is_visible) { return false }
if (!filters.tags && !filters.places) return true
if (!filters.tags.length && !filters.places.length) return true
if (!filters.tags && !filters.places) { return true }
if (!filters.tags.length && !filters.places.length) { return true }
if (filters.tags.length) {
const m = lodash.intersection(event.tags.map(t => t.tag), filters.tags)
if (m.length > 0) return true
if (m.length > 0) { return true }
}
if (filters.places.length) {
if (filters.places.find(p => p === event.place.name)) {
@@ -68,7 +68,7 @@ const eventController = {
return notifications.filter(notification => match(event, notification.filters))
},
async updateTag(req, res) {
async updateTag (req, res) {
const tag = await Tag.findByPk(req.body.tag)
if (tag) {
res.json(await tag.update(req.body))
@@ -77,7 +77,7 @@ const eventController = {
}
},
async updatePlace(req, res) {
async updatePlace (req, res) {
const place = await Place.findByPk(req.body.id)
await place.update(req.body)
res.json(place)
@@ -85,12 +85,12 @@ const eventController = {
// TODO retrieve next/prev event also
// select id, start_datetime, title from events where start_datetime > (select start_datetime from events where id=89) order by start_datetime limit 20;
async get(req, res) {
async get (req, res) {
const is_admin = req.user && req.user.is_admin
const id = req.params.event_id
let event = await Event.findByPk(id, {
const event = await Event.findByPk(id, {
plain: true,
attributes: {
attributes: {
exclude: ['createdAt', 'updatedAt']
},
include: [
@@ -109,29 +109,29 @@ const eventController = {
}
},
async confirm(req, res) {
async confirm (req, res) {
const id = Number(req.params.event_id)
const event = await Event.findByPk(id)
if (!event) return res.sendStatus(404)
if (!event) { return res.sendStatus(404) }
try {
event.is_visible = true
await event.save()
res.sendStatus(200)
// send notification
//notifier.notifyEvent(event.id)
//federation.sendEvent(event, req.user)
// notifier.notifyEvent(event.id)
// federation.sendEvent(event, req.user)
} catch (e) {
res.sendStatus(404)
}
},
async unconfirm(req, res) {
async unconfirm (req, res) {
const id = Number(req.params.event_id)
const event = await Event.findByPk(id)
if (!event) return sendStatus(404)
if (!event) { return sendStatus(404) }
try {
event.is_visible = false
@@ -142,7 +142,7 @@ const eventController = {
}
},
async getUnconfirmed(req, res) {
async getUnconfirmed (req, res) {
const events = await Event.findAll({
where: {
is_visible: false
@@ -153,7 +153,7 @@ const eventController = {
res.json(events)
},
async addNotification(req, res) {
async addNotification (req, res) {
try {
const notification = {
filters: { is_visible: true },
@@ -168,7 +168,7 @@ const eventController = {
}
},
async delNotification(req, res) {
async delNotification (req, res) {
const remove_code = req.params.code
try {
const notification = await Notification.findOne({ where: { remove_code: { [Op.eq]: remove_code } } })
@@ -179,7 +179,7 @@ const eventController = {
res.sendStatus(200)
},
async getAll(req, res) {
async getAll (req, res) {
// this is due how v-calendar shows dates
const start = moment()
.year(req.params.year)
@@ -193,7 +193,7 @@ const eventController = {
.endOf('month')
const shownDays = end.diff(start, 'days')
if (shownDays <= 35) end = end.add(1, 'week')
if (shownDays <= 35) { end = end.add(1, 'week') }
end = end.endOf('week')
let events = await Event.findAll({
@@ -202,10 +202,10 @@ const eventController = {
is_visible: true,
[Op.or]: [
// return all recurrent events
{recurrent: { [Op.ne]: null }},
{ recurrent: { [Op.ne]: null } },
// and events in specified range
{ start_datetime: { [Op.between]: [start.unix(), end.unix()] }}
{ start_datetime: { [Op.between]: [start.unix(), end.unix()] } }
]
},
attributes: { exclude: ['createdAt', 'updatedAt', 'placeId' ] },
@@ -223,10 +223,10 @@ const eventController = {
})
// build singular events from a recurrent pattern
function createEventsFromRecurrent(e, dueTo=null) {
function createEventsFromRecurrent (e, dueTo = null) {
const events = []
const recurrent = JSON.parse(e.recurrent)
if (!recurrent.frequency) return false
if (!recurrent.frequency) { return false }
let cursor = moment(start).startOf('week')
const start_date = moment.unix(e.start_datetime)
@@ -236,18 +236,18 @@ const eventController = {
const type = recurrent.type
// default frequency is '1d' => each day
const toAdd = { n: 1, unit: 'day'}
const toAdd = { n: 1, unit: 'day' }
cursor.set('hour', start_date.hour()).set('minute', start_date.minutes())
// each week or 2 (search for the first specified day)
if (frequency === '1w' || frequency === '2w') {
cursor.add(days[0]-1, 'day')
cursor.add(days[0] - 1, 'day')
if (frequency === '2w') {
const nWeeks = cursor.diff(e.start_datetime, 'w')%2
if (!nWeeks) cursor.add(1, 'week')
const nWeeks = cursor.diff(e.start_datetime, 'w') % 2
if (!nWeeks) { cursor.add(1, 'week') }
}
toAdd.n = Number(frequency[0])
toAdd.unit = 'week';
toAdd.unit = 'week'
// cursor.set('hour', start_date.hour()).set('minute', start_date.minutes())
}
@@ -263,37 +263,35 @@ const eventController = {
}
}
// add event at specified frequency
// add event at specified frequency
while (true) {
let first_event_of_week = cursor.clone()
const first_event_of_week = cursor.clone()
days.forEach(d => {
if (type === 'ordinal') {
cursor.date(d)
} else {
cursor.day(d-1)
cursor.day(d - 1)
}
if (cursor.isAfter(dueTo) || cursor.isBefore(start)) return
if (cursor.isAfter(dueTo) || cursor.isBefore(start)) { return }
e.start_datetime = cursor.unix()
e.end_datetime = e.start_datetime+duration
events.push( Object.assign({}, e) )
})
if (cursor.isAfter(dueTo)) break
e.end_datetime = e.start_datetime + duration
events.push(Object.assign({}, e))
})
if (cursor.isAfter(dueTo)) { break }
cursor = first_event_of_week.add(toAdd.n, toAdd.unit)
}
return events
}
let allEvents = events.filter(e => !e.recurrent)
events.filter(e => e.recurrent).forEach(e => {
const events = createEventsFromRecurrent(e, end)
if (events)
allEvents = allEvents.concat(events)
if (events) { allEvents = allEvents.concat(events) }
})
// allEvents.sort((a,b) => a.start_datetime-b.start_datetime)
res.json(allEvents.sort((a,b) => a.start_datetime-b.start_datetime))
res.json(allEvents.sort((a, b) => a.start_datetime - b.start_datetime))
}
}