Browse Source

- 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
tags/v7.0.0alpha2
Thomas Müller 10 years ago
parent
commit
c92c577b5e

+ 4
- 13
apps/files/lib/helper.php View File

@@ -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());

+ 14
- 4
lib/private/connector/sabre/filesplugin.php View File

@@ -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;
}

}

+ 29
- 0
lib/private/connector/sabre/node.php View File

@@ -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;
}
}

+ 24
- 0
lib/private/files/fileinfo.php View File

@@ -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;
}
}

+ 14
- 0
lib/public/files/fileinfo.php View File

@@ -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();
}

Loading…
Cancel
Save