diff --git a/plone/app/discussion/comment.py b/plone/app/discussion/comment.py index 76b91aa..63621e6 100644 --- a/plone/app/discussion/comment.py +++ b/plone/app/discussion/comment.py @@ -269,9 +269,12 @@ def notify_user(obj, event): def notify_moderator(obj, event): """Tell the moderator when a comment needs attention. - This method sends an email to the site admin (mail control panel setting) - if comment moderation is enabled and a new comment has been added that - needs to be approved. + This method sends an email to the moderator if comment moderation is + enabled and a new comment has been added that needs to be approved. + + Configure the moderator e-mail address in the discussion control panel. + If no moderator is configured but moderator notifications are turned on, + the site admin email (from the mail control panel) will be used. This requires the moderator_notification to be enabled in the discussion control panel and the comment_review_workflow enabled for the comment @@ -289,7 +292,11 @@ def notify_moderator(obj, event): portal_url = getToolByName(obj, 'portal_url') portal = portal_url.getPortalObject() sender = portal.getProperty('email_from_address') - mto = portal.getProperty('email_from_address') + + if settings.moderator_email: + mto = settings.moderator_email + else: + mto = sender # Check if a sender address is available if not sender: diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index adb57e4..08e2c11 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -113,6 +113,16 @@ class IDiscussionSettings(Interface): required=False, default=False, ) + + moderator_email = schema.ASCIILine( + title = _(u'label_moderator_email', default=u'Moderator Email Address'), + description = _(u'help_moderator_email', + default=u"Address to which moderator notifications " + u"will be sent. If not specified, the Site " + u"'From' Address from the mail control panel " + u"will be used."), + required = False, + ) user_notification_enabled = schema.Bool( title=_(u"label_user_notification_enabled", diff --git a/plone/app/discussion/tests/test_notifications.py b/plone/app/discussion/tests/test_notifications.py index 27a4909..45cda4b 100644 --- a/plone/app/discussion/tests/test_notifications.py +++ b/plone/app/discussion/tests/test_notifications.py @@ -16,7 +16,6 @@ from Products.CMFPlone.tests.utils import MockMailHost from plone.registry.interfaces import IRegistry from plone.app.discussion.interfaces import IConversation -from plone.app.discussion.interfaces import IDiscussionSettings from plone.app.discussion.tests.layer import DiscussionLayer @@ -38,7 +37,6 @@ class TestUserNotificationUnit(PloneTestCase): # Enable user notification setting registry = queryUtility(IRegistry) - settings = registry.forInterface(IDiscussionSettings) registry['plone.app.discussion.interfaces.IDiscussionSettings' + '.user_notification_enabled'] = True @@ -89,7 +87,6 @@ class TestUserNotificationUnit(PloneTestCase): def test_do_not_notify_user_when_notification_is_disabled(self): # Disable user notification and make sure no email is send to the user. registry = queryUtility(IRegistry) - settings = registry.forInterface(IDiscussionSettings) registry['plone.app.discussion.interfaces.IDiscussionSettings.' + 'user_notification_enabled'] = False @@ -241,6 +238,23 @@ class TestModeratorNotificationUnit(PloneTestCase): #'...Another t=C3=A4st message...You are receiving this mail because # T=C3=A4st user\ntest@plone.test...is sending feedback about the site # you administer at... + + def test_notify_moderator_specific_address(self): + # A moderator email address can be specified in the control panel. + registry = queryUtility(IRegistry) + registry['plone.app.discussion.interfaces.IDiscussionSettings' + + '.moderator_email'] = 'test@example.com' + + comment = createObject('plone.Comment') + comment.text = 'Comment text' + self.conversation.addComment(comment) + + self.assertEquals(len(self.mailhost.messages), 1) + msg = self.mailhost.messages[0] + if not isinstance(msg, str): + self.failUnless('test@example.com' in msg.mto) + else: + self.failUnless('To: test@example.com' in msg) def test_do_not_notify_moderator_when_no_sender_is_available(self): # Set sender mail address to nonw and make sure no email is send to the