[Erp5-report] r45320 kazuhiko - /erp5/trunk/products/ERP5/Document/BusinessTemplate.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Apr 12 10:48:26 CEST 2011
Author: kazuhiko
Date: Tue Apr 12 10:48:26 2011
New Revision: 45320
URL: http://svn.erp5.org?rev=45320&view=rev
Log:
since calling manage_afterClone() in ObjectTemplateItem.install() is overkill, we do only part of manage_afterClone code here.
* reset uid
* reset owner
* do not reset workflow
* do not call recursively
* do not call type-based afterClone script
Modified:
erp5/trunk/products/ERP5/Document/BusinessTemplate.py
Modified: erp5/trunk/products/ERP5/Document/BusinessTemplate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/BusinessTemplate.py?rev=45320&r1=45319&r2=45320&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/BusinessTemplate.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/BusinessTemplate.py [utf8] Tue Apr 12 10:48:26 2011
@@ -1065,13 +1065,39 @@ class ObjectTemplateItem(BaseTemplateIte
# useless because we will already reindex every created object, so
# we avoid duplication of reindexation
obj.isIndexable = ConstantGetter('isIndexable', value=False)
- # keep workflow history if exists
- workflow_history = getattr(obj, 'workflow_history', None)
- obj.manage_afterClone(obj)
- if workflow_history is not None:
- setattr(obj, 'workflow_history', workflow_history)
- for workflow_id in workflow_history.keys():
- obj.updateRoleMappingsFor(workflow_id)
+ # START:part of ERP5Type.CopySupport.manage_afterClone
+ # * reset uid
+ # * reset owner
+ # * do not reset workflow
+ # * do not call recursively
+ # * do not call type-based afterClone script
+ #
+ # Change uid attribute so that Catalog thinks object was not yet catalogued
+ aq_base(obj).uid = portal.portal_catalog.newUid()
+ # Give the Owner local role to the current user, zope only does this if no
+ # local role has been defined on the object, which breaks ERP5Security
+ if getattr(aq_base(obj), '__ac_local_roles__', None) is not None:
+ user=getSecurityManager().getUser()
+ if user is not None:
+ userid=user.getId()
+ if userid is not None:
+ #remove previous owners
+ local_role_dict = obj.__ac_local_roles__
+ removable_role_key_list = []
+ for key, value in local_role_dict.items():
+ if 'Owner' in value:
+ value.remove('Owner')
+ if len(value) == 0:
+ removable_role_key_list.append(key)
+ # there is no need to keep emptied keys after cloning, it makes
+ # unstable local roles -- if object is cloned it can be different when
+ # after being just added
+ for key in removable_role_key_list:
+ local_role_dict.pop(key)
+ #add new owner
+ l=local_role_dict.setdefault(userid, [])
+ l.append('Owner')
+ # END:part of ERP5Type.CopySupport.manage_afterClone
del obj.isIndexable
if getattr(aq_base(obj), 'reindexObject', None) is not None:
obj.reindexObject()
More information about the Erp5-report
mailing list