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:
parent
b167f350f2
commit
b652508e46
4 changed files with 42 additions and 19 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue