comment_review_workflow added.

svn path=/plone.app.discussion/trunk/; revision=27361
This commit is contained in:
Timo Stollenwerk 2009-06-08 21:16:51 +00:00
parent 468e32a6ed
commit c55316d212
6 changed files with 182 additions and 0 deletions

View File

@ -3,6 +3,9 @@
xmlns:genericsetup="http://namespaces.zope.org/genericsetup" xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
i18n_domain="plone.app.discussion"> i18n_domain="plone.app.discussion">
<include package="collective.autopermission" />
<include package="plone.indexer" />
<include file="permissions.zcml" /> <include file="permissions.zcml" />
<include package=".browser" /> <include package=".browser" />

View File

@ -6,4 +6,9 @@
<!-- custom permissions are defined here --> <!-- custom permissions are defined here -->
<permission
id="plone.app.discussion.ReviewComments"
title="Review comments"
/>
</configure> </configure>

View File

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<rolemap>
<permissions>
<permission name="Review comments" acquire="True">
<role name="Manager"/>
<role name="Reviewer"/>
</permission>
</permissions>
</rolemap>

View File

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<object name="portal_workflow">
<object name="comment_review_workflow" meta_type="Workflow"/>
<bindings>
<type type_id="Discussion Item">
<bound-workflow workflow_id="one_state_workflow" />
</type>
</bindings>
</object>

View File

@ -0,0 +1,134 @@
<?xml version="1.0"?>
<dc-workflow xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="plone.app.discussion"
workflow_id="comment_review_workflow"
title="Comment Review Workflow"
description="A simple workflow for comments"
state_variable="review_state"
initial_state="pending"
i18n:attributes="title; description">
<permission>Access contents information</permission>
<permission>Modify portal content</permission>
<permission>View</permission>
<permission>Reply to item</permission>
<state state_id="pending" title="Pending" i18n:attributes="title">
<exit-transition transition_id="publish"/>
<description i18n:translate="">
Submitted, pending review.
</description>
<permission-map name="Access contents information" acquired="False">
<permission-role>Manager</permission-role>
<permission-role>Owner</permission-role>
<permission-role>Reviewer</permission-role>
</permission-map>
<permission-map name="Modify portal content" acquired="False">
<permission-role>Manager</permission-role>
<permission-role>Owner</permission-role>
<permission-role>Reviewer</permission-role>
</permission-map>
<permission-map name="View" acquired="False">
<permission-role>Manager</permission-role>
<permission-role>Owner</permission-role>
<permission-role>Reviewer</permission-role>
</permission-map>
<permission-map name="Reply to item" acquired="False">
</permission-map>
</state>
<state state_id="published" title="Published" i18n:attributes="title">
<description i18n:translate="">
Visible to everyone, non-editable.
</description>
<permission-map name="Access contents information" acquired="False">
<permission-role>Anonymous</permission-role>
</permission-map>
<permission-map name="Modify portal content" acquired="False">
<permission-role>Manager</permission-role>
</permission-map>
<permission-map name="View" acquired="False">
<permission-role>Anonymous</permission-role>
</permission-map>
<permission-map name="Reply to item" acquired="True">
</permission-map>
</state>
<transition transition_id="publish" new_state="published"
title="Reviewer publishes content"
trigger="USER"
before_script="" after_script=""
i18n:attributes="title">
<description i18n:translate="">
Publishing the comment makes it visible to other users.
</description>
<action url="%(content_url)s/content_status_modify?workflow_action=publish"
category="workflow"
i18n:translate="">Publish</action>
<guard>
<guard-permission>Review comments</guard-permission>
</guard>
</transition>
<variable variable_id="action" for_catalog="False"
for_status="True" update_always="True">
<description i18n:translate="">Previous transition</description>
<default>
<expression>transition/getId|nothing</expression>
</default>
<guard>
</guard>
</variable>
<variable variable_id="actor" for_catalog="False"
for_status="True" update_always="True">
<description i18n:translate="">
The ID of the user who performed the previous transition
</description>
<default>
<expression>user/getUserName</expression>
</default>
<guard>
</guard>
</variable>
<variable variable_id="comments" for_catalog="False"
for_status="True" update_always="True">
<description i18n:translate="">
Comment about the last transition
</description>
<default>
<expression>python:state_change.kwargs.get('comment', '')</expression>
</default>
<guard>
</guard>
</variable>
<variable variable_id="review_history" for_catalog="False"
for_status="False" update_always="False">
<description i18n:translate="">
Provides access to workflow history
</description>
<default>
<expression>state_change/getHistory</expression>
</default>
<guard>
<guard-permission>Request review</guard-permission>
<guard-permission>Review portal content</guard-permission>
</guard>
</variable>
<variable variable_id="time" for_catalog="False"
for_status="True" update_always="True">
<description i18n:translate="">
When the previous transition was performed
</description>
<default>
<expression>state_change/getDateTime</expression>
</default>
<guard>
</guard>
</variable>
</dc-workflow>

View File

@ -0,0 +1,22 @@
import unittest
from Products.PloneTestCase.ptc import PloneTestCase
from plone.app.discussion.tests.layer import DiscussionLayer
class WorkflowTest(PloneTestCase):
layer = DiscussionLayer
def test_permission(self):
self.setRoles(('Reviewer',))
self.failUnless(self.portal.portal_membership.checkPermission('Review comments', self.folder), self.folder)
self.setRoles(('Member',))
self.failIf(self.portal.portal_membership.checkPermission('Review comments', self.folder), self.folder)
def test_workflows_installed(self):
self.failUnless('comment_review_workflow' in self.portal.portal_workflow.objectIds())
self.assertEquals(('one_state_workflow',),
self.portal.portal_workflow.getChainForPortalType('Discussion Item'))
def test_suite():
return unittest.defaultTestLoader.loadTestsFromName(__name__)