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>,#if>
+ #list>
+ ],
+ #if>
+ #if>
+ #list>
+#list>
+}
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>],#if>
+"${date}" : [
+#if>
+<#if counter > 0>,#if>
+{
+ "name" : "${event.properties["ia:whatEvent"]}"
+}
+<#assign counter = counter + 1>
+<#if !event_has_next>]#if>
+<#assign prev = date>
+#list>
+#if>
+}
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
+#list>
+END:VCALENDAR
+#if>
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>],#if>
+"${date}" : [
+#if>
+<#if counter > 0>,#if>
+{
+ "name" : "${event.properties["ia:whatEvent"]}"
+}
+<#assign counter = counter + 1>
+<#if !event_has_next>]#if>
+<#assign prev = date>
+#list>
+#if>
+}