Example #1
0
 board.cards().each(function(card) {
     // no arm, no chocolate
     if (!card.get('badges').due) return;
     var event = new icalendar.VEvent(card.id);
     event.setSummary(card.get('name'));
     event.setDescription(card.get('description'));
     event.setDate(card.get('badges').due);
     event.addProperty('ATTACH', card.get('url'));
     event.addProperty('URL', card.get('url'));
     ical.addComponent(event);
 });
Example #2
0
function getICalendarFeed(pmeResults, yEntityId, mode) {
	if (!pmeResults || !yEntityId || !pmeResults.value || !pmeResults.TZO) return;

	var tzOffset = pmeResults.TZO; //timezone offset (Netherlands)
	var task, vEvent, startDateTime, endDateTime, startDateTimeCET, endDateTimeCET, startDateString, subject, eventDuration;

    var ical = new icalendar.iCalendar();
    ical.addProperty("X-PUBLISHED-TTL", "PT30M"); //PT30M = 30 minutes, PT1H = 1 hour
    ical.addProperty("X-WR-CALNAME", "PlanningPME");

    var tasks = pmeResults.value.Tasks;
	for (var i=0; i<tasks.length; i++) {
		task = tasks[i];
		if (task.RI === yEntityId) {
            //get event times
            startDateTime = new Date(parseInt(task.SD.substr(6), 10) + tzOffset);
            endDateTime = new Date(parseInt(task.ED.substr(6), 10) + tzOffset);
            startDateString = startDateTime.getUTCFullYear() + ('0' + (startDateTime.getUTCMonth()+1)).slice(-2) + ('0' + startDateTime.getUTCDate()).slice(-2);
            
            //set id
            vEvent = new icalendar.VEvent('PME-' + task.Id + '-' + startDateString); //add start-date because task's Id isn't always unique
            
            //set start en end datetime
            if (mode === 'appointment') {
                vEvent.setDate(startDateTime, endDateTime);
            }
            else {
                //mode event -> full day events
                vEvent_setFullDay(vEvent, startDateTime);
            }

            //set subject
            subject = task.D;
            if (mode === 'event') {
                eventDuration = dateDiffInHours(startDateTime, endDateTime);
                if (eventDuration < 8) {
                startDateTimeCET = new Date(startDateTime.getTime() - tzOffset);
                endDateTimeCET = new Date(endDateTime.getTime() - tzOffset);
                subject = "[" + ('0' + startDateTimeCET.getUTCHours()).slice(-2) + ":" + ('0' + startDateTimeCET.getUTCMinutes()).slice(-2) +
                    "-" + ('0' + endDateTimeCET.getUTCHours()).slice(-2) + ":" + ('0' + endDateTimeCET.getUTCMinutes()).slice(-2) + "] " + subject;
                }
            }
            vEvent.setSummary(subject);

            //set description
            if (task.R) vEvent.setDescription(task.R.replace(/\r/g,""));

            if (mode === 'appointment') {
                if ([7].indexOf(task.S) != -1) vEvent.addProperty("X-MICROSOFT-CDO-BUSYSTATUS", "FREE");
                if ([3,4].indexOf(task.S) != -1) vEvent.addProperty("X-MICROSOFT-CDO-BUSYSTATUS", "TENTATIVE");
                if ([0].indexOf(task.S) != -1) vEvent.addProperty("X-MICROSOFT-CDO-BUSYSTATUS", "BUSY");
                if ([1,2,5,6,8].indexOf(task.S) != -1) vEvent.addProperty("X-MICROSOFT-CDO-BUSYSTATUS", "OOF");   
            }
            else {
                //fullday events are not visible in availibity searches
                vEvent.addProperty("TRANSP", "TRANSPARENT"); //BUSYSTATUS = FREE 
            }

            ical.addComponent(vEvent);
		}
	}
	return ical.toString();
}