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 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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue