diff -r 490d5cc509ed -r cf61fcea0001 wp/wp-admin/includes/ms.php
--- a/wp/wp-admin/includes/ms.php Tue Jun 09 11:14:17 2015 +0000
+++ b/wp/wp-admin/includes/ms.php Mon Oct 14 17:39:30 2019 +0200
@@ -28,28 +28,36 @@
$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 ) );
- if ( $file_size > ( 1024 * get_site_option( 'fileupload_maxk', 1500 ) ) )
- $file['error'] = sprintf(__('This file is too big. Files must be less than %1$s KB in size.'), get_site_option( 'fileupload_maxk', 1500 ) );
+ if ( $space_left < $file_size ) {
+ /* translators: 1: Required disk space in kilobytes */
+ $file['error'] = sprintf( __( 'Not enough space to upload. %1$s KB needed.' ), number_format( ( $file_size - $space_left ) / KB_IN_BYTES ) );
+ }
+
+ if ( $file_size > ( KB_IN_BYTES * get_site_option( 'fileupload_maxk', 1500 ) ) ) {
+ /* translators: 1: Maximum allowed file size in kilobytes */
+ $file['error'] = sprintf( __( 'This file is too big. Files must be less than %1$s KB in size.' ), get_site_option( 'fileupload_maxk', 1500 ) );
+ }
+
if ( upload_is_user_over_quota( false ) ) {
$file['error'] = __( 'You have used your space quota. Please delete files before uploading.' );
}
- if ( $file['error'] != '0' && ! isset( $_POST['html-upload'] ) && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
+
+ if ( $file['error'] != '0' && ! isset( $_POST['html-upload'] ) && ! wp_doing_ajax() ) {
wp_die( $file['error'] . ' ' . __( 'Back' ) . '' );
}
return $file;
}
-add_filter( 'wp_handle_upload_prefilter', 'check_upload_size' );
/**
- * Delete a blog.
+ * Delete a site.
*
* @since 3.0.0
*
- * @param int $blog_id Blog ID.
- * @param bool $drop True if blog's table should be dropped. Default is false.
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @param int $blog_id Site ID.
+ * @param bool $drop True if site's database tables should be dropped. Default is false.
*/
function wpmu_delete_blog( $blog_id, $drop = false ) {
global $wpdb;
@@ -60,14 +68,14 @@
switch_to_blog( $blog_id );
}
- $blog = get_blog_details( $blog_id );
+ $blog = get_site( $blog_id );
/**
- * Fires before a blog is deleted.
+ * Fires before a site is deleted.
*
- * @since MU
+ * @since MU (3.0.0)
*
- * @param int $blog_id The blog ID.
- * @param bool $drop True if blog's table should be dropped. Default is false.
+ * @param int $blog_id The site ID.
+ * @param bool $drop True if site's table should be dropped. Default is false.
*/
do_action( 'delete_blog', $blog_id, $drop );
@@ -82,7 +90,7 @@
update_blog_status( $blog_id, 'deleted', 1 );
- $current_site = get_current_site();
+ $current_network = get_network();
// If a full blog object is not available, do not destroy anything.
if ( $drop && ! $blog ) {
@@ -90,7 +98,7 @@
}
// 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 ) ) ) {
+ if ( $drop && ( 1 == $blog_id || is_main_site( $blog_id ) || ( $blog->path == $current_network->path && $blog->domain == $current_network->domain ) ) ) {
$drop = false;
}
@@ -102,16 +110,16 @@
}
if ( $drop ) {
- $uploads = wp_upload_dir();
+ $uploads = wp_get_upload_dir();
$tables = $wpdb->tables( 'blog' );
/**
- * Filter the tables to drop when the blog is deleted.
+ * Filters the tables to drop when the site is deleted.
*
- * @since MU
+ * @since MU (3.0.0)
*
- * @param array $tables The blog tables to be dropped.
- * @param int $blog_id The ID of the blog to drop tables for.
+ * @param array $tables The site tables to be dropped.
+ * @param int $blog_id The ID of the site to drop tables for.
*/
$drop_tables = apply_filters( 'wpmu_drop_tables', $tables, $blog_id );
@@ -122,12 +130,12 @@
$wpdb->delete( $wpdb->blogs, array( 'blog_id' => $blog_id ) );
/**
- * Filter the upload base directory to delete when the blog is deleted.
+ * Filters the upload base directory to delete when the site is deleted.
*
- * @since MU
+ * @since MU (3.0.0)
*
* @param string $uploads['basedir'] Uploads path without subdirectory. @see wp_upload_dir()
- * @param int $blog_id The blog ID.
+ * @param int $blog_id The site ID.
*/
$dir = apply_filters( 'wpmu_delete_blog_upload_dir', $uploads['basedir'], $blog_id );
$dir = rtrim( $dir, DIRECTORY_SEPARATOR );
@@ -157,7 +165,7 @@
}
$stack = array_reverse( $stack ); // Last added dirs are deepest
- foreach( (array) $stack as $dir ) {
+ foreach ( (array) $stack as $dir ) {
if ( $dir != $top_dir)
@rmdir( $dir );
}
@@ -165,6 +173,16 @@
clean_blog_cache( $blog );
}
+ /**
+ * Fires after the site is deleted from the network.
+ *
+ * @since 4.8.0
+ *
+ * @param int $blog_id The site ID.
+ * @param bool $drop True if site's tables should be dropped. Default is false.
+ */
+ do_action( 'deleted_blog', $blog_id, $drop );
+
if ( $switch )
restore_current_blog();
}
@@ -176,21 +194,34 @@
*
* @todo Merge with wp_delete_user() ?
*
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
* @param int $id The user ID.
* @return bool True if the user was deleted, otherwise false.
*/
function wpmu_delete_user( $id ) {
global $wpdb;
+ if ( ! is_numeric( $id ) ) {
+ return false;
+ }
+
$id = (int) $id;
$user = new WP_User( $id );
if ( !$user->exists() )
return false;
+
+ // Global super-administrators are protected, and cannot be deleted.
+ $_super_admins = get_super_admins();
+ if ( in_array( $user->user_login, $_super_admins, true ) ) {
+ return false;
+ }
+
/**
* Fires before a user is deleted from the network.
*
- * @since MU
+ * @since MU (3.0.0)
*
* @param int $id ID of the user about to be deleted from the network.
*/
@@ -229,172 +260,15 @@
clean_user_cache( $user );
/** This action is documented in wp-admin/includes/user.php */
- do_action( 'deleted_user', $id );
+ do_action( 'deleted_user', $id, null );
return true;
}
/**
- * Sends an email when a site administrator email address is changed.
- *
- * @since 3.0.0
- *
- * @param string $old_value The old email address. Not currently used.
- * @param string $value The new email address.
- */
-function update_option_new_admin_email( $old_value, $value ) {
- if ( $value == get_option( 'admin_email' ) || !is_email( $value ) )
- return;
-
- $hash = md5( $value. time() .mt_rand() );
- $new_admin_email = array(
- 'hash' => $hash,
- 'newemail' => $value
- );
- update_option( 'adminhash', $new_admin_email );
-
- $email_text = __( 'Howdy ###USERNAME###,
-
-You recently requested to have the administration email address on
-your site changed.
-
-If this is correct, please click on the following link to change it:
-###ADMIN_URL###
-
-You can safely ignore and delete this email if you do not want to
-take this action.
-
-This email has been sent to ###EMAIL###
-
-Regards,
-All at ###SITENAME###
-###SITEURL###' );
-
- /**
- * Filter the email text sent when the site admin email is changed.
- *
- * The following strings have a special meaning and will get replaced dynamically:
- * ###USERNAME### The current user's username.
- * ###ADMIN_URL### The link to click on to confirm the email change.
- * ###EMAIL### The new email.
- * ###SITENAME### The name of the site.
- * ###SITEURL### The URL to the site.
- *
- * @since MU
- *
- * @param string $email_text Text in the email.
- * @param string $new_admin_email New admin email that the current administration email was changed to.
- */
- $content = apply_filters( 'new_admin_email_content', $email_text, $new_admin_email );
-
- $content = str_replace( '###USERNAME###', $current_user->user_login, $content );
- $content = str_replace( '###ADMIN_URL###', esc_url( admin_url( 'options.php?adminhash='.$hash ) ), $content );
- $content = str_replace( '###EMAIL###', $value, $content );
- $content = str_replace( '###SITENAME###', get_site_option( 'site_name' ), $content );
- $content = str_replace( '###SITEURL###', network_home_url(), $content );
-
- wp_mail( $value, sprintf( __( '[%s] New Admin Email Address' ), wp_specialchars_decode( get_option( 'blogname' ) ) ), $content );
-}
-add_action( 'update_option_new_admin_email', 'update_option_new_admin_email', 10, 2 );
-add_action( 'add_option_new_admin_email', 'update_option_new_admin_email', 10, 2 );
-
-/**
- * Sends an email when an email address change is requested.
- *
- * @since 3.0.0
+ * Check whether a site has used its allotted upload space.
*
- * @global object $errors WP_Error object.
- * @global object $wpdb WordPress database object.
- */
-function send_confirmation_on_profile_email() {
- global $errors, $wpdb;
- $current_user = wp_get_current_user();
- if ( ! is_object($errors) )
- $errors = new WP_Error();
-
- 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', __( "ERROR: 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', __( "ERROR: The email address is already used." ), array( 'form-field' => 'email' ) );
- delete_option( $current_user->ID . '_new_email' );
- return;
- }
-
- $hash = md5( $_POST['email'] . time() . mt_rand() );
- $new_user_email = array(
- 'hash' => $hash,
- 'newemail' => $_POST['email']
- );
- update_option( $current_user->ID . '_new_email', $new_user_email );
-
- $email_text = __( 'Howdy ###USERNAME###,
-
-You recently requested to have the email address on your account changed.
-
-If this is correct, please click on the following link to change it:
-###ADMIN_URL###
-
-You can safely ignore and delete this email if you do not want to
-take this action.
-
-This email has been sent to ###EMAIL###
-
-Regards,
-All at ###SITENAME###
-###SITEURL###' );
-
- /**
- * Filter the email text sent when a user changes emails.
- *
- * The following strings have a special meaning and will get replaced dynamically:
- * ###USERNAME### The current user's username.
- * ###ADMIN_URL### The link to click on to confirm the email change.
- * ###EMAIL### The new email.
- * ###SITENAME### The name of the site.
- * ###SITEURL### The URL to the site.
- *
- * @since MU
- *
- * @param string $email_text Text in the email.
- * @param string $new_user_email New user email that the current user has changed to.
- */
- $content = apply_filters( 'new_user_email_content', $email_text, $new_user_email );
-
- $content = str_replace( '###USERNAME###', $current_user->user_login, $content );
- $content = str_replace( '###ADMIN_URL###', esc_url( admin_url( 'profile.php?newuseremail='.$hash ) ), $content );
- $content = str_replace( '###EMAIL###', $_POST['email'], $content);
- $content = str_replace( '###SITENAME###', get_site_option( 'site_name' ), $content );
- $content = str_replace( '###SITEURL###', network_home_url(), $content );
-
- wp_mail( $_POST['email'], sprintf( __( '[%s] New Email Address' ), wp_specialchars_decode( get_option( 'blogname' ) ) ), $content );
- $_POST['email'] = $current_user->user_email;
- }
-}
-add_action( 'personal_options_update', 'send_confirmation_on_profile_email' );
-
-/**
- * Adds an admin notice alerting the user to check for confirmation email
- * after email address change.
- *
- * @since 3.0.0
- */
-function new_user_email_admin_notice() {
- if ( strpos( $_SERVER['PHP_SELF'], 'profile.php' ) && isset( $_GET['updated'] ) && $email = get_option( get_current_user_id() . '_new_email' ) )
- echo "
" . sprintf( __( "Your email address has not been updated yet. Please check your inbox at %s for a confirmation email." ), $email['newemail'] ) . "
";
-}
-add_action( 'admin_notices', 'new_user_email_admin_notice' );
-
-/**
- * Check whether a blog has used its allotted upload space.
- *
- * @since MU
+ * @since MU (3.0.0)
*
* @param bool $echo Optional. If $echo is set and the quota is exceeded, a warning message is echoed. Default is true.
* @return bool True if user is over upload space quota, otherwise false.
@@ -404,9 +278,9 @@
return false;
$space_allowed = get_space_allowed();
- if ( empty( $space_allowed ) || !is_numeric( $space_allowed ) )
+ if ( ! is_numeric( $space_allowed ) ) {
$space_allowed = 10; // Default space allowed is 10 MB
-
+ }
$space_used = get_space_used();
if ( ( $space_allowed - $space_used ) < 0 ) {
@@ -419,9 +293,9 @@
}
/**
- * Displays the amount of disk space used by the current blog. Not used in core.
+ * Displays the amount of disk space used by the current site. Not used in core.
*
- * @since MU
+ * @since MU (3.0.0)
*/
function display_space_usage() {
$space_allowed = get_space_allowed();
@@ -430,7 +304,7 @@
$percent_used = ( $space_used / $space_allowed ) * 100;
if ( $space_allowed > 1000 ) {
- $space = number_format( $space_allowed / 1024 );
+ $space = number_format( $space_allowed / KB_IN_BYTES );
/* translators: Gigabytes */
$space .= __( 'GB' );
} else {
@@ -439,32 +313,35 @@
$space .= __( 'MB' );
}
?>
-
+
update( $wpdb->users, array( sanitize_key( $pref ) => $value ), array( 'ID' => $id ) );
@@ -580,9 +458,9 @@
've' => 'Venda', 'vi' => 'Vietnamese', 'vo' => 'Volapük', 'cy' => 'Welsh','wa' => 'Walloon','wo' => 'Wolof', 'xh' => 'Xhosa', 'yi' => 'Yiddish', 'yo' => 'Yoruba', 'za' => 'Zhuang; Chuang', 'zu' => 'Zulu' );
/**
- * Filter the language codes.
+ * Filters the language codes.
*
- * @since MU
+ * @since MU (3.0.0)
*
* @param array $lang_codes Key/value pair of language codes where key is the short version.
* @param string $code A two-letter designation of the language.
@@ -597,10 +475,10 @@
* @since 3.0.0
*
* @param object $term The term.
- * @param string $taxonomy The taxonomy for $term. Should be 'category' or 'post_tag', as these are
+ * @param string $taxonomy The taxonomy for `$term`. Should be 'category' or 'post_tag', as these are
* the only taxonomies which are processed by this function; anything else
* will be returned untouched.
- * @return object|array Returns `$term`, after filtering the 'slug' field with {@see sanitize_title()}
+ * @return object|array Returns `$term`, after filtering the 'slug' field with sanitize_title()
* if $taxonomy is 'category' or 'post_tag'.
*/
function sync_category_tag_slugs( $term, $taxonomy ) {
@@ -613,7 +491,6 @@
}
return $term;
}
-add_filter( 'get_term', 'sync_category_tag_slugs', 10, 2 );
/**
* Displays an access denied message when a user tries to view a site's dashboard they
@@ -654,7 +531,6 @@
wp_die( $output, 403 );
}
-add_action( 'admin_page_access_denied', '_access_denied_splash', 99 );
/**
* Checks if the current user has permissions to import new users.
@@ -665,11 +541,12 @@
* @return bool True if the user has proper permissions, false if they do not.
*/
function check_import_new_users( $permission ) {
- if ( !is_super_admin() )
+ if ( ! current_user_can( 'manage_network_users' ) ) {
return false;
+ }
+
return true;
}
-add_filter( 'import_allow_create_users', 'check_import_new_users' );
// See "import_allow_fetch_attachments" and "import_attachment_size_limit" filters too.
/**
@@ -709,9 +586,9 @@
uksort( $output, 'strnatcasecmp' );
/**
- * Filter the languages available in the dropdown.
+ * Filters the languages available in the dropdown.
*
- * @since MU
+ * @since MU (3.0.0)
*
* @param array $output HTML output of the dropdown.
* @param array $lang_files Available language files.
@@ -727,22 +604,31 @@
*
* @since 3.0.0
*
- * @global int $wp_db_version The version number of the database.
+ * @global int $wp_db_version The version number of the database.
+ * @global string $pagenow
+ *
+ * @return false False if the current user is not a super admin.
*/
function site_admin_notice() {
- global $wp_db_version;
- if ( !is_super_admin() )
+ global $wp_db_version, $pagenow;
+
+ if ( ! current_user_can( 'upgrade_network' ) ) {
return false;
- if ( get_site_option( 'wpmu_upgrade_site' ) != $wp_db_version )
+ }
+
+ if ( 'upgrade.php' == $pagenow ) {
+ return;
+ }
+
+ if ( get_site_option( 'wpmu_upgrade_site' ) != $wp_db_version ) {
echo "
" . sprintf( __( 'Thank you for Updating! Please visit the Upgrade Network page to update all your sites.' ), esc_url( network_admin_url( 'upgrade.php' ) ) ) . "
";
+ }
}
-add_action( 'admin_notices', 'site_admin_notice' );
-add_action( 'network_admin_notices', 'site_admin_notice' );
/**
* Avoids a collision between a site slug and a permalink slug.
*
- * In a subdirectory install this will make sure that a site and a post do not use the
+ * In a subdirectory installation this will make sure that a site and a post do not use the
* same subdirectory by checking for a site with the same name as a new post.
*
* @since 3.0.0
@@ -772,7 +658,6 @@
}
return $data;
}
-add_filter( 'wp_insert_post_data', 'avoid_blog_page_permalink_collision', 10, 2 );
/**
* Handles the display of choosing a user's primary site.
@@ -796,7 +681,7 @@
$found = false;
?>