X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/bf5c68485ef07868ad0a91168ecd0092af7661ae..refs/tags/wordpress-3.4:/wp-admin/includes/user.php diff --git a/wp-admin/includes/user.php b/wp-admin/includes/user.php index 816a9e79..ff1e91dc 100644 --- a/wp-admin/includes/user.php +++ b/wp-admin/includes/user.php @@ -9,38 +9,12 @@ /** * Creates a new user from the "Users" form using $_POST information. * - * It seems that the first half is for backwards compatibility, but only - * has the ability to alter the user's role. WordPress core seems to - * use this function only in the second way, running edit_user() with - * no id so as to create a new user. - * * @since 2.0 * - * @param int $user_id Optional. User ID. * @return null|WP_Error|int Null when adding user, WP_Error or User ID integer when no parameters. */ function add_user() { - if ( func_num_args() ) { // The hackiest hack that ever did hack - global $wp_roles; - $user_id = (int) func_get_arg( 0 ); - - if ( isset( $_POST['role'] ) ) { - $new_role = sanitize_text_field( $_POST['role'] ); - // Don't let anyone with 'edit_users' (admins) edit their own role to something without it. - if ( $user_id != get_current_user_id() || $wp_roles->role_objects[$new_role]->has_cap( 'edit_users' ) ) { - // If the new role isn't editable by the logged-in user die with error - $editable_roles = get_editable_roles(); - if ( empty( $editable_roles[$new_role] ) ) - wp_die(__('You can’t give users that role.')); - - $user = new WP_User( $user_id ); - $user->set_role( $new_role ); - } - } - } else { - add_action( 'user_register', 'add_user' ); // See above - return edit_user(); - } + return edit_user(); } /** @@ -263,16 +237,27 @@ function wp_delete_user( $id, $reassign = 'novalue' ) { global $wpdb; $id = (int) $id; + $user = new WP_User( $id ); // allow for transaction statement do_action('delete_user', $id); if ( 'novalue' === $reassign || null === $reassign ) { - $post_ids = $wpdb->get_col( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_author = %d", $id) ); + $post_types_to_delete = array(); + foreach ( get_post_types( array(), 'objects' ) as $post_type ) { + if ( $post_type->delete_with_user ) { + $post_types_to_delete[] = $post_type->name; + } elseif ( null === $post_type->delete_with_user && post_type_supports( $post_type->name, 'author' ) ) { + $post_types_to_delete[] = $post_type->name; + } + } + $post_types_to_delete = apply_filters( 'post_types_to_delete_with_user', $post_types_to_delete, $id ); + $post_types_to_delete = implode( "', '", $post_types_to_delete ); + $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d AND post_type IN ('$post_types_to_delete')", $id ) ); if ( $post_ids ) { foreach ( $post_ids as $post_id ) - wp_delete_post($post_id); + wp_delete_post( $post_id ); } // Clean links @@ -288,17 +273,19 @@ function wp_delete_user( $id, $reassign = 'novalue' ) { $wpdb->update( $wpdb->links, array('link_owner' => $reassign), array('link_owner' => $id) ); } - clean_user_cache($id); - // FINALLY, delete user - if ( !is_multisite() ) { - $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d", $id) ); - $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->users WHERE ID = %d", $id) ); + if ( is_multisite() ) { + remove_user_from_blog( $id, get_current_blog_id() ); } else { - $level_key = $wpdb->get_blog_prefix() . 'capabilities'; // wpmu site admins don't have user_levels - $wpdb->query("DELETE FROM $wpdb->usermeta WHERE user_id = $id AND meta_key = '{$level_key}'"); + $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( $user ); + // allow for commit transaction do_action('deleted_user', $id); @@ -369,5 +356,3 @@ function default_password_nag() { printf( '' . __('No thanks, do not remind me again') . '', '?default_password_nag=0' ); echo '

'; } - -?>