From 064fb5a4ee296ec1bcb8434b0b8c38edb2018c37 Mon Sep 17 00:00:00 2001 From: helmutm Date: Tue, 20 Nov 2007 13:43:28 +0000 Subject: [PATCH] minor improvements on navigation and template layout git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2189 fd906abe-77d9-0310-91a1-e0d9ade77398 --- composer/message/README.txt | 1 + composer/message/instance.py | 23 ++++++++++++++++--- organize/browser/service.py | 43 +++++++++++++++++++++--------------- 3 files changed, 46 insertions(+), 21 deletions(-) diff --git a/composer/message/README.txt b/composer/message/README.txt index 6b5cca4..3af7478 100644 --- a/composer/message/README.txt +++ b/composer/message/README.txt @@ -43,6 +43,7 @@ Working with message instances >>> mi = MessageInstance(None, manager.messages['feedback_text'], manager) >>> for key, value in mi.applyTemplate().items(): ... print key + ':', value + url: text: Dear $person.firstname $person.lastname, You have been registered for the following events. $@@list_registrations_text diff --git a/composer/message/instance.py b/composer/message/instance.py index 2b1a880..9e7386a 100644 --- a/composer/message/instance.py +++ b/composer/message/instance.py @@ -26,6 +26,12 @@ from string import Template from zope import component from zope.interface import implements from zope.publisher.browser import TestRequest +try: + from zope.traversing.browser.absoluteurl import absoluteURL + zope29 = False +except ImportError: + from zope.app.traversing.browser.absoluteurl import absoluteURL + zope29 = True from cybertools.composer.instance import Instance from cybertools.composer.interfaces import IInstance @@ -44,12 +50,24 @@ class MessageInstance(Instance): def applyTemplate(self, data=None, **kw): if data is None: data = {} + request = data.get('request') or TestRequest() + data['url'] = self.getClientUrl(request) dp = DataProvider(self, data) text = MessageTemplate(self.template.text).safe_substitute(dp) subject = self.template.subjectLine data.update(dict(subjectLine=subject, text=text)) return data + def getClientUrl(self, request): + if self.client is None: + return '' + if zope29: # evil hack to get rid of acquisition stuff + parts = absoluteURL(self.client.manager, request).split('/') + url = '/'.join(parts[:-3]) + else: + url = absoluteURL(self.client.manager, request) + return '%s?id=%s' % (url, self.client.__name__) + class DataProvider(object): @@ -59,7 +77,6 @@ class DataProvider(object): def __getitem__(self, key): client = self.context.client - #messageManager = self.context.template.getManager() messageManager = self.context.manager if key.startswith('@@'): if client is None: @@ -83,8 +100,6 @@ class DataProvider(object): return '' return value elif key in messageManager.messages: - #mi = component.getMultiAdapter( - # (client, messageManager.messages[key]), IInstance) mi = MessageInstance(client, messageManager.messages[key], messageManager) return mi.applyTemplate()['text'] @@ -97,6 +112,8 @@ class DataProvider(object): instance.template = schema data = instance.applyTemplate() return data[fieldName] + elif key in self.data: + return self.data[key] else: raise KeyError(key) diff --git a/organize/browser/service.py b/organize/browser/service.py index 07c7037..5214ddc 100644 --- a/organize/browser/service.py +++ b/organize/browser/service.py @@ -66,8 +66,9 @@ class BaseView(SchemaBaseView): if service is None: service = self.context if service.start and service.end: - return ('%s - %s' % - (self.getFormattedDate(service.start, type='dateTime', variant='short'), + return ('%s-%s' % + (self.getFormattedDate(service.start, + type='dateTime', variant='short').replace(' ', ' '), self.getFormattedDate(service.end, type='time', variant='short'))) else: return '-' @@ -247,7 +248,8 @@ class CheckoutView(ServiceManagerView): def listRegistrationsHtml(self): result = [] for info in self.getRegistrationsInfo(): - line = self.row % (info['number'], info['service'], info['fromTo']) + line = self.row % (info['number'], info['service'], + info['fromTo'].replace(' ', '  ')) result.append(line) return self.html % '\n'.join(result) @@ -320,27 +322,32 @@ class ServiceView(BaseView): form = self.request.form clientName = self.getClientName() if not form.get('action'): - data = self.getClientData() - if ('service_registration' in data - and data['service_registration'].number > 0): - self.showCheckoutButton = True + #data = self.getClientData() + #if ('service_registration' in data + # and data['service_registration'].number > 0): + # self.showCheckoutButton = True return True manager = self.context.getManager() - if clientName: - client = manager.getClients().get(clientName) - if client is None: - return True - else: - client = IClientFactory(manager)() - newClient = True - nextUrl = self.getSchemaUrl() - regs = self.state = IClientRegistrations(client) try: number = int(form.get('number', 0)) if number < 0: number = 0 except ValueError: - number = 1 + number = 0 + if clientName: + client = manager.getClients().get(clientName) + if client is None: + self.request.response.redirect(self.getSchemaUrl()) + return False + else: + if number == 0: + self.request.response.redirect(self.getSchemaUrl()) + return False + else: + client = IClientFactory(manager)() + newClient = True + nextUrl = self.getSchemaUrl() + regs = self.state = IClientRegistrations(client) regs.validate(clientName, [self.context], [number]) if regs.severity > 0: return True @@ -351,7 +358,7 @@ class ServiceView(BaseView): regs.register([self.context], numbers=[number]) self.showCheckoutButton = True nextUrl = self.getSchemaUrl() - elif 'submit_unregister' in form: + elif 'submit_register' in form and number == 0 or 'submit_unregister' in form: regs.unregister([self.context]) number = 0 nextUrl = self.getSchemaUrl()