diff options
author | Vincent Petry <pvince81@owncloud.com> | 2014-03-25 16:37:46 +0100 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2014-06-04 16:08:59 +0200 |
commit | da889ff029446119cf6159e75c48ef83be7de7e8 (patch) | |
tree | b88399936d4e4ec24145739db4cc9c1e3e09c833 /lib/private/helper.php | |
parent | b5f0a179187bb3f10a939518c6eba72593c1f7a5 (diff) | |
download | nextcloud-server-da889ff029446119cf6159e75c48ef83be7de7e8.tar.gz nextcloud-server-da889ff029446119cf6159e75c48ef83be7de7e8.zip |
Added experimental switch to count external storage data in quota
This includes all mountpoints except the Shared one in
the used space calculation.
Added unit tests for ext storage inclusion in quota calculation
Diffstat (limited to 'lib/private/helper.php')
-rw-r--r-- | lib/private/helper.php | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/lib/private/helper.php b/lib/private/helper.php index 9ac07bbd3b1..a054fc485a4 100644 --- a/lib/private/helper.php +++ b/lib/private/helper.php @@ -936,6 +936,8 @@ class OC_Helper { */ public static function getStorageInfo($path, $rootInfo = null) { // return storage info without adding mount points + $includeExtStorage = \OC_Config::getValue('quota_include_external_storage', false); + if (is_null($rootInfo)) { $rootInfo = \OC\Files\Filesystem::getFileInfo($path, false); } @@ -944,8 +946,20 @@ class OC_Helper { $used = 0; } $quota = 0; - // TODO: need a better way to get total space from storage $storage = $rootInfo->getStorage(); + if ($includeExtStorage && $storage->instanceOfStorage('\OC\Files\Storage\Shared')) { + $includeExtStorage = false; + } + if ($includeExtStorage) { + $quota = OC_Util::getUserQuota(\OCP\User::getUser()); + if ($quota !== \OC\Files\SPACE_UNLIMITED) { + // always get free space / total space from root + mount points + $path = ''; + return self::getGlobalStorageInfo(); + } + } + + // TODO: need a better way to get total space from storage if ($storage->instanceOfStorage('\OC\Files\Storage\Wrapper\Quota')) { $quota = $storage->getQuota(); } @@ -967,4 +981,35 @@ class OC_Helper { return array('free' => $free, 'used' => $used, 'total' => $total, 'relative' => $relative); } + + /** + * Get storage info including all mount points and quota + * + * @return array + */ + private static function getGlobalStorageInfo() { + $quota = OC_Util::getUserQuota(\OCP\User::getUser()); + + $rootInfo = \OC\Files\Filesystem::getFileInfo('', 'ext'); + $used = $rootInfo['size']; + if ($used < 0) { + $used = 0; + } + + $total = $quota; + $free = $quota - $used; + + if ($total > 0) { + if ($quota > 0 && $total > $quota) { + $total = $quota; + } + // prevent division by zero or error codes (negative values) + $relative = round(($used / $total) * 10000) / 100; + } else { + $relative = 0; + } + + return array('free' => $free, 'used' => $used, 'total' => $total, 'relative' => $relative); + + } } |