implement storage size limits
This commit is contained in:
parent
daf5daa2d3
commit
64152ac956
@ -184,8 +184,6 @@ class RedDirectory extends DAV\Node implements DAV\ICollection {
|
|||||||
$filesize = 0;
|
$filesize = 0;
|
||||||
$hash = random_string();
|
$hash = random_string();
|
||||||
|
|
||||||
dbg(1);
|
|
||||||
|
|
||||||
$r = q("INSERT INTO attach ( aid, uid, hash, filename, folder, filetype, filesize, revision, data, created, edited, allow_cid, allow_gid, deny_cid, deny_gid )
|
$r = q("INSERT INTO attach ( aid, uid, hash, filename, folder, filetype, filesize, revision, data, created, edited, allow_cid, allow_gid, deny_cid, deny_gid )
|
||||||
VALUES ( %d, %d, '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ",
|
VALUES ( %d, %d, '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ",
|
||||||
intval($c[0]['channel_account_id']),
|
intval($c[0]['channel_account_id']),
|
||||||
@ -212,9 +210,36 @@ dbg(1);
|
|||||||
intval($c[0]['channel_id'])
|
intval($c[0]['channel_id'])
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$r = q("select filesize from attach where hash = '%s' and uid = %d limit 1",
|
||||||
|
dbesc($hash),
|
||||||
|
intval($c[0]['channel_id'])
|
||||||
|
);
|
||||||
|
|
||||||
dbg(0);
|
// FIXME - delete attached file resource if using OS storage
|
||||||
|
|
||||||
|
$maxfilesize = get_config('system','maxfilesize');
|
||||||
|
|
||||||
|
if(($maxfilesize) && ($r[0]['filesize'] > $maxfilesize)) {
|
||||||
|
q("delete from attach where hash = '%s' and uid = %d limit 1",
|
||||||
|
dbesc($hash),
|
||||||
|
intval($c[0]['channel_id'])
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$limit = service_class_fetch($c[0]['channel_id'],'attach_upload_limit');
|
||||||
|
if($limit !== false) {
|
||||||
|
$x = q("select sum(filesize) as total from attach where uid = %d ",
|
||||||
|
intval($c[0]['channel_id'])
|
||||||
|
);
|
||||||
|
if(($x) && ($x[0]['total'] + $r[0]['filesize'] > $limit)) {
|
||||||
|
q("delete from attach where hash = '%s' and uid = %d limit 1",
|
||||||
|
dbesc($hash),
|
||||||
|
intval($c[0]['channel_id'])
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -307,14 +332,14 @@ dbg(0);
|
|||||||
$folder = '';
|
$folder = '';
|
||||||
|
|
||||||
for($x = 1; $x < count($path_arr); $x ++) {
|
for($x = 1; $x < count($path_arr); $x ++) {
|
||||||
dbg(1);
|
|
||||||
$r = q("select id, hash, filename, flags from attach where folder = '%s' and filename = '%s' and (flags & %d)",
|
$r = q("select id, hash, filename, flags from attach where folder = '%s' and filename = '%s' and (flags & %d)",
|
||||||
dbesc($folder),
|
dbesc($folder),
|
||||||
dbesc($path_arr[$x]),
|
dbesc($path_arr[$x]),
|
||||||
intval($channel_id),
|
intval($channel_id),
|
||||||
intval(ATTACH_FLAG_DIR)
|
intval(ATTACH_FLAG_DIR)
|
||||||
);
|
);
|
||||||
dbg(0);
|
|
||||||
if($r && ( $r[0]['flags'] & ATTACH_FLAG_DIR)) {
|
if($r && ( $r[0]['flags'] & ATTACH_FLAG_DIR)) {
|
||||||
$folder = $r[0]['hash'];
|
$folder = $r[0]['hash'];
|
||||||
$path = $path . '/' . $r[0]['filename'];
|
$path = $path . '/' . $r[0]['filename'];
|
||||||
@ -377,7 +402,6 @@ class RedFile extends DAV\Node implements DAV\IFile {
|
|||||||
logger('RedFile::put: ' . basename($this->name));
|
logger('RedFile::put: ' . basename($this->name));
|
||||||
// logger('put():' . stream_get_contents($data));
|
// logger('put():' . stream_get_contents($data));
|
||||||
|
|
||||||
dbg(1);
|
|
||||||
$r = q("update attach set data = '%s' where hash = '%s' and uid = %d limit 1",
|
$r = q("update attach set data = '%s' where hash = '%s' and uid = %d limit 1",
|
||||||
dbesc(stream_get_contents($data)),
|
dbesc(stream_get_contents($data)),
|
||||||
dbesc($this->data['hash']),
|
dbesc($this->data['hash']),
|
||||||
@ -387,8 +411,35 @@ dbg(1);
|
|||||||
dbesc($this->data['hash']),
|
dbesc($this->data['hash']),
|
||||||
intval($this->data['uid'])
|
intval($this->data['uid'])
|
||||||
);
|
);
|
||||||
dbg(0);
|
|
||||||
|
|
||||||
|
$r = q("select filesize from attach where hash = '%s' and uid = %d limit 1",
|
||||||
|
dbesc($this->data['hash']),
|
||||||
|
intval($c[0]['channel_id'])
|
||||||
|
);
|
||||||
|
|
||||||
|
$maxfilesize = get_config('system','maxfilesize');
|
||||||
|
|
||||||
|
if(($maxfilesize) && ($r[0]['filesize'] > $maxfilesize)) {
|
||||||
|
q("delete from attach where hash = '%s' and uid = %d limit 1",
|
||||||
|
dbesc($this->data['hash']),
|
||||||
|
intval($c[0]['channel_id'])
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$limit = service_class_fetch($c[0]['channel_id'],'attach_upload_limit');
|
||||||
|
if($limit !== false) {
|
||||||
|
$x = q("select sum(filesize) as total from attach where uid = %d ",
|
||||||
|
intval($c[0]['channel_id'])
|
||||||
|
);
|
||||||
|
if(($x) && ($x[0]['total'] + $r[0]['filesize'] > $limit)) {
|
||||||
|
q("delete from attach where hash = '%s' and uid = %d limit 1",
|
||||||
|
dbesc($this->data['hash']),
|
||||||
|
intval($c[0]['channel_id'])
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user