]> source.dussan.org Git - nextcloud-server.git/commitdiff
introducing new dav property {xmlns:oc="http://owncloud.org/ns}id
authorThomas Müller <thomas.mueller@tmit.eu>
Wed, 23 Oct 2013 14:03:57 +0000 (16:03 +0200)
committerThomas Müller <thomas.mueller@tmit.eu>
Wed, 23 Oct 2013 14:03:57 +0000 (16:03 +0200)
apps/files/appinfo/remote.php
lib/private/connector/sabre/filesplugin.php [new file with mode: 0644]
lib/private/connector/sabre/node.php

index 75c80cd49f384fea606a489e6a0b865645e5e1ff..9f2907962054ba03ccc6087494ee818ee949e942 100644 (file)
@@ -48,6 +48,7 @@ $defaults = new OC_Defaults();
 $server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, $defaults->getName()));
 $server->addPlugin(new Sabre_DAV_Locks_Plugin($lockBackend));
 $server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload
+$server->addPlugin(new OC_Connector_Sabre_FilesPlugin());
 $server->addPlugin(new OC_Connector_Sabre_AbortedUploadDetectionPlugin());
 $server->addPlugin(new OC_Connector_Sabre_QuotaPlugin());
 $server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin());
diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php
new file mode 100644 (file)
index 0000000..c9d43a0
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2013 Thomas Müller <thomas.mueller@tmit.eu>
+ *
+ * @license AGPL3
+ */
+
+class OC_Connector_Sabre_FilesPlugin extends Sabre_DAV_ServerPlugin
+{
+
+       // namespace
+       const NS_OWNCLOUD = 'xmlns:oc="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'));
+       }
+
+       /**
+        * 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';
+                       unset($requestedProperties[array_search($fileid_propertyname, $requestedProperties)]);
+
+                       /** @var $node OC_Connector_Sabre_Node */
+                       $returnedProperties[200][$fileid_propertyname] = $node->getFileId();
+
+               }
+
+       }
+
+}
index 3c2ad60f1dd6c81a74050b20334b1edbbe05f3ae..5c0fd2dcadc28855e95c7c537bb643e7efc493aa 100644 (file)
@@ -45,6 +45,7 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
         * @var string
         */
        protected $path;
+
        /**
         * node fileinfo cache
         * @var array
@@ -211,6 +212,7 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
         * properties should be returned
         */
        public function getProperties($properties) {
+
                if (is_null($this->property_cache)) {
                        $sql = 'SELECT * FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ?';
                        $result = OC_DB::executeAudited( $sql, array( OC_User::getUser(), $this->path ) );
@@ -236,8 +238,11 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
 
                $props = array();
                foreach($properties as $property) {
-                       if (isset($this->property_cache[$property])) $props[$property] = $this->property_cache[$property];
+                       if (isset($this->property_cache[$property])) {
+                               $props[$property] = $this->property_cache[$property];
+                       }
                }
+
                return $props;
        }
 
@@ -260,4 +265,15 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
                }
                return $this->fileView;
        }
+
+       /**
+        * @return mixed
+        */
+       public function getFileId()
+       {
+               $this->getFileinfoCache();
+               $instanceId = OC_Util::getInstanceId();
+               $id = sprintf('%08d', $this->fileinfo_cache['fileid']);
+               return $instanceId . $id;
+       }
 }