From 163e6dedd797043e7ceb0b2046161aed1ceec715 Mon Sep 17 00:00:00 2001 From: helmutm Date: Fri, 31 Aug 2007 07:31:41 +0000 Subject: [PATCH] add field for selecting view for ServiceManager git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1980 fd906abe-77d9-0310-91a1-e0d9ade77398 --- organize/browser/service.py | 17 ++++++++++++++++- organize/interfaces.py | 12 ++++++++++++ organize/service.py | 5 +++-- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/organize/browser/service.py b/organize/browser/service.py index 13e6235..e46ce4b 100644 --- a/organize/browser/service.py +++ b/organize/browser/service.py @@ -70,6 +70,13 @@ class BaseView(object): class ServiceManagerView(BaseView): + def getCustomView(self): + viewName = self.context.viewName + if viewName: + return component.getMultiAdapter((self.context, self.request), + name=viewName) + return None + def findRegistrationTemplate(self, service): """ Find a registration template that provides the registration for the service given. @@ -80,7 +87,7 @@ class ServiceManagerView(BaseView): return tpl return None - def overview(self): + def overview(self, includeCategories=None): result = [] classific = [] category = None @@ -88,9 +95,12 @@ class ServiceManagerView(BaseView): svcs = sorted((svc.getCategory(), idx, svc) for idx, svc in enumerate(self.context.getServices())) for cat, idx, svc in svcs: + if includeCategories and cat not in includeCategories: + continue if cat != category: term = serviceCategories.getTermByToken(cat) result.append(dict(isHeadline=True, level=0, title=term.title, + name=cat, object=None)) category = cat classific = [] @@ -100,17 +110,22 @@ class ServiceManagerView(BaseView): if (len(classific) <= idx or classific[idx].name != element.name): result.append(dict(isHeadline=True, level=level, + name=element.name, title=element.title, object=element.object)) classific = clsf if level > maxLevel: maxLevel = level result.append(dict(isHeadline=False, level=maxLevel+1, + name=svc.getName(), title=svc.title or svc.getName(), fromTo=self.getFromTo(svc), object=svc)) return result + def eventsOverview(self): + return self.overview(includeCategories=('event',)) + class ServiceView(BaseView): diff --git a/organize/interfaces.py b/organize/interfaces.py index 387af8d..d3d82f4 100644 --- a/organize/interfaces.py +++ b/organize/interfaces.py @@ -125,6 +125,11 @@ class ITask(Interface): # services +serviceManagerViews = SimpleVocabulary(( + SimpleTerm('', '', u'Default view'), + SimpleTerm('events_overview.html', 'events_overview.html', u'Events overview'), +)) + class IServiceManager(Interface): """ A manager or container for a set of services. """ @@ -137,6 +142,13 @@ class IServiceManager(Interface): title=_(u'End date/time'), description=_(u'The end date/time for providing services.'), required=False,) + viewName = schema.Choice( + title=_(u'View name'), + description=_(u'Select the name of a specialized view to be used ' + 'for presenting this object.'), + vocabulary=serviceManagerViews, + default='', + required=False,) services = Attribute('A collection of services managed by this object.') diff --git a/organize/service.py b/organize/service.py index 48d27ef..ed68346 100644 --- a/organize/service.py +++ b/organize/service.py @@ -26,7 +26,9 @@ from time import time from BTrees.OOBTree import OOBTree from zope.cachedescriptors.property import Lazy from zope.component import adapts -from zope.interface import implements +from zope import component +from zope.interface import implements, Interface + from cybertools.composer.interfaces import IInstance from cybertools.composer.schema.interfaces import IClientManager, IClient from cybertools.stateful.definition import registerStatesDefinition @@ -34,7 +36,6 @@ from cybertools.stateful.definition import StatesDefinition from cybertools.stateful.definition import State, Transition from cybertools.util.jeep import Jeep from cybertools.util.randomname import generateName - from cybertools.organize.interfaces import IServiceManager from cybertools.organize.interfaces import IService, IScheduledService from cybertools.organize.interfaces import IRegistration, IRegistrationTemplate