From da187a638e415ee344fc33e4cf2a0c7d9ddcdfe8 Mon Sep 17 00:00:00 2001 From: Alexandre Boeglin <alex@nexedi.com> Date: Fri, 29 Feb 2008 16:06:59 +0000 Subject: [PATCH] * add edit_order parameter and logic to _edit() (see changelog of r19605) * _v_accessor_created_object is no longer useful git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@19606 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5Type/Accessor/AcquiredProperty.py | 1 - product/ERP5Type/Accessor/ContentProperty.py | 1 - product/ERP5Type/Base.py | 70 ++++++++----------- 3 files changed, 29 insertions(+), 43 deletions(-) diff --git a/product/ERP5Type/Accessor/AcquiredProperty.py b/product/ERP5Type/Accessor/AcquiredProperty.py index d22d3728b2..61e1b0ba07 100644 --- a/product/ERP5Type/Accessor/AcquiredProperty.py +++ b/product/ERP5Type/Accessor/AcquiredProperty.py @@ -161,7 +161,6 @@ class Setter(Method): if o is None: o = instance.newContent(id=self._storage_id, portal_type=self._portal_type[0]) - instance._v_accessor_created_object = 1 if self._reindex: warnings.warn("The reindexing accessors are deprecated.\n" "Please use Alias.Reindex instead.", diff --git a/product/ERP5Type/Accessor/ContentProperty.py b/product/ERP5Type/Accessor/ContentProperty.py index d768dbcc34..4a08a9b952 100644 --- a/product/ERP5Type/Accessor/ContentProperty.py +++ b/product/ERP5Type/Accessor/ContentProperty.py @@ -227,7 +227,6 @@ class Setter(Method): assertAttributePortalType(instance, available_id, self._portal_type) o = instance.newContent(id=available_id, portal_type=self._portal_type[0]) - instance._v_accessor_created_object = 1 if self._reindex: warnings.warn("The reindexing accessors are deprecated.\n" "Please use Alias.Reindex instead.", diff --git a/product/ERP5Type/Base.py b/product/ERP5Type/Base.py index 5a141b5fad..4d110fbd3f 100644 --- a/product/ERP5Type/Base.py +++ b/product/ERP5Type/Base.py @@ -1465,7 +1465,7 @@ class Base( CopyContainer, # Object attributes update method security.declarePrivate( '_edit' ) def _edit(self, REQUEST=None, force_update=0, reindex_object=0, - keep_existing=0, activate_kw=None, **kw): + keep_existing=0, activate_kw=None, edit_order=[], **kw): """ Generic edit Method for all ERP5 object The purpose of this method is to update attributed, eventually do @@ -1483,46 +1483,34 @@ class Base( CopyContainer, """ modified_property_dict = self._v_modified_property_dict = {} - def getModifiedPropertyList(self): - my_modified_property_list = [] - for key in kw.keys(): - # We only change if the value is different - # This may be very long... - old_value = None - if not force_update: - try: - old_value = self.getProperty(key, evaluate=0) - except TypeError: - old_value = self.getProperty(key) - - if old_value != kw[key] or force_update: - # We keep in a thread var the previous values - # this can be useful for interaction workflow to implement lookups - # XXX If iteraction workflow script is triggered by edit and calls - # edit itself, this is useless as the dict will be overwritten - # If the keep_existing flag is set to 1, we do not update properties which are defined - if not keep_existing or not self.hasProperty(key): - modified_property_dict[key] = old_value - my_modified_property_list.append(key) - return my_modified_property_list - - my_modified_property_list = getModifiedPropertyList(self) - - # When we get notified by an accessor that it created an object, recheck - # all properties - while 1: - self._v_accessor_created_object = 0 - for key in my_modified_property_list: - if key != 'id': - self._setProperty(key, kw[key]) - else: - self.setId(kw['id'], reindex=reindex_object) - if self._v_accessor_created_object == 1: - # refresh list of modified properties, and restart the process - my_modified_property_list = getModifiedPropertyList(self) - break - else: - break + key_list = kw.keys() + ordered_key_list = [k for k in key_list if k not in edit_order] + for k in edit_order: + if k in key_list: + ordered_key_list.append(k) + + for key in ordered_key_list: + # We only change if the value is different + # This may be very long... + old_value = None + if not force_update: + try: + old_value = self.getProperty(key, evaluate=0) + except TypeError: + old_value = self.getProperty(key) + + if old_value != kw[key] or force_update: + # We keep in a thread var the previous values + # this can be useful for interaction workflow to implement lookups + # XXX If iteraction workflow script is triggered by edit and calls + # edit itself, this is useless as the dict will be overwritten + # If the keep_existing flag is set to 1, we do not update properties which are defined + if not keep_existing or not self.hasProperty(key): + modified_property_dict[key] = old_value + if key != 'id': + self._setProperty(key, kw[key]) + else: + self.setId(kw['id'], reindex=reindex_object) if reindex_object: # We do not want to reindex the object if nothing is changed -- 2.30.9