function pre_can_user($verdict, $args)
 {
     if (!class_exists('BP_Roles')) {
         require_once BACKPRESS_PATH . 'class.bp-roles.php';
     }
     if (!class_exists('BP_User')) {
         require_once BACKPRESS_PATH . 'class.bp-user.php';
     }
     $user = new BP_User($args['user_id']);
     // 78 = global.wordpress.org. Administrators on this site are considered global admins in GlotPress.
     if (!empty($user->ros_78_capabilities) && is_array($user->ros_78_capabilities) && !empty($user->ros_78_capabilities['administrator'])) {
         return true;
     }
     if ($args['action'] !== 'approve' || !in_array($args['object_type'], array('project|locale|set-slug', 'translation-set'))) {
         return false;
     }
     if (!($locale_slug = $this->get_locale_slug($args['object_type'], $args['object_id']))) {
         return false;
     }
     if (!($maybe_cap_key = $this->get_cap_key($locale_slug))) {
         return false;
     }
     $user->cap_key = $maybe_cap_key;
     $user->caps =& $user->{$user->cap_key};
     if (!is_array($user->caps)) {
         $user->caps = array();
     }
     $user->get_role_caps();
     foreach (array('administrator', 'editor', 'author', 'contributor', 'validator') as $role) {
         if ($user->has_cap($role)) {
             return true;
         }
     }
     return false;
 }
function bb_can_access_tab($profile_tab, $viewer_id, $owner_id)
{
    global $bb_current_user;
    $viewer_id = (int) $viewer_id;
    $owner_id = (int) $owner_id;
    if ($viewer_id == bb_get_current_user_info('id')) {
        $viewer =& $bb_current_user;
    } else {
        $viewer = new BP_User($viewer_id);
    }
    if (!$viewer) {
        return '' === $profile_tab[2];
    }
    if ($owner_id == $viewer_id) {
        if ('' === $profile_tab[1]) {
            return true;
        } else {
            return $viewer->has_cap($profile_tab[1]);
        }
    } else {
        if ('' === $profile_tab[2]) {
            return true;
        } else {
            return $viewer->has_cap($profile_tab[2]);
        }
    }
}
/**
 * Handles the resetting of users' passwords
 *
 * Handles resetting a user's password, prompted by an email sent by
 * {@see bb_reset_email()}
 *
 * @since 0.7.2
 * @global bbdb $bbdb
 *
 * @param string $key
 * @return unknown
 */
function bb_reset_password($key)
{
    global $bbdb;
    $key = sanitize_user($key, true);
    if (empty($key)) {
        return new WP_Error('key_not_found', __('Key not found.'));
    }
    if (!($user_id = $bbdb->get_var($bbdb->prepare("SELECT user_id FROM {$bbdb->usermeta} WHERE meta_key = 'newpwdkey' AND meta_value = %s", $key)))) {
        return new WP_Error('key_not_found', __('Key not found.'));
    }
    if ($user = new BP_User($user_id)) {
        if (bb_has_broken_pass($user->ID)) {
            bb_block_current_user();
        }
        if (!$user->has_cap('change_user_password', $user->ID)) {
            return new WP_Error('permission_denied', __('You are not allowed to change your password.'));
        }
        $newpass = bb_generate_password();
        bb_update_user_password($user->ID, $newpass);
        if (!bb_send_pass($user->ID, $newpass)) {
            return new WP_Error('sending_mail_failed', __('The email containing the new password could not be sent.'));
        } else {
            bb_update_usermeta($user->ID, 'newpwdkey', '');
            return true;
        }
    } else {
        return new WP_Error('key_not_found', __('Key not found.'));
    }
}