diff --git a/organize/browser/configure.zcml b/organize/browser/configure.zcml
index 7cbe637..786d35f 100644
--- a/organize/browser/configure.zcml
+++ b/organize/browser/configure.zcml
@@ -55,4 +55,19 @@
permission="zope.View"
/>
+
+
+
+
diff --git a/organize/tracking/browser.py b/organize/tracking/browser.py
new file mode 100644
index 0000000..9b860dd
--- /dev/null
+++ b/organize/tracking/browser.py
@@ -0,0 +1,63 @@
+#
+# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
+#
+# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+"""
+View class(es) for change tracks.
+
+$Id$
+"""
+
+from zope.cachedescriptors.property import Lazy
+from zope.traversing.browser import absoluteURL
+from zope.traversing.api import getName
+
+from cybertools.tracking.browser import TrackView
+from loops import util
+
+
+class ChangeView(TrackView):
+
+ @Lazy
+ def task(self):
+ uid = self.metadata['taskId']
+ return util.getObjectForUid(uid)
+
+ @Lazy
+ def taskTitle(self):
+ return getattr(self.task, 'title', getName(self.task))
+
+ @Lazy
+ def taskUrl(self):
+ task = self.task
+ if task is not None:
+ return '%s/@@SelectedManagementView.html' % absoluteURL(task, self.request)
+
+ @Lazy
+ def user(self):
+ uid = self.metadata['userName']
+ return util.getObjectForUid(uid)
+
+ @Lazy
+ def userTitle(self):
+ return getattr(self.user, 'title', getName(self.user))
+
+ @Lazy
+ def userUrl(self):
+ user = self.user
+ if user is not None:
+ return '%s/@@SelectedManagementView.html' % absoluteURL(user, self.request)
diff --git a/organize/tracking/change.py b/organize/tracking/change.py
index 2946849..b9d8565 100644
--- a/organize/tracking/change.py
+++ b/organize/tracking/change.py
@@ -24,12 +24,14 @@ $Id$
from zope.app.container.interfaces import IObjectAddedEvent, IObjectRemovedEvent
from zope.app.container.interfaces import IObjectMovedEvent
+from zope.interface import implements
from zope.cachedescriptors.property import Lazy
from zope.component import adapter
from zope.lifecycleevent.interfaces import IObjectModifiedEvent, IObjectCreatedEvent
from cybertools.meta.interfaces import IOptions
from cybertools.tracking.btree import Track, getTimeStamp
+from cybertools.tracking.interfaces import ITrack
from loops.concept import ConceptManager
from loops.resource import ResourceManager
from loops.interfaces import IAssignmentEvent, IDeassignmentEvent
@@ -97,8 +99,15 @@ class ChangeManager(object):
self.storage.saveUserTrack(uid, 0, personUid, data, update)
+class IChangeRecord(ITrack):
+
+ pass
+
+
class ChangeRecord(Track):
+ implements(IChangeRecord)
+
typeName = 'ChangeRecord'
diff --git a/organize/tracking/configure.zcml b/organize/tracking/configure.zcml
index 40b8cdc..3e8c730 100644
--- a/organize/tracking/configure.zcml
+++ b/organize/tracking/configure.zcml
@@ -1,26 +1,29 @@
-
+
-
+
-
+
-
-
-
+
+
+
-
+
diff --git a/record.py b/record.py
index 704c4bf..1a2fabb 100644
--- a/record.py
+++ b/record.py
@@ -35,6 +35,8 @@ class RecordManager(BTreeContainer):
implements(IRecordManager, ILoopsContained)
+ title = 'records'
+
def getLoopsRoot(self):
return getParent(self)