aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/lib/SabreDAV/lib/OldSabre/DAV/Tree/Filesystem.php
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/lib/SabreDAV/lib/OldSabre/DAV/Tree/Filesystem.php')
-rw-r--r--calendar/lib/SabreDAV/lib/OldSabre/DAV/Tree/Filesystem.php133
1 files changed, 133 insertions, 0 deletions
diff --git a/calendar/lib/SabreDAV/lib/OldSabre/DAV/Tree/Filesystem.php b/calendar/lib/SabreDAV/lib/OldSabre/DAV/Tree/Filesystem.php
new file mode 100644
index 0000000..9d1a638
--- /dev/null
+++ b/calendar/lib/SabreDAV/lib/OldSabre/DAV/Tree/Filesystem.php
@@ -0,0 +1,133 @@
+<?php
+
+namespace OldSabre\DAV\Tree;
+
+use OldSabre\DAV;
+
+/**
+ * FileSystem Tree
+ *
+ * This class is an alternative to the standard ObjectTree. This tree can only
+ * use OldSabre\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-2015 fruux GmbH (https://fruux.com/).
+ * @author Evert Pot (http://evertpot.com/)
+ * @license http://sabre.io/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);
+
+ }
+
+}
+

© 2014-2024 Faster IT GmbH | imprint | privacy policy