61 lines
2.0 KiB
Plaintext
61 lines
2.0 KiB
Plaintext
|
|
||
|
configure.zcml::
|
||
|
|
||
|
<configure
|
||
|
xmlns="http://namespaces.zope.org/zope"
|
||
|
xmlns:browser="http://namespaces.zope.org/browser"
|
||
|
xmlns:plone="http://namespaces.plone.org/plone"
|
||
|
xmlns:grok="http://namespaces.zope.org/grok"
|
||
|
i18n_domain="freitag.behavior.allowdiscussion">
|
||
|
|
||
|
<!-- Override plone.app.discussion's conversation view -->
|
||
|
<browser:page
|
||
|
name="conversation_view"
|
||
|
for="plone.dexterity.interfaces.IDexterityContent"
|
||
|
class=".conversation.ConversationView"
|
||
|
permission="zope2.View"
|
||
|
/>
|
||
|
|
||
|
</configure>
|
||
|
|
||
|
conversation.py
|
||
|
|
||
|
from zope.component import queryUtility
|
||
|
|
||
|
from plone.registry.interfaces import IRegistry
|
||
|
|
||
|
from Acquisition import aq_base
|
||
|
from Acquisition import aq_chain
|
||
|
from Acquisition import aq_inner
|
||
|
|
||
|
from Products.CMFCore.utils import getToolByName
|
||
|
from Products.CMFCore.interfaces import IFolderish
|
||
|
|
||
|
from Products.CMFPlone.interfaces import IPloneSiteRoot
|
||
|
from Products.CMFPlone.interfaces import INonStructuralFolder
|
||
|
|
||
|
from plone.app.discussion.interfaces import IDiscussionSettings
|
||
|
|
||
|
|
||
|
class ConversationView(object):
|
||
|
|
||
|
def enabled(self):
|
||
|
context = aq_inner(self.context)
|
||
|
|
||
|
# Fetch discussion registry
|
||
|
registry = queryUtility(IRegistry)
|
||
|
settings = registry.forInterface(IDiscussionSettings, check=False)
|
||
|
|
||
|
# Check if discussion is allowed globally
|
||
|
if not settings.globally_enabled:
|
||
|
return False
|
||
|
|
||
|
# Check if discussion is allowed on the content object
|
||
|
if context.allow_discussion is not None:
|
||
|
return context.allow_discussion
|
||
|
|
||
|
# Check if discussion is allowed on the content type
|
||
|
portal_types = getToolByName(self, 'portal_types')
|
||
|
document_fti = getattr(portal_types, context.portal_type)
|
||
|
return document_fti.getProperty('allow_discussion')
|