WordPress.org

Make WordPress Core

Ticket #10913: 10913.diff

File 10913.diff, 6.6 KB (added by aldenta, 7 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);