Change the comment workflow setting in the discussion control panel if the setting is changed in the types control panel; show warning message and disable the setting if a custom comment workflow is enabled.

svn path=/plone.app.discussion/trunk/; revision=46253
This commit is contained in:
Timo Stollenwerk 2010-12-11 21:30:18 +00:00
parent 0475376ed0
commit f2f97c5b38
4 changed files with 81 additions and 38 deletions

View File

@ -43,6 +43,27 @@
to fix this.
</dd>
</dl>
<dl class="portalMessage warning"
tal:condition="view/custom_comment_workflow_warning">
<dt i18n:translate="">
Warning
</dt>
<dd i18n:translate="text_custom_comment_workflow">
You have configured a custom workflow for the 'Discussion Item'
content type. You can enable/disable the comment moderation
in this control panel only if you use one of the default
'Discussion Item' workflows. Go to the
<tal:link i18n:name="label_discussion_control_panel_link">
<a href=""
i18n:translate="text_discussion_type_control_panel_link"
tal:attributes="href string:${portal_url}/@@types-controlpanel?type_id=Discussion Item"
>Types control panel</a>
</tal:link>
to choose a workflow for the 'Discussion Item' type.
</dd>
</dl>
<div metal:use-macro="context/global_statusmessage/macros/portal_message">
Portal status message
</div>

View File

@ -8,15 +8,20 @@ from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from Products.statusmessages.interfaces import IStatusMessage
from plone.app.controlpanel.interfaces import IConfigurationChangedEvent
from plone.app.registry.browser import controlpanel
from plone.registry.interfaces import IRegistry
from plone.registry.interfaces import IRecordModifiedEvent
from zope.app.component.hooks import getSite
from zope.component import getMultiAdapter, queryUtility
from z3c.form import button
from z3c.form.browser.checkbox import SingleCheckBoxFieldWidget
from plone.app.discussion.interfaces import IDiscussionSettings, _
@ -92,7 +97,8 @@ class DiscussionSettingsControlPanel(controlpanel.ControlPanelFormWrapper):
"""
registry = queryUtility(IRegistry)
settings = registry.forInterface(IDiscussionSettings, check=False)
wftool = getToolByName(self.context, "portal_workflow", None)
wf = wftool.getChainForPortalType('Discussion Item')
output = []
# Globally enabled
@ -100,6 +106,11 @@ class DiscussionSettingsControlPanel(controlpanel.ControlPanelFormWrapper):
output.append("globally_enabled")
# Comment moderation
if 'one_state_workflow' not in wf and \
'comment_review_workflow' not in wf:
output.append("moderation_custom")
elif settings.moderation_enabled:
output.append("moderation_enabled")
# Anonymous comments
if settings.anonymous_comments:
@ -133,13 +144,22 @@ class DiscussionSettingsControlPanel(controlpanel.ControlPanelFormWrapper):
return False
return True
def custom_comment_workflow_warning(self):
"""Returns a warning string if a custom comment workflow is enabled.
"""
wftool = getToolByName(self.context, "portal_workflow", None)
wf = wftool.getChainForPortalType('Discussion Item')
if 'one_state_workflow' in wf or 'comment_review_workflow' in wf:
return
return True
def notify_configuration_changed(event):
"""Event subscriber that is called every time the configuration changed.
"""
from zope.app.component.hooks import getSite
portal = getSite()
wftool = getToolByName(portal, 'portal_workflow', None)
from plone.registry.interfaces import IRecordModifiedEvent
if IRecordModifiedEvent.providedBy(event):
# Discussion control panel setting changed
if event.record.fieldName == 'moderation_enabled':
@ -153,9 +173,16 @@ def notify_configuration_changed(event):
wftool.setChainForPortalTypes(('Discussion Item',),
'one_state_workflow')
from plone.app.controlpanel.interfaces import IConfigurationChangedEvent
if IConfigurationChangedEvent.providedBy(event):
# Types control panel setting changed
# XXX: Todo!!!
pass
if 'workflow' in event.data:
registry = queryUtility(IRegistry)
settings = registry.forInterface(IDiscussionSettings, check=False)
wf = wftool.getChainForPortalType('Discussion Item')[0]
if wf == 'one_state_workflow':
settings.moderation_enabled = False
elif wf == 'comment_review_workflow':
settings.moderation_enabled = True
else:
# Custom workflow
pass

View File

@ -27,46 +27,39 @@
};
/* Update settings */
$.updateSettings = function () {
$.updateSettings = function(){
var globally_enabled = $("#content").hasClass("globally_enabled");
var anonymous_comments = $("#content").hasClass("anonymous_comments");
var moderation_enabled = $("#content").hasClass("moderation_enabled");
var moderation_custom = $("#content").hasClass("moderation_custom");
var invalid_mail_setup = $("#content").hasClass("invalid_mail_setup");
/* If commenting is globally disabled, disable all settings. */
if (globally_enabled === true) {
$.enableSettings([
$('#formfield-form-widgets-anonymous_comments'),
$('#formfield-form-widgets-text_transform'),
$('#formfield-form-widgets-captcha'),
$('#formfield-form-widgets-show_commenter_image'),
$('#formfield-form-widgets-moderator_notification_enabled'),
$('#formfield-form-widgets-user_notification_enabled')
]);
} else {
$.disableSettings([
$('#formfield-form-widgets-anonymous_comments'),
$('#formfield-form-widgets-text_transform'),
$('#formfield-form-widgets-captcha'),
$('#formfield-form-widgets-show_commenter_image'),
$('#formfield-form-widgets-moderator_notification_enabled'),
$('#formfield-form-widgets-user_notification_enabled')
]);
$.enableSettings([$('#formfield-form-widgets-anonymous_comments'), $('#formfield-form-widgets-moderation_enabled'), $('#formfield-form-widgets-text_transform'), $('#formfield-form-widgets-captcha'), $('#formfield-form-widgets-show_commenter_image'), $('#formfield-form-widgets-moderator_notification_enabled'), $('#formfield-form-widgets-user_notification_enabled')]);
}
else {
$.disableSettings([$('#formfield-form-widgets-anonymous_comments'), $('#formfield-form-widgets-moderation_enabled'), $('#formfield-form-widgets-text_transform'), $('#formfield-form-widgets-captcha'), $('#formfield-form-widgets-show_commenter_image'), $('#formfield-form-widgets-moderator_notification_enabled'), $('#formfield-form-widgets-user_notification_enabled')]);
}
/* If the mail setup is invalid, disable the mail settings. */
if (invalid_mail_setup === true) {
$.disableSettings([
$('#formfield-form-widgets-moderator_notification_enabled'),
$('#formfield-form-widgets-user_notification_enabled')
]);
} else {
$.enableSettings([
$('#formfield-form-widgets-moderator_notification_enabled'),
$('#formfield-form-widgets-user_notification_enabled')
]);
$.disableSettings([$('#formfield-form-widgets-moderator_notification_enabled'), $('#formfield-form-widgets-user_notification_enabled')]);
}
};
else {
$.enableSettings([$('#formfield-form-widgets-moderator_notification_enabled'), $('#formfield-form-widgets-user_notification_enabled')]);
}
/* If a custom workflow for comments is enabled, disable the moderation
switch. */
if (moderation_custom === true) {
$.disableSettings([$('#formfield-form-widgets-moderation_enabled'), ]);
}
else {
$.enableSettings([$('#formfield-form-widgets-moderation_enabled'), ]);
}
}
//#JSCOVERAGE_IF 0
/**************************************************************************

View File

@ -88,6 +88,8 @@
</configure>
<!-- Control panel event subscribers -->
<subscriber
for="plone.app.controlpanel.interfaces.IConfigurationChangedEvent"
handler=".browser.controlpanel.notify_configuration_changed"