mirror of
https://github.com/nextcloud/server.git
synced 2026-06-12 10:10:49 -04:00
Merge pull request #22443 from nextcloud/backport/22421/stable18
[stable18] show better quota warning for group folders and external storage
This commit is contained in:
commit
07c188e7e3
4 changed files with 61 additions and 29 deletions
|
|
@ -31,6 +31,7 @@ use OC\Files\FileInfo;
|
|||
use OC\Files\Storage\Wrapper\Quota;
|
||||
use OCA\DAV\Connector\Sabre\Directory;
|
||||
use OCP\Files\ForbiddenException;
|
||||
use OCP\Files\Mount\IMountPoint;
|
||||
|
||||
class TestViewDirectory extends \OC\Files\View {
|
||||
|
||||
|
|
@ -98,7 +99,7 @@ class DirectoryTest extends \Test\TestCase {
|
|||
return new Directory($this->view, $this->info);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function testDeleteRootFolderFails() {
|
||||
$this->expectException(\Sabre\DAV\Exception\Forbidden::class);
|
||||
|
||||
|
|
@ -111,7 +112,7 @@ class DirectoryTest extends \Test\TestCase {
|
|||
$dir->delete();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function testDeleteForbidden() {
|
||||
$this->expectException(\OCA\DAV\Connector\Sabre\Exception\Forbidden::class);
|
||||
|
||||
|
|
@ -130,7 +131,7 @@ class DirectoryTest extends \Test\TestCase {
|
|||
$dir->delete();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function testDeleteFolderWhenAllowed() {
|
||||
// deletion allowed
|
||||
$this->info->expects($this->once())
|
||||
|
|
@ -147,7 +148,7 @@ class DirectoryTest extends \Test\TestCase {
|
|||
$dir->delete();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function testDeleteFolderFailsWhenNotAllowed() {
|
||||
$this->expectException(\Sabre\DAV\Exception\Forbidden::class);
|
||||
|
||||
|
|
@ -159,7 +160,7 @@ class DirectoryTest extends \Test\TestCase {
|
|||
$dir->delete();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function testDeleteFolderThrowsWhenDeletionFailed() {
|
||||
$this->expectException(\Sabre\DAV\Exception\Forbidden::class);
|
||||
|
||||
|
|
@ -217,7 +218,7 @@ class DirectoryTest extends \Test\TestCase {
|
|||
$dir->getChildren();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function testGetChildrenNoPermission() {
|
||||
$this->expectException(\Sabre\DAV\Exception\Forbidden::class);
|
||||
|
||||
|
|
@ -230,7 +231,7 @@ class DirectoryTest extends \Test\TestCase {
|
|||
$dir->getChildren();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function testGetChildNoPermission() {
|
||||
$this->expectException(\Sabre\DAV\Exception\NotFound::class);
|
||||
|
||||
|
|
@ -242,7 +243,7 @@ class DirectoryTest extends \Test\TestCase {
|
|||
$dir->getChild('test');
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function testGetChildThrowStorageNotAvailableException() {
|
||||
$this->expectException(\Sabre\DAV\Exception\ServiceUnavailable::class);
|
||||
|
||||
|
|
@ -254,7 +255,7 @@ class DirectoryTest extends \Test\TestCase {
|
|||
$dir->getChild('.');
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function testGetChildThrowInvalidPath() {
|
||||
$this->expectException(\OCA\DAV\Connector\Sabre\Exception\InvalidPath::class);
|
||||
|
||||
|
|
@ -269,9 +270,12 @@ class DirectoryTest extends \Test\TestCase {
|
|||
}
|
||||
|
||||
public function testGetQuotaInfoUnlimited() {
|
||||
$mountPoint = $this->createMock(IMountPoint::class);
|
||||
$storage = $this->getMockBuilder(Quota::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$mountPoint->method('getStorage')
|
||||
->willReturn($storage);
|
||||
|
||||
$storage->expects($this->any())
|
||||
->method('instanceOfStorage')
|
||||
|
|
@ -292,17 +296,20 @@ class DirectoryTest extends \Test\TestCase {
|
|||
->will($this->returnValue(200));
|
||||
|
||||
$this->info->expects($this->once())
|
||||
->method('getStorage')
|
||||
->will($this->returnValue($storage));
|
||||
->method('getMountPoint')
|
||||
->willReturn($mountPoint);
|
||||
|
||||
$dir = new Directory($this->view, $this->info);
|
||||
$this->assertEquals([200, -3], $dir->getQuotaInfo()); //200 used, unlimited
|
||||
}
|
||||
|
||||
public function testGetQuotaInfoSpecific() {
|
||||
$mountPoint = $this->createMock(IMountPoint::class);
|
||||
$storage = $this->getMockBuilder(Quota::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$mountPoint->method('getStorage')
|
||||
->willReturn($storage);
|
||||
|
||||
$storage->expects($this->any())
|
||||
->method('instanceOfStorage')
|
||||
|
|
@ -324,8 +331,8 @@ class DirectoryTest extends \Test\TestCase {
|
|||
->will($this->returnValue(200));
|
||||
|
||||
$this->info->expects($this->once())
|
||||
->method('getStorage')
|
||||
->will($this->returnValue($storage));
|
||||
->method('getMountPoint')
|
||||
->willReturn($mountPoint);
|
||||
|
||||
$dir = new Directory($this->view, $this->info);
|
||||
$this->assertEquals([200, 800], $dir->getQuotaInfo()); //200 used, 800 free
|
||||
|
|
@ -404,7 +411,7 @@ class DirectoryTest extends \Test\TestCase {
|
|||
$this->assertTrue($targetNode->moveInto(basename($destination), $source, $sourceNode));
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function testFailingMove() {
|
||||
$this->expectException(\Sabre\DAV\Exception\Forbidden::class);
|
||||
$this->expectExceptionMessage('Could not copy directory b, target exists');
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@
|
|||
$('#free_space').val(response.data.freeSpace);
|
||||
$('#upload.button').attr('data-original-title', response.data.maxHumanFilesize);
|
||||
$('#usedSpacePercent').val(response.data.usedSpacePercent);
|
||||
$('#usedSpacePercent').data('mount-type', response.data.mountType);
|
||||
$('#owner').val(response.data.owner);
|
||||
$('#ownerDisplayName').val(response.data.ownerDisplayName);
|
||||
Files.displayStorageWarnings();
|
||||
|
|
@ -153,21 +154,30 @@
|
|||
|
||||
var usedSpacePercent = $('#usedSpacePercent').val(),
|
||||
owner = $('#owner').val(),
|
||||
ownerDisplayName = $('#ownerDisplayName').val();
|
||||
ownerDisplayName = $('#ownerDisplayName').val(),
|
||||
mountType = $('#usedSpacePercent').data('mount-type');
|
||||
if (usedSpacePercent > 98) {
|
||||
if (owner !== OC.getCurrentUser().uid) {
|
||||
OC.Notification.show(t('files', 'Storage of {owner} is full, files can not be updated or synced anymore!',
|
||||
{owner: ownerDisplayName}), {type: 'error'}
|
||||
);
|
||||
return;
|
||||
} else if (mountType === 'group') {
|
||||
OC.Notification.show(t('files',
|
||||
'This group folder is full, files can not be updated or synced anymore!'),
|
||||
{type: 'error'}
|
||||
);
|
||||
} else if (mountType === 'external') {
|
||||
OC.Notification.show(t('files',
|
||||
'This external storage is full, files can not be updated or synced anymore!'),
|
||||
{type : 'error'}
|
||||
);
|
||||
} else {
|
||||
OC.Notification.show(t('files',
|
||||
'Your storage is full, files can not be updated or synced anymore!'),
|
||||
{type: 'error'}
|
||||
);
|
||||
}
|
||||
OC.Notification.show(t('files',
|
||||
'Your storage is full, files can not be updated or synced anymore!'),
|
||||
{type : 'error'}
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (usedSpacePercent > 90) {
|
||||
} else if (usedSpacePercent > 90) {
|
||||
if (owner !== OC.getCurrentUser().uid) {
|
||||
OC.Notification.show(t('files', 'Storage of {owner} is almost full ({usedSpacePercent}%)',
|
||||
{
|
||||
|
|
@ -178,12 +188,24 @@
|
|||
type: 'error'
|
||||
}
|
||||
);
|
||||
return;
|
||||
} else if (mountType === 'group') {
|
||||
OC.Notification.show(t('files',
|
||||
'This group folder is almost full ({usedSpacePercent}%)',
|
||||
{usedSpacePercent: usedSpacePercent}),
|
||||
{type : 'error'}
|
||||
);
|
||||
} else if (mountType === 'external') {
|
||||
OC.Notification.show(t('files',
|
||||
'This external storage is almost full ({usedSpacePercent}%)',
|
||||
{usedSpacePercent: usedSpacePercent}),
|
||||
{type : 'error'}
|
||||
);
|
||||
} else {
|
||||
OC.Notification.show(t('files', 'Your storage is almost full ({usedSpacePercent}%)',
|
||||
{usedSpacePercent: usedSpacePercent}),
|
||||
{type : 'error'}
|
||||
);
|
||||
}
|
||||
OC.Notification.show(t('files', 'Your storage is almost full ({usedSpacePercent}%)',
|
||||
{usedSpacePercent: usedSpacePercent}),
|
||||
{type : 'error'}
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ class Helper {
|
|||
'usedSpacePercent' => (int)$storageInfo['relative'],
|
||||
'owner' => $storageInfo['owner'],
|
||||
'ownerDisplayName' => $storageInfo['ownerDisplayName'],
|
||||
'mountType' => $storageInfo['mountType'],
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -494,7 +494,8 @@ class OC_Helper {
|
|||
$used = 0;
|
||||
}
|
||||
$quota = \OCP\Files\FileInfo::SPACE_UNLIMITED;
|
||||
$storage = $rootInfo->getStorage();
|
||||
$mount = $rootInfo->getMountPoint();
|
||||
$storage = $mount->getStorage();
|
||||
$sourceStorage = $storage;
|
||||
if ($storage->instanceOfStorage('\OCA\Files_Sharing\SharedStorage')) {
|
||||
$includeExtStorage = false;
|
||||
|
|
@ -552,6 +553,7 @@ class OC_Helper {
|
|||
'relative' => $relative,
|
||||
'owner' => $ownerId,
|
||||
'ownerDisplayName' => $ownerDisplayName,
|
||||
'mountType' => $mount->getMountType()
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue