In menu.py  I have the following code:

response.cms_menu = [['Home',request.controller=='cms' and 
request.function=='index',URL('cms','index')]]

def adjustCmsMenu():
    if session.cmsadmin_menu:
        
response.cms_menu.append(['Admin',request.controller=='cmsadmin',URL('cmsadmin','router')])
    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(['About',request.controller=='cmsabout',URL('cmsabout','index')])
    if session.cmscalendar_menu:
        
response.cms_menu.append(['Calendar',request.controller=='cmscalendar',URL('cmscalendar','index')])


In a controller outside any function I have the following code:

session.cmsadmin_menu=True
adjustCmsMenu()

In a function called router I have:

@auth.requires(lambda: auth.has_membership(ADMIN))
def router():
    
session.authnodeID=session.authnodename=session.vcardsettings=session.sitesettings=\
    session.aboutsettings=session.calendarsettings=[]
    
session.cmsnode_menu=session.cmssite_menu=session.cmsabout_menu=session.cmscalendar_menu=False
    if not len(request.args):
        redirect(URL('cmsadmin','index'))
    elif len(request.args) or session.authnodeID!=request.args(0):
        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

The problem is that the first call to adjustCmsMenu() , the one outside any 
function, does work, however, the one inside the router function doesn't 
work. The items aren't appended to response.cms_menu

When I put the response.cms_menu.append() outside the function:

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','router')])
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 
ons/mij',request.controller=='cmsabout',URL('cmsabout','index')])
if session.cmscalendar_menu:
    
response.cms_menu.append(['Kalender',request.controller=='cmscalendar',URL('cmscalendar','index')])

The cms_menu displays alright, but I am always one step behind with the 
items that should and shouldn't be displayed. Why doesn't this work?


Kind regards,

Annet.

Reply via email to