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

View file

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

View file

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