Beispiel #1
0
 function destination_ftp_pathpicker()
 {
     function pb_backupbuddy_ftp_listDetailed($resource, $directory = '.')
     {
         if (is_array($children = @ftp_rawlist($resource, $directory))) {
             $items = array();
             foreach ($children as $child) {
                 $chunks = preg_split("/\\s+/", $child);
                 list($item['rights'], $item['number'], $item['user'], $item['group'], $item['size'], $item['month'], $item['day'], $item['time']) = $chunks;
                 $item['type'] = $chunks[0][0] === 'd' ? 'directory' : 'file';
                 array_splice($chunks, 0, 8);
                 $items[implode(" ", $chunks)] = $item;
             }
             return $items;
         }
         return false;
     }
     // end listDetailed subfunction.
     $settings = array('address' => pb_backupbuddy::_GET('pb_backupbuddy_address'), 'username' => pb_backupbuddy::_GET('pb_backupbuddy_username'), 'password' => pb_backupbuddy::_GET('pb_backupbuddy_password'), 'ftps' => pb_backupbuddy::_GET('pb_backupbuddy_ftps'), 'active_mode' => pb_backupbuddy::_GET('pb_backupbuddy_active_mode'));
     if ($settings['address'] == '' || $settings['username'] == '' || $settings['password'] == '') {
         die(__('Missing required FTP server inputs.', 'it-l10n-backupbuddy'));
     }
     // Settings
     if ($settings['active_mode'] == '0') {
         $active_mode = false;
     } else {
         $active_mode = true;
     }
     $server = $settings['address'];
     $port = '21';
     if (strstr($server, ':')) {
         $server_params = explode(':', $server);
         $server = $server_params[0];
         $port = $server_params[1];
     }
     // Connect.
     if ($settings['ftps'] == '0') {
         $conn_id = @ftp_connect($server, $port, 10);
         // timeout of 10 seconds.
         if ($conn_id === false) {
             $error = __('Unable to connect to FTP address `' . $server . '` on port `' . $port . '`.', 'it-l10n-backupbuddy');
             $error .= "\n" . __('Verify the server address and port (default 21). Verify your host allows outgoing FTP connections.', 'it-l10n-backupbuddy');
             die($error);
         }
     } else {
         if (function_exists('ftp_ssl_connect')) {
             $conn_id = @ftp_ssl_connect($server, $port);
             if ($conn_id === false) {
                 die(__('Destination server does not support FTPS?', 'it-l10n-backupbuddy'));
             }
         } else {
             die(__('Your web server doesnt support FTPS.', 'it-l10n-backupbuddy'));
         }
     }
     // Authenticate.
     $login_result = @ftp_login($conn_id, $settings['username'], $settings['password']);
     if (!$conn_id || !$login_result) {
         pb_backupbuddy::status('details', 'FTP test: Invalid user/pass.');
         $response = __('Unable to login to FTP server. Bad user/pass.', 'it-l10n-backupbuddy');
         if ($settings['ftps'] != '0') {
             $response .= "\n\nNote: You have FTPs enabled. You may get this error if your host does not support encryption at this address/port.";
         }
         die($response);
     }
     pb_backupbuddy::status('details', 'FTP test: Success logging in.');
     // Handle active/pasive mode.
     if ($active_mode === true) {
         // do nothing, active is default.
         pb_backupbuddy::status('details', 'Active FTP mode based on settings.');
     } elseif ($active_mode === false) {
         // Turn passive mode on.
         pb_backupbuddy::status('details', 'Passive FTP mode based on settings.');
         ftp_pasv($conn_id, true);
     } else {
         pb_backupbuddy::status('error', 'Unknown FTP active/passive mode: `' . $active_mode . '`.');
     }
     // Calculate root.
     $ftpRoot = urldecode(pb_backupbuddy::_POST('dir'));
     if ('' == $ftpRoot) {
         // No root passed so figure out root from FTP server itself.
         $ftpRoot = ftp_pwd($conn_id);
     }
     $ftpList = pb_backupbuddy_ftp_listDetailed($conn_id, $ftpRoot);
     echo '<ul class="jqueryFileTree pb_backupbuddy_ftpdestination_pathpickerboxtree">';
     if (count($ftpList) > 2) {
         foreach ($ftpList as $fileName => $file) {
             if ('.' == $fileName || '..' == $fileName) {
                 continue;
             }
             if ('directory' == $file['type']) {
                 // Directory.
                 echo '<li class="directory collapsed">';
                 $return = '';
                 $return .= '<div class="pb_backupbuddy_treeselect_control">';
                 $return .= '<img src="' . pb_backupbuddy::plugin_url() . '/images/greenplus.png" style="vertical-align: -3px;" title="Select this path..." class="pb_backupbuddy_filetree_select">';
                 $return .= '</div>';
                 echo '<a href="#" rel="' . htmlentities($ftpRoot . $fileName) . '/" title="Toggle expand...">' . htmlentities($fileName) . $return . '</a>';
                 echo '</li>';
             } else {
                 // File.
                 echo '<li class="file collapsed">';
                 echo '<a href="#" rel="' . htmlentities($ftpRoot . $fileName) . '">' . htmlentities($fileName) . '</a>';
                 echo '</li>';
             }
         }
     } else {
         echo '<ul class="jqueryFileTree">';
         echo '<li><a href="#" rel="' . htmlentities(pb_backupbuddy::_POST('dir') . 'NONE') . '"><i>Empty Directory ...</i></a></li>';
         echo '</ul>';
     }
     echo '</ul>';
     die;
 }
    // do nothing, active is default.
    pb_backupbuddy::status('details', 'Active FTP mode based on settings.');
} elseif ($active_mode === false) {
    // Turn passive mode on.
    pb_backupbuddy::status('details', 'Passive FTP mode based on settings.');
    ftp_pasv($conn_id, true);
} else {
    pb_backupbuddy::status('error', 'Unknown FTP active/passive mode: `' . $active_mode . '`.');
}
// Calculate root.
$ftpRoot = urldecode(pb_backupbuddy::_POST('dir'));
if ('' == $ftpRoot) {
    // No root passed so figure out root from FTP server itself.
    $ftpRoot = ftp_pwd($conn_id);
}
$ftpList = pb_backupbuddy_ftp_listDetailed($conn_id, $ftpRoot);
echo '<ul class="jqueryFileTree pb_backupbuddy_ftpdestination_pathpickerboxtree">';
if (count($ftpList) > 2) {
    foreach ($ftpList as $fileName => $file) {
        if ('.' == $fileName || '..' == $fileName) {
            continue;
        }
        if ('directory' == $file['type']) {
            // Directory.
            echo '<li class="directory collapsed">';
            $return = '';
            $return .= '<div class="pb_backupbuddy_treeselect_control">';
            $return .= '<img src="' . pb_backupbuddy::plugin_url() . '/images/greenplus.png" style="vertical-align: -3px;" title="Select this path..." class="pb_backupbuddy_filetree_select">';
            $return .= '</div>';
            echo '<a href="#" rel="' . htmlentities($ftpRoot . $fileName) . '/" title="Toggle expand...">' . htmlentities($fileName) . $return . '</a>';
            echo '</li>';