Do not show "publish" bulk action in moderation view when moderation is disabled. Fix story 1105355

.

svn path=/plone.app.discussion/trunk/; revision=30678
This commit is contained in:
Timo Stollenwerk 2009-10-18 13:12:52 +00:00
parent c9a31ee978
commit 58f8f4bf22
3 changed files with 49 additions and 12 deletions

View File

@ -14,7 +14,8 @@
Batch python:modules['Products.CMFPlone'].Batch; Batch python:modules['Products.CMFPlone'].Batch;
b_size python:30; b_size python:30;
b_start python:0; b_start python:0;
b_start request/b_start | b_start;"> b_start request/b_start | b_start;
moderation_enabled view/moderation_enabled;">
<h1 class="documentFirstHeading" i18n:translate="title_review"> <h1 class="documentFirstHeading" i18n:translate="title_review">
Moderate comments Moderate comments
@ -79,7 +80,7 @@
<!--<option value="retract" i18n:translate="bulkactions_retract">Retract</option>--> <!--<option value="retract" i18n:translate="bulkactions_retract">Retract</option>-->
<option value="publish" <option value="publish"
i18n:translate="bulkactions_publish" i18n:translate="bulkactions_publish"
tal:condition="python: filter != 'published'">Publish</option> tal:condition="python: filter != 'published' and moderation_enabled">Publish</option>
<!--<option value="mark_as_spam" i18n:translate="bulkactions_markasspam">Mark as Spam</option>--> <!--<option value="mark_as_spam" i18n:translate="bulkactions_markasspam">Mark as Spam</option>-->
<option value="delete" i18n:translate="bulkactions_delete">Delete</option> <option value="delete" i18n:translate="bulkactions_delete">Delete</option>
</select> </select>

View File

@ -41,8 +41,21 @@ class View(BrowserView):
def cook(self, text): def cook(self, text):
return text return text
def comments_all(self, start=0, size=None): def moderation_enabled(self):
"""Returns true if comment moderation workflow is
enabled on 'Discussion Item' content type.
"""
context = aq_inner(self.context)
wf_tool = getToolByName(context, 'portal_workflow')
if wf_tool.getChainForPortalType('Discussion Item') \
== ('comment_review_workflow',):
return True
else:
return False
def comments_all(self, start=0, size=None):
"""Returns all comments.
"""
self.state = self.request.get('review_state', 'pending') self.state = self.request.get('review_state', 'pending')
self.transition = self.request.get('publish_transition', 'publish') self.transition = self.request.get('publish_transition', 'publish')
self.limit = self.request.get('limit', 100) self.limit = self.request.get('limit', 100)
@ -57,6 +70,8 @@ class View(BrowserView):
) )
def comments_pending(self, start=0, size=None): def comments_pending(self, start=0, size=None):
"""Returns all comments with 'pending' review state.
"""
self.state = self.request.get('review_state', 'pending') self.state = self.request.get('review_state', 'pending')
self.transition = self.request.get('publish_transition', 'publish') self.transition = self.request.get('publish_transition', 'publish')
self.limit = self.request.get('limit', 100) self.limit = self.request.get('limit', 100)
@ -72,7 +87,8 @@ class View(BrowserView):
) )
def comments_published(self, start=0, size=None): def comments_published(self, start=0, size=None):
"""Returns all comments with 'published' review state.
"""
self.state = self.request.get('review_state', 'pending') self.state = self.request.get('review_state', 'pending')
self.transition = self.request.get('publish_transition', 'pending') self.transition = self.request.get('publish_transition', 'pending')
self.limit = self.request.get('limit', 100) self.limit = self.request.get('limit', 100)
@ -88,8 +104,13 @@ class View(BrowserView):
) )
def comments_spam(self, start=0, size=None): def comments_spam(self, start=0, size=None):
"""Returns all comments that are marked as spam.
Not implemented yet.
"""
return None return None
class DeleteComment(BrowserView): class DeleteComment(BrowserView):
"""Delete a comment from a conversation """Delete a comment from a conversation
""" """

View File

