[Erp5-report] r35608 nicolas.dumazet - /erp5/trunk/products/ERP5Type/
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue May 25 10:38:49 CEST 2010
Author: nicolas.dumazet
Date: Tue May 25 10:38:48 2010
New Revision: 35608
URL: http://svn.erp5.org?rev=35608&view=rev
Log:
allow ERP5 code to pass an is_indexable=False parameter to manage_pasteObjects
The purpose is to avoid creating any indexing active objects on pasted objects.
It will be used for Template creation.
The manage_pasteObjects code was retrieve from Zope OFS/CopySupport as it is
not extendable.
Modified:
erp5/trunk/products/ERP5Type/Base.py
erp5/trunk/products/ERP5Type/CopySupport.py
Modified: erp5/trunk/products/ERP5Type/Base.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Base.py?rev=35608&r1=35607&r2=35608&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Base.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Base.py [utf8] Tue May 25 10:38:48 2010
@@ -3412,15 +3412,6 @@
parent = self.getParentValue()
if parent.getPortalType() != "Preference" and not parent.isTemplate:
raise ValueError, "Template documents can not be created outside Preferences"
- # Make sure this object is not in the catalog
- catalog = getToolByName(self, 'portal_catalog', None)
- if catalog is not None:
- kw = dict(activity="SQLQueue")
- kw['after_path_and_method_id']= ([self.getPath(),
- ['immediateReindexObject',
- 'recursiveImmediateReindexObject']])
- catalog.activate(**kw).unindexObject(uid=self.getUid())
- self.isIndexable = ConstantGetter('isIndexable', value=False)
self.isTemplate = ConstantGetter('isTemplate', value=True)
# XXX reset security here
Modified: erp5/trunk/products/ERP5Type/CopySupport.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/CopySupport.py?rev=35608&r1=35607&r2=35608&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/CopySupport.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/CopySupport.py [utf8] Tue May 25 10:38:48 2010
@@ -19,18 +19,23 @@
from OFS.ObjectManager import ObjectManager
from OFS.CopySupport import CopyContainer as OriginalCopyContainer
from OFS.CopySupport import CopyError
-from OFS.CopySupport import eNotSupported, eNoItemsSpecified
+from OFS.CopySupport import eNotSupported, eNoItemsSpecified, eNoData
+from OFS.CopySupport import eNotFound, eInvalid
from OFS.CopySupport import _cb_encode, _cb_decode, cookie_path
from OFS.CopySupport import sanity_check
from Products.ERP5Type import Permissions
from Acquisition import aq_base, aq_inner, aq_parent
from Products.CMFCore.utils import getToolByName
+from Products.ERP5Type.Accessor.Constant import PropertyGetter as ConstantGetter
from Products.ERP5Type.Globals import PersistentMapping, MessageDialog
from Products.ERP5Type.Utils import get_request
from Products.ERP5Type.Message import translateString
from Products.CMFCore.WorkflowCore import WorkflowException
from Products.CMFCore.CatalogTool import CatalogTool as CMFCoreCatalogTool
from Products.CMFActivity.Errors import ActivityPendingError
+
+from cgi import escape
+import sys
_marker = object()
@@ -528,6 +533,113 @@
l.append('Owner')
self.__recurse('_postDuplicate')
+ def _setNonIndexable(self):
+ self.isIndexable = ConstantGetter('isIndexable', value=False)
+ self.__recurse('_setNonIndexable')
+
+ def manage_pasteObjects(self, cb_copy_data=None, is_indexable=True, REQUEST=None):
+ """Paste previously copied objects into the current object.
+
+ If calling manage_pasteObjects from python code, pass the result of a
+ previous call to manage_cutObjects or manage_copyObjects as the first
+ argument.
+
+ If is_indexable is True, we will avoid indexing the pasted objects.
+ """
+ cp=None
+ if cb_copy_data is not None:
+ cp=cb_copy_data
+ else:
+ if REQUEST and REQUEST.has_key('__cp'):
+ cp=REQUEST['__cp']
+ if cp is None:
+ raise CopyError, eNoData
+
+ try: cp=_cb_decode(cp)
+ except: raise CopyError, eInvalid
+
+ oblist=[]
+ op=cp[0]
+ app = self.getPhysicalRoot()
+ result = []
+
+ for mdata in cp[1]:
+ m = Moniker.loadMoniker(mdata)
+ try: ob = m.bind(app)
+ except: raise CopyError, eNotFound
+ self._verifyObjectPaste(ob, validate_src=op+1)
+ oblist.append(ob)
+
+ if op==0:
+ # Copy operation
+ for ob in oblist:
+ if not ob.cb_isCopyable():
+ raise CopyError, eNotSupported % escape(ob.getId())
+ try: ob._notifyOfCopyTo(self, op=0)
+ except: raise CopyError, MessageDialog(
+ title='Copy Error',
+ message=sys.exc_info()[1],
+ action ='manage_main')
+ ob=ob._getCopy(self)
+ orig_id=ob.getId()
+ id=self._get_id(ob.getId())
+ result.append({'id':orig_id, 'new_id':id})
+ ob._setId(id)
+ if not is_indexable:
+ ob._setNonIndexable()
+ self._setObject(id, ob)
+ ob = self._getOb(id)
+ ob._postCopy(self, op=0)
+ ob.manage_afterClone(ob)
+ ob.wl_clearLocks()
+
+ if REQUEST is not None:
+ return self.manage_main(self, REQUEST, update_menu=1,
+ cb_dataValid=1)
+
+ if op==1:
+ # Move operation
+ for ob in oblist:
+ id=ob.getId()
+ if not ob.cb_isMoveable():
+ raise CopyError, eNotSupported % escape(id)
+ try: ob._notifyOfCopyTo(self, op=1)
+ except: raise CopyError, MessageDialog(
+ title='Move Error',
+ message=sys.exc_info()[1],
+ action ='manage_main')
+ if not sanity_check(self, ob):
+ raise CopyError, 'This object cannot be pasted into itself'
+
+ # try to make ownership explicit so that it gets carried
+ # along to the new location if needed.
+ ob.manage_changeOwnershipType(explicit=1)
+
+ aq_parent(aq_inner(ob))._delObject(id)
+ ob = aq_base(ob)
+ orig_id=id
+ id=self._get_id(id)
+ result.append({'id':orig_id, 'new_id':id })
+
+ ob._setId(id)
+ if not is_indexable:
+ ob._setNonIndexable()
+ self._setObject(id, ob, set_owner=0)
+ ob=self._getOb(id)
+ ob._postCopy(self, op=1)
+
+ # try to make ownership implicit if possible
+ ob.manage_changeOwnershipType(explicit=0)
+
+ if REQUEST is not None:
+ REQUEST['RESPONSE'].setCookie('__cp', 'deleted',
+ path='%s' % cookie_path(REQUEST),
+ expires='Wed, 31-Dec-97 23:59:59 GMT')
+ REQUEST['__cp'] = None
+ return self.manage_main(self, REQUEST, update_menu=1,
+ cb_dataValid=0)
+ return result
+
#### Helper methods
def tryMethodCallWithTemporaryPermission(context, permission, method,
More information about the Erp5-report
mailing list