diff options
author | Morris Jobke <hey@morrisjobke.de> | 2016-06-28 09:02:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-28 09:02:03 +0200 |
commit | b6397ef73a765be807efe363703f27013fd50d7a (patch) | |
tree | 31fedc1887b2b3b50e720f1e006f9693cd671cff /apps | |
parent | 300f0965ae6528b370662ee39346bf6660aeaa5c (diff) | |
parent | 6670d3765881a1a7579bd96a523a90c2a52aec4a (diff) | |
download | nextcloud-server-b6397ef73a765be807efe363703f27013fd50d7a.tar.gz nextcloud-server-b6397ef73a765be807efe363703f27013fd50d7a.zip |
Merge pull request #236 from nextcloud/master-sync-upstream
[Master] sync upstream
Diffstat (limited to 'apps')
-rw-r--r-- | apps/comments/l10n/fi_FI.js | 3 | ||||
-rw-r--r-- | apps/comments/l10n/fi_FI.json | 3 | ||||
-rw-r--r-- | apps/comments/l10n/pl.js | 3 | ||||
-rw-r--r-- | apps/comments/l10n/pl.json | 3 | ||||
-rw-r--r-- | apps/federatedfilesharing/lib/FederatedShareProvider.php | 4 | ||||
-rw-r--r-- | apps/files/js/filelist.js | 22 | ||||
-rw-r--r-- | apps/files/tests/js/filelistSpec.js | 11 | ||||
-rw-r--r-- | apps/files_external/lib/AppInfo/Application.php | 4 | ||||
-rw-r--r-- | apps/files_sharing/lib/API/Share20OCS.php | 22 | ||||
-rw-r--r-- | apps/files_sharing/tests/API/Share20OCSTest.php | 77 | ||||
-rw-r--r-- | apps/files_sharing/tests/ApiTest.php | 16 | ||||
-rw-r--r-- | apps/systemtags/l10n/pl.js | 1 | ||||
-rw-r--r-- | apps/systemtags/l10n/pl.json | 1 |
13 files changed, 147 insertions, 23 deletions
diff --git a/apps/comments/l10n/fi_FI.js b/apps/comments/l10n/fi_FI.js index 7b4de946763..b541b9987fe 100644 --- a/apps/comments/l10n/fi_FI.js +++ b/apps/comments/l10n/fi_FI.js @@ -12,6 +12,9 @@ OC.L10N.register( "More comments..." : "Lisää kommentteja...", "Save" : "Tallenna", "Allowed characters {count} of {max}" : "Sallittujen merkkien määrä {count}/{max}", + "Error occurred while retrieving comment with id {id}" : "Virhe noutaessa kommenttia tunnisteella {id}", + "Error occurred while updating comment with id {id}" : "Virhe päivittäessä kommenttia tunnisteella {id}", + "Error occurred while posting comment" : "Virhe kommenttia lähettäessä", "{count} unread comments" : "{count} lukematonta kommenttia", "Comment" : "Kommentti", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentit</strong> tiedostoille <em>(aina listattu luettelossa)</em>", diff --git a/apps/comments/l10n/fi_FI.json b/apps/comments/l10n/fi_FI.json index 5e9bcc74402..b5be601d905 100644 --- a/apps/comments/l10n/fi_FI.json +++ b/apps/comments/l10n/fi_FI.json @@ -10,6 +10,9 @@ "More comments..." : "Lisää kommentteja...", "Save" : "Tallenna", "Allowed characters {count} of {max}" : "Sallittujen merkkien määrä {count}/{max}", + "Error occurred while retrieving comment with id {id}" : "Virhe noutaessa kommenttia tunnisteella {id}", + "Error occurred while updating comment with id {id}" : "Virhe päivittäessä kommenttia tunnisteella {id}", + "Error occurred while posting comment" : "Virhe kommenttia lähettäessä", "{count} unread comments" : "{count} lukematonta kommenttia", "Comment" : "Kommentti", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentit</strong> tiedostoille <em>(aina listattu luettelossa)</em>", diff --git a/apps/comments/l10n/pl.js b/apps/comments/l10n/pl.js index d4a492e1da2..b8df4dea02b 100644 --- a/apps/comments/l10n/pl.js +++ b/apps/comments/l10n/pl.js @@ -12,6 +12,9 @@ OC.L10N.register( "More comments..." : "Więcej komentarzy...", "Save" : "Zapisz", "Allowed characters {count} of {max}" : "Dozwolone znaki {count} z {max}", + "Error occurred while retrieving comment with id {id}" : "W trakcie otrzymywania komentarza o identyfikatorze {id} wystąpił błąd.", + "Error occurred while updating comment with id {id}" : "W trakcie aktualizacji komentarza o identyfikatorze {id} wystąpił błąd.", + "Error occurred while posting comment" : "Podczas wysyłania komentarza wystąpił błąd", "{count} unread comments" : "{count} nieprzeczytanych komentarzy", "Comment" : "Komentarz", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentarze</strong> dla plików <em>(zawsze wypisane w strumieniu)</em>", diff --git a/apps/comments/l10n/pl.json b/apps/comments/l10n/pl.json index 78e9f0ff210..47e4b101f98 100644 --- a/apps/comments/l10n/pl.json +++ b/apps/comments/l10n/pl.json @@ -10,6 +10,9 @@ "More comments..." : "Więcej komentarzy...", "Save" : "Zapisz", "Allowed characters {count} of {max}" : "Dozwolone znaki {count} z {max}", + "Error occurred while retrieving comment with id {id}" : "W trakcie otrzymywania komentarza o identyfikatorze {id} wystąpił błąd.", + "Error occurred while updating comment with id {id}" : "W trakcie aktualizacji komentarza o identyfikatorze {id} wystąpił błąd.", + "Error occurred while posting comment" : "Podczas wysyłania komentarza wystąpił błąd", "{count} unread comments" : "{count} nieprzeczytanych komentarzy", "Comment" : "Komentarz", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentarze</strong> dla plików <em>(zawsze wypisane w strumieniu)</em>", diff --git a/apps/federatedfilesharing/lib/FederatedShareProvider.php b/apps/federatedfilesharing/lib/FederatedShareProvider.php index 6f9b6644eed..40e2e8a472f 100644 --- a/apps/federatedfilesharing/lib/FederatedShareProvider.php +++ b/apps/federatedfilesharing/lib/FederatedShareProvider.php @@ -473,6 +473,8 @@ class FederatedShareProvider implements IShareProvider { $isOwner = false; + $this->removeShareFromTable($share); + // if the local user is the owner we can send the unShare request directly... if ($this->userManager->userExists($share->getShareOwner())) { $this->notifications->sendRemoteUnShare($remote, $share->getId(), $share->getToken()); @@ -494,8 +496,6 @@ class FederatedShareProvider implements IShareProvider { } $this->notifications->sendRevokeShare($remote, $remoteId, $share->getToken()); } - - $this->removeShareFromTable($share); } /** diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 3ab5032599c..e483882fcc5 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -2351,22 +2351,36 @@ * @param filter */ setFilter:function(filter) { + var total = 0; this._filter = filter; this.fileSummary.setFilter(filter, this.files); + total = this.fileSummary.getTotal(); if (!this.$el.find('.mask').exists()) { this.hideIrrelevantUIWhenNoFilesMatch(); } var that = this; + var visibleCount = 0; filter = filter.toLowerCase(); - this.$fileList.find('tr').each(function(i,e) { - var $e = $(e); + + function filterRows(tr) { + var $e = $(tr); if ($e.data('file').toString().toLowerCase().indexOf(filter) === -1) { $e.addClass('hidden'); } else { + visibleCount++; $e.removeClass('hidden'); } - }); - that.$container.trigger('scroll'); + } + + var $trs = this.$fileList.find('tr'); + do { + _.each($trs, filterRows); + if (visibleCount < total) { + $trs = this._nextPage(false); + } + } while (visibleCount < total); + + this.$container.trigger('scroll'); }, hideIrrelevantUIWhenNoFilesMatch:function() { if (this._filter && this.fileSummary.summary.totalDirs + this.fileSummary.summary.totalFiles === 0) { diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index 44f271d8084..ae4b75f7771 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -989,6 +989,17 @@ describe('OCA.Files.FileList tests', function() { expect($summary.find('.info').text()).toEqual("1 folder and 3 files"); expect($nofilterresults.hasClass('hidden')).toEqual(true); }); + it('filters the list of non-rendered rows using filter()', function() { + var $summary = $('#filestable .summary'); + var $nofilterresults = fileList.$el.find(".nofilterresults"); + fileList.setFiles(generateFiles(0, 64)); + + fileList.setFilter('63'); + expect($('#fileList tr:not(.hidden)').length).toEqual(1); + expect($summary.hasClass('hidden')).toEqual(false); + expect($summary.find('.info').text()).toEqual("0 folders and 1 file matches '63'"); + expect($nofilterresults.hasClass('hidden')).toEqual(true); + }); it('hides the emptyfiles notice when using filter()', function() { expect(fileList.files.length).toEqual(0); expect(fileList.files).toEqual([]); diff --git a/apps/files_external/lib/AppInfo/Application.php b/apps/files_external/lib/AppInfo/Application.php index cbbcbe9c319..0ee4e9b3d5c 100644 --- a/apps/files_external/lib/AppInfo/Application.php +++ b/apps/files_external/lib/AppInfo/Application.php @@ -52,6 +52,10 @@ class Application extends App implements IBackendProvider, IAuthMechanismProvide $backendService->registerBackendProvider($this); $backendService->registerAuthMechanismProvider($this); + // force-load auth mechanisms since some will register hooks + // TODO: obsolete these and use the TokenProvider to get the user's password from the session + $this->getAuthMechanisms(); + // app developers: do NOT depend on this! it will disappear with oC 9.0! \OC::$server->getEventDispatcher()->dispatch( 'OCA\\Files_External::loadAdditionalBackends' diff --git a/apps/files_sharing/lib/API/Share20OCS.php b/apps/files_sharing/lib/API/Share20OCS.php index 3d6a715be99..436b8d15ac8 100644 --- a/apps/files_sharing/lib/API/Share20OCS.php +++ b/apps/files_sharing/lib/API/Share20OCS.php @@ -354,7 +354,8 @@ class Share20OCS { $share->setPermissions( \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | - \OCP\Constants::PERMISSION_UPDATE + \OCP\Constants::PERMISSION_UPDATE | + \OCP\Constants::PERMISSION_DELETE ); } else { $share->setPermissions(\OCP\Constants::PERMISSION_READ); @@ -591,7 +592,7 @@ class Share20OCS { $newPermissions = null; if ($publicUpload === 'true') { - $newPermissions = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE; + $newPermissions = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE; } else if ($publicUpload === 'false') { $newPermissions = \OCP\Constants::PERMISSION_READ; } @@ -602,13 +603,21 @@ class Share20OCS { if ($newPermissions !== null && $newPermissions !== \OCP\Constants::PERMISSION_READ && - $newPermissions !== (\OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE) && - $newPermissions !== (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE)) { + // legacy + $newPermissions !== (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE) && + // correct + $newPermissions !== (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE) + ) { $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); return new \OC_OCS_Result(null, 400, $this->l->t('Can\'t change permissions for public share links')); } - if ($newPermissions === (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE)) { + if ( + // legacy + $newPermissions === (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE) || + // correct + $newPermissions === (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE) + ) { if (!$this->shareManager->shareApiLinkAllowPublicUpload()) { $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); return new \OC_OCS_Result(null, 403, $this->l->t('Public upload disabled by the administrator')); @@ -618,6 +627,9 @@ class Share20OCS { $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); return new \OC_OCS_Result(null, 400, $this->l->t('Public upload is only possible for publicly shared folders')); } + + // normalize to correct public upload permissions + $newPermissions = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE; } if ($newPermissions !== null) { diff --git a/apps/files_sharing/tests/API/Share20OCSTest.php b/apps/files_sharing/tests/API/Share20OCSTest.php index b760a0f47a0..6435c992f25 100644 --- a/apps/files_sharing/tests/API/Share20OCSTest.php +++ b/apps/files_sharing/tests/API/Share20OCSTest.php @@ -1035,7 +1035,7 @@ class Share20OCSTest extends \Test\TestCase { $this->callback(function (\OCP\Share\IShare $share) use ($path) { return $share->getNode() === $path && $share->getShareType() === \OCP\Share::SHARE_TYPE_LINK && - $share->getPermissions() === \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_DELETE && + $share->getPermissions() === (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE) && $share->getSharedBy() === 'currentUser' && $share->getPassword() === null && $share->getExpirationDate() === null; @@ -1366,7 +1366,7 @@ class Share20OCSTest extends \Test\TestCase { $date = new \DateTime('2000-01-01'); $date->setTime(0,0,0); - return $share->getPermissions() === \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE && \OCP\Constants::PERMISSION_DELETE && + return $share->getPermissions() === (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE) && $share->getPassword() === 'password' && $share->getExpirationDate() == $date; }) @@ -1379,6 +1379,44 @@ class Share20OCSTest extends \Test\TestCase { $this->assertEquals($expected->getData(), $result->getData()); } + /** + * @dataProvider publicUploadParamsProvider + */ + public function testUpdateLinkShareEnablePublicUpload($params) { + $ocs = $this->mockFormatShare(); + + $folder = $this->getMock('\OCP\Files\Folder'); + + $share = \OC::$server->getShareManager()->newShare(); + $share->setPermissions(\OCP\Constants::PERMISSION_ALL) + ->setSharedBy($this->currentUser->getUID()) + ->setShareType(\OCP\Share::SHARE_TYPE_LINK) + ->setPassword('password') + ->setNode($folder); + + $this->request + ->method('getParam') + ->will($this->returnValueMap($params)); + + $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); + $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); + $this->shareManager->method('getSharedWith')->willReturn([]); + + $this->shareManager->expects($this->once())->method('updateShare')->with( + $this->callback(function (\OCP\Share\IShare $share) { + return $share->getPermissions() === (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE) && + $share->getPassword() === 'password' && + $share->getExpirationDate() === null; + }) + )->will($this->returnArgument(0)); + + $expected = new \OC_OCS_Result(null); + $result = $ocs->updateShare(42); + + $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertEquals($expected->getData(), $result->getData()); + } + public function testUpdateLinkShareInvalidDate() { $ocs = $this->mockFormatShare(); @@ -1408,7 +1446,30 @@ class Share20OCSTest extends \Test\TestCase { $this->assertEquals($expected->getData(), $result->getData()); } - public function testUpdateLinkSharePublicUploadNotAllowed() { + public function publicUploadParamsProvider() { + return [ + [[ + ['publicUpload', null, 'true'], + ['expireDate', '', null], + ['password', '', 'password'], + ]], [[ + // legacy had no delete + ['permissions', null, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE], + ['expireDate', '', null], + ['password', '', 'password'], + ]], [[ + // correct + ['permissions', null, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE], + ['expireDate', '', null], + ['password', '', 'password'], + ]], + ]; + } + + /** + * @dataProvider publicUploadParamsProvider + */ + public function testUpdateLinkSharePublicUploadNotAllowed($params) { $ocs = $this->mockFormatShare(); $folder = $this->getMock('\OCP\Files\Folder'); @@ -1421,11 +1482,7 @@ class Share20OCSTest extends \Test\TestCase { $this->request ->method('getParam') - ->will($this->returnValueMap([ - ['publicUpload', null, 'true'], - ['expireDate', '', null], - ['password', '', 'password'], - ])); + ->will($this->returnValueMap($params)); $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(false); @@ -1585,7 +1642,7 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->expects($this->once())->method('updateShare')->with( $this->callback(function (\OCP\Share\IShare $share) use ($date) { - return $share->getPermissions() === \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_DELETE && + return $share->getPermissions() === (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE) && $share->getPassword() === 'password' && $share->getExpirationDate() === $date; }) @@ -1625,7 +1682,7 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->expects($this->once())->method('updateShare')->with( $this->callback(function (\OCP\Share\IShare $share) use ($date) { - return $share->getPermissions() === \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_DELETE && + return $share->getPermissions() === (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE) && $share->getPassword() === 'password' && $share->getExpirationDate() === $date; }) diff --git a/apps/files_sharing/tests/ApiTest.php b/apps/files_sharing/tests/ApiTest.php index 058b0c4758c..40c9085353c 100644 --- a/apps/files_sharing/tests/ApiTest.php +++ b/apps/files_sharing/tests/ApiTest.php @@ -257,7 +257,13 @@ class ApiTest extends TestCase { $this->assertTrue($result->succeeded()); $data = $result->getData(); - $this->assertEquals(7, $data['permissions']); + $this->assertEquals( + \OCP\Constants::PERMISSION_READ | + \OCP\Constants::PERMISSION_CREATE | + \OCP\Constants::PERMISSION_UPDATE | + \OCP\Constants::PERMISSION_DELETE, + $data['permissions'] + ); $this->assertEmpty($data['expiration']); $this->assertTrue(is_string($data['token'])); @@ -1081,7 +1087,13 @@ class ApiTest extends TestCase { $this->assertTrue($result->succeeded()); $share1 = $this->shareManager->getShareById($share1->getFullId()); - $this->assertEquals(7, $share1->getPermissions()); + $this->assertEquals( + \OCP\Constants::PERMISSION_READ | + \OCP\Constants::PERMISSION_CREATE | + \OCP\Constants::PERMISSION_UPDATE | + \OCP\Constants::PERMISSION_DELETE, + $share1->getPermissions() + ); // cleanup $this->shareManager->deleteShare($share1); diff --git a/apps/systemtags/l10n/pl.js b/apps/systemtags/l10n/pl.js index f5e4775d540..fca05665ec8 100644 --- a/apps/systemtags/l10n/pl.js +++ b/apps/systemtags/l10n/pl.js @@ -14,6 +14,7 @@ OC.L10N.register( "%1$s updated system tag %3$s to %2$s" : "%1$s zaktualizowany system etykiet%3$s do %2$s", "%1$s assigned system tag %3$s to %2$s" : "%1$s przypisywalny system etykiet%3$s do %2$s", "%1$s unassigned system tag %3$s from %2$s" : "%1$s nieprzypisany system etykiet %3$s z %2$s", + "%s (restricted)" : "%s (ograniczone)", "%s (invisible)" : "%s (niewidoczny)", "No files in here" : "Brak plików", "No entries found in this folder" : "Brak wpisów w tym folderze", diff --git a/apps/systemtags/l10n/pl.json b/apps/systemtags/l10n/pl.json index 6cb103ed4a5..97ae0230be4 100644 --- a/apps/systemtags/l10n/pl.json +++ b/apps/systemtags/l10n/pl.json @@ -12,6 +12,7 @@ "%1$s updated system tag %3$s to %2$s" : "%1$s zaktualizowany system etykiet%3$s do %2$s", "%1$s assigned system tag %3$s to %2$s" : "%1$s przypisywalny system etykiet%3$s do %2$s", "%1$s unassigned system tag %3$s from %2$s" : "%1$s nieprzypisany system etykiet %3$s z %2$s", + "%s (restricted)" : "%s (ograniczone)", "%s (invisible)" : "%s (niewidoczny)", "No files in here" : "Brak plików", "No entries found in this folder" : "Brak wpisów w tym folderze", |