extend recent changes query: include concepts, add types option

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3058 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2008-12-11 15:48:50 +00:00
parent 1e5a79e8cd
commit eb3a11db88
4 changed files with 51 additions and 11 deletions

View file

@ -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,

View file

@ -167,8 +167,8 @@ Recent changes
>>> data[0].timeStamp
u'... ...:...'
>>> data[0].objectData
{'url': '', 'version': '', 'object': <loops.resource.Resource ...>,
'title': 'Change Doc 001'}
{'url': '', 'version': '', 'type': u'Text',
'object': <loops.resource.Resource ...>, 'title': 'Change Doc 001'}
>>> data[0].user
{'url': '', 'object': <loops.concept.Concept ...>, 'title': u'john'}
>>> data[0].action

View file

@ -1,3 +1,6 @@
<!-- $Id$ -->
<metal:report define-macro="report"
tal:define="info item/getData">
<metal:title use-macro="item/conceptMacros/concepttitle" />
@ -35,6 +38,7 @@
<table class="listing">
<tr>
<th i18n:translate="">Title</th>
<th i18n:translate="">Type</th>
<th i18n:translate=""
tal:condition="view/useVersioning">V</th>
<th i18n:translate="">User</th>
@ -49,6 +53,7 @@
<a tal:omit-tag="not:url"
tal:attributes="href string:$url?version=this"
tal:content="object/title" /></td>
<td tal:content="object/type"></td>
<tal:version tal:condition="view/useVersioning">
<td class="center"
tal:define="version object/version">

View file

@ -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):