[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