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 import component
from zope.app.session.interfaces import ISession
from zope.cachedescriptors.property import Lazy from zope.cachedescriptors.property import Lazy
from cybertools.composer.interfaces import IInstance from cybertools.composer.interfaces import IInstance
from cybertools.composer.schema.interfaces import IClientFactory from cybertools.composer.schema.interfaces import IClientFactory
packageId = 'cybertools.composer.schema'
class BaseView(object): class BaseView(object):
clientName = None clientName = None
@ -37,6 +41,22 @@ class BaseView(object):
self.context = context self.context = context
self.request = request 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 @Lazy
def manager(self): def manager(self):
return self.context.getManager() return self.context.getManager()
@ -89,3 +109,12 @@ class BaseView(object):
viewName = self.buttonActions[bn](self) viewName = self.buttonActions[bn](self)
break break
return '%s/%s?id=%s' % (self.url, viewName, self.clientName) 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): def getData(self):
form = self.request.form form = self.request.form
if not self.clientName: clientName = self.getClientName()
self.clientName = form.get('id')
clientName = self.clientName
if not clientName: if not clientName:
return {} return {}
manager = self.context.getManager() manager = self.context.getManager()
@ -66,9 +64,7 @@ class SchemaView(BaseView):
def update(self): def update(self):
newClient = False newClient = False
form = self.request.form form = self.request.form
if not self.clientName: clientName = self.getClientName()
self.clientName = form.get('id')
clientName = self.clientName
if not form.get('action'): if not form.get('action'):
return True return True
manager = self.context.getManager() manager = self.context.getManager()
@ -77,6 +73,7 @@ class SchemaView(BaseView):
if client is None: if client is None:
# no valid clientName - show empty form # no valid clientName - show empty form
return True return True
#self.setClientName(clientName) # store in view and session
else: else:
client = IClientFactory(manager)() client = IClientFactory(manager)()
# only add client to manager after validation, so we have # 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 # show form again; do not add client to manager
return True return True
if newClient: if newClient:
clientName = self.clientName = manager.addClient(client) clientName = manager.addClient(client)
self.setClientName(clientName)
self.request.response.redirect(self.nextUrl()) self.request.response.redirect(self.nextUrl())
return False return False

View file

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

View file

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