def process_user_form(global_config, form, username, my_access_level, new_user=False):
    if new_user == True:
        username = form[user_username_label].value
        
    global_config['logger'].debug( 'Process User Profile For: %s', username )
    
    session = DbSession.open_db_session(global_config['users_db_name'] + global_config['this_season'])
                                
    email_address = form[user_emailaddress_label].value
    cellphone = form[user_cellphone_label].value
    carrier = form[user_carrier_label].value
    subgroup = form[user_subgroup_label].value
    
    user = UsersDataModel.getUser(session, username)
    if user:
        if new_user == True:
            raise Exception('User Already Exists!')
            
        # validate the password confirmation only if the user actually changed his
        # password
        if form[user_password_label].value != user.password:
            if form[user_password_label].value != form[user_password_confirm_label].value:
                raise Exception('Passwords Do NOT Match')
        # also make sure to pull username from the database, in case the user
        # provided the nickname
        username = user.username
    password = form[user_password_label].value
    display_name = form[user_display_name_label].value
    role = form[user_role_label].value
    contact_mode = form[user_contact_mode_label].value
    nickname = form[user_nickname_label].value
    access_level = int(form[user_access_level_label].value)
    if access_level == 0:
        if my_access_level >0: 
            raise Exception('Only Supreme Admins (aka NOT you) can set access level to 0')
    taskgroups = form[user_taskgroups_label].value
    state = form[user_state_label].value
    
    UsersDataModel.addOrUpdateUser(session, username, email_address, 
                                          cellphone, carrier, subgroup, password, 
                                          display_name, role, contact_mode, nickname,
                                          access_level, state)

    UsersDataModel.updateUserTaskgroups(session, username, taskgroups)
        
    session.commit()
    session.remove()
    return '/users'
def process_userprofile_form(global_config, form, username):
    global_config['logger'].debug( 'Process User Profile For: %s', username )
    
    session = DbSession.open_db_session(global_config['users_db_name'] + global_config['this_season'])
                                
    email_address = form[user_emailaddress_label].value
    cellphone = form[user_cellphone_label].value
    carrier = form[user_carrier_label].value
    subgroup = form[user_subgroup_label].value
    
    # set default access level and rols, and override if the user is already in the system
    access_level = 5
    role = 'Guest'
    user = UsersDataModel.getUser(session, username)
    if user:
        # validate the password confirmation only if the user actually changed his
        # password
        if form[user_password_label].value != user.password:
            if form[user_password_label].value != form[user_password_confirm_label].value:
                raise Exception('Passwords Do NOT Match')

        access_level = user.access_level
        role = user.role
        state = user.state
        
    password = form[user_password_label].value
    display_name = form[user_display_name_label].value
    contact_mode = form[user_contact_mode_label].value
    nickname = form[user_nickname_label].value
                    
    UsersDataModel.addOrUpdateUser(session, username, email_address, 
                                          cellphone, carrier, subgroup, password, 
                                          display_name, role, contact_mode, nickname,
                                          access_level, state)
    session.commit()
    session.remove()

    return '/home'