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;
b_size python:30;
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">
Moderate comments
@ -79,7 +80,7 @@
<!--<option value="retract" i18n:translate="bulkactions_retract">Retract</option>-->
<option value="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="delete" i18n:translate="bulkactions_delete">Delete</option>
</select>

View File

@ -41,8 +41,21 @@ class View(BrowserView):
def cook(self, 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.transition = self.request.get('publish_transition', 'publish')
self.limit = self.request.get('limit', 100)
@ -57,6 +70,8 @@ class View(BrowserView):
)
def comments_pending(self, start=0, size=None):
"""Returns all comments with 'pending' review state.
"""
self.state = self.request.get('review_state', 'pending')
self.transition = self.request.get('publish_transition', 'publish')
self.limit = self.request.get('limit', 100)
@ -72,7 +87,8 @@ class View(BrowserView):
)
def comments_published(self, start=0, size=None):
"""Returns all comments with 'published' review state.
"""
self.state = self.request.get('review_state', 'pending')
self.transition = self.request.get('publish_transition', 'pending')
self.limit = self.request.get('limit', 100)
@ -88,8 +104,13 @@ class View(BrowserView):
)
def comments_spam(self, start=0, size=None):
"""Returns all comments that are marked as spam.
Not implemented yet.
"""
return None
class DeleteComment(BrowserView):
"""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 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
@ -29,13 +30,17 @@ class ModerationViewTest(PloneTestCase):
self.loginAsPortalOwner()
typetool = self.portal.portal_types
typetool.constructContent('Document', self.portal, 'doc1')
self.portal_discussion = getToolByName(self.portal, 'portal_discussion', None)
self.membership_tool = getToolByName(self.folder, 'portal_membership')
self.portal_discussion = getToolByName(self.portal,
'portal_discussion',
None)
self.membership_tool = getToolByName(self.folder,
'portal_membership')
self.memberdata = self.portal.portal_memberdata
request = self.app.REQUEST
context = getattr(self.portal, 'doc1')
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
# Add a conversation with three comments
@ -47,21 +52,30 @@ class ModerationViewTest(PloneTestCase):
comment1.text = 'Comment text'
comment1.Creator = 'Jim'
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.title = 'Comment 2'
comment2.text = 'Comment text'
comment2.Creator = 'Joe'
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.title = 'Comment 3'
comment3.text = 'Comment text'
comment3.Creator = 'Emma'
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):
self.failUnless(self.view.comments_all())
@ -71,7 +85,8 @@ class ModerationViewTest(PloneTestCase):
self.wf_tool.getInfoFor(self.comment1, 'review_state')
self.failUnless(self.view.comments_pending())
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.assertEquals(len(self.view.comments_pending()), 2)