+# vim: set et sw=4 sts=4 encoding=utf-8 foldmethod=marker :
from turbogears import url
-from turbogears import controllers
+from turbogears.identity import SecureResource
+from turbogears import identity
class Menu:
- def __init__(self, controller):
- # Armo la lista de subcontrollers
- self.items = []
- for i in controller.__dict__:
- if isinstance(getattr(controller, i),controllers.Controller):
- self.items.append(i)
+ def __init__(self, base):
+ self.base = base
+ self.items = [i for i in dir(base)
+ if isinstance(getattr(base, i), SecureResource)]
self.items.sort()
+ self.items = ['dashboard'] + self.items
+
+ def _check(self, c):
+ if hasattr(c, 'hide_to_admin') and 'admin' in identity.current.permissions: return False
+ if hasattr(c, 'hide_to_entregar') and 'admin' not in identity.current.permissions: return False
+ return c.require.eval_with_object(identity.current)
def __repr__(self):
- t = """
+ option = u"""<option value="%s">%s</option>" """
+ template = """
<div id="navbar">
- Ir a :
- <select OnChange="window.location=this.options[this.selectedIndex].value;">
- %s
- </select>
- </div>
+ Ir a :
+ <select OnChange="window.location=this.options[this.selectedIndex].value;">
+ %s
+ </select>
+ </div>
"""
- s = ''
+ s = option % ('', '-----')
for i in self.items:
- s = s + u"""<option value="%s">%s</option>" """ % (url('/' + i), i.capitalize().replace('_', ' '))
- return t % s
+ if i == 'dashboard' or self._check(getattr(self.base, i)):
+ s += option % (url('/' + i), i.capitalize().replace('_', ' '))
+ return template % s