re-implement/refactor getQuotaInfo() on DAV storage

This commit is contained in:
zotlabs 2018-06-14 20:40:25 -07:00
parent 4a028b6015
commit 7a144b90fb
4 changed files with 50 additions and 37 deletions

View File

@ -9,7 +9,7 @@ require_once('include/conversation.php');
class Home extends \Zotlabs\Web\Controller {
function init() {
$ret = array();
call_hooks('home_init',$ret);

View File

@ -333,6 +333,7 @@ class Browser extends DAV\Browser\Plugin {
$aclselect = null;
$lockstate = '';
$limit = 0;
if($this->auth->owner_id) {
$channel = channelx_by_n($this->auth->owner_id);
@ -343,10 +344,11 @@ class Browser extends DAV\Browser\Plugin {
$aclselect = ((local_channel() == $this->auth->owner_id) ? populate_acl($channel_acl,false, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_storage')) : '');
}
// Storage and quota for the account (all channels of the owner of this directory)!
$limit = engr_units_to_bytes(service_class_fetch($this->auth->owner_id, 'attach_upload_limit'));
}
// Storage and quota for the account (all channels of the owner of this directory)!
$limit = engr_units_to_bytes(service_class_fetch($owner, 'attach_upload_limit'));
if((! $limit) && get_config('system','cloud_report_disksize')) {
$limit = engr_units_to_bytes(disk_free_space('store'));
}

View File

@ -571,39 +571,6 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota, DAV\IMo
return datetime_convert('UTC', 'UTC', $r[0]['edited'], 'U');
}
/**
* @brief Return quota usage.
*
* @fixme Should guests relly see the used/free values from filesystem of the
* complete store directory?
*
* @return array with used and free values in bytes.
*/
public function getQuotaInfo() {
// values from the filesystem of the complete <i>store/</i> directory
$limit = disk_total_space('store');
$free = disk_free_space('store');
if ($this->auth->owner_id) {
$c = q("select * from channel where channel_id = %d and channel_removed = 0 limit 1",
intval($this->auth->owner_id)
);
$ulimit = engr_units_to_bytes(service_class_fetch($c[0]['channel_id'], 'attach_upload_limit'));
$limit = (($ulimit) ? $ulimit : $limit);
$x = q("select sum(filesize) as total from attach where aid = %d",
intval($c[0]['channel_account_id'])
);
$free = (($x) ? $limit - $x[0]['total'] : 0);
}
return array(
$limit - $free,
$free
);
}
/**
* @brief Array with all Directory and File DAV\\Node items for the given path.
@ -895,4 +862,48 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota, DAV\IMo
return false;
}
public function getQuotaInfo() {
/**
* Returns the quota information
*
* This method MUST return an array with 2 values, the first being the total used space,
* the second the available space (in bytes)
*/
$used = 0;
$limit = 0;
$free = 0;
if ($this->auth->owner_id) {
$channel = channelx_by_n($this->auth->owner_id);
if($channel) {
$r = q("SELECT SUM(filesize) AS total FROM attach WHERE aid = %d",
intval($channel['channel_account_id'])
);
$used = (($r) ? (float) $r[0]['total'] : 0);
$limit = (float) service_class_fetch($this->auth->owner_id, 'attach_upload_limit');
if($limit) {
// Don't let the result go negative
$free = (($limit > $used) ? $limit - $used : 0);
}
}
}
if(! $limit) {
$free = disk_free_space('store');
$used = disk_total_space('store') - $free;
}
// prevent integer overflow on 32-bit systems
if($used > (float) PHP_INT_MAX)
$used = PHP_INT_MAX;
if($free > (float) PHP_INT_MAX)
$free = PHP_INT_MAX;
return [ (int) $used, (int) $free ];
}
}

View File

@ -242,7 +242,7 @@ function tt($singular, $plural, $count, $ctx = ''){
if (! function_exists($f))
$f = 'string_plural_select_default';
$k = $f($count);
$k = $f(intval($count));
return is_array($t) ? $t[$k] : $t;
}