From 93a5bda71ac430db55af2bc1fb5acc22298256b5 Mon Sep 17 00:00:00 2001 From: Simon Buckle Date: Thu, 29 May 2008 10:21:17 +0000 Subject: [PATCH] Initial import of the calendar component for slingshot including a calendar and rss feed dashlet. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@9302 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../calendar/RetrieveMonthEvents.get.html.ftl | 2 +- .../calendar/RetrieveMonthEvents.get.js | 189 +++++++----------- .../calendar/RetrieveMonthEvents.get.json.ftl | 16 ++ .../org/alfresco/calendar/events.get.desc.xml | 7 + .../org/alfresco/calendar/events.get.js | 13 ++ .../org/alfresco/calendar/events.get.json.ftl | 20 ++ .../org/alfresco/calendar/feed.get.desc.xml | 6 + .../org/alfresco/calendar/feed.get.html.ftl | 17 ++ .../org/alfresco/calendar/feed.get.js | 12 ++ .../slingshot/calendar/event.post.desc.xml | 8 + .../slingshot/calendar/event.post.html.ftl | 2 + .../alfresco/slingshot/calendar/event.post.js | 39 ++++ .../slingshot/calendar/eventList.get.desc.xml | 7 + .../slingshot/calendar/eventList.get.js | 24 +++ .../slingshot/calendar/eventList.get.json.ftl | 20 ++ 15 files changed, 263 insertions(+), 119 deletions(-) create mode 100644 config/alfresco/templates/webscripts/org/alfresco/calendar/RetrieveMonthEvents.get.json.ftl create mode 100644 config/alfresco/templates/webscripts/org/alfresco/calendar/events.get.desc.xml create mode 100644 config/alfresco/templates/webscripts/org/alfresco/calendar/events.get.js create mode 100644 config/alfresco/templates/webscripts/org/alfresco/calendar/events.get.json.ftl create mode 100644 config/alfresco/templates/webscripts/org/alfresco/calendar/feed.get.desc.xml create mode 100644 config/alfresco/templates/webscripts/org/alfresco/calendar/feed.get.html.ftl create mode 100644 config/alfresco/templates/webscripts/org/alfresco/calendar/feed.get.js create mode 100644 config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/event.post.desc.xml create mode 100644 config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/event.post.html.ftl create mode 100644 config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/event.post.js create mode 100644 config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.desc.xml create mode 100644 config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.js create mode 100644 config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.json.ftl diff --git a/config/alfresco/templates/webscripts/org/alfresco/calendar/RetrieveMonthEvents.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/calendar/RetrieveMonthEvents.get.html.ftl index 1a5002efa2..1bc90f08cd 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/calendar/RetrieveMonthEvents.get.html.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/calendar/RetrieveMonthEvents.get.html.ftl @@ -1,4 +1,4 @@ -<#assign days = DaysArray> +<#assign days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]> diff --git a/config/alfresco/templates/webscripts/org/alfresco/calendar/RetrieveMonthEvents.get.js b/config/alfresco/templates/webscripts/org/alfresco/calendar/RetrieveMonthEvents.get.js index 3b2589999b..259dd0a048 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/calendar/RetrieveMonthEvents.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/calendar/RetrieveMonthEvents.get.js @@ -1,15 +1,13 @@ var dateString = args.d; var _currentDateForMonthView= new Date(dateString); -var spaceRef = args.s; -var currentBaseSpace = findNodeByNodeRef(spaceRef); - +var currentBaseSpace = search.findNode(args.s); var eventList = new Array(); function editableObject(obj, iseditable, color) { this.object = obj; this.isEditable = iseditable; - this.color = color; + this.color = color; } function eventType(datepart, obj) { @@ -17,85 +15,70 @@ function eventType(datepart, obj) { this.object = obj; } -var DaysArray = function() { - var _arr = new Array(); - _arr[0] = "Sunday"; - _arr[1] = "Monday"; - _arr[2] = "Tuesday"; - _arr[3] = "Wednesday"; - _arr[4] = "Thursday"; - _arr[5] = "Friday"; - _arr[6] = "Saturday"; - - return _arr; -} - -var MonthsArray = function() { - var _arr = new Array(); - _arr[0] = "January"; - _arr[1] = "February"; - _arr[2] = "March"; - _arr[3] = "April"; - _arr[4] = "May"; - _arr[5] = "June"; - _arr[6] = "July"; - _arr[7] = "August"; - _arr[8] = "September"; - _arr[9] = "October"; - _arr[10] = "November"; - _arr[11] = "December"; - - return _arr; -} - String.prototype.pad = function(l, s, t) { return s || (s = " "), (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length) + 1).join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2)) + this + s.substr(0, l - t) : this; }; +// utils.pad(s, length) + var calendarSpaceArray = function() { - var color; - var defaultColor = "#FF0000"; + var color; + var defaultColor = "#FF0000"; var c = null; - var x = new Array(); - var y = currentBaseSpace.assocs["ia:subscribedCalendarList"]; - if (y != null) { - for (i=0; i 0) - { - return resultsArray[0]; - } - else - { - return null; - } -} - -var response; - -if (currentBaseSpace == null) -{ - response = "Parameters passed:
"; - response += "Current Date: " + dateString + "
"; - response += "Current Space: " + spaceRef + "
"; - response += "
Error: No Space found by this Ref"; -} -else +if (currentBaseSpace !== null) { calendarSpaces = calendarSpaceArray(); - var _arrDay = DaysArray(); + var DAYS_IN_WEEK = 7; var tmpDate; var i, j; - // Start with the first day of the month and go back if necessary to the previous Sunday. tmpDate = new Date(Date.parse(_currentDateForMonthView)); tmpDate.setDate(1); @@ -199,7 +153,7 @@ else for (i = 2; i <= 7; i++) { // Loop through a week. - for (j = 0; j < _arrDay.length; j++) + for (j = 0; j < DAYS_IN_WEEK; j++) { if (tmpDate.getMonth() == _currentDateForMonthView.getMonth()) { @@ -217,5 +171,4 @@ else } -model.DaysArray = DaysArray(); model.eventList = eventList; diff --git a/config/alfresco/templates/webscripts/org/alfresco/calendar/RetrieveMonthEvents.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/calendar/RetrieveMonthEvents.get.json.ftl new file mode 100644 index 0000000000..ea2dba360b --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/calendar/RetrieveMonthEvents.get.json.ftl @@ -0,0 +1,16 @@ +{ +<#list eventList?chunk(7, '-') as row> + <#list row as cell> + <#if cell?exists> + <#if cell.object?exists && cell.object?size > 0> + "${cell.datePart}" : [ + <#-- List the events for the current date --> + <#list cell.object as event> + "${event.object.properties["ia:whatEvent"]}"<#if event_has_next>, + + ], + + + + +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/calendar/events.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/calendar/events.get.desc.xml new file mode 100644 index 0000000000..68140c9600 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/calendar/events.get.desc.xml @@ -0,0 +1,7 @@ + +Event Listing +List of all upcoming events +/calendar/events/{nodeId} +extension +guest + diff --git a/config/alfresco/templates/webscripts/org/alfresco/calendar/events.get.js b/config/alfresco/templates/webscripts/org/alfresco/calendar/events.get.js new file mode 100644 index 0000000000..1fb8792e15 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/calendar/events.get.js @@ -0,0 +1,13 @@ +var calendar = search.findNode("workspace://SpacesStore/" + url.extension); + +if (calendar !== null) +{ + var eventsFolder = calendar.childByNamePath("CalEvents"); + if (eventsFolder !== null) + { + model.events = eventsFolder.children.sort(function(a,b) { + return a.properties["ia:fromDate"] - b.properties["ia:fromDate"]; + }); + } +} + diff --git a/config/alfresco/templates/webscripts/org/alfresco/calendar/events.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/calendar/events.get.json.ftl new file mode 100644 index 0000000000..0e184cbddd --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/calendar/events.get.json.ftl @@ -0,0 +1,20 @@ +{ +<#if events?exists && events?size > 0> +<#assign prev = ""> +<#list events as event> +<#assign date = event.properties["ia:fromDate"]?string("MM/dd/yyyy")> +<#if date != prev> +<#assign counter = 0> +<#if event_index > 0>], +"${date}" : [ + +<#if counter > 0>, +{ + "name" : "${event.properties["ia:whatEvent"]}" +} +<#assign counter = counter + 1> +<#if !event_has_next>] +<#assign prev = date> + + +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/calendar/feed.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/calendar/feed.get.desc.xml new file mode 100644 index 0000000000..3ecc57ca94 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/calendar/feed.get.desc.xml @@ -0,0 +1,6 @@ + +Calendar Feed +Calendar iCalendar feed +/calendar/feed/{nodeId} +guest + diff --git a/config/alfresco/templates/webscripts/org/alfresco/calendar/feed.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/calendar/feed.get.html.ftl new file mode 100644 index 0000000000..c0dcaeead9 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/calendar/feed.get.html.ftl @@ -0,0 +1,17 @@ +<#if events?exists> +<#assign dateFormat = "yyyyMMdd"> +<#assign timeFormat = "HHmmss"> +BEGIN:VCALENDAR +VERSION:2.0 +<#list events as event> +<#assign from = event.properties["ia:fromDate"]> +<#assign to = event.properties["ia:toDate"]> +BEGIN:VEVENT +DTSTART:${from?string(dateFormat)}T${from?string(timeFormat)}Z +DTEND:${to?string(dateFormat)}T${to?string(timeFormat)}Z +SUMMARY:${event.properties["ia:whatEvent"]!""} +DESCRIPTION:${event.properties["ia:descriptionEvent"]!""} +END:VEVENT + +END:VCALENDAR + diff --git a/config/alfresco/templates/webscripts/org/alfresco/calendar/feed.get.js b/config/alfresco/templates/webscripts/org/alfresco/calendar/feed.get.js new file mode 100644 index 0000000000..04ae5a4e45 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/calendar/feed.get.js @@ -0,0 +1,12 @@ +var node = search.findNode("workspace://SpacesStore/" + url.extension); + +//TODO: add a privacy check. If a calendar is private then don't display it + +if (node !== null) +{ + var eventsFolder = node.childByNamePath("CalEvents"); + if (eventsFolder !== null) + { + model.events = eventsFolder.children; + } +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/event.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/event.post.desc.xml new file mode 100644 index 0000000000..3d54aa4d55 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/event.post.desc.xml @@ -0,0 +1,8 @@ + + Save Calendar Event + Save Calendar Event + /calendar/create?what={whatEvent}&where={whereEvent}&desc={descriptionEvent}&color={colorEvent}&fd={fromDate}&ft={fromTime}&td={toDate}&tt={toTime}&id={nodeId} + extension + user + required + diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/event.post.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/event.post.html.ftl new file mode 100644 index 0000000000..2abc926f5e --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/event.post.html.ftl @@ -0,0 +1,2 @@ +${msg} +Test diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/event.post.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/event.post.js new file mode 100644 index 0000000000..9b46fe1b09 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/event.post.js @@ -0,0 +1,39 @@ +logger.log("DEBUG: create event script called"); +logger.log("DEBUG: workspace://SpacesStore/" + args.id); + +var node = search.findNode("workspace://SpacesStore/" + args.id); +logger.log("DEBUG: " + node); +if (node !== null) +{ + var eventsFolder = node.childByNamePath("CalEvents"); + if (eventsFolder === null) + { + eventsFolder = node.createFolder("CalEvents"); + } + + var timestamp = new Date().getTime(); + var event = eventsFolder.createNode(timestamp + ".ics", "ia:calendarEvent"); + + event.properties["ia:whatEvent"] = args.what; + event.properties["ia:whereEvent"] = args.where; + event.properties["ia:descriptionEvent"] = args.desc; + event.properties["ia:colorEvent"] = args.color; + + var fromDate = args.td + " " + args.tt; + var from = new Date(fromDate); + event.properties["ia:fromDate"] = from; + + var toDate = args.td + " " + args.tt; + var to = new Date(toDate); + event.properties["ia:toDate"] = to; + event.save(); + + var msg = "Event saved"; +} +else +{ + var msg = "SPACE not found with Ref " + args.id; +} + +model.msg = msg; + diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.desc.xml new file mode 100644 index 0000000000..4485346765 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.desc.xml @@ -0,0 +1,7 @@ + +Event Listing +List of all upcoming events +/calendar/eventList +extension +guest + diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.js new file mode 100644 index 0000000000..93f9fed357 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.js @@ -0,0 +1,24 @@ + +var siteId = args["site"]; +model.events = getEvents(siteId); + +function getEvents(siteId) +{ + var site = siteService.getSite(siteId); + if (site === null) + { + return []; + } + + var calendar = site.getContainer("calendar"); + if (calendar === null) + { + return []; + } + + return calendar.children.sort(function(a,b) { + return a.properties["ia:fromDate"] - b.properties["ia:fromDate"]; + }); +}; + + diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.json.ftl new file mode 100644 index 0000000000..0e184cbddd --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.json.ftl @@ -0,0 +1,20 @@ +{ +<#if events?exists && events?size > 0> +<#assign prev = ""> +<#list events as event> +<#assign date = event.properties["ia:fromDate"]?string("MM/dd/yyyy")> +<#if date != prev> +<#assign counter = 0> +<#if event_index > 0>], +"${date}" : [ + +<#if counter > 0>, +{ + "name" : "${event.properties["ia:whatEvent"]}" +} +<#assign counter = counter + 1> +<#if !event_has_next>] +<#assign prev = date> + + +}