provide additional field types; extend client to enable FormManager application objects
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3694 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
ee744a7e23
commit
b091f65219
4 changed files with 110 additions and 3 deletions
|
@ -51,8 +51,8 @@ Field types
|
|||
|
||||
>>> from cybertools.composer.schema.interfaces import fieldTypes
|
||||
>>> sorted(t.token for t in fieldTypes)
|
||||
['checkbox', 'checkboxes', 'date', 'display', 'dropdown', 'email',
|
||||
'fileupload', 'html', 'list', 'number', 'password', 'radiobuttons',
|
||||
['checkbox', 'checkboxes', 'date', 'display', 'dropdown', 'email', 'explanation',
|
||||
'fileupload', 'heading', 'html', 'list', 'number', 'password', 'radiobuttons',
|
||||
'spacer', 'textarea', 'textline']
|
||||
|
||||
>>> from zope.schema.vocabulary import SimpleVocabulary
|
||||
|
|
|
@ -25,8 +25,11 @@ $Id$
|
|||
from zope import component
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
|
||||
from cybertools.composer.schema.browser.common import BaseView
|
||||
from cybertools.composer.interfaces import IInstance
|
||||
from cybertools.composer.rule.base import Event
|
||||
from cybertools.composer.rule.interfaces import IRuleManager
|
||||
from cybertools.composer.schema.browser.common import BaseView
|
||||
from cybertools.composer.schema.client import eventTypes, getCheckoutRule
|
||||
from cybertools.composer.schema.interfaces import IClientFactory
|
||||
from cybertools.composer.schema.schema import FormState
|
||||
|
||||
|
@ -101,3 +104,60 @@ class SchemaView(BaseView):
|
|||
self.request.response.redirect(self.getNextUrl())
|
||||
return False
|
||||
|
||||
|
||||
class FormManagerView(BaseView):
|
||||
|
||||
isManageMode = False
|
||||
|
||||
def getCustomView(self):
|
||||
if self.isManageMode:
|
||||
return None
|
||||
viewName = self.context.getViewName()
|
||||
if viewName:
|
||||
return component.getMultiAdapter((self.context, self.request),
|
||||
name=viewName)
|
||||
return None
|
||||
|
||||
@Lazy
|
||||
def manager(self):
|
||||
return self.context
|
||||
|
||||
def overview(self):
|
||||
return []
|
||||
|
||||
|
||||
class CheckoutView(BaseView):
|
||||
|
||||
def getClient(self):
|
||||
clientName = self.getClientName()
|
||||
if clientName is None:
|
||||
return None
|
||||
return self.context.getClients().get(clientName)
|
||||
|
||||
def getClientData(self):
|
||||
client = self.getClient()
|
||||
if client is None:
|
||||
return {}
|
||||
instance = IInstance(client)
|
||||
data = instance.applyTemplate()
|
||||
return data
|
||||
|
||||
def update(self):
|
||||
data = self.getClientData()
|
||||
if data.get('errors'):
|
||||
return True
|
||||
form = self.request.form
|
||||
clientName = self.getClientName()
|
||||
if not form.get('action'):
|
||||
return True # TODO: error, redirect to overview
|
||||
client = self.getClient()
|
||||
if client is None:
|
||||
return True # TODO: error, redirect to overview
|
||||
# send mail
|
||||
rm = IRuleManager(self.context)
|
||||
rm.addRule(getCheckoutRule(self.context.senderEmail))
|
||||
result = rm.handleEvent(Event(eventTypes['client.checkout'],
|
||||
client, self.request))
|
||||
#params = '?message=thankyou&id=' + self.clientName
|
||||
#self.request.response.redirect(self.url + '/checkout.html' + params)
|
||||
return False
|
||||
|
|
|
@ -29,6 +29,8 @@ from zope.component import adapts
|
|||
from zope.interface import implements
|
||||
|
||||
from cybertools.composer.message.base import MessageManager
|
||||
from cybertools.composer.rule.base import RuleManager, EventType
|
||||
from cybertools.composer.rule.base import Rule, Action
|
||||
from cybertools.composer.schema.interfaces import IClient
|
||||
from cybertools.composer.schema.interfaces import IClientManager, IClientFactory
|
||||
from cybertools.util.jeep import Jeep
|
||||
|
@ -113,3 +115,31 @@ class MessageManagerAdapter(MessageManager):
|
|||
def messages(self):
|
||||
return self.context.messages
|
||||
|
||||
|
||||
class RuleManagerAdapter(RuleManager):
|
||||
|
||||
adapts(IClientManager)
|
||||
|
||||
def __init__(self, context):
|
||||
self.context = context
|
||||
|
||||
|
||||
eventTypes = Jeep((
|
||||
EventType('client.checkout'),
|
||||
))
|
||||
|
||||
|
||||
def getCheckoutRule(sender):
|
||||
""" A rule for sending a confirmation message, provided by default.
|
||||
"""
|
||||
checkoutRule = Rule('checkout')
|
||||
checkoutRule.events.append(eventTypes['client.checkout'])
|
||||
checkoutRule.actions.append(Action('sendmail',
|
||||
parameters=dict(sender=sender,
|
||||
messageName='feedback_text')))
|
||||
checkoutRule.actions.append(Action('redirect',
|
||||
parameters=dict(viewName='message_view.html',
|
||||
messageName='feedback_html',
|
||||
clearClient=True)))
|
||||
return checkoutRule
|
||||
|
||||
|
|
|
@ -106,8 +106,12 @@ fieldTypes = SimpleVocabulary((
|
|||
instanceName='checkboxes'),
|
||||
FieldType('calculated', 'display', u'Calculated Value',
|
||||
instanceName='calculated'),
|
||||
FieldType('heading', 'heading', u'Fieldgroup Heading',
|
||||
fieldRenderer='field_heading', storeData=False),
|
||||
FieldType('spacer', 'spacer', u'Spacer',
|
||||
fieldRenderer='field_spacer', storeData=False),
|
||||
FieldType('explanation', 'explanation', u'Explanation',
|
||||
fieldRenderer='field_explanation', storeData=False),
|
||||
))
|
||||
|
||||
# TODO: move this to organize.service... (???)
|
||||
|
@ -121,6 +125,12 @@ standardFieldNames = SimpleVocabulary((
|
|||
# TODO: on organize.service: extend this list, e.g. with 'totalCost'
|
||||
))
|
||||
|
||||
defaultValueTypes = SimpleVocabulary((
|
||||
SimpleTerm('string', 'string', 'String'),
|
||||
SimpleTerm('tales', 'tales', 'TAL expression'),
|
||||
))
|
||||
|
||||
|
||||
class IField(IComponent):
|
||||
""" May be used for data entry or display.
|
||||
"""
|
||||
|
@ -155,6 +165,13 @@ class IField(IComponent):
|
|||
description=_(u'Value with which to pre-set the field contents. '
|
||||
'Use this also for populating a calculated field.'),
|
||||
required=False,)
|
||||
defaultValueType = schema.Choice(
|
||||
title=_(u'Default type'),
|
||||
description=_(u'The type of the default, i.e. a fixed string '
|
||||
u'or an expression that is used to calculate the value.'),
|
||||
required=False,
|
||||
default='string',
|
||||
vocabulary=defaultValueTypes)
|
||||
required = schema.Bool(
|
||||
title=_(u'Required'),
|
||||
description=_(u'Must a value be entered into this field?'),
|
||||
|
|
Loading…
Add table
Reference in a new issue