diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/connector/sabre/filesplugin.php | 18 | ||||
-rw-r--r-- | lib/private/connector/sabre/node.php | 32 | ||||
-rw-r--r-- | lib/private/files/fileinfo.php | 24 | ||||
-rw-r--r-- | lib/public/files/fileinfo.php | 14 |
4 files changed, 84 insertions, 4 deletions
diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php index f8495b40524..25d7fd53343 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 . '}perm'; $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..ee38dfc8642 100644 --- a/lib/private/connector/sabre/node.php +++ b/lib/private/connector/sabre/node.php @@ -237,4 +237,36 @@ 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->isDeletable()) { + $p .= 'D'; + } + if ($this->info->isDeletable()) { + $p .= 'N'; + } + if ($this->info->getType() === \OCP\Files\FileInfo::TYPE_FILE) { + if ($this->info->isUpdateable()) { + $p .= 'W'; + } + } else { + if ($this->info->isUpdateable()) { + $p .= 'CK'; + } + } + return $p; + } } diff --git a/lib/private/files/fileinfo.php b/lib/private/files/fileinfo.php index b64c5d4e112..e7afeb4ccce 100644 --- a/lib/private/files/fileinfo.php +++ b/lib/private/files/fileinfo.php @@ -196,4 +196,28 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess { public function isShareable() { return $this->checkPermissions(\OCP\PERMISSION_SHARE); } + + /** + * Check if a file or folder is shared + * @return bool + */ + public function isShared() { + $sid = $this->getStorage()->getId(); + if (!is_null($sid)) { + $sid = explode(':', $sid); + return ($sid[0] === 'shared'); + } + + return false; + } + + public function isMounted() { + $sid = $this->getStorage()->getId(); + if (!is_null($sid)) { + $sid = explode(':', $sid); + return ($sid[0] !== 'local' and $sid[0] !== 'home'); + } + + return false; + } } diff --git a/lib/public/files/fileinfo.php b/lib/public/files/fileinfo.php index bf0c31918cb..b9c8258f21e 100644 --- a/lib/public/files/fileinfo.php +++ b/lib/public/files/fileinfo.php @@ -135,4 +135,18 @@ interface FileInfo { * @return bool */ public function isShareable(); + + /** + * Check if a file or folder is shared + * + * @return bool + */ + public function isShared(); + + /** + * Check if a file or folder is mounted + * + * @return bool + */ + public function isMounted(); } |