[Checkins] SVN: z3ext.preferences/trunk/ Show preference category if it has editable fields

Nikolay Kim fafhrd at datacom.kz
Wed Oct 22 22:29:38 EDT 2008


Log message for revision 92492:
  Show preference category if it has editable fields

Changed:
  U   z3ext.preferences/trunk/CHANGES.txt
  U   z3ext.preferences/trunk/src/z3ext/preferences/browser/index.py
  U   z3ext.preferences/trunk/src/z3ext/preferences/browser/navigation.py
  U   z3ext.preferences/trunk/src/z3ext/preferences/utils.py

-=-
Modified: z3ext.preferences/trunk/CHANGES.txt
===================================================================
--- z3ext.preferences/trunk/CHANGES.txt	2008-10-22 18:12:46 UTC (rev 92491)
+++ z3ext.preferences/trunk/CHANGES.txt	2008-10-23 02:29:36 UTC (rev 92492)
@@ -2,6 +2,12 @@
 CHANGES
 =======
 
+1.4.2 (2008-10-??)
+------------------
+
+- Show preference category if it has editable fields
+
+
 1.4.1 (2008-10-22)
 ------------------
 

Modified: z3ext.preferences/trunk/src/z3ext/preferences/browser/index.py
===================================================================
--- z3ext.preferences/trunk/src/z3ext/preferences/browser/index.py	2008-10-22 18:12:46 UTC (rev 92491)
+++ z3ext.preferences/trunk/src/z3ext/preferences/browser/index.py	2008-10-23 02:29:36 UTC (rev 92492)
@@ -18,6 +18,7 @@
 from zope.interface import Interface
 from zope.component import getUtility
 from zope.security import checkPermission
+from z3ext.preferences.utils import hasEditableFields
 from z3ext.preferences.interfaces import IPreferenceGroup, IPreferenceCategory
 
 
@@ -37,7 +38,7 @@
                               sgroup.__id__.split('.')[-1], sgroup)
                              for t, sgroup in group.items() 
                              if sgroup.isAvailable()]
-                if subgroups:
+                if subgroups or hasEditableFields(group):
                     groups.append((group.__title__, group,
                                    [{'id': id, 'group': sgroup}
                                     for t, id, sgroup in subgroups]))

Modified: z3ext.preferences/trunk/src/z3ext/preferences/browser/navigation.py
===================================================================
--- z3ext.preferences/trunk/src/z3ext/preferences/browser/navigation.py	2008-10-22 18:12:46 UTC (rev 92491)
+++ z3ext.preferences/trunk/src/z3ext/preferences/browser/navigation.py	2008-10-23 02:29:36 UTC (rev 92492)
@@ -17,6 +17,7 @@
 """
 from zope.component import queryMultiAdapter
 from zope.viewlet.manager import ViewletManagerBase
+from z3ext.preferences.utils import hasEditableFields
 from z3ext.preferences.interfaces import IRootPreferences
 from z3ext.preferences.interfaces import IPreferenceGroup
 from z3ext.preferences.interfaces import IPreferenceCategory
@@ -74,7 +75,8 @@
                     #info['items'] = self._process(prefs, [prefs], level+1)
 
                 if IPreferenceCategory.providedBy(prefs) and not info['items']:
-                    if not self._process(prefs, [prefs], level+1):
+                    if not self._process(prefs, [prefs], level+1) \
+                            and not hasEditableFields(prefs):
                         continue
 
                 data.append(info)

Modified: z3ext.preferences/trunk/src/z3ext/preferences/utils.py
===================================================================
--- z3ext.preferences/trunk/src/z3ext/preferences/utils.py	2008-10-22 18:12:46 UTC (rev 92491)
+++ z3ext.preferences/trunk/src/z3ext/preferences/utils.py	2008-10-23 02:29:36 UTC (rev 92492)
@@ -40,9 +40,10 @@
   >>> print utils.isMemberAwareGroup(prefs)
   False
 """
-
 from zope import interface
+from zope.schema import getFieldNames
 from zope.security import checkPermission
+from zope.security.checker import canWrite
 from zope.security.interfaces import IPrincipal, IGroup, IMemberAwareGroup
 
 
@@ -59,6 +60,14 @@
     return IMemberAwareGroup.providedBy(group.__principal__)
 
 
+def hasEditableFields(group):
+    for name in getFieldNames(group.__schema__):
+        if canWrite(group, name):
+            return True
+
+    return False
+
+
 class PrincipalChecker(object):
 
     def __init__(self, iface):



More information about the Checkins mailing list