[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