keep client name in session to allow for free navigation

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1977 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2007-08-30 14:00:40 +00:00
parent b167f350f2
commit b652508e46
4 changed files with 42 additions and 19 deletions

View file

@ -23,12 +23,16 @@ $Id$
"""
from zope import component
from zope.app.session.interfaces import ISession
from zope.cachedescriptors.property import Lazy
from cybertools.composer.interfaces import IInstance
from cybertools.composer.schema.interfaces import IClientFactory
packageId = 'cybertools.composer.schema'
class BaseView(object):
clientName = None
@ -37,6 +41,22 @@ class BaseView(object):
self.context = context
self.request = request
def getClientName(self):
clientName = self.clientName
if clientName:
return clientName
clientName = self.request.form.get('id')
if clientName:
self.setSessionInfo('clientName', clientName)
else:
clientName = self.getSessionInfo('clientName')
self.clientName = clientName
return clientName
def setClientName(self, clientName):
self.clientName = clientName
self.setSessionInfo('clientName', clientName)
@Lazy
def manager(self):
return self.context.getManager()
@ -89,3 +109,12 @@ class BaseView(object):
viewName = self.buttonActions[bn](self)
break
return '%s/%s?id=%s' % (self.url, viewName, self.clientName)
def setSessionInfo(self, key, value, packageId=packageId):
session = ISession(self.request)[packageId]
if session.get(key) != value:
session[key] = value
def getSessionInfo(self, key, default=None, packageId=packageId):
session = ISession(self.request)[packageId]
return session.get(key, default)

View file

@ -45,9 +45,7 @@ class SchemaView(BaseView):
def getData(self):
form = self.request.form
if not self.clientName:
self.clientName = form.get('id')
clientName = self.clientName
clientName = self.getClientName()
if not clientName:
return {}
manager = self.context.getManager()
@ -66,9 +64,7 @@ class SchemaView(BaseView):
def update(self):
newClient = False
form = self.request.form
if not self.clientName:
self.clientName = form.get('id')
clientName = self.clientName
clientName = self.getClientName()
if not form.get('action'):
return True
manager = self.context.getManager()
@ -77,6 +73,7 @@ class SchemaView(BaseView):
if client is None:
# no valid clientName - show empty form
return True
#self.setClientName(clientName) # store in view and session
else:
client = IClientFactory(manager)()
# only add client to manager after validation, so we have
@ -89,7 +86,8 @@ class SchemaView(BaseView):
# show form again; do not add client to manager
return True
if newClient:
clientName = self.clientName = manager.addClient(client)
clientName = manager.addClient(client)
self.setClientName(clientName)
self.request.response.redirect(self.nextUrl())
return False

View file

@ -84,8 +84,8 @@ class FieldInstance(object):
return value
#return toStr(value)
def unmarshall(self, strValue):
return toUnicode(strValue) or u''
def unmarshall(self, value):
return toUnicode(value) or u''
def validate(self, value):
if not value and self.context.required:
@ -109,10 +109,10 @@ class NumberFieldInstance(FieldInstance):
return '-'
return str(value)
def unmarshall(self, strValue):
if not strValue:
def unmarshall(self, value):
if not value:
return None
return int(strValue)
return int(value)
def validate(self, value):
if value in ('', None):

View file

@ -134,10 +134,7 @@ class RegistrationTemplateView(SchemaBaseView):
return self.context.getServices().values()
def getRegistrations(self):
if not self.clientName:
form = self.request.form
self.clientName = form.get('id')
clientName = self.clientName
clientName = self.getClientName()
if not clientName:
return []
manager = self.context.getManager()
@ -153,9 +150,7 @@ class RegistrationTemplateView(SchemaBaseView):
def update(self):
form = self.request.form
if not self.clientName:
self.clientName = form.get('id')
clientName = self.clientName
clientName = self.getClientName()
if not form.get('action'):
return True
manager = self.context.getManager()
@ -163,6 +158,7 @@ class RegistrationTemplateView(SchemaBaseView):
client = manager.getClients().get(clientName)
if client is None:
return True
#self.setClientName(clientName) # store in view and session
else:
client = IClientFactory(manager)()
clientName = self.clientName = manager.addClient(client)