web/wp-admin/includes/class-wp-filesystem-ftpsockets.php
changeset 194 32102edaa81b
parent 136 bde1974c263b
child 204 09a1c134465b
--- a/web/wp-admin/includes/class-wp-filesystem-ftpsockets.php	Thu Sep 16 15:45:36 2010 +0000
+++ b/web/wp-admin/includes/class-wp-filesystem-ftpsockets.php	Mon Nov 19 18:26:13 2012 +0100
@@ -19,7 +19,7 @@
 	var $errors = null;
 	var $options = array();
 
-	function WP_Filesystem_ftpsockets($opt = '') {
+	function __construct($opt = '') {
 		$this->method = 'ftpsockets';
 		$this->errors = new WP_Error();
 
@@ -39,7 +39,7 @@
 		else
 			$this->options['hostname'] = $opt['hostname'];
 
-		if ( isset($opt['base']) && ! empty($opt['base']) )
+		if ( ! empty($opt['base']) )
 			$this->wp_base = $opt['base'];
 
 		// Check if the options provided are OK.
@@ -115,14 +115,9 @@
 		return explode("\n", $this->get_contents($file) );
 	}
 
-	function put_contents($file, $contents, $type = '' ) {
-		if ( empty($type) )
-			$type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII;
-
-		$this->ftp->SetType($type);
-
+	function put_contents($file, $contents, $mode = false ) {
 		$temp = wp_tempnam( $file );
-		if ( ! $temphandle = fopen($temp, 'w+') ) {
+		if ( ! $temphandle = @fopen($temp, 'w+') ) {
 			unlink($temp);
 			return false;
 		}
@@ -130,10 +125,16 @@
 		fwrite($temphandle, $contents);
 		fseek($temphandle, 0); //Skip back to the start of the file being written to
 
+		$type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII;
+		$this->ftp->SetType($type);
+
 		$ret = $this->ftp->fput($file, $temphandle);
 
 		fclose($temphandle);
 		unlink($temp);
+
+		$this->chmod($file, $mode);
+
 		return $ret;
 	}
 
@@ -153,7 +154,6 @@
 	}
 
 	function chmod($file, $mode = false, $recursive = false ) {
-
 		if ( ! $mode ) {
 			if ( $this->is_file($file) )
 				$mode = FS_CHMOD_FILE;
@@ -163,16 +163,15 @@
 				return false;
 		}
 
-		if ( ! $recursive || ! $this->is_dir($file) ) {
-			return $this->ftp->chmod($file, $mode);
+		// chmod any sub-objects if recursive.
+		if ( $recursive && $this->is_dir($file) ) {
+			$filelist = $this->dirlist($file);
+			foreach ( (array)$filelist as $filename => $filemeta )
+				$this->chmod($file . '/' . $filename, $mode, $recursive);
 		}
 
-		//Is a directory, and we want recursive
-		$filelist = $this->dirlist($file);
-		foreach ( $filelist as $filename )
-			$this->chmod($file . '/' . $filename, $mode, $recursive);
-
-		return true;
+		// chmod the file or directory
+		return $this->ftp->chmod($file, $mode);
 	}
 
 	function chown($file, $owner, $recursive = false ) {
@@ -194,7 +193,7 @@
 		return $dir[$file]['group'];
 	}
 
-	function copy($source, $destination, $overwrite = false ) {
+	function copy($source, $destination, $overwrite = false, $mode = false) {
 		if ( ! $overwrite && $this->exists($destination) )
 			return false;
 
@@ -202,17 +201,17 @@
 		if ( false === $content )
 			return false;
 
-		return $this->put_contents($destination, $content);
+		return $this->put_contents($destination, $content, $mode);
 	}
 
 	function move($source, $destination, $overwrite = false ) {
 		return $this->ftp->rename($source, $destination);
 	}
 
-	function delete($file, $recursive = false ) {
+	function delete($file, $recursive = false, $type = false) {
 		if ( empty($file) )
 			return false;
-		if ( $this->is_file($file) )
+		if ( 'f' == $type || $this->is_file($file) )
 			return $this->ftp->delete($file);
 		if ( !$recursive )
 			return $this->ftp->rmdir($file);
@@ -225,7 +224,11 @@
 	}
 
 	function is_file($file) {
-		return $this->is_dir($file) ? false : true;
+		if ( $this->is_dir($file) )
+			return false;
+		if ( $this->exists($file) )
+			return true;
+		return false;
 	}
 
 	function is_dir($path) {
@@ -264,6 +267,10 @@
 	}
 
 	function mkdir($path, $chmod = false, $chown = false, $chgrp = false ) {
+		$path = untrailingslashit($path);
+		if ( empty($path) )
+			return false;
+
 		if ( ! $this->ftp->mkdir($path) )
 			return false;
 		if ( ! $chmod )
@@ -277,10 +284,7 @@
 	}
 
 	function rmdir($path, $recursive = false ) {
-		if ( ! $recursive )
-			return $this->ftp->rmdir($path);
-
-		return $this->ftp->mdel($path);
+		$this->delete($path, $recursive);
 	}
 
 	function dirlist($path = '.', $include_hidden = true, $recursive = false ) {
@@ -292,7 +296,7 @@
 		}
 
 		$list = $this->ftp->dirlist($path);
-		if ( ! $list )
+		if ( empty($list) && !$this->exists($path) )
 			return false;
 
 		$ret = array();
@@ -323,5 +327,3 @@
 		$this->ftp->quit();
 	}
 }
-
-?>