Commit 4957ab92 authored by Jim Fulton's avatar Jim Fulton

Fixed bugs in managing meta_type and the icon.

Added machinery for better permissions management.
parent e15046bc
...@@ -148,7 +148,8 @@ def PersistentClassDict(doc=None, meta_type=None): ...@@ -148,7 +148,8 @@ def PersistentClassDict(doc=None, meta_type=None):
if doc is not None: if doc is not None:
dict['__doc__']=doc dict['__doc__']=doc
return dict return dict
_marker=[]
class ZClass(OFS.SimpleItem.SimpleItem): class ZClass(OFS.SimpleItem.SimpleItem):
"""Zope Class """Zope Class
""" """
...@@ -250,6 +251,11 @@ class ZClass(OFS.SimpleItem.SimpleItem): ...@@ -250,6 +251,11 @@ class ZClass(OFS.SimpleItem.SimpleItem):
if durl is None: durl=REQUEST['URL2'] if durl is None: durl=REQUEST['URL2']
REQUEST['RESPONSE'].redirect(durl+'/manage_workspace') REQUEST['RESPONSE'].redirect(durl+'/manage_workspace')
def zclass_builtins(self):
r=find_builtins(self._zclass_).keys()
r.sort()
def zclass_candidate_view_actions(self): def zclass_candidate_view_actions(self):
r={} r={}
...@@ -271,9 +277,11 @@ class ZClass(OFS.SimpleItem.SimpleItem): ...@@ -271,9 +277,11 @@ class ZClass(OFS.SimpleItem.SimpleItem):
r.sort() r.sort()
return r return r
def getClassAttr(self, name): def getClassAttr(self, name, default=_marker):
r=self._zclass_.__dict__[name] if default is _marker: return self._zclass_.__dict__[name]
return r try: return self._zclass_.__dict__[name]
except KeyError: return default
def setClassAttr(self, name, value): def setClassAttr(self, name, value):
c=self._zclass_ c=self._zclass_
...@@ -296,6 +304,10 @@ class ZClass(OFS.SimpleItem.SimpleItem): ...@@ -296,6 +304,10 @@ class ZClass(OFS.SimpleItem.SimpleItem):
for name, who_cares in c.__ac_permissions__: a(name) for name, who_cares in c.__ac_permissions__: a(name)
r.sort() r.sort()
return r return r
def ziconImage(self, REQUEST, RESPONSE):
"Display a class icon"
return self._zclass_.ziconImage.index_html(REQUEST, RESPONSE)
class ZClassSheets(OFS.PropertySheets.PropertySheets): class ZClassSheets(OFS.PropertySheets.PropertySheets):
"Manage a collection of property sheets that provide ZClass management" "Manage a collection of property sheets that provide ZClass management"
...@@ -327,3 +339,15 @@ def findActions(klass, found): ...@@ -327,3 +339,15 @@ def findActions(klass, found):
found[d['action']]=1 found[d['action']]=1
findActions(b, found) findActions(b, found)
except: pass except: pass
def find_builtins(klass, found=None):
if found is None: found={}
for b in klass.__bases__:
try:
for pname, actions in b.__ac_permissions__:
for action in actions:
found['action']=1
find_builtins(b, found)
except: pass
return found
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment