[horde] FTP VFS functions (was Other Gollem issues)
Jeff Graves
jeff at image-src.com
Fri Feb 21 14:10:29 PST 2003
Here's my attempt at implementing so missing FTP functions in the
horde VFS. I re-worked what was already in place for the sql_file
backend. I've never written php code before but they seem to work on
my installation. Somebody with some PHP experience should take a look
over them, make necessary changes, and commit them after testing:
/**
* Returns a sorted folder list of the current directory.
*
* @param mixed $filter (optional) hash of items to filter
based on folderlist.
*
* @return mixed Folder list on success or a PEAR_Error object on
failure.
*/
function listFolders($filter = null)
{
$conn = $this->_connect();
if (is_a($conn, 'PEAR_Error')) {
return $conn;
}
$folders = array();
$folder = array();
$folderList = $this->listFolder('',null,true,true);
foreach ($folderList as $files) {
$folder['val'] = $files['name'];
$folder['abbrev'] = $folder['val'] ;
$folder['label'] = $folder['val'];
$folders[$folder['val']] = $folder;
}
ksort($folders);
return $folders;
}
/**
* Copies a file through the backend.
*
* @param string $path The path to store the file in.
* @param string $name The filename to use.
* @param string $dest The destination of the file.
*
* @return mixed True on success or a PEAR_Error object on
failure.
*/
function copy($path, $name, $dest)
{
$conn = $this->_connect();
if (is_a($conn, 'PEAR_Error')) {
return $conn;
}
$fileCheck = $this->listFolder($dest, null, false);
foreach ($fileCheck as $file) {
if ($file['name'] == $name) {
return PEAR::raiseError('File already exists');
}
}
if (is_dir($this->_getPath($path, $name))) {
//return $this->_recursiveCopy($path, $name, $dest);
return PEAR::raiseError('Directory copy not supported');
}
$tmpFile = Horde::getTempFile('vfs', false);
if (!(@ftp_get($this->_stream, $tmpFile, $this->_getPath('/' .
$path, $name), FTP_BINARY))) {
return PEAR::raiseError('Retrieve file failed: ' .
$this->_getPath('/' . $path, $name));
}
if (!(@ftp_put($this->_stream, $this->_getPath('/' . $dest,
$name), $tmpFile, FTP_BINARY))) {
return PEAR::raiseError('Copy file failed: ' .
$this->_getPath('/' . $dest, $name));
}
return true;
}
/**
* Moves a file through the backend.
*
* @param string $path The path to store the file in.
* @param string $name The filename to use.
* @param string $dest The destination of the file.
*
* @return mixed True on success or a PEAR_Error object on
failure.
*/
function move($path, $name, $dest)
{
$conn = $this->_connect();
if (is_a($conn, 'PEAR_Error')) {
return $conn;
}
if (!($this->copy($path, $name, $dest))) {
return PEAR::raiseError('Copy file failed');
}
if (!(@ftp_delete($this->_stream, $this->_getPath('/' . $path,
$name)))) {
return PEAR::raiseError('Delete file failed');
}
return true;
}
Jeff Graves
Customer Support Engineer
Image Source, Inc.
10 Mill Street
Bellingham, MA 02019
jeff at image-src.com - Email
508.966.5200 X31 - Phone
508.966.5170 - Fax
-----Original Message-----
From: gollem-bounces at lists.horde.org
[mailto:gollem-bounces at lists.horde.org]On Behalf Of Chuck Hagenbuch
Sent: Thursday, February 20, 2003 2:52 PM
To: gollem at lists.horde.org
Subject: RE: [gollem] Other Gollem issues
Please keep threads on the list.
Quoting Jeff Graves <jeff at image-src.com>:
> Where would I find these functions (for other backends)? I'll make a
pass
> at working on them.
horde/lib/VFS/*.php
-chuck
--
Charles Hagenbuch, <chuck at horde.org>
must ... find ... acorns ... *thud*
--
Gollem mailing list
Frequently Asked Questions: http://horde.org/faq/
To unsubscribe, mail: gollem-unsubscribe at lists.horde.org
More information about the horde
mailing list