WordPress.org

Make WordPress Core

Ticket #10913: 10913.diff

File 10913.diff, 6.6 KB (added by aldenta, 3 years ago)

Pass known information to copy and delete to save lookup operations

  • wp-admin/includes/file.php

     
    773773 
    774774        foreach ( (array) $dirlist as $filename => $fileinfo ) { 
    775775                if ( 'f' == $fileinfo['type'] ) { 
    776                         if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true) ) { 
     776                        if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) ) { 
    777777                                // If copy failed, chmod file to 0644 and try again. 
    778778                                $wp_filesystem->chmod($to . $filename, 0644); 
    779                                 if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true) ) 
     779                                if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) ) 
    780780                                        return new WP_Error('copy_failed', __('Could not copy file.'), $to . $filename); 
    781781                        } 
    782782                        $wp_filesystem->chmod($to . $filename, FS_CHMOD_FILE); 
  • wp-admin/includes/class-wp-filesystem-ftpsockets.php

     
    193193                return $dir[$file]['group']; 
    194194        } 
    195195 
    196         function copy($source, $destination, $overwrite = false ) { 
     196        function copy($source, $destination, $overwrite = false, $mode = false) { 
    197197                if ( ! $overwrite && $this->exists($destination) ) 
    198198                        return false; 
    199199 
     
    201201                if ( false === $content ) 
    202202                        return false; 
    203203 
    204                 return $this->put_contents($destination, $content); 
     204                return $this->put_contents($destination, $content, $mode); 
    205205        } 
    206206 
    207207        function move($source, $destination, $overwrite = false ) { 
    208208                return $this->ftp->rename($source, $destination); 
    209209        } 
    210210 
    211         function delete($file, $recursive = false ) { 
     211        function delete($file, $recursive = false, $type = false) { 
    212212                if ( empty($file) ) 
    213213                        return false; 
    214                 if ( $this->is_file($file) ) 
     214                if ( 'f' == $type || $this->is_file($file) ) 
    215215                        return $this->ftp->delete($file); 
    216216                if ( !$recursive ) 
    217217                        return $this->ftp->rmdir($file); 
  • wp-admin/includes/class-wp-filesystem-direct.php

     
    193193                return $grouparray['name']; 
    194194        } 
    195195 
    196         function copy($source, $destination, $overwrite = false) { 
     196        function copy($source, $destination, $overwrite = false, $mode = false) { 
    197197                if ( ! $overwrite && $this->exists($destination) ) 
    198198                        return false; 
    199199 
     
    216216                } 
    217217        } 
    218218 
    219         function delete($file, $recursive = false) { 
     219        function delete($file, $recursive = false, $type = false) { 
    220220                if ( empty($file) ) //Some filesystems report this as /, which can cause non-expected recursive deletion of all files in the filesystem. 
    221221                        return false; 
    222222                $file = str_replace('\\', '/', $file); //for win32, occasional problems deleteing files otherwise 
    223223 
    224                 if ( $this->is_file($file) ) 
     224                if ( 'f' == $type || $this->is_file($file) ) 
    225225                        return @unlink($file); 
    226226                if ( ! $recursive && $this->is_dir($file) ) 
    227227                        return @rmdir($file); 
     
    233233                $retval = true; 
    234234                if ( is_array($filelist) ) //false if no files, So check first. 
    235235                        foreach ($filelist as $filename => $fileinfo) 
    236                                 if ( ! $this->delete($file . $filename, $recursive) ) 
     236                                if ( ! $this->delete($file . $filename, $recursive, $fileinfo['type']) ) 
    237237                                        $retval = false; 
    238238 
    239239                if ( file_exists($file) && ! @rmdir($file) ) 
  • wp-admin/includes/class-wp-filesystem-ftpext.php

     
    183183                $dir = $this->dirlist($file); 
    184184                return $dir[$file]['group']; 
    185185        } 
    186         function copy($source, $destination, $overwrite = false ) { 
     186        function copy($source, $destination, $overwrite = false, $mode = false) { 
    187187                if ( ! $overwrite && $this->exists($destination) ) 
    188188                        return false; 
    189189                $content = $this->get_contents($source); 
    190190                if ( false === $content) 
    191191                        return false; 
    192                 return $this->put_contents($destination, $content); 
     192                return $this->put_contents($destination, $content, $mode); 
    193193        } 
    194194        function move($source, $destination, $overwrite = false) { 
    195195                return ftp_rename($this->link, $source, $destination); 
    196196        } 
    197197 
    198         function delete($file, $recursive = false ) { 
     198        function delete($file, $recursive = false, $type = false) { 
    199199                if ( empty($file) ) 
    200200                        return false; 
    201                 if ( $this->is_file($file) ) 
     201                if ( 'f' == $type || $this->is_file($file) ) 
    202202                        return @ftp_delete($this->link, $file); 
    203203                if ( !$recursive ) 
    204204                        return @ftp_rmdir($this->link, $file); 
     
    206206                $filelist = $this->dirlist( trailingslashit($file) ); 
    207207                if ( !empty($filelist) ) 
    208208                        foreach ( $filelist as $delete_file ) 
    209                                 $this->delete( trailingslashit($file) . $delete_file['name'], $recursive); 
     209                                $this->delete( trailingslashit($file) . $delete_file['name'], $recursive, $delete_file['type'] ); 
    210210                return @ftp_rmdir($this->link, $file); 
    211211        } 
    212212 
  • wp-admin/includes/class-wp-filesystem-ssh2.php

     
    238238                return $grouparray['name']; 
    239239        } 
    240240 
    241         function copy($source, $destination, $overwrite = false ) { 
     241        function copy($source, $destination, $overwrite = false, $mode = false) { 
    242242                if ( ! $overwrite && $this->exists($destination) ) 
    243243                        return false; 
    244244                $content = $this->get_contents($source); 
    245245                if ( false === $content) 
    246246                        return false; 
    247                 return $this->put_contents($destination, $content); 
     247                return $this->put_contents($destination, $content, $mode); 
    248248        } 
    249249 
    250250        function move($source, $destination, $overwrite = false) { 
    251251                return @ssh2_sftp_rename($this->link, $source, $destination); 
    252252        } 
    253253 
    254         function delete($file, $recursive = false) { 
    255                 if ( $this->is_file($file) ) 
     254        function delete($file, $recursive = false, $type = false) { 
     255                if ( 'f' == $type || $this->is_file($file) ) 
    256256                        return ssh2_sftp_unlink($this->sftp_link, $file); 
    257257                if ( ! $recursive ) 
    258258                         return ssh2_sftp_rmdir($this->sftp_link, $file); 
    259259                $filelist = $this->dirlist($file); 
    260260                if ( is_array($filelist) ) { 
    261261                        foreach ( $filelist as $filename => $fileinfo) { 
    262                                 $this->delete($file . '/' . $filename, $recursive); 
     262                                $this->delete($file . '/' . $filename, $recursive, $fileinfo['type']); 
    263263                        } 
    264264                } 
    265265                return ssh2_sftp_rmdir($this->sftp_link, $file);