[Pkg-owncloud-commits] [owncloud] 40/55: backport of the FilesPlugin to stable5

David Prévot taffit at moszumanska.debian.org
Wed Apr 23 19:52:00 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to annotated tag v5.0.16RC1
in repository owncloud.

commit f16a19bea98cb0e506f23beed3b657cab6bae62d
Author: Thomas Müller <thomas.mueller at tmit.eu>
Date:   Wed Apr 16 15:11:58 2014 +0200

    backport of the FilesPlugin to stable5
---
 lib/connector/sabre/filesplugin.php | 103 ++++++++++++++++++++++++++++++++++++
 lib/connector/sabre/node.php        |  16 ++++++
 2 files changed, 119 insertions(+)

diff --git a/lib/connector/sabre/filesplugin.php b/lib/connector/sabre/filesplugin.php
new file mode 100644
index 0000000..6523104
--- /dev/null
+++ b/lib/connector/sabre/filesplugin.php
@@ -0,0 +1,103 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2013 Thomas Müller <thomas.mueller at tmit.eu>
+ *
+ * @license AGPL3
+ */
+
+class OC_Connector_Sabre_FilesPlugin extends Sabre_DAV_ServerPlugin
+{
+
+	// namespace
+	const NS_OWNCLOUD = 'http://owncloud.org/ns';
+
+	/**
+	 * Reference to main server object
+	 *
+	 * @var Sabre_DAV_Server
+	 */
+	private $server;
+
+	/**
+	 * This initializes the plugin.
+	 *
+	 * This function is called by Sabre_DAV_Server, after
+	 * addPlugin is called.
+	 *
+	 * This method should set up the required event subscriptions.
+	 *
+	 * @param Sabre_DAV_Server $server
+	 * @return void
+	 */
+	public function initialize(Sabre_DAV_Server $server) {
+
+		$server->xmlNamespaces[self::NS_OWNCLOUD] = 'oc';
+		$server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}id';
+
+		$this->server = $server;
+		$this->server->subscribeEvent('beforeGetProperties', array($this, 'beforeGetProperties'));
+		$this->server->subscribeEvent('afterCreateFile', array($this, 'sendFileIdHeader'));
+		$this->server->subscribeEvent('afterWriteContent', array($this, 'sendFileIdHeader'));
+	}
+
+	/**
+	 * Adds all ownCloud-specific properties
+	 *
+	 * @param string $path
+	 * @param Sabre_DAV_INode $node
+	 * @param array $requestedProperties
+	 * @param array $returnedProperties
+	 * @return void
+	 */
+	public function beforeGetProperties($path, Sabre_DAV_INode $node, array &$requestedProperties, array &$returnedProperties) {
+
+		if ($node instanceof OC_Connector_Sabre_Node) {
+
+			$fileid_propertyname = '{' . self::NS_OWNCLOUD . '}id';
+			if (array_search($fileid_propertyname, $requestedProperties)) {
+				unset($requestedProperties[array_search($fileid_propertyname, $requestedProperties)]);
+			}
+
+			/** @var $node OC_Connector_Sabre_Node */
+			$fileId = $node->getFileId();
+			if (!is_null($fileId)) {
+				$returnedProperties[200][$fileid_propertyname] = $fileId;
+			}
+
+		}
+
+	}
+
+	/**
+	 * @param $filePath
+	 * @param Sabre_DAV_INode $node
+	 * @throws Sabre_DAV_Exception_BadRequest
+	 */
+	public function sendFileIdHeader($filePath, Sabre_DAV_INode $node = null) {
+		// chunked upload handling
+		if (isset($_SERVER['HTTP_OC_CHUNKED'])) {
+			list($path, $name) = \Sabre_DAV_URLUtil::splitPath($filePath);
+			$info = OC_FileChunking::decodeName($name);
+			if (!empty($info)) {
+				$filePath = $path . '/' . $info['name'];
+			}
+		}
+
+		// we get the node for the given $filePath here because in case of afterCreateFile $node is the parent folder
+		if (!$this->server->tree->nodeExists($filePath)) {
+			return;
+		}
+		$node = $this->server->tree->getNodeForPath($filePath);
+		if ($node instanceof OC_Connector_Sabre_Node) {
+			$fileId = $node->getFileId();
+			if (!is_null($fileId)) {
+				$this->server->httpResponse->setHeader('OC-FileId', $fileId);
+			}
+		}
+	}
+
+}
diff --git a/lib/connector/sabre/node.php b/lib/connector/sabre/node.php
index cad87eb..65fa61f 100644
--- a/lib/connector/sabre/node.php
+++ b/lib/connector/sabre/node.php
@@ -238,4 +238,20 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
 		return null;
 	}
 
+
+	/**
+	 * @return string|null
+	 */
+	public function getFileId()
+	{
+		$this->getFileinfoCache();
+
+		if (isset($this->fileinfo_cache['fileid'])) {
+			$instanceId = OC_Util::getInstanceId();
+			$id = sprintf('%08d', $this->fileinfo_cache['fileid']);
+			return $id . $instanceId;
+		}
+
+		return null;
+	}
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list