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)
|
||||
|
||||
def getRulesForEvent(self, event):
|
||||
return self.rules.get(event.name, [])
|
||||
return self.rules and self.rules.get(event.name, []) or []
|
||||
|
||||
def handleEvent(self, event):
|
||||
result = []
|
||||
|
@ -86,16 +86,6 @@ class Rule(Template):
|
|||
self.actions = []
|
||||
|
||||
|
||||
class RuleInstance(object):
|
||||
|
||||
implements(IInstance)
|
||||
|
||||
template = None
|
||||
|
||||
def applyTemplate(self):
|
||||
pass
|
||||
|
||||
|
||||
# events
|
||||
|
||||
class EventType(object):
|
||||
|
|
|
@ -35,6 +35,7 @@ class RuleInstance(Instance):
|
|||
implements(IRuleInstance)
|
||||
adapts(Interface)
|
||||
|
||||
template = None
|
||||
event = None
|
||||
|
||||
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 serviceCategories
|
||||
from cybertools.organize.service import eventTypes, getCheckoutRule
|
||||
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.interfaces import IClientFactory
|
||||
from cybertools.stateful.interfaces import IStateful
|
||||
|
@ -185,6 +188,9 @@ class CheckoutView(ServiceManagerView):
|
|||
stateful = IStateful(reg)
|
||||
stateful.doTransition(('submit', 'change'))
|
||||
# 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
|
||||
params = '?message=thankyou&id=' + self.clientName
|
||||
self.request.response.redirect(self.url + '/checkout.html' + params)
|
||||
|
|
|
@ -256,6 +256,11 @@ class IService(Interface):
|
|||
description=_(u'Web address (URL) for more information '
|
||||
'about the service.'),
|
||||
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 '
|
||||
'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.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 IClientManager, IClient
|
||||
from cybertools.stateful.base import StatefulAdapter
|
||||
from cybertools.stateful.definition import registerStatesDefinition
|
||||
|
@ -61,6 +62,7 @@ class ServiceManager(object):
|
|||
|
||||
allowRegWithNumber = False
|
||||
allowDirectRegistration = True
|
||||
senderEmail = 'unknown@sender.com'
|
||||
|
||||
def __init__(self):
|
||||
if self.servicesFactory is not None:
|
||||
|
@ -121,7 +123,7 @@ class Service(object):
|
|||
|
||||
manager = None
|
||||
category = None
|
||||
location = ''
|
||||
location = u''
|
||||
allowRegWithNumber = False
|
||||
allowDirectRegistration = True
|
||||
|
||||
|
@ -378,6 +380,18 @@ class MessageManagerAdapter(MessageManager):
|
|||
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
|
||||
|
||||
def clientRemoved(obj, event):
|
||||
|
|
Loading…
Add table
Reference in a new issue