[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/ Workflow views added.
Charlie Clark
charlie at begeistert.org
Tue Oct 12 09:29:27 EDT 2010
Log message for revision 117473:
Workflow views added.
Changed:
A Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/
A Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/TODO.txt
A Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/__init__.py
A Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/configure.zcml
A Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/hide.pt
A Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/history.pt
A Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/history.py
A Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/publish.pt
A Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/reject.pt
A Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/retract.pt
A Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/show.pt
A Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/submit.pt
A Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/workflow.py
-=-
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/TODO.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/TODO.txt (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/TODO.txt 2010-10-12 13:29:26 UTC (rev 117473)
@@ -0,0 +1,14 @@
+Workflow Views
+--------------
+
+content_hide_form.pt
+content_publish_form.pt
+content_reject_form.pt
+content_retract_form.pt
+content_show_form.pt
+content_status_history.pt
+content_status_modify.py
+content_submit_form.pt
+
+rejectItems.py
+review.pt
\ No newline at end of file
Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/__init__.py
___________________________________________________________________
Added: svn:eol-style
+ native
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/configure.zcml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/configure.zcml (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/configure.zcml 2010-10-12 13:29:26 UTC (rev 117473)
@@ -0,0 +1,62 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:browser="http://namespaces.zope.org/browser">
+
+ <browser:page
+ for="Products.CMFCore.interfaces.IWorkflowAware"
+ layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
+ name="submit.html"
+ class=".workflow.Submit"
+ permission="cmf.RequestReview"
+ />
+
+ <browser:page
+ for="Products.CMFCore.interfaces.IWorkflowAware"
+ layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
+ name="publish.html"
+ class=".workflow.Publish"
+ permission="cmf.ReviewPortalContent"
+ />
+
+ <browser:page
+ for="Products.CMFCore.interfaces.IWorkflowAware"
+ layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
+ name="retract.html"
+ class=".workflow.Retract"
+ permission="cmf.RequestReview"
+ />
+
+ <browser:page
+ for="Products.CMFCore.interfaces.IWorkflowAware"
+ layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
+ name="reject.html"
+ class=".workflow.Reject"
+ permission="cmf.ReviewPortalContent"
+ />
+
+ <browser:page
+ for="Products.CMFCore.interfaces.IWorkflowAware"
+ layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
+ name="hide.html"
+ class=".workflow.Hide"
+ permission="cmf.ReviewPortalContent"
+ />
+
+ <browser:page
+ for="Products.CMFCore.interfaces.IWorkflowAware"
+ layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
+ name="show.html"
+ class=".workflow.Show"
+ permission="cmf.ReviewPortalContent"
+ />
+
+ <browser:page
+ for="Products.CMFCore.interfaces.IWorkflowAware"
+ layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
+ name="history.html"
+ class=".history.View"
+ template="history.pt"
+ permission="cmf.ReviewPortalContent"
+ />
+
+</configure>
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/hide.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/hide.pt (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/hide.pt 2010-10-12 13:29:26 UTC (rev 117473)
@@ -0,0 +1,39 @@
+<html metal:use-macro="context/@@standard_macros/page">
+
+<body>
+
+<metal:slot metal:fill-slot="body" i18n:domain="cmf_default">
+
+<ul class="errors" tal:condition="view/errors">
+ <li tal:repeat="error view/error_views"
+ tal:content="structure error">Error Message</li>
+</ul>
+
+<h1 i18n:translate="">Hide <span tal:replace="here/getId"
+ i18n:name="objectid">Item</span></h1>
+
+<p i18n:translate="">Use this form to hide a content item by setting its
+ status to <b>Private</b>, thereby making it unavailable to
+ other portal members and visitors.</p>
+
+<form action="." method="post" tal:attributes="action request/ACTUAL_URL">
+
+ <fieldset tal:repeat="widget view/widgets">
+ <label tal:attributes="for widget/name" tal:content="widget/label"></label>
+ <tal:block replace="structure widget" />
+ <legend tal:content="widget/hint"></legend>
+ <tal:block condition="widget/error"
+ replace="structure widget/error" />
+ </fieldset>
+
+ <div class="buttons">
+ <tal:loop tal:repeat="action view/actions"
+ tal:replace="structure action/render" />
+ </div>
+
+</form>
+
+</metal:slot>
+
+</body>
+</html>
\ No newline at end of file
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/history.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/history.pt (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/history.pt 2010-10-12 13:29:26 UTC (rev 117473)
@@ -0,0 +1,45 @@
+<html metal:use-macro="context/@@standard_macros/page">
+<body>
+
+<metal:slot metal:fill-slot="body" i18n:domain="cmf_default">
+
+<h1 i18n:translate="">Content Item status history</h1>
+
+<p i18n:translate="">An item's status (also called its review state)
+ determines who can see it.
+ A <b>private</b> item can only be viewed by its Owner and by the site
+ management. Only <b>published</b> items are available to the general
+ member base and anonymous visitors. To make an item published, it
+ has to be reviewed by one of the site's Reviewers. You can request
+ that an item be reviewed by setting its status to <b>pending</b>.</p>
+
+<p i18n:translate="">Another way to control the visibility of an item is with
+ its <b>effective date</b>. An item is not publicly available before its
+ effective date, <em>even if its status is <b>published</b></em>.</p>
+
+<h2 i18n:translate="">Current state</h2>
+<span tal:omit-tag="" i18n:translate="">This item is in
+<span i18n:name="status"><b tal:content="view/review_state"
+ i18n:translate="">Private</b></span> state.</span>
+
+<div tal:condition="view/review_history">
+ <h3><strong i18n:translate="">Reviewing history</strong></h3>
+ <div tal:repeat="items view/review_history">
+ <span tal:replace="python: items['time'].aCommon()" />
+ <span tal:omit-tag="" tal:content="items/action" i18n:translate=""></span>
+ <span tal:condition="items/effective_date|nothing" i18n:translate="">
+ (effective: <span tal:replace="python: items['effective_date'].aCommon()"
+ i18n:name="eff_date"></span>)</span>
+ <span tal:omit-tag="" i18n:translate="">by
+ <span tal:replace="items/actor" i18n:name="actor">Actor</span></span>
+ <br />
+ <div tal:define="rhComments items/comments"
+ tal:replace="rhComments">Comments</div>
+ </div>
+</div>
+<div tal:condition="not: view/review_history"
+ i18n:translate="">This item has not had any status changes.</div>
+</metal:slot>
+
+</body>
+</html>
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/history.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/history.py (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/history.py 2010-10-12 13:29:26 UTC (rev 117473)
@@ -0,0 +1,38 @@
+##############################################################################
+#
+# Copyright (c) 2010 Zope Foundation and Contributors.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Workflow history view"""
+
+from Products.CMFDefault.utils import Message as _
+from Products.CMFDefault.browser.utils import ViewBase
+from Products.CMFDefault.browser.utils import memoize, decode
+
+
+class View(ViewBase):
+
+ @property
+ @memoize
+ def workflow(self):
+ return self._getTool('portal_workflow')
+
+ @decode
+ @memoize
+ def review_state(self):
+ return self.workflow.getInfoFor(self.context, 'review_state')
+
+ @decode
+ @memoize
+ def review_history(self):
+ history = self.workflow.getInfoFor(self.context, 'review_history')
+ if not history:
+ return
+ return reversed(history)
Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/history.py
___________________________________________________________________
Added: svn:eol-style
+ native
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/publish.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/publish.pt (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/publish.pt 2010-10-12 13:29:26 UTC (rev 117473)
@@ -0,0 +1,42 @@
+<html metal:use-macro="context/@@standard_macros/page">
+
+<body>
+
+<metal:slot metal:fill-slot="body" i18n:domain="cmf_default">
+
+<ul class="errors" tal:condition="view/errors">
+ <li tal:repeat="error view/error_views"
+ tal:content="structure error">Error Message</li>
+</ul>
+
+<h1 i18n:translate="">Publish <span tal:replace="here/getId"
+ i18n:name="objectid">Item</span></h1>
+
+<p i18n:translate="">A <b>published</b> item is available to the general
+ member base and anonymous visitors.</p>
+
+<p i18n:translate="">Another way to control the visibility of an item is with
+ its <b>effective date</b>. An item is not publicly available before its
+ effective date, <em>even if its status is <b>published</b></em>.</p>
+
+<form action="." method="post" tal:attributes="action request/ACTUAL_URL">
+
+ <fieldset tal:repeat="widget view/widgets">
+ <label tal:attributes="for widget/name" tal:content="widget/label"></label>
+ <tal:block replace="structure widget" />
+ <legend tal:content="widget/hint"></legend>
+ <tal:block condition="widget/error"
+ replace="structure widget/error" />
+ </fieldset>
+
+ <div class="buttons">
+ <tal:loop tal:repeat="action view/actions"
+ tal:replace="structure action/render" />
+ </div>
+
+</form>
+
+</metal:slot>
+
+</body>
+</html>
\ No newline at end of file
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/reject.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/reject.pt (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/reject.pt 2010-10-12 13:29:26 UTC (rev 117473)
@@ -0,0 +1,39 @@
+<html metal:use-macro="context/@@standard_macros/page">
+
+<body>
+
+<metal:slot metal:fill-slot="body" i18n:domain="cmf_default">
+
+<ul class="errors" tal:condition="view/errors">
+ <li tal:repeat="error view/error_views"
+ tal:content="structure error">Error Message</li>
+</ul>
+
+<h1 i18n:translate="">Reject <span tal:replace="context/getId"
+ i18n:name="objectid">Item</span></h1>
+
+<p i18n:translate="">Use this form to reject the publication of a content item
+ and set its status to <b>Private</b>, thereby making it unavailable to other
+ portal members and visitors.</p>
+
+<form action="." method="post" tal:attributes="action request/ACTUAL_URL">
+
+ <fieldset tal:repeat="widget view/widgets">
+ <label tal:attributes="for widget/name" tal:content="widget/label"></label>
+ <tal:block replace="structure widget" />
+ <legend tal:content="widget/hint"></legend>
+ <tal:block condition="widget/error"
+ replace="structure widget/error" />
+ </fieldset>
+
+ <div class="buttons">
+ <tal:loop tal:repeat="action view/actions"
+ tal:replace="structure action/render" />
+ </div>
+
+</form>
+
+</metal:slot>
+
+</body>
+</html>
\ No newline at end of file
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/retract.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/retract.pt (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/retract.pt 2010-10-12 13:29:26 UTC (rev 117473)
@@ -0,0 +1,40 @@
+<html metal:use-macro="context/@@standard_macros/page">
+
+<body>
+
+<metal:slot metal:fill-slot="body" i18n:domain="cmf_default">
+
+<ul class="errors" tal:condition="view/errors">
+ <li tal:repeat="error view/error_views"
+ tal:content="structure error">Error Message</li>
+</ul>
+
+<h1 i18n:translate="">Retract <span tal:replace="context/getId"
+ i18n:name="objectid">Item</span></h1>
+
+<p i18n:translate="">Use this form to retract a content item by setting its
+ status to <b>Private</b>, thereby making it unavailable to
+ other portal members and visitors.</p>
+
+<form action="." method="post" tal:attributes="action request/ACTUAL_URL">
+
+
+ <fieldset tal:repeat="widget view/widgets">
+ <label tal:attributes="for widget/name" tal:content="widget/label"></label>
+ <tal:block replace="structure widget" />
+ <legend tal:content="widget/hint"></legend>
+ <tal:block condition="widget/error"
+ replace="structure widget/error" />
+ </fieldset>
+
+ <div class="buttons">
+ <tal:loop tal:repeat="action view/actions"
+ tal:replace="structure action/render" />
+ </div>
+
+</form>
+
+</metal:slot>
+
+</body>
+</html>
\ No newline at end of file
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/show.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/show.pt (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/show.pt 2010-10-12 13:29:26 UTC (rev 117473)
@@ -0,0 +1,43 @@
+<html metal:use-macro="context/@@standard_macros/page">
+
+<body>
+
+<metal:slot metal:fill-slot="body" i18n:domain="cmf_default">
+
+<ul class="errors" tal:condition="view/errors">
+ <li tal:repeat="error view/error_views"
+ tal:content="structure error">Error Message</li>
+</ul>
+
+<h1 i18n:translate="">Make Visible <span tal:replace="context/getId"
+ i18n:name="objectid">Item</span></h1>
+
+<p i18n:translate="">A <b>Visible</b> item is available other portal members
+ and visitors, however it won't show up in the list of published items.</p>
+
+<p i18n:translate="">Another way to control the visibility of an item is with
+ its <b>effective date</b>. An item is not publicly available before its
+ effective date, <em>even if its status is <b>published</b></em>.</p>
+
+<form action="." method="post" tal:attributes="action request/ACTUAL_URL">
+
+
+ <fieldset tal:repeat="widget view/widgets">
+ <label tal:attributes="for widget/name" tal:content="widget/label"></label>
+ <tal:block replace="structure widget" />
+ <legend tal:content="widget/hint"></legend>
+ <tal:block condition="widget/error"
+ replace="structure widget/error" />
+ </fieldset>
+
+ <div class="buttons">
+ <tal:loop tal:repeat="action view/actions"
+ tal:replace="structure action/render" />
+ </div>
+
+</form>
+
+</metal:slot>
+
+</body>
+</html>
\ No newline at end of file
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/submit.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/submit.pt (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/submit.pt 2010-10-12 13:29:26 UTC (rev 117473)
@@ -0,0 +1,44 @@
+<html metal:use-macro="context/@@standard_macros/page">
+
+<body>
+
+<metal:slot metal:fill-slot="body" i18n:domain="cmf_default">
+
+<ul class="errors" tal:condition="view/errors">
+ <li tal:repeat="error view/error_views"
+ tal:content="structure error">Error Message</li>
+</ul>
+
+<h1 i18n:translate="">Submit <span tal:replace="context/getId"
+ i18n:name="objectid">Item</span> for Review.</h1>
+
+<p i18n:translate="">To make an item published, it
+ has to be reviewed by one of the site's reviewers.
+ A <b>published</b> item is available to the general
+ member base and anonymous visitors.</p>
+
+<p i18n:translate="">Another way to control the visibility of an item is with
+ its <b>effective date</b>. An item is not publicly available before its
+ effective date, <em>even if its status is <b>published</b></em>.</p>
+
+<form action="." method="post" tal:attributes="action request/ACTUAL_URL">
+
+ <fieldset tal:repeat="widget view/widgets">
+ <label tal:attributes="for widget/name" tal:content="widget/label"></label>
+ <tal:block replace="structure widget" />
+ <legend tal:content="widget/hint"></legend>
+ <tal:block condition="widget/error"
+ replace="structure widget/error" />
+ </fieldset>
+
+ <div class="buttons">
+ <tal:loop tal:repeat="action view/actions"
+ tal:replace="structure action/render" />
+ </div>
+
+</form>
+
+</metal:slot>
+
+</body>
+</html>
\ No newline at end of file
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/workflow.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/workflow.py (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/workflow.py 2010-10-12 13:29:26 UTC (rev 117473)
@@ -0,0 +1,143 @@
+##############################################################################
+#
+# Copyright (c) 2010 Zope Foundation and Contributors.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Workflow forms"""
+
+from zope.formlib import form
+from zope.interface import Interface
+from zope.schema import Text
+
+from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
+
+from Products.CMFDefault.exceptions import WorkflowException
+from Products.CMFDefault.formlib.form import EditFormBase
+from Products.CMFDefault.utils import Message as _
+from Products.CMFDefault.browser.utils import memoize
+
+
+STATUS = {'submit': _(u"Item submitted for review"),
+ 'publish': _(u"Item was published"),
+ 'retract': _(u"Item was retracted"),
+ 'reject': _(u"Item was rejected"),
+ 'hide': _("Item was hidden"),
+ 'show': _("Item is now visible")
+ }
+
+class IWorkflowSchema(Interface):
+
+ comment = Text(
+ title=u"comments",
+ required=False
+ )
+
+
+class Submit(EditFormBase):
+ """Submit an item for review"""
+
+ template = ViewPageTemplateFile("submit.pt")
+ form_fields = form.FormFields(IWorkflowSchema)
+ actions = form.Actions(
+ form.Action(
+ name="submit",
+ label=_(u"Submit item"),
+ success='handle_workflow',
+ failure='handle_failure'
+ )
+ )
+
+ @property
+ @memoize
+ def workflow(self):
+ return self._getTool('portal_workflow')
+
+ def handle_workflow(self, action, data):
+ try:
+ self.workflow.doActionFor(self.context, action.name,
+ comment=data['comment'])
+ self.status = STATUS.get(action.name, _(u"Status changed"))
+ self._setRedirect('portal_types', 'object/view')
+ except WorkflowException, errmsg:
+ self.status = errmsg
+ self._setRedirect('portal_actions', 'object/edit')
+
+
+class Publish(Submit):
+ """Publish an item"""
+
+ template = ViewPageTemplateFile("publish.pt")
+ form_fields = form.FormFields(IWorkflowSchema)
+ actions = form.Actions(
+ form.Action(
+ name="publish",
+ label=_(u"Publish this item"),
+ success='handle_workflow',
+ failure='handle_failure'
+ )
+ )
+
+
+class Retract(Submit):
+ """Remove a published object"""
+
+ template = ViewPageTemplateFile("retract.pt")
+ form_fields = form.FormFields(IWorkflowSchema)
+ actions = form.Actions(
+ form.Action(
+ name="retract",
+ label=_(u"Retract this item"),
+ success='handle_workflow',
+ failure='handle_failure'
+ )
+ )
+
+
+class Reject(Submit):
+ """Reject an item submitted for publication"""
+
+ template = ViewPageTemplateFile("reject.pt")
+ form_fields = form.FormFields(IWorkflowSchema)
+ actions = form.Actions(
+ form.Action(
+ name="reject",
+ label=_(u"Reject this item"),
+ success='handle_workflow',
+ failure='handle_failure'
+ )
+ )
+
+class Hide(Submit):
+ """Hide a published item"""
+
+ template = ViewPageTemplateFile("hide.pt")
+ form_fields = form.FormFields(IWorkflowSchema)
+ actions = form.Actions(
+ form.Action(
+ name="hide",
+ label=_(u"Hide this item"),
+ success='handle_workflow',
+ failure='handle_failure'
+ )
+ )
+
+class Show(Submit):
+ """Reveal a hidden item"""
+
+ template = ViewPageTemplateFile("show.pt")
+ form_fields = form.FormFields(IWorkflowSchema)
+ actions = form.Actions(
+ form.Action(
+ name="show",
+ label=_(u"Show this item"),
+ success='handle_workflow',
+ failure='handle_failure'
+ )
+ )
Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/browser/workflow/workflow.py
___________________________________________________________________
Added: svn:eol-style
+ native
More information about the checkins
mailing list