X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/a6f44f0edcda2471c5a33e4156c1c9488c7f3210..refs/tags/wordpress-3.7:/wp-includes/ms-functions.php diff --git a/wp-includes/ms-functions.php b/wp-includes/ms-functions.php index 9f8c31a8..fd92b2c5 100644 --- a/wp-includes/ms-functions.php +++ b/wp-includes/ms-functions.php @@ -17,8 +17,6 @@ * @return array Site and user count for the network. */ function get_sitestats() { - global $wpdb; - $stats = array( 'blogs' => get_blog_count(), 'users' => get_user_count(), @@ -138,10 +136,13 @@ function get_user_count() { * * @since MU 1.0 * - * @param int $id Optional. A site_id. + * @param int $network_id Deprecated, not supported. * @return int */ -function get_blog_count( $id = 0 ) { +function get_blog_count( $network_id = 0 ) { + if ( func_num_args() ) + _deprecated_argument( __FUNCTION__, '3.1' ); + return get_site_option( 'blog_count' ); } @@ -627,7 +628,7 @@ function wpmu_validate_blog_signup($blogname, $blog_title, $user = '') { * @param string $user_email The user's email address. * @param array $meta By default, contains the requested privacy setting and lang_id. */ -function wpmu_signup_blog($domain, $path, $title, $user, $user_email, $meta = '') { +function wpmu_signup_blog( $domain, $path, $title, $user, $user_email, $meta = array() ) { global $wpdb; $key = substr( md5( time() . rand() . $domain ), 0, 16 ); @@ -660,7 +661,7 @@ function wpmu_signup_blog($domain, $path, $title, $user, $user_email, $meta = '' * @param string $user_email The user's email address. * @param array $meta By default, this is an empty array. */ -function wpmu_signup_user($user, $user_email, $meta = '') { +function wpmu_signup_user( $user, $user_email, $meta = array() ) { global $wpdb; // Format data @@ -703,11 +704,11 @@ function wpmu_signup_user($user, $user_email, $meta = '') { * @param string $title The site title. * @param string $user The user's login name. * @param string $user_email The user's email address. - * @param array $meta By default, contains the requested privacy setting and lang_id. * @param string $key The activation key created in wpmu_signup_blog() + * @param array $meta By default, contains the requested privacy setting and lang_id. * @return bool */ -function wpmu_signup_blog_notification($domain, $path, $title, $user, $user_email, $key, $meta = '') { +function wpmu_signup_blog_notification( $domain, $path, $title, $user, $user_email, $key, $meta = array() ) { global $current_site; if ( !apply_filters('wpmu_signup_blog_notification', $domain, $path, $title, $user, $user_email, $key, $meta) ) @@ -764,11 +765,11 @@ function wpmu_signup_blog_notification($domain, $path, $title, $user, $user_emai * * @param string $user The user's login name. * @param string $user_email The user's email address. - * @param array $meta By default, an empty array. * @param string $key The activation key created in wpmu_signup_user() + * @param array $meta By default, an empty array. * @return bool */ -function wpmu_signup_user_notification($user, $user_email, $key, $meta = '') { +function wpmu_signup_user_notification( $user, $user_email, $key, $meta = array() ) { if ( !apply_filters('wpmu_signup_user_notification', $user, $user_email, $key, $meta) ) return false; @@ -818,7 +819,7 @@ function wpmu_signup_user_notification($user, $user_email, $key, $meta = '') { * @return array An array containing information about the activated user and/or blog */ function wpmu_activate_signup($key) { - global $wpdb, $current_site; + global $wpdb; $signup = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->signups WHERE activation_key = %s", $key) ); @@ -936,7 +937,10 @@ function wpmu_create_user( $user_name, $password, $email ) { * @param int $site_id Optional. Only relevant on multi-network installs. * @return mixed Returns WP_Error object on failure, int $blog_id on success */ -function wpmu_create_blog($domain, $path, $title, $user_id, $meta = '', $site_id = 1) { +function wpmu_create_blog( $domain, $path, $title, $user_id, $meta = array(), $site_id = 1 ) { + $defaults = array( 'public' => 0 ); + $meta = wp_parse_args( $meta, $defaults ); + $domain = preg_replace( '/\s+/', '', sanitize_user( $domain, true ) ); if ( is_subdomain_install() ) @@ -964,15 +968,15 @@ function wpmu_create_blog($domain, $path, $title, $user_id, $meta = '', $site_id add_user_to_blog($blog_id, $user_id, 'administrator'); - if ( is_array($meta) ) foreach ($meta as $key => $value) { - if ( $key == 'public' || $key == 'archived' || $key == 'mature' || $key == 'spam' || $key == 'deleted' || $key == 'lang_id' ) + foreach ( $meta as $key => $value ) { + if ( in_array( $key, array( 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id' ) ) ) update_blog_status( $blog_id, $key, $value ); else update_option( $key, $value ); } add_option( 'WPLANG', get_site_option( 'WPLANG' ) ); - update_option( 'blog_public', (int)$meta['public'] ); + update_option( 'blog_public', (int) $meta['public'] ); if ( ! is_super_admin( $user_id ) && ! get_user_meta( $user_id, 'primary_blog', true ) ) update_user_meta( $user_id, 'primary_blog', $blog_id ); @@ -1098,6 +1102,9 @@ function insert_blog($domain, $path, $site_id) { $blog_id = $wpdb->insert_id; refresh_blog_details( $blog_id ); + + wp_maybe_update_network_site_counts(); + return $blog_id; } @@ -1197,7 +1204,7 @@ function install_blog_defaults($blog_id, $user_id) { * @param array $meta Optional. Not used in the default function, but is passed along to hooks for customization. * @return bool */ -function wpmu_welcome_notification($blog_id, $user_id, $password, $title, $meta = '') { +function wpmu_welcome_notification( $blog_id, $user_id, $password, $title, $meta = array() ) { global $current_site; if ( !apply_filters('wpmu_welcome_notification', $blog_id, $user_id, $password, $title, $meta) ) @@ -1261,7 +1268,7 @@ We hope you enjoy your new site. Thanks! * @param array $meta Optional. Not used in the default function, but is passed along to hooks for customization. * @return bool */ -function wpmu_welcome_user_notification($user_id, $password, $meta = '') { +function wpmu_welcome_user_notification( $user_id, $password, $meta = array() ) { global $current_site; if ( !apply_filters('wpmu_welcome_user_notification', $user_id, $password, $meta) ) @@ -1297,8 +1304,10 @@ function wpmu_welcome_user_notification($user_id, $password, $meta = '') { /** * Get the current site info. * - * Returns an object containing the ID, domain, path, and site_name - * of the site being viewed. + * Returns an object containing the 'id', 'domain', 'path', and 'site_name' + * properties of the site being viewed. + * + * @see wpmu_current_site() * * @since MU * @@ -1470,7 +1479,8 @@ function update_posts_count( $deprecated = '' ) { function wpmu_log_new_registrations( $blog_id, $user_id ) { global $wpdb; $user = get_userdata( (int) $user_id ); - $wpdb->insert( $wpdb->registration_log, array('email' => $user->user_email, 'IP' => preg_replace( '/[^0-9., ]/', '', wp_unslash( $_SERVER['REMOTE_ADDR'] ) ), 'blog_id' => $blog_id, 'date_registered' => current_time('mysql')) ); + if ( $user ) + $wpdb->insert( $wpdb->registration_log, array('email' => $user->user_email, 'IP' => preg_replace( '/[^0-9., ]/', '', wp_unslash( $_SERVER['REMOTE_ADDR'] ) ), 'blog_id' => $blog_id, 'date_registered' => current_time('mysql')) ); } /** @@ -1609,7 +1619,6 @@ function signup_nonce_check( $result ) { * @since MU */ function maybe_redirect_404() { - global $current_site; if ( is_main_site() && is_404() && defined( 'NOBLOGREDIRECT' ) && ( $destination = apply_filters( 'blog_redirect_404', NOBLOGREDIRECT ) ) ) { if ( $destination == '%siteurl%' ) $destination = network_home_url(); @@ -1706,14 +1715,17 @@ function fix_phpmailer_messageid( $phpmailer ) { * @since MU * @uses get_user_by() * - * @param string $user_login Optional. Defaults to current user. + * @param string|WP_User $user Optional. Defaults to current user. WP_User object, + * or user login name as a string. * @return bool */ -function is_user_spammy( $user_login = null ) { - if ( $user_login ) - $user = get_user_by( 'login', $user_login ); - else - $user = wp_get_current_user(); +function is_user_spammy( $user = null ) { + if ( ! is_a( $user, 'WP_User' ) ) { + if ( $user ) + $user = get_user_by( 'login', $user ); + else + $user = wp_get_current_user(); + } return $user && isset( $user->spam ) && 1 == $user->spam; } @@ -1735,21 +1747,6 @@ function update_blog_public( $old_value, $value ) { } add_action('update_option_blog_public', 'update_blog_public', 10, 2); -/** - * Get the "dashboard blog", the blog where users without a blog edit their profile data. - * - * @since MU - * @uses get_blog_details() - * - * @return int - */ -function get_dashboard_blog() { - if ( $blog = get_site_option( 'dashboard_blog' ) ) - return get_blog_details( $blog ); - - return get_blog_details( $GLOBALS['current_site']->blog_id ); -} - /** * Check whether a usermeta key has to do with the current blog. * @@ -1882,10 +1879,83 @@ function wp_schedule_update_network_counts() { * @since 3.1.0 */ function wp_update_network_counts() { + wp_update_network_user_counts(); + wp_update_network_site_counts(); +} + +/** + * Update the count of sites for the current network. + * + * If enabled through the 'enable_live_network_counts' filter, update the sites count + * on a network when a site is created or its status is updated. + * + * @since 3.7.0 + * + * @uses wp_update_network_site_counts() + */ +function wp_maybe_update_network_site_counts() { + $is_small_network = ! wp_is_large_network( 'sites' ); + + /** + * Filter the decision to update network user and site counts in real time. + * + * @since 3.7.0 + * + * @param bool $small_network Based on wp_is_large_network( $context ). + * @param string $context Context. Either 'users' or 'sites'. + */ + if ( ! apply_filters( 'enable_live_network_counts', $is_small_network, 'sites' ) ) + return; + + wp_update_network_site_counts(); +} + +/** + * Update the network-wide users count. + * + * If enabled through the 'enable_live_network_counts' filter, update the users count + * on a network when a user is created or its status is updated. + * + * @since 3.7.0 + * + * @uses wp_update_network_user_counts() + */ +function wp_maybe_update_network_user_counts() { + $is_small_network = ! wp_is_large_network( 'users' ); + + /** + * Filter the decision to update network user and site counts in real time. + * + * @since 3.7.0 + * + * @param bool $small_network Based on wp_is_large_network( $context ). + * @param string $context Context. Either 'users' or 'sites'. + */ + if ( ! apply_filters( 'enable_live_network_counts', $is_small_network, 'users' ) ) + return; + + wp_update_network_user_counts(); +} + +/** + * Update the network-wide site count. + * + * @since 3.7.0 + */ +function wp_update_network_site_counts() { global $wpdb; $count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(blog_id) as c FROM $wpdb->blogs WHERE site_id = %d AND spam = '0' AND deleted = '0' and archived = '0'", $wpdb->siteid) ); update_site_option( 'blog_count', $count ); +} + +/** + * Update the network-wide user count. + * + * @since 3.7.0 + */ +function wp_update_network_user_counts() { + global $wpdb; $count = $wpdb->get_var( "SELECT COUNT(ID) as c FROM $wpdb->users WHERE spam = '0' AND deleted = '0'" ); update_site_option( 'user_count', $count ); @@ -1923,9 +1993,9 @@ function get_space_allowed() { $space_allowed = get_site_option( 'blog_upload_space' ); if ( empty( $space_allowed ) || ! is_numeric( $space_allowed ) ) - $space_allowed = 50; + $space_allowed = 100; - return $space_allowed; + return apply_filters( 'get_space_allowed', $space_allowed ); } /** @@ -1993,3 +2063,80 @@ function wp_is_large_network( $using = 'sites' ) { $count = get_blog_count(); return apply_filters( 'wp_is_large_network', $count > 10000, 'sites', $count ); } + + +/** + * Return an array of sites for a network or networks. + * + * @since 3.7.0 + * + * @param array $args { + * Array of default arguments. Optional. + * + * @type int|array $network_id A network ID or array of network IDs. Set to null to retrieve sites + * from all networks. Defaults to current network ID. + * @type int $public Retrieve public or non-public sites. Default null, for any. + * @type int $archived Retrieve archived or non-archived sites. Default null, for any. + * @type int $mature Retrieve mature or non-mature sites. Default null, for any. + * @type int $spam Retrieve spam or non-spam sites. Default null, for any. + * @type int $deleted Retrieve deleted or non-deleted sites. Default null, for any. + * @type int $limit Number of sites to limit the query to. Default 100. + * @type int $offset Exclude the first x sites. Used in combination with the $limit parameter. Default 0. + * } + * @return array An empty array if the install is considered "large" via wp_is_large_network(). Otherwise, + * an associative array of site data arrays, each containing the site (network) ID, blog ID, + * site domain and path, dates registered and modified, and the language ID. Also, boolean + * values for whether the site is public, archived, mature, spam, and/or deleted. + */ +function wp_get_sites( $args = array() ) { + global $wpdb; + + if ( wp_is_large_network() ) + return array(); + + $defaults = array( + 'network_id' => $wpdb->siteid, + 'public' => null, + 'archived' => null, + 'mature' => null, + 'spam' => null, + 'deleted' => null, + 'limit' => 100, + 'offset' => 0, + ); + + $args = wp_parse_args( $args, $defaults ); + + $query = "SELECT * FROM $wpdb->blogs WHERE 1=1 "; + + if ( isset( $args['network_id'] ) && ( is_array( $args['network_id'] ) || is_numeric( $args['network_id'] ) ) ) { + $network_ids = implode( ',', wp_parse_id_list( $args['network_id'] ) ); + $query .= "AND site_id IN ($network_ids) "; + } + + if ( isset( $args['public'] ) ) + $query .= $wpdb->prepare( "AND public = %d ", $args['public'] ); + + if ( isset( $args['archived'] ) ) + $query .= $wpdb->prepare( "AND archived = %d ", $args['archived'] ); + + if ( isset( $args['mature'] ) ) + $query .= $wpdb->prepare( "AND mature = %d ", $args['mature'] ); + + if ( isset( $args['spam'] ) ) + $query .= $wpdb->prepare( "AND spam = %d ", $args['spam'] ); + + if ( isset( $args['deleted'] ) ) + $query .= $wpdb->prepare( "AND deleted = %d ", $args['deleted'] ); + + if ( isset( $args['limit'] ) && $args['limit'] ) { + if ( isset( $args['offset'] ) && $args['offset'] ) + $query .= $wpdb->prepare( "LIMIT %d , %d ", $args['offset'], $args['limit'] ); + else + $query .= $wpdb->prepare( "LIMIT %d ", $args['limit'] ); + } + + $site_results = $wpdb->get_results( $query, ARRAY_A ); + + return $site_results; +}