minor improvements on navigation and template layout

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2189 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2007-11-20 13:43:28 +00:00
parent 29d8e216b5
commit 064fb5a4ee
3 changed files with 46 additions and 21 deletions

View file

@ -43,6 +43,7 @@ Working with message instances
>>> mi = MessageInstance(None, manager.messages['feedback_text'], manager) >>> mi = MessageInstance(None, manager.messages['feedback_text'], manager)
>>> for key, value in mi.applyTemplate().items(): >>> for key, value in mi.applyTemplate().items():
... print key + ':', value ... print key + ':', value
url:
text: Dear $person.firstname $person.lastname, text: Dear $person.firstname $person.lastname,
You have been registered for the following events. You have been registered for the following events.
$@@list_registrations_text $@@list_registrations_text

View file

@ -26,6 +26,12 @@ from string import Template
from zope import component from zope import component
from zope.interface import implements from zope.interface import implements
from zope.publisher.browser import TestRequest 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.instance import Instance
from cybertools.composer.interfaces import IInstance from cybertools.composer.interfaces import IInstance
@ -44,12 +50,24 @@ class MessageInstance(Instance):
def applyTemplate(self, data=None, **kw): def applyTemplate(self, data=None, **kw):
if data is None: if data is None:
data = {} data = {}
request = data.get('request') or TestRequest()
data['url'] = self.getClientUrl(request)
dp = DataProvider(self, data) dp = DataProvider(self, data)
text = MessageTemplate(self.template.text).safe_substitute(dp) text = MessageTemplate(self.template.text).safe_substitute(dp)
subject = self.template.subjectLine subject = self.template.subjectLine
data.update(dict(subjectLine=subject, text=text)) data.update(dict(subjectLine=subject, text=text))
return data 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): class DataProvider(object):
@ -59,7 +77,6 @@ class DataProvider(object):
def __getitem__(self, key): def __getitem__(self, key):
client = self.context.client client = self.context.client
#messageManager = self.context.template.getManager()
messageManager = self.context.manager messageManager = self.context.manager
if key.startswith('@@'): if key.startswith('@@'):
if client is None: if client is None:
@ -83,8 +100,6 @@ class DataProvider(object):
return '' return ''
return value return value
elif key in messageManager.messages: elif key in messageManager.messages:
#mi = component.getMultiAdapter(
# (client, messageManager.messages[key]), IInstance)
mi = MessageInstance(client, messageManager.messages[key], mi = MessageInstance(client, messageManager.messages[key],
messageManager) messageManager)
return mi.applyTemplate()['text'] return mi.applyTemplate()['text']
@ -97,6 +112,8 @@ class DataProvider(object):
instance.template = schema instance.template = schema
data = instance.applyTemplate() data = instance.applyTemplate()
return data[fieldName] return data[fieldName]
elif key in self.data:
return self.data[key]
else: else:
raise KeyError(key) raise KeyError(key)

View file

@ -66,8 +66,9 @@ class BaseView(SchemaBaseView):
if service is None: if service is None:
service = self.context service = self.context
if service.start and service.end: if service.start and service.end:
return ('%s - %s' % return ('%s-%s' %
(self.getFormattedDate(service.start, type='dateTime', variant='short'), (self.getFormattedDate(service.start,
type='dateTime', variant='short').replace(' ', ' '),
self.getFormattedDate(service.end, type='time', variant='short'))) self.getFormattedDate(service.end, type='time', variant='short')))
else: else:
return '-' return '-'
@ -247,7 +248,8 @@ class CheckoutView(ServiceManagerView):
def listRegistrationsHtml(self): def listRegistrationsHtml(self):
result = [] result = []
for info in self.getRegistrationsInfo(): 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) result.append(line)
return self.html % '\n'.join(result) return self.html % '\n'.join(result)
@ -320,27 +322,32 @@ class ServiceView(BaseView):
form = self.request.form form = self.request.form
clientName = self.getClientName() clientName = self.getClientName()
if not form.get('action'): if not form.get('action'):
data = self.getClientData() #data = self.getClientData()
if ('service_registration' in data #if ('service_registration' in data
and data['service_registration'].number > 0): # and data['service_registration'].number > 0):
self.showCheckoutButton = True # self.showCheckoutButton = True
return True return True
manager = self.context.getManager() 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: try:
number = int(form.get('number', 0)) number = int(form.get('number', 0))
if number < 0: if number < 0:
number = 0 number = 0
except ValueError: 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]) regs.validate(clientName, [self.context], [number])
if regs.severity > 0: if regs.severity > 0:
return True return True
@ -351,7 +358,7 @@ class ServiceView(BaseView):
regs.register([self.context], numbers=[number]) regs.register([self.context], numbers=[number])
self.showCheckoutButton = True self.showCheckoutButton = True
nextUrl = self.getSchemaUrl() 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]) regs.unregister([self.context])
number = 0 number = 0
nextUrl = self.getSchemaUrl() nextUrl = self.getSchemaUrl()