- 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 stringtags/v7.0.0alpha2
@@ -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()); |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); | |||
} |