[Pkg-owncloud-commits] [owncloud] 57/153: - 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
David Prévot
taffit at moszumanska.debian.org
Tue May 27 03:05:35 UTC 2014
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository owncloud.
commit c92c577b5e05ea1d932c6739b87fea8beea21e1b
Author: Thomas Müller <thomas.mueller at tmit.eu>
Date: Fri May 2 17:37:16 2014 +0200
- 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
---
apps/files/lib/helper.php | 17 ++++-------------
lib/private/connector/sabre/filesplugin.php | 18 ++++++++++++++----
lib/private/connector/sabre/node.php | 29 +++++++++++++++++++++++++++++
lib/private/files/fileinfo.php | 24 ++++++++++++++++++++++++
lib/public/files/fileinfo.php | 14 ++++++++++++++
5 files changed, 85 insertions(+), 17 deletions(-)
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index 0ae87d1..3d39508 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -27,20 +27,11 @@ class Helper
*/
public static function determineIcon($file) {
if($file['type'] === 'dir') {
- $dir = $file['directory'];
$icon = \OC_Helper::mimetypeIcon('dir');
- $absPath = $file->getPath();
- $mount = \OC\Files\Filesystem::getMountManager()->find($absPath);
- if (!is_null($mount)) {
- $sid = $mount->getStorageId();
- if (!is_null($sid)) {
- $sid = explode(':', $sid);
- if ($sid[0] === 'shared') {
- $icon = \OC_Helper::mimetypeIcon('dir-shared');
- } elseif ($sid[0] !== 'local' and $sid[0] !== 'home') {
- $icon = \OC_Helper::mimetypeIcon('dir-external');
- }
- }
+ if ($file->isShared()) {
+ $icon = \OC_Helper::mimetypeIcon('dir-shared');
+ } elseif ($file->isMounted()) {
+ $icon = \OC_Helper::mimetypeIcon('dir-external');
}
}else{
$icon = \OC_Helper::mimetypeIcon($file->getMimetype());
diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php
index 6523104..e2ff574 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 eede39c..ca8dcce 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;
+ }
}
diff --git a/lib/private/files/fileinfo.php b/lib/private/files/fileinfo.php
index d6940f5..3573644 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 37162e0..f934637 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();
}
--
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