1 # -*- coding: utf-8 -*-
2 #######################################################################################
3 # Plinn - http://plinn.org #
4 # Copyright © 2005-2009 Benoît PIN <benoit.pin@ensmp.fr> #
6 # This program is free software; you can redistribute it and/or #
7 # modify it under the terms of the GNU General Public License #
8 # as published by the Free Software Foundation; either version 2 #
9 # of the License, or (at your option) any later version. #
11 # This program is distributed in the hope that it will be useful, #
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14 # GNU General Public License for more details. #
16 # You should have received a copy of the GNU General Public License #
17 # along with this program; if not, write to the Free Software #
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #
19 #######################################################################################
21 Module to manage email notification settings.
23 $Id: EmailNotification.py 1516 2009-06-29 14:12:14Z pin $
24 $URL: http://svn.cri.ensmp.fr/svn/Plinn/branches/CMF-2.1/EmailNotification.py $
26 from ExtensionClass
import Base
28 from Globals
import InitializeClass
, PersistentMapping
29 from AccessControl
import ClassSecurityInfo
30 from zope
.interface
import implements
31 from interfaces
import IEmailNotificationSettings
32 from permissions
import ListNotificationSettings
, SubscribeNotification
33 from Products
.CMFCore
.utils
import getToolByName
34 from Products
.Plinn
.utils
import Message
as _
36 NOTIFICATION_SETTINGS_NAME
= '_notification_settings'
37 EVENTS
= ({'interface':'zope.app.container.interfaces.IObjectRemovedEvent'
38 ,'title':_(u
'Object deleted')},)
40 class EmailNoticationSettings(Base
, Acquisition
.Implicit
):
42 Adapter used to map users on objects and send them email notification about events.
43 Provide methods to resolve recipients list for a notification.
46 implements(IEmailNotificationSettings
)
47 security
= ClassSecurityInfo()
49 def __init__(self
, content
) :
50 self
._content
= content
51 if not hasattr(content
.aq_base
, NOTIFICATION_SETTINGS_NAME
) :
52 setattr(content
, NOTIFICATION_SETTINGS_NAME
, PersistentMapping())
54 def _getSettings(self
) :
55 return getattr(self
._content
, NOTIFICATION_SETTINGS_NAME
)
57 security
.declarePrivate('getSubscribersFor')
58 def getSubscribersFor(self
, eventIFace
):
59 """returns subscribers for event interface"""
60 settings
= self
._getSettings
()
61 mtool
= getToolByName(self
, 'portal_membership')
62 memberIds
= [mid
for mid
, mSettings
in settings
.items() if mSettings
.get(eventIFace
, False)]
64 return mtool
.getMembers(memberIds
)
66 security
.declareProtected(SubscribeNotification
, 'subscribeToEvent')
67 def subscribeToEvent(self
, eventIFace
, register
):
68 settings
= self
._getSettings
()
69 mtool
= getToolByName(self
, 'portal_membership')
70 m
= mtool
.getAuthenticatedMember()
72 if not settings
.has_key(mid
) :
73 settings
[mid
] = PersistentMapping()
75 memberSettings
= settings
[mid
]
76 memberSettings
[eventIFace
] = register
78 security
.declareProtected(SubscribeNotification
, 'myNotifications')
79 def myNotifications(self
):
80 settings
= self
._getSettings
()
81 mtool
= getToolByName(self
, 'portal_membership')
82 m
= mtool
.getAuthenticatedMember()
84 mySettings
= settings
.get(mid
, {})
88 setting
= event
.copy()
89 setting
['registered'] = mySettings
.get(event
['interface'], False)
90 notifications
.append(setting
)
94 security
.declarePublic('getManagedEvents')
95 def getManagedEvents(self
):
96 return [e
['interface'] for e
in EVENTS
]
100 InitializeClass(EmailNoticationSettings
)