Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
amrani
erp5
Commits
b20b5650
Commit
b20b5650
authored
9 years ago
by
wenjie.zheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add file InteractionWorkflow.py and Interaction.py in ERP5WOrkflow.
parent
d635f503
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
257 additions
and
0 deletions
+257
-0
product/ERP5Workflow/Document/Interaction.py
product/ERP5Workflow/Document/Interaction.py
+68
-0
product/ERP5Workflow/Document/InteractionWorkflow.py
product/ERP5Workflow/Document/InteractionWorkflow.py
+189
-0
No files found.
product/ERP5Workflow/Document/Interaction.py
0 → 100644
View file @
b20b5650
##############################################################################
#
# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.
# 2015 Wenjie Zheng <wenjie.zheng@tiolive.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from
AccessControl
import
ClassSecurityInfo
from
Products.ERP5Type
import
Permissions
,
PropertySheet
from
Products.ERP5Type.XMLObject
import
XMLObject
from
Products.ERP5Type.Globals
import
PersistentMapping
from
Acquisition
import
aq_inner
,
aq_parent
from
Products.ERP5Type
import
Globals
from
Products.ERP5Type.Permissions
import
ManagePortal
from
Products.DCWorkflow.Guard
import
Guard
from
Products.DCWorkflow.Expression
import
Expression
from
Products.ERP5Workflow.Document.Transition
import
TRIGGER_WORKFLOW_METHOD
class
Interaction
(
XMLObject
):
"""
An ERP5 Interaction.
"""
meta_type
=
'ERP5 Interaction'
portal_type
=
'Interaction'
add_permission
=
Permissions
.
AddPortalContent
isPortalContent
=
1
isRADContent
=
1
### zwj: for security issue
managed_permission_list
=
()
managed_role
=
()
erp5_permission_roles
=
{}
# { permission: [role] or (role,) }
manager_bypass
=
0
# Declarative security
security
=
ClassSecurityInfo
()
security
.
declareObjectProtected
(
Permissions
.
AccessContentsInformation
)
# Declarative properties
property_sheets
=
(
PropertySheet
.
Base
,
PropertySheet
.
XMLObject
,
PropertySheet
.
CategoryCore
,
PropertySheet
.
DublinCore
,
PropertySheet
.
Interaction
,
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
product/ERP5Workflow/Document/InteractionWorkflow.py
0 → 100644
View file @
b20b5650
##############################################################################
#
# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.
# 2015 Wenjie Zheng <wenjie.zheng@tiolive.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from
Products.ERP5Type
import
Permissions
,
PropertySheet
from
Products.ERP5Type.XMLObject
import
XMLObject
from
Products.ERP5Workflow.Document.Workflow
import
Workflow
import
transaction
from
Products.ERP5Type
import
Globals
import
App
from
types
import
StringTypes
from
AccessControl
import
getSecurityManager
,
ClassSecurityInfo
from
AccessControl.SecurityManagement
import
setSecurityManager
from
Acquisition
import
aq_base
from
Products.CMFCore.utils
import
getToolByName
from
Products.DCWorkflow.DCWorkflow
import
DCWorkflowDefinition
from
Products.ERP5Workflow.Document.Transition
import
TRIGGER_WORKFLOW_METHOD
from
Products.DCWorkflow.Expression
import
StateChangeInfo
from
Products.ERP5Type.Workflow
import
addWorkflowFactory
from
Products.CMFActivity.ActiveObject
import
ActiveObject
from
Products.ERP5Type.patches.Expression
import
Expression_createExprContext
_MARKER
=
[]
class
InteractionWorkflow
(
Workflow
,
XMLObject
):
"""
An ERP5 Interaction Workflow.
"""
meta_type
=
'ERP5 Workflow'
portal_type
=
'Interaction Workflow'
add_permission
=
Permissions
.
AddPortalContent
isPortalContent
=
1
isRADContent
=
1
### zwj: for security issue
managed_permission_list
=
()
managed_role
=
()
intaractions
=
None
manager_bypass
=
0
# Declarative security
security
=
ClassSecurityInfo
()
security
.
declareObjectProtected
(
Permissions
.
AccessContentsInformation
)
# Declarative properties
property_sheets
=
(
PropertySheet
.
Base
,
PropertySheet
.
XMLObject
,
PropertySheet
.
CategoryCore
,
PropertySheet
.
DublinCore
,
PropertySheet
.
InteractionWorkflow
,
)
security
.
declareProtected
(
Permissions
.
View
,
'getChainedPortalTypeList'
)
def
getChainedPortalTypeList
(
self
):
"""Returns the list of portal types that are chained to this
interaction workflow."""
chained_ptype_list
=
[]
wf_tool
=
getToolByName
(
self
,
'portal_workflow'
)
types_tool
=
getToolByName
(
self
,
'portal_types'
)
for
ptype
in
types_tool
.
objectValues
():
if
self
.
getId
()
in
ptype
.
getTypeERP5WorkflowList
():
chained_ptype_list
.
append
(
ptype
.
getId
())
return
chained_ptype_list
security
.
declarePrivate
(
'listObjectActions'
)
def
listObjectActions
(
self
,
info
):
return
[]
security
.
declarePrivate
(
'_changeStateOf'
)
def
_changeStateOf
(
self
,
ob
,
tdef
=
None
,
kwargs
=
None
)
:
"""
InteractionWorkflow is stateless. Thus, this function should do nothing.
"""
return
security
.
declarePrivate
(
'isInfoSupported'
)
def
isInfoSupported
(
self
,
ob
,
name
):
'''
Returns a true value if the given info name is supported.
'''
vdef
=
self
.
_getOb
(
name
,
None
)
if
vdef
is
not
None
:
if
vdef
.
getTypeInfo
().
getId
()
==
'Variable'
:
return
1
return
0
return
0
security
.
declarePrivate
(
'getInfoFor'
)
def
getInfoFor
(
self
,
ob
,
name
,
default
):
'''
Allows the user to request information provided by the
workflow. This method must perform its own security checks.
'''
vdef
=
self
.
_getOb
(
name
,
_MARKER
)
if
vdef
is
_MARKER
:
return
default
if
vdef
.
info_guard
is
not
None
and
not
vdef
.
info_guard
.
check
(
getSecurityManager
(),
self
,
ob
):
return
default
status
=
self
.
getCurrentStatusDict
(
ob
)
if
status
is
not
None
and
name
in
status
:
value
=
status
[
name
]
# Not set yet. Use a default.
elif
vdef
.
default_expr
is
not
None
:
ec
=
Expression_createExprContext
(
StateChangeInfo
(
ob
,
self
,
status
))
value
=
vdef
.
default_expr
(
ec
)
else
:
value
=
vdef
.
default_value
return
value
def
isERP5WorkflowMethodSupported
(
self
,
ob
,
method_id
):
'''
Returns a true value if the given workflow method
is supported in the current state.
'''
tdef
=
self
.
_getOb
(
method_id
,
None
)
return
tdef
is
not
None
and
self
.
_checkTransitionGuard
(
tdef
,
ob
)
def
execute
(
self
):
### zwj: execute interaction, check Transition.py/execute
pass
def
_before_commit
(
self
,
sci
,
script_name
,
security_manager
):
# check the object still exists before calling the script
ob
=
sci
.
object
while
ob
.
isTempObject
():
ob
=
ob
.
getParentValue
()
if
aq_base
(
self
.
unrestrictedTraverse
(
ob
.
getPhysicalPath
(),
None
))
is
\
aq_base
(
ob
):
current_security_manager
=
getSecurityManager
()
try
:
# Who knows what happened to the authentication context
# between here and when the interaction was executed... So we
# need to switch to the security manager as it was back then
setSecurityManager
(
security_manager
)
self
.
_getOb
(
script_name
)(
sci
)
finally
:
setSecurityManager
(
current_security_manager
)
security
.
declarePrivate
(
'activeScript'
)
def
activeScript
(
self
,
script_name
,
ob_url
,
status
,
tdef_id
):
script
=
self
.
_getOb
(
script_name
)
ob
=
self
.
unrestrictedTraverse
(
ob_url
)
tdef
=
self
.
_getOb
(
tdef_id
)
sci
=
StateChangeInfo
(
ob
,
self
,
status
,
tdef
,
None
,
None
,
None
)
script
(
sci
)
def
_checkTransitionGuard
(
self
,
t
,
ob
,
**
kw
):
# This check can be implemented with a guard expression, but
# it has a lot of overhead to use a TALES, so we make a special
# treatment for the frequent case, that is, disallow the trigger
# on a temporary document.
if
t
.
temporary_document_disallowed
:
isTempDocument
=
getattr
(
ob
,
'isTempDocument'
,
None
)
if
isTempDocument
is
not
None
:
if
isTempDocument
():
return
0
return
Workflow
.
_checkTransitionGuard
(
self
,
t
,
ob
,
**
kw
)
This diff is collapsed.
Click to expand it.
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