diff options
Diffstat (limited to '3rdparty/Sabre/DAV/Tree/Filesystem.php')
-rwxr-xr-x | 3rdparty/Sabre/DAV/Tree/Filesystem.php | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/3rdparty/Sabre/DAV/Tree/Filesystem.php b/3rdparty/Sabre/DAV/Tree/Filesystem.php new file mode 100755 index 00000000000..40580ae366f --- /dev/null +++ b/3rdparty/Sabre/DAV/Tree/Filesystem.php @@ -0,0 +1,123 @@ +<?php + +/** + * Sabre_DAV_Tree_Filesystem + * + * @package Sabre + * @subpackage DAV + * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. + * @author Evert Pot (http://www.rooftopsolutions.nl/) + * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License + */ +class Sabre_DAV_Tree_Filesystem extends Sabre_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 Sabre_DAV_FS_Node + */ + public function getNodeForPath($path) { + + $realPath = $this->getRealPath($path); + if (!file_exists($realPath)) throw new Sabre_DAV_Exception_NotFound('File at location ' . $realPath . ' not found'); + if (is_dir($realPath)) { + return new Sabre_DAV_FS_Directory($realPath); + } else { + return new Sabre_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); + + } + +} + |