From 8158681a779974856c3b29c2851e738681836ffa Mon Sep 17 00:00:00 2001
From: Kazuhiko Shiozaki <kazuhiko@nexedi.com>
Date: Tue, 19 Oct 2010 14:57:12 +0000
Subject: [PATCH] 2010-10-19 Kazuhiko * When checking duplicated selection
 names, we should use get_recursive_orig_value('selection_name') instead of
 getRecursiveTemplateField().get_value('selection_name'), because delegation
 for selection_name can end at any intermediate proxy field.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@39352 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 ...kinsTool_getDuplicateSelectionNameDict.xml | 28 +++++++++----------
 bt5/erp5_forge/bt/change_log                  |  3 ++
 bt5/erp5_forge/bt/revision                    |  2 +-
 3 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/bt5/erp5_forge/SkinTemplateItem/portal_skins/erp5_toolbox/SkinsTool_getDuplicateSelectionNameDict.xml b/bt5/erp5_forge/SkinTemplateItem/portal_skins/erp5_toolbox/SkinsTool_getDuplicateSelectionNameDict.xml
index 9ba3035526..de33b615fa 100644
--- a/bt5/erp5_forge/SkinTemplateItem/portal_skins/erp5_toolbox/SkinsTool_getDuplicateSelectionNameDict.xml
+++ b/bt5/erp5_forge/SkinTemplateItem/portal_skins/erp5_toolbox/SkinsTool_getDuplicateSelectionNameDict.xml
@@ -64,25 +64,26 @@ ok_to_share_selection_form_list = [\'Resource_viewInventory\', \'Resource_viewMo
 for field_path, field in skins_tool.ZopeFind(\n
          skins_tool, obj_metatypes=[\'ProxyField\', \'ListBox\'], search_sub=1):\n
   form = field.aq_parent\n
-  if field.meta_type == \'ProxyField\':\n
-    original_field = field.getRecursiveTemplateField()\n
-    if original_field is not None and \\\n
-       (original_field.meta_type != \'ListBox\' \\\n
-        or field.is_delegated(\'selection_name\')\n
-        or original_field.get_tales(\'selection_name\')!=\'\'):\n
-      continue\n
-  elif field.meta_type == \'ListBox\':\n
-    if field.get_tales(\'selection_name\')!=\'\':\n
-      continue\n
   # in some rare cases sharing a selection can be done intentional so avoid them\n
   if form.getId() in ok_to_share_selection_form_list:\n
     continue\n
   # if the form looks like a field library, we don\'t care, because it is not used directly.\n
   if form.getId().endswith(\'FieldLibrary\'):\n
     continue\n
+  if field.meta_type == \'ProxyField\':\n
+    try:\n
+      if field.get_recursive_tales(\'selection_name\') != \'\':\n
+        continue\n
+      selection_name = field.get_recursive_orig_value(\'selection_name\')\n
+    except KeyError:\n
+      continue\n
+  elif field.meta_type == \'ListBox\':\n
+    if field.get_tales(\'selection_name\')!=\'\':\n
+      continue\n
+    selection_name = field.get_orig_value(\'selection_name\')\n
 \n
   selection_name_dict.setdefault(\n
-         field.get_value(\'selection_name\'), []).append(field_path)\n
+         selection_name, []).append(field_path)\n
 \n
 # leave only duplicating ones\n
 duplicating_selection_name_dict = {}\n
@@ -138,10 +139,9 @@ return duplicating_selection_name_dict\n
                             <string>field_path</string>
                             <string>field</string>
                             <string>form</string>
-                            <string>original_field</string>
-                            <string>None</string>
-                            <string>duplicating_selection_name_dict</string>
                             <string>selection_name</string>
+                            <string>KeyError</string>
+                            <string>duplicating_selection_name_dict</string>
                             <string>field_list</string>
                             <string>len</string>
                             <string>_write_</string>
diff --git a/bt5/erp5_forge/bt/change_log b/bt5/erp5_forge/bt/change_log
index 3aa19bd442..21c7d1343c 100644
--- a/bt5/erp5_forge/bt/change_log
+++ b/bt5/erp5_forge/bt/change_log
@@ -1,3 +1,6 @@
+2010-10-19 Kazuhiko
+* When checking duplicated selection names, we should use get_recursive_orig_value('selection_name') instead of getRecursiveTemplateField().get_value('selection_name'), because delegation for selection_name can end at any intermediate proxy field.
+
 2010-10-19 yo
 * When checking duplicated selection names, skip field libraries, as they don't matter.
 
diff --git a/bt5/erp5_forge/bt/revision b/bt5/erp5_forge/bt/revision
index 236c7c706d..823aeb4b44 100644
--- a/bt5/erp5_forge/bt/revision
+++ b/bt5/erp5_forge/bt/revision
@@ -1 +1 @@
-623
\ No newline at end of file
+624
\ No newline at end of file
-- 
2.30.9