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:
parent
c9a31ee978
commit
58f8f4bf22
@ -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>
|
||||||
|
@ -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
|
||||||
"""
|
"""
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user