/usr/share/php/Sabre/DAV/Tree/Filesystem.php is in php-horde-dav 1.0.3-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | <?php
namespace Sabre\DAV\Tree;
use Sabre\DAV;
/**
* FileSystem Tree
*
* This class is an alternative to the standard ObjectTree. This tree can only
* use Sabre\DAV\FS\Directory and File classes, but as a result it allows for a few
* optimizations that otherwise wouldn't be possible.
*
* Specifically copying and moving are much, much faster.
*
* @copyright Copyright (C) 2007-2013 fruux GmbH (https://fruux.com/).
* @author Evert Pot (http://evertpot.com/)
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
*/
class Filesystem extends DAV\Tree {
/**
* Base url on the filesystem.
*
* @var string
*/
protected $basePath;
/**
* Creates this tree
*
* Supply the path you'd like to share.
*
* @param string $basePath
*/
public function __construct($basePath) {
$this->basePath = $basePath;
}
/**
* Returns a new node for the given path
*
* @param string $path
* @return DAV\FS\Node
*/
public function getNodeForPath($path) {
$realPath = $this->getRealPath($path);
if (!file_exists($realPath)) {
throw new DAV\Exception\NotFound('File at location ' . $realPath . ' not found');
}
if (is_dir($realPath)) {
return new DAV\FS\Directory($realPath);
} else {
return new DAV\FS\File($realPath);
}
}
/**
* Returns the real filesystem path for a webdav url.
*
* @param string $publicPath
* @return string
*/
protected function getRealPath($publicPath) {
return rtrim($this->basePath,'/') . '/' . trim($publicPath,'/');
}
/**
* Copies a file or directory.
*
* This method must work recursively and delete the destination
* if it exists
*
* @param string $source
* @param string $destination
* @return void
*/
public function copy($source,$destination) {
$source = $this->getRealPath($source);
$destination = $this->getRealPath($destination);
$this->realCopy($source,$destination);
}
/**
* Used by self::copy
*
* @param string $source
* @param string $destination
* @return void
*/
protected function realCopy($source,$destination) {
if (is_file($source)) {
copy($source,$destination);
} else {
mkdir($destination);
foreach(scandir($source) as $subnode) {
if ($subnode=='.' || $subnode=='..') continue;
$this->realCopy($source.'/'.$subnode,$destination.'/'.$subnode);
}
}
}
/**
* Moves a file or directory recursively.
*
* If the destination exists, delete it first.
*
* @param string $source
* @param string $destination
* @return void
*/
public function move($source,$destination) {
$source = $this->getRealPath($source);
$destination = $this->getRealPath($destination);
rename($source,$destination);
}
}
|