Author: mac
Date: Tue Jun 28 13:22:18 2005
New Revision: 3111
Modified:
AlphaFlow/trunk/TrustedExpression.py
AlphaFlow/trunk/__init__.py
AlphaFlow/trunk/activities/alarm.py
AlphaFlow/trunk/activities/condition.py
AlphaFlow/trunk/activities/configuration.py
AlphaFlow/trunk/activities/dcworkflow.py
AlphaFlow/trunk/activities/decision.py
AlphaFlow/trunk/activities/expression.py
AlphaFlow/trunk/activities/gates.py
AlphaFlow/trunk/activities/notify.py
AlphaFlow/trunk/activities/ntask.py
AlphaFlow/trunk/activities/permission.py
AlphaFlow/trunk/activities/recursion.py
AlphaFlow/trunk/activities/review.py
AlphaFlow/trunk/activities/routing.py
AlphaFlow/trunk/activities/task.py
AlphaFlow/trunk/activities/version.py
AlphaFlow/trunk/activity.py
AlphaFlow/trunk/importexport.py
AlphaFlow/trunk/instance.py
AlphaFlow/trunk/process.py
AlphaFlow/trunk/processmanager.py
AlphaFlow/trunk/workflowedobject.py
AlphaFlow/trunk/workitem.py
Log:
added security declarations
Modified: AlphaFlow/trunk/TrustedExpression.py
==============================================================================
--- AlphaFlow/trunk/TrustedExpression.py (original)
+++ AlphaFlow/trunk/TrustedExpression.py Tue Jun 28 13:22:18 2005
(at)(at) -1,6 +1,7 (at)(at)
-# Copyright (C) 2004 by Dr. Dieter Maurer, Eichendorffstr. 23, D-66386 St.
Ingbert, Germany
+# Copyright (C) 2004 by Dr. Dieter Maurer, Eichendorffstr. 23,
+# D-66386 St. Ingbert, Germany
# see "LICENSE-DM.txt" for details
-# $Id$
+# $Id$
from sys import modules
from types import FunctionType
Modified: AlphaFlow/trunk/__init__.py
==============================================================================
--- AlphaFlow/trunk/__init__.py (original)
+++ AlphaFlow/trunk/__init__.py Tue Jun 28 13:22:18 2005
(at)(at) -1,6 +1,6 (at)(at)
# Copyright (c) 2004-2005 gocept gmbh & co. kg
# See also LICENSE.txt
-# __init__.py,v 1.31.2.1 2005/04/28 13:31:32 mac Exp
+# $Id$
"""Zope initialization code"""
import os
Modified: AlphaFlow/trunk/activities/alarm.py
==============================================================================
--- AlphaFlow/trunk/activities/alarm.py (original)
+++ AlphaFlow/trunk/activities/alarm.py Tue Jun 28 13:22:18 2005
(at)(at) -4,11 +4,14 (at)(at)
"""Implements alarm activities.
"""
+# Zope imports
+from AccessControl import ClassSecurityInfo
+
# Sibling imports
from Products.AlphaFlow.workitem import registerWorkItem, BaseTalesWorkItem
from Products.AlphaFlow.activity import registerActivity, BaseTalesActivity
from Products.AlphaFlow.interfaces import IAlarmActivity, IAlarmWorkItem
-
+from Products.AlphaFlow import config
class AlarmActivity(BaseTalesActivity):
(at)(at) -22,12 +25,16 (at)(at)
class AlarmWorkItem(BaseTalesWorkItem):
__implements__ = BaseTalesWorkItem.__implements__ + (IAlarmWorkItem, )
+ security = ClassSecurityInfo()
+
activity_type = "alarm"
-
+
+ security.declarePrivate('onStart')
def onStart(self):
"Trigger that gets called after the workitem has been started."
pass # do nothing on start
+ security.declarePrivate('trigger_workitem')
def trigger_workitem(self):
"""triggers a workitem if the deadline is exceeded"""
deadline = self.evaluate()
(at)(at) -36,7 +43,7 (at)(at)
self.createWorkItems(activity.continue_activity)
self.changeState("complete", activity.title_or_id())
-
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getStatusInfo')
def getStatusInfo(self):
""" return current status of workitem as a text """
if self.state == 'active':
Modified: AlphaFlow/trunk/activities/condition.py
==============================================================================
--- AlphaFlow/trunk/activities/condition.py (original)
+++ AlphaFlow/trunk/activities/condition.py Tue Jun 28 13:22:18 2005
(at)(at) -9,7 +9,6 (at)(at)
"""
# Zope imports
-from Products.PageTemplates.Expressions import getEngine
from AccessControl import ClassSecurityInfo
# Sibling imports
(at)(at) -64,6 +63,7 (at)(at)
######################
# ITalesWorkItem
+ security.declarePrivate('onStart')
def onStart(self):
"Trigger that gets called after the workitem has been started."
activities = self.evaluate()
(at)(at) -71,6 +71,7 (at)(at)
self.createWorkItems(activities)
self.changeState("complete", self.getActivity().title_or_id())
+ security.declarePrivate('_verify_activities')
def _verify_activities(self, activities):
"""Verify that all items in activities are allowed
continue_activities.
Modified: AlphaFlow/trunk/activities/configuration.py
==============================================================================
--- AlphaFlow/trunk/activities/configuration.py (original)
+++ AlphaFlow/trunk/activities/configuration.py Tue Jun 28 13:22:18 2005
(at)(at) -1,6 +1,6 (at)(at)
# Copyright (c) 2005 gocept gmbh & co. kg
# See also LICENSE.txt
-# configuration.py,v 1.1.2.6 2005/05/02 10:08:51 zagy Exp
+# $Id$
"""Configuration activity and work item."""
# Zope imports
(at)(at) -23,6 +23,7 (at)(at)
__implements__ = BaseAssignableActivity.__implements__ + \
(IConfigurationActivity, )
+ security = ClassSecurityInfo()
meta_type = "AlphaFlow Configuration Activity"
activity_type = nodeName = "configuration"
(at)(at) -51,6 +52,13 (at)(at)
)
+ security.declareProtected(config.MANAGE_WORKFLOW, "getPossibleChildren")
+ def getPossibleChildren(self):
+ """Return a list of possible following activities. (List of ids)"""
+ return self.continue_activity
+
+ security.declareProtected(config.MANAGE_WORKFLOW,
+ "graphGetPossibleChildren")
def graphGetPossibleChildren(self):
"Return a list of possible following activities. (List of ids)"
acts = []
(at)(at) -58,22 +66,20 (at)(at)
acts.append({'id':act,
'label':'on completion'})
return acts
-
- def getPossibleChildren(self):
- """Return a list of possible following activities. (List of ids)"""
- return self.continue_activity
+
#########
# private
+ security.declarePrivate('_attr_export_configure')
def _attr_export_configure(self, attr, node):
if self.configures is None: # marker for "all"
node.setAttribute('configures_all', convert_to_xml(True))
else:
self._attr_export_simple(attr, node)
-
+ security.declarePrivate('_attr_import_configure')
def _attr_import_configure(self, attr, node):
if node.hasAttribute('configures_all'):
setattr(self, attr.classAttr, None) # None is marker for "all"
(at)(at) -90,12 +96,11 (at)(at)
__implements__ = BaseAssignableWorkItem.__implements__ + \
(IConfigurationWorkItem,)
-
- activity_type = "configuration"
-
security = ClassSecurityInfo()
+ activity_type = "configuration"
+ # XXX security declatration?
def Schema(self):
instance = self.getInstance()
other = instance.Schema()
(at)(at) -134,7 +139,6 (at)(at)
#################
# IWorkItem
-
security.declareProtected(config.WORK_WITH_PROCESS, "getActions")
def getActions(self):
"""Determine all possible actions."""
(at)(at) -143,8 +147,6 (at)(at)
self.absolute_url(inner=True)+"/configure",
self.configure),
]
-
-
########################
# IConfigurationWorkItem
(at)(at) -169,6 +171,7 (at)(at)
#########
# private
+ security.declarePrivate('_group_schema')
def _group_schema(self, schema):
groups = {}
instance = self.getInstance()
Modified: AlphaFlow/trunk/activities/dcworkflow.py
==============================================================================
--- AlphaFlow/trunk/activities/dcworkflow.py (original)
+++ AlphaFlow/trunk/activities/dcworkflow.py Tue Jun 28 13:22:18 2005
(at)(at) -1,14 +1,10 (at)(at)
# Copyright (c) 2004-2005 gocept gmbh & co. kg
# See also LICENSE.txt
# $Id$
-"""Emulate the DCWorkFlow status interface.
-"""
+"""Emulate the DCWorkFlow status interface."""
# Zope imports
-from Products.PageTemplates.Expressions import getEngine
-
-# Plone/AT imports
-from Products.CMFCore.utils import getToolByName
+from AccessControl import ClassSecurityInfo
# Sibling imports
from Products.AlphaFlow.workitem import registerWorkItem,
BaseAutomaticWorkItem
(at)(at) -40,11 +36,15 (at)(at)
class DCWorkFlowWorkItem(BaseAutomaticWorkItem):
+ security = ClassSecurityInfo()
+
activity_type = "dcworkflow"
+
######################
# IAutomaticWorkItem
+ security.declarePrivate("run")
def run(self):
"Runs the expression"
ob = self.getContentObject()
Modified: AlphaFlow/trunk/activities/decision.py
==============================================================================
--- AlphaFlow/trunk/activities/decision.py (original)
+++ AlphaFlow/trunk/activities/decision.py Tue Jun 28 13:22:18 2005
(at)(at) -1,6 +1,6 (at)(at)
# Copyright (c) 2004-2005 gocept gmbh & co. kg
# See also LICENSE.txt
-# decision.py,v 1.7.2.1 2005/05/02 10:08:51 zagy Exp
+# $Id$
"""Decision activity and work item."""
# Zope imports
(at)(at) -27,6 +27,7 (at)(at)
__implements__ = (IDecisionActivity,) + \
BaseAssignableActivity.__implements__
+ security = ClassSecurityInfo()
meta_type = "AlphaFlow Decision Activity"
activity_type = nodeName = "decision"
(at)(at) -64,6 +65,8 (at)(at)
'mode': 'w', 'select_variable': 'known_decision_modi',},
)
+
+ security.declareProtected(config.EDIT_WORKFLOW, '__init__')
def __init__(self, id):
DecisionActivity.inheritedAttribute('__init__')(self, id)
if self.configurationSchema:
(at)(at) -74,11 +77,13 (at)(at)
format='checkbox',
)
+ security.declareProtected(config.MANAGE_WORKFLOW, "getPossibleChildren")
def getPossibleChildren(self):
"""Return a list of possible following activities. (List of ids)"""
return self.reject_activity + self.accept_activity
-
+ security.declareProtected(config.MANAGE_WORKFLOW,
+ "graphGetPossibleChildren")
def graphGetPossibleChildren(self):
"""Return a list of possible following activities. (List of ids)"""
acts = []
(at)(at) -103,15 +108,15 (at)(at)
security = ClassSecurityInfo()
decisions = None
- def __init__(self, *args, **kw):
- DecisionWorkItem.inheritedAttribute('__init__')(self, *args, **kw)
###########
# IWorkItem
+ security.declarePrivate("onStart")
def onStart(self):
self.decisions = {}
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getActions')
def getActions(self):
"""Determine all possible actions."""
actions = [
(at)(at) -156,14 +161,8 (at)(at)
self.notifyAssigneesChange()
self._update_ui_after_action("Review registered.", REQUEST)
- def _register_decision(self, decision):
- "decision must be True or False."
- user = getSecurityManager().getUser().getUserName()
- if user in self.decisions:
- raise ValueError, "Can't decide two times."
- self.decisions[user] = decision
- self._p_changed = 1
-
+
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getShortInfo')
def getShortInfo(self):
"""Returns a short information text."""
content = self.getContentObject()
(at)(at) -172,24 +171,24 (at)(at)
else:
info = content.Title()
-# def getStatusInfo(self):
-# """Returns a short status information text."""
-# if self.state == "complete":
-# # do *not* translate, comment is entered by the user
-# msg = self.getComment()
-# else:
-# assignees = len(self.getActivityConfiguration("assignees"))
-# reviews = len(self._get_reviews())
-# users_left = assignees - reviews
-# alf = getToolByName(self, 'workflow_manager')
-# msg = alf.translateMsg('status_review', left=users_left)
-# return msg
+ #########
+ # private
+ security.declarePrivate('_register_decision')
+ def _register_decision(self, decision):
+ "decision must be True or False."
+ user = getSecurityManager().getUser().getUserName()
+ if user in self.decisions:
+ raise ValueError, "Can't decide two times."
+ self.decisions[user] = decision
+ self._p_changed = 1
+
+ security.declarePrivate('_get_assignees_dict')
def _get_assignees_dict(self):
assignees = dict([ (name, True) for name in self.listRelevantUsers()])
return assignees
-
+ security.declarePrivate('_is_accepted_first_yes')
def _is_accepted_first_yes(self):
# one or more accepted -> accepted
for decision in self.decisions.values():
(at)(at) -197,13 +196,13 (at)(at)
return True
return False
-
+ security.declarePrivate('_is_accepted_all_yes')
def _is_accepted_all_yes(self):
# all accepted --> accepted
assignees = self._get_assignees_dict()
return assignees == self.decisions
-
+ security.declarePrivate('_is_accepted')
def _is_accepted(self):
acc = getattr(self,
'_is_accepted_' + self.getActivity().decision_modus)()
Modified: AlphaFlow/trunk/activities/expression.py
==============================================================================
--- AlphaFlow/trunk/activities/expression.py (original)
+++ AlphaFlow/trunk/activities/expression.py Tue Jun 28 13:22:18 2005
(at)(at) -3,6 +3,9 (at)(at)
# $Id$
"""Execute a TALES expression -- activity and work item."""
+# Zope imports
+from AccessControl import ClassSecurityInfo
+
# Sibling imports
from Products.AlphaFlow.workitem import registerWorkItem, BaseTalesWorkItem
from Products.AlphaFlow.activity import registerActivity, BaseTalesActivity
(at)(at) -22,12 +25,15 (at)(at)
class ExpressionWorkItem(BaseTalesWorkItem):
- activity_type = "expression"
__implements__ = BaseTalesWorkItem.__implements__ + (IExpressionWorkItem,
)
+ security = ClassSecurityInfo()
+
+ activity_type = "expression"
######################
# ITalesWorkItem
+ security.declarePrivate('run')
def run(self):
"""Performs the actual automatic activity"""
self.evaluate()
Modified: AlphaFlow/trunk/activities/gates.py
==============================================================================
--- AlphaFlow/trunk/activities/gates.py (original)
+++ AlphaFlow/trunk/activities/gates.py Tue Jun 28 13:22:18 2005
(at)(at) -4,13 +4,15 (at)(at)
"""Gates to support routing mechanisms
"""
+# Zope imports
+from AccessControl import ClassSecurityInfo
+
# Sibling imports
from Products.AlphaFlow.workitem import registerWorkItem, BaseWorkItem
from Products.AlphaFlow.activity import registerActivity,
BaseAutomaticActivity
-from Products.AlphaFlow.exception import ConfigurationError
from Products.AlphaFlow.interfaces import IDaemonActivity, IGateActivity
from Products.AlphaFlow.workflowattr import WorkflowAttribute
-
+from Products.AlphaFlow import config
class GateActivity(BaseAutomaticActivity):
(at)(at) -44,14 +46,18 (at)(at)
class GateWorkItem(BaseWorkItem):
+ security = ClassSecurityInfo()
+
activity_type = "gate"
####################
# IWorkItem
+ security.declarePrivate('onStart')
def onStart(self):
self.open_routes = self._getAllRoutes()
+ security.declarePrivate("beforeCreationItems")
def beforeCreationItems(self, items, parent):
vote_no = []
my_parent = self.getParent()
(at)(at) -68,6 +74,10 (at)(at)
self._rememberTrigger(parent, route)
return vote_no
+ #########
+ # private
+
+ security.declarePrivate('_findRouteForWI')
def _findRouteForWI(self, workitem):
"""Identifies to which route this workitem belongs that leads to this
gate.
(at)(at) -84,8 +94,8 (at)(at)
if (workitem == candidate) or \
workitem.isChildOf(workitem=candidate):
return candidate.activity_id
-
- # Private methods
+
+ security.declarePrivate('_rememberTrigger')
def _rememberTrigger(self, triggering_workitem, route):
mode = self.getActivity().mode
open_routes = self.open_routes
(at)(at) -113,16 +123,20 (at)(at)
self.changeState("fallout", "Unknown gate mode: '%s'" % mode)
self.open_routes = open_routes
+ security.declarePrivate('_doTrigger')
def _doTrigger(self, triggering_workitem, route):
self.createWorkItems(self.getActivity().continue_activity)
self.recordAction("Gate triggered",
"Route '%s' triggered '%s-gate' by workitem '%s'" %
(route, self.getActivity().mode, triggering_workitem.getId()))
+ security.declarePrivate('_getAllRoutes')
def _getAllRoutes(self):
return list(tuple(self.getParent().getActivity().routes))
+ security.declareProtected(config.WORK_WITH_PROCESS,
'estimateRelevantUsers')
def estimateRelevantUsers(self):
+ "Estimate the relevant users. Not used for checking."
return ""
Modified: AlphaFlow/trunk/activities/notify.py
==============================================================================
--- AlphaFlow/trunk/activities/notify.py (original)
+++ AlphaFlow/trunk/activities/notify.py Tue Jun 28 13:22:18 2005
(at)(at) -10,7 +10,7 (at)(at)
import sys
# Zope imports
-from Products.PageTemplates.Expressions import getEngine
+from AccessControl import ClassSecurityInfo
from Persistence import Persistent
# Plone/AT imports
(at)(at) -56,6 +56,7 (at)(at)
__implements__ = BaseAutomaticActivity.__implements__ + \
(IEMailActivity, )
+ security = ClassSecurityInfo()
meta_type = "AlphaFlow EMail Activity"
activity_type = nodeName = "email"
(at)(at) -86,6 +87,7 (at)(at)
)
+ security.declarePrivate('getRecipientModes')
def getRecipientModes(self):
"Return list of IEMailRecipientMode instances (possible recipents)."
return self.recipientModes
(at)(at) -93,10 +95,12 (at)(at)
#########
# private
+ security.declarePrivate('_attr_export_email')
def _attr_export_email(self, attr, node):
for mode in self.recipientModes:
mode.writeDOM(node)
+ security.declarePrivate('_attr_import_email')
def _attr_import_email(self, attr, node):
global notify_registry
(at)(at) -110,12 +114,14 (at)(at)
class EMailWorkItem(BaseAutomaticWorkItem):
__implements__ = (IEMailWorkItem,)
+ security = ClassSecurityInfo()
activity_type = "email"
######################
# IAutomaticWorkItem
+ security.declarePrivate('onStart')
def onStart(self):
"""Send email."""
portal_properties = getToolByName(self, 'portal_properties')
(at)(at) -179,6 +185,7 (at)(at)
self.changeState("complete", activity.title_or_id())
+ security.declarePrivate('_quoteAddressField')
def _quoteAddressField(self, name, email, encoding):
"""Quote address field according to RFC 2822
Modified: AlphaFlow/trunk/activities/ntask.py
==============================================================================
--- AlphaFlow/trunk/activities/ntask.py (original)
+++ AlphaFlow/trunk/activities/ntask.py Tue Jun 28 13:22:18 2005
(at)(at) -45,6 +45,7 (at)(at)
class NTaskActivity(BaseAssignableActivity):
__implements__ = BaseAssignableActivity.__implements__ + (INTaskActivity,
)
+ security = ClassSecurityInfo()
meta_type = "AlphaFlow NTask Activity"
activity_type = nodeName = "ntask"
(at)(at) -70,6 +71,7 (at)(at)
)) + BaseAssignableActivity.configurationSchema
+ security.declareProtected(config.MANAGE_WORKFLOW, "getPossibleChildren")
def getPossibleChildren(self):
"""Return a list of possible following activities. (List of ids)"""
possible_children = {}
(at)(at) -78,6 +80,8 (at)(at)
possible_children[activity] = 1
return possible_children.keys()
+ security.declareProtected(config.MANAGE_WORKFLOW,
+ "graphGetPossibleChildren")
def graphGetPossibleChildren(self):
"""Return a list of possible following activities. (List of ids)"""
(at)(at) -91,11 +95,13 (at)(at)
#########
# private
+ security.declarePrivate('_attr_export_ntask')
def _attr_export_ntask(self, attr, node):
"Export exits"
for exit in getattr(self, attr.classAttr):
exit.writeDOM(node)
+ security.declarePrivate('_attr_import_ntask')
def _attr_import_ntask(self, attr, node):
"Import exits."
exits = self.createAndConfigureChildNodes(node,
(at)(at) -112,14 +118,14 (at)(at)
class NTaskWorkItem(BaseAssignableWorkItem):
__implements__ = (INTaskWorkItem,) + BaseAssignableWorkItem.__implements__
+ security = ClassSecurityInfo()
activity_type = "ntask"
- security = ClassSecurityInfo()
-
###########
# IWorkItem
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getActions')
def getActions(self):
"""Determine all possible actions."""
actions = []
(at)(at) -127,6 +133,7 (at)(at)
actions.append(self._get_action(exit))
return actions
+ security.declarePrivate('_get_action')
def _get_action(self, exit):
def callback():
self.complete(exit.id)
(at)(at) -160,18 +167,16 (at)(at)
self.notifyAssigneesChange()
self._update_ui_after_action("Activity completed.", REQUEST)
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getShortInfo')
def getShortInfo(self):
"""Returns a short information text."""
return self.getActivityConfiguration("ntask")
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getShortInfo')
def getStatusInfo(self):
"""Returns a short status information text."""
return self.getComment()
- def getDetailStatus(self):
- """Return detailed status information"""
- return self.state
-
# register the stuff
Modified: AlphaFlow/trunk/activities/permission.py
==============================================================================
--- AlphaFlow/trunk/activities/permission.py (original)
+++ AlphaFlow/trunk/activities/permission.py Tue Jun 28 13:22:18 2005
(at)(at) -120,12 +120,14 (at)(at)
__implements__ = ((IPermissionWorkItem, ) +
BaseAutomaticWorkItem.__implements__)
+ security = ClassSecurityInfo()
activity_type = "permission-change"
######################
# IAutomaticWorkItem
+ security.declarePrivate('run')
def run(self):
"Changes the permission configuration"
permissions = self.getActivity().permissions
Modified: AlphaFlow/trunk/activities/recursion.py
==============================================================================
--- AlphaFlow/trunk/activities/recursion.py (original)
+++ AlphaFlow/trunk/activities/recursion.py Tue Jun 28 13:22:18 2005
(at)(at) -26,7 +26,8 (at)(at)
class RecursionActivity(BaseAutomaticActivity):
__implements__ = BaseAutomaticActivity.__implements__ + (IDaemonActivity,)
-
+ security = ClassSecurityInfo()
+
meta_type = "AlphaFlow Recursion Activity"
activity_type = nodeName = "recursion"
icon = "recursion"
(at)(at) -61,10 +62,13 (at)(at)
'mode':'w', 'select_variable':'listActivityIds'}
)
+ security.declareProtected(config.MANAGE_WORKFLOW, "getPossibleChildren")
def getPossibleChildren(self):
"""Return a list of possible following activities. (List of ids)"""
return self.recursion_activity + self.continue_activity
+ security.declareProtected(config.MANAGE_WORKFLOW,
+ "graphGetPossibleChildren")
def graphGetPossibleChildren(self):
"""Return a list of possible following activities. (List of ids)"""
acts = []
(at)(at) -76,6 +80,7 (at)(at)
'label':'after recursion'})
return acts
+ security.declarePrivate("getConfigurationSchema")
def getConfigurationSchema(self, content):
"""Getter method to retrieve the configuration schema. This also
allows for different activities to have programmatic influence
(at)(at) -100,14 +105,15 (at)(at)
class RecursionWorkItem(BaseAutomaticWorkItem):
- activity_type = "recursion"
-
security = ClassSecurityInfo()
+ activity_type = "recursion"
+
####################
# IAutomaticWorkItem
+ security.declarePrivate('beforeCreationItems')
def beforeCreationItems(self, items, parent):
# Stop the creation of work items that shall be suppressed to avoid
# inappropriate recursion. However, we may only block work items that
(at)(at) -122,6 +128,7 (at)(at)
block.append(item)
return block
+ security.declarePrivate("onCreatedItems")
def onCreatedItems(self, items=[]):
"""Trigger that gets called after new work items have been created."""
(at)(at) -167,7 +174,8 (at)(at)
"Activated by recursion for context %s. "
%
uid)
get_transaction().commit(1)
-
+
+ security.declarePrivate('onStart')
def onStart(self):
# If we are started, and not configured to do anything recursive.
# Just let's stop again.
(at)(at) -175,7 +183,9 (at)(at)
not self.getActivityConfiguration('apply')):
self.changeState("complete", "Recursion was disabled by user.")
+ security.declareProtected(config.WORK_WITH_PROCESS,
'estimateRelevantUsers')
def estimateRelevantUsers(self):
+ "Estimate the relevant users. Not used for checking."
return ""
Modified: AlphaFlow/trunk/activities/review.py
==============================================================================
--- AlphaFlow/trunk/activities/review.py (original)
+++ AlphaFlow/trunk/activities/review.py Tue Jun 28 13:22:18 2005
(at)(at) -31,7 +31,8 (at)(at)
"""
__implements__ = (IReviewActivity,) +
BaseAssignableActivity.__implements__
-
+ security = ClassSecurityInfo()
+
meta_type = "AlphaFlow Review Activity"
activity_type = nodeName = "review"
(at)(at) -58,6 +59,7 (at)(at)
'mode': 'w', 'select_variable': 'listActivityIds'},
)
+ security.declareProtected(config.EDIT_WORKFLOW, '__init__')
def __init__(self, id):
warn('Using ReviewActivity is deprecated, use DecisionActivity
instead.',
DeprecationWarning, stacklevel=2)
(at)(at) -70,16 +72,21 (at)(at)
format='checkbox',
)
- def getPossibleChildren(self):
- """Return a list of possible following activities. (List of ids)"""
- return self.reject_activity + self.accept_activity
-
def configureFromDOMNode(self, node):
"""Configures the activity from a given DOM-Node"""
warn('Using ReviewActivity is deprecated, use DecisionActivity
instead.',
DeprecationWarning, stacklevel=2)
ReviewActivity.inheritedAttribute('configureFromDOMNode')(self, node)
+
+ security.declareProtected(config.MANAGE_WORKFLOW, "getPossibleChildren")
+ def getPossibleChildren(self):
+ """Return a list of possible following activities. (List of ids)"""
+ return self.reject_activity + self.accept_activity
+
+
+ security.declareProtected(config.MANAGE_WORKFLOW,
+ "graphGetPossibleChildren")
def graphGetPossibleChildren(self):
"""Return a list of possible following activities. (List of ids)"""
warn('Using ReviewActivity is deprecated, use DecisionActivity
instead.',
(at)(at) -107,16 +114,15 (at)(at)
class ReviewWorkItem(BaseAssignableWorkItem):
__implements__ = (IReviewWorkItem,) +
BaseAssignableWorkItem.__implements__
-
- activity_type = "review"
-
security = ClassSecurityInfo()
+ activity_type = "review"
reviews = None
###########
# IWorkItem
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getActions')
def getActions(self):
"""Determine all possible actions."""
actions = [
(at)(at) -192,7 +198,7 (at)(at)
self.notifyAssigneesChange()
self._update_ui_after_action('Review registered.', REQUEST)
-
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getShortInfo')
def getShortInfo(self):
"""Returns a short information text."""
content = self.getContentObject()
(at)(at) -201,6 +207,7 (at)(at)
else:
return content.Title()
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getStatusInfo')
def getStatusInfo(self):
"""Returns a short status information text."""
if self.state == "complete":
(at)(at) -214,15 +221,21 (at)(at)
msg = alf.translateMsg('status_review', left=users_left)
return msg
+ #########
+ # private
+
+ security.declarePrivate('_get_assignees_dict')
def _get_assignees_dict(self):
assignees = self.getActivityConfiguration("assignees")
assignees = dict([ (name, True) for name in assignees ])
return assignees
+ security.declarePrivate('_is_accepted')
def _is_accepted(self):
assignees = self._get_assignees_dict()
return assignees == self._get_reviews()
+ security.declarePrivate('_get_reviews')
def _get_reviews(self):
reviews = self.reviews
if reviews is None:
(at)(at) -233,9 +246,13 (at)(at)
# deprecated, use DecisionActivity instead
class RolebasedReviewWorkItem(ReviewWorkItem):
+
+ security = ClassSecurityInfo()
activity_type = 'rolebased-review'
+
+ security.declareProtected(config.WORK_WITH_PROCESS, "listRelevantUsers")
def listRelevantUsers(self):
warn('Using RolebasedReviewWorkItem is deprecated, use
DecisionWorkItem instead.',
DeprecationWarning, stacklevel=2)
(at)(at) -251,12 +268,14 (at)(at)
ids = utils.listMembersWithRolesAndLocalRoles(contentObject,
roles)
return ids
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getStatusInfo')
def getStatusInfo(self):
"""Returns a short status information text."""
if not self._is_accepted():
return 'Review pending'
return 'Reviewed'
+ security.declareProtected(config.WORK_WITH_PROCESS,
'estimateRelevantUsers')
def estimateRelevantUsers(self):
"""Estimate the relevant users. Not used for checking."""
warn('Using RolebasedReviewWorkItem is deprecated, use
DecisionWorkItem instead.',
(at)(at) -273,12 +292,14 (at)(at)
msg = alf.translateMsg('review_relevant_roles', roles=roles)
return msg
-
+
+ security.declarePrivate('_get_assignees_dict')
def _get_assignees_dict(self):
assignees = self.getActivityConfiguration("assignees")
assignees = dict([ (name, True) for name in assignees ])
return assignees
-
+
+ security.declarePrivate('_is_accepted')
def _is_accepted(self):
# one or more reviews -> accepted
return bool(self.reviews)
Modified: AlphaFlow/trunk/activities/routing.py
==============================================================================
--- AlphaFlow/trunk/activities/routing.py (original)
+++ AlphaFlow/trunk/activities/routing.py Tue Jun 28 13:22:18 2005
(at)(at) -102,19 +102,22 (at)(at)
class RoutingWorkItem(BaseWorkItem):
- activity_type = "route"
+ __implements__ = BaseWorkItem.__implements__ + (IRoutingWorkItem, )
+ security = ClassSecurityInfo()
- __implements__ = BaseWorkItem.__implements__ + \
- (IRoutingWorkItem, )
+ activity_type = "route"
+
######################
# IWorkItem
+ security.declarePrivate("onStart")
def onStart(self):
"""Start the gate daemons and route work items
"""
self.createWorkItems(self.getActivity().gates)
self.createWorkItems(self.getActivity().routes)
+ security.declarePrivate("notifyWorkItemStateChange")
def notifyWorkItemStateChange(self, workitem):
"""Check if routes have to be closed."""
# check if workitem is one of our gates
(at)(at) -149,10 +152,12 (at)(at)
# complete routing
self.changeState("complete", "Gate %s completed" %
workitem.activity_id)
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getShortInfo')
def getShortInfo(self):
"""Short information""" #XXX
return "Route is open"
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getStatusInfo')
def getStatusInfo(self):
"""Short status information""" # XXX
return "Route is open"
Modified: AlphaFlow/trunk/activities/task.py
==============================================================================
--- AlphaFlow/trunk/activities/task.py (original)
+++ AlphaFlow/trunk/activities/task.py Tue Jun 28 13:22:18 2005
(at)(at) -1,13 +1,12 (at)(at)
# Copyright (c) 2004-2005 gocept gmbh & co. kg
# See also LICENSE.txt
-# task.py,v 1.41.2.1 2005/05/02 10:08:51 zagy Exp
+# $Id$
"""Task activity and work item."""
# Zope imports
from AccessControl import ClassSecurityInfo
# Plone/AT imports
-from Products.CMFCore.utils import getToolByName
from Products.Archetypes import public as atapi
# Sibling imports
(at)(at) -16,13 +15,13 (at)(at)
from Products.AlphaFlow.activity import registerActivity,
BaseAssignableActivity
from Products.AlphaFlow import config, utils
from Products.AlphaFlow.action import Action
-from Products.AlphaFlow.exception import ConfigurationError
from Products.AlphaFlow.workflowattr import WorkflowAttribute
class TaskActivity(BaseAssignableActivity):
__implements__ = BaseAssignableActivity.__implements__ + (ITaskActivity, )
+ security = ClassSecurityInfo()
meta_type = "AlphaFlow Task Activity"
activity_type = nodeName = "task"
(at)(at) -52,10 +51,13 (at)(at)
'select_variable': 'listActivityIds'},
)
+ security.declareProtected(config.MANAGE_WORKFLOW, "getPossibleChildren")
def getPossibleChildren(self):
"""Return a list of possible following activities. (List of ids)"""
return self.completion_activity
+ security.declareProtected(config.MANAGE_WORKFLOW,
+ "graphGetPossibleChildren")
def graphGetPossibleChildren(self):
"""Return a list of possible following activities. (List of ids)"""
acts = []
(at)(at) -69,14 +71,14 (at)(at)
class TaskWorkItem(BaseAssignableWorkItem):
__implements__ = (ITaskWorkItem,) + BaseAssignableWorkItem.__implements__
+ security = ClassSecurityInfo()
activity_type = "task"
- security = ClassSecurityInfo()
-
###########
# IWorkItem
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getActions')
def getActions(self):
"""Determine all possible actions."""
return [Action('complete',
(at)(at) -108,18 +110,16 (at)(at)
self.notifyAssigneesChange()
self._update_ui_after_action('Activity completed.', REQUEST)
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getShortInfo')
def getShortInfo(self):
"""Returns a short information text."""
return self.getActivityConfiguration("task")
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getStatusInfo')
def getStatusInfo(self):
"""Returns a short status information text."""
return self.getComment()
- def getDetailStatus(self):
- """Return detailed status information"""
- return self.state
-
# register the stuff
Modified: AlphaFlow/trunk/activities/version.py
==============================================================================
--- AlphaFlow/trunk/activities/version.py (original)
+++ AlphaFlow/trunk/activities/version.py Tue Jun 28 13:22:18 2005
(at)(at) -7,6 +7,9 (at)(at)
TODO: move this to glome
"""
+# Zope imports
+from AccessControl import ClassSecurityInfo
+
# Plone/AT imports
from Products.CMFCore.utils import getToolByName
(at)(at) -25,11 +28,14 (at)(at)
class VersioningWorkItem(BaseAutomaticWorkItem):
+ security = ClassSecurityInfo()
+
activity_type = "version"
######################
# IAutomaticWorkItem
-
+
+ security.declarePrivate('run')
def run(self):
"Creates a new version"
ob = self.getContentObject()
(at)(at) -42,8 +48,8 (at)(at)
glome_tool = getToolByName(self, 'glome_tool')
wf_tool = getToolByName(self, 'portal_workflow')
review_state = wf_tool.getInfoFor(ob, 'review_state', '')
- glome_tool.unrestrictedStoreVersion(ob,
workflow_status=review_state)
-
+ glome_tool.unrestrictedStoreVersion(ob,
+ workflow_status=review_state)
# register all the stuff
Modified: AlphaFlow/trunk/activity.py
==============================================================================
--- AlphaFlow/trunk/activity.py (original)
+++ AlphaFlow/trunk/activity.py Tue Jun 28 13:22:18 2005
(at)(at) -85,11 +85,14 (at)(at)
schema = schema.copy()
return schema
+ security.declareProtected(config.MANAGE_WORKFLOW, "getPossibleChildren")
def getPossibleChildren(self):
"""Return a list of all ids of activities that can be instantiated as
successors by instances of this activity."""
return [] # to be overwritten by subclasses
+ security.declareProtected(config.MANAGE_WORKFLOW,
+ "graphGetPossibleChildren")
def graphGetPossibleChildren():
"Return a list of possible successor activities as dictionaries."
return [] # to be overwritten by subclasses
Modified: AlphaFlow/trunk/importexport.py
==============================================================================
--- AlphaFlow/trunk/importexport.py (original)
+++ AlphaFlow/trunk/importexport.py Tue Jun 28 13:22:18 2005
(at)(at) -74,6 +74,7 (at)(at)
security = ClassSecurityInfo()
+ security.declareProtected(config.EDIT_WORKFLOW, "__init__")
def __init__(self, id, *args, **kw):
"Constructor"
self.id = id
Modified: AlphaFlow/trunk/instance.py
==============================================================================
--- AlphaFlow/trunk/instance.py (original)
+++ AlphaFlow/trunk/instance.py Tue Jun 28 13:22:18 2005
(at)(at) -1,7 +1,7 (at)(at)
-# Copyright (c) 2004-2005 gocept gmbh & co. kg
# -*- coding: iso-8859-1 -*-
+# Copyright (c) 2004-2005 gocept gmbh & co. kg
# See also LICENSE.txt
-# instance.py,v 1.52.2.2 2005/04/29 08:08:32 zagy Exp
+# $Id$
"""Process instances"""
# Python imports
(at)(at) -11,6 +11,7 (at)(at)
# Zope imports
import zExceptions
import zLOG
+from Globals import InitializeClass
from AccessControl import getSecurityManager, ClassSecurityInfo
from DateTime import DateTime
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
(at)(at) -80,15 +81,18 (at)(at)
local_role_fake_class = InstanceLocalRoleFake
+ security.declareProtected(config.INIT_PROCESS, '__init__')
def __init__(self, id, object, process_id):
"""Initialize a new process instance."""
BaseFolder.__init__(self, id)
self.object = object.UID()
self.process_id = process_id
+ security.declarePrivate('__repr__')
def __repr__(self):
return '<Instance (%s) on %s>' % (self.state, self.object)
+ security.declarePrivate('manage_afterAdd')
def manage_afterAdd(self, item, container):
Instance.inheritedAttribute('manage_afterAdd')(self, item, container)
deleted = getattr(self, '_v_getting_deleted', False)
(at)(at) -97,16 +101,20 (at)(at)
self.recordAction("created",
"(automatic) process instance was created")
+ security.declarePrivate('manage_beforeDelete')
def manage_beforeDelete(self, item, container):
Instance.inheritedAttribute('manage_beforeDelete')(self, item,
container)
self._v_getting_deleted = True
+
+ security.declarePublic('getCharset')
def getCharset(self):
"""this is a skin method of archetypes returning the site encoding
"""
return config.SITE_ENCODING
+ # XXX security declaration?
def absolute_url(self, inner=False):
"""A hackish way to use content objects as views.
(at)(at) -340,7 +348,7 (at)(at)
contenttype='image/gif',
request=REQUEST)
- security.declareProtected(config.EDIT_WORKFLOW, "getGraph")
+ security.declareProtected(config.EDIT_WORKFLOW, "renderGraph")
def renderGraph(self, **kwargs):
"""returns the rendered Graph
pass additional keyword arguments for
(at)(at) -355,14 +363,17 (at)(at)
##############################
# XXX AT configuration support
+ # XXX security declaration?
def getObjSize(self):
"""This is a replacement to make AT not barf."""
return 0
+ # XXX security declaration?
def get_size(self):
"""This is a replacement to make AT not barf."""
return 0
+ # XXX security declaration?
def Schema(self):
"""Generate a schema to configure this instance."""
# Get Schemas from all the activities
(at)(at) -381,7 +392,7 (at)(at)
tool = getToolByName(self, 'workflow_manager')
return tool.getProcess(self.process_id)
- security.declareProtected(config.WORK_WITH_PROCESS, 'getProcess')
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getInstance')
def getInstance(self):
"IInstance"
return self.aq_inner
(at)(at) -416,7 +427,8 (at)(at)
###################
# private methods
-
+
+ security.declarePrivate('_get_schema')
def _get_schema(self, full=False):
try:
process = self.getProcess()
(at)(at) -452,9 +464,11 (at)(at)
config_schema.addField(wfield)
return config_schema
+ security.declarePrivate('_wrap_schema')
def _wrap_schema(self, schema):
return ImplicitAcquisitionWrapper(schema, self)
+ security.declarePrivate('_update_cache')
def _update_cache(self, workitem):
"""update internal state/workitem cache"""
state_to_id = getattr(aq_base(self), '_cache_state_to_id', None)
(at)(at) -487,6 +501,7 (at)(at)
self._p_changed = 1
+ security.declarePrivate('_index_workitems')
def _index_workitems(self):
"""reindex the remembered workitems"""
to_index = getattr(aq_base(self),
(at)(at) -504,18 +519,21 (at)(at)
content = rc.lookupObject(content_uid)
if content is not None:
content.reindexObject(idxs=['alphaflow_cache_trigger'])
-
+
+ security.declarePrivate('_rebuild_cache')
def _rebuild_cache(self):
for wi in self.objectValues():
self._update_cache(wi)
self._v_workitems_to_index = {}
+ security.declarePrivate('_terminate')
def _terminate(self):
for x in self.getWorkItems(state=None):
if x.state in ["inactive", "active", "fallout"]:
x.changeState("terminated",
"(automatic) terminated by request through instance")
+ security.declarePrivate('_check_fallout')
def _check_fallout(self):
# Check for items that are in fallout state
items_fallen_out = len(self.getWorkItemIds(state="fallout"))
(at)(at) -527,6 +545,7 (at)(at)
else:
fell_out = False
+ security.declarePrivate('_check_complete')
def _check_complete(self, workitems):
"""Stop instance if only daemons are left now
(at)(at) -594,11 +613,13 (at)(at)
return new_ids, new
+ security.declarePrivate('_start_workitems')
def _start_workitems(self, workitems):
for wi in workitems:
wi.changeState("active", "WorkItem was created and "
"automatically started.")
-
+
+ security.declarePrivate('_notify_workitem_creation')
def _notify_workitem_creation(self, new_workitems):
for wi in self.getWorkItems():
# Don't notify items about their own creation.
(at)(at) -611,6 +632,7 (at)(at)
self.error_log.raising(sys.exc_info())
wi.changeState("fallout", str(m))
+InitializeClass(Instance)
registerType(Instance, config.PROJECTNAME)
Modified: AlphaFlow/trunk/process.py
==============================================================================
--- AlphaFlow/trunk/process.py (original)
+++ AlphaFlow/trunk/process.py Tue Jun 28 13:22:18 2005
(at)(at) -77,6 +77,7 (at)(at)
#########################
# ZMI convenience methods
+ security.declareProtected(config.MANAGE_WORKFLOW, 'manage_addActivity')
def manage_addActivity(self, activity, REQUEST):
"""Add a new activity"""
uid = utils.generateUniqueID(activity)
Modified: AlphaFlow/trunk/processmanager.py
==============================================================================
--- AlphaFlow/trunk/processmanager.py (original)
+++ AlphaFlow/trunk/processmanager.py Tue Jun 28 13:22:18 2005
(at)(at) -125,7 +125,7 (at)(at)
security.declareProtected(config.MANAGE_WORKFLOW, 'manage_cleanup')
def manage_cleanup(self, REQUEST):
- """Clean up all terminated instances and everything with a missing
object"""
+ "Clean up all terminated instances and everything with a missing
object"
clean = []
for instance in self.instances.objectValues():
if instance.state == "terminated":
(at)(at) -219,9 +219,8 (at)(at)
content_cache = cache.get(content.UID(), {})
return content_cache.keys()
-
-
-
+ #########
+ # private
security.declarePrivate('_get_role_cache')
def _get_role_cache(self, attr_name):
Modified: AlphaFlow/trunk/workflowedobject.py
==============================================================================
--- AlphaFlow/trunk/workflowedobject.py (original)
+++ AlphaFlow/trunk/workflowedobject.py Tue Jun 28 13:22:18 2005
(at)(at) -57,6 +57,7 (at)(at)
#########################
# ZMI convenience methods
+ security.declarePublic('isAlphaFlowable')
def isAlphaFlowable(self):
"""Is this a AlphaFlow-Object?"""
return True
(at)(at) -64,6 +65,7 (at)(at)
############
# Zope hooks
+ security.declareProtected(config.MANAGE_WORKFLOW, 'manage_afterClone')
def manage_afterClone(self, item):
# we are copied, drop instance (but do not terminate)
self.alf_clearInstances()
Modified: AlphaFlow/trunk/workitem.py
==============================================================================
--- AlphaFlow/trunk/workitem.py (original)
+++ AlphaFlow/trunk/workitem.py Tue Jun 28 13:22:18 2005
(at)(at) -99,11 +99,13 (at)(at)
local_role_fake_class = WorkItemLocalRoleFake
_af_notified = True
+ security.declareProtected(config.WORK_WITH_PROCESS, '__init__')
def __init__(self, id, activity_id, content_object=None):
BaseWorkItem.inheritedAttribute('__init__')(self, id)
self.activity_id = activity_id
self.content_object = content_object
+ security.declarePrivate('manage_afterAdd')
def manage_afterAdd(self, item, container):
BaseWorkItem.inheritedAttribute('manage_afterAdd')(self, item,
container)
(at)(at) -112,21 +114,25 (at)(at)
['Assignee', 'Manager'],
acquire=True)
self.setTitle('Workitem')
-
+
+ security.declarePrivate('manage_beforeDelete')
def manage_beforeDelete(self, item, container):
BaseWorkItem.inheritedAttribute('manage_beforeDelete')(self, item,
container)
self._v_getting_deleted = True
-
+
+ security.declarePublic('getCharset')
def getCharset(self):
"""this is a skin method of archetypes returning the site encoding
"""
return config.SITE_ENCODING
+ security.declarePublic('reindexObject')
def reindexObject(self, idxs=[]):
"""workitems are very explicitly indexed"""
pass
-
+
+ # XXX security declaration?
def reindexWorkitem(self):
BaseWorkItem.inheritedAttribute('reindexObject')(self)
(at)(at) -287,6 +293,7 (at)(at)
actions.append(("", "No action"))
return actions
+ # XXX security declaration?
def absolute_url(self, inner=False):
"""A hackish way to use content objects as views.
(at)(at) -307,7 +314,8 (at)(at)
return absurl(self)
- security.declareProtected(config.WORK_WITH_PROCESS,
"getActivityConfiguration")
+ security.declareProtected(config.WORK_WITH_PROCESS,
+ "getActivityConfiguration")
def getActivityConfiguration(self, field, default=None):
"""Retrieves the configuration for this activity in the context of
this instance.
(at)(at) -508,11 +516,13 (at)(at)
else:
self.createWorkItems(self.getActivity().continue_activity)
self.changeState("complete", self.getActivity().title_or_id())
-
+
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getShortInfo')
def getShortInfo(self):
"""Short information"""
return "automatic activity"
+ security.declareProtected(config.WORK_WITH_PROCESS, 'getStatusInfo')
def getStatusInfo(self):
"""Short status information"""
return "Success"
(at)(at) -529,7 +539,9 (at)(at)
__implements__ = BaseAutomaticWorkItem.__implements__ + \
(ITalesWorkItem, )
-
+ security = ClassSecurityInfo()
+
+ security.declarePrivate('evaluate')
def evaluate(self):
"Evaluate the TALES-Expression."
activity = self.getActivity()
(at)(at) -570,6 +582,7 (at)(at)
def getSortPriority(self):
return self.getActivity().sortPriority
+
class WorkItemRegistry(Registry):
"""Registry for workitems."""
|