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:
helmutm 2007-11-10 20:00:43 +00:00
parent bc3960ca31
commit 800e09e830
5 changed files with 28 additions and 12 deletions

View file

@ -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):

View file

@ -35,6 +35,7 @@ class RuleInstance(Instance):
implements(IRuleInstance)
adapts(Interface)
template = None
event = None
def applyTemplate(self, **kw):

View file

@ -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)

View file

@ -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: '

View file

@ -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):