WordPress.org

Make WordPress Core

Changeset 13125


Ignore:
Timestamp:
02/13/2010 10:35:11 PM (10 years ago)
Author:
ryan
Message:

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

Location:
trunk
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/ms-functions.php

    r13116 r13125  
    55 * @package WordPress
    66 */
    7 
    8 // @todo use update_blog_details
    9 function wpmu_update_blogs_date() {
    10     global $wpdb;
    11 
    12     $wpdb->update( $wpdb->blogs, array('last_updated' => current_time('mysql', true)), array('blog_id' => $wpdb->blogid) );
    13     refresh_blog_details( $wpdb->blogid );
    14 
    15     do_action( 'wpmu_blog_updated', $wpdb->blogid );
    16 }
    17 
    18 function get_blogaddress_by_id( $blog_id ) {
    19     $bloginfo = get_blog_details( (int) $blog_id, false ); // only get bare details!
    20     return esc_url( 'http://' . $bloginfo->domain . $bloginfo->path );
    21 }
    22 
    23 function get_blogaddress_by_name( $blogname ) {
    24     global $current_site;
    25 
    26     if ( is_subdomain_install() ) {
    27         if ( $blogname == 'main' )
    28             $blogname = 'www';
    29         return esc_url( 'http://' . $blogname . '.' . $current_site->domain . $current_site->path );
    30     } else {
    31         return esc_url( 'http://' . $current_site->domain . $current_site->path . $blogname . '/' );
    32     }
    33 }
    34 
    35 function get_blogaddress_by_domain( $domain, $path ){
    36     if ( is_subdomain_install() ) {
    37         $url = "http://".$domain.$path;
    38     } else {
    39         if ( $domain != $_SERVER['HTTP_HOST'] ) {
    40             $blogname = substr( $domain, 0, strpos( $domain, '.' ) );
    41             $url = 'http://' . substr( $domain, strpos( $domain, '.' ) + 1 ) . $path;
    42             // we're not installing the main blog
    43             if ( $blogname != 'www.' )
    44                 $url .= $blogname . '/';
    45         } else { // main blog
    46             $url = 'http://' . $domain . $path;
    47         }
    48     }
    49     return esc_url( $url );
    50 }
    517
    528function get_sitestats() {
     
    7935
    8036    return false;
    81 }
    82 
    83 function get_id_from_blogname( $name ) {
    84     global $wpdb, $current_site;
    85     $blog_id = wp_cache_get( "get_id_from_blogname_" . $name, 'blog-details' );
    86     if ( $blog_id )
    87         return $blog_id;
    88 
    89     if ( is_subdomain_install() ) {
    90         $domain = $name . '.' . $current_site->domain;
    91         $path = $current_site->path;
    92     } else {
    93         $domain = $current_site->domain;
    94         $path = $current_site->path . $name . '/';
    95     }
    96     $blog_id = $wpdb->get_var( $wpdb->prepare("SELECT blog_id FROM {$wpdb->blogs} WHERE domain = %s AND path = %s", $domain, $path) );
    97     wp_cache_set( 'get_id_from_blogname_' . $name, $blog_id, 'blog-details' );
    98     return $blog_id;
    99 }
    100 
    101 /**
    102  * Retrieve the details for a blog from the blogs table and blog options.
    103  *
    104  * @since 3.0
    105  * @param int $blog_id Blog ID
    106  * @param bool $get_all Whether to retrieve all details or only the details in the blogs table. Default is true.
    107  * @return object Blog details.
    108  */
    109 function get_blog_details( $blog_id, $get_all = true ) {
    110     global $wpdb;
    111 
    112     if ( !is_numeric( $blog_id ) )
    113         $blog_id = get_id_from_blogname( $blog_id );
    114 
    115     $blog_id = (int) $blog_id;
    116 
    117     $all = $get_all == true ? '' : 'short';
    118     $details = wp_cache_get( $blog_id . $all, 'blog-details' );
    119 
    120     if ( $details ) {
    121         if ( ! is_object( $details ) ) {
    122             if ( $details == -1 )
    123                 return false;
    124             else
    125                 // Clear old pre-serialized objects. Cache clients do better with that.
    126                 wp_cache_delete( $blog_id . $all, 'blog-details' );
    127         }
    128         return $details;
    129     }
    130 
    131     $details = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE blog_id = %d", $blog_id ) );
    132     if ( ! $details ) {
    133         wp_cache_set( $blog_id . $all, -1, 'blog-details' );
    134         return false;
    135     }
    136 
    137     if ( ! $get_all ) {
    138         wp_cache_set( $blog_id . $all, $details, 'blog-details' );
    139         return $details;
    140     }
    141 
    142     $details->blogname      = get_blog_option( $blog_id, 'blogname' );
    143     $details->siteurl       = get_blog_option( $blog_id, 'siteurl' );
    144     $details->post_count    = get_blog_option( $blog_id, 'post_count' );
    145 
    146     $details = apply_filters( 'blog_details', $details );
    147 
    148     wp_cache_set( $blog_id . $all, $details, 'blog-details' );
    149 
    150     $key = md5( $details->domain . $details->path );
    151     wp_cache_set( $key, $details, 'blog-lookup' );
    152 
    153     return $details;
    154 }
    155 
    156 /**
    157  * Clear the blog details cache.
    158  *
    159  * @since 3.0
    160  *
    161  * @param int $blog_id Blog ID
    162  */
    163 function refresh_blog_details( $blog_id ) {
    164     $blog_id = (int) $blog_id;
    165     $details = get_blog_details( $blog_id, false );
    166 
    167     wp_cache_delete( $blog_id , 'blog-details' );
    168     wp_cache_delete( $blog_id . 'short' , 'blog-details' );
    169     wp_cache_delete( md5( $details->domain . $details->path )  , 'blog-lookup' );
    170     wp_cache_delete( 'current_blog_' . $details->domain, 'site-options' );
    171     wp_cache_delete( 'current_blog_' . $details->domain . $details->path, 'site-options' );
    172 }
    173 
    174 /**
    175  * Update the details for a blog. Updates the blogs table for a given blog id.
    176  *
    177  * @since 3.0
    178  *
    179  * @param int $blog_id Blog ID
    180  * @param array $details Array of details keyed by blogs table field names.
    181  * @return bool True if update succeeds, false otherwise.
    182  */
    183 function update_blog_details( $blog_id, $details = array() ) {
    184     global $wpdb;
    185 
    186     if ( empty($details) )
    187         return false;
    188 
    189     if ( is_object($details) )
    190         $details = get_object_vars($details);
    191 
    192     $current_details = get_blog_details($blog_id, false);
    193     if ( empty($current_details) )
    194         return false;
    195 
    196     $current_details = get_object_vars($current_details);
    197 
    198     $details = array_merge($current_details, $details);
    199     $details['last_updated'] = current_time('mysql', true);
    200 
    201     $update_details = array();
    202     $fields = array( 'site_id', 'domain', 'path', 'registered', 'last_updated', 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id');
    203     foreach ( array_intersect( array_keys( $details ), $fields ) as $field )
    204         $update_details[$field] = $details[$field];
    205 
    206     $result = $wpdb->update( $wpdb->blogs, $update_details, array('blog_id' => $blog_id) );
    207 
    208     // If spam status changed, issue actions.
    209     if ( $details[ 'spam' ] != $current_details[ 'spam' ] ) {
    210         if ( $details[ 'spam' ] == 1 )
    211             do_action( "make_spam_blog", $blog_id );
    212         else
    213             do_action( "make_ham_blog", $blog_id );
    214     }
    215 
    216     if ( isset($details[ 'public' ]) )
    217         update_blog_option( $blog_id, 'blog_public', $details[ 'public' ], false );
    218 
    219     refresh_blog_details($blog_id);
    220 
    221     return true;
    222 }
    223 
    224 /**
    225  * Retrieve option value based on setting name and blog_id.
    226  *
    227  * If the option does not exist or does not have a value, then the return value
    228  * will be false. This is useful to check whether you need to install an option
    229  * and is commonly used during installation of plugin options and to test
    230  * whether upgrading is required.
    231  *
    232  * There is a filter called 'blog_option_$option' with the $option being
    233  * replaced with the option name. The filter takes two parameters. $value and
    234  * $blog_id. It returns $value.
    235  * The 'option_$option' filter in get_option() is not called.
    236  *
    237  * @since NA
    238  * @package WordPress MU
    239  * @subpackage Option
    240  * @uses apply_filters() Calls 'blog_option_$optionname' with the option name value.
    241  *
    242  * @param int $blog_id is the id of the blog.
    243  * @param string $setting Name of option to retrieve. Should already be SQL-escaped
    244  * @param string $default (optional) Default value returned if option not found.
    245  * @return mixed Value set for the option.
    246  */
    247 function get_blog_option( $blog_id, $setting, $default = false ) {
    248     global $wpdb;
    249 
    250     $key = $blog_id."-".$setting."-blog_option";
    251     $value = wp_cache_get( $key, "site-options" );
    252     if ( $value == null ) {
    253         if ( $blog_id == $wpdb->blogid ) {
    254             $value = get_option( $setting, $default );
    255             $notoptions = wp_cache_get( 'notoptions', 'options' );
    256             if ( isset( $notoptions[$setting] ) )
    257                 wp_cache_set( $key, 'noop', 'site-options' );
    258             elseif ( $value == false )
    259                 wp_cache_set( $key, 'falsevalue', 'site-options' );
    260             else
    261                 wp_cache_set( $key, $value, 'site-options' );
    262         } else {
    263             $blog_prefix = $wpdb->get_blog_prefix( $blog_id );
    264             $row = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$blog_prefix}options WHERE option_name = %s", $setting ) );
    265             if ( is_object( $row ) ) { // Has to be get_row instead of get_var because of funkiness with 0, false, null values
    266                 $value = $row->option_value;
    267                 if ( $value == false )
    268                     wp_cache_set( $key, 'falsevalue', 'site-options' );
    269                 else
    270                     wp_cache_set( $key, $value, 'site-options' );
    271             } else { // option does not exist, so we must cache its non-existence
    272                 wp_cache_set( $key, 'noop', 'site-options' );
    273                 $value = $default;
    274             }
    275         }
    276     } elseif ( $value == 'noop' ) {
    277         $value = $default;
    278     } elseif ( $value == 'falsevalue' ) {
    279         $value = false;
    280     }
    281     // If home is not set use siteurl.
    282     if ( 'home' == $setting && '' == $value )
    283         return get_blog_option( $blog_id, 'siteurl' );
    284 
    285     if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting )
    286         $value = untrailingslashit( $value );
    287 
    288     if (! @unserialize( $value ) )
    289         $value = stripslashes( $value );
    290 
    291     return apply_filters( 'blog_option_' . $setting, maybe_unserialize( $value ), $blog_id );
    292 }
    293 
    294 function add_blog_option( $id, $key, $value ) {
    295     $id = (int) $id;
    296 
    297     switch_to_blog($id);
    298     add_option( $key, $value );
    299     restore_current_blog();
    300     wp_cache_set( $id."-".$key."-blog_option", $value, 'site-options' );
    301 }
    302 
    303 function delete_blog_option( $id, $key ) {
    304     $id = (int) $id;
    305 
    306     switch_to_blog($id);
    307     delete_option( $key );
    308     restore_current_blog();
    309     wp_cache_set( $id."-".$key."-blog_option", '', 'site-options' );
    310 }
    311 
    312 function update_blog_option( $id, $key, $value, $refresh = true ) {
    313     $id = (int) $id;
    314 
    315     switch_to_blog($id);
    316     update_option( $key, $value );
    317     restore_current_blog();
    318 
    319     if ( $refresh == true )
    320         refresh_blog_details( $id );
    321     wp_cache_set( $id."-".$key."-blog_option", $value, 'site-options');
    322 }
    323 
    324 function switch_to_blog( $new_blog, $validate = false ) {
    325     global $wpdb, $table_prefix, $blog_id, $switched, $switched_stack, $wp_roles, $current_user, $wp_object_cache;
    326 
    327     if ( empty($new_blog) )
    328         $new_blog = $blog_id;
    329 
    330     if ( $validate && ! get_blog_details( $new_blog ) )
    331         return false;
    332 
    333     if ( empty($switched_stack) )
    334         $switched_stack = array();
    335 
    336     $switched_stack[] = $blog_id;
    337 
    338     /* If we're switching to the same blog id that we're on,
    339     * set the right vars, do the associated actions, but skip
    340     * the extra unnecessary work */
    341     if ( $blog_id == $new_blog ) {
    342         do_action( 'switch_blog', $blog_id, $blog_id );
    343         $switched = true;
    344         return true;
    345     }
    346 
    347     $wpdb->set_blog_id($new_blog);
    348     $table_prefix = $wpdb->prefix;
    349     $prev_blog_id = $blog_id;
    350     $blog_id = $new_blog;
    351 
    352     if ( is_object( $wp_roles ) ) {
    353         $wpdb->suppress_errors();
    354         if ( method_exists( $wp_roles ,'_init' ) )
    355             $wp_roles->_init();
    356         elseif ( method_exists( $wp_roles, '__construct' ) )
    357             $wp_roles->__construct();
    358         $wpdb->suppress_errors( false );
    359     }
    360 
    361     if ( is_object( $current_user ) )
    362         $current_user->for_blog( $blog_id );
    363 
    364     if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) )
    365         $global_groups = $wp_object_cache->global_groups;
    366     else
    367         $global_groups = false;
    368 
    369     wp_cache_init();
    370     if ( function_exists('wp_cache_add_global_groups') ) {
    371         if ( is_array( $global_groups ) )
    372             wp_cache_add_global_groups( $global_groups );
    373         else
    374             wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'site-transient', 'global-posts' ) );
    375         wp_cache_add_non_persistent_groups(array( 'comment', 'counts', 'plugins' ));
    376     }
    377 
    378     do_action('switch_blog', $blog_id, $prev_blog_id);
    379     $switched = true;
    380     return true;
    381 }
    382 
    383 function restore_current_blog() {
    384     global $table_prefix, $wpdb, $blog_id, $switched, $switched_stack, $wp_roles, $current_user, $wp_object_cache;
    385 
    386     if ( !$switched )
    387         return false;
    388 
    389     if ( !is_array( $switched_stack ) )
    390         return false;
    391 
    392     $blog = array_pop( $switched_stack );
    393     if ( $blog_id == $blog ) {
    394         do_action( 'switch_blog', $blog, $blog );
    395         /* If we still have items in the switched stack, consider ourselves still 'switched' */
    396         $switched = ( is_array( $switched_stack ) && count( $switched_stack ) > 0 );
    397         return true;
    398     }
    399 
    400     $wpdb->set_blog_id($blog);
    401     $prev_blog_id = $blog_id;
    402     $blog_id = $blog;
    403     $table_prefix = $wpdb->prefix;
    404 
    405     if ( is_object( $wp_roles ) ) {
    406         $wpdb->suppress_errors();
    407         if ( method_exists( $wp_roles ,'_init' ) )
    408             $wp_roles->_init();
    409         elseif ( method_exists( $wp_roles, '__construct' ) )
    410             $wp_roles->__construct();
    411         $wpdb->suppress_errors( false );
    412     }
    413 
    414     if ( is_object( $current_user ) )
    415         $current_user->for_blog( $blog_id );
    416 
    417     if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) )
    418         $global_groups = $wp_object_cache->global_groups;
    419     else
    420         $global_groups = false;
    421 
    422     wp_cache_init();
    423     if ( function_exists('wp_cache_add_global_groups') ) {
    424         if ( is_array( $global_groups ) )
    425             wp_cache_add_global_groups( $global_groups );
    426         else
    427             wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'site-transient' ) );
    428         wp_cache_add_non_persistent_groups(array( 'comment', 'counts', 'plugins' ));
    429     }
    430 
    431     do_action('switch_blog', $blog_id, $prev_blog_id);
    432 
    433     /* If we still have items in the switched stack, consider ourselves still 'switched' */
    434     $switched = ( is_array( $switched_stack ) && count( $switched_stack ) > 0 );
    435     return true;
    43637}
    43738
     
    551152}
    552153
    553 function is_archived( $id ) {
    554     return get_blog_status($id, 'archived');
    555 }
    556 
    557 function update_archived( $id, $archived ) {
    558     update_blog_status($id, 'archived', $archived);
    559     return $archived;
    560 }
    561 
    562 /**
    563  * Update a blog details field.
    564  *
    565  * @since 3.0
    566  *
    567  * @param int $blog_id BLog ID
    568  * @param string $pref A field name
    569  * @param string $value Value for $pref
    570  * @param bool $refresh Whether to refresh the blog details cache. Default is true.
    571  */
    572 function update_blog_status( $blog_id, $pref, $value, $refresh = true ) {
    573     global $wpdb;
    574 
    575     if ( !in_array( $pref, array( 'site_id', 'domain', 'path', 'registered', 'last_updated', 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id') ) )
    576         return $value;
    577 
    578     $wpdb->update( $wpdb->blogs, array($pref => $value, 'last_updated' => current_time('mysql', true)), array('blog_id' => $blog_id) );
    579 
    580     if ( $refresh )
    581         refresh_blog_details($blog_id);
    582 
    583     if ( $pref == 'spam' ) {
    584         if ( $value == 1 )
    585             do_action( "make_spam_blog", $blog_id );
    586         else
    587             do_action( "make_ham_blog", $blog_id );
    588     }
    589 
    590     return $value;
    591 }
    592 
    593 function get_blog_status( $id, $pref ) {
    594     global $wpdb;
    595 
    596     $details = get_blog_details( $id, false );
    597     if ( $details )
    598         return $details->$pref;
    599 
    600     return $wpdb->get_var( $wpdb->prepare("SELECT %s FROM {$wpdb->blogs} WHERE blog_id = %d", $pref, $id) );
    601 }
    602 
    603 function get_last_updated( $deprecated = '', $start = 0, $quantity = 40 ) {
    604     global $wpdb;
    605     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 );
    606 }
    607 
    608154function get_most_active_blogs( $num = 10, $display = true ) {
    609155    $most_active = get_site_option( "most_active" );
     
    647193    }
    648194    return array_slice( $most_active, 0, $num );
    649 }
    650 
    651 function get_blog_list( $start = 0, $num = 10, $deprecated = '' ) {
    652     global $wpdb;
    653 
    654     $blogs = get_site_option( "blog_list" );
    655     $update = false;
    656     if ( is_array( $blogs ) ) {
    657         if ( ( $blogs['time'] + 60 ) < time() ) { // cache for 60 seconds.
    658             $update = true;
    659         }
    660     } else {
    661         $update = true;
    662     }
    663 
    664     if ( $update == true ) {
    665         unset( $blogs );
    666         $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 );
    667 
    668         foreach ( (array) $blogs as $details ) {
    669             $blog_list[ $details['blog_id'] ] = $details;
    670             $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'" );
    671         }
    672         unset( $blogs );
    673         $blogs = $blog_list;
    674         update_site_option( "blog_list", $blogs );
    675     }
    676 
    677     if ( false == is_array( $blogs ) )
    678         return array();
    679 
    680     if ( $num == 'all' )
    681         return array_slice( $blogs, $start, count( $blogs ) );
    682     else
    683         return array_slice( $blogs, $start, $num );
    684195}
    685196
  • trunk/wp-settings.php

    r13065 r13125  
    7575
    7676// Initialize multisite if enabled.
    77 if ( is_multisite() )
     77if ( is_multisite() ) {
     78    require( ABSPATH . WPINC . '/blogs.php' );
    7879    require( ABSPATH . WPINC . '/ms-settings.php' );
     80}
    7981
    8082// Load early WordPress files.
Note: See TracChangeset for help on using the changeset viewer.