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

Reply via email to