I made some adjustments:
In menu.py:
def adjustCmsMenu():
response.cms_menu = [['Home',request.controller=='cms' and
request.function=='index',URL('cms','index')]]
if session.cmsadmin_menu:
response.cms_menu.append(['Admin',request.controller=='cmsadmin',URL('cmsadmin','index')])
if session.cmsnode_menu:
response.cms_menu.append(['Basis',request.controller=='cmsnode',URL('cmsnode','index')])
if session.cmssite_menu:
response.cms_menu.append(['Site',request.controller=='cmssite',URL('cmssite','index')])
if session.cmsabout_menu:
response.cms_menu.append(['Over',request.controller=='cmsabout',URL('cmsabout','index')])
if session.cmscalendar_menu:
response.cms_menu.append(['Kalender',request.controller=='cmscalendar',URL('cmscalendar','index')])
def nullify():
session.authnodeID=session.authnodename=session.vcardsettings=session.sitesettings=\
session.aboutsettings=session.calendarsettings=[]
session.cmsadmin_menu=session.cmsnode_menu=session.cmssite_menu=session.cmsabout_menu=session.cmscalendar_menu=False
In cms.py
def index():
nullify()
adjustCmsMenu()
...
return dict()
In cmsadmin.py
def index():
nullify()
session.cmsadmin_menu=True
adjustCmsMenu()
...
return dict()
def router():
if not len(request.args):
url=URL('cmsadmin','index')
elif len(request.args) or session.authnodeID!=request.args(0):
nullify()
session.cmsadmin_menu=True
session.authnodeID=request.args(0)
row=db(db.Node.id==request.args(0)).select(db.Organization.name,\
left=db.Organization.on(db.Node.id==db.Organization.nodeID)).first()
if row.name:
session.authnodename=row.name
session.cmsnode_menu=True
url=URL('cmsnode','index')
rows=db((db.auth_user.nodeID==session.authnodeID)&(db.auth_user.id==db.auth_membership.user_id))\
.select(db.auth_membership.group_id)
if rows:
for r in rows:
if r.group_id==VCARDGROUPID:
session.cmssite_menu=True
setVCardSettings()
if r.group_id==SITEGROUPID:
session.cmssite_menu=True
setSiteSettings()
if r.group_id==ABOUTGROUPID:
session.cmsabout_menu=True
setAboutSettings()
if r.group_id==CALENDARGROUPID:
session.cmscalendar_menu=True
setCalendarSettings()
adjustCmsMenu()
redirect(url)
return None
And in cms.node.py, csmsite.py, cmsabout.py and cmscalendar.py outside any
function: adjustCmsMenu()
The whole menu system now works as intended, but I still wonder whether
there is a way to code this without having to call adjustCmsMenu for every
request. I tried session.cms_menu but than I lose the menu's state.
Kind regards,
Annet