2010-01-06 05:02:57 +01:00
< ? php
2010-01-22 23:14:22 +01:00
/**
* Multi - site WordPress API
*
* @ package WordPress
*/
2010-01-23 00:35:59 +01:00
// @todo use update_blog_details
2010-01-06 05:02:57 +01:00
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!
2010-02-04 19:57:32 +01:00
return esc_url ( 'http://' . $bloginfo -> domain . $bloginfo -> path );
2010-01-06 05:02:57 +01:00
}
function get_blogaddress_by_name ( $blogname ) {
global $current_site ;
2010-01-12 19:40:40 +01:00
if ( is_subdomain_install () ) {
if ( $blogname == 'main' )
2010-01-06 05:02:57 +01:00
$blogname = 'www' ;
2010-02-04 19:57:32 +01:00
return esc_url ( 'http://' . $blogname . '.' . $current_site -> domain . $current_site -> path );
2010-01-06 05:02:57 +01:00
} else {
2010-02-04 19:57:32 +01:00
return esc_url ( 'http://' . $current_site -> domain . $current_site -> path . $blogname . '/' );
2010-01-06 05:02:57 +01:00
}
}
function get_blogaddress_by_domain ( $domain , $path ){
2010-01-12 19:40:40 +01:00
if ( is_subdomain_install () ) {
2010-01-06 05:02:57 +01:00
$url = " http:// " . $domain . $path ;
} else {
2010-01-12 19:40:40 +01:00
if ( $domain != $_SERVER [ 'HTTP_HOST' ] ) {
2010-01-06 05:02:57 +01:00
$blogname = substr ( $domain , 0 , strpos ( $domain , '.' ) );
2010-02-04 19:57:32 +01:00
$url = 'http://' . substr ( $domain , strpos ( $domain , '.' ) + 1 ) . $path ;
// we're not installing the main blog
if ( $blogname != 'www.' )
$url .= $blogname . '/' ;
2010-01-06 05:02:57 +01:00
} else { // main blog
$url = 'http://' . $domain . $path ;
}
}
2010-02-04 19:57:32 +01:00
return esc_url ( $url );
2010-01-06 05:02:57 +01:00
}
function get_sitestats () {
global $wpdb ;
$stats [ 'blogs' ] = get_blog_count ();
2010-02-04 19:57:32 +01:00
$count_ts = get_site_option ( 'user_count_ts' );
2010-01-12 19:40:40 +01:00
if ( time () - $count_ts > 3600 ) {
2010-02-04 19:57:32 +01:00
$count = $wpdb -> get_var ( " SELECT COUNT(ID) FROM $wpdb->users " );
update_site_option ( 'user_count' , $count );
update_site_option ( 'user_count_ts' , time () );
2010-01-06 05:02:57 +01:00
} else {
2010-02-04 19:57:32 +01:00
$count = get_site_option ( 'user_count' );
2010-01-06 05:02:57 +01:00
}
$stats [ 'users' ] = $count ;
return $stats ;
}
function get_admin_users_for_domain ( $sitedomain = '' , $path = '' ) {
global $wpdb ;
2010-01-07 05:27:46 +01:00
2010-02-04 19:57:32 +01:00
if ( ! $sitedomain )
2010-01-06 05:02:57 +01:00
$site_id = $wpdb -> siteid ;
2010-01-12 19:40:40 +01:00
else
2010-02-04 19:57:32 +01:00
$site_id = $wpdb -> get_var ( $wpdb -> prepare ( " SELECT id FROM $wpdb->site WHERE domain = %s AND path = %s " , $sitedomain , $path ) );
2010-01-06 05:02:57 +01:00
2010-02-04 19:57:32 +01:00
if ( $site_id )
return $wpdb -> get_results ( $wpdb -> prepare ( " SELECT u.ID, u.user_login, u.user_pass FROM $wpdb->users AS u, $wpdb->sitemeta AS sm WHERE sm.meta_key = 'admin_user_id' AND u.ID = sm.meta_value AND sm.site_id = %d " , $site_id ), ARRAY_A );
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
return false ;
}
function get_id_from_blogname ( $name ) {
global $wpdb , $current_site ;
$blog_id = wp_cache_get ( " get_id_from_blogname_ " . $name , 'blog-details' );
2010-01-07 11:52:21 +01:00
if ( $blog_id )
2010-01-06 05:02:57 +01:00
return $blog_id ;
2010-01-08 22:25:01 +01:00
if ( is_subdomain_install () ) {
2010-01-06 05:02:57 +01:00
$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 ;
}
2010-01-23 00:35:59 +01:00
/**
* 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 ) {
2010-01-06 05:02:57 +01:00
global $wpdb ;
2010-01-23 00:35:59 +01:00
if ( ! is_numeric ( $blog_id ) )
$blog_id = get_id_from_blogname ( $blog_id );
2010-01-12 19:40:40 +01:00
2010-01-23 00:35:59 +01:00
$blog_id = ( int ) $blog_id ;
2010-01-22 23:14:22 +01:00
2010-01-23 00:35:59 +01:00
$all = $get_all == true ? '' : 'short' ;
$details = wp_cache_get ( $blog_id . $all , 'blog-details' );
2010-01-06 05:02:57 +01:00
if ( $details ) {
2010-02-04 19:57:32 +01:00
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 ;
2010-01-06 05:02:57 +01:00
}
2010-02-04 19:57:32 +01:00
$details = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->blogs WHERE blog_id = %d " , $blog_id ) );
if ( ! $details ) {
2010-01-23 00:35:59 +01:00
wp_cache_set ( $blog_id . $all , - 1 , 'blog-details' );
2010-01-06 05:02:57 +01:00
return false ;
}
2010-02-04 19:57:32 +01:00
if ( ! $get_all ) {
2010-01-23 00:35:59 +01:00
wp_cache_set ( $blog_id . $all , $details , 'blog-details' );
2010-01-06 05:02:57 +01:00
return $details ;
}
2010-02-04 19:57:32 +01:00
$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' );
2010-01-06 05:02:57 +01:00
2010-02-04 19:57:32 +01:00
$details = apply_filters ( 'blog_details' , $details );
2010-01-06 05:02:57 +01:00
2010-01-23 00:35:59 +01:00
wp_cache_set ( $blog_id . $all , $details , 'blog-details' );
2010-01-06 05:02:57 +01:00
$key = md5 ( $details -> domain . $details -> path );
wp_cache_set ( $key , $details , 'blog-lookup' );
return $details ;
}
2010-01-23 00:35:59 +01:00
/**
* 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 );
2010-01-06 05:02:57 +01:00
2010-01-23 00:35:59 +01:00
wp_cache_delete ( $blog_id , 'blog-details' );
wp_cache_delete ( $blog_id . 'short' , 'blog-details' );
2010-01-06 05:02:57 +01:00
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' );
}
2010-01-23 00:35:59 +01:00
/**
* 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 ;
}
2010-01-06 05:02:57 +01:00
/**
* 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 ) {
$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 ;
2010-01-12 19:40:40 +01:00
if ( $value == false )
2010-01-06 05:02:57 +01:00
wp_cache_set ( $key , 'falsevalue' , 'site-options' );
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
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 ;
}
2010-01-12 19:40:40 +01:00
} elseif ( $value == 'noop' ) {
2010-01-06 05:02:57 +01:00
$value = $default ;
2010-01-12 19:40:40 +01:00
} elseif ( $value == 'falsevalue' ) {
2010-01-06 05:02:57 +01:00
$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 )
2010-02-04 20:26:38 +01:00
$value = untrailingslashit ( $value );
2010-01-06 05:02:57 +01:00
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 ;
2010-01-07 05:27:46 +01:00
2010-01-06 05:02:57 +01:00
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 ;
2010-01-07 05:27:46 +01:00
2010-01-06 05:02:57 +01:00
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 ;
2010-01-07 05:27:46 +01:00
2010-01-06 05:02:57 +01:00
switch_to_blog ( $id );
update_option ( $key , $value );
restore_current_blog ();
2010-01-12 19:40:40 +01:00
if ( $refresh == true )
2010-01-06 05:02:57 +01:00
refresh_blog_details ( $id );
wp_cache_set ( $id . " - " . $key . " -blog_option " , $value , 'site-options' );
}
function switch_to_blog ( $new_blog ) {
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 ( empty ( $switched_stack ) )
$switched_stack = array ();
$switched_stack [] = $blog_id ;
2010-01-07 05:27:46 +01:00
/* If we 're switching to the same blog id that we' re on ,
* set the right vars , do the associated actions , but skip
2010-01-06 05:02:57 +01:00
* 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 ;
2010-01-12 19:40:40 +01:00
if ( is_object ( $wp_roles ) ) {
2010-01-06 05:02:57 +01:00
$wpdb -> suppress_errors ();
2010-01-12 19:40:40 +01:00
if ( method_exists ( $wp_roles , '_init' ) )
2010-01-06 05:02:57 +01:00
$wp_roles -> _init ();
2010-01-12 19:40:40 +01:00
elseif ( method_exists ( $wp_roles , '__construct' ) )
2010-01-06 05:02:57 +01:00
$wp_roles -> __construct ();
$wpdb -> suppress_errors ( false );
}
if ( is_object ( $current_user ) )
2010-01-22 18:27:28 +01:00
$current_user -> for_blog ( $blog_id );
2010-01-06 05:02:57 +01:00
2010-01-15 19:02:34 +01:00
if ( is_object ( $wp_object_cache ) && isset ( $wp_object_cache -> global_groups ) )
2010-01-06 05:02:57 +01:00
$global_groups = $wp_object_cache -> global_groups ;
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
$global_groups = false ;
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
wp_cache_init ();
if ( function_exists ( 'wp_cache_add_global_groups' ) ) {
2010-01-12 19:40:40 +01:00
if ( is_array ( $global_groups ) )
2010-01-06 05:02:57 +01:00
wp_cache_add_global_groups ( $global_groups );
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
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 ;
2010-01-12 19:40:40 +01:00
if ( is_object ( $wp_roles ) ) {
2010-01-06 05:02:57 +01:00
$wpdb -> suppress_errors ();
2010-01-12 19:40:40 +01:00
if ( method_exists ( $wp_roles , '_init' ) )
2010-01-06 05:02:57 +01:00
$wp_roles -> _init ();
2010-01-12 19:40:40 +01:00
elseif ( method_exists ( $wp_roles , '__construct' ) )
2010-01-06 05:02:57 +01:00
$wp_roles -> __construct ();
$wpdb -> suppress_errors ( false );
}
if ( is_object ( $current_user ) )
2010-01-22 18:27:28 +01:00
$current_user -> for_blog ( $blog_id );
2010-01-06 05:02:57 +01:00
2010-01-15 19:02:34 +01:00
if ( is_object ( $wp_object_cache ) && isset ( $wp_object_cache -> global_groups ) )
2010-01-06 05:02:57 +01:00
$global_groups = $wp_object_cache -> global_groups ;
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
$global_groups = false ;
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
wp_cache_init ();
if ( function_exists ( 'wp_cache_add_global_groups' ) ) {
2010-01-12 19:40:40 +01:00
if ( is_array ( $global_groups ) )
2010-01-06 05:02:57 +01:00
wp_cache_add_global_groups ( $global_groups );
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
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 );
2010-01-07 05:27:46 +01:00
/* If we still have items in the switched stack, consider ourselves still 'switched' */
2010-01-06 05:02:57 +01:00
$switched = ( is_array ( $switched_stack ) && count ( $switched_stack ) > 0 );
return true ;
}
function get_blogs_of_user ( $id , $all = false ) {
global $wpdb ;
$cache_suffix = $all ? '_all' : '_short' ;
$return = wp_cache_get ( 'blogs_of_user_' . $id . $cache_suffix , 'users' );
2010-01-12 19:40:40 +01:00
if ( $return )
2010-01-06 05:02:57 +01:00
return apply_filters ( 'get_blogs_of_user' , $return , $id , $all );
$user = get_userdata ( ( int ) $id );
if ( ! $user )
return false ;
$blogs = $match = array ();
foreach ( ( array ) $user as $key => $value ) {
2010-01-23 00:51:23 +01:00
if ( false !== strpos ( $key , '_capabilities' ) && 0 === strpos ( $key , $wpdb -> base_prefix ) && preg_match ( '/' . $wpdb -> base_prefix . '((\d+)_)?capabilities/' , $key , $match ) ) {
if ( count ( $match ) > 2 )
$blog_id = $match [ 2 ];
else
$blog_id = 1 ;
$blog = get_blog_details ( $blog_id );
2010-01-06 05:02:57 +01:00
if ( $blog && isset ( $blog -> domain ) && ( $all == true || $all == false && ( $blog -> archived == 0 && $blog -> spam == 0 && $blog -> deleted == 0 ) ) ) {
2010-01-23 00:51:23 +01:00
$blogs [ $blog_id ] -> userblog_id = $blog_id ;
$blogs [ $blog_id ] -> blogname = $blog -> blogname ;
$blogs [ $blog_id ] -> domain = $blog -> domain ;
$blogs [ $blog_id ] -> path = $blog -> path ;
$blogs [ $blog_id ] -> site_id = $blog -> site_id ;
$blogs [ $blog_id ] -> siteurl = $blog -> siteurl ;
2010-01-06 05:02:57 +01:00
}
}
}
wp_cache_add ( 'blogs_of_user_' . $id . $cache_suffix , $blogs , 'users' , 5 );
return apply_filters ( 'get_blogs_of_user' , $blogs , $id , $all );
}
function get_active_blog_for_user ( $user_id ) { // get an active blog for user - either primary blog or from blogs list
global $wpdb ;
$blogs = get_blogs_of_user ( $user_id );
if ( empty ( $blogs ) ) {
$details = get_dashboard_blog ();
add_user_to_blog ( $details -> blog_id , $user_id , 'subscriber' );
update_usermeta ( $user_id , 'primary_blog' , $details -> blog_id );
wp_cache_delete ( $user_id , 'users' );
return $details ;
}
$primary_blog = get_usermeta ( $user_id , " primary_blog " );
$details = get_dashboard_blog ();
if ( $primary_blog ) {
$blogs = get_blogs_of_user ( $user_id );
if ( isset ( $blogs [ $primary_blog ] ) == false ) {
add_user_to_blog ( $details -> blog_id , $user_id , 'subscriber' );
update_usermeta ( $user_id , 'primary_blog' , $details -> blog_id );
wp_cache_delete ( $user_id , 'users' );
} else {
$details = get_blog_details ( $primary_blog );
}
} else {
add_user_to_blog ( $details -> blog_id , $user_id , 'subscriber' ); // Add subscriber permission for dashboard blog
update_usermeta ( $user_id , 'primary_blog' , $details -> blog_id );
}
if ( ( is_object ( $details ) == false ) || ( is_object ( $details ) && $details -> archived == 1 || $details -> spam == 1 || $details -> deleted == 1 ) ) {
$blogs = get_blogs_of_user ( $user_id , true ); // if a user's primary blog is shut down, check their other blogs.
$ret = false ;
if ( is_array ( $blogs ) && count ( $blogs ) > 0 ) {
2010-01-19 18:01:39 +01:00
foreach ( ( array ) $blogs as $blog_id => $blog ) {
2010-01-06 05:02:57 +01:00
if ( $blog -> site_id != $wpdb -> siteid )
continue ;
$details = get_blog_details ( $blog_id );
if ( is_object ( $details ) && $details -> archived == 0 && $details -> spam == 0 && $details -> deleted == 0 ) {
$ret = $blog ;
$changed = false ;
if ( get_usermeta ( $user_id , 'primary_blog' ) != $blog_id ) {
update_usermeta ( $user_id , 'primary_blog' , $blog_id );
$changed = true ;
}
if ( ! get_usermeta ( $user_id , 'source_domain' ) ) {
update_usermeta ( $user_id , 'source_domain' , $blog -> domain );
$changed = true ;
}
if ( $changed )
wp_cache_delete ( $user_id , 'users' );
break ;
}
}
} else {
// Should never get here
$dashboard_blog = get_dashboard_blog ();
add_user_to_blog ( $dashboard_blog -> blog_id , $user_id , 'subscriber' ); // Add subscriber permission for dashboard blog
update_usermeta ( $user_id , 'primary_blog' , $dashboard_blog -> blog_id );
return $dashboard_blog ;
}
return $ret ;
} else {
return $details ;
}
}
function is_user_member_of_blog ( $user_id , $blog_id = 0 ) {
$user_id = ( int ) $user_id ;
$blog_id = ( int ) $blog_id ;
2010-01-07 05:27:46 +01:00
2010-01-12 19:40:40 +01:00
if ( $blog_id == 0 ) {
2010-01-06 05:02:57 +01:00
global $wpdb ;
$blog_id = $wpdb -> blogid ;
}
2010-01-07 05:27:46 +01:00
2010-01-06 05:02:57 +01:00
$blogs = get_blogs_of_user ( $user_id );
2010-01-12 19:40:40 +01:00
if ( is_array ( $blogs ) )
2010-01-06 05:02:57 +01:00
return array_key_exists ( $blog_id , $blogs );
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
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 ;
}
2010-01-23 00:35:59 +01:00
/**
* 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 ) {
2010-01-06 05:02:57 +01:00
global $wpdb ;
if ( ! in_array ( $pref , array ( 'site_id' , 'domain' , 'path' , 'registered' , 'last_updated' , 'public' , 'archived' , 'mature' , 'spam' , 'deleted' , 'lang_id' ) ) )
return $value ;
2010-01-23 00:35:59 +01:00
$wpdb -> update ( $wpdb -> blogs , array ( $pref => $value , 'last_updated' => current_time ( 'mysql' , true )), array ( 'blog_id' => $blog_id ) );
if ( $refresh )
2010-01-25 23:46:41 +01:00
refresh_blog_details ( $blog_id );
2010-01-06 05:02:57 +01:00
2010-01-12 19:40:40 +01:00
if ( $pref == 'spam' ) {
if ( $value == 1 )
2010-01-25 23:46:41 +01:00
do_action ( " make_spam_blog " , $blog_id );
2010-01-12 19:40:40 +01:00
else
2010-01-25 23:46:41 +01:00
do_action ( " make_ham_blog " , $blog_id );
2010-01-06 05:02:57 +01:00
}
return $value ;
}
function get_blog_status ( $id , $pref ) {
global $wpdb ;
$details = get_blog_details ( $id , false );
2010-01-12 19:40:40 +01:00
if ( $details )
2010-01-06 05:02:57 +01:00
return $details -> $pref ;
2010-01-12 19:40:40 +01:00
2010-01-23 00:35:59 +01:00
return $wpdb -> get_var ( $wpdb -> prepare ( " SELECT %s FROM { $wpdb -> blogs } WHERE blog_id = %d " , $pref , $id ) );
2010-01-06 05:02:57 +01:00
}
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 ;
2010-01-12 19:40:40 +01:00
if ( is_array ( $most_active ) ) {
if ( ( $most_active [ 'time' ] + 60 ) < time () ) { // cache for 60 seconds.
2010-01-06 05:02:57 +01:00
$update = true ;
}
} else {
$update = true ;
}
2010-01-12 19:40:40 +01:00
if ( $update == true ) {
2010-01-06 05:02:57 +01:00
unset ( $most_active );
$blogs = get_blog_list ( 0 , 'all' , false ); // $blog_id -> $details
2010-01-12 19:40:40 +01:00
if ( is_array ( $blogs ) ) {
2010-01-06 05:02:57 +01:00
reset ( $blogs );
foreach ( ( array ) $blogs as $key => $details ) {
$most_active [ $details [ 'blog_id' ] ] = $details [ 'postcount' ];
$blog_list [ $details [ 'blog_id' ] ] = $details ; // array_slice() removes keys!!
}
arsort ( $most_active );
reset ( $most_active );
2010-01-12 19:40:40 +01:00
foreach ( ( array ) $most_active as $key => $details )
2010-01-06 05:02:57 +01:00
$t [ $key ] = $blog_list [ $key ];
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
unset ( $most_active );
$most_active = $t ;
}
update_site_option ( " most_active " , $most_active );
}
2010-01-12 19:40:40 +01:00
if ( $display == true ) {
if ( is_array ( $most_active ) ) {
2010-01-06 05:02:57 +01:00
reset ( $most_active );
foreach ( ( array ) $most_active as $key => $details ) {
2010-02-04 19:57:32 +01:00
$url = esc_url ( " http:// " . $details [ 'domain' ] . $details [ 'path' ]);
2010-01-06 05:02:57 +01:00
echo " <li> " . $details [ 'postcount' ] . " <a href=' $url '> $url </a></li> " ;
}
}
}
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 ;
2010-01-12 19:40:40 +01:00
if ( is_array ( $blogs ) ) {
if ( ( $blogs [ 'time' ] + 60 ) < time () ) { // cache for 60 seconds.
2010-01-06 05:02:57 +01:00
$update = true ;
}
} else {
$update = true ;
}
2010-01-12 19:40:40 +01:00
if ( $update == true ) {
2010-01-06 05:02:57 +01:00
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 );
}
2010-01-12 19:40:40 +01:00
if ( false == is_array ( $blogs ) )
2010-01-06 05:02:57 +01:00
return array ();
2010-01-12 19:40:40 +01:00
if ( $num == 'all' )
2010-01-06 05:02:57 +01:00
return array_slice ( $blogs , $start , count ( $blogs ) );
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
return array_slice ( $blogs , $start , $num );
}
function get_user_count () {
global $wpdb ;
$count_ts = get_site_option ( " user_count_ts " );
2010-01-12 19:40:40 +01:00
if ( time () - $count_ts > 3600 ) {
2010-01-06 05:02:57 +01:00
$count = $wpdb -> get_var ( $wpdb -> prepare ( " SELECT COUNT(ID) as c FROM $wpdb->users WHERE spam = '0' AND deleted = '0' " ) );
update_site_option ( " user_count " , $count );
update_site_option ( " user_count_ts " , time () );
}
$count = get_site_option ( " user_count " );
return $count ;
}
function get_blog_count ( $id = 0 ) {
global $wpdb ;
2010-01-12 19:40:40 +01:00
if ( $id == 0 )
2010-01-06 05:02:57 +01:00
$id = $wpdb -> siteid ;
$count_ts = get_site_option ( " blog_count_ts " );
2010-01-12 19:40:40 +01:00
if ( time () - $count_ts > 3600 ) {
2010-01-06 05:02:57 +01:00
$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' " , $id ) );
update_site_option ( " blog_count " , $count );
update_site_option ( " blog_count_ts " , time () );
}
$count = get_site_option ( " blog_count " );
return $count ;
}
function get_blog_post ( $blog_id , $post_id ) {
global $wpdb ;
$key = $blog_id . " - " . $post_id ;
$post = wp_cache_get ( $key , " global-posts " );
2010-01-12 19:40:40 +01:00
if ( $post == false ) {
2010-01-06 05:02:57 +01:00
$post = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM " . $wpdb -> get_blog_prefix ( $blog_id ) . " posts WHERE ID = %d " , $post_id ) );
wp_cache_add ( $key , $post , " global-posts " );
}
return $post ;
}
function add_user_to_blog ( $blog_id , $user_id , $role ) {
switch_to_blog ( $blog_id );
$user = new WP_User ( $user_id );
if ( empty ( $user ) )
return new WP_Error ( 'user_does_not_exist' , __ ( 'That user does not exist.' ));
if ( ! get_usermeta ( $user_id , 'primary_blog' ) ) {
update_usermeta ( $user_id , 'primary_blog' , $blog_id );
$details = get_blog_details ( $blog_id );
update_usermeta ( $user_id , 'source_domain' , $details -> domain );
}
$user -> set_role ( $role );
do_action ( 'add_user_to_blog' , $user_id , $role , $blog_id );
wp_cache_delete ( $user_id , 'users' );
restore_current_blog ();
return true ;
}
function remove_user_from_blog ( $user_id , $blog_id = '' , $reassign = '' ) {
global $wpdb ;
switch_to_blog ( $blog_id );
$user_id = ( int ) $user_id ;
do_action ( 'remove_user_from_blog' , $user_id , $blog_id );
// If being removed from the primary blog, set a new primary if the user is assigned
// to multiple blogs.
$primary_blog = get_usermeta ( $user_id , 'primary_blog' );
if ( $primary_blog == $blog_id ) {
$new_id = '' ;
$new_domain = '' ;
$blogs = get_blogs_of_user ( $user_id );
foreach ( ( array ) $blogs as $blog ) {
if ( $blog -> userblog_id == $blog_id )
continue ;
$new_id = $blog -> userblog_id ;
$new_domain = $blog -> domain ;
break ;
}
update_usermeta ( $user_id , 'primary_blog' , $new_id );
update_usermeta ( $user_id , 'source_domain' , $new_domain );
}
// wp_revoke_user($user_id);
$user = new WP_User ( $user_id );
$user -> remove_all_caps ();
$blogs = get_blogs_of_user ( $user_id );
if ( count ( $blogs ) == 0 ) {
update_usermeta ( $user_id , 'primary_blog' , '' );
update_usermeta ( $user_id , 'source_domain' , '' );
}
2010-01-12 19:40:40 +01:00
if ( $reassign != '' ) {
2010-01-06 05:02:57 +01:00
$reassign = ( int ) $reassign ;
$wpdb -> query ( $wpdb -> prepare ( " UPDATE $wpdb->posts SET post_author = %d WHERE post_author = %d " , $reassign , $user_id ) );
$wpdb -> query ( $wpdb -> prepare ( " UPDATE $wpdb->links SET link_owner = %d WHERE link_owner = %d " , $reassign , $user_id ) );
}
restore_current_blog ();
}
function create_empty_blog ( $domain , $path , $weblog_title , $site_id = 1 ) {
2010-01-12 19:40:40 +01:00
$domain = addslashes ( $domain );
$weblog_title = addslashes ( $weblog_title );
2010-01-06 05:02:57 +01:00
2010-01-12 19:40:40 +01:00
if ( empty ( $path ) )
2010-01-06 05:02:57 +01:00
$path = '/' ;
// Check if the domain has been used already. We should return an error message.
if ( domain_exists ( $domain , $path , $site_id ) )
return __ ( 'error: Blog URL already taken.' );
// Need to backup wpdb table names, and create a new wp_blogs entry for new blog.
// Need to get blog_id from wp_blogs, and create new table names.
// Must restore table names at the end of function.
if ( ! $blog_id = insert_blog ( $domain , $path , $site_id ) )
return __ ( 'error: problem creating blog entry' );
switch_to_blog ( $blog_id );
install_blog ( $blog_id );
restore_current_blog ();
return $blog_id ;
}
function get_blog_permalink ( $_blog_id , $post_id ) {
$key = " { $_blog_id } - { $post_id } -blog_permalink " ;
$link = wp_cache_get ( $key , 'site-options' );
2010-01-12 19:40:40 +01:00
if ( $link == false ) {
2010-01-06 05:02:57 +01:00
switch_to_blog ( $_blog_id );
$link = get_permalink ( $post_id );
restore_current_blog ();
wp_cache_add ( $key , $link , 'site-options' , 360 );
}
return $link ;
}
function get_blog_id_from_url ( $domain , $path = '/' ) {
global $wpdb ;
$domain = strtolower ( $wpdb -> escape ( $domain ) );
$path = strtolower ( $wpdb -> escape ( $path ) );
$id = wp_cache_get ( md5 ( $domain . $path ), 'blog-id-cache' );
2010-01-12 19:40:40 +01:00
if ( $id == - 1 ) { // blog does not exist
2010-01-06 05:02:57 +01:00
return 0 ;
2010-01-12 19:40:40 +01:00
} elseif ( $id ) {
2010-01-06 05:02:57 +01:00
return ( int ) $id ;
}
$id = $wpdb -> get_var ( " SELECT blog_id FROM $wpdb->blogs WHERE domain = ' $domain ' and path = ' $path ' /* get_blog_id_from_url */ " );
if ( ! $id ) {
wp_cache_set ( md5 ( $domain . $path ), - 1 , 'blog-id-cache' );
return false ;
}
wp_cache_set ( md5 ( $domain . $path ), $id , 'blog-id-cache' );
return $id ;
}
// wpmu admin functions
function wpmu_admin_do_redirect ( $url = '' ) {
$ref = '' ;
if ( isset ( $_GET [ 'ref' ] ) )
$ref = $_GET [ 'ref' ];
if ( isset ( $_POST [ 'ref' ] ) )
$ref = $_POST [ 'ref' ];
2010-01-12 19:40:40 +01:00
if ( $ref ) {
2010-01-06 05:02:57 +01:00
$ref = wpmu_admin_redirect_add_updated_param ( $ref );
wp_redirect ( $ref );
exit ();
}
2010-01-12 19:40:40 +01:00
if ( empty ( $_SERVER [ 'HTTP_REFERER' ] ) == false ) {
2010-01-06 05:02:57 +01:00
wp_redirect ( $_SERVER [ 'HTTP_REFERER' ] );
exit ();
}
$url = wpmu_admin_redirect_add_updated_param ( $url );
2010-01-12 19:40:40 +01:00
if ( isset ( $_GET [ 'redirect' ] ) ) {
if ( substr ( $_GET [ 'redirect' ], 0 , 2 ) == 's_' )
2010-01-06 05:02:57 +01:00
$url .= " &action=blogs&s= " . wp_specialchars ( substr ( $_GET [ 'redirect' ], 2 ) );
2010-01-12 19:40:40 +01:00
} elseif ( isset ( $_POST [ 'redirect' ] ) ) {
2010-01-06 05:02:57 +01:00
$url = wpmu_admin_redirect_add_updated_param ( $_POST [ 'redirect' ] );
}
wp_redirect ( $url );
exit ();
}
function wpmu_admin_redirect_add_updated_param ( $url = '' ) {
2010-01-12 19:40:40 +01:00
if ( strpos ( $url , 'updated=true' ) === false ) {
if ( strpos ( $url , '?' ) === false )
2010-01-06 05:02:57 +01:00
return $url . '?updated=true' ;
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
return $url . '&updated=true' ;
}
return $url ;
}
function is_blog_user ( $blog_id = 0 ) {
global $current_user , $wpdb ;
if ( ! $blog_id )
$blog_id = $wpdb -> blogid ;
$cap_key = $wpdb -> base_prefix . $blog_id . '_capabilities' ;
if ( is_array ( $current_user -> $cap_key ) && in_array ( 1 , $current_user -> $cap_key ) )
return true ;
return false ;
}
function is_email_address_unsafe ( $user_email ) {
$banned_names = get_site_option ( " banned_email_domains " );
2010-01-12 19:40:40 +01:00
if ( $banned_names && ! is_array ( $banned_names ))
2010-01-07 05:27:46 +01:00
$banned_names = explode ( " \n " , $banned_names );
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
if ( is_array ( $banned_names ) && empty ( $banned_names ) == false ) {
$email_domain = strtolower ( substr ( $user_email , 1 + strpos ( $user_email , '@' ) ) );
2010-01-19 18:01:39 +01:00
foreach ( ( array ) $banned_names as $banned_domain ) {
2010-01-12 19:40:40 +01:00
if ( $banned_domain == '' )
2010-01-06 05:02:57 +01:00
continue ;
if (
strstr ( $email_domain , $banned_domain ) ||
(
strstr ( $banned_domain , '/' ) &&
preg_match ( $banned_domain , $email_domain )
)
)
return true ;
}
}
return false ;
}
function wpmu_validate_user_signup ( $user_name , $user_email ) {
global $wpdb ;
$errors = new WP_Error ();
$user_name = preg_replace ( " / \ s+/ " , '' , sanitize_user ( $user_name , true ) );
$user_email = sanitize_email ( $user_email );
if ( empty ( $user_name ) )
$errors -> add ( 'user_name' , __ ( " Please enter a username " ));
$maybe = array ();
preg_match ( " /[a-z0-9]+/ " , $user_name , $maybe );
2010-01-12 19:40:40 +01:00
if ( $user_name != $maybe [ 0 ] )
$errors -> add ( 'user_name' , __ ( " Only lowercase letters and numbers allowed " ));
2010-01-06 05:02:57 +01:00
$illegal_names = get_site_option ( " illegal_names " );
2010-01-12 19:40:40 +01:00
if ( is_array ( $illegal_names ) == false ) {
2010-01-06 05:02:57 +01:00
$illegal_names = array ( " www " , " web " , " root " , " admin " , " main " , " invite " , " administrator " );
add_site_option ( " illegal_names " , $illegal_names );
}
2010-01-12 19:40:40 +01:00
if ( in_array ( $user_name , $illegal_names ) == true )
$errors -> add ( 'user_name' , __ ( " That username is not allowed " ));
2010-01-06 05:02:57 +01:00
2010-01-12 19:40:40 +01:00
if ( is_email_address_unsafe ( $user_email ) )
2010-01-06 05:02:57 +01:00
$errors -> add ( 'user_email' , __ ( " You cannot use that email address to signup. We are having problems with them blocking some of our email. Please use another email provider. " ));
2010-01-12 19:40:40 +01:00
if ( strlen ( $user_name ) < 4 )
$errors -> add ( 'user_name' , __ ( " Username must be at least 4 characters " ));
2010-01-06 05:02:57 +01:00
if ( strpos ( " " . $user_name , " _ " ) != false )
$errors -> add ( 'user_name' , __ ( " Sorry, usernames may not contain the character '_'! " ));
// all numeric?
$match = array ();
preg_match ( '/[0-9]*/' , $user_name , $match );
if ( $match [ 0 ] == $user_name )
$errors -> add ( 'user_name' , __ ( " Sorry, usernames must have letters too! " ));
if ( ! is_email ( $user_email ) )
2010-01-12 19:40:40 +01:00
$errors -> add ( 'user_email' , __ ( " Please enter a correct email address " ));
2010-01-06 05:02:57 +01:00
$limited_email_domains = get_site_option ( 'limited_email_domains' );
if ( is_array ( $limited_email_domains ) && empty ( $limited_email_domains ) == false ) {
$emaildomain = substr ( $user_email , 1 + strpos ( $user_email , '@' ) );
2010-01-12 19:40:40 +01:00
if ( in_array ( $emaildomain , $limited_email_domains ) == false )
2010-01-06 05:02:57 +01:00
$errors -> add ( 'user_email' , __ ( " Sorry, that email address is not allowed! " ));
}
// Check if the username has been used already.
if ( username_exists ( $user_name ) )
$errors -> add ( 'user_name' , __ ( " Sorry, that username already exists! " ));
// Check if the email address has been used already.
if ( email_exists ( $user_email ) )
$errors -> add ( 'user_email' , __ ( " Sorry, that email address is already used! " ));
// Has someone already signed up for this username?
$signup = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->signups WHERE user_login = %s " , $user_name ) );
if ( $signup != null ) {
$registered_at = mysql2date ( 'U' , $signup -> registered );
$now = current_time ( 'timestamp' , true );
$diff = $now - $registered_at ;
// If registered more than two days ago, cancel registration and let this signup go through.
2010-01-12 19:40:40 +01:00
if ( $diff > 172800 )
2010-01-06 05:02:57 +01:00
$wpdb -> query ( $wpdb -> prepare ( " DELETE FROM $wpdb->signups WHERE user_login = %s " , $user_name ) );
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
$errors -> add ( 'user_name' , __ ( " That username is currently reserved but may be available in a couple of days. " ));
2010-01-12 19:40:40 +01:00
if ( $signup -> active == 0 && $signup -> user_email == $user_email )
2010-01-06 05:02:57 +01:00
$errors -> add ( 'user_email_used' , __ ( " username and email used " ));
}
$signup = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->signups WHERE user_email = %s " , $user_email ) );
if ( $signup != null ) {
$diff = current_time ( 'timestamp' , true ) - mysql2date ( 'U' , $signup -> registered );
// If registered more than two days ago, cancel registration and let this signup go through.
2010-01-12 19:40:40 +01:00
if ( $diff > 172800 )
2010-01-06 05:02:57 +01:00
$wpdb -> query ( $wpdb -> prepare ( " DELETE FROM $wpdb->signups WHERE user_email = %s " , $user_email ) );
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
$errors -> add ( 'user_email' , __ ( " That email address has already been used. Please check your inbox for an activation email. It will become available in a couple of days if you do nothing. " ));
}
$result = array ( 'user_name' => $user_name , 'user_email' => $user_email , 'errors' => $errors );
return apply_filters ( 'wpmu_validate_user_signup' , $result );
}
function wpmu_validate_blog_signup ( $blogname , $blog_title , $user = '' ) {
global $wpdb , $domain , $base , $current_site ;
$blogname = preg_replace ( " / \ s+/ " , '' , sanitize_user ( $blogname , true ) );
$blog_title = strip_tags ( $blog_title );
$blog_title = substr ( $blog_title , 0 , 50 );
$errors = new WP_Error ();
$illegal_names = get_site_option ( " illegal_names " );
2010-01-12 19:40:40 +01:00
if ( $illegal_names == false ) {
$illegal_names = array ( " www " , " web " , " root " , " admin " , " main " , " invite " , " administrator " );
add_site_option ( " illegal_names " , $illegal_names );
2010-01-06 05:02:57 +01:00
}
if ( empty ( $blogname ) )
2010-01-12 19:40:40 +01:00
$errors -> add ( 'blogname' , __ ( " Please enter a blog name " ));
2010-01-06 05:02:57 +01:00
$maybe = array ();
preg_match ( " /[a-z0-9]+/ " , $blogname , $maybe );
2010-01-12 19:40:40 +01:00
if ( $blogname != $maybe [ 0 ] )
$errors -> add ( 'blogname' , __ ( " Only lowercase letters and numbers allowed " ));
if ( in_array ( $blogname , $illegal_names ) == true )
$errors -> add ( 'blogname' , __ ( " That name is not allowed " ));
if ( strlen ( $blogname ) < 4 && ! is_super_admin () )
$errors -> add ( 'blogname' , __ ( " Blog name must be at least 4 characters " ));
2010-01-06 05:02:57 +01:00
if ( strpos ( " " . $blogname , " _ " ) != false )
$errors -> add ( 'blogname' , __ ( " Sorry, blog names may not contain the character '_'! " ));
// do not allow users to create a blog that conflicts with a page on the main blog.
2010-01-12 19:40:40 +01:00
if ( ! is_subdomain_install () && $wpdb -> get_var ( $wpdb -> prepare ( " SELECT post_name FROM " . $wpdb -> get_blog_prefix ( $current_site -> blog_id ) . " posts WHERE post_type = 'page' AND post_name = %s " , $blogname ) ) )
2010-01-06 05:02:57 +01:00
$errors -> add ( 'blogname' , __ ( " Sorry, you may not use that blog name " ) );
// all numeric?
$match = array ();
preg_match ( '/[0-9]*/' , $blogname , $match );
if ( $match [ 0 ] == $blogname )
$errors -> add ( 'blogname' , __ ( " Sorry, blog names must have letters too! " ));
$blogname = apply_filters ( " newblogname " , $blogname );
$blog_title = stripslashes ( $blog_title );
if ( empty ( $blog_title ) )
2010-01-12 19:40:40 +01:00
$errors -> add ( 'blog_title' , __ ( " Please enter a blog title " ));
2010-01-06 05:02:57 +01:00
// Check if the domain/path has been used already.
2010-01-12 19:40:40 +01:00
if ( is_subdomain_install () ) {
2010-01-06 05:02:57 +01:00
$mydomain = " $blogname . $domain " ;
$path = $base ;
} else {
$mydomain = " $domain " ;
$path = $base . $blogname . '/' ;
}
if ( domain_exists ( $mydomain , $path ) )
$errors -> add ( 'blogname' , __ ( " Sorry, that blog already exists! " ));
if ( username_exists ( $blogname ) ) {
if ( is_object ( $user ) == false || ( is_object ( $user ) && ( $user -> user_login != $blogname ) ) )
$errors -> add ( 'blogname' , __ ( " Sorry, that blog is reserved! " ) );
}
// Has someone already signed up for this domain?
$signup = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->signups WHERE domain = %s AND path = %s " , $mydomain , $path ) ); // TODO: Check email too?
if ( ! empty ( $signup ) ) {
$diff = current_time ( 'timestamp' , true ) - mysql2date ( 'U' , $signup -> registered );
// If registered more than two days ago, cancel registration and let this signup go through.
2010-01-12 19:40:40 +01:00
if ( $diff > 172800 )
2010-01-06 05:02:57 +01:00
$wpdb -> query ( $wpdb -> prepare ( " DELETE FROM $wpdb->signups WHERE domain = %s AND path = %s " , $mydomain , $path ) );
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
$errors -> add ( 'blogname' , __ ( " That blog is currently reserved but may be available in a couple days. " ));
}
$result = array ( 'domain' => $mydomain , 'path' => $path , 'blogname' => $blogname , 'blog_title' => $blog_title , 'errors' => $errors );
return apply_filters ( 'wpmu_validate_blog_signup' , $result );
}
// Record signup information for future activation. wpmu_validate_signup() should be run
// on the inputs before calling wpmu_signup().
function wpmu_signup_blog ( $domain , $path , $title , $user , $user_email , $meta = '' ) {
global $wpdb ;
$key = substr ( md5 ( time () . rand () . $domain ), 0 , 16 );
$meta = serialize ( $meta );
$domain = $wpdb -> escape ( $domain );
$path = $wpdb -> escape ( $path );
$title = $wpdb -> escape ( $title );
2010-01-07 05:27:46 +01:00
2010-01-06 05:02:57 +01:00
$wpdb -> insert ( $wpdb -> signups , array (
2010-01-07 05:27:46 +01:00
'domain' => $domain ,
'path' => $path ,
2010-01-06 05:02:57 +01:00
'title' => $title ,
2010-01-07 05:27:46 +01:00
'user_login' => $user ,
'user_email' => $user_email ,
2010-01-06 05:02:57 +01:00
'registered' => current_time ( 'mysql' , true ),
2010-01-07 05:27:46 +01:00
'activation_key' => $key ,
2010-01-06 05:02:57 +01:00
'meta' => $meta
) );
wpmu_signup_blog_notification ( $domain , $path , $title , $user , $user_email , $key , $meta );
}
function wpmu_signup_user ( $user , $user_email , $meta = '' ) {
global $wpdb ;
// Format data
$user = preg_replace ( " / \ s+/ " , '' , sanitize_user ( $user , true ) );
$user_email = sanitize_email ( $user_email );
$key = substr ( md5 ( time () . rand () . $user_email ), 0 , 16 );
$meta = serialize ( $meta );
2010-01-07 05:27:46 +01:00
2010-01-06 05:02:57 +01:00
$wpdb -> insert ( $wpdb -> signups , array (
2010-01-07 05:27:46 +01:00
'domain' => '' ,
'path' => '' ,
2010-01-06 05:02:57 +01:00
'title' => '' ,
2010-01-07 05:27:46 +01:00
'user_login' => $user ,
'user_email' => $user_email ,
2010-01-06 05:02:57 +01:00
'registered' => current_time ( 'mysql' , true ),
2010-01-07 05:27:46 +01:00
'activation_key' => $key ,
2010-01-06 05:02:57 +01:00
'meta' => $meta
) );
wpmu_signup_user_notification ( $user , $user_email , $key , $meta );
}
// Notify user of signup success.
function wpmu_signup_blog_notification ( $domain , $path , $title , $user , $user_email , $key , $meta = '' ) {
global $current_site ;
2010-01-12 19:40:40 +01:00
if ( ! apply_filters ( 'wpmu_signup_blog_notification' , $domain , $path , $title , $user , $user_email , $key , $meta ) )
2010-01-06 05:02:57 +01:00
return false ;
// Send email with activation link.
2010-01-12 19:40:40 +01:00
if ( ! is_subdomain_install () || $current_site -> id != 1 )
2010-01-06 05:02:57 +01:00
$activate_url = " http:// " . $current_site -> domain . $current_site -> path . " wp-activate.php?key= $key " ;
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
$activate_url = " http:// { $domain } { $path } wp-activate.php?key= $key " ;
2010-01-12 19:40:40 +01:00
2010-02-04 19:57:32 +01:00
$activate_url = esc_url ( $activate_url );
2010-01-06 05:02:57 +01:00
$admin_email = get_site_option ( " admin_email " );
2010-01-12 19:40:40 +01:00
if ( $admin_email == '' )
2010-01-06 05:02:57 +01:00
$admin_email = 'support@' . $_SERVER [ 'SERVER_NAME' ];
$from_name = get_site_option ( " site_name " ) == '' ? 'WordPress' : wp_specialchars ( get_site_option ( " site_name " ) );
$message_headers = " MIME-Version: 1.0 \n " . " From: \" { $from_name } \" < { $admin_email } > \n " . " Content-Type: text/plain; charset= \" " . get_option ( 'blog_charset' ) . " \" \n " ;
2010-02-04 19:57:32 +01:00
$message = sprintf ( apply_filters ( 'wpmu_signup_blog_notification_email' , __ ( " To activate your blog, please click the following link: \n \n %s \n \n After you activate, you will receive *another email* with your login. \n \n After you activate, you can visit your blog here: \n \n %s " ) ), $activate_url , esc_url ( " http:// { $domain } { $path } " ), $key );
2010-01-06 05:02:57 +01:00
// TODO: Don't hard code activation link.
2010-02-04 19:57:32 +01:00
$subject = sprintf ( apply_filters ( 'wpmu_signup_blog_notification_subject' , __ ( '[%1s] Activate %2s' ) ), $from_name , esc_url ( 'http://' . $domain . $path ) );
2010-01-06 05:02:57 +01:00
wp_mail ( $user_email , $subject , $message , $message_headers );
return true ;
}
function wpmu_signup_user_notification ( $user , $user_email , $key , $meta = '' ) {
global $current_site ;
2010-01-12 19:40:40 +01:00
if ( ! apply_filters ( 'wpmu_signup_user_notification' , $user , $user_email , $key , $meta ) )
2010-01-06 05:02:57 +01:00
return false ;
// Send email with activation link.
$admin_email = get_site_option ( " admin_email " );
2010-01-12 19:40:40 +01:00
if ( $admin_email == '' )
2010-01-06 05:02:57 +01:00
$admin_email = 'support@' . $_SERVER [ 'SERVER_NAME' ];
$from_name = get_site_option ( " site_name " ) == '' ? 'WordPress' : wp_specialchars ( get_site_option ( " site_name " ) );
$message_headers = " MIME-Version: 1.0 \n " . " From: \" { $from_name } \" < { $admin_email } > \n " . " Content-Type: text/plain; charset= \" " . get_option ( 'blog_charset' ) . " \" \n " ;
$message = sprintf ( apply_filters ( 'wpmu_signup_user_notification_email' , __ ( " To activate your user, please click the following link: \n \n %s \n \n After you activate, you will receive *another email* with your login. \n \n " ) ), site_url ( " wp-activate.php?key= $key " ), $key );
// TODO: Don't hard code activation link.
$subject = sprintf ( __ ( apply_filters ( 'wpmu_signup_user_notification_subject' , '[%1s] Activate %2s' ) ), $from_name , $user );
wp_mail ( $user_email , $subject , $message , $message_headers );
return true ;
}
function wpmu_activate_signup ( $key ) {
global $wpdb , $current_site ;
$signup = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->signups WHERE activation_key = %s " , $key ) );
if ( empty ( $signup ) )
return new WP_Error ( 'invalid_key' , __ ( 'Invalid activation key.' ));
if ( $signup -> active )
return new WP_Error ( 'already_active' , __ ( 'The blog is already active.' ), $signup );
$meta = unserialize ( $signup -> meta );
$user_login = $wpdb -> escape ( $signup -> user_login );
$user_email = $wpdb -> escape ( $signup -> user_email );
wpmu_validate_user_signup ( $user_login , $user_email );
2010-01-07 03:22:51 +01:00
$password = wp_generate_password ();
2010-01-06 05:02:57 +01:00
$user_id = username_exists ( $user_login );
if ( ! $user_id )
$user_id = wpmu_create_user ( $user_login , $password , $user_email );
else
$user_already_exists = true ;
if ( ! $user_id )
return new WP_Error ( 'create_user' , __ ( 'Could not create user' ), $signup );
$now = current_time ( 'mysql' , true );
if ( empty ( $signup -> domain ) ) {
$wpdb -> update ( $wpdb -> signups , array ( 'active' => 1 , 'activated' => $now ), array ( 'activation_key' => $key ) );
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
if ( isset ( $user_already_exists ) )
return new WP_Error ( 'user_already_exists' , __ ( 'That username is already activated.' ), $signup );
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
wpmu_welcome_user_notification ( $user_id , $password , $meta );
$user_site = get_site_option ( 'dashboard_blog' , $current_site -> blog_id );
2010-01-12 19:40:40 +01:00
if ( $user_site == false )
2010-01-06 05:02:57 +01:00
add_user_to_blog ( '1' , $user_id , get_site_option ( 'default_user_role' , 'subscriber' ) );
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
add_user_to_blog ( $user_site , $user_id , get_site_option ( 'default_user_role' , 'subscriber' ) );
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
add_new_user_to_blog ( $user_id , $user_email , $meta );
do_action ( 'wpmu_activate_user' , $user_id , $password , $meta );
return array ( 'user_id' => $user_id , 'password' => $password , 'meta' => $meta );
}
wpmu_validate_blog_signup ( $signup -> domain , $signup -> title );
$blog_id = wpmu_create_blog ( $signup -> domain , $signup -> path , $signup -> title , $user_id , $meta , $wpdb -> siteid );
// TODO: What to do if we create a user but cannot create a blog?
if ( is_wp_error ( $blog_id ) ) {
// If blog is taken, that means a previous attempt to activate this blog failed in between creating the blog and
// setting the activation flag. Let's just set the active flag and instruct the user to reset their password.
if ( 'blog_taken' == $blog_id -> get_error_code () ) {
$blog_id -> add_data ( $signup );
$wpdb -> update ( $wpdb -> signups , array ( 'active' => 1 , 'activated' => $now ), array ( 'activation_key' => $key ) );
}
return $blog_id ;
}
$wpdb -> update ( $wpdb -> signups , array ( 'active' => 1 , 'activated' => $now ), array ( 'activation_key' => $key ) );
wpmu_welcome_notification ( $blog_id , $user_id , $password , $signup -> title , $meta );
do_action ( 'wpmu_activate_blog' , $blog_id , $user_id , $password , $signup -> title , $meta );
return array ( 'blog_id' => $blog_id , 'user_id' => $user_id , 'password' => $password , 'title' => $signup -> title , 'meta' => $meta );
}
function wpmu_create_user ( $user_name , $password , $email ) {
$user_name = preg_replace ( " / \ s+/ " , '' , sanitize_user ( $user_name , true ) );
2010-01-20 22:58:13 +01:00
$user_id = wp_create_user ( $user_name , $password , $email );
if ( is_wp_error ( $user_id ) )
2010-01-06 05:02:57 +01:00
return false ;
$user = new WP_User ( $user_id );
// Newly created users have no roles or caps until they are added to a blog.
update_user_option ( $user_id , 'capabilities' , '' );
update_user_option ( $user_id , 'user_level' , '' );
do_action ( 'wpmu_new_user' , $user_id );
return $user_id ;
}
function wpmu_create_blog ( $domain , $path , $title , $user_id , $meta = '' , $site_id = 1 ) {
$domain = preg_replace ( " / \ s+/ " , '' , sanitize_user ( $domain , true ) );
2010-01-12 19:40:40 +01:00
if ( is_subdomain_install () )
2010-01-06 05:02:57 +01:00
$domain = str_replace ( '@' , '' , $domain );
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
$title = strip_tags ( $title );
$user_id = ( int ) $user_id ;
2010-01-12 19:40:40 +01:00
if ( empty ( $path ) )
2010-01-06 05:02:57 +01:00
$path = '/' ;
// Check if the domain has been used already. We should return an error message.
if ( domain_exists ( $domain , $path , $site_id ) )
return new WP_Error ( 'blog_taken' , __ ( 'Blog already exists.' ));
if ( ! defined ( " WP_INSTALLING " ) )
define ( " WP_INSTALLING " , true );
if ( ! $blog_id = insert_blog ( $domain , $path , $site_id ) )
return new WP_Error ( 'insert_blog' , __ ( 'Could not create blog.' ));
switch_to_blog ( $blog_id );
install_blog ( $blog_id , $title );
2010-01-20 21:09:41 +01:00
wp_install_defaults ( $user_id );
2010-01-06 05:02:57 +01:00
add_user_to_blog ( $blog_id , $user_id , 'administrator' );
if ( is_array ( $meta ) ) foreach ( $meta as $key => $value ) {
2010-01-12 19:40:40 +01:00
if ( $key == 'public' || $key == 'archived' || $key == 'mature' || $key == 'spam' || $key == 'deleted' || $key == 'lang_id' )
2010-01-06 05:02:57 +01:00
update_blog_status ( $blog_id , $key , $value );
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
update_option ( $key , $value );
}
add_option ( 'WPLANG' , get_site_option ( 'WPLANG' ) );
update_option ( 'blog_public' , $meta [ 'public' ] );
2010-01-08 21:29:56 +01:00
if ( ! is_super_admin () && get_usermeta ( $user_id , 'primary_blog' ) == get_site_option ( 'dashboard_blog' , 1 ) )
2010-01-06 05:02:57 +01:00
update_usermeta ( $user_id , 'primary_blog' , $blog_id );
restore_current_blog ();
do_action ( 'wpmu_new_blog' , $blog_id , $user_id );
return $blog_id ;
}
function newblog_notify_siteadmin ( $blog_id , $deprecated = '' ) {
global $current_site ;
2010-01-12 19:40:40 +01:00
if ( get_site_option ( 'registrationnotification' ) != 'yes' )
2010-01-06 05:02:57 +01:00
return false ;
2010-01-07 05:27:46 +01:00
2010-01-06 05:02:57 +01:00
$email = get_site_option ( 'admin_email' );
2010-01-12 19:40:40 +01:00
if ( is_email ( $email ) == false )
2010-01-06 05:02:57 +01:00
return false ;
2010-01-07 05:27:46 +01:00
2010-02-04 19:57:32 +01:00
$options_site_url = esc_url ( " http:// { $current_site -> domain } { $current_site -> path } wp-admin/ms-options.php " );
2010-01-06 05:02:57 +01:00
switch_to_blog ( $blog_id );
$blogname = get_option ( 'blogname' );
$siteurl = get_option ( 'siteurl' );
restore_current_blog ();
2010-01-07 05:27:46 +01:00
2010-01-06 05:02:57 +01:00
$msg = sprintf ( __ ( " New Blog: %1s
URL : % 2 s
Remote IP : % 3 s
Disable these notifications : % 4 s " ), $blogname , $siteurl , $_SERVER['REMOTE_ADDR'] , $options_site_url );
$msg = apply_filters ( 'newblog_notify_siteadmin' , $msg );
2010-01-07 05:27:46 +01:00
2010-01-06 05:02:57 +01:00
wp_mail ( $email , sprintf ( __ ( " New Blog Registration: %s " ), $siteurl ), $msg );
return true ;
}
function newuser_notify_siteadmin ( $user_id ) {
global $current_site ;
2010-01-12 19:40:40 +01:00
if ( get_site_option ( 'registrationnotification' ) != 'yes' )
2010-01-06 05:02:57 +01:00
return false ;
2010-01-07 05:27:46 +01:00
2010-01-06 05:02:57 +01:00
$email = get_site_option ( 'admin_email' );
2010-01-12 19:40:40 +01:00
if ( is_email ( $email ) == false )
2010-01-06 05:02:57 +01:00
return false ;
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
$user = new WP_User ( $user_id );
2010-02-04 19:57:32 +01:00
$options_site_url = esc_url ( " http:// { $current_site -> domain } { $current_site -> path } wp-admin/ms-options.php " );
2010-01-06 05:02:57 +01:00
$msg = sprintf ( __ ( " New User: %1s
Remote IP : % 2 s
Disable these notifications : % 3 s " ), $user->user_login , $_SERVER['REMOTE_ADDR'] , $options_site_url );
2010-01-07 05:27:46 +01:00
2010-01-06 05:02:57 +01:00
$msg = apply_filters ( 'newuser_notify_siteadmin' , $msg );
wp_mail ( $email , sprintf ( __ ( " New User Registration: %s " ), $user -> user_login ), $msg );
return true ;
}
function domain_exists ( $domain , $path , $site_id = 1 ) {
global $wpdb ;
return $wpdb -> get_var ( $wpdb -> prepare ( " SELECT blog_id FROM $wpdb->blogs WHERE domain = %s AND path = %s AND site_id = %d " , $domain , $path , $site_id ) );
}
function insert_blog ( $domain , $path , $site_id ) {
global $wpdb ;
$path = trailingslashit ( $path );
$site_id = ( int ) $site_id ;
$result = $wpdb -> insert ( $wpdb -> blogs , array ( 'site_id' => $site_id , 'domain' => $domain , 'path' => $path , 'registered' => current_time ( 'mysql' )) );
if ( ! $result )
return false ;
refresh_blog_details ( $wpdb -> insert_id );
return $wpdb -> insert_id ;
}
// Install an empty blog. wpdb should already be switched.
function install_blog ( $blog_id , $blog_title = '' ) {
global $wpdb , $table_prefix , $wp_roles ;
$wpdb -> suppress_errors ();
// Cast for security
$blog_id = ( int ) $blog_id ;
2010-01-12 19:40:40 +01:00
require_once ( ABSPATH . 'wp-admin/includes/upgrade.php' );
2010-01-06 05:02:57 +01:00
2010-01-07 05:27:46 +01:00
if ( $wpdb -> get_results ( " SELECT ID FROM $wpdb->posts " ) )
2010-01-06 05:02:57 +01:00
die ( __ ( '<h1>Already Installed</h1><p>You appear to have already installed WordPress. To reinstall please clear your old database tables first.</p>' ) . '</body></html>' );
2010-01-15 23:11:12 +01:00
2010-01-12 19:40:40 +01:00
$wpdb -> suppress_errors ( false );
2010-01-06 05:02:57 +01:00
$url = get_blogaddress_by_id ( $blog_id );
// Set everything up
make_db_current_silent ();
populate_options ();
populate_roles ();
$wp_roles -> _init ();
// fix url.
update_option ( 'siteurl' , $url );
update_option ( 'home' , $url );
update_option ( 'fileupload_url' , $url . " files " );
update_option ( 'upload_path' , " wp-content/blogs.dir/ " . $blog_id . " /files " );
update_option ( 'blogname' , stripslashes ( $blog_title ) );
update_option ( 'admin_email' , '' );
$wpdb -> update ( $wpdb -> options , array ( 'option_value' => '' ), array ( 'option_name' => 'admin_email' ) );
// remove all perms
$wpdb -> query ( $wpdb -> prepare ( " DELETE FROM $wpdb->usermeta WHERE meta_key = %s " , $table_prefix . 'user_level' ) );
$wpdb -> query ( $wpdb -> prepare ( " DELETE FROM $wpdb->usermeta WHERE meta_key = %s " , $table_prefix . 'capabilities' ) );
$wpdb -> suppress_errors ( false );
}
2010-01-20 21:09:41 +01:00
// Deprecated, use wp_install_defaults()
2010-01-06 05:02:57 +01:00
// should be switched already as $blog_id is ignored.
function install_blog_defaults ( $blog_id , $user_id ) {
2010-01-20 21:09:41 +01:00
global $wpdb ;
2010-01-07 05:27:46 +01:00
2010-01-20 21:09:41 +01:00
require_once ( ABSPATH . 'wp-admin/includes/upgrade.php' );
2010-01-06 05:02:57 +01:00
2010-01-20 21:09:41 +01:00
$wpdb -> suppress_errors ();
2010-01-07 05:27:46 +01:00
2010-01-20 21:09:41 +01:00
wp_install_defaults ( $user_id );
2010-01-06 05:02:57 +01:00
$wpdb -> suppress_errors ( false );
}
function wpmu_welcome_notification ( $blog_id , $user_id , $password , $title , $meta = '' ) {
global $current_site ;
2010-01-12 19:40:40 +01:00
if ( ! apply_filters ( 'wpmu_welcome_notification' , $blog_id , $user_id , $password , $title , $meta ) )
2010-01-06 05:02:57 +01:00
return false ;
$welcome_email = stripslashes ( get_site_option ( 'welcome_email' ) );
2010-01-12 19:40:40 +01:00
if ( $welcome_email == false )
2010-01-27 20:13:00 +01:00
$welcome_email = stripslashes ( __ ( ' Dear User ,
2010-01-06 05:02:57 +01:00
Your new SITE_NAME blog has been successfully set up at :
BLOG_URL
You can log in to the administrator account with the following information :
Username : USERNAME
Password : PASSWORD
Login Here : BLOG_URLwp - login . php
2010-01-27 20:13:00 +01:00
We hope you enjoy your new blog .
2010-01-06 05:02:57 +01:00
Thanks !
2010-01-27 20:13:00 +01:00
-- The Team @ SITE_NAME ' ) );
2010-01-06 05:02:57 +01:00
$url = get_blogaddress_by_id ( $blog_id );
$user = new WP_User ( $user_id );
$welcome_email = str_replace ( " SITE_NAME " , $current_site -> site_name , $welcome_email );
$welcome_email = str_replace ( " BLOG_TITLE " , $title , $welcome_email );
$welcome_email = str_replace ( " BLOG_URL " , $url , $welcome_email );
$welcome_email = str_replace ( " USERNAME " , $user -> user_login , $welcome_email );
$welcome_email = str_replace ( " PASSWORD " , $password , $welcome_email );
$welcome_email = apply_filters ( " update_welcome_email " , $welcome_email , $blog_id , $user_id , $password , $title , $meta );
$admin_email = get_site_option ( " admin_email " );
2010-01-12 19:40:40 +01:00
if ( $admin_email == '' )
2010-01-06 05:02:57 +01:00
$admin_email = 'support@' . $_SERVER [ 'SERVER_NAME' ];
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
$from_name = get_site_option ( " site_name " ) == '' ? 'WordPress' : wp_specialchars ( get_site_option ( " site_name " ) );
$message_headers = " MIME-Version: 1.0 \n " . " From: \" { $from_name } \" < { $admin_email } > \n " . " Content-Type: text/plain; charset= \" " . get_option ( 'blog_charset' ) . " \" \n " ;
$message = $welcome_email ;
2010-01-12 19:40:40 +01:00
if ( empty ( $current_site -> site_name ) )
2010-01-06 05:02:57 +01:00
$current_site -> site_name = " WordPress MU " ;
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
$subject = apply_filters ( 'update_welcome_subject' , sprintf ( __ ( 'New %1$s Blog: %2$s' ), $current_site -> site_name , stripslashes ( $title ) ) );
wp_mail ( $user -> user_email , $subject , $message , $message_headers );
return true ;
}
function wpmu_welcome_user_notification ( $user_id , $password , $meta = '' ) {
global $current_site ;
2010-01-12 19:40:40 +01:00
if ( ! apply_filters ( 'wpmu_welcome_user_notification' , $user_id , $password , $meta ) )
2010-01-06 05:02:57 +01:00
return false ;
2010-01-07 05:27:46 +01:00
$welcome_email = get_site_option ( 'welcome_user_email' );
2010-01-06 05:02:57 +01:00
$user = new WP_User ( $user_id );
$welcome_email = apply_filters ( " update_welcome_user_email " , $welcome_email , $user_id , $password , $meta );
$welcome_email = str_replace ( " SITE_NAME " , $current_site -> site_name , $welcome_email );
$welcome_email = str_replace ( " USERNAME " , $user -> user_login , $welcome_email );
$welcome_email = str_replace ( " PASSWORD " , $password , $welcome_email );
$welcome_email = str_replace ( " LOGINLINK " , wp_login_url (), $welcome_email );
$admin_email = get_site_option ( " admin_email " );
2010-01-12 19:40:40 +01:00
if ( $admin_email == '' )
2010-01-06 05:02:57 +01:00
$admin_email = 'support@' . $_SERVER [ 'SERVER_NAME' ];
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
$from_name = get_site_option ( " site_name " ) == '' ? 'WordPress' : wp_specialchars ( get_site_option ( " site_name " ) );
$message_headers = " MIME-Version: 1.0 \n " . " From: \" { $from_name } \" < { $admin_email } > \n " . " Content-Type: text/plain; charset= \" " . get_option ( 'blog_charset' ) . " \" \n " ;
$message = $welcome_email ;
2010-01-12 19:40:40 +01:00
if ( empty ( $current_site -> site_name ) )
2010-01-06 05:02:57 +01:00
$current_site -> site_name = " WordPress MU " ;
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
$subject = apply_filters ( 'update_welcome_user_subject' , sprintf ( __ ( 'New %1$s User: %2$s' ), $current_site -> site_name , $user -> user_login ) );
wp_mail ( $user -> user_email , $subject , $message , $message_headers );
return true ;
}
function get_current_site () {
global $current_site ;
return $current_site ;
}
function get_user_id_from_string ( $string ) {
global $wpdb ;
$user_id = 0 ;
if ( is_email ( $string ) ) {
2010-01-25 23:01:43 +01:00
$user = get_user_by ( 'email' , $string );
2010-01-06 05:02:57 +01:00
if ( $user )
$user_id = $user -> ID ;
} elseif ( is_numeric ( $string ) ) {
$user_id = $string ;
} else {
2010-01-25 23:01:43 +01:00
$user = get_user_by ( 'login' , $string );
2010-01-06 05:02:57 +01:00
if ( $user )
$user_id = $user -> ID ;
}
return $user_id ;
}
function get_most_recent_post_of_user ( $user_id ) {
global $wpdb ;
$user_blogs = get_blogs_of_user ( ( int ) $user_id );
$most_recent_post = array ();
// Walk through each blog and get the most recent post
// published by $user_id
foreach ( ( array ) $user_blogs as $blog ) {
$recent_post = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT ID, post_date_gmt FROM { $wpdb -> base_prefix } { $blog -> userblog_id } _posts WHERE post_author = %d AND post_type = 'post' AND post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1 " , $user_id ), ARRAY_A );
// Make sure we found a post
if ( isset ( $recent_post [ 'ID' ]) ) {
$post_gmt_ts = strtotime ( $recent_post [ 'post_date_gmt' ]);
// If this is the first post checked or if this post is
// newer than the current recent post, make it the new
// most recent post.
2010-01-12 19:40:40 +01:00
if ( ! isset ( $most_recent_post [ 'post_gmt_ts' ]) || ( $post_gmt_ts > $most_recent_post [ 'post_gmt_ts' ] ) ) {
2010-01-06 05:02:57 +01:00
$most_recent_post = array (
'blog_id' => $blog -> userblog_id ,
'post_id' => $recent_post [ 'ID' ],
'post_date_gmt' => $recent_post [ 'post_date_gmt' ],
'post_gmt_ts' => $post_gmt_ts
);
}
}
}
return $most_recent_post ;
}
/* Misc functions */
function get_dirsize ( $directory ) {
$dirsize = get_transient ( 'dirsize_cache' );
2010-01-12 19:40:40 +01:00
if ( is_array ( $dirsize ) && isset ( $dirsize [ $directory ][ 'size' ] ) )
2010-01-06 05:02:57 +01:00
return $dirsize [ $directory ][ 'size' ];
2010-01-12 19:40:40 +01:00
if ( false == is_array ( $dirsize ) )
2010-01-06 05:02:57 +01:00
$dirsize = array ();
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
$dirsize [ $directory ][ 'size' ] = recurse_dirsize ( $directory );
set_transient ( 'dirsize_cache' , $dirsize , 3600 );
return $dirsize [ $directory ][ 'size' ];
}
function recurse_dirsize ( $directory ) {
$size = 0 ;
2010-01-12 19:40:40 +01:00
if ( substr ( $directory , - 1 ) == '/' )
$directory = substr ( $directory , 0 , - 1 );
if ( ! file_exists ( $directory ) || ! is_dir ( $directory ) || ! is_readable ( $directory ) )
return false ;
if ( $handle = opendir ( $directory )) {
2010-01-06 05:02:57 +01:00
while (( $file = readdir ( $handle )) !== false ) {
$path = $directory . '/' . $file ;
2010-01-12 19:40:40 +01:00
if ( $file != '.' && $file != '..' ) {
if ( is_file ( $path )) {
2010-01-06 05:02:57 +01:00
$size += filesize ( $path );
2010-01-12 19:40:40 +01:00
} elseif ( is_dir ( $path )) {
2010-01-06 05:02:57 +01:00
$handlesize = recurse_dirsize ( $path );
2010-02-04 20:56:36 +01:00
if ( $handlesize > 0 )
2010-01-06 05:02:57 +01:00
$size += $handlesize ;
}
}
}
closedir ( $handle );
}
return $size ;
}
function upload_is_user_over_quota ( $echo = true ) {
2010-01-12 19:40:40 +01:00
if ( get_site_option ( 'upload_space_check_disabled' ) )
2010-01-06 05:02:57 +01:00
return true ;
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
$spaceAllowed = get_space_allowed ();
2010-01-12 19:40:40 +01:00
if ( empty ( $spaceAllowed ) || ! is_numeric ( $spaceAllowed ) )
2010-01-07 05:27:46 +01:00
$spaceAllowed = 10 ; // Default space allowed is 10 MB
2010-01-06 05:02:57 +01:00
$dirName = BLOGUPLOADDIR ;
$size = get_dirsize ( $dirName ) / 1024 / 1024 ;
2010-01-07 05:27:46 +01:00
2010-01-12 19:40:40 +01:00
if ( ( $spaceAllowed - $size ) < 0 ) {
if ( $echo )
2010-01-06 05:02:57 +01:00
_e ( " Sorry, you have used your space allocation. Please delete some files to upload more files. " ); //No space left
return true ;
} else {
return false ;
}
}
2010-01-12 19:40:40 +01:00
function check_upload_mimes ( $mimes ) {
2010-01-06 05:02:57 +01:00
$site_exts = explode ( " " , get_site_option ( " upload_filetypes " ) );
foreach ( $site_exts as $ext ) {
2010-01-12 19:40:40 +01:00
foreach ( $mimes as $ext_pattern => $mime )
if ( $ext != '' && strpos ( $ext_pattern , $ext ) !== false ) {
2010-01-06 05:02:57 +01:00
$site_mimes [ $ext_pattern ] = $mime ;
}
}
return $site_mimes ;
}
function update_posts_count ( $deprecated = '' ) {
global $wpdb ;
update_option ( " post_count " , ( int ) $wpdb -> get_var ( " SELECT COUNT(ID) FROM { $wpdb -> posts } WHERE post_status = 'publish' and post_type = 'post' " ) );
}
function wpmu_log_new_registrations ( $blog_id , $user_id ) {
global $wpdb ;
$user = new WP_User ( ( int ) $user_id );
$wpdb -> insert ( $wpdb -> registration_log , array ( 'email' => $user -> user_email , 'IP' => preg_replace ( '/[^0-9., ]/' , '' , $_SERVER [ 'REMOTE_ADDR' ] ), 'blog_id' => $blog_id , 'date_registered' => current_time ( 'mysql' )) );
}
function fix_import_form_size ( $size ) {
2010-01-12 19:40:40 +01:00
if ( upload_is_user_over_quota ( false ) == true )
2010-01-06 05:02:57 +01:00
return 0 ;
2010-01-07 05:27:46 +01:00
2010-01-06 05:02:57 +01:00
$spaceAllowed = 1024 * 1024 * get_space_allowed ();
$dirName = BLOGUPLOADDIR ;
$dirsize = get_dirsize ( $dirName ) ;
2010-01-12 19:40:40 +01:00
if ( $size > $spaceAllowed - $dirsize )
2010-01-06 05:02:57 +01:00
return $spaceAllowed - $dirsize ; // remaining space
2010-01-12 19:40:40 +01:00
else
2010-01-06 05:02:57 +01:00
return $size ; // default
}
2010-02-02 23:58:06 +01:00
/**
* Maintains a canonical list of terms by syncing terms created for each blog with the global terms table .
*
* @ since 3.0 . 0
*
* @ see term_id_filter
*
* @ param int $term_id An ID for a term on the current blog .
* @ return int An ID from the global terms table mapped from $term_id .
*/
2010-01-06 05:02:57 +01:00
function global_terms ( $term_id , $deprecated = '' ) {
global $wpdb ;
$term_id = intval ( $term_id );
$c = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->terms WHERE term_id = %d " , $term_id ) );
$global_id = $wpdb -> get_var ( $wpdb -> prepare ( " SELECT cat_ID FROM $wpdb->sitecategories WHERE category_nicename = %s " , $c -> slug ) );
if ( $global_id == null ) {
$wpdb -> insert ( $wpdb -> sitecategories , array ( 'cat_name' => $c -> name , 'category_nicename' => $c -> slug ) );
$global_id = $wpdb -> insert_id ;
}
if ( $global_id == $term_id )
return $global_id ;
2010-01-12 19:40:40 +01:00
if ( get_option ( 'default_category' ) == $term_id )
2010-01-06 05:02:57 +01:00
update_option ( 'default_category' , $global_id );
$wpdb -> update ( $wpdb -> terms , array ( 'term_id' => $global_id ), array ( 'term_id' => $term_id ) );
$wpdb -> update ( $wpdb -> term_taxonomy , array ( 'term_id' => $global_id ), array ( 'term_id' => $term_id ) );
$wpdb -> update ( $wpdb -> term_taxonomy , array ( 'parent' => $global_id ), array ( 'parent' => $term_id ) );
clean_term_cache ( $term_id );
2010-01-07 05:27:46 +01:00
return $global_id ;
}
2010-01-06 05:02:57 +01:00
function redirect_this_site ( $deprecated = '' ) {
global $current_site ;
return array ( $current_site -> domain );
}
function upload_is_file_too_big ( $upload ) {
2010-01-12 19:40:40 +01:00
if ( is_array ( $upload ) == false || defined ( 'WP_IMPORTING' ) )
2010-01-06 05:02:57 +01:00
return $upload ;
2010-01-12 19:40:40 +01:00
if ( strlen ( $upload [ 'bits' ] ) > ( 1024 * get_site_option ( 'fileupload_maxk' , 1500 ) ) )
2010-01-07 05:27:46 +01:00
return sprintf ( __ ( " This file is too big. Files must be less than %dKb in size.<br /> " ), get_site_option ( 'fileupload_maxk' , 1500 ));
2010-01-06 05:02:57 +01:00
return $upload ;
}
function wordpressmu_wp_mail_from ( $email ) {
2010-01-12 19:40:40 +01:00
if ( strpos ( $email , 'wordpress@' ) !== false )
2010-01-06 05:02:57 +01:00
$email = get_option ( 'admin_email' );
return $email ;
}
function signup_nonce_fields () {
$id = mt_rand ();
echo " <input type='hidden' name='signup_form_id' value=' { $id } ' /> " ;
wp_nonce_field ( 'signup_form_' . $id , '_signup_form' , false );
}
function signup_nonce_check ( $result ) {
2010-01-12 19:40:40 +01:00
if ( ! strpos ( $_SERVER [ 'PHP_SELF' ], 'wp-signup.php' ) )
2010-01-06 05:02:57 +01:00
return $result ;
if ( wp_create_nonce ( 'signup_form_' . $_POST [ 'signup_form_id' ]) != $_POST [ '_signup_form' ] )
wp_die ( __ ( 'Please try again!' ) );
return $result ;
}
function maybe_redirect_404 () {
global $current_site ;
2010-01-26 23:46:09 +01:00
if ( is_main_site () && is_404 () && defined ( 'NOBLOGREDIRECT' ) && constant ( 'NOBLOGREDIRECT' ) != '' ) {
2010-01-06 05:02:57 +01:00
$destination = constant ( 'NOBLOGREDIRECT' );
if ( $destination == '%siteurl%' )
$destination = $current_site -> domain . $current_site -> path ;
wp_redirect ( $destination );
exit ();
}
}
function maybe_add_existing_user_to_blog () {
2010-01-12 19:40:40 +01:00
if ( false === strpos ( $_SERVER [ 'REQUEST_URI' ], '/newbloguser/' ) )
2010-01-06 05:02:57 +01:00
return false ;
$parts = explode ( '/' , $_SERVER [ 'REQUEST_URI' ] );
$key = array_pop ( $parts );
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
if ( $key == '' )
$key = array_pop ( $parts );
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
$details = get_option ( " new_user_ " . $key );
add_existing_user_to_blog ( $details );
delete_option ( 'new_user_' . $key );
wp_die ( sprintf ( __ ( 'You have been added to this blog. Please visit the <a href="%s">homepage</a> or <a href="%s">login</a> using your username and password.' ), site_url (), admin_url () ) );
}
function add_existing_user_to_blog ( $details = false ) {
if ( is_array ( $details ) ) {
add_user_to_blog ( '' , $details [ 'user_id' ], $details [ 'role' ] );
do_action ( " added_existing_user " , $details [ 'user_id' ] );
}
}
function add_new_user_to_blog ( $user_id , $email , $meta ) {
global $current_site ;
2010-01-12 19:40:40 +01:00
if ( $meta [ 'add_to_blog' ] ) {
2010-01-06 05:02:57 +01:00
$blog_id = $meta [ 'add_to_blog' ];
$role = $meta [ 'new_role' ];
remove_user_from_blog ( $user_id , $current_site -> blogid ); // remove user from main blog.
add_user_to_blog ( $blog_id , $user_id , $role );
update_usermeta ( $user_id , 'primary_blog' , $blog_id );
}
}
function fix_phpmailer_messageid ( $phpmailer ) {
global $current_site ;
$phpmailer -> Hostname = $current_site -> domain ;
}
function is_user_spammy ( $username = 0 ) {
2010-01-12 19:40:40 +01:00
if ( $username == 0 ) {
2010-01-06 05:02:57 +01:00
global $current_user ;
$user_id = $current_user -> ID ;
} else {
$user_id = get_user_id_from_string ( $username );
}
$u = new WP_User ( $user_id );
2010-01-12 19:40:40 +01:00
if ( $u -> spam == 1 )
2010-01-06 05:02:57 +01:00
return true ;
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
return false ;
}
function update_blog_public ( $old_value , $value ) {
global $wpdb ;
do_action ( 'update_blog_public' );
update_blog_status ( $wpdb -> blogid , 'public' , ( int ) $value );
}
add_action ( 'update_option_blog_public' , 'update_blog_public' , 10 , 2 );
2010-02-04 21:00:18 +01:00
2010-01-06 05:02:57 +01:00
/* Redirect all hits to "dashboard" blog to wp-admin/ Dashboard. */
function redirect_mu_dashboard () {
global $current_site , $current_blog ;
$dashboard_blog = get_dashboard_blog ();
2010-01-07 05:27:46 +01:00
if ( $current_blog -> blog_id == $dashboard_blog -> blog_id && $dashboard_blog -> blog_id != $current_site -> blog_id ) {
$protocol = ( is_ssl () ? 'https://' : 'http://' );
2010-01-06 05:02:57 +01:00
wp_redirect ( $protocol . $dashboard_blog -> domain . trailingslashit ( $dashboard_blog -> path ) . 'wp-admin/' );
die ();
}
}
add_action ( 'template_redirect' , 'redirect_mu_dashboard' );
function get_dashboard_blog () {
2010-02-04 19:57:32 +01:00
if ( $blog = get_site_option ( 'dashboard_blog' ) )
return get_blog_details ( $blog );
2010-01-06 05:02:57 +01:00
2010-02-04 19:57:32 +01:00
return get_blog_details ( $GLOBALS [ 'current_site' ] -> blog_id );
2010-01-06 05:02:57 +01:00
}
function is_user_option_local ( $key , $user_id = 0 , $blog_id = 0 ) {
global $current_user , $wpdb ;
2010-01-12 19:40:40 +01:00
if ( $user_id == 0 )
2010-01-06 05:02:57 +01:00
$user_id = $current_user -> ID ;
2010-01-12 19:40:40 +01:00
if ( $blog_id == 0 )
2010-01-06 05:02:57 +01:00
$blog_id = $wpdb -> blogid ;
2010-01-07 05:27:46 +01:00
2010-01-06 05:02:57 +01:00
$local_key = $wpdb -> base_prefix . $blog_id . " _ " . $key ;
2010-01-12 19:40:40 +01:00
if ( isset ( $current_user -> $local_key ) )
2010-01-06 05:02:57 +01:00
return true ;
2010-01-12 19:40:40 +01:00
2010-01-06 05:02:57 +01:00
return false ;
}
function users_can_register_signup_filter () {
$registration = get_site_option ( 'registration' );
2010-01-12 19:40:40 +01:00
if ( $registration == 'all' || $registration == 'user' )
2010-01-06 05:02:57 +01:00
return true ;
2010-02-04 19:57:32 +01:00
return false ;
2010-01-06 05:02:57 +01:00
}
add_filter ( 'option_users_can_register' , 'users_can_register_signup_filter' );
function welcome_user_msg_filter ( $text ) {
if ( ! $text ) {
return __ ( " Dear User,
Your new account is set up .
You can log in with the following information :
Username : USERNAME
Password : PASSWORD
LOGINLINK
Thanks !
-- The Team @ SITE_NAME " );
}
return $text ;
}
add_filter ( 'site_option_welcome_user_email' , 'welcome_user_msg_filter' );
2010-02-02 22:41:17 +01:00
/**
2010-01-06 05:02:57 +01:00
* Whether to force SSL on content .
*
* @ since 2.8 . 5
*
* @ param string | bool $force
* @ return bool True if forced , false if not forced .
*/
function force_ssl_content ( $force = '' ) {
2010-01-12 19:40:40 +01:00
static $forced_content ;
2010-01-06 05:02:57 +01:00
2010-01-12 19:40:40 +01:00
if ( '' != $force ) {
$old_forced = $forced_content ;
$forced_content = $force ;
return $old_forced ;
}
return $forced_content ;
2010-01-06 05:02:57 +01:00
}
/**
* Formats an String URL to use HTTPS if HTTP is found .
* Useful as a filter .
*
* @ since 2.8 . 5
**/
2010-02-04 19:57:32 +01:00
function filter_SSL ( $url ) {
2010-01-12 19:40:40 +01:00
if ( ! is_string ( $url ) )
2010-01-06 05:02:57 +01:00
return get_bloginfo ( 'url' ); //return home blog url with proper scheme
$arrURL = parse_url ( $url );
if ( force_ssl_content () && is_ssl () ) {
2010-01-12 19:40:40 +01:00
if ( 'http' === $arrURL [ 'scheme' ] && 'https' !== $arrURL [ 'scheme' ] )
2010-01-06 05:02:57 +01:00
$url = str_replace ( $arrURL [ 'scheme' ], 'https' , $url );
}
return $url ;
}
?>