2010-01-10 19:10:51 +01:00
< ? php
/**
2010-01-28 17:09:52 +01:00
* These functions are needed to load Multisite .
2010-01-10 19:10:51 +01:00
*
2010-01-28 17:09:52 +01:00
* @ since 3.0 . 0
2010-01-10 19:10:51 +01:00
*
* @ package WordPress
2010-01-28 17:09:52 +01:00
* @ subpackage Multisite
2010-01-10 19:10:51 +01:00
*/
2010-01-28 17:09:52 +01:00
/**
2010-02-01 21:26:08 +01:00
* Whether a subdomain configuration is enabled .
2010-01-28 17:09:52 +01:00
*
2010-03-26 20:13:36 +01:00
* @ since 3.0 . 0
2010-01-28 17:09:52 +01:00
*
* @ return bool True if subdomain configuration is enabled , false otherwise .
*/
function is_subdomain_install () {
2010-05-04 22:48:28 +02:00
if ( defined ( 'SUBDOMAIN_INSTALL' ) )
return SUBDOMAIN_INSTALL ;
2010-01-28 17:09:52 +01:00
if ( defined ( 'VHOST' ) && VHOST == 'yes' )
return true ;
2010-01-10 19:10:51 +01:00
2010-01-28 17:09:52 +01:00
return false ;
}
2010-01-10 19:10:51 +01:00
2010-11-24 01:19:38 +01: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-08 02:03:12 +01:00
$plugins = array ();
2010-11-24 01:19:38 +01: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 21:26:08 +01: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 19:10:51 +01:00
function ms_site_check () {
2010-01-20 08:44:47 +01:00
global $wpdb , $current_blog ;
2010-04-23 18:18:33 +02:00
// Allow short-circuiting
$check = apply_filters ( 'ms_site_check' , null );
if ( null !== $check )
2010-04-23 18:50:01 +02:00
return true ;
2010-04-23 18:18:33 +02:00
// Allow super admins to see blocked sites
if ( is_super_admin () )
return true ;
2010-01-20 08:44:47 +01:00
if ( '1' == $current_blog -> deleted ) {
2010-02-01 21:26:08 +01:00
if ( file_exists ( WP_CONTENT_DIR . '/blog-deleted.php' ) ) {
return WP_CONTENT_DIR . '/blog-deleted.php' ;
} else {
header ( 'HTTP/1.1 410 Gone' );
2010-03-22 07:51:49 +01:00
wp_die ( /*WP_I18N_USER_DELETED_BLOG*/ 'This user has elected to delete their account and the content is no longer available.' /*/WP_I18N_USER_DELETED_BLOG*/ );
2010-02-01 21:26:08 +01:00
}
}
if ( '2' == $current_blog -> deleted ) {
if ( file_exists ( WP_CONTENT_DIR . '/blog-inactive.php' ) )
return WP_CONTENT_DIR . '/blog-inactive.php' ;
else
2010-03-22 07:51:49 +01:00
wp_die ( sprintf ( /*WP_I18N_BLOG_NOT_ACTIVATED*/ '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>.' /*/WP_I18N_BLOG_NOT_ACTIVATED*/ , str_replace ( '@' , ' AT ' , get_site_option ( 'admin_email' , " support@ { $current_site -> domain } " ) ) ) );
2010-01-20 08:44:47 +01:00
}
2010-01-25 23:09:43 +01:00
if ( $current_blog -> archived == '1' || $current_blog -> spam == '1' ) {
2010-02-01 21:26:08 +01:00
if ( file_exists ( WP_CONTENT_DIR . '/blog-suspended.php' ) ) {
return WP_CONTENT_DIR . '/blog-suspended.php' ;
} else {
header ( 'HTTP/1.1 410 Gone' );
2010-04-30 03:54:32 +02:00
wp_die ( /*WP_I18N_ARCHIVED*/ 'This site has been archived or suspended.' /*/WP_I18N_ARCHIVED*/ );
2010-02-01 21:26:08 +01:00
}
2010-01-20 08:44:47 +01:00
}
2010-01-25 23:09:43 +01:00
2010-01-20 08:44:47 +01:00
return true ;
2010-01-10 19:10:51 +01:00
}
2010-02-01 21:26:08 +01:00
/**
* Sets current site name .
*
* @ access private
* @ since 3.0 . 0
* @ return object $current_site object with site_name
*/
2010-01-28 17:09:52 +01:00
function get_current_site_name ( $current_site ) {
global $wpdb ;
2010-08-31 20:17:20 +02:00
$current_site -> site_name = wp_cache_get ( $current_site -> id . ':site_name' , 'site-options' );
2010-02-01 21:26:08 +01:00
if ( ! $current_site -> site_name ) {
2010-08-31 20:17:20 +02: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 );
2010-01-28 17:09:52 +01:00
}
2010-08-31 20:17:20 +02:00
wp_cache_set ( $current_site -> id . ':site_name' , $current_site -> site_name , 'site-options' );
2010-01-28 17:09:52 +01:00
return $current_site ;
}
2010-02-01 21:26:08 +01:00
/**
* Sets current_site object .
*
* @ access private
* @ since 3.0 . 0
* @ return object $current_site object
*/
2010-01-28 17:09:52 +01:00
function wpmu_current_site () {
global $wpdb , $current_site , $domain , $path , $sites , $cookie_domain ;
if ( defined ( 'DOMAIN_CURRENT_SITE' ) && defined ( 'PATH_CURRENT_SITE' ) ) {
2010-02-19 02:03:58 +01:00
$current_site -> id = defined ( 'SITE_ID_CURRENT_SITE' ) ? SITE_ID_CURRENT_SITE : 1 ;
2010-01-28 17:09:52 +01:00
$current_site -> domain = DOMAIN_CURRENT_SITE ;
$current_site -> path = $path = PATH_CURRENT_SITE ;
2010-03-06 21:01:32 +01:00
if ( defined ( 'BLOG_ID_CURRENT_SITE' ) )
$current_site -> blog_id = BLOG_ID_CURRENT_SITE ;
elseif ( defined ( 'BLOGID_CURRENT_SITE' ) ) // deprecated.
2010-01-28 17:09:52 +01: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-25 00:12:51 +01:00
wp_load_core_site_options ( $current_site -> id );
2010-02-12 18:06:43 +01:00
2010-01-28 17:09:52 +01:00
return $current_site ;
}
2010-02-01 21:26:08 +01:00
$current_site = wp_cache_get ( 'current_site' , 'site-options' );
2010-01-28 17:09:52 +01:00
if ( $current_site )
return $current_site ;
$sites = $wpdb -> get_results ( " SELECT * FROM $wpdb->site " ); // usually only one site
2010-02-01 21:26:08 +01:00
if ( 1 == count ( $sites ) ) {
2010-01-28 17:09:52 +01:00
$current_site = $sites [ 0 ];
2010-02-25 00:12:51 +01:00
wp_load_core_site_options ( $current_site -> id );
2010-01-28 17:09:52 +01:00
$path = $current_site -> path ;
2010-02-01 21:26:08 +01: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 17:09:52 +01: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 21:26:08 +01:00
wp_cache_set ( 'current_site' , $current_site , 'site-options' );
2010-01-28 17:09:52 +01:00
return $current_site ;
}
$path = substr ( $_SERVER [ 'REQUEST_URI' ], 0 , 1 + strpos ( $_SERVER [ 'REQUEST_URI' ], '/' , 1 ) );
if ( $domain == $cookie_domain )
2010-02-01 21:26:08 +01:00
$current_site = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->site WHERE domain = %s AND path = %s " , $domain , $path ) );
2010-01-28 17:09:52 +01:00
else
2010-02-01 21:26:08 +01: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 17:09:52 +01: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 21:26:08 +01:00
if ( $current_site ) {
2010-01-28 17:09:52 +01:00
$path = $current_site -> path ;
$current_site -> cookie_domain = $cookie_domain ;
return $current_site ;
2010-02-01 21:26:08 +01:00
}
2010-02-08 19:02:23 +01:00
2010-02-01 21:26:08 +01:00
if ( is_subdomain_install () ) {
2010-01-28 17:09:52 +01: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 21:26:08 +01:00
if ( $current_site ) {
2010-01-28 17:09:52 +01:00
$current_site -> cookie_domain = $current_site -> domain ;
return $current_site ;
}
2010-02-01 21:26:08 +01:00
2010-01-28 17:09:52 +01:00
$current_site = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->site WHERE domain = %s AND path='/' " , $sitedomain ) );
2010-02-01 21:26:08 +01:00
}
if ( $current_site || defined ( 'WP_INSTALLING' ) ) {
2010-01-28 17:09:52 +01:00
$path = '/' ;
2010-02-01 21:26:08 +01:00
return $current_site ;
2010-01-20 08:44:47 +01:00
}
2010-02-01 21:26:08 +01:00
// Still no dice.
if ( 1 == count ( $sites ) )
2010-04-30 03:54:32 +02:00
wp_die ( sprintf ( /*WP_I18N_BLOG_DOESNT_EXIST*/ 'That site does not exist. Please try <a href="%s">%s</a>.' /*/WP_I18N_BLOG_DOESNT_EXIST*/ , $sites [ 0 ] -> domain . $sites [ 0 ] -> path ) );
2010-02-01 21:26:08 +01:00
else
2010-06-25 18:15:43 +02:00
wp_die ( /*WP_I18N_NO_SITE_DEFINED*/ '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.' /*/WP_I18N_NO_SITE_DEFINED*/ );
2010-01-10 19:10:51 +01:00
}
2010-01-28 17:09:52 +01:00
2010-02-01 21:26:08 +01:00
/**
2010-02-20 14:51:32 +01:00
* Displays a failure message .
2010-02-01 21:26:08 +01:00
*
2010-04-30 17:21:10 +02:00
* Used when a blog ' s tables do not exist . Checks for a missing $wpdb -> site table as well .
2010-02-01 21:26:08 +01:00
*
* @ access private
* @ since 3.0 . 0
*/
2010-02-20 14:51:32 +01:00
function ms_not_installed () {
2010-01-28 17:09:52 +01:00
global $wpdb , $domain , $path ;
2010-02-01 21:26:08 +01:00
2010-05-03 11:51:40 +02:00
$title = /*WP_I18N_FATAL_ERROR*/ 'Error establishing database connection' /*/WP_I18N_FATAL_ERROR*/ ;
$msg = '<h1>' . $title . '</h1>' ;
2010-04-30 17:21:10 +02:00
if ( ! is_admin () )
die ( $msg );
$msg .= '<p>' . /*WP_I18N_CONTACT_OWNER*/ 'If your site does not display, please contact the owner of this network.' /*/WP_I18N_CONTACT_OWNER*/ . '' ;
$msg .= ' ' . /*WP_I18N_CHECK_MYSQL*/ 'If you are the owner of this network please check that MySQL is running properly and all tables are error free.' /*/WP_I18N_CHECK_MYSQL*/ . '</p>' ;
if ( false && ! $wpdb -> get_var ( " SHOW TABLES LIKE ' $wpdb->site ' " ) )
$msg .= '<p>' . sprintf ( /*WP_I18N_TABLES_MISSING_LONG*/ '<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.' /*/WP_I18N_TABLES_MISSING_LONG*/ , $wpdb -> site ) . '</p>' ;
2010-02-01 21:26:08 +01:00
else
2010-05-03 12:14:15 +02:00
$msg .= '<p>' . sprintf ( /*WP_I18N_NO_SITE_FOUND*/ '<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?' /*/WP_I18N_NO_SITE_FOUND*/ , rtrim ( $domain . $path , '/' ), $wpdb -> blogs , DB_NAME ) . '</p>' ;
2010-04-30 17:21:10 +02:00
$msg .= '<p><strong>' . /*WP_I18N_WHAT_DO_I_DO*/ 'What do I do now?' /*WP_I18N_WHAT_DO_I_DO*/ . '</strong> ' ;
2010-06-25 18:15:43 +02:00
$msg .= /*WP_I18N_RTFM*/ '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.' /*/WP_I18N_RTFM*/ ;
2010-04-30 17:21:10 +02:00
$msg .= ' ' . /*WP_I18N_STUCK*/ 'If you’re still stuck with this message, then check that your database contains the following tables:' /*/WP_I18N_STUCK*/ . '</p><ul>' ;
foreach ( $wpdb -> tables ( 'global' ) as $t => $table ) {
if ( 'sitecategories' == $t )
continue ;
$msg .= '<li>' . $table . '</li>' ;
2010-02-01 21:26:08 +01:00
}
$msg .= '</ul>' ;
2010-04-30 17:21:10 +02:00
wp_die ( $msg , $title );
2010-03-26 20:13:36 +01:00
}
2010-05-03 11:51:40 +02:00
?>