if ( defined( 'WP_IMPORTING' ) )
return $file;
- $space_allowed = 1048576 * get_space_allowed();
- $space_used = get_dirsize( BLOGUPLOADDIR );
- $space_left = $space_allowed - $space_used;
+ $space_left = get_upload_space_available();
+
$file_size = filesize( $file['tmp_name'] );
if ( $space_left < $file_size )
$file['error'] = sprintf( __( 'Not enough space to upload. %1$s KB needed.' ), number_format( ($file_size - $space_left) /1024 ) );
* @since 3.0.0
*
* @param int $blog_id Blog ID
- * @param bool $drop True if blog's table should be dropped. Default is false.
+ * @param bool $drop True if blog's table should be dropped. Default is false.
* @return void
*/
function wpmu_delete_blog( $blog_id, $drop = false ) {
- global $wpdb;
+ global $wpdb, $current_site;
$switch = false;
- if ( $blog_id != $wpdb->blogid ) {
+ if ( get_current_blog_id() != $blog_id ) {
$switch = true;
switch_to_blog( $blog_id );
}
- $blog_prefix = $wpdb->get_blog_prefix( $blog_id );
+ $blog = get_blog_details( $blog_id );
do_action( 'delete_blog', $blog_id, $drop );
// Remove users from this blog.
if ( ! empty( $users ) ) {
foreach ( $users as $user_id ) {
- remove_user_from_blog( $user_id, $blog_id) ;
+ remove_user_from_blog( $user_id, $blog_id );
}
}
update_blog_status( $blog_id, 'deleted', 1 );
- if ( $drop ) {
- if ( substr( $blog_prefix, -1 ) == '_' )
- $blog_prefix = substr( $blog_prefix, 0, -1 ) . '\_';
+ // Don't destroy the initial, main, or root blog.
+ if ( $drop && ( 1 == $blog_id || is_main_site( $blog_id ) || ( $blog->path == $current_site->path && $blog->domain == $current_site->domain ) ) )
+ $drop = false;
- $drop_tables = $wpdb->get_results( "SHOW TABLES LIKE '{$blog_prefix}%'", ARRAY_A );
- $drop_tables = apply_filters( 'wpmu_drop_tables', $drop_tables );
+ if ( $drop ) {
+ $drop_tables = apply_filters( 'wpmu_drop_tables', $wpdb->tables( 'blog' ), $blog_id );
- reset( $drop_tables );
- foreach ( (array) $drop_tables as $drop_table) {
- $wpdb->query( "DROP TABLE IF EXISTS ". current( $drop_table ) ."" );
+ foreach ( (array) $drop_tables as $table ) {
+ $wpdb->query( "DROP TABLE IF EXISTS `$table`" );
}
- $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->blogs WHERE blog_id = %d", $blog_id ) );
- $dir = apply_filters( 'wpmu_delete_blog_upload_dir', WP_CONTENT_DIR . "/blogs.dir/{$blog_id}/files/", $blog_id );
+
+ $wpdb->delete( $wpdb->blogs, array( 'blog_id' => $blog_id ) );
+
+ $uploads = wp_upload_dir();
+ $dir = apply_filters( 'wpmu_delete_blog_upload_dir', $uploads['basedir'], $blog_id );
$dir = rtrim( $dir, DIRECTORY_SEPARATOR );
$top_dir = $dir;
$stack = array($dir);
else if ( @is_file( $dir . DIRECTORY_SEPARATOR . $file ) )
@unlink( $dir . DIRECTORY_SEPARATOR . $file );
}
+ @closedir( $dh );
}
$index++;
}
- $stack = array_reverse( $stack ); // Last added dirs are deepest
+ $stack = array_reverse( $stack ); // Last added dirs are deepest
foreach( (array) $stack as $dir ) {
if ( $dir != $top_dir)
@rmdir( $dir );
}
- }
- $wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE meta_key = '{$blog_prefix}autosave_draft_ids'" );
- $blogs = get_site_option( 'blog_list' );
- if ( is_array( $blogs ) ) {
- foreach ( $blogs as $n => $blog ) {
- if ( $blog['blog_id'] == $blog_id )
- unset( $blogs[$n] );
- }
- update_site_option( 'blog_list', $blogs );
+ clean_blog_cache( $blog );
}
- if ( $switch === true )
+ if ( $switch )
restore_current_blog();
}
global $wpdb;
$id = (int) $id;
+ $user = new WP_User( $id );
+
+ if ( !$user->exists() )
+ return false;
do_action( 'wpmu_delete_user', $id );
}
}
- $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->users WHERE ID = %d", $id ) );
- $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->usermeta WHERE user_id = %d", $id ) );
+ $meta = $wpdb->get_col( $wpdb->prepare( "SELECT umeta_id FROM $wpdb->usermeta WHERE user_id = %d", $id ) );
+ foreach ( $meta as $mid )
+ delete_metadata_by_mid( 'user', $mid );
+
+ $wpdb->delete( $wpdb->users, array( 'ID' => $id ) );
- clean_user_cache( $id );
+ clean_user_cache( $user );
// allow for commit transaction
do_action( 'deleted_user', $id );
return true;
}
-function wpmu_get_blog_allowedthemes( $blog_id = 0 ) {
- $themes = get_themes();
-
- if ( $blog_id != 0 )
- switch_to_blog( $blog_id );
-
- $blog_allowed_themes = get_option( 'allowedthemes' );
- if ( !is_array( $blog_allowed_themes ) || empty( $blog_allowed_themes ) ) { // convert old allowed_themes to new allowedthemes
- $blog_allowed_themes = get_option( 'allowed_themes' );
-
- if ( is_array( $blog_allowed_themes ) ) {
- foreach( (array) $themes as $key => $theme ) {
- $theme_key = esc_html( $theme['Stylesheet'] );
- if ( isset( $blog_allowed_themes[$key] ) == true ) {
- $blog_allowedthemes[$theme_key] = 1;
- }
- }
- $blog_allowed_themes = $blog_allowedthemes;
- add_option( 'allowedthemes', $blog_allowed_themes );
- delete_option( 'allowed_themes' );
- }
- }
-
- if ( $blog_id != 0 )
- restore_current_blog();
-
- return $blog_allowed_themes;
-}
-
function update_option_new_admin_email( $old_value, $value ) {
$email = get_option( 'admin_email' );
if ( $value == get_option( 'admin_email' ) || !is_email( $value ) )
if ( ! is_object($errors) )
$errors = new WP_Error();
- if ( $current_user->id != $_POST['user_id'] )
+ if ( $current_user->ID != $_POST['user_id'] )
return false;
if ( $current_user->user_email != $_POST['email'] ) {
if ( !is_email( $_POST['email'] ) ) {
- $errors->add( 'user_email', __( "<strong>ERROR</strong>: The e-mail address isn't correct." ), array( 'form-field' => 'email' ) );
+ $errors->add( 'user_email', __( "<strong>ERROR</strong>: The email address isn’t correct." ), array( 'form-field' => 'email' ) );
return;
}
if ( $wpdb->get_var( $wpdb->prepare( "SELECT user_email FROM {$wpdb->users} WHERE user_email=%s", $_POST['email'] ) ) ) {
- $errors->add( 'user_email', __( "<strong>ERROR</strong>: The e-mail address is already used." ), array( 'form-field' => 'email' ) );
+ $errors->add( 'user_email', __( "<strong>ERROR</strong>: The email address is already used." ), array( 'form-field' => 'email' ) );
delete_option( $current_user->ID . '_new_email' );
return;
}
}
add_action( 'admin_notices', 'new_user_email_admin_notice' );
-function get_site_allowed_themes() {
- $themes = get_themes();
- $allowed_themes = get_site_option( 'allowedthemes' );
- if ( !is_array( $allowed_themes ) || empty( $allowed_themes ) ) {
- $allowed_themes = get_site_option( 'allowed_themes' ); // convert old allowed_themes format
- if ( !is_array( $allowed_themes ) ) {
- $allowed_themes = array();
- } else {
- foreach( (array) $themes as $key => $theme ) {
- $theme_key = esc_html( $theme['Stylesheet'] );
- if ( isset( $allowed_themes[ $key ] ) == true ) {
- $allowedthemes[ $theme_key ] = 1;
- }
- }
- $allowed_themes = $allowedthemes;
- }
- }
- return $allowed_themes;
-}
-
-/**
- * Determines if there is any upload space left in the current blog's quota.
- *
- * @since 3.0.0
- * @return bool True if space is available, false otherwise.
- */
-function is_upload_space_available() {
- if ( get_site_option( 'upload_space_check_disabled' ) )
- return true;
-
- if ( !( $space_allowed = get_upload_space_available() ) )
- return false;
-
- return true;
-}
-
/**
- * @since 3.0.0
+ * Check whether a blog has used its allotted upload space.
*
- * @return int of upload size limit in bytes
- */
-function upload_size_limit_filter( $size ) {
- $fileupload_maxk = 1024 * get_site_option( 'fileupload_maxk', 1500 );
- if ( get_site_option( 'upload_space_check_disabled' ) )
- return min( $size, $fileupload_maxk );
-
- return min( $size, $fileupload_maxk, get_upload_space_available() );
-}
-/**
- * Determines if there is any upload space left in the current blog's quota.
+ * @since MU
*
- * @return int of upload space available in bytes
+ * @param bool $echo Optional. If $echo is set and the quota is exceeded, a warning message is echoed. Default is true.
+ * @return int
*/
-function get_upload_space_available() {
- $space_allowed = get_space_allowed() * 1024 * 1024;
+function upload_is_user_over_quota( $echo = true ) {
if ( get_site_option( 'upload_space_check_disabled' ) )
- return $space_allowed;
+ return false;
- $dir_name = trailingslashit( BLOGUPLOADDIR );
- if ( !( is_dir( $dir_name) && is_readable( $dir_name ) ) )
- return $space_allowed;
+ $space_allowed = get_space_allowed();
+ if ( empty( $space_allowed ) || !is_numeric( $space_allowed ) )
+ $space_allowed = 10; // Default space allowed is 10 MB
- $dir = dir( $dir_name );
- $size = 0;
+ $space_used = get_space_used();
- while ( $file = $dir->read() ) {
- if ( $file != '.' && $file != '..' ) {
- if ( is_dir( $dir_name . $file) ) {
- $size += get_dirsize( $dir_name . $file );
- } else {
- $size += filesize( $dir_name . $file );
- }
- }
+ if ( ( $space_allowed - $space_used ) < 0 ) {
+ if ( $echo )
+ _e( 'Sorry, you have used your space allocation. Please delete some files to upload more files.' );
+ return true;
+ } else {
+ return false;
}
- $dir->close();
-
- if ( ( $space_allowed - $size ) <= 0 )
- return 0;
-
- return $space_allowed - $size;
}
/**
- * Returns the upload quota for the current blog.
+ * Displays the amount of disk space used by the current blog. Not used in core.
*
- * @return int Quota
+ * @since MU
*/
-function get_space_allowed() {
- $space_allowed = get_option( 'blog_upload_space' );
- if ( $space_allowed == false )
- $space_allowed = get_site_option( 'blog_upload_space' );
- if ( empty( $space_allowed ) || !is_numeric( $space_allowed ) )
- $space_allowed = 50;
-
- return $space_allowed;
-}
-
function display_space_usage() {
- $space = get_space_allowed();
- $used = get_dirsize( BLOGUPLOADDIR ) / 1024 / 1024;
+ $space_allowed = get_space_allowed();
+ $space_used = get_space_used();
- $percentused = ( $used / $space ) * 100;
+ $percent_used = ( $space_used / $space_allowed ) * 100;
- if ( $space > 1000 ) {
- $space = number_format( $space / 1024 );
+ if ( $space_allowed > 1000 ) {
+ $space = number_format( $space_allowed / 1024 );
/* translators: Gigabytes */
$space .= __( 'GB' );
} else {
+ $space = number_format( $space_allowed );
/* translators: Megabytes */
$space .= __( 'MB' );
}
?>
- <strong><?php printf( __( 'Used: %1s%% of %2s' ), number_format( $percentused ), $space ); ?></strong>
+ <strong><?php printf( __( 'Used: %1$s%% of %2$s' ), number_format( $percent_used ), $space ); ?></strong>
<?php
}
+/**
+ * Get the remaining upload space for this blog.
+ *
+ * @since MU
+ * @uses upload_is_user_over_quota()
+ * @uses get_space_allowed()
+ * @uses get_upload_space_available()
+ *
+ * @param int $size Current max size in bytes
+ * @return int Max size in bytes
+ */
+function fix_import_form_size( $size ) {
+ if ( upload_is_user_over_quota( false ) == true )
+ return 0;
+
+ $available = get_upload_space_available();
+ return min( $size, $available );
+}
+
// Edit blog upload space setting on Edit Blog page
function upload_space_setting( $id ) {
- $quota = get_blog_option( $id, 'blog_upload_space' );
+ switch_to_blog( $id );
+ $quota = get_option( 'blog_upload_space' );
+ restore_current_blog();
+
if ( !$quota )
$quota = '';
?>
<tr>
<th><?php _e( 'Site Upload Space Quota '); ?></th>
- <td><input type="text" size="3" name="option[blog_upload_space]" value="<?php echo $quota; ?>" /> <?php _e( 'MB (Leave blank for network default)' ); ?></td>
+ <td><input type="number" step="1" min="0" style="width: 100px" name="option[blog_upload_space]" value="<?php echo $quota; ?>" /> <?php _e( 'MB (Leave blank for network default)' ); ?></td>
</tr>
<?php
}
function update_user_status( $id, $pref, $value, $deprecated = null ) {
global $wpdb;
- if ( null !== $deprecated )
+ if ( null !== $deprecated )
_deprecated_argument( __FUNCTION__, '3.1' );
- $wpdb->update( $wpdb->users, array( $pref => $value ), array( 'ID' => $id ) );
+ $wpdb->update( $wpdb->users, array( sanitize_key( $pref ) => $value ), array( 'ID' => $id ) );
- clean_user_cache( $id );
+ $user = new WP_User( $id );
+ clean_user_cache( $user );
if ( $pref == 'spam' ) {
if ( $value == 1 )
if ( !$user = get_userdata( $id ) )
return false;
- clean_user_cache( $id );
+ clean_user_cache( $user );
return $id;
}
}
add_filter( 'get_term', 'sync_category_tag_slugs', 10, 2 );
-function redirect_user_to_blog() {
- $c = 0;
- if ( isset( $_GET['c'] ) )
- $c = (int) $_GET['c'];
+function _access_denied_splash() {
+ if ( ! is_user_logged_in() || is_network_admin() )
+ return;
- if ( $c >= 5 ) {
- wp_die( __( "You don’t have permission to view this site. Please contact the system administrator." ) );
- }
- $c ++;
+ $blogs = get_blogs_of_user( get_current_user_id() );
- $blog = get_active_blog_for_user( get_current_user_id() );
+ if ( wp_list_filter( $blogs, array( 'userblog_id' => get_current_blog_id() ) ) )
+ return;
- if ( is_object( $blog ) ) {
- wp_redirect( get_admin_url( $blog->blog_id, '?c=' . $c ) ); // redirect and count to 5, "just in case"
- } else {
- wp_redirect( user_admin_url( '?c=' . $c ) ); // redirect and count to 5, "just in case"
+ $blog_name = get_bloginfo( 'name' );
+
+ if ( empty( $blogs ) )
+ wp_die( sprintf( __( 'You attempted to access the "%1$s" dashboard, but you do not currently have privileges on this site. If you believe you should be able to access the "%1$s" dashboard, please contact your network administrator.' ), $blog_name ) );
+
+ $output = '<p>' . sprintf( __( 'You attempted to access the "%1$s" dashboard, but you do not currently have privileges on this site. If you believe you should be able to access the "%1$s" dashboard, please contact your network administrator.' ), $blog_name ) . '</p>';
+ $output .= '<p>' . __( 'If you reached this screen by accident and meant to visit one of your own sites, here are some shortcuts to help you find your way.' ) . '</p>';
+
+ $output .= '<h3>' . __('Your Sites') . '</h3>';
+ $output .= '<table>';
+
+ foreach ( $blogs as $blog ) {
+ $output .= "<tr>";
+ $output .= "<td valign='top'>";
+ $output .= "{$blog->blogname}";
+ $output .= "</td>";
+ $output .= "<td valign='top'>";
+ $output .= "<a href='" . esc_url( get_admin_url( $blog->userblog_id ) ) . "'>" . __( 'Visit Dashboard' ) . "</a> | <a href='" . esc_url( get_home_url( $blog->userblog_id ) ). "'>" . __( 'View Site' ) . "</a>" ;
+ $output .= "</td>";
+ $output .= "</tr>";
}
- exit;
+ $output .= '</table>';
+
+ wp_die( $output );
}
-add_action( 'admin_page_access_denied', 'redirect_user_to_blog', 99 );
+add_action( 'admin_page_access_denied', '_access_denied_splash', 99 );
function check_import_new_users( $permission ) {
if ( !is_super_admin() )
$output[$be] = '<option value="' . esc_attr( $code_lang ) . '"' . selected( $current, $code_lang, false ) . '> ' . $be . '</option>';
} else {
$translated = format_code_lang( $code_lang );
- $output[$translated] = '<option value="' . esc_attr( $code_lang ) . '"' . selected( $current, $code_lang, false ) . '> ' . esc_html ( $translated ) . '</option>';
+ $output[$translated] = '<option value="' . esc_attr( $code_lang ) . '"' . selected( $current, $code_lang, false ) . '> ' . esc_html ( $translated ) . '</option>';
}
}
if ( !is_super_admin() )
return false;
if ( get_site_option( 'wpmu_upgrade_site' ) != $wp_db_version )
- echo "<div class='update-nag'>" . sprintf( __( 'Thank you for Updating! Please visit the <a href="%s">Update Network</a> page to update all your sites.' ), esc_url( network_admin_url( 'upgrade.php' ) ) ) . "</div>";
+ echo "<div class='update-nag'>" . sprintf( __( 'Thank you for Updating! Please visit the <a href="%s">Upgrade Network</a> page to update all your sites.' ), esc_url( network_admin_url( 'upgrade.php' ) ) ) . "</div>";
}
add_action( 'admin_notices', 'site_admin_notice' );
add_action( 'network_admin_notices', 'site_admin_notice' );
<?php foreach( (array) $all_blogs as $blog ) {
if ( $primary_blog == $blog->userblog_id )
$found = true;
- ?><option value="<?php echo $blog->userblog_id ?>"<?php selected( $primary_blog, $blog->userblog_id ); ?>><?php echo esc_url( get_home_url( $blog->userblog_id ) ) ?></option><?php
+ ?><option value="<?php echo $blog->userblog_id ?>"<?php selected( $primary_blog, $blog->userblog_id ); ?>><?php echo esc_url( get_home_url( $blog->userblog_id ) ) ?></option><?php
} ?>
</select>
<?php
<?php if ( in_array( get_site_option( 'registration' ), array( 'all', 'blog' ) ) ) : ?>
<tr>
<th scope="row" colspan="2" class="th-full">
- <a href="<?php echo apply_filters( 'wp_signup_location', network_home_url( 'wp-signup.php' ) ); ?>"><?php _e( 'Create a New Site' ); ?></a>
+ <a href="<?php echo apply_filters( 'wp_signup_location', network_site_url( 'wp-signup.php' ) ); ?>"><?php _e( 'Create a New Site' ); ?></a>
</th>
</tr>
<?php endif; ?>
<?php
}
-function ms_deprecated_blogs_file() {
- if ( ! is_super_admin() )
- return;
- if ( ! file_exists( WP_CONTENT_DIR . '/blogs.php' ) )
- return;
- echo '<div class="update-nag">' . sprintf( __( 'The <code>%1$s</code> file is deprecated. Please remove it and update your server rewrite rules to use <code>%2$s</code> instead.' ), 'wp-content/blogs.php', 'wp-includes/ms-files.php' ) . '</div>';
-}
-add_action( 'network_admin_notices', 'ms_deprecated_blogs_file' );
-
/**
* Grants super admin privileges.
*
// Directly fetch site_admins instead of using get_super_admins()
$super_admins = get_site_option( 'site_admins', array( 'admin' ) );
- $user = new WP_User( $user_id );
- if ( ! in_array( $user->user_login, $super_admins ) ) {
+ $user = get_userdata( $user_id );
+ if ( $user && ! in_array( $user->user_login, $super_admins ) ) {
$super_admins[] = $user->user_login;
update_site_option( 'site_admins' , $super_admins );
do_action( 'granted_super_admin', $user_id );
// Directly fetch site_admins instead of using get_super_admins()
$super_admins = get_site_option( 'site_admins', array( 'admin' ) );
- $user = new WP_User( $user_id );
- if ( $user->user_email != get_site_option( 'admin_email' ) ) {
+ $user = get_userdata( $user_id );
+ if ( $user && $user->user_email != get_site_option( 'admin_email' ) ) {
if ( false !== ( $key = array_search( $user->user_login, $super_admins ) ) ) {
unset( $super_admins[$key] );
update_site_option( 'site_admins', $super_admins );
<script type="text/javascript">
//<![CDATA[
var tb_pathToImage = "../../wp-includes/js/thickbox/loadingAnimation.gif";
-var tb_closeImage = "../../wp-includes/js/thickbox/tb-close.png";
//]]>
</script>
<?php
}
-
-?>