Make WordPress Core

Ticket #43162: 4172.diff

File 4172.diff, 3.7 KB (added by carl-alberto, 16 months ago)

Trying to add a patch

  • src/wp-includes/ms-site.php

    diff --git a/src/wp-includes/ms-site.php b/src/wp-includes/ms-site.php
    index 6d854e3fb457..0b5a6e9c77b1 100644
    a b function wp_uninitialize_site( $site_id ) { 
    799799                switch_to_blog( $site->id );
    800800        }
    801801
    802         $uploads = wp_get_upload_dir();
    803 
    804         $tables = $wpdb->tables( 'blog' );
     802        $prep_query = $wpdb->prepare( 'SELECT table_name FROM information_schema.TABLES WHERE table_name LIKE %s;', $wpdb->esc_like( "{$wpdb->base_prefix}{$site->id}_" ) . '%' );
     803        $tables     = $wpdb->get_results( $prep_query, ARRAY_A );
    805804
    806805        /**
    807806         * Filters the tables to drop when the site is deleted.
    808807         *
    809808         * @since MU (3.0.0)
    810809         *
    811          * @param string[] $tables Array of names of the site tables to be dropped.
    812          * @param int      $site_id The ID of the site to drop tables for.
     810         * @param string[] $drop_tables Array of names of the site tables to be dropped.
     811         * @param onject   $site        Contains the objects related to the subsite like the multisite site id that will be used to reference the drop tables for.
    813812         */
    814813        $drop_tables = apply_filters( 'wpmu_drop_tables', $tables, $site->id );
    815814
    816815        foreach ( (array) $drop_tables as $table ) {
    817                 $wpdb->query( "DROP TABLE IF EXISTS `$table`" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
     816                $table_name = $table['table_name'];
     817
     818                $wpdb->query( "DROP TABLE IF EXISTS `$table_name`" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
    818819        }
    819820
    820821        /**
    function wp_uninitialize_site( $site_id ) { 
    822823         *
    823824         * @since MU (3.0.0)
    824825         *
    825          * @param string $basedir Uploads path without subdirectory. @see wp_upload_dir()
    826          * @param int    $site_id The site ID.
     826         * @param object $uploads Uploads path object. @see wp_upload_dir()
     827         * @param string $dir Filtered actual subsite directory path to be deleted.
    827828         */
     829        $uploads = wp_get_upload_dir();
    828830        $dir     = apply_filters( 'wpmu_delete_blog_upload_dir', $uploads['basedir'], $site->id );
    829         $dir     = rtrim( $dir, DIRECTORY_SEPARATOR );
    830         $top_dir = $dir;
    831         $stack   = array( $dir );
    832         $index   = 0;
    833 
    834         while ( $index < count( $stack ) ) {
    835                 // Get indexed directory from stack.
    836                 $dir = $stack[ $index ];
    837 
    838                 // phpcs:disable WordPress.PHP.NoSilencedErrors.Discouraged
    839                 $dh = @opendir( $dir );
    840                 if ( $dh ) {
    841                         $file = @readdir( $dh );
    842                         while ( false !== $file ) {
    843                                 if ( '.' === $file || '..' === $file ) {
    844                                         $file = @readdir( $dh );
    845                                         continue;
    846                                 }
    847 
    848                                 if ( @is_dir( $dir . DIRECTORY_SEPARATOR . $file ) ) {
    849                                         $stack[] = $dir . DIRECTORY_SEPARATOR . $file;
    850                                 } elseif ( @is_file( $dir . DIRECTORY_SEPARATOR . $file ) ) {
    851                                         @unlink( $dir . DIRECTORY_SEPARATOR . $file );
    852                                 }
    853 
    854                                 $file = @readdir( $dh );
    855                         }
    856                         @closedir( $dh );
    857                 }
    858                 $index++;
    859         }
    860831
    861         $stack = array_reverse( $stack ); // Last added directories are deepest.
    862         foreach ( (array) $stack as $dir ) {
    863                 if ( $dir != $top_dir ) {
    864                         @rmdir( $dir );
    865                 }
    866         }
     832        require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
     833        require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';
     834
     835        $fileSystemDirect = new WP_Filesystem_Direct( false );
     836
     837        $fileSystemDirect->rmdir( $dir, true );
    867838
    868839        // phpcs:enable WordPress.PHP.NoSilencedErrors.Discouraged
    869840        if ( $switch ) {
  • tests/phpunit/includes/abstract-testcase.php

    diff --git a/tests/phpunit/includes/abstract-testcase.php b/tests/phpunit/includes/abstract-testcase.php
    index 9c189bd96d8f..cb8b8646c15e 100644
    a b public function rmdir( $path ) { 
    13861386         */
    13871387        public function remove_added_uploads() {
    13881388                $uploads = wp_upload_dir();
    1389                 $this->rmdir( $uploads['basedir'] );
     1389                if ( is_dir( $uploads['basedir'] ) ) {
     1390                        $this->rmdir( $uploads['basedir'] );
     1391                }
    13901392        }
    13911393
    13921394        /**