diff options
Diffstat (limited to 'srcs/wordpress/wp-includes/ms-functions.php')
| -rw-r--r-- | srcs/wordpress/wp-includes/ms-functions.php | 2793 |
1 files changed, 0 insertions, 2793 deletions
diff --git a/srcs/wordpress/wp-includes/ms-functions.php b/srcs/wordpress/wp-includes/ms-functions.php deleted file mode 100644 index ef55885..0000000 --- a/srcs/wordpress/wp-includes/ms-functions.php +++ /dev/null @@ -1,2793 +0,0 @@ -<?php -/** - * Multisite WordPress API - * - * @package WordPress - * @subpackage Multisite - * @since 3.0.0 - */ - -/** - * Gets the network's site and user counts. - * - * @since MU (3.0.0) - * - * @return array Site and user count for the network. - */ -function get_sitestats() { - $stats = array( - 'blogs' => get_blog_count(), - 'users' => get_user_count(), - ); - - return $stats; -} - -/** - * Get one of a user's active blogs - * - * Returns the user's primary blog, if they have one and - * it is active. If it's inactive, function returns another - * active blog of the user. If none are found, the user - * is added as a Subscriber to the Dashboard Blog and that blog - * is returned. - * - * @since MU (3.0.0) - * - * @param int $user_id The unique ID of the user - * @return WP_Site|void The blog object - */ -function get_active_blog_for_user( $user_id ) { - $blogs = get_blogs_of_user( $user_id ); - if ( empty( $blogs ) ) { - return; - } - - if ( ! is_multisite() ) { - return $blogs[ get_current_blog_id() ]; - } - - $primary_blog = get_user_meta( $user_id, 'primary_blog', true ); - $first_blog = current( $blogs ); - if ( false !== $primary_blog ) { - if ( ! isset( $blogs[ $primary_blog ] ) ) { - update_user_meta( $user_id, 'primary_blog', $first_blog->userblog_id ); - $primary = get_site( $first_blog->userblog_id ); - } else { - $primary = get_site( $primary_blog ); - } - } else { - //TODO Review this call to add_user_to_blog too - to get here the user must have a role on this blog? - $result = add_user_to_blog( $first_blog->userblog_id, $user_id, 'subscriber' ); - - if ( ! is_wp_error( $result ) ) { - update_user_meta( $user_id, 'primary_blog', $first_blog->userblog_id ); - $primary = $first_blog; - } - } - - if ( ( ! is_object( $primary ) ) || ( $primary->archived == 1 || $primary->spam == 1 || $primary->deleted == 1 ) ) { - $blogs = get_blogs_of_user( $user_id, true ); // if a user's primary blog is shut down, check their other blogs. - $ret = false; - if ( is_array( $blogs ) && count( $blogs ) > 0 ) { - foreach ( (array) $blogs as $blog_id => $blog ) { - if ( $blog->site_id != get_current_network_id() ) { - continue; - } - $details = get_site( $blog_id ); - if ( is_object( $details ) && $details->archived == 0 && $details->spam == 0 && $details->deleted == 0 ) { - $ret = $details; - if ( get_user_meta( $user_id, 'primary_blog', true ) != $blog_id ) { - update_user_meta( $user_id, 'primary_blog', $blog_id ); - } - if ( ! get_user_meta( $user_id, 'source_domain', true ) ) { - update_user_meta( $user_id, 'source_domain', $details->domain ); - } - break; - } - } - } else { - return; - } - return $ret; - } else { - return $primary; - } -} - -/** - * The number of active users in your installation. - * - * The count is cached and updated twice daily. This is not a live count. - * - * @since MU (3.0.0) - * @since 4.8.0 The `$network_id` parameter has been added. - * - * @param int|null $network_id ID of the network. Default is the current network. - * @return int Number of active users on the network. - */ -function get_user_count( $network_id = null ) { - return get_network_option( $network_id, 'user_count' ); -} - -/** - * The number of active sites on your installation. - * - * The count is cached and updated twice daily. This is not a live count. - * - * @since MU (3.0.0) - * @since 3.7.0 The `$network_id` parameter has been deprecated. - * @since 4.8.0 The `$network_id` parameter is now being used. - * - * @param int|null $network_id ID of the network. Default is the current network. - * @return int Number of active sites on the network. - */ -function get_blog_count( $network_id = null ) { - return get_network_option( $network_id, 'blog_count' ); -} - -/** - * Get a blog post from any site on the network. - * - * @since MU (3.0.0) - * - * @param int $blog_id ID of the blog. - * @param int $post_id ID of the post you're looking for. - * @return WP_Post|null WP_Post on success or null on failure - */ -function get_blog_post( $blog_id, $post_id ) { - switch_to_blog( $blog_id ); - $post = get_post( $post_id ); - restore_current_blog(); - - return $post; -} - -/** - * Adds a user to a blog. - * - * Use the {@see 'add_user_to_blog'} action to fire an event when users are added to a blog. - * - * @since MU (3.0.0) - * - * @param int $blog_id ID of the blog you're adding the user to. - * @param int $user_id ID of the user you're adding. - * @param string $role The role you want the user to have - * @return true|WP_Error - */ -function add_user_to_blog( $blog_id, $user_id, $role ) { - switch_to_blog( $blog_id ); - - $user = get_userdata( $user_id ); - - if ( ! $user ) { - restore_current_blog(); - return new WP_Error( 'user_does_not_exist', __( 'The requested user does not exist.' ) ); - } - - /** - * Filters whether a user should be added to a site. - * - * @since 4.9.0 - * - * @param bool|WP_Error $retval True if the user should be added to the site, false - * or error object otherwise. - * @param int $user_id User ID. - * @param string $role User role. - * @param int $blog_id Site ID. - */ - $can_add_user = apply_filters( 'can_add_user_to_blog', true, $user_id, $role, $blog_id ); - - if ( true !== $can_add_user ) { - restore_current_blog(); - - if ( is_wp_error( $can_add_user ) ) { - return $can_add_user; - } - - return new WP_Error( 'user_cannot_be_added', __( 'User cannot be added to this site.' ) ); - } - - if ( ! get_user_meta( $user_id, 'primary_blog', true ) ) { - update_user_meta( $user_id, 'primary_blog', $blog_id ); - $site = get_site( $blog_id ); - update_user_meta( $user_id, 'source_domain', $site->domain ); - } - - $user->set_role( $role ); - - /** - * Fires immediately after a user is added to a site. - * - * @since MU (3.0.0) - * - * @param int $user_id User ID. - * @param string $role User role. - * @param int $blog_id Blog ID. - */ - do_action( 'add_user_to_blog', $user_id, $role, $blog_id ); - - clean_user_cache( $user_id ); - wp_cache_delete( $blog_id . '_user_count', 'blog-details' ); - - restore_current_blog(); - - return true; -} - -/** - * Remove a user from a blog. - * - * Use the {@see 'remove_user_from_blog'} action to fire an event when - * users are removed from a blog. - * - * Accepts an optional `$reassign` parameter, if you want to - * reassign the user's blog posts to another user upon removal. - * - * @since MU (3.0.0) - * - * @global wpdb $wpdb WordPress database abstraction object. - * - * @param int $user_id ID of the user you're removing. - * @param int $blog_id ID of the blog you're removing the user from. - * @param string $reassign Optional. A user to whom to reassign posts. - * @return true|WP_Error - */ -function remove_user_from_blog( $user_id, $blog_id = '', $reassign = '' ) { - global $wpdb; - switch_to_blog( $blog_id ); - $user_id = (int) $user_id; - /** - * Fires before a user is removed from a site. - * - * @since MU (3.0.0) - * - * @param int $user_id User ID. - * @param int $blog_id Blog ID. - */ - do_action( 'remove_user_from_blog', $user_id, $blog_id ); - - // If being removed from the primary blog, set a new primary if the user is assigned - // to multiple blogs. - $primary_blog = get_user_meta( $user_id, 'primary_blog', true ); - if ( $primary_blog == $blog_id ) { - $new_id = ''; - $new_domain = ''; - $blogs = get_blogs_of_user( $user_id ); - foreach ( (array) $blogs as $blog ) { - if ( $blog->userblog_id == $blog_id ) { - continue; - } - $new_id = $blog->userblog_id; - $new_domain = $blog->domain; - break; - } - - update_user_meta( $user_id, 'primary_blog', $new_id ); - update_user_meta( $user_id, 'source_domain', $new_domain ); - } - - // wp_revoke_user($user_id); - $user = get_userdata( $user_id ); - if ( ! $user ) { - restore_current_blog(); - return new WP_Error( 'user_does_not_exist', __( 'That user does not exist.' ) ); - } - - $user->remove_all_caps(); - - $blogs = get_blogs_of_user( $user_id ); - if ( count( $blogs ) == 0 ) { - update_user_meta( $user_id, 'primary_blog', '' ); - update_user_meta( $user_id, 'source_domain', '' ); - } - - if ( $reassign != '' ) { - $reassign = (int) $reassign; - $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d", $user_id ) ); - $link_ids = $wpdb->get_col( $wpdb->prepare( "SELECT link_id FROM $wpdb->links WHERE link_owner = %d", $user_id ) ); - - if ( ! empty( $post_ids ) ) { - $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_author = %d WHERE post_author = %d", $reassign, $user_id ) ); - array_walk( $post_ids, 'clean_post_cache' ); - } - - if ( ! empty( $link_ids ) ) { - $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->links SET link_owner = %d WHERE link_owner = %d", $reassign, $user_id ) ); - array_walk( $link_ids, 'clean_bookmark_cache' ); - } - } - - restore_current_blog(); - - return true; -} - -/** - * Get the permalink for a post on another blog. - * - * @since MU (3.0.0) 1.0 - * - * @param int $blog_id ID of the source blog. - * @param int $post_id ID of the desired post. - * @return string The post's permalink - */ -function get_blog_permalink( $blog_id, $post_id ) { - switch_to_blog( $blog_id ); - $link = get_permalink( $post_id ); - restore_current_blog(); - - return $link; -} - -/** - * Get a blog's numeric ID from its URL. - * - * On a subdirectory installation like example.com/blog1/, - * $domain will be the root 'example.com' and $path the - * subdirectory '/blog1/'. With subdomains like blog1.example.com, - * $domain is 'blog1.example.com' and $path is '/'. - * - * @since MU (3.0.0) - * - * @global wpdb $wpdb WordPress database abstraction object. - * - * @param string $domain - * @param string $path Optional. Not required for subdomain installations. - * @return int 0 if no blog found, otherwise the ID of the matching blog - */ -function get_blog_id_from_url( $domain, $path = '/' ) { - $domain = strtolower( $domain ); - $path = strtolower( $path ); - $id = wp_cache_get( md5( $domain . $path ), 'blog-id-cache' ); - - if ( $id == -1 ) { // blog does not exist - return 0; - } elseif ( $id ) { - return (int) $id; - } - - $args = array( - 'domain' => $domain, - 'path' => $path, - 'fields' => 'ids', - 'number' => 1, - 'update_site_meta_cache' => false, - ); - $result = get_sites( $args ); - $id = array_shift( $result ); - - if ( ! $id ) { - wp_cache_set( md5( $domain . $path ), -1, 'blog-id-cache' ); - return 0; - } - - wp_cache_set( md5( $domain . $path ), $id, 'blog-id-cache' ); - - return $id; -} - -// Admin functions - -/** - * Checks an email address against a list of banned domains. - * - * This function checks against the Banned Email Domains list - * at wp-admin/network/settings.php. The check is only run on - * self-registrations; user creation at wp-admin/network/users.php - * bypasses this check. - * - * @since MU (3.0.0) - * - * @param string $user_email The email provided by the user at registration. - * @return bool Returns true when the email address is banned. - */ -function is_email_address_unsafe( $user_email ) { - $banned_names = get_site_option( 'banned_email_domains' ); - if ( $banned_names && ! is_array( $banned_names ) ) { - $banned_names = explode( "\n", $banned_names ); - } - - $is_email_address_unsafe = false; - - if ( $banned_names && is_array( $banned_names ) && false !== strpos( $user_email, '@', 1 ) ) { - $banned_names = array_map( 'strtolower', $banned_names ); - $normalized_email = strtolower( $user_email ); - - list( $email_local_part, $email_domain ) = explode( '@', $normalized_email ); - - foreach ( $banned_names as $banned_domain ) { - if ( ! $banned_domain ) { - continue; - } - - if ( $email_domain == $banned_domain ) { - $is_email_address_unsafe = true; - break; - } - - $dotted_domain = ".$banned_domain"; - if ( $dotted_domain === substr( $normalized_email, -strlen( $dotted_domain ) ) ) { - $is_email_address_unsafe = true; - break; - } - } - } - - /** - * Filters whether an email address is unsafe. - * - * @since 3.5.0 - * - * @param bool $is_email_address_unsafe Whether the email address is "unsafe". Default false. - * @param string $user_email User email address. - */ - return apply_filters( 'is_email_address_unsafe', $is_email_address_unsafe, $user_email ); -} - -/** - * Sanitize and validate data required for a user sign-up. - * - * Verifies the validity and uniqueness of user names and user email addresses, - * and checks email addresses against admin-provided domain whitelists and blacklists. - * - * The {@see 'wpmu_validate_user_signup'} hook provides an easy way to modify the sign-up - * process. The value $result, which is passed to the hook, contains both the user-provided - * info and the error messages created by the function. {@see 'wpmu_validate_user_signup'} - * allows you to process the data in any way you'd like, and unset the relevant errors if - * necessary. - * - * @since MU (3.0.0) - * - * @global wpdb $wpdb WordPress database abstraction object. - * - * @param string $user_name The login name provided by the user. - * @param string $user_email The email provided by the user. - * @return array Contains username, email, and error messages. - */ -function wpmu_validate_user_signup( $user_name, $user_email ) { - global $wpdb; - - $errors = new WP_Error(); - - $orig_username = $user_name; - $user_name = preg_replace( '/\s+/', '', sanitize_user( $user_name, true ) ); - - if ( $user_name != $orig_username || preg_match( '/[^a-z0-9]/', $user_name ) ) { - $errors->add( 'user_name', __( 'Usernames can only contain lowercase letters (a-z) and numbers.' ) ); - $user_name = $orig_username; - } - - $user_email = sanitize_email( $user_email ); - - if ( empty( $user_name ) ) { - $errors->add( 'user_name', __( 'Please enter a username.' ) ); - } - - $illegal_names = get_site_option( 'illegal_names' ); - if ( ! is_array( $illegal_names ) ) { - $illegal_names = array( 'www', 'web', 'root', 'admin', 'main', 'invite', 'administrator' ); - add_site_option( 'illegal_names', $illegal_names ); - } - if ( in_array( $user_name, $illegal_names ) ) { - $errors->add( 'user_name', __( 'Sorry, that username is not allowed.' ) ); - } - - /** This filter is documented in wp-includes/user.php */ - $illegal_logins = (array) apply_filters( 'illegal_user_logins', array() ); - - if ( in_array( strtolower( $user_name ), array_map( 'strtolower', $illegal_logins ) ) ) { - $errors->add( 'user_name', __( 'Sorry, that username is not allowed.' ) ); - } - - if ( ! is_email( $user_email ) ) { - $errors->add( 'user_email', __( 'Please enter a valid email address.' ) ); - } elseif ( is_email_address_unsafe( $user_email ) ) { - $errors->add( 'user_email', __( 'You cannot use that email address to signup. We are having problems with them blocking some of our email. Please use another email provider.' ) ); - } - - if ( strlen( $user_name ) < 4 ) { - $errors->add( 'user_name', __( 'Username must be at least 4 characters.' ) ); - } - - if ( strlen( $user_name ) > 60 ) { - $errors->add( 'user_name', __( 'Username may not be longer than 60 characters.' ) ); - } - - // all numeric? - if ( preg_match( '/^[0-9]*$/', $user_name ) ) { - $errors->add( 'user_name', __( 'Sorry, usernames must have letters too!' ) ); - } - - $limited_email_domains = get_site_option( 'limited_email_domains' ); - if ( is_array( $limited_email_domains ) && ! empty( $limited_email_domains ) ) { - $limited_email_domains = array_map( 'strtolower', $limited_email_domains ); - $emaildomain = strtolower( substr( $user_email, 1 + strpos( $user_email, '@' ) ) ); - if ( ! in_array( $emaildomain, $limited_email_domains, true ) ) { - $errors->add( 'user_email', __( 'Sorry, that email address is not allowed!' ) ); - } - } - - // Check if the username has been used already. - if ( username_exists( $user_name ) ) { - $errors->add( 'user_name', __( 'Sorry, that username already exists!' ) ); - } - - // 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!' ) ); - } - - // Has someone already signed up for this username? - $signup = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->signups WHERE user_login = %s", $user_name ) ); - if ( $signup != null ) { - $registered_at = mysql2date( 'U', $signup->registered ); - $now = time(); - $diff = $now - $registered_at; - // If registered more than two days ago, cancel registration and let this signup go through. - if ( $diff > 2 * DAY_IN_SECONDS ) { - $wpdb->delete( $wpdb->signups, array( 'user_login' => $user_name ) ); - } else { - $errors->add( 'user_name', __( 'That username is currently reserved but may be available in a couple of days.' ) ); - } - } - - $signup = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->signups WHERE user_email = %s", $user_email ) ); - if ( $signup != null ) { - $diff = time() - mysql2date( 'U', $signup->registered ); - // If registered more than two days ago, cancel registration and let this signup go through. - if ( $diff > 2 * DAY_IN_SECONDS ) { - $wpdb->delete( $wpdb->signups, array( 'user_email' => $user_email ) ); - } else { - $errors->add( 'user_email', __( 'That email address has already been used. Please check your inbox for an activation email. It will become available in a couple of days if you do nothing.' ) ); - } - } - - $result = array( - 'user_name' => $user_name, - 'orig_username' => $orig_username, - 'user_email' => $user_email, - 'errors' => $errors, - ); - - /** - * Filters the validated user registration details. - * - * This does not allow you to override the username or email of the user during - * registration. The values are solely used for validation and error handling. - * - * @since MU (3.0.0) - * - * @param array $result { - * The array of user name, email and the error messages. - * - * @type string $user_name Sanitized and unique username. - * @type string $orig_username Original username. - * @type string $user_email User email address. - * @type WP_Error $errors WP_Error object containing any errors found. - * } - */ - return apply_filters( 'wpmu_validate_user_signup', $result ); -} - -/** - * Processes new site registrations. - * - * Checks the data provided by the user during blog signup. Verifies - * the validity and uniqueness of blog paths and domains. - * - * This function prevents the current user from registering a new site - * with a blogname equivalent to another user's login name. Passing the - * $user parameter to the function, where $user is the other user, is - * effectively an override of this limitation. - * - * Filter {@see 'wpmu_validate_blog_signup'} if you want to modify - * the way that WordPress validates new site signups. - * - * @since MU (3.0.0) - * - * @global wpdb $wpdb WordPress database abstraction object. - * @global string $domain - * - * @param string $blogname The blog name provided by the user. Must be unique. - * @param string $blog_title The blog title provided by the user. - * @param WP_User|string $user Optional. The user object to check against the new site name. - * @return array Contains the new site data and error messages. - */ -function wpmu_validate_blog_signup( $blogname, $blog_title, $user = '' ) { - global $wpdb, $domain; - - $current_network = get_network(); - $base = $current_network->path; - - $blog_title = strip_tags( $blog_title ); - - $errors = new WP_Error(); - $illegal_names = get_site_option( 'illegal_names' ); - if ( $illegal_names == false ) { - $illegal_names = array( 'www', 'web', 'root', 'admin', 'main', 'invite', 'administrator' ); - add_site_option( 'illegal_names', $illegal_names ); - } - - /* - * On sub dir installations, some names are so illegal, only a filter can - * spring them from jail. - */ - if ( ! is_subdomain_install() ) { - $illegal_names = array_merge( $illegal_names, get_subdirectory_reserved_names() ); - } - - if ( empty( $blogname ) ) { - $errors->add( 'blogname', __( 'Please enter a site name.' ) ); - } - - if ( preg_match( '/[^a-z0-9]+/', $blogname ) ) { - $errors->add( 'blogname', __( 'Site names can only contain lowercase letters (a-z) and numbers.' ) ); - } - - if ( in_array( $blogname, $illegal_names ) ) { - $errors->add( 'blogname', __( 'That name is not allowed.' ) ); - } - - /** - * Filters the minimum site name length required when validating a site signup. - * - * @since 4.8.0 - * - * @param int $length The minimum site name length. Default 4. - */ - $minimum_site_name_length = apply_filters( 'minimum_site_name_length', 4 ); - - if ( strlen( $blogname ) < $minimum_site_name_length ) { - /* translators: %s: Minimum site name length. */ - $errors->add( 'blogname', sprintf( _n( 'Site name must be at least %s character.', 'Site name must be at least %s characters.', $minimum_site_name_length ), number_format_i18n( $minimum_site_name_length ) ) ); - } - - // do not allow users to create a blog that conflicts with a page on the main blog. - if ( ! is_subdomain_install() && $wpdb->get_var( $wpdb->prepare( 'SELECT post_name FROM ' . $wpdb->get_blog_prefix( $current_network->site_id ) . "posts WHERE post_type = 'page' AND post_name = %s", $blogname ) ) ) { - $errors->add( 'blogname', __( 'Sorry, you may not use that site name.' ) ); - } - - // all numeric? - if ( preg_match( '/^[0-9]*$/', $blogname ) ) { - $errors->add( 'blogname', __( 'Sorry, site names must have letters too!' ) ); - } - - /** - * Filters the new site name during registration. - * - * The name is the site's subdomain or the site's subdirectory - * path depending on the network settings. - * - * @since MU (3.0.0) - * - * @param string $blogname Site name. - */ - $blogname = apply_filters( 'newblogname', $blogname ); - - $blog_title = wp_unslash( $blog_title ); - - if ( empty( $blog_title ) ) { - $errors->add( 'blog_title', __( 'Please enter a site title.' ) ); - } - - // Check if the domain/path has been used already. - if ( is_subdomain_install() ) { - $mydomain = $blogname . '.' . preg_replace( '|^www\.|', '', $domain ); - $path = $base; - } else { - $mydomain = "$domain"; - $path = $base . $blogname . '/'; - } - if ( domain_exists( $mydomain, $path, $current_network->id ) ) { - $errors->add( 'blogname', __( 'Sorry, that site already exists!' ) ); - } - - if ( username_exists( $blogname ) ) { - if ( ! is_object( $user ) || ( is_object( $user ) && ( $user->user_login != $blogname ) ) ) { - $errors->add( 'blogname', __( 'Sorry, that site is reserved!' ) ); - } - } - - // Has someone already signed up for this domain? - $signup = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->signups WHERE domain = %s AND path = %s", $mydomain, $path ) ); // TODO: Check email too? - if ( ! empty( $signup ) ) { - $diff = time() - mysql2date( 'U', $signup->registered ); - // If registered more than two days ago, cancel registration and let this signup go through. - if ( $diff > 2 * DAY_IN_SECONDS ) { - $wpdb->delete( - $wpdb->signups, - array( - 'domain' => $mydomain, - 'path' => $path, - ) - ); - } else { - $errors->add( 'blogname', __( 'That site is currently reserved but may be available in a couple days.' ) ); - } - } - - $result = array( - 'domain' => $mydomain, - 'path' => $path, - 'blogname' => $blogname, - 'blog_title' => $blog_title, - 'user' => $user, - 'errors' => $errors, - ); - - /** - * Filters site details and error messages following registration. - * - * @since MU (3.0.0) - * - * @param array $result { - * Array of domain, path, blog name, blog title, user and error messages. - * - * @type string $domain Domain for the site. - * @type string $path Path for the site. Used in subdirectory installations. - * @type string $blogname The unique site name (slug). - * @type string $blog_title Blog title. - * @type string|WP_User $user By default, an empty string. A user object if provided. - * @type WP_Error $errors WP_Error containing any errors found. - * } - */ - return apply_filters( 'wpmu_validate_blog_signup', $result ); -} - -/** - * Record site signup information for future activation. - * - * @since MU (3.0.0) - * - * @global wpdb $wpdb WordPress database abstraction object. - * - * @param string $domain The requested domain. - * @param string $path The requested path. - * @param string $title The requested site title. - * @param string $user The user's requested login name. - * @param string $user_email The user's email address. - * @param array $meta Optional. Signup meta data. By default, contains the requested privacy setting and lang_id. - */ -function wpmu_signup_blog( $domain, $path, $title, $user, $user_email, $meta = array() ) { - global $wpdb; - - $key = substr( md5( time() . wp_rand() . $domain ), 0, 16 ); - - /** - * Filters the metadata for a site signup. - * - * The metadata will be serialized prior to storing it in the database. - * - * @since 4.8.0 - * - * @param array $meta Signup meta data. Default empty array. - * @param string $domain The requested domain. - * @param string $path The requested path. - * @param string $title The requested site title. - * @param string $user The user's requested login name. - * @param string $user_email The user's email address. - * @param string $key The user's activation key. - */ - $meta = apply_filters( 'signup_site_meta', $meta, $domain, $path, $title, $user, $user_email, $key ); - - $wpdb->insert( - $wpdb->signups, - array( - 'domain' => $domain, - 'path' => $path, - 'title' => $title, - 'user_login' => $user, - 'user_email' => $user_email, - 'registered' => current_time( 'mysql', true ), - 'activation_key' => $key, - 'meta' => serialize( $meta ), - ) - ); - - /** - * Fires after site signup information has been written to the database. - * - * @since 4.4.0 - * - * @param string $domain The requested domain. - * @param string $path The requested path. - * @param string $title The requested site title. - * @param string $user The user's requested login name. - * @param string $user_email The user's email address. - * @param string $key The user's activation key. - * @param array $meta Signup meta data. By default, contains the requested privacy setting and lang_id. - */ - do_action( 'after_signup_site', $domain, $path, $title, $user, $user_email, $key, $meta ); -} - -/** - * Record user signup information for future activation. - * - * This function is used when user registration is open but - * new site registration is not. - * - * @since MU (3.0.0) - * - * @global wpdb $wpdb WordPress database abstraction object. - * - * @param string $user The user's requested login name. - * @param string $user_email The user's email address. - * @param array $meta Optional. Signup meta data. Default empty array. - */ -function wpmu_signup_user( $user, $user_email, $meta = array() ) { - global $wpdb; - - // Format data - $user = preg_replace( '/\s+/', '', sanitize_user( $user, true ) ); - $user_email = sanitize_email( $user_email ); - $key = substr( md5( time() . wp_rand() . $user_email ), 0, 16 ); - - /** - * Filters the metadata for a user signup. - * - * The metadata will be serialized prior to storing it in the database. - * - * @since 4.8.0 - * - * @param array $meta Signup meta data. Default empty array. - * @param string $user The user's requested login name. - * @param string $user_email The user's email address. - * @param string $key The user's activation key. - */ - $meta = apply_filters( 'signup_user_meta', $meta, $user, $user_email, $key ); - - $wpdb->insert( - $wpdb->signups, - array( - 'domain' => '', - 'path' => '', - 'title' => '', - 'user_login' => $user, - 'user_email' => $user_email, - 'registered' => current_time( 'mysql', true ), - 'activation_key' => $key, - 'meta' => serialize( $meta ), - ) - ); - - /** - * Fires after a user's signup information has been written to the database. - * - * @since 4.4.0 - * - * @param string $user The user's requested login name. - * @param string $user_email The user's email address. - * @param string $key The user's activation key. - * @param array $meta Signup meta data. Default empty array. - */ - do_action( 'after_signup_user', $user, $user_email, $key, $meta ); -} - -/** - * Send a confirmation request email to a user when they sign up for a new site. The new site will not become active - * until the confirmation link is clicked. - * - * This is the notification function used when site registration - * is enabled. - * - * Filter {@see 'wpmu_signup_blog_notification'} to bypass this function or - * replace it with your own notification behavior. - * - * Filter {@see 'wpmu_signup_blog_notification_email'} and - * {@see 'wpmu_signup_blog_notification_subject'} to change the content - * and subject line of the email sent to newly registered users. - * - * @since MU (3.0.0) - * - * @param string $domain The new blog domain. - * @param string $path The new blog path. - * @param string $title The site title. - * @param string $user_login The user's login name. - * @param string $user_email The user's email address. - * @param string $key The activation key created in wpmu_signup_blog() - * @param array $meta Optional. Signup meta data. By default, contains the requested privacy setting and lang_id. - * @return bool - */ -function wpmu_signup_blog_notification( $domain, $path, $title, $user_login, $user_email, $key, $meta = array() ) { - /** - * Filters whether to bypass the new site email notification. - * - * @since MU (3.0.0) - * - * @param string|bool $domain Site domain. - * @param string $path Site path. - * @param string $title Site title. - * @param string $user_login User login name. - * @param string $user_email User email address. - * @param string $key Activation key created in wpmu_signup_blog(). - * @param array $meta Signup meta data. By default, contains the requested privacy setting and lang_id. - */ - if ( ! apply_filters( 'wpmu_signup_blog_notification', $domain, $path, $title, $user_login, $user_email, $key, $meta ) ) { - return false; - } - - // Send email with activation link. - if ( ! is_subdomain_install() || get_current_network_id() != 1 ) { - $activate_url = network_site_url( "wp-activate.php?key=$key" ); - } else { - $activate_url = "http://{$domain}{$path}wp-activate.php?key=$key"; // @todo use *_url() API - } - - $activate_url = esc_url( $activate_url ); - $admin_email = get_site_option( 'admin_email' ); - if ( $admin_email == '' ) { - $admin_email = 'support@' . $_SERVER['SERVER_NAME']; - } - $from_name = get_site_option( 'site_name' ) == '' ? 'WordPress' : esc_html( get_site_option( 'site_name' ) ); - $message_headers = "From: \"{$from_name}\" <{$admin_email}>\n" . 'Content-Type: text/plain; charset="' . get_option( 'blog_charset' ) . "\"\n"; - - $user = get_user_by( 'login', $user_login ); - $switched_locale = switch_to_locale( get_user_locale( $user ) ); - - $message = sprintf( - /** - * Filters the message content of the new blog notification email. - * - * Content should be formatted for transmission via wp_mail(). - * - * @since MU (3.0.0) - * - * @param string $content Content of the notification email. - * @param string $domain Site domain. - * @param string $path Site path. - * @param string $title Site title. - * @param string $user_login User login name. - * @param string $user_email User email address. - * @param string $key Activation key created in wpmu_signup_blog(). - * @param array $meta Signup meta data. By default, contains the requested privacy setting and lang_id. - */ - apply_filters( - 'wpmu_signup_blog_notification_email', - /* translators: New site notification email. 1: Activation URL, 2: New site URL. */ - __( "To activate your blog, please click the following link:\n\n%1\$s\n\nAfter you activate, you will receive *another email* with your login.\n\nAfter you activate, you can visit your site here:\n\n%2\$s" ), - $domain, - $path, - $title, - $user_login, - $user_email, - $key, - $meta - ), - $activate_url, - esc_url( "http://{$domain}{$path}" ), - $key - ); - - $subject = sprintf( - /** - * Filters the subject of the new blog notification email. - * - * @since MU (3.0.0) - * - * @param string $subject Subject of the notification email. - * @param string $domain Site domain. - * @param string $path Site path. - * @param string $title Site title. - * @param string $user_login User login name. - * @param string $user_email User email address. - * @param string $key Activation key created in wpmu_signup_blog(). - * @param array $meta Signup meta data. By default, contains the requested privacy setting and lang_id. - */ - apply_filters( - 'wpmu_signup_blog_notification_subject', - /* translators: New site notification email subject. 1: Network title, 2: New site URL. */ - _x( '[%1$s] Activate %2$s', 'New site notification email subject' ), - $domain, - $path, - $title, - $user_login, - $user_email, - $key, - $meta - ), - $from_name, - esc_url( 'http://' . $domain . $path ) - ); - - wp_mail( $user_email, wp_specialchars_decode( $subject ), $message, $message_headers ); - - if ( $switched_locale ) { - restore_previous_locale(); - } - - return true; -} - -/** - * Send a confirmation request email to a user when they sign up for a new user account (without signing up for a site - * at the same time). The user account will not become active until the confirmation link is clicked. - * - * This is the notification function used when no new site has - * been requested. - * - * Filter {@see 'wpmu_signup_user_notification'} to bypass this function or - * replace it with your own notification behavior. - * - * Filter {@see 'wpmu_signup_user_notification_email'} and - * {@see 'wpmu_signup_user_notification_subject'} to change the content - * and subject line of the email sent to newly registered users. - * - * @since MU (3.0.0) - * - * @param string $user_login The user's login name. - * @param string $user_email The user's email address. - * @param string $key The activation key created in wpmu_signup_user() - * @param array $meta Optional. Signup meta data. Default empty array. - * @return bool - */ -function wpmu_signup_user_notification( $user_login, $user_email, $key, $meta = array() ) { - /** - * Filters whether to bypass the email notification for new user sign-up. - * - * @since MU (3.0.0) - * - * @param string $user_login User login name. - * @param string $user_email User email address. - * @param string $key Activation key created in wpmu_signup_user(). - * @param array $meta Signup meta data. Default empty array. - * |
