From 6c0eae95562f834ae4c98cec1f84c30500d424fa Mon Sep 17 00:00:00 2001
From: Arnaud Fontaine <arnaud.fontaine@nexedi.com>
Date: Wed, 12 Feb 2014 19:43:22 +0900
Subject: [PATCH] erp5_forge: Migrate Glossary Extension to ZODB Property
 Sheets and Portal Types as classes.

Using the legacy API was broken and this is also to prepare
DocumentationHelper and ClassTool removal.
---
 .../extension.erp5.Glossary.py                | 47 ++++++++++---------
 bt5/erp5_forge/bt/change_log                  |  3 ++
 bt5/erp5_forge/bt/revision                    |  2 +-
 3 files changed, 28 insertions(+), 24 deletions(-)

diff --git a/bt5/erp5_forge/ExtensionTemplateItem/portal_components/extension.erp5.Glossary.py b/bt5/erp5_forge/ExtensionTemplateItem/portal_components/extension.erp5.Glossary.py
index 773d2a839f..bdcf921103 100644
--- a/bt5/erp5_forge/ExtensionTemplateItem/portal_components/extension.erp5.Glossary.py
+++ b/bt5/erp5_forge/ExtensionTemplateItem/portal_components/extension.erp5.Glossary.py
@@ -3,34 +3,35 @@ def setPortalTypeDescription(self, portal_type, description):
     'description', description)
 
 def getPropertySheetList(self, portal_type):
-  from Products.ERP5Type.DocumentationHelper.PortalTypeDocumentationHelper \
-       import PortalTypeDocumentationHelper
-  portal = self.getPortalObject()
-  portal_type_uri = '%s/portal_types/%s' % (portal.getUrl(),
-                                            portal_type)
-  return PortalTypeDocumentationHelper(portal_type_uri).__of__(
-    portal).getPropertySheetList()
+  import erp5.portal_type
 
+  return (getattr(self.getPortalObject().portal_types, portal_type).getTypePropertySheetList() +
+          list(getattr(erp5.portal_type, portal_type).property_sheets))
 
 def getPropertySheetAttributeList(self, name):
-  from Products.ERP5Type import PropertySheet
-  class_ = PropertySheet.__dict__.get(name, None)
+  portal = self.getPortalObject()
+  try:
+    property_sheet_obj = portal.portal_property_sheets[name]
+  except KeyError:
+    return []
+
   result = []
-  for i in getattr(class_, '_properties', ()):
-    if 'acquired_property_id' in i:
-      continue
-    # we want to get only normal property.
-    result.append((i['id'], i.get('description', '')))
-  for i in getattr(class_, '_categories', ()):
-    try:
-      result.append((i, self.getPortalObject().portal_categories[i].getDescription()))
-    except KeyError:
-      result.append((i, ''))
-    except TypeError:
-      # if category is Expression(...), TypeError raises
-      pass
-  return result
+  # We don't want Acquired Property nor Category TALES Expression  
+  for property_obj in property_sheet_obj.contentValues(portal_type=('Category Property',
+                                                                    'Standard Property')):
+    reference = property_obj.getReference('')
+    description = ''
+    if property_obj.getPortalType() == 'Category Property':
+      try:
+        description = portal.portal_categories[reference].getDescription('')
+      except KeyError:
+        pass
+    else:
+      description = property_obj.getDescription('')
 
+    result.append((reference, description))
+
+  return result
 
 def getActionTitleListFromAllActionProvider(portal):
   result = []
diff --git a/bt5/erp5_forge/bt/change_log b/bt5/erp5_forge/bt/change_log
index e8d2ce188a..cf3a2d8965 100644
--- a/bt5/erp5_forge/bt/change_log
+++ b/bt5/erp5_forge/bt/change_log
@@ -1,3 +1,6 @@
+2014-02-19 Arnaud Fontaine
+* Migrate Glossary Extension to ZODB Property Sheets and Portal Types as classes.
+
 2013-09-03 arnaud.fontaine
 * ZODB Components: Workflow History must always be kept, so avoid an extra step for developers.
 
diff --git a/bt5/erp5_forge/bt/revision b/bt5/erp5_forge/bt/revision
index 9251196df3..3ea66354ca 100644
--- a/bt5/erp5_forge/bt/revision
+++ b/bt5/erp5_forge/bt/revision
@@ -1 +1 @@
-678
\ No newline at end of file
+679
\ No newline at end of file
-- 
2.30.9