From 67bb939654aa28040cb1ed8bae502b7ad1d313fa Mon Sep 17 00:00:00 2001 From: Ryan Boren Date: Sat, 13 Feb 2010 22:35:11 +0000 Subject: [PATCH] Move blogs table related functions to blogs.php. Include it before ms-settings.php so that caching API can be used instead of direct queries. see #11644 git-svn-id: https://develop.svn.wordpress.org/trunk@13125 602fd350-edb4-49c9-b593-d223f7449a82 --- wp-includes/blogs.php | 500 +++++++++++++++++++++++++++++++++++ wp-includes/ms-functions.php | 489 ---------------------------------- wp-settings.php | 4 +- 3 files changed, 503 insertions(+), 490 deletions(-) create mode 100644 wp-includes/blogs.php diff --git a/wp-includes/blogs.php b/wp-includes/blogs.php new file mode 100644 index 0000000000..ac0b125343 --- /dev/null +++ b/wp-includes/blogs.php @@ -0,0 +1,500 @@ +update( $wpdb->blogs, array('last_updated' => current_time('mysql', true)), array('blog_id' => $wpdb->blogid) ); + refresh_blog_details( $wpdb->blogid ); + + do_action( 'wpmu_blog_updated', $wpdb->blogid ); +} + +function get_blogaddress_by_id( $blog_id ) { + $bloginfo = get_blog_details( (int) $blog_id, false ); // only get bare details! + return esc_url( 'http://' . $bloginfo->domain . $bloginfo->path ); +} + +function get_blogaddress_by_name( $blogname ) { + global $current_site; + + if ( is_subdomain_install() ) { + if ( $blogname == 'main' ) + $blogname = 'www'; + return esc_url( 'http://' . $blogname . '.' . $current_site->domain . $current_site->path ); + } else { + return esc_url( 'http://' . $current_site->domain . $current_site->path . $blogname . '/' ); + } +} + +function get_blogaddress_by_domain( $domain, $path ){ + if ( is_subdomain_install() ) { + $url = "http://".$domain.$path; + } else { + if ( $domain != $_SERVER['HTTP_HOST'] ) { + $blogname = substr( $domain, 0, strpos( $domain, '.' ) ); + $url = 'http://' . substr( $domain, strpos( $domain, '.' ) + 1 ) . $path; + // we're not installing the main blog + if ( $blogname != 'www.' ) + $url .= $blogname . '/'; + } else { // main blog + $url = 'http://' . $domain . $path; + } + } + return esc_url( $url ); +} + +function get_id_from_blogname( $name ) { + global $wpdb, $current_site; + $blog_id = wp_cache_get( "get_id_from_blogname_" . $name, 'blog-details' ); + if ( $blog_id ) + return $blog_id; + + if ( is_subdomain_install() ) { + $domain = $name . '.' . $current_site->domain; + $path = $current_site->path; + } else { + $domain = $current_site->domain; + $path = $current_site->path . $name . '/'; + } + $blog_id = $wpdb->get_var( $wpdb->prepare("SELECT blog_id FROM {$wpdb->blogs} WHERE domain = %s AND path = %s", $domain, $path) ); + wp_cache_set( 'get_id_from_blogname_' . $name, $blog_id, 'blog-details' ); + return $blog_id; +} + +/** + * Retrieve the details for a blog from the blogs table and blog options. + * + * @since 3.0 + * @param int $blog_id Blog ID + * @param bool $get_all Whether to retrieve all details or only the details in the blogs table. Default is true. + * @return object Blog details. + */ +function get_blog_details( $blog_id, $get_all = true ) { + global $wpdb; + + if ( !is_numeric( $blog_id ) ) + $blog_id = get_id_from_blogname( $blog_id ); + + $blog_id = (int) $blog_id; + + $all = $get_all == true ? '' : 'short'; + $details = wp_cache_get( $blog_id . $all, 'blog-details' ); + + if ( $details ) { + if ( ! is_object( $details ) ) { + if ( $details == -1 ) + return false; + else + // Clear old pre-serialized objects. Cache clients do better with that. + wp_cache_delete( $blog_id . $all, 'blog-details' ); + } + return $details; + } + + $details = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE blog_id = %d", $blog_id ) ); + if ( ! $details ) { + wp_cache_set( $blog_id . $all, -1, 'blog-details' ); + return false; + } + + if ( ! $get_all ) { + wp_cache_set( $blog_id . $all, $details, 'blog-details' ); + return $details; + } + + $details->blogname = get_blog_option( $blog_id, 'blogname' ); + $details->siteurl = get_blog_option( $blog_id, 'siteurl' ); + $details->post_count = get_blog_option( $blog_id, 'post_count' ); + + $details = apply_filters( 'blog_details', $details ); + + wp_cache_set( $blog_id . $all, $details, 'blog-details' ); + + $key = md5( $details->domain . $details->path ); + wp_cache_set( $key, $details, 'blog-lookup' ); + + return $details; +} + +/** + * Clear the blog details cache. + * + * @since 3.0 + * + * @param int $blog_id Blog ID + */ +function refresh_blog_details( $blog_id ) { + $blog_id = (int) $blog_id; + $details = get_blog_details( $blog_id, false ); + + wp_cache_delete( $blog_id , 'blog-details' ); + wp_cache_delete( $blog_id . 'short' , 'blog-details' ); + wp_cache_delete( md5( $details->domain . $details->path ) , 'blog-lookup' ); + wp_cache_delete( 'current_blog_' . $details->domain, 'site-options' ); + wp_cache_delete( 'current_blog_' . $details->domain . $details->path, 'site-options' ); +} + +/** + * Update the details for a blog. Updates the blogs table for a given blog id. + * + * @since 3.0 + * + * @param int $blog_id Blog ID + * @param array $details Array of details keyed by blogs table field names. + * @return bool True if update succeeds, false otherwise. + */ +function update_blog_details( $blog_id, $details = array() ) { + global $wpdb; + + if ( empty($details) ) + return false; + + if ( is_object($details) ) + $details = get_object_vars($details); + + $current_details = get_blog_details($blog_id, false); + if ( empty($current_details) ) + return false; + + $current_details = get_object_vars($current_details); + + $details = array_merge($current_details, $details); + $details['last_updated'] = current_time('mysql', true); + + $update_details = array(); + $fields = array( 'site_id', 'domain', 'path', 'registered', 'last_updated', 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id'); + foreach ( array_intersect( array_keys( $details ), $fields ) as $field ) + $update_details[$field] = $details[$field]; + + $result = $wpdb->update( $wpdb->blogs, $update_details, array('blog_id' => $blog_id) ); + + // If spam status changed, issue actions. + if ( $details[ 'spam' ] != $current_details[ 'spam' ] ) { + if ( $details[ 'spam' ] == 1 ) + do_action( "make_spam_blog", $blog_id ); + else + do_action( "make_ham_blog", $blog_id ); + } + + if ( isset($details[ 'public' ]) ) + update_blog_option( $blog_id, 'blog_public', $details[ 'public' ], false ); + + refresh_blog_details($blog_id); + + return true; +} + +/** + * Retrieve option value based on setting name and blog_id. + * + * If the option does not exist or does not have a value, then the return value + * will be false. This is useful to check whether you need to install an option + * and is commonly used during installation of plugin options and to test + * whether upgrading is required. + * + * There is a filter called 'blog_option_$option' with the $option being + * replaced with the option name. The filter takes two parameters. $value and + * $blog_id. It returns $value. + * The 'option_$option' filter in get_option() is not called. + * + * @since NA + * @package WordPress MU + * @subpackage Option + * @uses apply_filters() Calls 'blog_option_$optionname' with the option name value. + * + * @param int $blog_id is the id of the blog. + * @param string $setting Name of option to retrieve. Should already be SQL-escaped + * @param string $default (optional) Default value returned if option not found. + * @return mixed Value set for the option. + */ +function get_blog_option( $blog_id, $setting, $default = false ) { + global $wpdb; + + $key = $blog_id."-".$setting."-blog_option"; + $value = wp_cache_get( $key, "site-options" ); + if ( $value == null ) { + if ( $blog_id == $wpdb->blogid ) { + $value = get_option( $setting, $default ); + $notoptions = wp_cache_get( 'notoptions', 'options' ); + if ( isset( $notoptions[$setting] ) ) + wp_cache_set( $key, 'noop', 'site-options' ); + elseif ( $value == false ) + wp_cache_set( $key, 'falsevalue', 'site-options' ); + else + wp_cache_set( $key, $value, 'site-options' ); + } else { + $blog_prefix = $wpdb->get_blog_prefix( $blog_id ); + $row = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$blog_prefix}options WHERE option_name = %s", $setting ) ); + if ( is_object( $row ) ) { // Has to be get_row instead of get_var because of funkiness with 0, false, null values + $value = $row->option_value; + if ( $value == false ) + wp_cache_set( $key, 'falsevalue', 'site-options' ); + else + wp_cache_set( $key, $value, 'site-options' ); + } else { // option does not exist, so we must cache its non-existence + wp_cache_set( $key, 'noop', 'site-options' ); + $value = $default; + } + } + } elseif ( $value == 'noop' ) { + $value = $default; + } elseif ( $value == 'falsevalue' ) { + $value = false; + } + // If home is not set use siteurl. + if ( 'home' == $setting && '' == $value ) + return get_blog_option( $blog_id, 'siteurl' ); + + if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting ) + $value = untrailingslashit( $value ); + + if (! @unserialize( $value ) ) + $value = stripslashes( $value ); + + return apply_filters( 'blog_option_' . $setting, maybe_unserialize( $value ), $blog_id ); +} + +function add_blog_option( $id, $key, $value ) { + $id = (int) $id; + + switch_to_blog($id); + add_option( $key, $value ); + restore_current_blog(); + wp_cache_set( $id."-".$key."-blog_option", $value, 'site-options' ); +} + +function delete_blog_option( $id, $key ) { + $id = (int) $id; + + switch_to_blog($id); + delete_option( $key ); + restore_current_blog(); + wp_cache_set( $id."-".$key."-blog_option", '', 'site-options' ); +} + +function update_blog_option( $id, $key, $value, $refresh = true ) { + $id = (int) $id; + + switch_to_blog($id); + update_option( $key, $value ); + restore_current_blog(); + + if ( $refresh == true ) + refresh_blog_details( $id ); + wp_cache_set( $id."-".$key."-blog_option", $value, 'site-options'); +} + +function switch_to_blog( $new_blog, $validate = false ) { + global $wpdb, $table_prefix, $blog_id, $switched, $switched_stack, $wp_roles, $current_user, $wp_object_cache; + + if ( empty($new_blog) ) + $new_blog = $blog_id; + + if ( $validate && ! get_blog_details( $new_blog ) ) + return false; + + if ( empty($switched_stack) ) + $switched_stack = array(); + + $switched_stack[] = $blog_id; + + /* If we're switching to the same blog id that we're on, + * set the right vars, do the associated actions, but skip + * the extra unnecessary work */ + if ( $blog_id == $new_blog ) { + do_action( 'switch_blog', $blog_id, $blog_id ); + $switched = true; + return true; + } + + $wpdb->set_blog_id($new_blog); + $table_prefix = $wpdb->prefix; + $prev_blog_id = $blog_id; + $blog_id = $new_blog; + + if ( is_object( $wp_roles ) ) { + $wpdb->suppress_errors(); + if ( method_exists( $wp_roles ,'_init' ) ) + $wp_roles->_init(); + elseif ( method_exists( $wp_roles, '__construct' ) ) + $wp_roles->__construct(); + $wpdb->suppress_errors( false ); + } + + if ( is_object( $current_user ) ) + $current_user->for_blog( $blog_id ); + + if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) ) + $global_groups = $wp_object_cache->global_groups; + else + $global_groups = false; + + wp_cache_init(); + if ( function_exists('wp_cache_add_global_groups') ) { + if ( is_array( $global_groups ) ) + wp_cache_add_global_groups( $global_groups ); + else + wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'site-transient', 'global-posts' ) ); + wp_cache_add_non_persistent_groups(array( 'comment', 'counts', 'plugins' )); + } + + do_action('switch_blog', $blog_id, $prev_blog_id); + $switched = true; + return true; +} + +function restore_current_blog() { + global $table_prefix, $wpdb, $blog_id, $switched, $switched_stack, $wp_roles, $current_user, $wp_object_cache; + + if ( !$switched ) + return false; + + if ( !is_array( $switched_stack ) ) + return false; + + $blog = array_pop( $switched_stack ); + if ( $blog_id == $blog ) { + do_action( 'switch_blog', $blog, $blog ); + /* If we still have items in the switched stack, consider ourselves still 'switched' */ + $switched = ( is_array( $switched_stack ) && count( $switched_stack ) > 0 ); + return true; + } + + $wpdb->set_blog_id($blog); + $prev_blog_id = $blog_id; + $blog_id = $blog; + $table_prefix = $wpdb->prefix; + + if ( is_object( $wp_roles ) ) { + $wpdb->suppress_errors(); + if ( method_exists( $wp_roles ,'_init' ) ) + $wp_roles->_init(); + elseif ( method_exists( $wp_roles, '__construct' ) ) + $wp_roles->__construct(); + $wpdb->suppress_errors( false ); + } + + if ( is_object( $current_user ) ) + $current_user->for_blog( $blog_id ); + + if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) ) + $global_groups = $wp_object_cache->global_groups; + else + $global_groups = false; + + wp_cache_init(); + if ( function_exists('wp_cache_add_global_groups') ) { + if ( is_array( $global_groups ) ) + wp_cache_add_global_groups( $global_groups ); + else + wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'site-transient' ) ); + wp_cache_add_non_persistent_groups(array( 'comment', 'counts', 'plugins' )); + } + + do_action('switch_blog', $blog_id, $prev_blog_id); + + /* If we still have items in the switched stack, consider ourselves still 'switched' */ + $switched = ( is_array( $switched_stack ) && count( $switched_stack ) > 0 ); + return true; +} + +function is_archived( $id ) { + return get_blog_status($id, 'archived'); +} + +function update_archived( $id, $archived ) { + update_blog_status($id, 'archived', $archived); + return $archived; +} + +/** + * Update a blog details field. + * + * @since 3.0 + * + * @param int $blog_id BLog ID + * @param string $pref A field name + * @param string $value Value for $pref + * @param bool $refresh Whether to refresh the blog details cache. Default is true. + */ +function update_blog_status( $blog_id, $pref, $value, $refresh = true ) { + global $wpdb; + + if ( !in_array( $pref, array( 'site_id', 'domain', 'path', 'registered', 'last_updated', 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id') ) ) + return $value; + + $wpdb->update( $wpdb->blogs, array($pref => $value, 'last_updated' => current_time('mysql', true)), array('blog_id' => $blog_id) ); + + if ( $refresh ) + refresh_blog_details($blog_id); + + if ( $pref == 'spam' ) { + if ( $value == 1 ) + do_action( "make_spam_blog", $blog_id ); + else + do_action( "make_ham_blog", $blog_id ); + } + + return $value; +} + +function get_blog_status( $id, $pref ) { + global $wpdb; + + $details = get_blog_details( $id, false ); + if ( $details ) + return $details->$pref; + + return $wpdb->get_var( $wpdb->prepare("SELECT %s FROM {$wpdb->blogs} WHERE blog_id = %d", $pref, $id) ); +} + +function get_last_updated( $deprecated = '', $start = 0, $quantity = 40 ) { + global $wpdb; + return $wpdb->get_results( $wpdb->prepare("SELECT blog_id, domain, path FROM $wpdb->blogs WHERE site_id = %d AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' AND last_updated != '0000-00-00 00:00:00' ORDER BY last_updated DESC limit %d, %d", $wpdb->siteid, $start, $quantity ) , ARRAY_A ); +} + +function get_blog_list( $start = 0, $num = 10, $deprecated = '' ) { + global $wpdb; + + $blogs = get_site_option( "blog_list" ); + $update = false; + if ( is_array( $blogs ) ) { + if ( ( $blogs['time'] + 60 ) < time() ) { // cache for 60 seconds. + $update = true; + } + } else { + $update = true; + } + + if ( $update == true ) { + unset( $blogs ); + $blogs = $wpdb->get_results( $wpdb->prepare("SELECT blog_id, domain, path FROM $wpdb->blogs WHERE site_id = %d AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' ORDER BY registered DESC", $wpdb->siteid), ARRAY_A ); + + foreach ( (array) $blogs as $details ) { + $blog_list[ $details['blog_id'] ] = $details; + $blog_list[ $details['blog_id'] ]['postcount'] = $wpdb->get_var( "SELECT COUNT(ID) FROM " . $wpdb->base_prefix . $details['blog_id'] . "_posts WHERE post_status='publish' AND post_type='post'" ); + } + unset( $blogs ); + $blogs = $blog_list; + update_site_option( "blog_list", $blogs ); + } + + if ( false == is_array( $blogs ) ) + return array(); + + if ( $num == 'all' ) + return array_slice( $blogs, $start, count( $blogs ) ); + else + return array_slice( $blogs, $start, $num ); +} + +?> \ No newline at end of file diff --git a/wp-includes/ms-functions.php b/wp-includes/ms-functions.php index 87daa84ecd..ecc61f00f5 100644 --- a/wp-includes/ms-functions.php +++ b/wp-includes/ms-functions.php @@ -5,50 +5,6 @@ * @package WordPress */ -// @todo use update_blog_details -function wpmu_update_blogs_date() { - global $wpdb; - - $wpdb->update( $wpdb->blogs, array('last_updated' => current_time('mysql', true)), array('blog_id' => $wpdb->blogid) ); - refresh_blog_details( $wpdb->blogid ); - - do_action( 'wpmu_blog_updated', $wpdb->blogid ); -} - -function get_blogaddress_by_id( $blog_id ) { - $bloginfo = get_blog_details( (int) $blog_id, false ); // only get bare details! - return esc_url( 'http://' . $bloginfo->domain . $bloginfo->path ); -} - -function get_blogaddress_by_name( $blogname ) { - global $current_site; - - if ( is_subdomain_install() ) { - if ( $blogname == 'main' ) - $blogname = 'www'; - return esc_url( 'http://' . $blogname . '.' . $current_site->domain . $current_site->path ); - } else { - return esc_url( 'http://' . $current_site->domain . $current_site->path . $blogname . '/' ); - } -} - -function get_blogaddress_by_domain( $domain, $path ){ - if ( is_subdomain_install() ) { - $url = "http://".$domain.$path; - } else { - if ( $domain != $_SERVER['HTTP_HOST'] ) { - $blogname = substr( $domain, 0, strpos( $domain, '.' ) ); - $url = 'http://' . substr( $domain, strpos( $domain, '.' ) + 1 ) . $path; - // we're not installing the main blog - if ( $blogname != 'www.' ) - $url .= $blogname . '/'; - } else { // main blog - $url = 'http://' . $domain . $path; - } - } - return esc_url( $url ); -} - function get_sitestats() { global $wpdb; @@ -80,361 +36,6 @@ function get_admin_users_for_domain( $sitedomain = '', $path = '' ) { return false; } -function get_id_from_blogname( $name ) { - global $wpdb, $current_site; - $blog_id = wp_cache_get( "get_id_from_blogname_" . $name, 'blog-details' ); - if ( $blog_id ) - return $blog_id; - - if ( is_subdomain_install() ) { - $domain = $name . '.' . $current_site->domain; - $path = $current_site->path; - } else { - $domain = $current_site->domain; - $path = $current_site->path . $name . '/'; - } - $blog_id = $wpdb->get_var( $wpdb->prepare("SELECT blog_id FROM {$wpdb->blogs} WHERE domain = %s AND path = %s", $domain, $path) ); - wp_cache_set( 'get_id_from_blogname_' . $name, $blog_id, 'blog-details' ); - return $blog_id; -} - -/** - * Retrieve the details for a blog from the blogs table and blog options. - * - * @since 3.0 - * @param int $blog_id Blog ID - * @param bool $get_all Whether to retrieve all details or only the details in the blogs table. Default is true. - * @return object Blog details. - */ -function get_blog_details( $blog_id, $get_all = true ) { - global $wpdb; - - if ( !is_numeric( $blog_id ) ) - $blog_id = get_id_from_blogname( $blog_id ); - - $blog_id = (int) $blog_id; - - $all = $get_all == true ? '' : 'short'; - $details = wp_cache_get( $blog_id . $all, 'blog-details' ); - - if ( $details ) { - if ( ! is_object( $details ) ) { - if ( $details == -1 ) - return false; - else - // Clear old pre-serialized objects. Cache clients do better with that. - wp_cache_delete( $blog_id . $all, 'blog-details' ); - } - return $details; - } - - $details = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE blog_id = %d", $blog_id ) ); - if ( ! $details ) { - wp_cache_set( $blog_id . $all, -1, 'blog-details' ); - return false; - } - - if ( ! $get_all ) { - wp_cache_set( $blog_id . $all, $details, 'blog-details' ); - return $details; - } - - $details->blogname = get_blog_option( $blog_id, 'blogname' ); - $details->siteurl = get_blog_option( $blog_id, 'siteurl' ); - $details->post_count = get_blog_option( $blog_id, 'post_count' ); - - $details = apply_filters( 'blog_details', $details ); - - wp_cache_set( $blog_id . $all, $details, 'blog-details' ); - - $key = md5( $details->domain . $details->path ); - wp_cache_set( $key, $details, 'blog-lookup' ); - - return $details; -} - -/** - * Clear the blog details cache. - * - * @since 3.0 - * - * @param int $blog_id Blog ID - */ -function refresh_blog_details( $blog_id ) { - $blog_id = (int) $blog_id; - $details = get_blog_details( $blog_id, false ); - - wp_cache_delete( $blog_id , 'blog-details' ); - wp_cache_delete( $blog_id . 'short' , 'blog-details' ); - wp_cache_delete( md5( $details->domain . $details->path ) , 'blog-lookup' ); - wp_cache_delete( 'current_blog_' . $details->domain, 'site-options' ); - wp_cache_delete( 'current_blog_' . $details->domain . $details->path, 'site-options' ); -} - -/** - * Update the details for a blog. Updates the blogs table for a given blog id. - * - * @since 3.0 - * - * @param int $blog_id Blog ID - * @param array $details Array of details keyed by blogs table field names. - * @return bool True if update succeeds, false otherwise. - */ -function update_blog_details( $blog_id, $details = array() ) { - global $wpdb; - - if ( empty($details) ) - return false; - - if ( is_object($details) ) - $details = get_object_vars($details); - - $current_details = get_blog_details($blog_id, false); - if ( empty($current_details) ) - return false; - - $current_details = get_object_vars($current_details); - - $details = array_merge($current_details, $details); - $details['last_updated'] = current_time('mysql', true); - - $update_details = array(); - $fields = array( 'site_id', 'domain', 'path', 'registered', 'last_updated', 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id'); - foreach ( array_intersect( array_keys( $details ), $fields ) as $field ) - $update_details[$field] = $details[$field]; - - $result = $wpdb->update( $wpdb->blogs, $update_details, array('blog_id' => $blog_id) ); - - // If spam status changed, issue actions. - if ( $details[ 'spam' ] != $current_details[ 'spam' ] ) { - if ( $details[ 'spam' ] == 1 ) - do_action( "make_spam_blog", $blog_id ); - else - do_action( "make_ham_blog", $blog_id ); - } - - if ( isset($details[ 'public' ]) ) - update_blog_option( $blog_id, 'blog_public', $details[ 'public' ], false ); - - refresh_blog_details($blog_id); - - return true; -} - -/** - * Retrieve option value based on setting name and blog_id. - * - * If the option does not exist or does not have a value, then the return value - * will be false. This is useful to check whether you need to install an option - * and is commonly used during installation of plugin options and to test - * whether upgrading is required. - * - * There is a filter called 'blog_option_$option' with the $option being - * replaced with the option name. The filter takes two parameters. $value and - * $blog_id. It returns $value. - * The 'option_$option' filter in get_option() is not called. - * - * @since NA - * @package WordPress MU - * @subpackage Option - * @uses apply_filters() Calls 'blog_option_$optionname' with the option name value. - * - * @param int $blog_id is the id of the blog. - * @param string $setting Name of option to retrieve. Should already be SQL-escaped - * @param string $default (optional) Default value returned if option not found. - * @return mixed Value set for the option. - */ -function get_blog_option( $blog_id, $setting, $default = false ) { - global $wpdb; - - $key = $blog_id."-".$setting."-blog_option"; - $value = wp_cache_get( $key, "site-options" ); - if ( $value == null ) { - if ( $blog_id == $wpdb->blogid ) { - $value = get_option( $setting, $default ); - $notoptions = wp_cache_get( 'notoptions', 'options' ); - if ( isset( $notoptions[$setting] ) ) - wp_cache_set( $key, 'noop', 'site-options' ); - elseif ( $value == false ) - wp_cache_set( $key, 'falsevalue', 'site-options' ); - else - wp_cache_set( $key, $value, 'site-options' ); - } else { - $blog_prefix = $wpdb->get_blog_prefix( $blog_id ); - $row = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$blog_prefix}options WHERE option_name = %s", $setting ) ); - if ( is_object( $row ) ) { // Has to be get_row instead of get_var because of funkiness with 0, false, null values - $value = $row->option_value; - if ( $value == false ) - wp_cache_set( $key, 'falsevalue', 'site-options' ); - else - wp_cache_set( $key, $value, 'site-options' ); - } else { // option does not exist, so we must cache its non-existence - wp_cache_set( $key, 'noop', 'site-options' ); - $value = $default; - } - } - } elseif ( $value == 'noop' ) { - $value = $default; - } elseif ( $value == 'falsevalue' ) { - $value = false; - } - // If home is not set use siteurl. - if ( 'home' == $setting && '' == $value ) - return get_blog_option( $blog_id, 'siteurl' ); - - if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting ) - $value = untrailingslashit( $value ); - - if (! @unserialize( $value ) ) - $value = stripslashes( $value ); - - return apply_filters( 'blog_option_' . $setting, maybe_unserialize( $value ), $blog_id ); -} - -function add_blog_option( $id, $key, $value ) { - $id = (int) $id; - - switch_to_blog($id); - add_option( $key, $value ); - restore_current_blog(); - wp_cache_set( $id."-".$key."-blog_option", $value, 'site-options' ); -} - -function delete_blog_option( $id, $key ) { - $id = (int) $id; - - switch_to_blog($id); - delete_option( $key ); - restore_current_blog(); - wp_cache_set( $id."-".$key."-blog_option", '', 'site-options' ); -} - -function update_blog_option( $id, $key, $value, $refresh = true ) { - $id = (int) $id; - - switch_to_blog($id); - update_option( $key, $value ); - restore_current_blog(); - - if ( $refresh == true ) - refresh_blog_details( $id ); - wp_cache_set( $id."-".$key."-blog_option", $value, 'site-options'); -} - -function switch_to_blog( $new_blog, $validate = false ) { - global $wpdb, $table_prefix, $blog_id, $switched, $switched_stack, $wp_roles, $current_user, $wp_object_cache; - - if ( empty($new_blog) ) - $new_blog = $blog_id; - - if ( $validate && ! get_blog_details( $new_blog ) ) - return false; - - if ( empty($switched_stack) ) - $switched_stack = array(); - - $switched_stack[] = $blog_id; - - /* If we're switching to the same blog id that we're on, - * set the right vars, do the associated actions, but skip - * the extra unnecessary work */ - if ( $blog_id == $new_blog ) { - do_action( 'switch_blog', $blog_id, $blog_id ); - $switched = true; - return true; - } - - $wpdb->set_blog_id($new_blog); - $table_prefix = $wpdb->prefix; - $prev_blog_id = $blog_id; - $blog_id = $new_blog; - - if ( is_object( $wp_roles ) ) { - $wpdb->suppress_errors(); - if ( method_exists( $wp_roles ,'_init' ) ) - $wp_roles->_init(); - elseif ( method_exists( $wp_roles, '__construct' ) ) - $wp_roles->__construct(); - $wpdb->suppress_errors( false ); - } - - if ( is_object( $current_user ) ) - $current_user->for_blog( $blog_id ); - - if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) ) - $global_groups = $wp_object_cache->global_groups; - else - $global_groups = false; - - wp_cache_init(); - if ( function_exists('wp_cache_add_global_groups') ) { - if ( is_array( $global_groups ) ) - wp_cache_add_global_groups( $global_groups ); - else - wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'site-transient', 'global-posts' ) ); - wp_cache_add_non_persistent_groups(array( 'comment', 'counts', 'plugins' )); - } - - do_action('switch_blog', $blog_id, $prev_blog_id); - $switched = true; - return true; -} - -function restore_current_blog() { - global $table_prefix, $wpdb, $blog_id, $switched, $switched_stack, $wp_roles, $current_user, $wp_object_cache; - - if ( !$switched ) - return false; - - if ( !is_array( $switched_stack ) ) - return false; - - $blog = array_pop( $switched_stack ); - if ( $blog_id == $blog ) { - do_action( 'switch_blog', $blog, $blog ); - /* If we still have items in the switched stack, consider ourselves still 'switched' */ - $switched = ( is_array( $switched_stack ) && count( $switched_stack ) > 0 ); - return true; - } - - $wpdb->set_blog_id($blog); - $prev_blog_id = $blog_id; - $blog_id = $blog; - $table_prefix = $wpdb->prefix; - - if ( is_object( $wp_roles ) ) { - $wpdb->suppress_errors(); - if ( method_exists( $wp_roles ,'_init' ) ) - $wp_roles->_init(); - elseif ( method_exists( $wp_roles, '__construct' ) ) - $wp_roles->__construct(); - $wpdb->suppress_errors( false ); - } - - if ( is_object( $current_user ) ) - $current_user->for_blog( $blog_id ); - - if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) ) - $global_groups = $wp_object_cache->global_groups; - else - $global_groups = false; - - wp_cache_init(); - if ( function_exists('wp_cache_add_global_groups') ) { - if ( is_array( $global_groups ) ) - wp_cache_add_global_groups( $global_groups ); - else - wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'site-transient' ) ); - wp_cache_add_non_persistent_groups(array( 'comment', 'counts', 'plugins' )); - } - - do_action('switch_blog', $blog_id, $prev_blog_id); - - /* If we still have items in the switched stack, consider ourselves still 'switched' */ - $switched = ( is_array( $switched_stack ) && count( $switched_stack ) > 0 ); - return true; -} - function get_blogs_of_user( $id, $all = false ) { global $wpdb; @@ -550,61 +151,6 @@ function is_user_member_of_blog( $user_id, $blog_id = 0 ) { return false; } -function is_archived( $id ) { - return get_blog_status($id, 'archived'); -} - -function update_archived( $id, $archived ) { - update_blog_status($id, 'archived', $archived); - return $archived; -} - -/** - * Update a blog details field. - * - * @since 3.0 - * - * @param int $blog_id BLog ID - * @param string $pref A field name - * @param string $value Value for $pref - * @param bool $refresh Whether to refresh the blog details cache. Default is true. - */ -function update_blog_status( $blog_id, $pref, $value, $refresh = true ) { - global $wpdb; - - if ( !in_array( $pref, array( 'site_id', 'domain', 'path', 'registered', 'last_updated', 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id') ) ) - return $value; - - $wpdb->update( $wpdb->blogs, array($pref => $value, 'last_updated' => current_time('mysql', true)), array('blog_id' => $blog_id) ); - - if ( $refresh ) - refresh_blog_details($blog_id); - - if ( $pref == 'spam' ) { - if ( $value == 1 ) - do_action( "make_spam_blog", $blog_id ); - else - do_action( "make_ham_blog", $blog_id ); - } - - return $value; -} - -function get_blog_status( $id, $pref ) { - global $wpdb; - - $details = get_blog_details( $id, false ); - if ( $details ) - return $details->$pref; - - return $wpdb->get_var( $wpdb->prepare("SELECT %s FROM {$wpdb->blogs} WHERE blog_id = %d", $pref, $id) ); -} - -function get_last_updated( $deprecated = '', $start = 0, $quantity = 40 ) { - global $wpdb; - return $wpdb->get_results( $wpdb->prepare("SELECT blog_id, domain, path FROM $wpdb->blogs WHERE site_id = %d AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' AND last_updated != '0000-00-00 00:00:00' ORDER BY last_updated DESC limit %d, %d", $wpdb->siteid, $start, $quantity ) , ARRAY_A ); -} - function get_most_active_blogs( $num = 10, $display = true ) { $most_active = get_site_option( "most_active" ); $update = false; @@ -648,41 +194,6 @@ function get_most_active_blogs( $num = 10, $display = true ) { return array_slice( $most_active, 0, $num ); } -function get_blog_list( $start = 0, $num = 10, $deprecated = '' ) { - global $wpdb; - - $blogs = get_site_option( "blog_list" ); - $update = false; - if ( is_array( $blogs ) ) { - if ( ( $blogs['time'] + 60 ) < time() ) { // cache for 60 seconds. - $update = true; - } - } else { - $update = true; - } - - if ( $update == true ) { - unset( $blogs ); - $blogs = $wpdb->get_results( $wpdb->prepare("SELECT blog_id, domain, path FROM $wpdb->blogs WHERE site_id = %d AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' ORDER BY registered DESC", $wpdb->siteid), ARRAY_A ); - - foreach ( (array) $blogs as $details ) { - $blog_list[ $details['blog_id'] ] = $details; - $blog_list[ $details['blog_id'] ]['postcount'] = $wpdb->get_var( "SELECT COUNT(ID) FROM " . $wpdb->base_prefix . $details['blog_id'] . "_posts WHERE post_status='publish' AND post_type='post'" ); - } - unset( $blogs ); - $blogs = $blog_list; - update_site_option( "blog_list", $blogs ); - } - - if ( false == is_array( $blogs ) ) - return array(); - - if ( $num == 'all' ) - return array_slice( $blogs, $start, count( $blogs ) ); - else - return array_slice( $blogs, $start, $num ); -} - function get_user_count() { global $wpdb; diff --git a/wp-settings.php b/wp-settings.php index fd206e8301..18d2597dc0 100644 --- a/wp-settings.php +++ b/wp-settings.php @@ -74,8 +74,10 @@ wp_set_wpdb_vars(); wp_start_object_cache(); // Initialize multisite if enabled. -if ( is_multisite() ) +if ( is_multisite() ) { + require( ABSPATH . WPINC . '/blogs.php' ); require( ABSPATH . WPINC . '/ms-settings.php' ); +} // Load early WordPress files. require( ABSPATH . WPINC . '/plugin.php' );