diff --git a/browser/common.py b/browser/common.py index 8551fff..48385c7 100644 --- a/browser/common.py +++ b/browser/common.py @@ -304,14 +304,13 @@ class BaseView(GenericView, I18NView): @Lazy def longTypeTitle(self): - t = self.typeTitle - ct = getattr(self.context, 'contentType') + ct = getattr(self.context, 'contentType', None) if ct: ext = mimetypes.extensions.get(ct) if ext: #return '%s (%s)' % (t, ext.upper()) return ext.upper() - return t + return self.typeTitle @Lazy def typeUrl(self): @@ -584,8 +583,8 @@ class BaseView(GenericView, I18NView): 'dojo.require("dijit.form.SimpleTextarea"); ' 'dojo.require("dijit.form.FilteringSelect"); ' #'dojo.require("dijit.layout.TabContainer"); ' - 'dojo.require("dojox.grid.DataGrid"); ' - 'dojo.require("dojo.data.ItemFileWriteStore"); ' + #'dojo.require("dojox.grid.DataGrid"); ' + #'dojo.require("dojo.data.ItemFileWriteStore"); ' 'dojo.require("dojox.data.QueryReadStore"); ') cm.register('js-execute', 'dojo.form.all', jsCall=jsCall) cm.register('css', identifier='dojox.grid.css', position=0, diff --git a/organize/tracking/README.txt b/organize/tracking/README.txt index 832c82e..44ccc30 100644 --- a/organize/tracking/README.txt +++ b/organize/tracking/README.txt @@ -167,8 +167,8 @@ Recent changes >>> data[0].timeStamp u'... ...:...' >>> data[0].objectData - {'url': '', 'version': '', 'object': , - 'title': 'Change Doc 001'} + {'url': '', 'version': '', 'type': u'Text', + 'object': , 'title': 'Change Doc 001'} >>> data[0].user {'url': '', 'object': , 'title': u'john'} >>> data[0].action diff --git a/organize/tracking/report.pt b/organize/tracking/report.pt index 98a2c17..2e0a7f0 100644 --- a/organize/tracking/report.pt +++ b/organize/tracking/report.pt @@ -1,3 +1,6 @@ + + + @@ -35,6 +38,7 @@ + @@ -49,6 +53,7 @@ +
TitleType V User diff --git a/organize/tracking/report.py b/organize/tracking/report.py index c97837d..6842fec 100644 --- a/organize/tracking/report.py +++ b/organize/tracking/report.py @@ -27,13 +27,14 @@ from zope import component from zope.app.pagetemplate import ViewPageTemplateFile from zope.app.security.interfaces import IAuthentication, PrincipalLookupError from zope.cachedescriptors.property import Lazy +from zope.interface.interface import InterfaceClass from zope.traversing.browser import absoluteURL from zope.traversing.api import getName from cybertools.meta.interfaces import IOptions from cybertools.util import format from loops.browser.common import BaseView -from loops.interfaces import IResource +from loops.interfaces import IConcept, IResource from loops import util from loops.util import _ from loops.versioning.interfaces import IVersionable @@ -46,6 +47,8 @@ class TrackingStats(BaseView): template = report_macros + typeMapping = {'resource:*': IResource, 'concept:*': IConcept} + @Lazy def macro(self): return self.macros['report'] @@ -58,6 +61,10 @@ class TrackingStats(BaseView): def options(self): return IOptions(self.adapted) + @Lazy + def typeNames(self): + return self.options('types') or ['resource:*'] + @Lazy def accessRecords(self): return self.filter(reversed(self.loopsRoot.getRecordManager()['access'].values())) @@ -69,11 +76,35 @@ class TrackingStats(BaseView): def filter(self, tracks): for tr in tracks: try: - if IResource.providedBy(util.getObjectForUid(tr.taskId)): + if self.checkType(util.getObjectForUid(tr.taskId)): yield tr except KeyError: pass + @Lazy + def typeObjects(self): + result = [] + for tn in self.typeNames: + ifc = self.typeMapping.get(tn) + if ifc is None: + tp = self.conceptManager.get(tn) + if tp is not None: + result.append(tp) + else: + result.append(ifc) + return result + + def checkType(self, obj): + if not IResource.providedBy(obj) and not IConcept.providedBy(obj): + return False + for t in self.typeObjects: + if isinstance(t, InterfaceClass): + if t.providedBy(obj): + return True + elif obj.getType() == t: + return True + return False + def getData(self): form = self.request.form period = form.get('period') @@ -157,7 +188,7 @@ class RecentChanges(TrackingStats): macro=self.macros['recent_changes']) -class TrackDetails(object): +class TrackDetails(BaseView): timeStampFormat = 'short' @@ -173,6 +204,10 @@ class TrackDetails(object): def object(self): return util.getObjectForUid(self.track.taskId) + @Lazy + def context(self): + return self.object + @Lazy def objectData(self): obj = self.object @@ -180,7 +215,8 @@ class TrackDetails(object): url = node is not None and node.getUrlForTarget(obj) or '' versionable = IVersionable(self.object, None) version = versionable is not None and versionable.versionId or '' - return dict(object=obj, title=obj.title, url=url, version=version) + return dict(object=obj, title=obj.title, + type=self.longTypeTitle, url=url, version=version) @Lazy def user(self):