X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/76aea3697c6043c1613370f172395b4f65ee71f0..refs/tags/wordpress-2.8.2:/wp-admin/includes/file.php diff --git a/wp-admin/includes/file.php b/wp-admin/includes/file.php index 349feb2e..5cd7a454 100644 --- a/wp-admin/includes/file.php +++ b/wp-admin/includes/file.php @@ -1,30 +1,78 @@ __( 'Main Index Template' ), 'style.css' => __( 'Stylesheet' ), 'rtl.css' => __( 'RTL Stylesheet' ), 'comments.php' => __( 'Comments' ), 'comments-popup.php' => __( 'Popup Comments' ), 'footer.php' => __( 'Footer' ), 'header.php' => __( 'Header' ), 'sidebar.php' => __( 'Sidebar' ), 'archive.php' => __( 'Archives' ), 'category.php' => __( 'Category Template' ), 'page.php' => __( 'Page Template' ), 'search.php' => __( 'Search Results' ), 'searchform.php' => __( 'Search Form' ), 'single.php' => __( 'Single Post' ), '404.php' => __( '404 Template' ), 'link.php' => __( 'Links Template' ), 'functions.php' => __( 'Theme Functions' ), 'attachment.php' => __( 'Attachment Template' ), 'my-hacks.php' => __( 'my-hacks.php (legacy hacks support)' ), '.htaccess' => __( '.htaccess (for rewrite rules )' ), +/** + * File contains all the administration image manipulation functions. + * + * @package WordPress + * @subpackage Administration + */ + +/** The descriptions for theme files. */ +$wp_file_descriptions = array ( + 'index.php' => __( 'Main Index Template' ), + 'style.css' => __( 'Stylesheet' ), + 'rtl.css' => __( 'RTL Stylesheet' ), + 'comments.php' => __( 'Comments' ), + 'comments-popup.php' => __( 'Popup Comments' ), + 'footer.php' => __( 'Footer' ), + 'header.php' => __( 'Header' ), + 'sidebar.php' => __( 'Sidebar' ), + 'archive.php' => __( 'Archives' ), + 'category.php' => __( 'Category Template' ), + 'page.php' => __( 'Page Template' ), + 'search.php' => __( 'Search Results' ), + 'searchform.php' => __( 'Search Form' ), + 'single.php' => __( 'Single Post' ), + '404.php' => __( '404 Template' ), + 'link.php' => __( 'Links Template' ), + 'functions.php' => __( 'Theme Functions' ), + 'attachment.php' => __( 'Attachment Template' ), + 'image.php' => __('Image Attachment Template'), + 'video.php' => __('Video Attachment Template'), + 'audio.php' => __('Audio Attachment Template'), + 'application.php' => __('Application Attachment Template'), + 'my-hacks.php' => __( 'my-hacks.php (legacy hacks support)' ), + '.htaccess' => __( '.htaccess (for rewrite rules )' ), // Deprecated files 'wp-layout.css' => __( 'Stylesheet' ), 'wp-comments.php' => __( 'Comments Template' ), 'wp-comments-popup.php' => __( 'Popup Comments Template' )); + +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param unknown_type $file + * @return unknown + */ function get_file_description( $file ) { global $wp_file_descriptions; if ( isset( $wp_file_descriptions[basename( $file )] ) ) { return $wp_file_descriptions[basename( $file )]; } - elseif ( file_exists( ABSPATH . $file ) && is_file( ABSPATH . $file ) ) { - $template_data = implode( '', file( ABSPATH . $file ) ); - if ( preg_match( "|Template Name:(.*)|i", $template_data, $name )) - return $name[1]; + elseif ( file_exists( WP_CONTENT_DIR . $file ) && is_file( WP_CONTENT_DIR . $file ) ) { + $template_data = implode( '', file( WP_CONTENT_DIR . $file ) ); + if ( preg_match( '|Template Name:(.*)$|mi', $template_data, $name )) + return _cleanup_header_comment($name[1]) . ' Page Template'; } return basename( $file ); } +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @return unknown + */ function get_home_path() { $home = get_option( 'home' ); - if ( $home != '' && $home != get_option( 'siteurl' ) ) { - $home_path = parse_url( $home ); - $home_path = $home_path['path']; - $root = str_replace( $_SERVER["PHP_SELF"], '', $_SERVER["SCRIPT_FILENAME"] ); - $home_path = trailingslashit( $root.$home_path ); + $siteurl = get_option( 'siteurl' ); + if ( $home != '' && $home != $siteurl ) { + $wp_path_rel_to_home = str_replace($home, '', $siteurl); /* $siteurl - $home */ + $pos = strpos($_SERVER["SCRIPT_FILENAME"], $wp_path_rel_to_home); + $home_path = substr($_SERVER["SCRIPT_FILENAME"], 0, $pos); + $home_path = trailingslashit( $home_path ); } else { $home_path = ABSPATH; } @@ -32,6 +80,14 @@ function get_home_path() { return $home_path; } +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param unknown_type $file + * @return unknown + */ function get_real_file_to_edit( $file ) { if ('index.php' == $file || '.htaccess' == $file ) { $real_file = get_home_path() . $file; @@ -41,8 +97,16 @@ function get_real_file_to_edit( $file ) { return $real_file; } -//$folder = Full path to folder -//$levels = Levels of folders to follow, Default: 100 (PHP Loop limit) + +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param string $folder Optional. Full path to folder + * @param int $levels Optional. Levels of folders to follow, Default: 100 (PHP Loop limit). + * @return bool|array + */ function list_files( $folder = '', $levels = 100 ) { if( empty($folder) ) return false; @@ -70,6 +134,13 @@ function list_files( $folder = '', $levels = 100 ) { return $files; } +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @return unknown + */ function get_temp_dir() { if ( defined('WP_TEMP_DIR') ) return trailingslashit(WP_TEMP_DIR); @@ -84,6 +155,15 @@ function get_temp_dir() { return '/tmp/'; } +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param unknown_type $filename + * @param unknown_type $dir + * @return unknown + */ function wp_tempnam($filename = '', $dir = ''){ if ( empty($dir) ) $dir = get_temp_dir(); @@ -96,6 +176,15 @@ function wp_tempnam($filename = '', $dir = ''){ return $filename; } +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param unknown_type $file + * @param unknown_type $allowed_files + * @return unknown + */ function validate_file_to_edit( $file, $allowed_files = '' ) { $file = stripslashes( $file ); @@ -106,7 +195,7 @@ function validate_file_to_edit( $file, $allowed_files = '' ) { switch ( $code ) { case 1 : - wp_die( __('Sorry, can’t edit files with ".." in the name. If you are trying to edit a file in your WordPress home directory, you can just type the name of the file in.' )); + wp_die( __('Sorry, can’t edit files with “..” in the name. If you are trying to edit a file in your WordPress home directory, you can just type the name of the file in.' )); case 2 : wp_die( __('Sorry, can’t call files with their real path.' )); @@ -116,12 +205,16 @@ function validate_file_to_edit( $file, $allowed_files = '' ) { } } -// array wp_handle_upload ( array &file [, array overrides] ) -// file: reference to a single element of $_FILES. Call the function once for each uploaded file. -// overrides: an associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ). -// On success, returns an associative array of file attributes. -// On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ). -function wp_handle_upload( &$file, $overrides = false ) { +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param array $file Reference to a single element of $_FILES. Call the function once for each uploaded file. + * @param array $overrides Optional. An associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ). + * @return array On success, returns an associative array of file attributes. On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ). + */ +function wp_handle_upload( &$file, $overrides = false, $time = null ) { // The default error handler. if (! function_exists( 'wp_handle_upload_error' ) ) { function wp_handle_upload_error( &$file, $message ) { @@ -132,6 +225,9 @@ function wp_handle_upload( &$file, $overrides = false ) { // You may define your own function and pass the name in $overrides['upload_error_handler'] $upload_error_handler = 'wp_handle_upload_error'; + // You may define your own function and pass the name in $overrides['unique_filename_callback'] + $unique_filename_callback = null; + // $_POST['action'] must be set and its value must equal $overrides['action'] or this: $action = 'wp_handle_upload'; @@ -141,8 +237,10 @@ function wp_handle_upload( &$file, $overrides = false ) { __( "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." ), __( "The uploaded file was only partially uploaded." ), __( "No file was uploaded." ), + '', __( "Missing a temporary folder." ), - __( "Failed to write file to disk." )); + __( "Failed to write file to disk." ), + __( "File upload stopped by extension." )); // All tests are on by default. Most can be turned off by $override[{test_name}] = false; $test_form = true; @@ -186,10 +284,12 @@ function wp_handle_upload( &$file, $overrides = false ) { if ( !$type ) $type = $file['type']; + } else { + $type = ''; } // A writable uploads dir will pass this test. Again, there's no point overriding this one. - if ( ! ( ( $uploads = wp_upload_dir() ) && false === $uploads['error'] ) ) + if ( ! ( ( $uploads = wp_upload_dir($time) ) && false === $uploads['error'] ) ) return $upload_error_handler( $file, $uploads['error'] ); $filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback ); @@ -208,11 +308,20 @@ function wp_handle_upload( &$file, $overrides = false ) { // Compute the URL $url = $uploads['url'] . "/$filename"; - $return = apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ) ); - - return $return; + return apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ) ); } -// Pass this function an array similar to that of a $_FILES POST array. + +/** + * {@internal Missing Short Description}} + * + * Pass this function an array similar to that of a $_FILES POST array. + * + * @since unknown + * + * @param unknown_type $file + * @param unknown_type $overrides + * @return unknown + */ function wp_handle_sideload( &$file, $overrides = false ) { // The default error handler. if (! function_exists( 'wp_handle_upload_error' ) ) { @@ -224,17 +333,22 @@ function wp_handle_sideload( &$file, $overrides = false ) { // You may define your own function and pass the name in $overrides['upload_error_handler'] $upload_error_handler = 'wp_handle_upload_error'; + // You may define your own function and pass the name in $overrides['unique_filename_callback'] + $unique_filename_callback = null; + // $_POST['action'] must be set and its value must equal $overrides['action'] or this: $action = 'wp_handle_sideload'; // Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error']. $upload_error_strings = array( false, - __( "The file exceeds the upload_max_filesize directive in php.ini." ), - __( "The file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." ), - __( "The file was only partially uploaded." ), - __( "No file was sent." ), + __( "The uploaded file exceeds the upload_max_filesize directive in php.ini." ), + __( "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." ), + __( "The uploaded file was only partially uploaded." ), + __( "No file was uploaded." ), + '', __( "Missing a temporary folder." ), - __( "Failed to write file to disk." )); + __( "Failed to write file to disk." ), + __( "File upload stopped by extension." )); // All tests are on by default. Most can be turned off by $override[{test_name}] = false; $test_form = true; @@ -285,11 +399,11 @@ function wp_handle_sideload( &$file, $overrides = false ) { return $upload_error_handler( $file, $uploads['error'] ); $filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback ); - + // Strip the query strings. $filename = str_replace('?','-', $filename); $filename = str_replace('&','-', $filename); - + // Move the file to the uploads dir $new_file = $uploads['path'] . "/$filename"; if ( false === @ rename( $file['tmp_name'], $new_file ) ) { @@ -310,45 +424,65 @@ function wp_handle_sideload( &$file, $overrides = false ) { } /** -* Downloads a url to a local file using the Snoopy HTTP Class -* -* @param string $url the URL of the file to download -* @return mixed WP_Error on failure, string Filename on success. -*/ + * Downloads a url to a local file using the Snoopy HTTP Class. + * + * @since unknown + * @todo Transition over to using the new HTTP Request API (jacob). + * + * @param string $url the URL of the file to download + * @return mixed WP_Error on failure, string Filename on success. + */ function download_url( $url ) { //WARNING: The file is not automatically deleted, The script must unlink() the file. - if( ! $url ) + if ( ! $url ) return new WP_Error('http_no_url', __('Invalid URL Provided')); $tmpfname = wp_tempnam($url); - if( ! $tmpfname ) + if ( ! $tmpfname ) return new WP_Error('http_no_file', __('Could not create Temporary file')); - $handle = @fopen($tmpfname, 'w'); - if( ! $handle ) + $handle = @fopen($tmpfname, 'wb'); + if ( ! $handle ) return new WP_Error('http_no_file', __('Could not create Temporary file')); - require_once( ABSPATH . 'wp-includes/class-snoopy.php' ); - $snoopy = new Snoopy(); - $snoopy->fetch($url); + $response = wp_remote_get($url, array('timeout' => 60)); - if( $snoopy->status != '200' ){ + if ( is_wp_error($response) ) { fclose($handle); unlink($tmpfname); - return new WP_Error('http_404', trim($snoopy->response_code)); + return $response; } - fwrite($handle, $snoopy->results); + + if ( $response['response']['code'] != '200' ){ + fclose($handle); + unlink($tmpfname); + return new WP_Error('http_404', trim($response['response']['message'])); + } + + fwrite($handle, $response['body']); fclose($handle); return $tmpfname; } +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param unknown_type $file + * @param unknown_type $to + * @return unknown + */ function unzip_file($file, $to) { global $wp_filesystem; if ( ! $wp_filesystem || !is_object($wp_filesystem) ) return new WP_Error('fs_unavailable', __('Could not access filesystem.')); + // Unzip uses a lot of memory + @ini_set('memory_limit', '256M'); + $fs =& $wp_filesystem; require_once(ABSPATH . 'wp-admin/includes/class-pclzip.php'); @@ -362,37 +496,56 @@ function unzip_file($file, $to) { if ( 0 == count($archive_files) ) return new WP_Error('empty_archive', __('Empty archive')); - $to = trailingslashit($to); - $path = explode('/', $to); - $tmppath = ''; - for ( $j = 0; $j < count($path) - 1; $j++ ) { - $tmppath .= $path[$j] . '/'; - if ( ! $fs->is_dir($tmppath) ) - $fs->mkdir($tmppath, 0755); + $path = explode('/', untrailingslashit($to)); + for ( $i = count($path); $i > 0; $i-- ) { //>0 = first element is empty allways for paths starting with '/' + $tmppath = implode('/', array_slice($path, 0, $i) ); + if ( $fs->is_dir($tmppath) ) { //Found the highest folder that exists, Create from here(ie +1) + for ( $i = $i + 1; $i <= count($path); $i++ ) { + $tmppath = implode('/', array_slice($path, 0, $i) ); + if ( ! $fs->mkdir($tmppath, FS_CHMOD_DIR) ) + return new WP_Error('mkdir_failed', __('Could not create directory'), $tmppath); + } + break; //Exit main for loop + } } + $to = trailingslashit($to); foreach ($archive_files as $file) { - $path = explode('/', $file['filename']); - $tmppath = ''; - - // Loop through each of the items and check that the folder exists. - for ( $j = 0; $j < count($path) - 1; $j++ ) { - $tmppath .= $path[$j] . '/'; - if ( ! $fs->is_dir($to . $tmppath) ) - if ( !$fs->mkdir($to . $tmppath, 0755) ) - return new WP_Error('mkdir_failed', __('Could not create directory'), $to . $tmppath); + $path = $file['folder'] ? $file['filename'] : dirname($file['filename']); + $path = explode('/', $path); + for ( $i = count($path); $i >= 0; $i-- ) { //>=0 as the first element contains data + if ( empty($path[$i]) ) + continue; + $tmppath = $to . implode('/', array_slice($path, 0, $i) ); + if ( $fs->is_dir($tmppath) ) {//Found the highest folder that exists, Create from here + for ( $i = $i + 1; $i <= count($path); $i++ ) { //< count() no file component please. + $tmppath = $to . implode('/', array_slice($path, 0, $i) ); + if ( ! $fs->is_dir($tmppath) && ! $fs->mkdir($tmppath, FS_CHMOD_DIR) ) + return new WP_Error('mkdir_failed', __('Could not create directory'), $tmppath); + } + break; //Exit main for loop + } } // We've made sure the folders are there, so let's extract the file now: - if ( ! $file['folder'] ) + if ( ! $file['folder'] ) { if ( !$fs->put_contents( $to . $file['filename'], $file['content']) ) return new WP_Error('copy_failed', __('Could not copy file'), $to . $file['filename']); - $fs->chmod($to . $file['filename'], 0644); + $fs->chmod($to . $file['filename'], FS_CHMOD_FILE); + } } - return true; } +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param unknown_type $from + * @param unknown_type $to + * @return unknown + */ function copy_dir($from, $to) { global $wp_filesystem; @@ -403,12 +556,18 @@ function copy_dir($from, $to) { foreach ( (array) $dirlist as $filename => $fileinfo ) { if ( 'f' == $fileinfo['type'] ) { - if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true) ) - return new WP_Error('copy_failed', __('Could not copy file'), $to . $filename); - $wp_filesystem->chmod($to . $filename, 0644); + if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true) ) { + // If copy failed, chmod file to 0644 and try again. + $wp_filesystem->chmod($to . $filename, 0644); + if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true) ) + return new WP_Error('copy_failed', __('Could not copy file'), $to . $filename); + } + $wp_filesystem->chmod($to . $filename, FS_CHMOD_FILE); } elseif ( 'd' == $fileinfo['type'] ) { - if ( !$wp_filesystem->mkdir($to . $filename, 0755) ) - return new WP_Error('mkdir_failed', __('Could not create directory'), $to . $filename); + if ( !$wp_filesystem->is_dir($to . $filename) ) { + if ( !$wp_filesystem->mkdir($to . $filename, FS_CHMOD_DIR) ) + return new WP_Error('mkdir_failed', __('Could not create directory'), $to . $filename); + } $result = copy_dir($from . $filename, $to . $filename); if ( is_wp_error($result) ) return $result; @@ -416,46 +575,233 @@ function copy_dir($from, $to) { } } -function WP_Filesystem( $args = false ) { +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param unknown_type $args + * @return unknown + */ +function WP_Filesystem( $args = false, $context = false ) { global $wp_filesystem; require_once(ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php'); - $method = get_filesystem_method(); + $method = get_filesystem_method($args, $context); if ( ! $method ) return false; - $abstraction_file = apply_filters('filesystem_method_file', ABSPATH . 'wp-admin/includes/class-wp-filesystem-'.$method.'.php', $method); - if( ! file_exists($abstraction_file) ) - return; - - require_once($abstraction_file); + if ( ! class_exists("WP_Filesystem_$method") ) { + $abstraction_file = apply_filters('filesystem_method_file', ABSPATH . 'wp-admin/includes/class-wp-filesystem-' . $method . '.php', $method); + if( ! file_exists($abstraction_file) ) + return; + + require_once($abstraction_file); + } $method = "WP_Filesystem_$method"; $wp_filesystem = new $method($args); - if ( $wp_filesystem->errors->get_error_code() ) + if ( is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code() ) return false; if ( !$wp_filesystem->connect() ) return false; //There was an erorr connecting to the server. + // Set the permission constants if not already set. + if ( ! defined('FS_CHMOD_DIR') ) + define('FS_CHMOD_DIR', 0755 ); + if ( ! defined('FS_CHMOD_FILE') ) + define('FS_CHMOD_FILE', 0644 ); + return true; } -function get_filesystem_method() { - $method = false; - if( function_exists('getmyuid') && function_exists('fileowner') ){ - $temp_file = wp_tempnam(); - if ( getmyuid() == fileowner($temp_file) ) - $method = 'direct'; - unlink($temp_file); - } +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param unknown_type $args + * @param string $context Full path to the directory that is tested for being writable. + * @return unknown + */ +function get_filesystem_method($args = array(), $context = false) { + $method = defined('FS_METHOD') ? FS_METHOD : false; //Please ensure that this is either 'direct', 'ssh', 'ftpext' or 'ftpsockets' + + if( ! $method && function_exists('getmyuid') && function_exists('fileowner') ){ + if ( !$context ) + $context = WP_CONTENT_DIR; + $context = trailingslashit($context); + $temp_file_name = $context . '.write-test-' . time(); + $temp_handle = @fopen($temp_file_name, 'w'); + if ( $temp_handle ) { + if ( getmyuid() == fileowner($temp_file_name) ) + $method = 'direct'; + @fclose($temp_handle); + unlink($temp_file_name); + } + } + if ( ! $method && isset($args['connection_type']) && 'ssh' == $args['connection_type'] && extension_loaded('ssh2') && function_exists('stream_get_contents') ) $method = 'ssh2'; if ( ! $method && extension_loaded('ftp') ) $method = 'ftpext'; if ( ! $method && ( extension_loaded('sockets') || function_exists('fsockopen') ) ) $method = 'ftpsockets'; //Sockets: Socket extension; PHP Mode: FSockopen / fwrite / fread - return apply_filters('filesystem_method', $method); + return apply_filters('filesystem_method', $method, $args); +} + +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param unknown_type $form_post + * @param unknown_type $type + * @param unknown_type $error + * @return unknown + */ +function request_filesystem_credentials($form_post, $type = '', $error = false, $context = false) { + $req_cred = apply_filters('request_filesystem_credentials', '', $form_post, $type, $error, $context); + if ( '' !== $req_cred ) + return $req_cred; + + if ( empty($type) ) + $type = get_filesystem_method(array(), $context); + + if ( 'direct' == $type ) + return true; + + $credentials = get_option('ftp_credentials', array( 'hostname' => '', 'username' => '')); + + // If defined, set it to that, Else, If POST'd, set it to that, If not, Set it to whatever it previously was(saved details in option) + $credentials['hostname'] = defined('FTP_HOST') ? FTP_HOST : (!empty($_POST['hostname']) ? $_POST['hostname'] : $credentials['hostname']); + $credentials['username'] = defined('FTP_USER') ? FTP_USER : (!empty($_POST['username']) ? $_POST['username'] : $credentials['username']); + $credentials['password'] = defined('FTP_PASS') ? FTP_PASS : (!empty($_POST['password']) ? $_POST['password'] : ''); + + // Check to see if we are setting the public/private keys for ssh + $credentials['public_key'] = defined('FTP_PUBKEY') ? FTP_PUBKEY : (!empty($_POST['public_key']) ? $_POST['public_key'] : ''); + $credentials['private_key'] = defined('FTP_PRIKEY') ? FTP_PRIKEY : (!empty($_POST['private_key']) ? $_POST['private_key'] : ''); + + //sanitize the hostname, Some people might pass in odd-data: + $credentials['hostname'] = preg_replace('|\w+://|', '', $credentials['hostname']); //Strip any schemes off + + if ( strpos($credentials['hostname'], ':') ) + list( $credentials['hostname'], $credentials['port'] ) = explode(':', $credentials['hostname'], 2); + else + unset($credentials['port']); + + if ( defined('FTP_SSH') || (defined('FS_METHOD') && 'ssh' == FS_METHOD) ) + $credentials['connection_type'] = 'ssh'; + else if ( defined('FTP_SSL') && 'ftpext' == $type ) //Only the FTP Extension understands SSL + $credentials['connection_type'] = 'ftps'; + else if ( !empty($_POST['connection_type']) ) + $credentials['connection_type'] = $_POST['connection_type']; + else if ( !isset($credentials['connection_type']) ) //All else fails (And its not defaulted to something else saved), Default to FTP + $credentials['connection_type'] = 'ftp'; + + if ( ! $error && + ( + ( !empty($credentials['password']) && !empty($credentials['username']) && !empty($credentials['hostname']) ) || + ( 'ssh' == $credentials['connection_type'] && !empty($credentials['public_key']) && !empty($credentials['private_key']) ) + ) ) { + $stored_credentials = $credentials; + if ( !empty($stored_credentials['port']) ) //save port as part of hostname to simplify above code. + $stored_credentials['hostname'] .= ':' . $stored_credentials['port']; + + unset($stored_credentials['password'], $stored_credentials['port'], $stored_credentials['private_key'], $stored_credentials['public_key']); + update_option('ftp_credentials', $stored_credentials); + return $credentials; + } + $hostname = ''; + $username = ''; + $password = ''; + $connection_type = ''; + if ( !empty($credentials) ) + extract($credentials, EXTR_OVERWRITE); + if ( $error ) { + $error_string = __('Error: There was an error connecting to the server, Please verify the settings are correct.'); + if ( is_wp_error($error) ) + $error_string = $error->get_error_message(); + echo '

' . $error_string . '

'; + } +?> + +
+
+ +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
" size="40" />
size="40" />
size="40" />
+
+
+ +

size="40" />
size="40" /> +
+
+ + +
+ + +
+ +
+
+ + + + + + + +

+ +

+
+
+ \ No newline at end of file +?>