2010-01-10 13:10:51 -05:00
< ? php
/**
2010-01-28 11:09:52 -05:00
* These functions are needed to load Multisite .
2010-01-10 13:10:51 -05:00
*
2010-01-28 11:09:52 -05:00
* @ since 3.0 . 0
2010-01-10 13:10:51 -05:00
*
* @ package WordPress
2010-01-28 11:09:52 -05:00
* @ subpackage Multisite
2010-01-10 13:10:51 -05:00
*/
2010-01-28 11:09:52 -05:00
/**
2010-02-01 15:26:08 -05:00
* Whether a subdomain configuration is enabled .
2010-01-28 11:09:52 -05:00
*
2010-03-26 15:13:36 -04:00
* @ since 3.0 . 0
2010-01-28 11:09:52 -05:00
*
* @ return bool True if subdomain configuration is enabled , false otherwise .
*/
function is_subdomain_install () {
2010-05-04 16:48:28 -04:00
if ( defined ( 'SUBDOMAIN_INSTALL' ) )
return SUBDOMAIN_INSTALL ;
2010-01-28 11:09:52 -05:00
if ( defined ( 'VHOST' ) && VHOST == 'yes' )
return true ;
2010-01-10 13:10:51 -05:00
2010-01-28 11:09:52 -05:00
return false ;
}
2010-01-10 13:10:51 -05:00
2010-11-23 19:19:38 -05:00
/**
* Returns array of network plugin files to be included in global scope .
*
* The default directory is wp - content / plugins . To change the default directory
* manually , define < code > WP_PLUGIN_DIR </ code > and < code > WP_PLUGIN_URL </ code >
* in wp - config . php .
*
* @ access private
* @ since 3.1 . 0
* @ return array Files to include
*/
function wp_get_active_network_plugins () {
$active_plugins = ( array ) get_site_option ( 'active_sitewide_plugins' , array () );
if ( empty ( $active_plugins ) )
return array ();
2010-12-07 20:03:12 -05:00
$plugins = array ();
2010-11-23 19:19:38 -05:00
$active_plugins = array_keys ( $active_plugins );
sort ( $active_plugins );
foreach ( $active_plugins as $plugin ) {
if ( ! validate_file ( $plugin ) // $plugin must validate as file
&& '.php' == substr ( $plugin , - 4 ) // $plugin must end with '.php'
&& file_exists ( WP_PLUGIN_DIR . '/' . $plugin ) // $plugin must exist
)
$plugins [] = WP_PLUGIN_DIR . '/' . $plugin ;
}
return $plugins ;
}
2010-02-01 15:26:08 -05:00
/**
* Checks status of current blog .
*
* Checks if the blog is deleted , inactive , archived , or spammed .
*
* Dies with a default message if the blog does not pass the check .
*
* To change the default message when a blog does not pass the check ,
* use the wp - content / blog - deleted . php , blog - inactive . php and
* blog - suspended . php drop - ins .
*
* @ return bool | string Returns true on success , or drop - in file to include .
*/
2010-01-10 13:10:51 -05:00
function ms_site_check () {
2010-01-20 02:44:47 -05:00
global $wpdb , $current_blog ;
2010-04-23 12:18:33 -04:00
// Allow short-circuiting
$check = apply_filters ( 'ms_site_check' , null );
if ( null !== $check )
2010-04-23 12:50:01 -04:00
return true ;
2010-04-23 12:18:33 -04:00
// Allow super admins to see blocked sites
if ( is_super_admin () )
return true ;
2010-01-20 02:44:47 -05:00
if ( '1' == $current_blog -> deleted ) {
2010-12-14 03:38:01 -05:00
if ( file_exists ( WP_CONTENT_DIR . '/blog-deleted.php' ) )
2010-02-01 15:26:08 -05:00
return WP_CONTENT_DIR . '/blog-deleted.php' ;
2010-12-14 03:38:01 -05:00
else
wp_die ( __ ( 'This user has elected to delete their account and the content is no longer available.' ), '' , array ( 'response' => 410 ) );
2010-02-01 15:26:08 -05:00
}
if ( '2' == $current_blog -> deleted ) {
if ( file_exists ( WP_CONTENT_DIR . '/blog-inactive.php' ) )
return WP_CONTENT_DIR . '/blog-inactive.php' ;
else
2010-12-14 03:38:01 -05:00
wp_die ( sprintf ( __ ( 'This site has not been activated yet. If you are having problems activating your site, please contact <a href="mailto:%1$s">%1$s</a>.' ), str_replace ( '@' , ' AT ' , get_site_option ( 'admin_email' , " support@ { $current_site -> domain } " ) ) ) );
2010-01-20 02:44:47 -05:00
}
2010-01-25 17:09:43 -05:00
if ( $current_blog -> archived == '1' || $current_blog -> spam == '1' ) {
2010-12-14 03:38:01 -05:00
if ( file_exists ( WP_CONTENT_DIR . '/blog-suspended.php' ) )
2010-02-01 15:26:08 -05:00
return WP_CONTENT_DIR . '/blog-suspended.php' ;
2010-12-14 03:38:01 -05:00
else
wp_die ( __ ( 'This site has been archived or suspended.' ), '' , array ( 'response' => 410 ) );
2010-01-20 02:44:47 -05:00
}
2010-01-25 17:09:43 -05:00
2010-01-20 02:44:47 -05:00
return true ;
2010-01-10 13:10:51 -05:00
}
2010-02-01 15:26:08 -05:00
/**
* Sets current site name .
*
* @ access private
* @ since 3.0 . 0
* @ return object $current_site object with site_name
*/
2010-01-28 11:09:52 -05:00
function get_current_site_name ( $current_site ) {
global $wpdb ;
2010-08-31 14:17:20 -04:00
$current_site -> site_name = wp_cache_get ( $current_site -> id . ':site_name' , 'site-options' );
2010-02-01 15:26:08 -05:00
if ( ! $current_site -> site_name ) {
2010-08-31 14:17:20 -04:00
$current_site -> site_name = $wpdb -> get_var ( $wpdb -> prepare ( " SELECT meta_value FROM $wpdb->sitemeta WHERE site_id = %d AND meta_key = 'site_name' " , $current_site -> id ) );
if ( ! $current_site -> site_name )
$current_site -> site_name = ucfirst ( $current_site -> domain );
2011-08-25 15:29:47 -04:00
wp_cache_set ( $current_site -> id . ':site_name' , $current_site -> site_name , 'site-options' );
2010-01-28 11:09:52 -05:00
}
2010-08-31 14:17:20 -04:00
2010-01-28 11:09:52 -05:00
return $current_site ;
}
2010-02-01 15:26:08 -05:00
/**
* Sets current_site object .
*
* @ access private
* @ since 3.0 . 0
* @ return object $current_site object
*/
2010-01-28 11:09:52 -05:00
function wpmu_current_site () {
global $wpdb , $current_site , $domain , $path , $sites , $cookie_domain ;
2011-10-31 15:38:46 -04:00
if ( empty ( $current_site ) )
$current_site = new stdClass ;
2010-01-28 11:09:52 -05:00
if ( defined ( 'DOMAIN_CURRENT_SITE' ) && defined ( 'PATH_CURRENT_SITE' ) ) {
2010-02-18 20:03:58 -05:00
$current_site -> id = defined ( 'SITE_ID_CURRENT_SITE' ) ? SITE_ID_CURRENT_SITE : 1 ;
2010-01-28 11:09:52 -05:00
$current_site -> domain = DOMAIN_CURRENT_SITE ;
$current_site -> path = $path = PATH_CURRENT_SITE ;
2010-03-06 15:01:32 -05:00
if ( defined ( 'BLOG_ID_CURRENT_SITE' ) )
$current_site -> blog_id = BLOG_ID_CURRENT_SITE ;
elseif ( defined ( 'BLOGID_CURRENT_SITE' ) ) // deprecated.
2010-01-28 11:09:52 -05:00
$current_site -> blog_id = BLOGID_CURRENT_SITE ;
if ( DOMAIN_CURRENT_SITE == $domain )
$current_site -> cookie_domain = $cookie_domain ;
elseif ( substr ( $current_site -> domain , 0 , 4 ) == 'www.' )
$current_site -> cookie_domain = substr ( $current_site -> domain , 4 );
else
$current_site -> cookie_domain = $current_site -> domain ;
2010-02-24 18:12:51 -05:00
wp_load_core_site_options ( $current_site -> id );
2010-02-12 12:06:43 -05:00
2010-01-28 11:09:52 -05:00
return $current_site ;
}
2010-02-01 15:26:08 -05:00
$current_site = wp_cache_get ( 'current_site' , 'site-options' );
2010-01-28 11:09:52 -05:00
if ( $current_site )
return $current_site ;
$sites = $wpdb -> get_results ( " SELECT * FROM $wpdb->site " ); // usually only one site
2010-02-01 15:26:08 -05:00
if ( 1 == count ( $sites ) ) {
2010-01-28 11:09:52 -05:00
$current_site = $sites [ 0 ];
2010-02-24 18:12:51 -05:00
wp_load_core_site_options ( $current_site -> id );
2010-01-28 11:09:52 -05:00
$path = $current_site -> path ;
2010-02-01 15:26:08 -05:00
$current_site -> blog_id = $wpdb -> get_var ( $wpdb -> prepare ( " SELECT blog_id FROM $wpdb->blogs WHERE domain = %s AND path = %s " , $current_site -> domain , $current_site -> path ) );
2010-01-28 11:09:52 -05:00
$current_site = get_current_site_name ( $current_site );
if ( substr ( $current_site -> domain , 0 , 4 ) == 'www.' )
$current_site -> cookie_domain = substr ( $current_site -> domain , 4 );
2010-02-01 15:26:08 -05:00
wp_cache_set ( 'current_site' , $current_site , 'site-options' );
2010-01-28 11:09:52 -05:00
return $current_site ;
}
$path = substr ( $_SERVER [ 'REQUEST_URI' ], 0 , 1 + strpos ( $_SERVER [ 'REQUEST_URI' ], '/' , 1 ) );
if ( $domain == $cookie_domain )
2010-02-01 15:26:08 -05:00
$current_site = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->site WHERE domain = %s AND path = %s " , $domain , $path ) );
2010-01-28 11:09:52 -05:00
else
2010-02-01 15:26:08 -05:00
$current_site = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->site WHERE domain IN ( %s, %s ) AND path = %s ORDER BY CHAR_LENGTH( domain ) DESC LIMIT 1 " , $domain , $cookie_domain , $path ) );
if ( ! $current_site ) {
2010-01-28 11:09:52 -05:00
if ( $domain == $cookie_domain )
$current_site = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->site WHERE domain = %s AND path='/' " , $domain ) );
else
$current_site = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->site WHERE domain IN ( %s, %s ) AND path = '/' ORDER BY CHAR_LENGTH( domain ) DESC LIMIT 1 " , $domain , $cookie_domain , $path ) );
}
2010-02-01 15:26:08 -05:00
if ( $current_site ) {
2010-01-28 11:09:52 -05:00
$path = $current_site -> path ;
$current_site -> cookie_domain = $cookie_domain ;
return $current_site ;
2010-02-01 15:26:08 -05:00
}
2010-02-08 13:02:23 -05:00
2010-02-01 15:26:08 -05:00
if ( is_subdomain_install () ) {
2010-01-28 11:09:52 -05:00
$sitedomain = substr ( $domain , 1 + strpos ( $domain , '.' ) );
$current_site = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->site WHERE domain = %s AND path = %s " , $sitedomain , $path ) );
2010-02-01 15:26:08 -05:00
if ( $current_site ) {
2010-01-28 11:09:52 -05:00
$current_site -> cookie_domain = $current_site -> domain ;
return $current_site ;
}
2010-02-01 15:26:08 -05:00
2010-01-28 11:09:52 -05:00
$current_site = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->site WHERE domain = %s AND path='/' " , $sitedomain ) );
2010-02-01 15:26:08 -05:00
}
if ( $current_site || defined ( 'WP_INSTALLING' ) ) {
2010-01-28 11:09:52 -05:00
$path = '/' ;
2010-02-01 15:26:08 -05:00
return $current_site ;
2010-01-20 02:44:47 -05:00
}
2010-02-01 15:26:08 -05:00
// Still no dice.
2012-01-26 15:34:27 -05:00
wp_load_translations_early ();
2010-02-01 15:26:08 -05:00
if ( 1 == count ( $sites ) )
2012-01-26 15:34:27 -05:00
wp_die ( sprintf ( __ ( 'That site does not exist. Please try <a href="%s">%s</a>.' ), 'http://' . $sites [ 0 ] -> domain . $sites [ 0 ] -> path ) );
2010-02-01 15:26:08 -05:00
else
2012-01-26 15:34:27 -05:00
wp_die ( __ ( 'No site defined on this host. If you are the owner of this site, please check <a href="http://codex.wordpress.org/Debugging_a_WordPress_Network">Debugging a WordPress Network</a> for help.' ) );
2010-01-10 13:10:51 -05:00
}
2010-01-28 11:09:52 -05:00
2010-02-01 15:26:08 -05:00
/**
2010-02-20 08:51:32 -05:00
* Displays a failure message .
2010-02-01 15:26:08 -05:00
*
2010-04-30 11:21:10 -04:00
* Used when a blog ' s tables do not exist . Checks for a missing $wpdb -> site table as well .
2010-02-01 15:26:08 -05:00
*
* @ access private
* @ since 3.0 . 0
*/
2010-02-20 08:51:32 -05:00
function ms_not_installed () {
2010-01-28 11:09:52 -05:00
global $wpdb , $domain , $path ;
2010-02-01 15:26:08 -05:00
2012-01-26 15:34:27 -05:00
wp_load_translations_early ();
$title = __ ( 'Error establishing database connection' );
2010-05-03 05:51:40 -04:00
$msg = '<h1>' . $title . '</h1>' ;
2010-04-30 11:21:10 -04:00
if ( ! is_admin () )
die ( $msg );
2012-01-26 15:34:27 -05:00
$msg .= '<p>' . __ ( 'If your site does not display, please contact the owner of this network.' ) . '' ;
$msg .= ' ' . __ ( 'If you are the owner of this network please check that MySQL is running properly and all tables are error free.' ) . '</p>' ;
2010-04-30 11:21:10 -04:00
if ( false && ! $wpdb -> get_var ( " SHOW TABLES LIKE ' $wpdb->site ' " ) )
2012-01-26 15:34:27 -05:00
$msg .= '<p>' . sprintf ( __ ( '<strong>Database tables are missing.</strong> This means that MySQL is not running, WordPress was not installed properly, or someone deleted <code>%s</code>. You really should look at your database now.' ), $wpdb -> site ) . '</p>' ;
2010-02-01 15:26:08 -05:00
else
2012-01-26 15:34:27 -05:00
$msg .= '<p>' . sprintf ( __ ( '<strong>Could not find site <code>%1$s</code>.</strong> Searched for table <code>%2$s</code> in database <code>%3$s</code>. Is that right?' ), rtrim ( $domain . $path , '/' ), $wpdb -> blogs , DB_NAME ) . '</p>' ;
$msg .= '<p><strong>' . __ ( 'What do I do now?' ) . '</strong> ' ;
$msg .= __ ( 'Read the <a target="_blank" href="http://codex.wordpress.org/Debugging_a_WordPress_Network">bug report</a> page. Some of the guidelines there may help you figure out what went wrong.' );
$msg .= ' ' . __ ( 'If you’re still stuck with this message, then check that your database contains the following tables:' ) . '</p><ul>' ;
2010-04-30 11:21:10 -04:00
foreach ( $wpdb -> tables ( 'global' ) as $t => $table ) {
if ( 'sitecategories' == $t )
continue ;
$msg .= '<li>' . $table . '</li>' ;
2010-02-01 15:26:08 -05:00
}
$msg .= '</ul>' ;
2010-04-30 11:21:10 -04:00
wp_die ( $msg , $title );
2010-03-26 15:13:36 -04:00
}