Skip to content

Commit

Permalink
Merge pull request #12 from scambra/fixes
Browse files Browse the repository at this point in the history
check free space using folder's owner
  • Loading branch information
icewind1991 committed Oct 23, 2012
2 parents fbe059a + 2b5133a commit ab94409
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 26 deletions.
2 changes: 1 addition & 1 deletion apps/files/ajax/upload.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
foreach($files['size'] as $size) {
$totalSize+=$size;
}
if($totalSize>OC_Filesystem::free_space('/')) {
if($totalSize>OC_Filesystem::free_space($dir)){
OCP\JSON::error(array("data" => array( "message" => "Not enough space available" )));
exit();
}
Expand Down
2 changes: 1 addition & 1 deletion apps/files/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@
$post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size'));
$maxUploadFilesize = min($upload_max_filesize, $post_max_size);

$freeSpace=OC_Filesystem::free_space('/');
$freeSpace=OC_Filesystem::free_space($dir);
$freeSpace=max($freeSpace,0);
$maxUploadFilesize = min($maxUploadFilesize ,$freeSpace);

Expand Down
8 changes: 8 additions & 0 deletions apps/files_sharing/lib/sharedstorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,14 @@ private function getInternalPath($path) {
return $internalPath;
}

public function getOwner($target) {
$shared_item = OCP\Share::getItemSharedWith('folder', $target, OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
if ($shared_item) {
return $shared_item[0]["uid_owner"];
}
return null;
}

public function mkdir($path) {
if ($path == '' || $path == '/' || !$this->isCreatable(dirname($path))) {
return false;
Expand Down
54 changes: 30 additions & 24 deletions lib/fileproxy/quota.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,52 +27,58 @@

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');
}
if($userQuota=='none') {
$this->userQuota=0;
$this->userQuota[$user]=0;
}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==0) {
return 0;
}

$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();
$free=$this->getFreeSpace($path);
if($free==0) {
return $space;
}
Expand All @@ -83,21 +89,21 @@ 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)==0);
}

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)==0);
}

public function preFromTmpFile($tmpfile,$path) {
return (filesize($tmpfile)<$this->getFreeSpace() or $this->getFreeSpace()==0);
return (filesize($tmpfile)<$this->getFreeSpace($path) or $this->getFreeSpace($path)==0);
}

public function preFromUploadedFile($tmpfile,$path) {
return (filesize($tmpfile)<$this->getFreeSpace() or $this->getFreeSpace()==0);
return (filesize($tmpfile)<$this->getFreeSpace($path) or $this->getFreeSpace($path)==0);
}
}
1 change: 1 addition & 0 deletions lib/filestorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,5 @@ abstract public function getLocalFolder($path);// get a path to a local version
* returning true for other changes in the folder is optional
*/
abstract public function hasUpdated($path,$time);
abstract public function getOwner($path);
}
9 changes: 9 additions & 0 deletions lib/filestorage/common.php
Original file line number Diff line number Diff line change
Expand Up @@ -279,4 +279,13 @@ protected function searchInDir($query,$dir='') {
public function hasUpdated($path,$time) {
return $this->filemtime($path)>$time;
}

/**
* get the owner of a path
* @param $path The path to get the owner
* @return string uid or false
*/
public function getOwner($path) {
return OC_User::getUser();
}
}

0 comments on commit ab94409

Please sign in to comment.