/**
 * readjust user object to keep the role - pack balance
 */
function mgm_remove_excess_user_roles($user_id, $add_if_absent = false)
{
    $member = mgm_get_member($user_id);
    $user = new WP_User($user_id);
    $pack_ids = mgm_get_members_packids($member);
    $pack_roles = array();
    $obj_role = new mgm_roles();
    foreach ($pack_ids as $pack_id) {
        $pack = mgm_get_class('subscription_packs')->get_pack($pack_id);
        if (!empty($pack['role'])) {
            $pack_roles[] = $pack['role'];
        }
    }
    //remove from user object:
    if (isset($user->roles) && !empty($user->roles) && !empty($pack_roles)) {
        $arr_all_roles = $obj_role->_get_default_roles();
        $arr_mgm_roles = $obj_role->_get_mgm_roles();
        if (!empty($arr_mgm_roles)) {
            $arr_all_roles = array_merge($arr_all_roles, $arr_mgm_roles);
        }
        foreach ($user->roles as $role) {
            if (!in_array($role, $pack_roles)) {
                //make sure delete only default/mgm roles:
                if (in_array($role, $arr_all_roles)) {
                    $user->remove_role($role);
                }
            }
        }
    }
    //add if role is absent:
    if (!empty($pack_roles) && $add_if_absent) {
        $user = new WP_User($user_id);
        foreach ($pack_roles as $prole) {
            if (!in_array($prole, $user->roles)) {
                $obj_role->add_user_role($user_id, $prole, false, false);
            }
        }
    }
}