[Checkins] SVN: Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/ restore WorkflowMethod into experimental DCWorkflow branch
Leonardo Rochael Almeida
leorochael at gmail.com
Thu Sep 24 12:34:02 EDT 2009
Log message for revision 104493:
restore WorkflowMethod into experimental DCWorkflow branch
Changed:
U Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/DCWorkflow.py
U Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/Transitions.py
U Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/dtml/transition_properties.dtml
U Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/dtml/transitions.dtml
U Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/exportimport.py
-=-
Modified: Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/DCWorkflow.py
===================================================================
--- Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/DCWorkflow.py 2009-09-24 16:30:20 UTC (rev 104492)
+++ Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/DCWorkflow.py 2009-09-24 16:34:02 UTC (rev 104493)
@@ -40,6 +40,7 @@
from Products.DCWorkflow.permissions import ManagePortal
from Products.DCWorkflow.Transitions import TRIGGER_AUTOMATIC
from Products.DCWorkflow.Transitions import TRIGGER_USER_ACTION
+from Products.DCWorkflow.Transitions import TRIGGER_WORKFLOW_METHOD
from Products.DCWorkflow.utils import Message as _
from Products.DCWorkflow.utils import modifyRolesForGroup
from Products.DCWorkflow.utils import modifyRolesForPermission
@@ -281,6 +282,52 @@
raise Unauthorized(action)
self._changeStateOf(ob, tdef, kw)
+ security.declarePrivate('isWorkflowMethodSupported')
+ def isWorkflowMethodSupported(self, ob, method_id):
+ '''
+ Returns a true value if the given workflow method
+ is supported in the current state.
+ '''
+ sdef = self._getWorkflowStateOf(ob)
+ if sdef is None:
+ return 0
+ if method_id in sdef.transitions:
+ tdef = self.transitions.get(method_id, None)
+ if (tdef is not None and
+ tdef.trigger_type == TRIGGER_WORKFLOW_METHOD and
+ self._checkTransitionGuard(tdef, ob)):
+ return 1
+ return 0
+
+ security.declarePrivate('wrapWorkflowMethod')
+ def wrapWorkflowMethod(self, ob, method_id, func, args, kw):
+ '''
+ Allows the user to request a workflow action. This method
+ must perform its own security checks.
+ '''
+ sdef = self._getWorkflowStateOf(ob)
+ if sdef is None:
+ raise WorkflowException, 'Object is in an undefined state'
+ if method_id not in sdef.transitions:
+ raise Unauthorized(method_id)
+ tdef = self.transitions.get(method_id, None)
+ if tdef is None or tdef.trigger_type != TRIGGER_WORKFLOW_METHOD:
+ raise WorkflowException, (
+ 'Transition %s is not triggered by a workflow method'
+ % method_id)
+ if not self._checkTransitionGuard(tdef, ob):
+ raise Unauthorized(method_id)
+ res = func(*args, **kw)
+ try:
+ self._changeStateOf(ob, tdef)
+ except ObjectDeleted:
+ # Re-raise with a different result.
+ raise ObjectDeleted(res)
+ except ObjectMoved, ex:
+ # Re-raise with a different result.
+ raise ObjectMoved(ex.getNewObject(), res)
+ return res
+
security.declarePrivate('isInfoSupported')
def isInfoSupported(self, ob, name):
'''
Modified: Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/Transitions.py
===================================================================
--- Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/Transitions.py 2009-09-24 16:30:20 UTC (rev 104492)
+++ Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/Transitions.py 2009-09-24 16:34:02 UTC (rev 104493)
@@ -31,6 +31,7 @@
TRIGGER_AUTOMATIC = 0
TRIGGER_USER_ACTION = 1
+TRIGGER_WORKFLOW_METHOD = 2
class TransitionDefinition (SimpleItem):
Modified: Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/dtml/transition_properties.dtml
===================================================================
--- Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/dtml/transition_properties.dtml 2009-09-24 16:30:20 UTC (rev 104492)
+++ Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/dtml/transition_properties.dtml 2009-09-24 16:34:02 UTC (rev 104493)
@@ -56,6 +56,16 @@
</tr>
<tr>
+<th></th>
+<td>
+<dtml-let checked="trigger_type==2 and 'checked' or ' '">
+<input type="radio" name="trigger_type" value="2" &dtml-checked; />
+Initiated by WorkflowMethod
+</dtml-let>
+</td>
+</tr>
+
+<tr>
<th align="left">Script (before)</th>
<td>
<select name="script_name">
Modified: Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/dtml/transitions.dtml
===================================================================
--- Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/dtml/transitions.dtml 2009-09-24 16:30:20 UTC (rev 104492)
+++ Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/dtml/transitions.dtml 2009-09-24 16:34:02 UTC (rev 104493)
@@ -17,7 +17,8 @@
<td>
Destination state: <code><dtml-if new_state_id>&dtml-new_state_id;<dtml-else>(Remain in state)</dtml-if></code> <br />
Trigger: <dtml-var expr="(trigger_type == 0 and 'Automatic') or
- (trigger_type == 1 and 'User action')">
+ (trigger_type == 1 and 'User action') or
+ (trigger_type == 2 and 'WorkflowMethod')">
<br />
<dtml-if script_name>
Script (before): &dtml-script_name;
Modified: Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/exportimport.py
===================================================================
--- Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/exportimport.py 2009-09-24 16:30:20 UTC (rev 104492)
+++ Sandbox/lra/branches/restore-WorkflowMethod-Products.DCWorkflow/Products/DCWorkflow/exportimport.py 2009-09-24 16:34:02 UTC (rev 104493)
@@ -34,7 +34,7 @@
from Products.GenericSetup.interfaces import ISetupEnviron
from Products.GenericSetup.utils import BodyAdapterBase
-TRIGGER_TYPES = ( 'AUTOMATIC', 'USER' )
+TRIGGER_TYPES = ( 'AUTOMATIC', 'USER', 'METHOD' )
_FILENAME = 'workflows.xml'
More information about the checkins
mailing list