diff --git a/config/alfresco/model/contentModel.xml b/config/alfresco/model/contentModel.xml
index 93abeae06a..1e1240b49b 100644
--- a/config/alfresco/model/contentModel.xml
+++ b/config/alfresco/model/contentModel.xml
@@ -179,6 +179,12 @@
d:text
+
+ d:text
+
+
+ d:text
+
diff --git a/config/alfresco/script-services-context.xml b/config/alfresco/script-services-context.xml
index 624a09c117..862d5ede77 100644
--- a/config/alfresco/script-services-context.xml
+++ b/config/alfresco/script-services-context.xml
@@ -151,4 +151,14 @@
+
+
+
+ presence
+
+
+
+
+
+
diff --git a/source/java/org/alfresco/model/ContentModel.java b/source/java/org/alfresco/model/ContentModel.java
index 92b1d9f254..30a6b82d0c 100644
--- a/source/java/org/alfresco/model/ContentModel.java
+++ b/source/java/org/alfresco/model/ContentModel.java
@@ -165,6 +165,8 @@ public interface ContentModel
static final QName PROP_ORGID = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "organizationId");
static final QName PROP_HOME_FOLDER_PROVIDER = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "homeFolderProvider");
static final QName PROP_DEFAULT_HOME_FOLDER_PATH = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "defaultHomeFolderPath");
+ static final QName PROP_PRESENCEPROVIDER = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "presenceProvider");
+ static final QName PROP_PRESENCEUSERNAME = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "presenceUsername");
// Ownable aspect
static final QName ASPECT_OWNABLE = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "ownable");
diff --git a/source/java/org/alfresco/repo/jscript/Presence.java b/source/java/org/alfresco/repo/jscript/Presence.java
new file mode 100644
index 0000000000..dcca7726e1
--- /dev/null
+++ b/source/java/org/alfresco/repo/jscript/Presence.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2005-2007 Alfresco Software Limited.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ * As a special exception to the terms and conditions of version 2.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * and Open Source Software ("FLOSS") applications as described in Alfresco's
+ * FLOSS exception. You should have recieved a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * http://www.alfresco.com/legal/licensing"
+ */
+package org.alfresco.repo.jscript;
+
+import org.alfresco.model.ContentModel;
+import org.alfresco.service.ServiceRegistry;
+import org.alfresco.util.ParameterCheck;
+
+/**
+ * Scripted Presence service for determining online status of People.
+ *
+ * @author Mike Hatfield
+ */
+
+public final class Presence extends BaseScopableProcessorExtension
+{
+ /** Repository Service Registry */
+ private ServiceRegistry services;
+
+ /**
+ * Set the service registry
+ *
+ * @param serviceRegistry the service registry
+ */
+ public void setServiceRegistry(ServiceRegistry serviceRegistry)
+ {
+ this.services = serviceRegistry;
+ }
+
+ /**
+ * Gets whether the Person has configured Presence parameters
+ *
+ * @param person the person to query
+ *
+ * @return true if this person is configured for presence
+ */
+ public boolean hasPresence(ScriptNode person)
+ {
+ ParameterCheck.mandatory("Person", person);
+ String presenceProvider = (String)person.getProperties().get(ContentModel.PROP_PRESENCEPROVIDER);
+ String presenceUsername = (String)person.getProperties().get(ContentModel.PROP_PRESENCEUSERNAME);
+
+ return ((presenceProvider != "") && (presenceUsername != ""));
+ }
+
+ /**
+ * Query current online status of given person
+ *
+ * @param person the person to query
+ *
+ * @return string indicating online presence status
+ */
+ public String getDetails(ScriptNode person)
+ {
+ ParameterCheck.mandatory("Person", person);
+ String presenceProvider = (String)person.getProperties().get(ContentModel.PROP_PRESENCEPROVIDER);
+ String presenceUsername = (String)person.getProperties().get(ContentModel.PROP_PRESENCEUSERNAME);
+ String detail = presenceProvider + "|" + presenceUsername;
+
+ return detail;
+ }
+
+}