summaryrefslogblamecommitdiffstats
path: root/server/lib/eventhelper.js
blob: fb359e90dee0c435af17195389b38e1536174a9b (plain) (tree)
1
2
3
4
5
6
7
8
9
10


                                                            


                               
                               
                             

                                                                                
          
                                                       
































                                                                                                                         

                                                          
// /* global __appdir */
// var path = require('path')
// var db = require(path.join(__appdir, 'lib', 'sequelize'))
const later = require('later')

function isActive (eventData) {
  const now = Date.now() / 1000
  if (eventData.repetitive) {
    if (now < eventData.startDate || eventData.endDate < now) return false
    return later.schedule(getTimeSpans(eventData)).isValid(new Date(now * 1000))
  } else {
    return eventData.start < now && now < eventData.end
  }
}

function getTimeSpans (eventData) {
  const schedule = later.parse.recur()
  schedule.after(eventData.startTime).time()
  const startTime = eventData.startTime.split(':').map(x => parseInt(x))
  const endTime = eventData.endTime.split(':').map(x => parseInt(x))
  if (startTime[0] > endTime[0] || (startTime[0] === endTime[0] && startTime[1] > endTime[1])) {
    _setUpSchedule(eventData, schedule)
    schedule.and()
  }
  schedule.before(eventData.endTime).time()
  _setUpSchedule(eventData, schedule)
  return schedule
}

function getStartTimes (eventData) {
  const schedule = later.parse.recur()
  schedule.on(eventData.startTime).time()
  _setUpSchedule(eventData, schedule)
  return schedule
}

function _setUpSchedule (eventData, schedule) {
  schedule.on(eventData.monthMap.reduce((arr, v, i) => { if (v) arr.push(i + 1); return arr }, [])).month()
  schedule.on(eventData.dayMap.reduce((arr, v, i) => { if (v) arr.push(((i + 1) % 7) + 1); return arr }, [])).dayOfWeek()
  schedule.every(parseInt(eventData.interval))
  const type = eventData.intervalType
  if (type === 'month') schedule.month()
  else if (type === 'week') schedule.weekOfYear()
  else schedule.dayOfYear()
}

module.exports = { isActive, getTimeSpans, getStartTimes }