'Custom Personal Menu'

@classmethod
def menu_personal(cls):

    auth = current.auth
    s3 = current.response.s3
    settings = current.deployment_settings
    menu_lang = ML('Language', right=True)
    for language in s3.l10n_languages.items():
        (code, name) = language
        menu_lang(ML(name, translate=False, lang_code=code, lang_name=name))
    if (not auth.is_logged_in()):
        request = current.request
        login_next = URL(args=request.args, vars=request.vars)
        if ((request.controller == 'default') and (request.function == 'user') and ('_next' in request.get_vars)):
            login_next = request.get_vars['_next']
        self_registration = settings.get_security_registration_visible()
        menu_personal = MP()(MP('Register', c='default', f='user', m='register', check=self_registration), MP('Login', c='default', f='user', m='login', vars=dict(_next=login_next)), MP('Lost    Password', c='default', f='user', m='retrieve_password'), menu_lang)
    else:
        s3_has_role = auth.s3_has_role
        is_org_admin = (lambda i: (s3_has_role('ORG_ADMIN') and (not s3_has_role('ADMIN'))))
        menu_personal = MP()(MP('Administration', c='admin', f='index', check=s3_has_role('ADMIN')), MP('Administration', c='admin', f='user', check=is_org_admin), MP('Profile', c='default', f='person'), MP('Subscription', c='default', f='index', args=['subscriptions']), MP('Password', c='default', f='user', m='change_password'), MP('Logout', c='default', f='user', m='logout'), menu_lang)
    return menu_personal
