/**
 * Validate a user name and email address when creating a new user.
 *
 * @since 1.2.2
 *
 * @param string $user_name  Username to validate.
 * @param string $user_email Email address to validate.
 * @return array Results of user validation including errors, if any.
 */
function bp_core_validate_user_signup($user_name, $user_email)
{
    // Make sure illegal names include BuddyPress slugs and values.
    bp_core_flush_illegal_names();
    // WordPress Multisite has its own validation. Use it, so that we
    // properly mirror restrictions on username, etc.
    if (function_exists('wpmu_validate_user_signup')) {
        $result = wpmu_validate_user_signup($user_name, $user_email);
        // When not running Multisite, we perform our own validation. What
        // follows reproduces much of the logic of wpmu_validate_user_signup(),
        // minus the multisite-specific restrictions on user_login.
    } else {
        $errors = new WP_Error();
        /**
         * Filters the username before being validated.
         *
         * @since 1.5.5
         *
         * @param string $user_name Username to validate.
         */
        $user_name = apply_filters('pre_user_login', $user_name);
        // User name can't be empty.
        if (empty($user_name)) {
            $errors->add('user_name', __('Please enter a username', 'buddypress'));
        }
        // User name can't be on the blacklist.
        $illegal_names = get_site_option('illegal_names');
        if (in_array($user_name, (array) $illegal_names)) {
            $errors->add('user_name', __('That username is not allowed', 'buddypress'));
        }
        // User name must pass WP's validity check.
        if (!validate_username($user_name)) {
            $errors->add('user_name', __('Usernames can contain only letters, numbers, ., -, and @', 'buddypress'));
        }
        // Minimum of 4 characters.
        if (strlen($user_name) < 4) {
            $errors->add('user_name', __('Username must be at least 4 characters', 'buddypress'));
        }
        // No underscores. @todo Why not?
        if (false !== strpos(' ' . $user_name, '_')) {
            $errors->add('user_name', __('Sorry, usernames may not contain the character "_"!', 'buddypress'));
        }
        // No usernames that are all numeric. @todo Why?
        $match = array();
        preg_match('/[0-9]*/', $user_name, $match);
        if ($match[0] == $user_name) {
            $errors->add('user_name', __('Sorry, usernames must have letters too!', 'buddypress'));
        }
        // Check into signups.
        $signups = BP_Signup::get(array('user_login' => $user_name));
        $signup = isset($signups['signups']) && !empty($signups['signups'][0]) ? $signups['signups'][0] : false;
        // Check if the username has been used already.
        if (username_exists($user_name) || !empty($signup)) {
            $errors->add('user_name', __('Sorry, that username already exists!', 'buddypress'));
        }
        // Validate the email address and process the validation results into
        // error messages.
        $validate_email = bp_core_validate_email_address($user_email);
        bp_core_add_validation_error_messages($errors, $validate_email);
        // Assemble the return array.
        $result = array('user_name' => $user_name, 'user_email' => $user_email, 'errors' => $errors);
        // Apply WPMU legacy filter.
        $result = apply_filters('wpmu_validate_user_signup', $result);
    }
    /**
     * Filters the result of the user signup validation.
     *
     * @since 1.2.2
     *
     * @param array $result Results of user validation including errors, if any.
     */
    return apply_filters('bp_core_validate_user_signup', $result);
}
/**
 * Validate a user name and email address when creating a new user.
 *
 * @param string $user_name Username to validate
 * @param string $user_email Email address to validate
 * @return array Results of user validation including errors, if any
 */
function bp_core_validate_user_signup($user_name, $user_email)
{
    $errors = new WP_Error();
    // Apply any user_login filters added by BP or other plugins before validating
    $user_name = apply_filters('pre_user_login', $user_name);
    if (empty($user_name)) {
        $errors->add('user_name', __('Please enter a username', 'buddypress'));
    }
    // Make sure illegal names include BuddyPress slugs and values
    bp_core_flush_illegal_names();
    $illegal_names = get_site_option('illegal_names');
    if (in_array($user_name, (array) $illegal_names)) {
        $errors->add('user_name', __('That username is not allowed', 'buddypress'));
    }
    if (!validate_username($user_name)) {
        $errors->add('user_name', __('Usernames can contain only letters, numbers, ., -, *, and @', 'buddypress'));
    }
    if (strlen($user_name) < 4) {
        $errors->add('user_name', __('Username must be at least 4 characters', 'buddypress'));
    }
    if (strpos(' ' . $user_name, '_') != false) {
        $errors->add('user_name', __('Sorry, usernames may not contain the character "_"!', 'buddypress'));
    }
    // Is the user_name all numeric?
    $match = array();
    preg_match('/[0-9]*/', $user_name, $match);
    if ($match[0] == $user_name) {
        $errors->add('user_name', __('Sorry, usernames must have letters too!', 'buddypress'));
    }
    // Check if the username has been used already.
    if (username_exists($user_name)) {
        $errors->add('user_name', __('Sorry, that username already exists!', 'buddypress'));
    }
    // Validate the email address and process the validation results into
    // error messages
    $validate_email = bp_core_validate_email_address($user_email);
    bp_core_add_validation_error_messages($errors, $validate_email);
    // Assemble the return array
    $result = array('user_name' => $user_name, 'user_email' => $user_email, 'errors' => $errors);
    // Apply WPMU legacy filter
    $result = apply_filters('wpmu_validate_user_signup', $result);
    return apply_filters('bp_core_validate_user_signup', $result);
}
/**
 * Validate a user name and email address when creating a new user.
 *
 * @global object $wpdb DB Layer
 * @param string $user_name Username to validate
 * @param string $user_email Email address to validate
 * @return array Results of user validation including errors, if any
 */
