work in progresse: rule management with message and mail handlers
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2167 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
bc3960ca31
commit
800e09e830
5 changed files with 28 additions and 12 deletions
|
@ -54,7 +54,7 @@ class RuleManager(object):
|
||||||
entry.append(rule)
|
entry.append(rule)
|
||||||
|
|
||||||
def getRulesForEvent(self, event):
|
def getRulesForEvent(self, event):
|
||||||
return self.rules.get(event.name, [])
|
return self.rules and self.rules.get(event.name, []) or []
|
||||||
|
|
||||||
def handleEvent(self, event):
|
def handleEvent(self, event):
|
||||||
result = []
|
result = []
|
||||||
|
@ -86,16 +86,6 @@ class Rule(Template):
|
||||||
self.actions = []
|
self.actions = []
|
||||||
|
|
||||||
|
|
||||||
class RuleInstance(object):
|
|
||||||
|
|
||||||
implements(IInstance)
|
|
||||||
|
|
||||||
template = None
|
|
||||||
|
|
||||||
def applyTemplate(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
# events
|
# events
|
||||||
|
|
||||||
class EventType(object):
|
class EventType(object):
|
||||||
|
|
|
@ -35,6 +35,7 @@ class RuleInstance(Instance):
|
||||||
implements(IRuleInstance)
|
implements(IRuleInstance)
|
||||||
adapts(Interface)
|
adapts(Interface)
|
||||||
|
|
||||||
|
template = None
|
||||||
event = None
|
event = None
|
||||||
|
|
||||||
def applyTemplate(self, **kw):
|
def applyTemplate(self, **kw):
|
||||||
|
|
|
@ -29,7 +29,10 @@ from zope.cachedescriptors.property import Lazy
|
||||||
|
|
||||||
from cybertools.organize.interfaces import IClientRegistrations, IRegistrationTemplate
|
from cybertools.organize.interfaces import IClientRegistrations, IRegistrationTemplate
|
||||||
from cybertools.organize.interfaces import serviceCategories
|
from cybertools.organize.interfaces import serviceCategories
|
||||||
|
from cybertools.organize.service import eventTypes, getCheckoutRule
|
||||||
from cybertools.composer.interfaces import IInstance
|
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 as SchemaBaseView
|
from cybertools.composer.schema.browser.common import BaseView as SchemaBaseView
|
||||||
from cybertools.composer.schema.interfaces import IClientFactory
|
from cybertools.composer.schema.interfaces import IClientFactory
|
||||||
from cybertools.stateful.interfaces import IStateful
|
from cybertools.stateful.interfaces import IStateful
|
||||||
|
@ -185,6 +188,9 @@ class CheckoutView(ServiceManagerView):
|
||||||
stateful = IStateful(reg)
|
stateful = IStateful(reg)
|
||||||
stateful.doTransition(('submit', 'change'))
|
stateful.doTransition(('submit', 'change'))
|
||||||
# send mail
|
# send mail
|
||||||
|
rm = IRuleManager(self.manager)
|
||||||
|
rm.addRule(getCheckoutRule(self.manager.senderEmail))
|
||||||
|
rm.handleEvent(Event(eventTypes['service.checkout'], client))
|
||||||
# find thank you message and redirect to it
|
# find thank you message and redirect to it
|
||||||
params = '?message=thankyou&id=' + self.clientName
|
params = '?message=thankyou&id=' + self.clientName
|
||||||
self.request.response.redirect(self.url + '/checkout.html' + params)
|
self.request.response.redirect(self.url + '/checkout.html' + params)
|
||||||
|
|
|
@ -256,6 +256,11 @@ class IService(Interface):
|
||||||
description=_(u'Web address (URL) for more information '
|
description=_(u'Web address (URL) for more information '
|
||||||
'about the service.'),
|
'about the service.'),
|
||||||
required=False,)
|
required=False,)
|
||||||
|
senderEmail = schema.TextLine(
|
||||||
|
title=_(u'Sender email'),
|
||||||
|
description=_(u'Email address that will be used as sender '
|
||||||
|
'address of confirmation and feedback messages.'),
|
||||||
|
required=False,)
|
||||||
|
|
||||||
availableCapacity = Attribute('Available capacity, i.e. number of seats '
|
availableCapacity = Attribute('Available capacity, i.e. number of seats '
|
||||||
'still available; a negative number means: '
|
'still available; a negative number means: '
|
||||||
|
|
|
@ -33,6 +33,7 @@ from zope.interface import implements, Interface
|
||||||
from cybertools.composer.interfaces import IInstance
|
from cybertools.composer.interfaces import IInstance
|
||||||
from cybertools.composer.message.base import MessageManager
|
from cybertools.composer.message.base import MessageManager
|
||||||
from cybertools.composer.rule.base import RuleManager, EventType
|
from cybertools.composer.rule.base import RuleManager, EventType
|
||||||
|
from cybertools.composer.rule.base import Rule, Action
|
||||||
from cybertools.composer.schema.interfaces import IClientManager, IClient
|
from cybertools.composer.schema.interfaces import IClientManager, IClient
|
||||||
from cybertools.stateful.base import StatefulAdapter
|
from cybertools.stateful.base import StatefulAdapter
|
||||||
from cybertools.stateful.definition import registerStatesDefinition
|
from cybertools.stateful.definition import registerStatesDefinition
|
||||||
|
@ -61,6 +62,7 @@ class ServiceManager(object):
|
||||||
|
|
||||||
allowRegWithNumber = False
|
allowRegWithNumber = False
|
||||||
allowDirectRegistration = True
|
allowDirectRegistration = True
|
||||||
|
senderEmail = 'unknown@sender.com'
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
if self.servicesFactory is not None:
|
if self.servicesFactory is not None:
|
||||||
|
@ -121,7 +123,7 @@ class Service(object):
|
||||||
|
|
||||||
manager = None
|
manager = None
|
||||||
category = None
|
category = None
|
||||||
location = ''
|
location = u''
|
||||||
allowRegWithNumber = False
|
allowRegWithNumber = False
|
||||||
allowDirectRegistration = True
|
allowDirectRegistration = True
|
||||||
|
|
||||||
|
@ -378,6 +380,18 @@ class MessageManagerAdapter(MessageManager):
|
||||||
return self.context.messages
|
return self.context.messages
|
||||||
|
|
||||||
|
|
||||||
|
def getCheckoutRule(sender):
|
||||||
|
""" A rule for sending a confirmation message, provided by default.
|
||||||
|
"""
|
||||||
|
checkoutRule = Rule('checkoutmail')
|
||||||
|
checkoutRule.events.append(eventTypes['service.checkout'])
|
||||||
|
checkoutRule.actions.append(Action('message',
|
||||||
|
parameters=dict(messageName='feedback_text')))
|
||||||
|
checkoutRule.actions.append(Action('sendmail',
|
||||||
|
parameters=dict(sender=sender)))
|
||||||
|
return checkoutRule
|
||||||
|
|
||||||
|
|
||||||
# Zope event handlers
|
# Zope event handlers
|
||||||
|
|
||||||
def clientRemoved(obj, event):
|
def clientRemoved(obj, event):
|
||||||
|
|
Loading…
Add table
Reference in a new issue