Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
Products.DCWorkflow
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
Products.DCWorkflow
Commits
cd29c843
Commit
cd29c843
authored
Apr 24, 2012
by
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
code cleanup:
- replaced has_key - replaced oldstyle errors - PEP 8
parent
471e6021
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
586 additions
and
672 deletions
+586
-672
Products/DCWorkflow/ContainerTab.py
Products/DCWorkflow/ContainerTab.py
+8
-8
Products/DCWorkflow/DCWorkflow.py
Products/DCWorkflow/DCWorkflow.py
+20
-16
Products/DCWorkflow/Expression.py
Products/DCWorkflow/Expression.py
+8
-8
Products/DCWorkflow/Guard.py
Products/DCWorkflow/Guard.py
+6
-5
Products/DCWorkflow/Scripts.py
Products/DCWorkflow/Scripts.py
+1
-1
Products/DCWorkflow/States.py
Products/DCWorkflow/States.py
+17
-19
Products/DCWorkflow/Transitions.py
Products/DCWorkflow/Transitions.py
+12
-12
Products/DCWorkflow/WorkflowUIMixin.py
Products/DCWorkflow/WorkflowUIMixin.py
+8
-7
Products/DCWorkflow/Worklists.py
Products/DCWorkflow/Worklists.py
+7
-8
Products/DCWorkflow/exportimport.py
Products/DCWorkflow/exportimport.py
+491
-581
Products/DCWorkflow/utils.py
Products/DCWorkflow/utils.py
+8
-7
No files found.
Products/DCWorkflow/ContainerTab.py
View file @
cd29c843
##############################################################################
##############################################################################
#
#
# Copyright (c) 2001 Zope Foundation and Contributors.
# Copyright (c) 2001 Zope Foundation and Contributors.
#
#
# This software is subject to the provisions of the Zope Public License,
# 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.
# 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
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
# FOR A PARTICULAR PURPOSE.
#
#
##############################################################################
##############################################################################
""" A convenient base class for representing a container as a management tab.
""" A convenient base class for representing a container as a management tab.
"""
"""
...
@@ -51,27 +51,27 @@ class ContainerTab(Folder):
...
@@ -51,27 +51,27 @@ class ContainerTab(Folder):
def
_checkId
(
self
,
id
,
allow_dup
=
0
):
def
_checkId
(
self
,
id
,
allow_dup
=
0
):
if
not
allow_dup
:
if
not
allow_dup
:
if
self
.
_mapping
.
has_key
(
id
)
:
if
id
in
self
.
_mapping
:
raise
BadRequest
(
'The id "%s" is already in use.'
%
id
)
raise
BadRequest
(
'The id "%s" is already in use.'
%
id
)
return
Folder
.
_checkId
(
self
,
id
,
allow_dup
)
return
Folder
.
_checkId
(
self
,
id
,
allow_dup
)
def
_getOb
(
self
,
name
,
default
=
_marker
):
def
_getOb
(
self
,
name
,
default
=
_marker
):
mapping
=
self
.
_mapping
mapping
=
self
.
_mapping
if
mapping
.
has_key
(
name
)
:
if
name
in
mapping
:
res
=
mapping
[
name
]
res
=
mapping
[
name
]
if
hasattr
(
res
,
'__of__'
):
if
hasattr
(
res
,
'__of__'
):
res
=
res
.
__of__
(
self
)
res
=
res
.
__of__
(
self
)
return
res
return
res
else
:
else
:
if
default
is
_marker
:
if
default
is
_marker
:
raise
KeyError
,
name
raise
KeyError
(
name
)
return
default
return
default
def
__getattr__
(
self
,
name
):
def
__getattr__
(
self
,
name
):
ob
=
self
.
_mapping
.
get
(
name
,
None
)
ob
=
self
.
_mapping
.
get
(
name
,
None
)
if
ob
is
not
None
:
if
ob
is
not
None
:
return
ob
return
ob
raise
AttributeError
,
name
raise
AttributeError
(
name
)
def
_setOb
(
self
,
name
,
value
):
def
_setOb
(
self
,
name
,
value
):
mapping
=
self
.
_mapping
mapping
=
self
.
_mapping
...
@@ -84,13 +84,13 @@ class ContainerTab(Folder):
...
@@ -84,13 +84,13 @@ class ContainerTab(Folder):
self
.
_mapping
=
mapping
# Trigger persistence.
self
.
_mapping
=
mapping
# Trigger persistence.
def
get
(
self
,
name
,
default
=
None
):
def
get
(
self
,
name
,
default
=
None
):
if
self
.
_mapping
.
has_key
(
name
)
:
if
name
in
self
.
_mapping
:
return
self
[
name
]
return
self
[
name
]
else
:
else
:
return
default
return
default
def
has_key
(
self
,
key
):
def
has_key
(
self
,
key
):
return
self
.
_mapping
.
has_key
(
key
)
return
key
in
self
.
_mapping
def
objectIds
(
self
,
spec
=
None
):
def
objectIds
(
self
,
spec
=
None
):
# spec is not important for now...
# spec is not important for now...
...
...
Products/DCWorkflow/DCWorkflow.py
View file @
cd29c843
...
@@ -45,7 +45,7 @@ from Products.DCWorkflow.WorkflowUIMixin import WorkflowUIMixin
...
@@ -45,7 +45,7 @@ from Products.DCWorkflow.WorkflowUIMixin import WorkflowUIMixin
def
checkId
(
id
):
def
checkId
(
id
):
res
=
bad_id
(
id
)
res
=
bad_id
(
id
)
if
res
!=
-
1
and
res
is
not
None
:
if
res
!=
-
1
and
res
is
not
None
:
raise
ValueError
,
'Illegal ID'
raise
ValueError
(
'Illegal ID'
)
return
1
return
1
...
@@ -88,8 +88,7 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
...
@@ -88,8 +88,7 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
{
'label'
:
'Worklists'
,
'action'
:
'worklists/manage_main'
},
{
'label'
:
'Worklists'
,
'action'
:
'worklists/manage_main'
},
{
'label'
:
'Scripts'
,
'action'
:
'scripts/manage_main'
},
{
'label'
:
'Scripts'
,
'action'
:
'scripts/manage_main'
},
{
'label'
:
'Permissions'
,
'action'
:
'manage_permissions'
},
{
'label'
:
'Permissions'
,
'action'
:
'manage_permissions'
},
{
'label'
:
'Groups'
,
'action'
:
'manage_groups'
},
{
'label'
:
'Groups'
,
'action'
:
'manage_groups'
})
)
security
=
ClassSecurityInfo
()
security
=
ClassSecurityInfo
()
security
.
declareObjectProtected
(
ManagePortal
)
security
.
declareObjectProtected
(
ManagePortal
)
...
@@ -155,7 +154,7 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
...
@@ -155,7 +154,7 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
status
=
self
.
_getStatusOf
(
ob
)
status
=
self
.
_getStatusOf
(
ob
)
for
id
,
vdef
in
self
.
variables
.
items
():
for
id
,
vdef
in
self
.
variables
.
items
():
if
vdef
.
for_catalog
:
if
vdef
.
for_catalog
:
if
status
.
has_key
(
id
)
:
if
id
in
status
:
value
=
status
[
id
]
value
=
status
[
id
]
# Not set yet. Use a default.
# Not set yet. Use a default.
...
@@ -195,7 +194,7 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
...
@@ -195,7 +194,7 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
'name'
:
tdef
.
actbox_name
%
info
,
'name'
:
tdef
.
actbox_name
%
info
,
'url'
:
tdef
.
actbox_url
%
info
,
'url'
:
tdef
.
actbox_url
%
info
,
'icon'
:
tdef
.
actbox_icon
%
info
,
'icon'
:
tdef
.
actbox_icon
%
info
,
'permissions'
:
(),
# Predetermined.
'permissions'
:
(),
# Predetermined.
'category'
:
tdef
.
actbox_category
,
'category'
:
tdef
.
actbox_category
,
'transition'
:
tdef
}))
'transition'
:
tdef
}))
res
.
sort
()
res
.
sort
()
...
@@ -234,7 +233,7 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
...
@@ -234,7 +233,7 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
'name'
:
qdef
.
actbox_name
%
fmt_data
,
'name'
:
qdef
.
actbox_name
%
fmt_data
,
'url'
:
qdef
.
actbox_url
%
fmt_data
,
'url'
:
qdef
.
actbox_url
%
fmt_data
,
'icon'
:
qdef
.
actbox_icon
%
fmt_data
,
'icon'
:
qdef
.
actbox_icon
%
fmt_data
,
'permissions'
:
(),
# Predetermined.
'permissions'
:
(),
# Predetermined.
'category'
:
qdef
.
actbox_category
}))
'category'
:
qdef
.
actbox_category
}))
fmt_data
.
_pop
()
fmt_data
.
_pop
()
res
.
sort
()
res
.
sort
()
...
@@ -303,7 +302,7 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
...
@@ -303,7 +302,7 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
getSecurityManager
(),
self
,
ob
):
getSecurityManager
(),
self
,
ob
):
return
default
return
default
status
=
self
.
_getStatusOf
(
ob
)
status
=
self
.
_getStatusOf
(
ob
)
if
status
is
not
None
and
status
.
has_key
(
name
)
:
if
status
is
not
None
and
name
in
status
:
value
=
status
[
name
]
value
=
status
[
name
]
# Not set yet. Use a default.
# Not set yet. Use a default.
...
@@ -332,7 +331,7 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
...
@@ -332,7 +331,7 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
"""
"""
try
:
try
:
self
.
_changeStateOf
(
ob
,
None
)
self
.
_changeStateOf
(
ob
,
None
)
except
(
ObjectDeleted
,
ObjectMoved
):
except
(
ObjectDeleted
,
ObjectMoved
):
# Swallow.
# Swallow.
pass
pass
...
@@ -459,7 +458,8 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
...
@@ -459,7 +458,8 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
raise
WorkflowException
(
msg
)
raise
WorkflowException
(
msg
)
# Fire "before" event
# Fire "before" event
notify
(
BeforeTransitionEvent
(
ob
,
self
,
old_sdef
,
new_sdef
,
tdef
,
former_status
,
kwargs
))
notify
(
BeforeTransitionEvent
(
ob
,
self
,
old_sdef
,
new_sdef
,
tdef
,
former_status
,
kwargs
))
# Execute the "before" script.
# Execute the "before" script.
if
tdef
is
not
None
and
tdef
.
script_name
:
if
tdef
is
not
None
and
tdef
.
script_name
:
...
@@ -475,20 +475,23 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
...
@@ -475,20 +475,23 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
# Update variables.
# Update variables.
state_values
=
new_sdef
.
var_values
state_values
=
new_sdef
.
var_values
if
state_values
is
None
:
state_values
=
{}
if
state_values
is
None
:
state_values
=
{}
tdef_exprs
=
None
tdef_exprs
=
None
if
tdef
is
not
None
:
tdef_exprs
=
tdef
.
var_exprs
if
tdef
is
not
None
:
if
tdef_exprs
is
None
:
tdef_exprs
=
{}
tdef_exprs
=
tdef
.
var_exprs
if
tdef_exprs
is
None
:
tdef_exprs
=
{}
status
=
{}
status
=
{}
for
id
,
vdef
in
self
.
variables
.
items
():
for
id
,
vdef
in
self
.
variables
.
items
():
if
not
vdef
.
for_status
:
if
not
vdef
.
for_status
:
continue
continue
expr
=
None
expr
=
None
if
state_values
.
has_key
(
id
)
:
if
id
in
state_values
:
value
=
state_values
[
id
]
value
=
state_values
[
id
]
elif
tdef_exprs
.
has_key
(
id
)
:
elif
id
in
tdef_exprs
:
expr
=
tdef_exprs
[
id
]
expr
=
tdef_exprs
[
id
]
elif
not
vdef
.
update_always
and
former_status
.
has_key
(
id
)
:
elif
not
vdef
.
update_always
and
id
in
former_status
:
# Preserve former value
# Preserve former value
value
=
former_status
[
id
]
value
=
former_status
[
id
]
else
:
else
:
...
@@ -525,7 +528,8 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
...
@@ -525,7 +528,8 @@ class DCWorkflowDefinition(WorkflowUIMixin, Folder):
script
(
sci
)
# May throw an exception.
script
(
sci
)
# May throw an exception.
# Fire "after" event
# Fire "after" event
notify
(
AfterTransitionEvent
(
ob
,
self
,
old_sdef
,
new_sdef
,
tdef
,
status
,
kwargs
))
notify
(
AfterTransitionEvent
(
ob
,
self
,
old_sdef
,
new_sdef
,
tdef
,
status
,
kwargs
))
# Return the new state object.
# Return the new state object.
if
moved_exc
is
not
None
:
if
moved_exc
is
not
None
:
...
...
Products/DCWorkflow/Expression.py
View file @
cd29c843
##############################################################################
##############################################################################
#
#
# Copyright (c) 2001 Zope Foundation and Contributors.
# Copyright (c) 2001 Zope Foundation and Contributors.
#
#
# This software is subject to the provisions of the Zope Public License,
# 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.
# 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
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
# FOR A PARTICULAR PURPOSE.
#
#
##############################################################################
##############################################################################
""" Expressions in a web-configurable workflow.
""" Expressions in a web-configurable workflow.
"""
"""
...
@@ -19,6 +19,7 @@ from Acquisition import aq_inner
...
@@ -19,6 +19,7 @@ from Acquisition import aq_inner
from
Acquisition
import
aq_parent
from
Acquisition
import
aq_parent
from
App.class_init
import
InitializeClass
from
App.class_init
import
InitializeClass
from
DateTime.DateTime
import
DateTime
from
DateTime.DateTime
import
DateTime
from
MultiMapping
import
MultiMapping
from
Products.PageTemplates.Expressions
import
getEngine
from
Products.PageTemplates.Expressions
import
getEngine
from
Products.PageTemplates.Expressions
import
SecureModuleImporter
from
Products.PageTemplates.Expressions
import
SecureModuleImporter
...
@@ -28,10 +29,8 @@ from Products.CMFCore.WorkflowCore import ObjectDeleted
...
@@ -28,10 +29,8 @@ from Products.CMFCore.WorkflowCore import ObjectDeleted
from
Products.CMFCore.WorkflowCore
import
ObjectMoved
from
Products.CMFCore.WorkflowCore
import
ObjectMoved
# We don't import SafeMapping from Products.PageTemplates.TALES
# because it's deprecated in Zope 2.10
from
MultiMapping
import
MultiMapping
class
SafeMapping
(
MultiMapping
):
class
SafeMapping
(
MultiMapping
):
"""Mapping with security declarations and limited method exposure.
"""Mapping with security declarations and limited method exposure.
Since it subclasses MultiMapping, this class can be used to wrap
Since it subclasses MultiMapping, this class can be used to wrap
...
@@ -45,7 +44,8 @@ class SafeMapping(MultiMapping):
...
@@ -45,7 +44,8 @@ class SafeMapping(MultiMapping):
_pop
=
MultiMapping
.
pop
_pop
=
MultiMapping
.
pop
class
StateChangeInfo
:
class
StateChangeInfo
(
object
):
'''
'''
Provides information for expressions and scripts.
Provides information for expressions and scripts.
'''
'''
...
@@ -83,7 +83,7 @@ class StateChangeInfo:
...
@@ -83,7 +83,7 @@ class StateChangeInfo:
def
__getitem__
(
self
,
name
):
def
__getitem__
(
self
,
name
):
if
name
[:
1
]
!=
'_'
and
hasattr
(
self
,
name
):
if
name
[:
1
]
!=
'_'
and
hasattr
(
self
,
name
):
return
getattr
(
self
,
name
)
return
getattr
(
self
,
name
)
raise
KeyError
,
name
raise
KeyError
(
name
)
def
getHistory
(
self
):
def
getHistory
(
self
):
wf
=
self
.
workflow
wf
=
self
.
workflow
...
@@ -126,7 +126,7 @@ def createExprContext(sci):
...
@@ -126,7 +126,7 @@ def createExprContext(sci):
'folder'
:
container
,
'folder'
:
container
,
'nothing'
:
None
,
'nothing'
:
None
,
'root'
:
ob
.
getPhysicalRoot
(),
'root'
:
ob
.
getPhysicalRoot
(),
'request'
:
getattr
(
ob
,
'REQUEST'
,
None
),
'request'
:
getattr
(
ob
,
'REQUEST'
,
None
),
'modules'
:
SecureModuleImporter
,
'modules'
:
SecureModuleImporter
,
'user'
:
getSecurityManager
().
getUser
(),
'user'
:
getSecurityManager
().
getUser
(),
'state_change'
:
sci
,
'state_change'
:
sci
,
...
...
Products/DCWorkflow/Guard.py
View file @
cd29c843
...
@@ -30,7 +30,8 @@ from Products.DCWorkflow.permissions import ManagePortal
...
@@ -30,7 +30,8 @@ from Products.DCWorkflow.permissions import ManagePortal
from
Products.DCWorkflow.utils
import
_dtmldir
from
Products.DCWorkflow.utils
import
_dtmldir
class
Guard
(
Persistent
,
Explicit
):
class
Guard
(
Persistent
,
Explicit
):
permissions
=
()
permissions
=
()
roles
=
()
roles
=
()
groups
=
()
groups
=
()
...
@@ -68,10 +69,10 @@ class Guard (Persistent, Explicit):
...
@@ -68,10 +69,10 @@ class Guard (Persistent, Explicit):
if
self
.
groups
:
if
self
.
groups
:
# Require at least one of the specified groups.
# Require at least one of the specified groups.
u
=
sm
.
getUser
()
u
=
sm
.
getUser
()
b
=
aq_base
(
u
)
b
=
aq_base
(
u
)
if
hasattr
(
b
,
'getGroupsInContext'
):
if
hasattr
(
b
,
'getGroupsInContext'
):
u_groups
=
u
.
getGroupsInContext
(
ob
)
u_groups
=
u
.
getGroupsInContext
(
ob
)
elif
hasattr
(
b
,
'getGroups'
):
elif
hasattr
(
b
,
'getGroups'
):
u_groups
=
u
.
getGroups
()
u_groups
=
u
.
getGroups
()
else
:
else
:
u_groups
=
()
u_groups
=
()
...
...
Products/DCWorkflow/Scripts.py
View file @
cd29c843
...
@@ -21,7 +21,7 @@ from Products.DCWorkflow.ContainerTab import ContainerTab
...
@@ -21,7 +21,7 @@ from Products.DCWorkflow.ContainerTab import ContainerTab
from
Products.DCWorkflow.permissions
import
ManagePortal
from
Products.DCWorkflow.permissions
import
ManagePortal
class
Scripts
(
ContainerTab
):
class
Scripts
(
ContainerTab
):
"""A container for workflow scripts"""
"""A container for workflow scripts"""
meta_type
=
'Workflow Scripts'
meta_type
=
'Workflow Scripts'
...
...
Products/DCWorkflow/States.py
View file @
cd29c843
...
@@ -29,6 +29,7 @@ from Products.DCWorkflow.utils import _dtmldir
...
@@ -29,6 +29,7 @@ from Products.DCWorkflow.utils import _dtmldir
class
StateDefinition
(
SimpleItem
):
class
StateDefinition
(
SimpleItem
):
"""State definition"""
"""State definition"""
meta_type
=
'Workflow State'
meta_type
=
'Workflow State'
...
@@ -37,8 +38,7 @@ class StateDefinition(SimpleItem):
...
@@ -37,8 +38,7 @@ class StateDefinition(SimpleItem):
{
'label'
:
'Properties'
,
'action'
:
'manage_properties'
},
{
'label'
:
'Properties'
,
'action'
:
'manage_properties'
},
{
'label'
:
'Permissions'
,
'action'
:
'manage_permissions'
},
{
'label'
:
'Permissions'
,
'action'
:
'manage_permissions'
},
{
'label'
:
'Groups'
,
'action'
:
'manage_groups'
},
{
'label'
:
'Groups'
,
'action'
:
'manage_groups'
},
{
'label'
:
'Variables'
,
'action'
:
'manage_variables'
},
{
'label'
:
'Variables'
,
'action'
:
'manage_variables'
})
)
title
=
''
title
=
''
description
=
''
description
=
''
...
@@ -60,8 +60,8 @@ class StateDefinition(SimpleItem):
...
@@ -60,8 +60,8 @@ class StateDefinition(SimpleItem):
return
aq_parent
(
aq_inner
(
aq_parent
(
aq_inner
(
self
))))
return
aq_parent
(
aq_inner
(
aq_parent
(
aq_inner
(
self
))))
def
getTransitions
(
self
):
def
getTransitions
(
self
):
return
filter
(
self
.
getWorkflow
().
transitions
.
has_key
,
return
[
t
for
t
in
self
.
transitions
self
.
transitions
)
if
t
in
self
.
getWorkflow
().
transitions
]
def
getTransitionTitle
(
self
,
tid
):
def
getTransitionTitle
(
self
,
tid
):
t
=
self
.
getWorkflow
().
transitions
.
get
(
tid
,
None
)
t
=
self
.
getWorkflow
().
transitions
.
get
(
tid
,
None
)
...
@@ -88,13 +88,13 @@ class StateDefinition(SimpleItem):
...
@@ -88,13 +88,13 @@ class StateDefinition(SimpleItem):
if
self
.
permission_roles
:
if
self
.
permission_roles
:
roles
=
self
.
permission_roles
.
get
(
p
,
None
)
roles
=
self
.
permission_roles
.
get
(
p
,
None
)
if
roles
is
None
:
if
roles
is
None
:
return
{
'acquired'
:
1
,
'roles'
:
[]}
return
{
'acquired'
:
1
,
'roles'
:
[]}
else
:
else
:
if
isinstance
(
roles
,
tuple
):
if
isinstance
(
roles
,
tuple
):
acq
=
0
acq
=
0
else
:
else
:
acq
=
1
acq
=
1
return
{
'acquired'
:
acq
,
'roles'
:
list
(
roles
)}
return
{
'acquired'
:
acq
,
'roles'
:
list
(
roles
)}
def
getGroupInfo
(
self
,
group
):
def
getGroupInfo
(
self
,
group
):
"""Returns the list of roles to be assigned to a group.
"""Returns the list of roles to be assigned to a group.
...
@@ -112,7 +112,8 @@ class StateDefinition(SimpleItem):
...
@@ -112,7 +112,8 @@ class StateDefinition(SimpleItem):
manage_tabs_message
=
manage_tabs_message
,
manage_tabs_message
=
manage_tabs_message
,
)
)
def
setProperties
(
self
,
title
=
''
,
transitions
=
(),
REQUEST
=
None
,
description
=
''
):
def
setProperties
(
self
,
title
=
''
,
transitions
=
(),
REQUEST
=
None
,
description
=
''
):
"""Set the properties for this State."""
"""Set the properties for this State."""
self
.
title
=
str
(
title
)
self
.
title
=
str
(
title
)
self
.
description
=
str
(
description
)
self
.
description
=
str
(
description
)
...
@@ -120,7 +121,6 @@ class StateDefinition(SimpleItem):
...
@@ -120,7 +121,6 @@ class StateDefinition(SimpleItem):
if
REQUEST
is
not
None
:
if
REQUEST
is
not
None
:
return
self
.
manage_properties
(
REQUEST
,
'Properties changed.'
)
return
self
.
manage_properties
(
REQUEST
,
'Properties changed.'
)
_variables_form
=
DTMLFile
(
'state_variables'
,
_dtmldir
)
_variables_form
=
DTMLFile
(
'state_variables'
,
_dtmldir
)
def
manage_variables
(
self
,
REQUEST
,
manage_tabs_message
=
None
):
def
manage_variables
(
self
,
REQUEST
,
manage_tabs_message
=
None
):
...
@@ -147,11 +147,11 @@ class StateDefinition(SimpleItem):
...
@@ -147,11 +147,11 @@ class StateDefinition(SimpleItem):
return
wf_vars
return
wf_vars
ret
=
[]
ret
=
[]
for
vid
in
wf_vars
:
for
vid
in
wf_vars
:
if
not
self
.
var_values
.
has_key
(
vid
)
:
if
not
vid
in
self
.
var_values
:
ret
.
append
(
vid
)
ret
.
append
(
vid
)
return
ret
return
ret
def
addVariable
(
self
,
id
,
value
,
REQUEST
=
None
):
def
addVariable
(
self
,
id
,
value
,
REQUEST
=
None
):
"""Add a WorkflowVariable to State."""
"""Add a WorkflowVariable to State."""
if
self
.
var_values
is
None
:
if
self
.
var_values
is
None
:
self
.
var_values
=
PersistentMapping
()
self
.
var_values
=
PersistentMapping
()
...
@@ -161,11 +161,11 @@ class StateDefinition(SimpleItem):
...
@@ -161,11 +161,11 @@ class StateDefinition(SimpleItem):
if
REQUEST
is
not
None
:
if
REQUEST
is
not
None
:
return
self
.
manage_variables
(
REQUEST
,
'Variable added.'
)
return
self
.
manage_variables
(
REQUEST
,
'Variable added.'
)
def
deleteVariables
(
self
,
ids
=
[],
REQUEST
=
None
):
def
deleteVariables
(
self
,
ids
=
[],
REQUEST
=
None
):
"""Delete a WorkflowVariable from State."""
"""Delete a WorkflowVariable from State."""
vv
=
self
.
var_values
vv
=
self
.
var_values
for
id
in
ids
:
for
id
in
ids
:
if
vv
.
has_key
(
id
)
:
if
id
in
vv
:
del
vv
[
id
]
del
vv
[
id
]
if
REQUEST
is
not
None
:
if
REQUEST
is
not
None
:
...
@@ -184,8 +184,6 @@ class StateDefinition(SimpleItem):
...
@@ -184,8 +184,6 @@ class StateDefinition(SimpleItem):
vv
[
id
]
=
str
(
REQUEST
[
fname
])
vv
[
id
]
=
str
(
REQUEST
[
fname
])
return
self
.
manage_variables
(
REQUEST
,
'Variables changed.'
)
return
self
.
manage_variables
(
REQUEST
,
'Variables changed.'
)
_permissions_form
=
DTMLFile
(
'state_permissions'
,
_dtmldir
)
_permissions_form
=
DTMLFile
(
'state_permissions'
,
_dtmldir
)
def
manage_permissions
(
self
,
REQUEST
,
manage_tabs_message
=
None
):
def
manage_permissions
(
self
,
REQUEST
,
manage_tabs_message
=
None
):
...
@@ -254,6 +252,7 @@ InitializeClass(StateDefinition)
...
@@ -254,6 +252,7 @@ InitializeClass(StateDefinition)
class
States
(
ContainerTab
):
class
States
(
ContainerTab
):
"""A container for state definitions"""
"""A container for state definitions"""
meta_type
=
'Workflow States'
meta_type
=
'Workflow States'
...
@@ -261,10 +260,9 @@ class States(ContainerTab):
...
@@ -261,10 +260,9 @@ class States(ContainerTab):
security
=
ClassSecurityInfo
()
security
=
ClassSecurityInfo
()
security
.
declareObjectProtected
(
ManagePortal
)
security
.
declareObjectProtected
(
ManagePortal
)
all_meta_types
=
({
'name'
:
StateDefinition
.
meta_type
,
all_meta_types
=
({
'name'
:
StateDefinition
.
meta_type
,
'action'
:
'addState'
,
'action'
:
'addState'
,
'permission'
:
ManagePortal
,
'permission'
:
ManagePortal
},)
},)
_manage_states
=
DTMLFile
(
'states'
,
_dtmldir
)
_manage_states
=
DTMLFile
(
'states'
,
_dtmldir
)
...
@@ -297,7 +295,7 @@ class States(ContainerTab):
...
@@ -297,7 +295,7 @@ class States(ContainerTab):
'''
'''
if
not
id
:
if
not
id
:
if
len
(
ids
)
!=
1
:
if
len
(
ids
)
!=
1
:
raise
ValueError
,
'One and only one state must be selected'
raise
ValueError
(
'One and only one state must be selected'
)
id
=
ids
[
0
]
id
=
ids
[
0
]
id
=
str
(
id
)
id
=
str
(
id
)
aq_parent
(
aq_inner
(
self
)).
initial_state
=
id
aq_parent
(
aq_inner
(
self
)).
initial_state
=
id
...
...
Products/DCWorkflow/Transitions.py
View file @
cd29c843
...
@@ -31,7 +31,8 @@ TRIGGER_AUTOMATIC = 0
...
@@ -31,7 +31,8 @@ TRIGGER_AUTOMATIC = 0
TRIGGER_USER_ACTION
=
1
TRIGGER_USER_ACTION
=
1
class
TransitionDefinition
(
SimpleItem
):
class
TransitionDefinition
(
SimpleItem
):
"""Transition definition"""
"""Transition definition"""
meta_type
=
'Workflow Transition'
meta_type
=
'Workflow Transition'
...
@@ -54,8 +55,7 @@ class TransitionDefinition (SimpleItem):
...
@@ -54,8 +55,7 @@ class TransitionDefinition (SimpleItem):
manage_options
=
(
manage_options
=
(
{
'label'
:
'Properties'
,
'action'
:
'manage_properties'
},
{
'label'
:
'Properties'
,
'action'
:
'manage_properties'
},
{
'label'
:
'Variables'
,
'action'
:
'manage_variables'
},
{
'label'
:
'Variables'
,
'action'
:
'manage_variables'
})
)
def
__init__
(
self
,
id
):
def
__init__
(
self
,
id
):
self
.
id
=
id
self
.
id
=
id
...
@@ -152,7 +152,7 @@ class TransitionDefinition (SimpleItem):
...
@@ -152,7 +152,7 @@ class TransitionDefinition (SimpleItem):
else
:
else
:
ret
=
[]
ret
=
[]
for
key
in
ve
.
keys
():
for
key
in
ve
.
keys
():
ret
.
append
((
key
,
self
.
getVarExprText
(
key
)))
ret
.
append
((
key
,
self
.
getVarExprText
(
key
)))
return
ret
return
ret
def
getWorkflowVariables
(
self
):
def
getWorkflowVariables
(
self
):
...
@@ -164,7 +164,7 @@ class TransitionDefinition (SimpleItem):
...
@@ -164,7 +164,7 @@ class TransitionDefinition (SimpleItem):
return
wf_vars
return
wf_vars
ret
=
[]
ret
=
[]
for
vid
in
wf_vars
:
for
vid
in
wf_vars
:
if
not
self
.
var_exprs
.
has_key
(
vid
)
:
if
not
vid
in
self
.
var_exprs
:
ret
.
append
(
vid
)
ret
.
append
(
vid
)
return
ret
return
ret
...
@@ -183,12 +183,12 @@ class TransitionDefinition (SimpleItem):
...
@@ -183,12 +183,12 @@ class TransitionDefinition (SimpleItem):
if
REQUEST
is
not
None
:
if
REQUEST
is
not
None
:
return
self
.
manage_variables
(
REQUEST
,
'Variable added.'
)
return
self
.
manage_variables
(
REQUEST
,
'Variable added.'
)
def
deleteVariables
(
self
,
ids
=
[],
REQUEST
=
None
):
def
deleteVariables
(
self
,
ids
=
[],
REQUEST
=
None
):
''' delete a WorkflowVariable from State
''' delete a WorkflowVariable from State
'''
'''
ve
=
self
.
var_exprs
ve
=
self
.
var_exprs
for
id
in
ids
:
for
id
in
ids
:
if
ve
.
has_key
(
id
)
:
if
id
in
ve
:
del
ve
[
id
]
del
ve
[
id
]
if
REQUEST
is
not
None
:
if
REQUEST
is
not
None
:
...
@@ -217,7 +217,8 @@ class TransitionDefinition (SimpleItem):
...
@@ -217,7 +217,8 @@ class TransitionDefinition (SimpleItem):
InitializeClass
(
TransitionDefinition
)
InitializeClass
(
TransitionDefinition
)
class
Transitions
(
ContainerTab
):
class
Transitions
(
ContainerTab
):
"""A container for transition definitions"""
"""A container for transition definitions"""
meta_type
=
'Workflow Transitions'
meta_type
=
'Workflow Transitions'
...
@@ -225,10 +226,9 @@ class Transitions (ContainerTab):
...
@@ -225,10 +226,9 @@ class Transitions (ContainerTab):
security
=
ClassSecurityInfo
()
security
=
ClassSecurityInfo
()
security
.
declareObjectProtected
(
ManagePortal
)
security
.
declareObjectProtected
(
ManagePortal
)
all_meta_types
=
({
'name'
:
TransitionDefinition
.
meta_type
,
all_meta_types
=
({
'name'
:
TransitionDefinition
.
meta_type
,
'action'
:
'addTransition'
,
'action'
:
'addTransition'
,
'permission'
:
ManagePortal
,
'permission'
:
ManagePortal
},)
},)
_manage_transitions
=
DTMLFile
(
'transitions'
,
_dtmldir
)
_manage_transitions
=
DTMLFile
(
'transitions'
,
_dtmldir
)
...
...
Products/DCWorkflow/WorkflowUIMixin.py
View file @
cd29c843
##############################################################################
##############################################################################
#
#
# Copyright (c) 2001 Zope Foundation and Contributors.
# Copyright (c) 2001 Zope Foundation and Contributors.
#
#
# This software is subject to the provisions of the Zope Public License,
# 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.
# 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
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
# FOR A PARTICULAR PURPOSE.
#
#
##############################################################################
##############################################################################
""" Web-configurable workflow UI.
""" Web-configurable workflow UI.
"""
"""
...
@@ -27,7 +27,8 @@ from Products.DCWorkflow.Guard import Guard
...
@@ -27,7 +27,8 @@ from Products.DCWorkflow.Guard import Guard
from
Products.DCWorkflow.utils
import
_dtmldir
from
Products.DCWorkflow.utils
import
_dtmldir
class
WorkflowUIMixin
:
class
WorkflowUIMixin
(
object
):
'''
'''
'''
'''
...
@@ -39,7 +40,7 @@ class WorkflowUIMixin:
...
@@ -39,7 +40,7 @@ class WorkflowUIMixin:
security
.
declareProtected
(
ManagePortal
,
'setProperties'
)
security
.
declareProtected
(
ManagePortal
,
'setProperties'
)
@
postonly
@
postonly
def
setProperties
(
self
,
title
,
manager_bypass
=
0
,
props
=
None
,
def
setProperties
(
self
,
title
,
manager_bypass
=
0
,
props
=
None
,
REQUEST
=
None
,
description
=
''
):
REQUEST
=
None
,
description
=
''
):
"""Sets basic properties.
"""Sets basic properties.
"""
"""
...
@@ -72,9 +73,9 @@ class WorkflowUIMixin:
...
@@ -72,9 +73,9 @@ class WorkflowUIMixin:
"""Adds to the list of permissions to manage.
"""Adds to the list of permissions to manage.
"""
"""
if
p
in
self
.
permissions
:
if
p
in
self
.
permissions
:
raise
ValueError
,
'Already a managed permission: '
+
p
raise
ValueError
(
'Already a managed permission: '
+
p
)
if
REQUEST
is
not
None
and
p
not
in
self
.
getPossiblePermissions
():
if
REQUEST
is
not
None
and
p
not
in
self
.
getPossiblePermissions
():
raise
ValueError
,
'Not a valid permission name:'
+
p
raise
ValueError
(
'Not a valid permission name:'
+
p
)
self
.
permissions
=
self
.
permissions
+
(
p
,)
self
.
permissions
=
self
.
permissions
+
(
p
,)
if
REQUEST
is
not
None
:
if
REQUEST
is
not
None
:
return
self
.
manage_permissions
(
return
self
.
manage_permissions
(
...
@@ -111,7 +112,7 @@ class WorkflowUIMixin:
...
@@ -111,7 +112,7 @@ class WorkflowUIMixin:
def
getAvailableGroups
(
self
):
def
getAvailableGroups
(
self
):
"""Returns a list of available group names.
"""Returns a list of available group names.
"""
"""
gf
=
aq_get
(
self
,
'__allow_groups__'
,
None
,
1
)
gf
=
aq_get
(
self
,
'__allow_groups__'
,
None
,
1
)
if
gf
is
None
:
if
gf
is
None
:
return
()
return
()
try
:
try
:
...
...
Products/DCWorkflow/Worklists.py
View file @
cd29c843
...
@@ -37,6 +37,7 @@ tales_re = re.compile(r'(\w+:)?(.*)')
...
@@ -37,6 +37,7 @@ tales_re = re.compile(r'(\w+:)?(.*)')
class WorklistDefinition(SimpleItem):
class WorklistDefinition(SimpleItem):
"""Worklist definiton"""
"""Worklist definiton"""
meta_type = '
Worklist
'
meta_type = '
Worklist
'
...
@@ -52,9 +53,7 @@ class WorklistDefinition(SimpleItem):
...
@@ -52,9 +53,7 @@ class WorklistDefinition(SimpleItem):
actbox_category = '
global
'
actbox_category = '
global
'
guard = None
guard = None
manage_options = (
manage_options = ({'
label
': '
Properties
', '
action
': '
manage_properties
'},)
{'
label
': '
Properties
', '
action
': '
manage_properties
'},
)
def __init__(self, id):
def __init__(self, id):
self.id = id
self.id = id
...
@@ -141,7 +140,7 @@ class WorklistDefinition(SimpleItem):
...
@@ -141,7 +140,7 @@ class WorklistDefinition(SimpleItem):
self.var_matches[key] = tuple(v)
self.var_matches[key] = tuple(v)
else:
else:
if self.var_matches and
self.var_matches.has_key(key)
:
if self.var_matches and
key in self.var_matches
:
del self.var_matches[key]
del self.var_matches[key]
self.actbox_name = str(actbox_name)
self.actbox_name = str(actbox_name)
self.actbox_url = str(actbox_url)
self.actbox_url = str(actbox_url)
...
@@ -189,6 +188,7 @@ InitializeClass(WorklistDefinition)
...
@@ -189,6 +188,7 @@ InitializeClass(WorklistDefinition)
class Worklists(ContainerTab):
class Worklists(ContainerTab):
"""A container for worklist definitions"""
"""A container for worklist definitions"""
meta_type = '
Worklists
'
meta_type = '
Worklists
'
...
@@ -196,10 +196,9 @@ class Worklists(ContainerTab):
...
@@ -196,10 +196,9 @@ class Worklists(ContainerTab):
security = ClassSecurityInfo()
security = ClassSecurityInfo()
security.declareObjectProtected(ManagePortal)
security.declareObjectProtected(ManagePortal)
all_meta_types = ({'
name
':WorklistDefinition.meta_type,
all_meta_types = ({'
name
': WorklistDefinition.meta_type,
'
action
':'
addWorklist
',
'
action
': '
addWorklist
',
'
permission
': ManagePortal,
'
permission
': ManagePortal},)
},)
_manage_worklists = DTMLFile('
worklists
', _dtmldir)
_manage_worklists = DTMLFile('
worklists
', _dtmldir)
...
...
Products/DCWorkflow/exportimport.py
View file @
cd29c843
This diff is collapsed.
Click to expand it.
Products/DCWorkflow/utils.py
View file @
cd29c843
...
@@ -23,8 +23,8 @@ from zope.i18nmessageid import MessageFactory
...
@@ -23,8 +23,8 @@ from zope.i18nmessageid import MessageFactory
security
=
ModuleSecurityInfo
(
'Products.DCWorkflow.utils'
)
security
=
ModuleSecurityInfo
(
'Products.DCWorkflow.utils'
)
_dtmldir
=
os
.
path
.
join
(
package_home
(
globals
()
),
'dtml'
)
_dtmldir
=
os
.
path
.
join
(
package_home
(
globals
()),
'dtml'
)
_xmldir
=
os
.
path
.
join
(
package_home
(
globals
()
),
'xml'
)
_xmldir
=
os
.
path
.
join
(
package_home
(
globals
()),
'xml'
)
def
ac_inherited_permissions
(
ob
,
all
=
0
):
def
ac_inherited_permissions
(
ob
,
all
=
0
):
...
@@ -33,14 +33,15 @@ def ac_inherited_permissions(ob, all=0):
...
@@ -33,14 +33,15 @@ def ac_inherited_permissions(ob, all=0):
# an empty tuple as the second.
# an empty tuple as the second.
d
=
{}
d
=
{}
perms
=
getattr
(
ob
,
'__ac_permissions__'
,
())
perms
=
getattr
(
ob
,
'__ac_permissions__'
,
())
for
p
in
perms
:
d
[
p
[
0
]]
=
None
for
p
in
perms
:
d
[
p
[
0
]]
=
None
r
=
gather_permissions
(
ob
.
__class__
,
[],
d
)
r
=
gather_permissions
(
ob
.
__class__
,
[],
d
)
if
all
:
if
all
:
if
hasattr
(
ob
,
'_subobject_permissions'
):
if
hasattr
(
ob
,
'_subobject_permissions'
):
for
p
in
ob
.
_subobject_permissions
():
for
p
in
ob
.
_subobject_permissions
():
pname
=
p
[
0
]
pname
=
p
[
0
]
if
not
d
.
has_key
(
pname
)
:
if
not
pname
in
d
:
d
[
pname
]
=
1
d
[
pname
]
=
1
r
.
append
(
p
)
r
.
append
(
p
)
r
=
list
(
perms
)
+
r
r
=
list
(
perms
)
+
r
return
r
return
r
...
@@ -92,7 +93,7 @@ def modifyRolesForGroup(ob, group, grant_roles, managed_roles):
...
@@ -92,7 +93,7 @@ def modifyRolesForGroup(ob, group, grant_roles, managed_roles):
roles
.
remove
(
role
)
roles
.
remove
(
role
)
changed
=
1
changed
=
1
if
changed
:
if
changed
:
if
not
roles
and
local_roles
.
has_key
(
group
)
:
if
not
roles
and
group
in
local_roles
:
del
local_roles
[
group
]
del
local_roles
[
group
]
else
:
else
:
local_roles
[
group
]
=
roles
local_roles
[
group
]
=
roles
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment