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); } }