summaryrefslogtreecommitdiffstats
path: root/lib/fileproxy/quota.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/fileproxy/quota.php')
-rw-r--r--lib/fileproxy/quota.php72
1 files changed, 39 insertions, 33 deletions
diff --git a/lib/fileproxy/quota.php b/lib/fileproxy/quota.php
index 5a0dbdb6fe2..742e02d471b 100644
--- a/lib/fileproxy/quota.php
+++ b/lib/fileproxy/quota.php
@@ -27,77 +27,83 @@
class OC_FileProxy_Quota extends OC_FileProxy{
static $rootView;
- private $userQuota=-1;
+ private $userQuota=array();
/**
- * get the quota for the current user
+ * get the quota for the user
+ * @param user
* @return int
*/
- private function getQuota() {
- if($this->userQuota!=-1) {
- return $this->userQuota;
+ private function getQuota($user) {
+ if(in_array($user, $this->userQuota)) {
+ return $this->userQuota[$user];
}
- $userQuota=OC_Preferences::getValue(OC_User::getUser(),'files','quota','default');
+ $userQuota=OC_Preferences::getValue($user, 'files', 'quota', 'default');
if($userQuota=='default') {
- $userQuota=OC_AppConfig::getValue('files','default_quota','none');
+ $userQuota=OC_AppConfig::getValue('files', 'default_quota', 'none');
}
if($userQuota=='none') {
- $this->userQuota=0;
+ $this->userQuota[$user]=-1;
}else{
- $this->userQuota=OC_Helper::computerFileSize($userQuota);
+ $this->userQuota[$user]=OC_Helper::computerFileSize($userQuota);
}
- return $this->userQuota;
+ return $this->userQuota[$user];
}
/**
- * get the free space in the users home folder
+ * get the free space in the path's owner home folder
+ * @param path
* @return int
*/
- private function getFreeSpace() {
- $rootInfo=OC_FileCache_Cached::get('');
+ private function getFreeSpace($path) {
+ $storage=OC_Filesystem::getStorage($path);
+ $owner=$storage->getOwner($path);
+
+ $totalSpace=$this->getQuota($owner);
+ if($totalSpace==-1) {
+ return -1;
+ }
+
+ $rootInfo=OC_FileCache::get('', "/".$owner."/files");
// TODO Remove after merge of share_api
- if (OC_FileCache::inCache('/Shared')) {
- $sharedInfo=OC_FileCache_Cached::get('/Shared');
+ if (OC_FileCache::inCache('/Shared', "/".$owner."/files")) {
+ $sharedInfo=OC_FileCache::get('/Shared', "/".$owner."/files");
} else {
$sharedInfo = null;
}
$usedSpace=isset($rootInfo['size'])?$rootInfo['size']:0;
$usedSpace=isset($sharedInfo['size'])?$usedSpace-$sharedInfo['size']:$usedSpace;
- $totalSpace=$this->getQuota();
- if($totalSpace==0) {
- return 0;
- }
return $totalSpace-$usedSpace;
}
-
- public function postFree_space($path,$space) {
- $free=$this->getFreeSpace();
- if($free==0) {
+
+ public function postFree_space($path, $space) {
+ $free=$this->getFreeSpace($path);
+ if($free==-1) {
return $space;
}
- return min($free,$space);
+ return min($free, $space);
}
- public function preFile_put_contents($path,$data) {
+ public function preFile_put_contents($path, $data) {
if (is_resource($data)) {
$data = '';//TODO: find a way to get the length of the stream without emptying it
}
- return (strlen($data)<$this->getFreeSpace() or $this->getFreeSpace()==0);
+ return (strlen($data)<$this->getFreeSpace($path) or $this->getFreeSpace($path)==-1);
}
- public function preCopy($path1,$path2) {
- if(!self::$rootView){
+ public function preCopy($path1, $path2) {
+ if(!self::$rootView) {
self::$rootView = new OC_FilesystemView('');
}
- return (self::$rootView->filesize($path1)<$this->getFreeSpace() or $this->getFreeSpace()==0);
+ return (self::$rootView->filesize($path1)<$this->getFreeSpace($path2) or $this->getFreeSpace($path2)==-1);
}
- public function preFromTmpFile($tmpfile,$path) {
- return (filesize($tmpfile)<$this->getFreeSpace() or $this->getFreeSpace()==0);
+ public function preFromTmpFile($tmpfile, $path) {
+ return (filesize($tmpfile)<$this->getFreeSpace($path) or $this->getFreeSpace($path)==-1);
}
- public function preFromUploadedFile($tmpfile,$path) {
- return (filesize($tmpfile)<$this->getFreeSpace() or $this->getFreeSpace()==0);
+ public function preFromUploadedFile($tmpfile, $path) {
+ return (filesize($tmpfile)<$this->getFreeSpace($path) or $this->getFreeSpace($path)==-1);
}
}