Definition:
function request_filesystem_credentials($form_post, $type = '', $error = false, $context = false, $extra_fields = null) {}
Displays a form to the user to request for their FTP/SSH details in order to connect to the filesystem.
All chosen/entered details are saved, Excluding the Password.
Parameters
- string $form_post: the URL to post the form to
- string $type: the chosen Filesystem method in use
- boolean $error: if the current request has failed to connect
- string $context: The directory which is needed access to, The write-test will be performed on this directory by get_filesystem_method()
- string $extra_fields: Extra POST fields which should be checked for to be included in the post.
Return values
returns:False on failure. True on success.
Defined filters
- request_filesystem_credentials
apply_filters( 'request_filesystem_credentials', '', $form_post, $type, $error, $context, $extra_fields )
- fs_ftp_connection_types
apply_filters('fs_ftp_connection_types', $types, $credentials, $type, $error, $context)
Source code
function request_filesystem_credentials($form_post, $type = '', $error = false, $context = false, $extra_fields = null) { $req_cred = apply_filters( 'request_filesystem_credentials', '', $form_post, $type, $error, $context, $extra_fields ); if ( '' !== $req_cred ) return $req_cred; if ( empty($type) ) $type = get_filesystem_method(array(), $context); if ( 'direct' == $type ) return true; if ( is_null( $extra_fields ) ) $extra_fields = array( 'version', 'locale' ); $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']) ? stripslashes($_POST['hostname']) : $credentials['hostname']); $credentials['username'] = defined('FTP_USER') ? FTP_USER : (!empty($_POST['username']) ? stripslashes($_POST['username']) : $credentials['username']); $credentials['password'] = defined('FTP_PASS') ? FTP_PASS : (!empty($_POST['password']) ? stripslashes($_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']) ? stripslashes($_POST['public_key']) : ''); $credentials['private_key'] = defined('FTP_PRIKEY') ? FTP_PRIKEY : (!empty($_POST['private_key']) ? stripslashes($_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); if ( ! is_numeric($credentials['port']) ) unset($credentials['port']); } else { unset($credentials['port']); } if ( (defined('FTP_SSH') && FTP_SSH) || (defined('FS_METHOD') && 'ssh' == FS_METHOD) ) $credentials['connection_type'] = 'ssh'; else if ( (defined('FTP_SSL') && FTP_SSL) && 'ftpext' == $type ) //Only the FTP Extension understands SSL $credentials['connection_type'] = 'ftps'; else if ( !empty($_POST['connection_type']) ) $credentials['connection_type'] = stripslashes($_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 = __('<strong>Error:</strong> There was an error connecting to the server, Please verify the settings are correct.'); if ( is_wp_error($error) ) $error_string = esc_html( $error->get_error_message() ); echo '<div id="message" class="error"><p>' . $error_string . '</p></div>'; } $types = array(); if ( extension_loaded('ftp') || extension_loaded('sockets') || function_exists('fsockopen') ) $types[ 'ftp' ] = __('FTP'); if ( extension_loaded('ftp') ) //Only this supports FTPS $types[ 'ftps' ] = __('FTPS (SSL)'); if ( extension_loaded('ssh2') && function_exists('stream_get_contents') ) $types[ 'ssh' ] = __('SSH2'); $types = apply_filters('fs_ftp_connection_types', $types, $credentials, $type, $error, $context); ?> <script type="text/javascript"> <!-- jQuery(function($){ jQuery("#ssh").click(function () { jQuery("#ssh_keys").show(); }); jQuery("#ftp, #ftps").click(function () { jQuery("#ssh_keys").hide(); }); jQuery('form input[value=""]:first').focus(); }); --> </script> <form action="<?php echo $form_post ?>" method="post"> <div class="wrap"> <?php screen_icon(); ?> <h2><?php _e('Connection Information') ?></h2> <p><?php $label_user = __('Username'); $label_pass = __('Password'); _e('To perform the requested action, WordPress needs to access your web server.'); echo ' '; if ( ( isset( $types['ftp'] ) || isset( $types['ftps'] ) ) ) { if ( isset( $types['ssh'] ) ) { _e('Please enter your FTP or SSH credentials to proceed.'); $label_user = __('FTP/SSH Username'); $label_pass = __('FTP/SSH Password'); } else { _e('Please enter your FTP credentials to proceed.'); $label_user = __('FTP Username'); $label_pass = __('FTP Password'); } echo ' '; } _e('If you do not remember your credentials, you should contact your web host.'); ?></p> <table class="form-table"> <tr valign="top"> <th scope="row"><label for="hostname"><?php _e('Hostname') ?></label></th> <td><input name="hostname" type="text" id="hostname" value="<?php echo esc_attr($hostname); if ( !empty($port) ) echo ":$port"; ?>"<?php disabled( defined('FTP_HOST') ); ?> size="40" /></td> </tr> <tr valign="top"> <th scope="row"><label for="username"><?php echo $label_user; ?></label></th> <td><input name="username" type="text" id="username" value="<?php echo esc_attr($username) ?>"<?php disabled( defined('FTP_USER') ); ?> size="40" /></td> </tr> <tr valign="top"> <th scope="row"><label for="password"><?php echo $label_pass; ?></label></th> <td><input name="password" type="password" id="password" value="<?php if ( defined('FTP_PASS') ) echo '*****'; ?>"<?php disabled( defined('FTP_PASS') ); ?> size="40" /></td> </tr> <?php if ( isset($types['ssh']) ) : ?> <tr id="ssh_keys" valign="top" style="<?php if ( 'ssh' != $connection_type ) echo 'display:none' ?>"> <th scope="row"><?php _e('Authentication Keys') ?> <div class="key-labels textright"> <label for="public_key"><?php _e('Public Key:') ?></label ><br /> <label for="private_key"><?php _e('Private Key:') ?></label> </div></th> <td><br /><input name="public_key" type="text" id="public_key" value="<?php echo esc_attr($public_key) ?>"<?php disabled( defined('FTP_PUBKEY') ); ?> size="40" /><br /><input name="private_key" type="text" id="private_key" value="<?php echo esc_attr($private_key) ?>"<?php disabled( defined('FTP_PRIKEY') ); ?> size="40" /> <div><?php _e('Enter the location on the server where the keys are located. If a passphrase is needed, enter that in the password field above.') ?></div></td> </tr> <?php endif; ?> <tr valign="top"> <th scope="row"><?php _e('Connection Type') ?></th> <td> <fieldset><legend class="screen-reader-text"><span><?php _e('Connection Type') ?></span></legend> <?php $disabled = disabled( (defined('FTP_SSL') && FTP_SSL) || (defined('FTP_SSH') && FTP_SSH), true, false ); foreach ( $types as $name => $text ) : ?> <label for="<?php echo esc_attr($name) ?>"> <input type="radio" name="connection_type" id="<?php echo esc_attr($name) ?>" value="<?php echo esc_attr($name) ?>"<?php checked($name, $connection_type); echo $disabled; ?> /> <?php echo $text ?> </label> <?php endforeach; ?> </fieldset> </td> </tr> </table> <?php foreach ( (array) $extra_fields as $field ) { if ( isset( $_POST[ $field ] ) ) echo '<input type="hidden" name="' . esc_attr( $field ) . '" value="' . esc_attr( stripslashes( $_POST[ $field ] ) ) . '" />'; } submit_button( __( 'Proceed' ), 'button', 'upgrade' ); ?> </div> </form> <?php return false; }
2733
No comments yet... Be the first to leave a reply!