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
	
	 helmutm
						helmutm