function bp_core_validate_user_signup($user_name, $user_email)
{
    global $wpdb;
    $errors = new WP_Error();
    $user_email = sanitize_email($user_email);
    if (empty($user_name)) {
        $errors->add('user_name', __('Please enter a username', 'buddypress'));
    }
    $maybe = array();
    preg_match("/[a-z0-9]+/", $user_name, $maybe);
    // Make sure illegal names include BuddyPress slugs and values
    bp_core_flush_illegal_names();
    $illegal_names = get_site_option('illegal_names');
    if (!validate_username($user_name) || in_array($user_name, (array) $illegal_names) || !empty($maybe[0]) && $user_name != $maybe[0]) {
        $errors->add('user_name', __('Only lowercase letters and numbers allowed', 'buddypress'));
    }
    if (strlen($user_name) < 4) {
        $errors->add('user_name', __('Username must be at least 4 characters', 'buddypress'));
    }
    if (strpos(' ' . $user_name, '_') != false) {
        $errors->add('user_name', __('Sorry, usernames may not contain the character "_"!', 'buddypress'));
    }
    // Is the user_name all numeric?
    $match = array();
    preg_match('/[0-9]*/', $user_name, $match);
    if ($match[0] == $user_name) {
        $errors->add('user_name', __('Sorry, usernames must have letters too!', 'buddypress'));
    }
    if (!is_email($user_email)) {
        $errors->add('user_email', __('Please check your email address.', 'buddypress'));
    }
    if (function_exists('is_email_address_unsafe') && is_email_address_unsafe($user_email)) {
        $errors->add('user_email', __('Sorry, that email address is not allowed!', 'buddypress'));
    }
    $limited_email_domains = get_site_option('limited_email_domains', 'buddypress');
    if (is_array($limited_email_domains) && empty($limited_email_domains) == false) {
        $emaildomain = substr($user_email, 1 + strpos($user_email, '@'));
        if (in_array($emaildomain, (array) $limited_email_domains) == false) {
            $errors->add('user_email', __('Sorry, that email address is not allowed!', 'buddypress'));
        }
    }
    // Check if the username has been used already.
    if (username_exists($user_name)) {
        $errors->add('user_name', __('Sorry, that username already exists!', 'buddypress'));
    }
    // Check if the email address has been used already.
    if (email_exists($user_email)) {
        $errors->add('user_email', __('Sorry, that email address is already used!', 'buddypress'));
    }
    $result = array('user_name' => $user_name, 'user_email' => $user_email, 'errors' => $errors);
    // Apply WPMU legacy filter
    $result = apply_filters('wpmu_validate_user_signup', $result);
    return apply_filters('bp_core_validate_user_signup', $result);
}
Example #4
0
/**
 * bp_core_install()
 *
 * Installs the core DB tables for BuddyPress.
 *
 * @package BuddyPress Core
 * @global $bp The global BuddyPress settings variable created in bp_core_setup_globals()
 * @global $wpdb WordPress DB access object.
 * @uses dbDelta() Performs a table creation, or upgrade based on what already exists in the DB.
 * @uses bp_core_add_illegal_names() Adds illegal blog names to the WP settings
 */
function bp_core_install() {
	global $wpdb, $bp;

	if ( !empty($wpdb->charset) )
		$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";

	$sql[] = "CREATE TABLE {$bp->core->table_name_notifications} (
		  		id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
				user_id bigint(20) NOT NULL,
				item_id bigint(20) NOT NULL,
				secondary_item_id bigint(20),
		  		component_name varchar(75) NOT NULL,
				component_action varchar(75) NOT NULL,
		  		date_notified datetime NOT NULL,
				is_new bool NOT NULL DEFAULT 0,
			    KEY item_id (item_id),
				KEY secondary_item_id (secondary_item_id),
				KEY user_id (user_id),
				KEY is_new (is_new),
				KEY component_name (component_name),
		 	   	KEY component_action (component_action),
				KEY useritem (user_id,is_new)
			   ) {$charset_collate};";

	require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
	dbDelta( $sql );

	// Add names of root components to the banned name list to avoid conflicts
	bp_core_flush_illegal_names();

	update_site_option( 'bp-core-db-version', BP_CORE_DB_VERSION );
}