WordPress.org

Make WordPress Core

Ticket #10304: 10304.patch

File 10304.patch, 17.5 KB (added by azaozz, 9 years ago)
  • wp-admin/includes/class-wp-filesystem-base.php

     
    210210                        return trailingslashit($base . $last_path);
    211211                }
    212212                if ( $loop )
    213                         return false;//Prevent tihs function looping again.
     213                        return false; //Prevent tihs function looping again.
    214214                //As an extra last resort, Change back to / if the folder wasnt found. This comes into effect when the CWD is /home/user/ but WP is at /var/www/.... mainly dedicated setups.
    215215                return $this->search_for_folder($folder, '/', true);
    216216
     
    242242                        $info = 'd';
    243243                elseif (($perms & 0x2000) == 0x2000) // Character special
    244244                        $info = 'c';
    245                 elseif (($perms & 0x1000) == 0x1000)// FIFO pipe
     245                elseif (($perms & 0x1000) == 0x1000) // FIFO pipe
    246246                        $info = 'p';
    247247                else // Unknown
    248248                        $info = 'u';
  • wp-admin/includes/class-wp-filesystem-direct.php

     
    1515 * @uses WP_Filesystem_Base Extends class
    1616 */
    1717class WP_Filesystem_Direct extends WP_Filesystem_Base {
    18         var $permission = null;
    1918        var $errors = null;
     19        /**
     20         * constructor
     21         *
     22         * @param $arg mixed ingored argument
     23         */
    2024        function WP_Filesystem_Direct($arg) {
    2125                $this->method = 'direct';
    2226                $this->errors = new WP_Error();
    2327        }
     28        /**
     29         * connect filesystem.
     30         *
     31         * @return bool Returns true on success or false on failure (always true for WP_Filesystem_Direct).
     32         */
    2433        function connect() {
    2534                return true;
    2635        }
    27         function setDefaultPermissions($perm) {
    28                 $this->permission = $perm;
    29         }
     36        /**
     37         * Reads entire file into a string
     38         *
     39         * @param $file string Name of the file to read.
     40         * @return string|bool The function returns the read data or false on failure.
     41         */
    3042        function get_contents($file) {
    3143                return @file_get_contents($file);
    3244        }
     45        /**
     46         * Reads entire file into an array
     47         *
     48         * @param $file string Path to the file.
     49         * @return array|bool the file contents in an array or false on failure.
     50         */
    3351        function get_contents_array($file) {
    3452                return @file($file);
    3553        }
     54        /**
     55         * Write a string to a file
     56         *
     57         * @param $file string Path to the file where to write the data.
     58         * @param $contents string The data to write.
     59         * @param $mode int (optional) The file permissions as octal number, usually 0644.
     60         * @param $type string (optional) Specifies additional type of access you require to the file.
     61         * @return bool False upon failure.
     62         */
    3663        function put_contents($file, $contents, $mode = false, $type = '') {
    3764                if ( ! ($fp = @fopen($file, 'w' . $type)) )
    3865                        return false;
    3966                @fwrite($fp, $contents);
    4067                @fclose($fp);
    41                 $this->chmod($file,$mode);
     68                $this->chmod($file, $mode);
    4269                return true;
    4370        }
     71        /**
     72         * Gets the current working directory
     73         *
     74         * @return string|bool the current working directory on success, or false on failure.
     75         */
    4476        function cwd() {
    4577                return @getcwd();
    4678        }
     79        /**
     80         * Change directory
     81         *
     82         * @param $dir string The new current directory.
     83         * @return bool Returns true on success or false on failure.
     84         */
    4785        function chdir($dir) {
    4886                return @chdir($dir);
    4987        }
     88        /**
     89         * Changes file group
     90         *
     91         * @param $file string Path to the file.
     92         * @param $group mixed A group name or number.
     93         * @param $recursive bool (optional) If set True changes file group recursivly. Defaults to False.
     94         * @return bool Returns true on success or false on failure.
     95         */
    5096        function chgrp($file, $group, $recursive = false) {
    5197                if ( ! $this->exists($file) )
    5298                        return false;
     
    62108
    63109                return true;
    64110        }
     111        /**
     112         * Changes filesystem permissions
     113         *
     114         * @param $file string Path to the file.
     115         * @param $mode int (optional) The permissions as octal number, usually 0644 for files, 0755 for dirs.
     116         * @param $recursive bool (optional) If set True changes file group recursivly. Defaults to False.
     117         * @return bool Returns true on success or false on failure.
     118         */
    65119        function chmod($file, $mode = false, $recursive = false) {
    66120                if ( ! $this->exists($file) )
    67121                        return false;
    68122
    69123                if ( ! $mode ) {
    70                         if ( $this->permission )
    71                                 $mode = $this->permission;
    72                         elseif ( $this->is_file($file) )
     124                        if ( $this->is_file($file) )
    73125                                $mode = FS_CHMOD_FILE;
    74126                        elseif ( $this->is_dir($file) )
    75127                                $mode = FS_CHMOD_DIR;
     
    89141
    90142                return true;
    91143        }
     144        /**
     145         * Changes file owner
     146         *
     147         * @param $file string Path to the file.
     148         * @param $owner mixed A user name or number.
     149         * @param $recursive bool (optional) If set True changes file owner recursivly. Defaults to False.
     150         * @return bool Returns true on success or false on failure.
     151         */
    92152        function chown($file, $owner, $recursive = false) {
    93153                if ( ! $this->exists($file) )
    94154                        return false;
     
    98158                        return @chown($file, $owner);
    99159                //Is a directory, and we want recursive
    100160                $filelist = $this->dirlist($file);
    101                 foreach ($filelist as $filename){
     161                foreach ($filelist as $filename) {
    102162                        $this->chown($file . '/' . $filename, $owner, $recursive);
    103163                }
    104164                return true;
    105165        }
     166        /**
     167         * Gets file owner
     168         *
     169         * @param $file string Path to the file.
     170         * @return string Username of the user.
     171         */
    106172        function owner($file) {
    107173                $owneruid = @fileowner($file);
    108174                if ( ! $owneruid )
     
    112178                $ownerarray = posix_getpwuid($owneruid);
    113179                return $ownerarray['name'];
    114180        }
     181        /**
     182         * Gets file permissions
     183         *
     184         * FIXME does not handle errors in fileperms()
     185         *
     186         * @param $file string Path to the file.
     187         * @return string Mode of the file (last 4 digits).
     188         */
    115189        function getchmod($file) {
    116190                return substr(decoct(@fileperms($file)),3);
    117191        }
     
    133207
    134208        function move($source, $destination, $overwrite = false) {
    135209                //Possible to use rename()?
    136                 if ( $this->copy($source, $destination, $overwrite) && $this->exists($destination) ){
     210                if ( $this->copy($source, $destination, $overwrite) && $this->exists($destination) ) {
    137211                        $this->delete($source);
    138212                        return true;
    139213                } else {
     
    197271                return @filesize($file);
    198272        }
    199273
    200         function touch($file, $time = 0, $atime = 0){
     274        function touch($file, $time = 0, $atime = 0) {
    201275                if ($time == 0)
    202276                        $time = time();
    203277                if ($atime == 0)
     
    205279                return @touch($file, $time, $atime);
    206280        }
    207281
    208         function mkdir($path, $chmod = false, $chown = false, $chgrp = false){
     282        function mkdir($path, $chmod = false, $chown = false, $chgrp = false) {
     283                if ( ! $chmod )
     284                        $chmod = FS_CHMOD_DIR;
     285
    209286                if ( ! @mkdir($path) )
    210287                        return false;
    211288                $this->chmod($path, $chmod);
  • wp-admin/includes/class-wp-filesystem-ftpext.php

     
    2020        var $errors = null;
    2121        var $options = array();
    2222
    23         var $permission = null;
    24 
    2523        function WP_Filesystem_FTPext($opt='') {
    2624                $this->method = 'ftpext';
    2725                $this->errors = new WP_Error();
     
    8482                return true;
    8583        }
    8684
    87         function setDefaultPermissions($perm) {
    88                 $this->permission = $perm;
    89         }
    90 
    91         function get_contents($file, $type = '', $resumepos = 0 ){
    92                 if( empty($type) )
     85        function get_contents($file, $type = '', $resumepos = 0 ) {
     86                if ( empty($type) )
    9387                        $type = FTP_BINARY;
    9488
    9589                $temp = tmpfile();
    9690                if ( ! $temp )
    9791                        return false;
    9892
    99                 if( ! @ftp_fget($this->link, $temp, $file, $type, $resumepos) )
     93                if ( ! @ftp_fget($this->link, $temp, $file, $type, $resumepos) )
    10094                        return false;
    10195
    10296                fseek($temp, 0); //Skip back to the start of the file being written to
     
    112106                return explode("\n", $this->get_contents($file));
    113107        }
    114108        function put_contents($file, $contents, $type = '' ) {
    115                 if( empty($type) )
     109                if ( empty($type) )
    116110                        $type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII;
    117111
    118112                $temp = tmpfile();
     
    129123        }
    130124        function cwd() {
    131125                $cwd = @ftp_pwd($this->link);
    132                 if( $cwd )
     126                if ( $cwd )
    133127                        $cwd = trailingslashit($cwd);
    134128                return $cwd;
    135129        }
     
    140134                return false;
    141135        }
    142136        function chmod($file, $mode = false, $recursive = false) {
    143                 if( ! $mode )
    144                         $mode = $this->permission;
    145                 if( ! $mode )
    146                         return false;
    147137                if ( ! $this->exists($file) && ! $this->is_dir($file) )
    148138                        return false;
     139
     140                if ( ! $mode ) {
     141                        if ( $this->is_file($file) )
     142                                $mode = FS_CHMOD_FILE;
     143                        elseif ( $this->is_dir($file) )
     144                                $mode = FS_CHMOD_DIR;
     145                        else
     146                                return false;   
     147                }
     148
    149149                if ( ! $recursive || ! $this->is_dir($file) ) {
    150150                        if ( ! function_exists('ftp_chmod') )
    151151                                return @ftp_site($this->link, sprintf('CHMOD %o %s', $mode, $file));
     
    153153                }
    154154                //Is a directory, and we want recursive
    155155                $filelist = $this->dirlist($file);
    156                 foreach($filelist as $filename){
     156                foreach ( $filelist as $filename ) {
    157157                        $this->chmod($file . '/' . $filename, $mode, $recursive);
    158158                }
    159159                return true;
     
    174174                return $dir[$file]['group'];
    175175        }
    176176        function copy($source, $destination, $overwrite = false ) {
    177                 if( ! $overwrite && $this->exists($destination) )
     177                if ( ! $overwrite && $this->exists($destination) )
    178178                        return false;
    179179                $content = $this->get_contents($source);
    180                 if( false === $content)
     180                if ( false === $content)
    181181                        return false;
    182182                return $this->put_contents($destination, $content);
    183183        }
     
    210210        function is_dir($path) {
    211211                $cwd = $this->cwd();
    212212                $result = @ftp_chdir($this->link, trailingslashit($path) );
    213                 if( $result && $path == $this->cwd() || $this->cwd() != $cwd ) {
     213                if ( $result && $path == $this->cwd() || $this->cwd() != $cwd ) {
    214214                        @ftp_chdir($this->link, $cwd);
    215215                        return true;
    216216                }
     
    237237                return false;
    238238        }
    239239        function mkdir($path, $chmod = false, $chown = false, $chgrp = false) {
    240                 if( !ftp_mkdir($this->link, $path) )
     240                if  ( !ftp_mkdir($this->link, $path) )
    241241                        return false;
    242                 if( $chmod )
    243                         $this->chmod($path, $chmod);
    244                 if( $chown )
     242                if ( ! $chmod )
     243                        $chmod = FS_CHMOD_DIR;
     244                $this->chmod($path, $chmod);
     245                if ( $chown )
    245246                        $this->chown($path, $chown);
    246                 if( $chgrp )
     247                if ( $chgrp )
    247248                        $this->chgrp($path, $chgrp);
    248249                return true;
    249250        }
     
    256257                if ( is_null($is_windows) )
    257258                        $is_windows = strpos( strtolower(ftp_systype($this->link)), 'win') !== false;
    258259
    259                 if ($is_windows && preg_match("/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|<DIR>) +(.+)/", $line, $lucifer)) {
     260                if ( $is_windows && preg_match("/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|<DIR>) +(.+)/", $line, $lucifer) ) {
    260261                        $b = array();
    261                         if ($lucifer[3]<70) { $lucifer[3] +=2000; } else { $lucifer[3]+=1900; } // 4digit year fix
     262                        if ( $lucifer[3] < 70 ) { $lucifer[3] +=2000; } else { $lucifer[3] += 1900; } // 4digit year fix
    262263                        $b['isdir'] = ($lucifer[7]=="<DIR>");
    263264                        if ( $b['isdir'] )
    264265                                $b['type'] = 'd';
     
    317318        }
    318319
    319320        function dirlist($path = '.', $incdot = false, $recursive = false) {
    320                 if( $this->is_file($path) ) {
     321                if ( $this->is_file($path) ) {
    321322                        $limitFile = basename($path);
    322323                        $path = dirname($path) . '/';
    323324                } else {
     
    352353                        if ( 'd' == $struc['type'] ) {
    353354                                $struc['files'] = array();
    354355
    355                                 if ( $incdot ){
     356                                if ( $incdot ) {
    356357                                        //We're including the doted starts
    357                                         if( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder
     358                                        if ( '.' != $struc['name'] && '..' != $struc['name'] ) { //Ok, It isnt a special folder
    358359                                                if ($recursive)
    359360                                                        $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $incdot, $recursive);
    360361                                        }
     
    369370                return $ret;
    370371        }
    371372
    372         function __destruct(){
    373                 if( $this->link )
     373        function __destruct() {
     374                if ( $this->link )
    374375                        ftp_close($this->link);
    375376        }
    376377}
  • wp-admin/includes/class-wp-filesystem-ftpsockets.php

     
    2020        var $errors = null;
    2121        var $options = array();
    2222
    23         var $permission = null;
    24 
    2523        function WP_Filesystem_ftpsockets($opt = '') {
    2624                $this->method = 'ftpsockets';
    2725                $this->errors = new WP_Error();
    2826
    2927                //Check if possible to use ftp functions.
    30                 if( ! @include_once ABSPATH . 'wp-admin/includes/class-ftp.php' )
     28                if ( ! @include_once ABSPATH . 'wp-admin/includes/class-ftp.php' )
    3129                                return false;
    3230                $this->ftp = new ftp();
    3331
     
    8280                return true;
    8381        }
    8482
    85         function setDefaultPermissions($perm) {
    86                 $this->permission = $perm;
    87         }
    88 
    8983        function get_contents($file, $type = '', $resumepos = 0) {
    90                 if( ! $this->exists($file) )
     84                if ( ! $this->exists($file) )
    9185                        return false;
    9286
    93                 if( empty($type) )
     87                if ( empty($type) )
    9488                        $type = FTP_AUTOASCII;
    9589                $this->ftp->SetType($type);
    9690
     
    121115        }
    122116
    123117        function put_contents($file, $contents, $type = '' ) {
    124                 if( empty($type) )
     118                if ( empty($type) )
    125119                        $type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII;
    126120
    127121                $this->ftp->SetType($type);
     
    144138
    145139        function cwd() {
    146140                $cwd = $this->ftp->pwd();
    147                 if( $cwd )
     141                if ( $cwd )
    148142                        $cwd = trailingslashit($cwd);
    149143                return $cwd;
    150144        }
     
    158152        }
    159153
    160154        function chmod($file, $mode = false, $recursive = false ) {
    161                 if( ! $mode )
    162                         $mode = $this->permission;
    163                 if( ! $mode )
    164                         return false;
    165                 //if( ! $this->exists($file) )
    166                 //      return false;
    167                 if( ! $recursive || ! $this->is_dir($file) ) {
    168                         return $this->ftp->chmod($file,$mode);
     155
     156                if ( ! $mode ) {
     157                        if ( $this->is_file($file) )
     158                                $mode = FS_CHMOD_FILE;
     159                        elseif ( $this->is_dir($file) )
     160                                $mode = FS_CHMOD_DIR;
     161                        else
     162                                return false;   
    169163                }
     164
     165                if ( ! $recursive || ! $this->is_dir($file) ) {
     166                        return $this->ftp->chmod($file, $mode);
     167                }
    170168                //Is a directory, and we want recursive
    171169                $filelist = $this->dirlist($file);
    172170                foreach($filelist as $filename){
     
    195193        }
    196194
    197195        function copy($source, $destination, $overwrite = false ) {
    198                 if( ! $overwrite && $this->exists($destination) )
     196                if ( ! $overwrite && $this->exists($destination) )
    199197                        return false;
    200198
    201199                $content = $this->get_contents($source);
     
    264262        }
    265263
    266264        function mkdir($path, $chmod = false, $chown = false, $chgrp = false ) {
    267                 if( ! $this->ftp->mkdir($path) )
     265                if ( ! $this->ftp->mkdir($path) )
    268266                        return false;
    269                 if( $chmod )
    270                         $this->chmod($path, $chmod);
    271                 if( $chown )
     267                if ( ! $chmod )
     268                        $chmod = FS_CHMOD_DIR;
     269                $this->chmod($path, $chmod);
     270                if ( $chown )
    272271                        $this->chown($path, $chown);
    273                 if( $chgrp )
     272                if ( $chgrp )
    274273                        $this->chgrp($path, $chgrp);
    275274                return true;
    276275        }
    277276
    278277        function rmdir($path, $recursive = false ) {
    279                 if( ! $recursive )
     278                if ( ! $recursive )
    280279                        return $this->ftp->rmdir($path);
    281280
    282281                return $this->ftp->mdel($path);
    283282        }
    284283
    285284        function dirlist($path = '.', $incdot = false, $recursive = false ) {
    286                 if( $this->is_file($path) ) {
     285                if ( $this->is_file($path) ) {
    287286                        $limitFile = basename($path);
    288287                        $path = dirname($path) . '/';
    289288                } else {
     
    291290                }
    292291
    293292                $list = $this->ftp->dirlist($path);
    294                 if( ! $list )
     293                if ( ! $list )
    295294                        return false;
    296                 if( empty($list) )
     295                if ( empty($list) )
    297296                        return array();
    298297
    299298                $ret = array();
     
    304303
    305304                                if ( $incdot ){
    306305                                        //We're including the doted starts
    307                                         if( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder
     306                                        if ( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder
    308307                                                if ($recursive)
    309308                                                        $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $incdot, $recursive);
    310309                                        }
  • wp-admin/includes/class-wp-filesystem-ssh2.php

     
    5656        var $errors = array();
    5757        var $options = array();
    5858
    59         var $permission = 0644;
    60 
    6159        function WP_Filesystem_SSH2($opt='') {
    6260                $this->method = 'ssh2';
    6361                $this->errors = new WP_Error();
     
    160158                return false;
    161159        }
    162160
    163         function setDefaultPermissions($perm) {
    164                 $this->debug("setDefaultPermissions();");
    165                 if ( $perm )
    166                         $this->permission = $perm;
    167         }
    168 
    169161        function get_contents($file, $type = '', $resumepos = 0 ) {
    170162                $file = ltrim($file, '/');
    171163                return file_get_contents('ssh2.sftp://' . $this->sftp_link . '/' . $file);
     
    201193        }
    202194
    203195        function chmod($file, $mode = false, $recursive = false) {
    204                 if( ! $mode )
    205                         $mode = $this->permission;
    206                 if( ! $mode )
    207                         return false;
    208196                if ( ! $this->exists($file) )
    209197                        return false;
     198
     199                if ( ! $mode ) {
     200                        if ( $this->is_file($file) )
     201                                $mode = FS_CHMOD_FILE;
     202                        elseif ( $this->is_dir($file) )
     203                                $mode = FS_CHMOD_DIR;
     204                        else
     205                                return false;   
     206                }
     207
    210208                if ( ! $recursive || ! $this->is_dir($file) )
    211209                        return $this->run_command(sprintf('chmod %o %s', $mode, escapeshellarg($file)), true);
    212210                return $this->run_command(sprintf('chmod -R %o %s', $mode, escapeshellarg($file)), true);
     
    315313                //Not implmented.
    316314        }
    317315
    318         function mkdir($path, $chmod = null, $chown = false, $chgrp = false) {
     316        function mkdir($path, $chmod = false, $chown = false, $chgrp = false) {
    319317                $path = untrailingslashit($path);
    320                 $chmod = !empty($chmod) ? $chmod : $this->permission;
     318                if ( ! $chmod )
     319                        $chmod = FS_CHMOD_DIR;
    321320                if ( ! ssh2_sftp_mkdir($this->sftp_link, $path, $chmod, true) )
    322321                        return false;
    323322                if ( $chown )