diff --git a/config/alfresco/templates/webscripts/org/alfresco/presence/status.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/presence/status.get.html.ftl
index dda7864173..847f58cb88 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/presence/status.get.html.ftl
+++ b/config/alfresco/templates/webscripts/org/alfresco/presence/status.get.html.ftl
@@ -1,20 +1,54 @@
-
-

=online
-

=offline
-

=unknown
+
Colleague Status
+
+
Presence Status Key:
+
+

=Skype online
+

=Yahoo online
+

=not configured
+
+
+

=offline
+

=offline
+

=unknown
+
<#list presenceResults as pr>
-
-
${pr[0]}
+
+
${pr[1]}
#list>
+
+
Documents created or modified in the last week
+
+
+
+ |
+ Name |
+ Created Date |
+ Modified Date |
+
+ <#assign rowNum=0>
+ <#list space.childrenByXPath[".//*[subtypeOf('cm:content')]"] as child>
+ <#if (dateCompare(child.properties["cm:modified"], date, 1000*60*60*24*7) == 1) || (dateCompare(child.properties["cm:created"], date, 1000*60*60*24*7) == 1)>
+ <#assign rowNum = rowNum + 1>
+
+  |
+ ${child.properties.name} |
+ ${child.properties["cm:created"]?datetime} |
+ ${child.properties["cm:modified"]?datetime} |
+
+ #if>
+ #list>
+
+
+
+
diff --git a/config/alfresco/templates/webscripts/org/alfresco/presence/status.get.js b/config/alfresco/templates/webscripts/org/alfresco/presence/status.get.js
index 91c94205ed..dbf1f4a352 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/presence/status.get.js
+++ b/config/alfresco/templates/webscripts/org/alfresco/presence/status.get.js
@@ -1,11 +1,26 @@
+var results = new Array();
main();
function main()
{
var nodeRef = args["nodeRef"];
var space = search.findNode(nodeRef);
+ model.space = space;
+
+ parsePermissions(space);
+
+ while ((space.inheritsPermissions) && (space.parent != null))
+ {
+ space = space.parent;
+ parsePermissions(space);
+ }
+
+ model.presenceResults = results;
+}
+
+function parsePermissions(space)
+{
var tokens, user, group;
- var results = new Array();
for each(perm in space.permissions)
{
@@ -33,21 +48,23 @@ function main()
}
}
}
-
- model.space = space;
- model.presenceResults = results;
}
function pushUnique(results, user, details)
{
+ var provider = String(details).split("|")[0];
+ if (provider == "")
+ {
+ provider = "none";
+ }
var fullName = user.properties["firstName"] + " " + user.properties["lastName"];
for (i=0; i < results.length; i++)
{
- if (results[i][0] == fullName)
+ if (results[i][1] == fullName)
{
return;
}
}
- results.push(new Array(fullName, details));
+ results.push(new Array(provider, fullName, details));
}
diff --git a/source/web/images/icons/presence_offline.gif b/source/web/images/icons/presence_offline.gif
deleted file mode 100644
index 7c6d45be67..0000000000
Binary files a/source/web/images/icons/presence_offline.gif and /dev/null differ
diff --git a/source/web/images/icons/presence_online.gif b/source/web/images/icons/presence_online.gif
deleted file mode 100644
index 6c621aaf32..0000000000
Binary files a/source/web/images/icons/presence_online.gif and /dev/null differ
diff --git a/source/web/images/icons/presence_skype_offline.png b/source/web/images/icons/presence_skype_offline.png
new file mode 100644
index 0000000000..1b7d0e05be
Binary files /dev/null and b/source/web/images/icons/presence_skype_offline.png differ
diff --git a/source/web/images/icons/presence_skype_online.png b/source/web/images/icons/presence_skype_online.png
new file mode 100644
index 0000000000..23f3a1bd64
Binary files /dev/null and b/source/web/images/icons/presence_skype_online.png differ
diff --git a/source/web/images/icons/presence_status_none.png b/source/web/images/icons/presence_status_none.png
new file mode 100644
index 0000000000..3a930820f8
Binary files /dev/null and b/source/web/images/icons/presence_status_none.png differ
diff --git a/source/web/images/icons/presence_status_unknown.png b/source/web/images/icons/presence_status_unknown.png
new file mode 100644
index 0000000000..7a67a4f3aa
Binary files /dev/null and b/source/web/images/icons/presence_status_unknown.png differ
diff --git a/source/web/images/icons/presence_unknown.gif b/source/web/images/icons/presence_unknown.gif
deleted file mode 100644
index d244428495..0000000000
Binary files a/source/web/images/icons/presence_unknown.gif and /dev/null differ
diff --git a/source/web/images/icons/presence_yahoo_offline.png b/source/web/images/icons/presence_yahoo_offline.png
new file mode 100644
index 0000000000..0d0a2663df
Binary files /dev/null and b/source/web/images/icons/presence_yahoo_offline.png differ
diff --git a/source/web/images/icons/presence_yahoo_online.png b/source/web/images/icons/presence_yahoo_online.png
new file mode 100644
index 0000000000..5400fce250
Binary files /dev/null and b/source/web/images/icons/presence_yahoo_online.png differ
diff --git a/source/web/scripts/ajax/presence.js b/source/web/scripts/ajax/presence.js
index 7ae2e29346..da8b1b84a9 100644
--- a/source/web/scripts/ajax/presence.js
+++ b/source/web/scripts/ajax/presence.js
@@ -7,30 +7,46 @@ var Presence =
{
window.contextPath = Presence.getContextPath();
- var users = $$("#presenceContainer .presenceStatus");
- users.each(function(user, i)
+ var statuses = $$("#presenceContainer .presenceStatus");
+ var users = $$("#presenceContainer .presenceUsername");
+
+ statuses.each(function(status, i)
{
- // ajax call to load online status
- var userDetails = user.attributes["rel"].value.split("|");
+ var user = users[i];
+
+ var userDetails = status.attributes["rel"].value.split("|");
var proxyURL = window.contextPath + "/ajax/invoke/PresenceProxyBean.proxyRequest";
var statusURL = Presence.getStatusURL(userDetails);
if (statusURL != "")
{
+ // ajax call to load online status
var myAjax = new Ajax(proxyURL, {
method: 'get',
headers: {'If-Modified-Since': 'Sat, 1 Jan 2000 00:00:00 GMT'},
onComplete: function(textResponse, xmlResponse)
{
var statusType = Presence.getStatusType(userDetails[0], textResponse);
+ status.addClass(statusType);
user.addClass(statusType);
+ if (statusType == "unknown")
+ {
+ status.title = "User's status is unknown, possibly due to client privacy settings";
+ }
+ else
+ {
+ status.title = "User's status is " + statusType;
+ }
+ user.title = status.title;
}
});
myAjax.request("url=" + escape(statusURL));
}
else
{
- user.addClass("unknown");
+ status.addClass("unknown");
+ status.title = "User's presence provider has not been configured by Alfresco admin";
+ user.title = status.title;
}
});
},
@@ -79,7 +95,17 @@ var Presence =
switch(provider)
{
case "skype":
- statusType = (response == "Online") ? "online" : "offline";
+ switch (response)
+ {
+ case "Online":
+ statusType = "online";
+ break;
+ case "Offline":
+ statusType = "offline";
+ break;
+ default:
+ statusType = "unknown";
+ }
break;
case "yahoo":
statusType = (response == "01") ? "online" : "offline";