@ -17,7 +17,8 @@ from Products.CMFPlone.tests import dummy
from Products.PloneTestCase.ptc import PloneTestCase from Products.PloneTestCase.ptc import PloneTestCase
from plone.app.discussion.browser.moderation import View from plone.app.discussion.browser.moderation import View
from plone.app.discussion.interfaces import IConversation, IComment, IReplies, IDiscussionSettings from plone.app.discussion.interfaces import IConversation, IComment
from plone.app.discussion.interfaces import IReplies, IDiscussionSettings
from plone.app.discussion.tests.layer import DiscussionLayer from plone.app.discussion.tests.layer import DiscussionLayer
@ -29,13 +30,17 @@ class ModerationViewTest(PloneTestCase):
self.loginAsPortalOwner() self.loginAsPortalOwner()
typetool = self.portal.portal_types typetool = self.portal.portal_types
typetool.constructContent('Document', self.portal, 'doc1') typetool.constructContent('Document', self.portal, 'doc1')
self.portal_discussion = getToolByName(self.portal, 'portal_discussion', None) self.portal_discussion = getToolByName(self.portal,
self.membership_tool = getToolByName(self.folder, 'portal_membership') 'portal_discussion',
None)
self.membership_tool = getToolByName(self.folder,
'portal_membership')
self.memberdata = self.portal.portal_memberdata self.memberdata = self.portal.portal_memberdata
request = self.app.REQUEST request = self.app.REQUEST
context = getattr(self.portal, 'doc1') context = getattr(self.portal, 'doc1')
self.view = View(context, request) self.view = View(context, request)
self.portal.portal_workflow.setChainForPortalTypes(('Discussion Item',), 'comment_review_workflow') self.portal.portal_workflow.setChainForPortalTypes(
('Discussion Item',), 'comment_review_workflow')
self.wf_tool = self.portal.portal_workflow self.wf_tool = self.portal.portal_workflow
# Add a conversation with three comments # Add a conversation with three comments
@ -47,21 +52,30 @@ class ModerationViewTest(PloneTestCase):
comment1.text = 'Comment text' comment1.text = 'Comment text'
comment1.Creator = 'Jim' comment1.Creator = 'Jim'
new_id_1 = conversation.addComment(comment1) new_id_1 = conversation.addComment(comment1)
self.comment1 = self.portal.doc1.restrictedTraverse('++conversation++default/%s' % new_id_1) self.comment1 = self.portal.doc1.restrictedTraverse(\
'++conversation++default/%s' % new_id_1)
comment2 = createObject('plone.Comment') comment2 = createObject('plone.Comment')
comment2.title = 'Comment 2' comment2.title = 'Comment 2'
comment2.text = 'Comment text' comment2.text = 'Comment text'
comment2.Creator = 'Joe' comment2.Creator = 'Joe'
new_id_2 = conversation.addComment(comment2) new_id_2 = conversation.addComment(comment2)
self.comment2 = self.portal.doc1.restrictedTraverse('++conversation++default/%s' % new_id_2) self.comment2 = self.portal.doc1.restrictedTraverse(\
'++conversation++default/%s' % new_id_2)
comment3 = createObject('plone.Comment') comment3 = createObject('plone.Comment')
comment3.title = 'Comment 3' comment3.title = 'Comment 3'
comment3.text = 'Comment text' comment3.text = 'Comment text'
comment3.Creator = 'Emma' comment3.Creator = 'Emma'
new_id_3 = conversation.addComment(comment3) new_id_3 = conversation.addComment(comment3)
self.comment3 = self.portal.doc1.restrictedTraverse('++conversation++default/%s' % new_id_3) self.comment3 = self.portal.doc1.restrictedTraverse(\
'++conversation++default/%s' % new_id_3)
def test_moderation_enabled(self):
self.assertEquals(self.view.moderation_enabled(), True)
self.wf_tool.setChainForPortalTypes(('Discussion Item',),
('simple_publication_workflow,'))
self.assertEquals(self.view.moderation_enabled(), False)
def test_comments_all(self): def test_comments_all(self):
self.failUnless(self.view.comments_all()) self.failUnless(self.view.comments_all())
@ -71,7 +85,8 @@ class ModerationViewTest(PloneTestCase):
self.wf_tool.getInfoFor(self.comment1, 'review_state') self.wf_tool.getInfoFor(self.comment1, 'review_state')
self.failUnless(self.view.comments_pending()) self.failUnless(self.view.comments_pending())
self.assertEquals(len(self.view.comments_pending()), 3) self.assertEquals(len(self.view.comments_pending()), 3)
self.portal.portal_workflow.doActionFor(self.comment1, action='publish') self.portal.portal_workflow.doActionFor(self.comment1,
action='publish')
#self.comment1.reindexObject() #self.comment1.reindexObject()
#self.assertEquals(len(self.view.comments_pending()), 2) #self.assertEquals(len(self.view.comments_pending()), 2)