appy.gen: bugfixes in the new workflow engine and in macro 'history'.

This commit is contained in:
Gaetan Delannay 2011-09-09 17:39:58 +02:00
parent 1cd9aaaf69
commit 5be03c2ed4
4 changed files with 16 additions and 6 deletions

View file

@ -2384,6 +2384,7 @@ class Transition:
def isTriggerable(self, obj, wf):
'''Can this transition be triggered on p_obj?'''
wf = wf.__instance__ # We need the prototypical instance here.
# Checks that the current state of the object is a start state for this
# transition.
objState = obj.getState(name=False)
@ -2424,13 +2425,15 @@ class Transition:
def executeAction(self, obj, wf):
'''Executes the action related to this transition.'''
msg = ''
obj = obj.appy()
wf = wf.__instance__ # We need the prototypical instance here.
if type(self.action) in (tuple, list):
# We need to execute a list of actions
for act in self.action:
msgPart = act(wf, obj.appy())
msgPart = act(wf, obj)
if msgPart: msg += msgPart
else: # We execute a single action only.
msgPart = self.action(wf, obj.appy())
msgPart = self.action(wf, obj)
if msgPart: msg += msgPart
return msg
@ -2555,12 +2558,14 @@ class WorkflowAnonymous:
'''One-state workflow allowing anyone to consult and Manager to edit.'''
mgr = 'Manager'
active = State({r:(mgr, 'Anonymous'), w:mgr, d:mgr}, initial=True)
WorkflowAnonymous.__instance__ = WorkflowAnonymous()
class WorkflowAuthenticated:
'''One-state workflow allowing authenticated users to consult and Manager
to edit.'''
mgr = 'Manager'
active = State({r:(mgr, 'Authenticated'), w:mgr, d:mgr}, initial=True)
WorkflowAuthenticated.__instance__ = WorkflowAuthenticated()
# ------------------------------------------------------------------------------
class Selection:

View file

@ -588,7 +588,6 @@ class ZopeInstaller:
permission = self.defaultAddContentPermission,
extra_constructors = constructors, fti = ftis).initialize(
self.zopeContext)
# Define content-specific "add" permissions
for i in range(0, len(contentTypes)):
className = contentTypes[i].__name__
@ -596,6 +595,11 @@ class ZopeInstaller:
self.zopeContext.registerClass(meta_type = ftis[i]['meta_type'],
constructors = (constructors[i],),
permission = self.addContentPermissions[className])
# Create workflow prototypical instances in __instance__ attributes
for contentType in contentTypes:
wf = getattr(contentType.wrapperClass, 'workflow', None)
if wf and not hasattr(wf, '__instance__'):
wf.__instance__ = wf()
def enableUserTracking(self):
'''Enables the machinery allowing to know who is currently logged in.

View file

@ -951,7 +951,7 @@ class BaseMixin:
# Is this transition triggerable?
transition = getattr(wf, transitionName)
if not transition.isTriggerable(self, wf):
raise 'Transition "%s" can\'t be triggered' % transitionName
raise 'Transition "%s" can\'t be triggered.' % transitionName
# Trigger the transition
transition.trigger(transitionName, self, wf, comment, doAction=doAction,
doNotify=doNotify, doHistory=doHistory, doSay=doSay)

View file

@ -468,15 +468,16 @@
<th align="left" width="70%" tal:content="python: tool.translate('previous_value')"></th>
</tr>
<tr tal:repeat="change event/changes/items" valign="top">
<td tal:content="structure python: tool.translate(change[1][1])"></td>
<tal:change define="appyType python:contextObj.getAppyType(change[0], asDict=True);">
<td tal:content="structure python: tool.translate(appyType['labelId'])"></td>
<td tal:define="appyValue python: contextObj.getFormattedFieldValue(change[0], change[1][0]);
appyType python:contextObj.getAppyType(change[0], asDict=True);
severalValues python: (appyType['multiplicity'][1] &gt; 1) or (appyType['multiplicity'][1] == None)">
<span tal:condition="not: severalValues" tal:replace="appyValue"></span>
<ul tal:condition="python: severalValues">
<li tal:repeat="av appyValue" tal:content="av"></li>
</ul>
</td>
</tal:change>
</tr>
</table>
</td>