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

View file

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

View file

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

View file

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

View file

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