diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2014-05-02 17:37:16 +0200 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2014-05-02 17:37:16 +0200 |
commit | c92c577b5e05ea1d932c6739b87fea8beea21e1b (patch) | |
tree | e194232ae8efd9f97fca8fee61cc9b2df314dac2 /lib/private/connector/sabre | |
parent | 49d9631eee1616b9ae2846886c3d428236c5b81a (diff) | |
download | nextcloud-server-c92c577b5e05ea1d932c6739b87fea8beea21e1b.tar.gz nextcloud-server-c92c577b5e05ea1d932c6739b87fea8beea21e1b.zip |
- Introduce isShared() and isMounted() on FileInfo class
- Reuse these methods on determineIcon()
- Generate permission string for the desktop client
- expose {http://owncloud.org/ns}permissions as additional WebDAV property containing the permission string
Diffstat (limited to 'lib/private/connector/sabre')
-rw-r--r-- | lib/private/connector/sabre/filesplugin.php | 18 | ||||
-rw-r--r-- | lib/private/connector/sabre/node.php | 29 |
2 files changed, 43 insertions, 4 deletions
diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php index 65231040fb5..e2ff574c455 100644 --- a/lib/private/connector/sabre/filesplugin.php +++ b/lib/private/connector/sabre/filesplugin.php @@ -37,6 +37,7 @@ class OC_Connector_Sabre_FilesPlugin extends Sabre_DAV_ServerPlugin $server->xmlNamespaces[self::NS_OWNCLOUD] = 'oc'; $server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}id'; + $server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}permissions'; $this->server = $server; $this->server->subscribeEvent('beforeGetProperties', array($this, 'beforeGetProperties')); @@ -57,15 +58,24 @@ class OC_Connector_Sabre_FilesPlugin extends Sabre_DAV_ServerPlugin 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)]); + $fileIdPropertyName = '{' . self::NS_OWNCLOUD . '}id'; + $permissionsPropertyName = '{' . self::NS_OWNCLOUD . '}permissions'; + if (array_search($fileIdPropertyName, $requestedProperties)) { + unset($requestedProperties[array_search($fileIdPropertyName, $requestedProperties)]); + } + if (array_search($permissionsPropertyName, $requestedProperties)) { + unset($requestedProperties[array_search($permissionsPropertyName, $requestedProperties)]); } /** @var $node OC_Connector_Sabre_Node */ $fileId = $node->getFileId(); if (!is_null($fileId)) { - $returnedProperties[200][$fileid_propertyname] = $fileId; + $returnedProperties[200][$fileIdPropertyName] = $fileId; + } + + $permissions = $node->getDavPermissions(); + if (!is_null($fileId)) { + $returnedProperties[200][$permissionsPropertyName] = $permissions; } } diff --git a/lib/private/connector/sabre/node.php b/lib/private/connector/sabre/node.php index eede39cba8b..ca8dcce9e86 100644 --- a/lib/private/connector/sabre/node.php +++ b/lib/private/connector/sabre/node.php @@ -237,4 +237,33 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr return null; } + + /** + * @return string|null + */ + public function getDavPermissions() { + $p =''; + if ($this->info->isShared()) { + $p .= 'S'; + } + if ($this->info->isShareable()) { + $p .= 'R'; + } + if ($this->info->isMounted()) { + $p .= 'M'; + } + if ($this->info->getType() === \OCP\Files\FileInfo::TYPE_FILE) { + if ($this->info->isUpdateable()) { + $p .= 'W'; + } + } else { + if ($this->info->isDeletable()) { + $p .= 'D'; + } + if ($this->info->isUpdateable()) { + $p .= 'CK'; + } + } + return $p; + } } |