From 1b1b1b827725db205313a2028dc42c948fa54ce5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Mon, 31 Jul 2006 11:27:51 +0000
Subject: [PATCH] added support for *_relative_url dynamic related keys

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@8926 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Catalog/CatalogTool.py           | 14 +++++++++-----
 product/ERP5Catalog/tests/testERP5Catalog.py |  5 +++++
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/product/ERP5Catalog/CatalogTool.py b/product/ERP5Catalog/CatalogTool.py
index 6946c12505..c84874c1b1 100644
--- a/product/ERP5Catalog/CatalogTool.py
+++ b/product/ERP5Catalog/CatalogTool.py
@@ -123,11 +123,13 @@ class IndexableObjectWrapper(CMFCoreIndexableObjectWrapper):
         return list(allowed.keys())
 
 class RelatedBaseCategory(Method):
-
+    """A Dynamic Method to act as a related key.
+    """
     def __init__(self, id):
       self._id = id
 
     def __call__(self, instance, table_0, table_1, query_table='catalog',**kw):
+      """Create the sql code for this related key."""
       base_category_uid = instance.portal_categories._getOb(self._id).getUid()
       expression_list = []
       append = expression_list.append
@@ -551,14 +553,16 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject):
         # can find 'title', or 'portal_type'...
         for i in range(1,len(splitted_key))[::-1]:
           expected_base_cat_id = '_'.join(splitted_key[0:i])
-          if expected_base_cat_id!='parent' and \
+          if expected_base_cat_id != 'parent' and \
              expected_base_cat_id in base_cat_id_list:
             # We have found a base_category
             end_key = '_'.join(splitted_key[i:])
             # accept only some catalog columns
-            if end_key in ('title','uid','description','id','portal_type'):
-              related_key_list.append('%s%s | category,catalog/%s/z_related_%s' %
-                                        (prefix,key,end_key,expected_base_cat_id))
+            if end_key in ('title', 'uid', 'description',
+                           'relative_url', 'id', 'portal_type'):
+              related_key_list.append(
+                      '%s%s | category,catalog/%s/z_related_%s' %
+                      (prefix, key, end_key, expected_base_cat_id))
 
       return related_key_list
 
diff --git a/product/ERP5Catalog/tests/testERP5Catalog.py b/product/ERP5Catalog/tests/testERP5Catalog.py
index 3f2aecb4f7..93896f96f5 100644
--- a/product/ERP5Catalog/tests/testERP5Catalog.py
+++ b/product/ERP5Catalog/tests/testERP5Catalog.py
@@ -713,5 +713,10 @@ class TestERP5Catalog(ERP5TypeTestCase):
     organisation_list = [x.getObject() for x in 
                          module.searchFolder(default_group_description='c')]
     self.assertEquals(organisation_list,[])
+    # Try to get the organisation with group relative_url
+    group_relative_url = group_nexedi_category.getRelativeUrl()
+    organisation_list = [x.getObject() for x in 
+                 module.searchFolder(group_relative_url=group_relative_url)]
+    self.assertEquals(organisation_list, [organisation])
 
 
-- 
2.30.9