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:
parent
1e5a79e8cd
commit
eb3a11db88
4 changed files with 51 additions and 11 deletions
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Add table
Reference in a new issue