. * */ /** * user quota managment */ class OC_FileProxy_Quota extends OC_FileProxy{ static $rootView; private $userQuota=array(); /** * get the quota for the user * @param user * @return int */ private function getQuota($user) { if(in_array($user, $this->userQuota)) { return $this->userQuota[$user]; } $userQuota=OC_Preferences::getValue($user, 'files', 'quota', 'default'); if($userQuota=='default') { $userQuota=OC_AppConfig::getValue('files', 'default_quota', 'none'); } if($userQuota=='none') { $this->userQuota[$user]=-1; }else{ $this->userQuota[$user]=OC_Helper::computerFileSize($userQuota); } return $this->userQuota[$user]; } /** * get the free space in the path's owner home folder * @param path * @return int */ 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', "/".$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; return $totalSpace-$usedSpace; } public function postFree_space($path, $space) { $free=$this->getFreeSpace($path); if($free==-1) { return $space; } return min($free, $space); } 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($path) or $this->getFreeSpace($path)==-1); } public function preCopy($path1, $path2) { if(!self::$rootView) { self::$rootView = new OC_FilesystemView(''); } return (self::$rootView->filesize($path1)<$this->getFreeSpace($path2) or $this->getFreeSpace($path2)==-1); } 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($path) or $this->getFreeSpace($path)==-1); } }