diff options
176 files changed, 1316 insertions, 296 deletions
diff --git a/apps/admin_audit/lib/Actions/Sharing.php b/apps/admin_audit/lib/Actions/Sharing.php index b66c9f50eb8..0c4601eef38 100644 --- a/apps/admin_audit/lib/Actions/Sharing.php +++ b/apps/admin_audit/lib/Actions/Sharing.php @@ -78,6 +78,19 @@ class Sharing extends Action { 'id', ] ); + } elseif($params['shareType'] === Share::SHARE_TYPE_ROOM) { + $this->log( + 'The %s "%s" with ID "%s" has been shared to the room "%s" with permissions "%s" (Share ID: %s)', + $params, + [ + 'itemType', + 'itemTarget', + 'itemSource', + 'shareWith', + 'permissions', + 'id', + ] + ); } } @@ -122,6 +135,18 @@ class Sharing extends Action { 'id', ] ); + } elseif($params['shareType'] === Share::SHARE_TYPE_ROOM) { + $this->log( + 'The %s "%s" with ID "%s" has been unshared from the room "%s" (Share ID: %s)', + $params, + [ + 'itemType', + 'fileTarget', + 'itemSource', + 'shareWith', + 'id', + ] + ); } } diff --git a/apps/dav/lib/CardDAV/SyncService.php b/apps/dav/lib/CardDAV/SyncService.php index ee68a4a26ec..5bd92015ad7 100644 --- a/apps/dav/lib/CardDAV/SyncService.php +++ b/apps/dav/lib/CardDAV/SyncService.php @@ -270,18 +270,22 @@ class SyncService { $cardId = "$name:$userId.vcf"; $card = $this->backend->getCard($addressBookId, $cardId); - if ($card === false) { - $vCard = $converter->createCardFromUser($user); - if ($vCard !== null) { - $this->backend->createCard($addressBookId, $cardId, $vCard->serialize()); - } - } else { - $vCard = $converter->createCardFromUser($user); - if (is_null($vCard)) { - $this->backend->deleteCard($addressBookId, $cardId); + if ($user->isEnabled()) { + if ($card === false) { + $vCard = $converter->createCardFromUser($user); + if ($vCard !== null) { + $this->backend->createCard($addressBookId, $cardId, $vCard->serialize()); + } } else { - $this->backend->updateCard($addressBookId, $cardId, $vCard->serialize()); + $vCard = $converter->createCardFromUser($user); + if (is_null($vCard)) { + $this->backend->deleteCard($addressBookId, $cardId); + } else { + $this->backend->updateCard($addressBookId, $cardId, $vCard->serialize()); + } } + } else { + $this->backend->deleteCard($addressBookId, $cardId); } } diff --git a/apps/dav/lib/Connector/Sabre/SharesPlugin.php b/apps/dav/lib/Connector/Sabre/SharesPlugin.php index 825b9821a2a..990cc4a808f 100644 --- a/apps/dav/lib/Connector/Sabre/SharesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/SharesPlugin.php @@ -124,6 +124,7 @@ class SharesPlugin extends \Sabre\DAV\ServerPlugin { \OCP\Share::SHARE_TYPE_LINK, \OCP\Share::SHARE_TYPE_REMOTE, \OCP\Share::SHARE_TYPE_EMAIL, + \OCP\Share::SHARE_TYPE_ROOM, ]; foreach ($requestedShareTypes as $requestedShareType) { // one of each type is enough to find out about the types diff --git a/apps/dav/tests/unit/CardDAV/SyncServiceTest.php b/apps/dav/tests/unit/CardDAV/SyncServiceTest.php index 1ca27d61ce4..7d444571fac 100644 --- a/apps/dav/tests/unit/CardDAV/SyncServiceTest.php +++ b/apps/dav/tests/unit/CardDAV/SyncServiceTest.php @@ -84,14 +84,30 @@ class SyncServiceTest extends TestCase { $ss->ensureSystemAddressBookExists('principals/users/adam', 'contacts', []); } - public function testUpdateAndDeleteUser() { + public function dataActivatedUsers() { + return [ + [true, 1, 1, 1], + [false, 0, 0, 3], + ]; + } + + /** + * @dataProvider dataActivatedUsers + * + * @param boolean $activated + * @param integer $createCalls + * @param integer $updateCalls + * @param integer $deleteCalls + * @return void + */ + public function testUpdateAndDeleteUser($activated, $createCalls, $updateCalls, $deleteCalls) { /** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject $backend */ $backend = $this->getMockBuilder(CardDavBackend::class)->disableOriginalConstructor()->getMock(); $logger = $this->getMockBuilder(ILogger::class)->disableOriginalConstructor()->getMock(); - $backend->expects($this->once())->method('createCard'); - $backend->expects($this->once())->method('updateCard'); - $backend->expects($this->once())->method('deleteCard'); + $backend->expects($this->exactly($createCalls))->method('createCard'); + $backend->expects($this->exactly($updateCalls))->method('updateCard'); + $backend->expects($this->exactly($deleteCalls))->method('deleteCard'); $backend->method('getCard')->willReturnOnConsecutiveCalls(false, [ 'carddata' => "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.4.8//EN\r\nUID:test-user\r\nFN:test-user\r\nN:test-user;;;;\r\nEND:VCARD\r\n\r\n" @@ -106,6 +122,7 @@ class SyncServiceTest extends TestCase { $user->method('getUID')->willReturn('test-user'); $user->method('getCloudId')->willReturn('cloudId'); $user->method('getDisplayName')->willReturn('test-user'); + $user->method('isEnabled')->willReturn($activated); $accountManager = $this->getMockBuilder(AccountManager::class)->disableOriginalConstructor()->getMock(); $accountManager->expects($this->any())->method('getUser') ->willReturn([ diff --git a/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php index 63b84eb5c6c..d4dd3b49f34 100644 --- a/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php @@ -298,6 +298,7 @@ class SharesPluginTest extends \Test\TestCase { [[\OCP\Share::SHARE_TYPE_GROUP]], [[\OCP\Share::SHARE_TYPE_LINK]], [[\OCP\Share::SHARE_TYPE_REMOTE]], + [[\OCP\Share::SHARE_TYPE_ROOM]], [[\OCP\Share::SHARE_TYPE_USER, \OCP\Share::SHARE_TYPE_GROUP]], [[\OCP\Share::SHARE_TYPE_USER, \OCP\Share::SHARE_TYPE_GROUP, \OCP\Share::SHARE_TYPE_LINK]], [[\OCP\Share::SHARE_TYPE_USER, \OCP\Share::SHARE_TYPE_LINK]], diff --git a/apps/files/js/navigation.js b/apps/files/js/navigation.js index 7a89159c1f0..9fc2180c923 100644 --- a/apps/files/js/navigation.js +++ b/apps/files/js/navigation.js @@ -92,7 +92,7 @@ * @param array options "silent" to not trigger event */ setActiveItem: function (itemId, options) { - var currentItem = this.$el.find('li[data-id=' + itemId + ']'); + var currentItem = this.$el.find('li[data-id="' + itemId + '"]'); var itemDir = currentItem.data('dir'); var itemView = currentItem.data('view'); var oldItemId = this._activeItem; @@ -135,7 +135,7 @@ * Returns whether a given item exists */ itemExists: function (itemId) { - return this.$el.find('li[data-id=' + itemId + ']').length; + return this.$el.find('li[data-id="' + itemId + '"]').length; }, /** diff --git a/apps/files/lib/Command/TransferOwnership.php b/apps/files/lib/Command/TransferOwnership.php index 6113f6df54c..f417898f217 100644 --- a/apps/files/lib/Command/TransferOwnership.php +++ b/apps/files/lib/Command/TransferOwnership.php @@ -217,7 +217,7 @@ class TransferOwnership extends Command { $output->writeln("Collecting all share information for files and folder of $this->sourceUser ..."); $progress = new ProgressBar($output, count($this->shares)); - foreach([\OCP\Share::SHARE_TYPE_GROUP, \OCP\Share::SHARE_TYPE_USER, \OCP\Share::SHARE_TYPE_LINK, \OCP\Share::SHARE_TYPE_REMOTE] as $shareType) { + foreach([\OCP\Share::SHARE_TYPE_GROUP, \OCP\Share::SHARE_TYPE_USER, \OCP\Share::SHARE_TYPE_LINK, \OCP\Share::SHARE_TYPE_REMOTE, \OCP\Share::SHARE_TYPE_ROOM] as $shareType) { $offset = 0; while (true) { $sharePage = $this->shareManager->getSharesBy($this->sourceUser, $shareType, null, true, 50, $offset); diff --git a/apps/files/lib/Controller/ApiController.php b/apps/files/lib/Controller/ApiController.php index d71b998ffb1..9443b9776ae 100644 --- a/apps/files/lib/Controller/ApiController.php +++ b/apps/files/lib/Controller/ApiController.php @@ -214,7 +214,8 @@ class ApiController extends Controller { \OCP\Share::SHARE_TYPE_GROUP, \OCP\Share::SHARE_TYPE_LINK, \OCP\Share::SHARE_TYPE_REMOTE, - \OCP\Share::SHARE_TYPE_EMAIL + \OCP\Share::SHARE_TYPE_EMAIL, + \OCP\Share::SHARE_TYPE_ROOM ]; foreach ($requestedShareTypes as $requestedShareType) { // one of each type is enough to find out about the types diff --git a/apps/files_external/3rdparty/composer.json b/apps/files_external/3rdparty/composer.json index 537159bbf66..caf87983c50 100644 --- a/apps/files_external/3rdparty/composer.json +++ b/apps/files_external/3rdparty/composer.json @@ -8,7 +8,7 @@ "classmap-authoritative": true }, "require": { - "icewind/streams": "0.5.2", + "icewind/streams": "0.6.1", "icewind/smb": "3.0.0" } } diff --git a/apps/files_external/3rdparty/composer.lock b/apps/files_external/3rdparty/composer.lock index 7bfcdba3d2f..2339220ffbc 100644 --- a/apps/files_external/3rdparty/composer.lock +++ b/apps/files_external/3rdparty/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0235b6f1a4131c9312afef7a58f3a80e", + "content-hash": "1465c8a4b4139e514086d5803d90af2d", "packages": [ { "name": "icewind/smb", @@ -49,16 +49,16 @@ }, { "name": "icewind/streams", - "version": "0.5.2", + "version": "0.6.1", "source": { "type": "git", "url": "https://github.com/icewind1991/Streams.git", - "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e" + "reference": "0a78597117d8a02937ea05206f219294449fb06e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/icewind1991/Streams/zipball/6bfd2fdbd99319f5e010d0a684409189a562cb1e", - "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e", + "url": "https://api.github.com/repos/icewind1991/Streams/zipball/0a78597117d8a02937ea05206f219294449fb06e", + "reference": "0a78597117d8a02937ea05206f219294449fb06e", "shasum": "" }, "require": { @@ -86,7 +86,7 @@ } ], "description": "A set of generic stream wrappers", - "time": "2016-12-02T14:21:23+00:00" + "time": "2018-04-24T09:07:38+00:00" } ], "packages-dev": [], diff --git a/apps/files_external/3rdparty/composer/autoload_classmap.php b/apps/files_external/3rdparty/composer/autoload_classmap.php index d2e658d9f61..6c5f86a5796 100644 --- a/apps/files_external/3rdparty/composer/autoload_classmap.php +++ b/apps/files_external/3rdparty/composer/autoload_classmap.php @@ -51,14 +51,6 @@ return array( 'Icewind\\SMB\\Native\\NativeWriteStream' => $vendorDir . '/icewind/smb/src/Native/NativeWriteStream.php', 'Icewind\\SMB\\ServerFactory' => $vendorDir . '/icewind/smb/src/ServerFactory.php', 'Icewind\\SMB\\System' => $vendorDir . '/icewind/smb/src/System.php', - 'Icewind\\SMB\\Test\\AbstractShareTest' => $vendorDir . '/icewind/smb/tests/AbstractShareTest.php', - 'Icewind\\SMB\\Test\\NativeShareTest' => $vendorDir . '/icewind/smb/tests/NativeShareTest.php', - 'Icewind\\SMB\\Test\\NativeStreamTest' => $vendorDir . '/icewind/smb/tests/NativeStreamTest.php', - 'Icewind\\SMB\\Test\\NotifyHandlerTest' => $vendorDir . '/icewind/smb/tests/NotifyHandlerTest.php', - 'Icewind\\SMB\\Test\\ParserTest' => $vendorDir . '/icewind/smb/tests/ParserTest.php', - 'Icewind\\SMB\\Test\\ServerTest' => $vendorDir . '/icewind/smb/tests/ServerTest.php', - 'Icewind\\SMB\\Test\\ShareTest' => $vendorDir . '/icewind/smb/tests/ShareTest.php', - 'Icewind\\SMB\\Test\\TestCase' => $vendorDir . '/icewind/smb/tests/TestCase.php', 'Icewind\\SMB\\TimeZoneProvider' => $vendorDir . '/icewind/smb/src/TimeZoneProvider.php', 'Icewind\\SMB\\Wrapped\\Connection' => $vendorDir . '/icewind/smb/src/Wrapped/Connection.php', 'Icewind\\SMB\\Wrapped\\ErrorCodes' => $vendorDir . '/icewind/smb/src/Wrapped/ErrorCodes.php', @@ -69,6 +61,7 @@ return array( 'Icewind\\SMB\\Wrapped\\Server' => $vendorDir . '/icewind/smb/src/Wrapped/Server.php', 'Icewind\\SMB\\Wrapped\\Share' => $vendorDir . '/icewind/smb/src/Wrapped/Share.php', 'Icewind\\Streams\\CallbackWrapper' => $vendorDir . '/icewind/streams/src/CallbackWrapper.php', + 'Icewind\\Streams\\CountWrapper' => $vendorDir . '/icewind/streams/src/CountWrapper.php', 'Icewind\\Streams\\Directory' => $vendorDir . '/icewind/streams/src/Directory.php', 'Icewind\\Streams\\DirectoryFilter' => $vendorDir . '/icewind/streams/src/DirectoryFilter.php', 'Icewind\\Streams\\DirectoryWrapper' => $vendorDir . '/icewind/streams/src/DirectoryWrapper.php', diff --git a/apps/files_external/3rdparty/composer/autoload_static.php b/apps/files_external/3rdparty/composer/autoload_static.php index 3234d89e5b9..658c947c9c2 100644 --- a/apps/files_external/3rdparty/composer/autoload_static.php +++ b/apps/files_external/3rdparty/composer/autoload_static.php @@ -81,14 +81,6 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3 'Icewind\\SMB\\Native\\NativeWriteStream' => __DIR__ . '/..' . '/icewind/smb/src/Native/NativeWriteStream.php', 'Icewind\\SMB\\ServerFactory' => __DIR__ . '/..' . '/icewind/smb/src/ServerFactory.php', 'Icewind\\SMB\\System' => __DIR__ . '/..' . '/icewind/smb/src/System.php', - 'Icewind\\SMB\\Test\\AbstractShareTest' => __DIR__ . '/..' . '/icewind/smb/tests/AbstractShareTest.php', - 'Icewind\\SMB\\Test\\NativeShareTest' => __DIR__ . '/..' . '/icewind/smb/tests/NativeShareTest.php', - 'Icewind\\SMB\\Test\\NativeStreamTest' => __DIR__ . '/..' . '/icewind/smb/tests/NativeStreamTest.php', - 'Icewind\\SMB\\Test\\NotifyHandlerTest' => __DIR__ . '/..' . '/icewind/smb/tests/NotifyHandlerTest.php', - 'Icewind\\SMB\\Test\\ParserTest' => __DIR__ . '/..' . '/icewind/smb/tests/ParserTest.php', - 'Icewind\\SMB\\Test\\ServerTest' => __DIR__ . '/..' . '/icewind/smb/tests/ServerTest.php', - 'Icewind\\SMB\\Test\\ShareTest' => __DIR__ . '/..' . '/icewind/smb/tests/ShareTest.php', - 'Icewind\\SMB\\Test\\TestCase' => __DIR__ . '/..' . '/icewind/smb/tests/TestCase.php', 'Icewind\\SMB\\TimeZoneProvider' => __DIR__ . '/..' . '/icewind/smb/src/TimeZoneProvider.php', 'Icewind\\SMB\\Wrapped\\Connection' => __DIR__ . '/..' . '/icewind/smb/src/Wrapped/Connection.php', 'Icewind\\SMB\\Wrapped\\ErrorCodes' => __DIR__ . '/..' . '/icewind/smb/src/Wrapped/ErrorCodes.php', @@ -99,6 +91,7 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3 'Icewind\\SMB\\Wrapped\\Server' => __DIR__ . '/..' . '/icewind/smb/src/Wrapped/Server.php', 'Icewind\\SMB\\Wrapped\\Share' => __DIR__ . '/..' . '/icewind/smb/src/Wrapped/Share.php', 'Icewind\\Streams\\CallbackWrapper' => __DIR__ . '/..' . '/icewind/streams/src/CallbackWrapper.php', + 'Icewind\\Streams\\CountWrapper' => __DIR__ . '/..' . '/icewind/streams/src/CountWrapper.php', 'Icewind\\Streams\\Directory' => __DIR__ . '/..' . '/icewind/streams/src/Directory.php', 'Icewind\\Streams\\DirectoryFilter' => __DIR__ . '/..' . '/icewind/streams/src/DirectoryFilter.php', 'Icewind\\Streams\\DirectoryWrapper' => __DIR__ . '/..' . '/icewind/streams/src/DirectoryWrapper.php', diff --git a/apps/files_external/3rdparty/composer/installed.json b/apps/files_external/3rdparty/composer/installed.json index 3b2870a13bf..707b876e588 100644 --- a/apps/files_external/3rdparty/composer/installed.json +++ b/apps/files_external/3rdparty/composer/installed.json @@ -44,17 +44,17 @@ }, { "name": "icewind/streams", - "version": "0.5.2", - "version_normalized": "0.5.2.0", + "version": "0.6.1", + "version_normalized": "0.6.1.0", "source": { "type": "git", "url": "https://github.com/icewind1991/Streams.git", - "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e" + "reference": "0a78597117d8a02937ea05206f219294449fb06e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/icewind1991/Streams/zipball/6bfd2fdbd99319f5e010d0a684409189a562cb1e", - "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e", + "url": "https://api.github.com/repos/icewind1991/Streams/zipball/0a78597117d8a02937ea05206f219294449fb06e", + "reference": "0a78597117d8a02937ea05206f219294449fb06e", "shasum": "" }, "require": { @@ -64,7 +64,7 @@ "phpunit/phpunit": "^4.8", "satooshi/php-coveralls": "v1.0.0" }, - "time": "2016-12-02T14:21:23+00:00", + "time": "2018-04-24T09:07:38+00:00", "type": "library", "installation-source": "dist", "autoload": { diff --git a/apps/files_external/3rdparty/icewind/streams/.travis.yml b/apps/files_external/3rdparty/icewind/streams/.travis.yml index d2e1afaad67..68efcd2c744 100644 --- a/apps/files_external/3rdparty/icewind/streams/.travis.yml +++ b/apps/files_external/3rdparty/icewind/streams/.travis.yml @@ -4,11 +4,8 @@ php: - 5.5 - 5.6 - 7.0 - - hhvm - -matrix: - allow_failures: - - php: hhvm # due to facebook/hhvm#3321 + - 7.1 + - 7.2 env: global: diff --git a/apps/files_external/3rdparty/icewind/streams/README.md b/apps/files_external/3rdparty/icewind/streams/README.md index ca13db28e44..88ab2dd92a3 100644 --- a/apps/files_external/3rdparty/icewind/streams/README.md +++ b/apps/files_external/3rdparty/icewind/streams/README.md @@ -1,4 +1,4 @@ -#Streams# +# Streams # [](https://travis-ci.org/icewind1991/Streams) [](https://coveralls.io/r/icewind1991/Streams?branch=master) @@ -6,7 +6,7 @@ Generic stream wrappers for php. -##CallBackWrapper## +## CallBackWrapper ## A `CallBackWrapper` can be used to register callbacks on read, write and closing of the stream, it wraps an existing stream and can thus be used for any stream in php diff --git a/apps/files_external/3rdparty/icewind/streams/src/CountWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/CountWrapper.php new file mode 100644 index 00000000000..8b86ab9187c --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/src/CountWrapper.php @@ -0,0 +1,106 @@ +<?php +/** + * @copyright Copyright (c) 2018 Robin Appelman <robin@icewind.nl> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace Icewind\Streams; + +/** + * Wrapper that counts the amount of data read and written + * + * The following options should be passed in the context when opening the stream + * [ + * 'callback' => [ + * 'source' => resource + * 'callback' => function($readCount, $writeCount){} + * ] + * ] + * + * The callback will be called when the stream is closed + */ +class CountWrapper extends Wrapper { + /** + * @var int + */ + protected $readCount = 0; + + /** + * @var int + */ + protected $writeCount = 0; + + /** + * @var callable + */ + protected $callback; + + /** + * Wraps a stream with the provided callbacks + * + * @param resource $source + * @param callable $callback + * @return resource + * + * @throws \BadMethodCallException + */ + public static function wrap($source, $callback) { + if (!is_callable($callback)) { + throw new \InvalidArgumentException('Invalid or missing callback'); + } + $context = stream_context_create(array( + 'count' => array( + 'source' => $source, + 'callback' => $callback + ) + )); + return Wrapper::wrapSource($source, $context, 'callback', '\Icewind\Streams\CountWrapper'); + } + + protected function open() { + $context = $this->loadContext('count'); + $this->callback = $context['callback']; + return true; + } + + public function dir_opendir($path, $options) { + return $this->open(); + } + + public function stream_open($path, $mode, $options, &$opened_path) { + return $this->open(); + } + + public function stream_read($count) { + $result = parent::stream_read($count); + $this->readCount += strlen($result); + return $result; + } + + public function stream_write($data) { + $result = parent::stream_write($data); + $this->writeCount += strlen($data); + return $result; + } + + public function stream_close() { + $result = parent::stream_close(); + call_user_func($this->callback, $this->readCount, $this->writeCount); + return $result; + } +} diff --git a/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php b/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php index 8e52eff9a08..babd2c1a0b3 100644 --- a/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php +++ b/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php @@ -26,12 +26,15 @@ abstract class Wrapper implements File, Directory { protected $source; protected static function wrapSource($source, $context, $protocol, $class) { + if (!is_resource($source)) { + throw new \BadMethodCallException(); + } try { stream_wrapper_register($protocol, $class); - if (@rewinddir($source) === false) { - $wrapped = fopen($protocol . '://', 'r+', false, $context); - } else { + if (self::isDirectoryHandle($source)) { $wrapped = opendir($protocol . '://', $context); + } else { + $wrapped = fopen($protocol . '://', 'r+', false, $context); } } catch (\BadMethodCallException $e) { stream_wrapper_unregister($protocol); @@ -41,6 +44,11 @@ abstract class Wrapper implements File, Directory { return $wrapped; } + protected static function isDirectoryHandle($resource) { + $meta = stream_get_meta_data($resource); + return $meta['stream_type'] == 'dir'; + } + /** * Load the source from the stream context and return the context options * diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js index 998964b2d8a..64ffe8bbf2e 100644 --- a/apps/files_sharing/js/public.js +++ b/apps/files_sharing/js/public.js @@ -72,7 +72,24 @@ OCA.Sharing.PublicApp = { fileActions: fileActions, detailsViewEnabled: false, filesClient: filesClient, - enableUpload: true + enableUpload: true, + multiSelectMenu: [ + { + name: 'copyMove', + displayName: t('files', 'Move or copy'), + iconClass: 'icon-external', + }, + { + name: 'download', + displayName: t('files', 'Download'), + iconClass: 'icon-download', + }, + { + name: 'delete', + displayName: t('files', 'Delete'), + iconClass: 'icon-delete', + } + ] } ); this.files = OCA.Files.Files; diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js index a925920f3bc..0f8dc58a85e 100644 --- a/apps/files_sharing/js/share.js +++ b/apps/files_sharing/js/share.js @@ -144,6 +144,8 @@ hasShares = true; } else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) { hasShares = true; + } else if (shareType === OC.Share.SHARE_TYPE_ROOM) { + hasShares = true; } }); OCA.Sharing.Util._updateFileActionIcon($tr, hasShares, hasLink); diff --git a/apps/files_sharing/l10n/ast.js b/apps/files_sharing/l10n/ast.js index 728496c9958..1d3404f4602 100644 --- a/apps/files_sharing/l10n/ast.js +++ b/apps/files_sharing/l10n/ast.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Equí amosaránse los ficheros y carpetes que compartas", "No shared links" : "Nun hai enllaces compartíos", "Files and folders you share by link will show up here" : "Equí amosaránse los ficheros y carpetes que compartas per enllaz", + "Download" : "Baxar", "You can upload into this folder" : "Pues xubir a esta carpeta", "No compatible server found at {remote}" : "Nun s'alcontró dengún sirvidor compatible en {remote}", "Invalid server URL" : "URL non válida del sirvidor", @@ -63,7 +64,6 @@ OC.L10N.register( "Could not lock path" : "Nun pudo bloquiase'l camín", "Can't change permissions for public share links" : "Nun puen camudase los permisos pa los enllaces de comparticiones públiques", "Cannot increase permissions" : "Nun puen aumentase los permisos", - "Download" : "Baxar", "Direct link" : "Enllaz direutu", "Share API is disabled" : "L'API de compartición ta desactivada", "No entries found in this folder" : "Nenguna entrada en esta carpeta", diff --git a/apps/files_sharing/l10n/ast.json b/apps/files_sharing/l10n/ast.json index d595eeaf5be..7af04eb8f75 100644 --- a/apps/files_sharing/l10n/ast.json +++ b/apps/files_sharing/l10n/ast.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Equí amosaránse los ficheros y carpetes que compartas", "No shared links" : "Nun hai enllaces compartíos", "Files and folders you share by link will show up here" : "Equí amosaránse los ficheros y carpetes que compartas per enllaz", + "Download" : "Baxar", "You can upload into this folder" : "Pues xubir a esta carpeta", "No compatible server found at {remote}" : "Nun s'alcontró dengún sirvidor compatible en {remote}", "Invalid server URL" : "URL non válida del sirvidor", @@ -61,7 +62,6 @@ "Could not lock path" : "Nun pudo bloquiase'l camín", "Can't change permissions for public share links" : "Nun puen camudase los permisos pa los enllaces de comparticiones públiques", "Cannot increase permissions" : "Nun puen aumentase los permisos", - "Download" : "Baxar", "Direct link" : "Enllaz direutu", "Share API is disabled" : "L'API de compartición ta desactivada", "No entries found in this folder" : "Nenguna entrada en esta carpeta", diff --git a/apps/files_sharing/l10n/ca.js b/apps/files_sharing/l10n/ca.js index 7a7c008aa15..659d8f1b13b 100644 --- a/apps/files_sharing/l10n/ca.js +++ b/apps/files_sharing/l10n/ca.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Els arxius i carpetes que vosté comparteixi es mostraran aquí", "No shared links" : "no hi ha enllaços compartits", "Files and folders you share by link will show up here" : "Els arxius i les carpetes que vosté ha compartit per link es mostraran aquí", + "Download" : "Baixa", "You can upload into this folder" : "Pots pujar dins d'aquesta carpeta", "No compatible server found at {remote}" : "No s'ha trobat cap servidor compatible a {remote}", "Invalid server URL" : "Direcció del servidor invàlida", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es poden canviar els permisos per als enllaços compartits públics", "Cannot increase permissions" : "No es poden augmentar els permisos", "shared by %s" : "compartit per %s", - "Download" : "Baixa", "Direct link" : "Enllaç directe", "Add to your Nextcloud" : "Afegeix al teu NextCloud", "Share API is disabled" : "L'API compartida està desactivada", diff --git a/apps/files_sharing/l10n/ca.json b/apps/files_sharing/l10n/ca.json index 8701e0e7d10..589e91689b3 100644 --- a/apps/files_sharing/l10n/ca.json +++ b/apps/files_sharing/l10n/ca.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Els arxius i carpetes que vosté comparteixi es mostraran aquí", "No shared links" : "no hi ha enllaços compartits", "Files and folders you share by link will show up here" : "Els arxius i les carpetes que vosté ha compartit per link es mostraran aquí", + "Download" : "Baixa", "You can upload into this folder" : "Pots pujar dins d'aquesta carpeta", "No compatible server found at {remote}" : "No s'ha trobat cap servidor compatible a {remote}", "Invalid server URL" : "Direcció del servidor invàlida", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es poden canviar els permisos per als enllaços compartits públics", "Cannot increase permissions" : "No es poden augmentar els permisos", "shared by %s" : "compartit per %s", - "Download" : "Baixa", "Direct link" : "Enllaç directe", "Add to your Nextcloud" : "Afegeix al teu NextCloud", "Share API is disabled" : "L'API compartida està desactivada", diff --git a/apps/files_sharing/l10n/cs.js b/apps/files_sharing/l10n/cs.js index 38abd7620c2..538f6b03849 100644 --- a/apps/files_sharing/l10n/cs.js +++ b/apps/files_sharing/l10n/cs.js @@ -18,6 +18,7 @@ OC.L10N.register( "Shares will show up here" : "Sdílení se zobrazí zde", "Restore share" : "Obnovit sdílení", "Something happened. Unable to restore the share." : "Něco se stalo. Sdílení se nedaří obnovit.", + "Download" : "Stáhnout", "You can upload into this folder" : "Do této složky můžete nahrávat", "No compatible server found at {remote}" : "Na {remote} nebyl nalezen kompatibilní server", "Invalid server URL" : "Neplatná URL serveru", @@ -96,7 +97,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Nelze změnit oprávnění pro veřejně sdílené odkazy", "Cannot increase permissions" : "Nelze navýšit oprávnění", "shared by %s" : "Sdílel %s", - "Download" : "Stáhnout", "Direct link" : "Přímý odkaz", "Add to your Nextcloud" : "Přidat do Nextcloud", "Share API is disabled" : "Sdílení API je zakázané", diff --git a/apps/files_sharing/l10n/cs.json b/apps/files_sharing/l10n/cs.json index 59475213cf9..ba71287dbc6 100644 --- a/apps/files_sharing/l10n/cs.json +++ b/apps/files_sharing/l10n/cs.json @@ -16,6 +16,7 @@ "Shares will show up here" : "Sdílení se zobrazí zde", "Restore share" : "Obnovit sdílení", "Something happened. Unable to restore the share." : "Něco se stalo. Sdílení se nedaří obnovit.", + "Download" : "Stáhnout", "You can upload into this folder" : "Do této složky můžete nahrávat", "No compatible server found at {remote}" : "Na {remote} nebyl nalezen kompatibilní server", "Invalid server URL" : "Neplatná URL serveru", @@ -94,7 +95,6 @@ "Can't change permissions for public share links" : "Nelze změnit oprávnění pro veřejně sdílené odkazy", "Cannot increase permissions" : "Nelze navýšit oprávnění", "shared by %s" : "Sdílel %s", - "Download" : "Stáhnout", "Direct link" : "Přímý odkaz", "Add to your Nextcloud" : "Přidat do Nextcloud", "Share API is disabled" : "Sdílení API je zakázané", diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index 9f342ea0d23..5487ee07c98 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -18,6 +18,7 @@ OC.L10N.register( "Shares will show up here" : "Freigaben werden hier angezeigt", "Restore share" : "Freigabe wiederherstellen", "Something happened. Unable to restore the share." : "Die Freigabe konnte nicht wiederhergestellt werden.", + "Download" : "Herunterladen", "You can upload into this folder" : "Du kannst in diesen Ordner hochladen", "No compatible server found at {remote}" : "Keinen kompatiblen Server unter {remote} gefunden", "Invalid server URL" : "Falsche Server-URL", @@ -98,7 +99,6 @@ OC.L10N.register( "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Freigeben: Senden des Passwortes über Nextcloud Talk gescheitert, da Nextcloud Talk nicht verfügbar ist", "Cannot increase permissions" : "Berechtigungen können nicht erhöht werden", "shared by %s" : "von %s geteilt", - "Download" : "Herunterladen", "Direct link" : "Direkter Link", "Add to your Nextcloud" : "Zu Deiner Nextcloud hinzufügen", "Share API is disabled" : "Teilen-API ist deaktivert", diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index 777bf73971c..b0700cf32c4 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -16,6 +16,7 @@ "Shares will show up here" : "Freigaben werden hier angezeigt", "Restore share" : "Freigabe wiederherstellen", "Something happened. Unable to restore the share." : "Die Freigabe konnte nicht wiederhergestellt werden.", + "Download" : "Herunterladen", "You can upload into this folder" : "Du kannst in diesen Ordner hochladen", "No compatible server found at {remote}" : "Keinen kompatiblen Server unter {remote} gefunden", "Invalid server URL" : "Falsche Server-URL", @@ -96,7 +97,6 @@ "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Freigeben: Senden des Passwortes über Nextcloud Talk gescheitert, da Nextcloud Talk nicht verfügbar ist", "Cannot increase permissions" : "Berechtigungen können nicht erhöht werden", "shared by %s" : "von %s geteilt", - "Download" : "Herunterladen", "Direct link" : "Direkter Link", "Add to your Nextcloud" : "Zu Deiner Nextcloud hinzufügen", "Share API is disabled" : "Teilen-API ist deaktivert", diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index ac95e517744..9b726cb0b91 100644 --- a/apps/files_sharing/l10n/de_DE.js +++ b/apps/files_sharing/l10n/de_DE.js @@ -18,6 +18,7 @@ OC.L10N.register( "Shares will show up here" : "Freigaben werden hier angezeigt", "Restore share" : "Freigabe wiederherstellen", "Something happened. Unable to restore the share." : "Die Freigabe konnte nicht wiederhergestellt werden.", + "Download" : "Herunterladen", "You can upload into this folder" : "Sie können in diesen Ordner hochladen", "No compatible server found at {remote}" : "Keinen kompatiblen Server unter {remote} gefunden", "Invalid server URL" : "Falsche Server-URL", @@ -98,7 +99,6 @@ OC.L10N.register( "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Freigeben: Senden des Passwortes über Nextcloud Talk gescheitert, da Nextcloud Talk nicht verfügbar ist", "Cannot increase permissions" : "Berechtigungen können nicht erhöht werden", "shared by %s" : "von %s geteilt", - "Download" : "Herunterladen", "Direct link" : "Direkter Link", "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen", "Share API is disabled" : "Teilen-API ist deaktivert", diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index a35a8971843..ced4db51e33 100644 --- a/apps/files_sharing/l10n/de_DE.json +++ b/apps/files_sharing/l10n/de_DE.json @@ -16,6 +16,7 @@ "Shares will show up here" : "Freigaben werden hier angezeigt", "Restore share" : "Freigabe wiederherstellen", "Something happened. Unable to restore the share." : "Die Freigabe konnte nicht wiederhergestellt werden.", + "Download" : "Herunterladen", "You can upload into this folder" : "Sie können in diesen Ordner hochladen", "No compatible server found at {remote}" : "Keinen kompatiblen Server unter {remote} gefunden", "Invalid server URL" : "Falsche Server-URL", @@ -96,7 +97,6 @@ "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Freigeben: Senden des Passwortes über Nextcloud Talk gescheitert, da Nextcloud Talk nicht verfügbar ist", "Cannot increase permissions" : "Berechtigungen können nicht erhöht werden", "shared by %s" : "von %s geteilt", - "Download" : "Herunterladen", "Direct link" : "Direkter Link", "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen", "Share API is disabled" : "Teilen-API ist deaktivert", diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js index d2b8aaac71c..77d04dd7af0 100644 --- a/apps/files_sharing/l10n/el.js +++ b/apps/files_sharing/l10n/el.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Τα αρχεία και οι φάκελοι που διαμοιράζεστε θα εμφανιστούν εδώ", "No shared links" : "Κανένας διαμοιρασμένος σύνδεσμος", "Files and folders you share by link will show up here" : "Τα αρχεία και οι φάκελοι που διαμοιράζεστε μέσω συνδέσμου θα εμφανιστούνε εδώ", + "Download" : "Λήψη", "You can upload into this folder" : "Μπορείτε να μεταφορτώσετε σε αυτόν τον φάκελο", "No compatible server found at {remote}" : "Δεν βρέθηκε συμβατός διακομιστής σε {remote}", "Invalid server URL" : "Μη έγκυρο URL διακομιστή", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Δεν μπορούμε να αλλάξουμε δικαιώματα για δημόσια διαμοιρασμένους συνδέσμους", "Cannot increase permissions" : "Δεν μπορούμε να αυξήσουμε δικαιώματα", "shared by %s" : "Διαμοιράστηκε από 1 %s", - "Download" : "Λήψη", "Direct link" : "Άμεσος σύνδεσμος", "Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου", "Share API is disabled" : "API διαμοιρασμού είναι απενεργοποιημένο", diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json index 6e2437db96c..d27ed52bc28 100644 --- a/apps/files_sharing/l10n/el.json +++ b/apps/files_sharing/l10n/el.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Τα αρχεία και οι φάκελοι που διαμοιράζεστε θα εμφανιστούν εδώ", "No shared links" : "Κανένας διαμοιρασμένος σύνδεσμος", "Files and folders you share by link will show up here" : "Τα αρχεία και οι φάκελοι που διαμοιράζεστε μέσω συνδέσμου θα εμφανιστούνε εδώ", + "Download" : "Λήψη", "You can upload into this folder" : "Μπορείτε να μεταφορτώσετε σε αυτόν τον φάκελο", "No compatible server found at {remote}" : "Δεν βρέθηκε συμβατός διακομιστής σε {remote}", "Invalid server URL" : "Μη έγκυρο URL διακομιστή", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "Δεν μπορούμε να αλλάξουμε δικαιώματα για δημόσια διαμοιρασμένους συνδέσμους", "Cannot increase permissions" : "Δεν μπορούμε να αυξήσουμε δικαιώματα", "shared by %s" : "Διαμοιράστηκε από 1 %s", - "Download" : "Λήψη", "Direct link" : "Άμεσος σύνδεσμος", "Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου", "Share API is disabled" : "API διαμοιρασμού είναι απενεργοποιημένο", diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js index 1d0c6fa43c0..6f4da3b80cb 100644 --- a/apps/files_sharing/l10n/en_GB.js +++ b/apps/files_sharing/l10n/en_GB.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Files and folders you share will show up here", "No shared links" : "No shared links", "Files and folders you share by link will show up here" : "Files and folders you share by link will show up here", + "Download" : "Download", "You can upload into this folder" : "You can upload into this folder", "No compatible server found at {remote}" : "No compatible server found at {remote}", "Invalid server URL" : "Invalid server URL", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Can't change permissions for public share links", "Cannot increase permissions" : "Cannot increase permissions", "shared by %s" : "shared by %s", - "Download" : "Download", "Direct link" : "Direct link", "Add to your Nextcloud" : "Add to your Nextcloud", "Share API is disabled" : "Share API is disabled", diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json index 58a3ade66e9..c4e902a27e5 100644 --- a/apps/files_sharing/l10n/en_GB.json +++ b/apps/files_sharing/l10n/en_GB.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Files and folders you share will show up here", "No shared links" : "No shared links", "Files and folders you share by link will show up here" : "Files and folders you share by link will show up here", + "Download" : "Download", "You can upload into this folder" : "You can upload into this folder", "No compatible server found at {remote}" : "No compatible server found at {remote}", "Invalid server URL" : "Invalid server URL", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "Can't change permissions for public share links", "Cannot increase permissions" : "Cannot increase permissions", "shared by %s" : "shared by %s", - "Download" : "Download", "Direct link" : "Direct link", "Add to your Nextcloud" : "Add to your Nextcloud", "Share API is disabled" : "Share API is disabled", diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js index d8ace79a2a6..78fbcbd644c 100644 --- a/apps/files_sharing/l10n/es.js +++ b/apps/files_sharing/l10n/es.js @@ -18,6 +18,7 @@ OC.L10N.register( "Shares will show up here" : "Aquí aparecerán los recursos que compartas", "Restore share" : "Restaurar recurso compartido", "Something happened. Unable to restore the share." : "Algo ha sucedido. No se puede restaurar el recurso compartido.", + "Download" : "Descargar", "You can upload into this folder" : "Puedes subir archivos en esta carpeta", "No compatible server found at {remote}" : "No se ha encontrado un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválida", @@ -98,7 +99,6 @@ OC.L10N.register( "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Compartir enviando la contraseña por Nextcloud Talk ha fallado porque Nextcloud Talk no está activado", "Cannot increase permissions" : "No es posible aumentar permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Enlace directo", "Add to your Nextcloud" : "Añadir a tu Nextcloud", "Share API is disabled" : "El API de compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json index 22549ffdfe9..129e87a4ad9 100644 --- a/apps/files_sharing/l10n/es.json +++ b/apps/files_sharing/l10n/es.json @@ -16,6 +16,7 @@ "Shares will show up here" : "Aquí aparecerán los recursos que compartas", "Restore share" : "Restaurar recurso compartido", "Something happened. Unable to restore the share." : "Algo ha sucedido. No se puede restaurar el recurso compartido.", + "Download" : "Descargar", "You can upload into this folder" : "Puedes subir archivos en esta carpeta", "No compatible server found at {remote}" : "No se ha encontrado un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválida", @@ -96,7 +97,6 @@ "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Compartir enviando la contraseña por Nextcloud Talk ha fallado porque Nextcloud Talk no está activado", "Cannot increase permissions" : "No es posible aumentar permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Enlace directo", "Add to your Nextcloud" : "Añadir a tu Nextcloud", "Share API is disabled" : "El API de compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_419.js b/apps/files_sharing/l10n/es_419.js index 0915f17d8bd..bec52e63905 100644 --- a/apps/files_sharing/l10n/es_419.js +++ b/apps/files_sharing/l10n/es_419.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_419.json b/apps/files_sharing/l10n/es_419.json index 08283c73b07..85ca65463ce 100644 --- a/apps/files_sharing/l10n/es_419.json +++ b/apps/files_sharing/l10n/es_419.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_AR.js b/apps/files_sharing/l10n/es_AR.js index c4183491b9f..5d7aab0c08d 100644 --- a/apps/files_sharing/l10n/es_AR.js +++ b/apps/files_sharing/l10n/es_AR.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que comparta se mostrarán aquí", "No shared links" : "No hay links compartidos", "Files and folders you share by link will show up here" : "Los archivos y carpetas que comparta por links se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Usted puede cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -86,7 +87,6 @@ OC.L10N.register( "Wrong or no update parameter given" : "El parametro de actualización esta erróneo o faltante", "Can't change permissions for public share links" : "No es posible cambiar los permisos para links públicos compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", - "Download" : "Descargar", "Direct link" : "Link directa", "Add to your Nextcloud" : "Agregar a su Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_AR.json b/apps/files_sharing/l10n/es_AR.json index 497ea1474f7..830c6b3e631 100644 --- a/apps/files_sharing/l10n/es_AR.json +++ b/apps/files_sharing/l10n/es_AR.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que comparta se mostrarán aquí", "No shared links" : "No hay links compartidos", "Files and folders you share by link will show up here" : "Los archivos y carpetas que comparta por links se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Usted puede cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -84,7 +85,6 @@ "Wrong or no update parameter given" : "El parametro de actualización esta erróneo o faltante", "Can't change permissions for public share links" : "No es posible cambiar los permisos para links públicos compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", - "Download" : "Descargar", "Direct link" : "Link directa", "Add to your Nextcloud" : "Agregar a su Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_CL.js b/apps/files_sharing/l10n/es_CL.js index 4c4e76cd8ad..b9b37744be7 100644 --- a/apps/files_sharing/l10n/es_CL.js +++ b/apps/files_sharing/l10n/es_CL.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_CL.json b/apps/files_sharing/l10n/es_CL.json index c4b04de5cdb..24aacd3f495 100644 --- a/apps/files_sharing/l10n/es_CL.json +++ b/apps/files_sharing/l10n/es_CL.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_CO.js b/apps/files_sharing/l10n/es_CO.js index 4c4e76cd8ad..b9b37744be7 100644 --- a/apps/files_sharing/l10n/es_CO.js +++ b/apps/files_sharing/l10n/es_CO.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_CO.json b/apps/files_sharing/l10n/es_CO.json index c4b04de5cdb..24aacd3f495 100644 --- a/apps/files_sharing/l10n/es_CO.json +++ b/apps/files_sharing/l10n/es_CO.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_CR.js b/apps/files_sharing/l10n/es_CR.js index 4c4e76cd8ad..b9b37744be7 100644 --- a/apps/files_sharing/l10n/es_CR.js +++ b/apps/files_sharing/l10n/es_CR.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_CR.json b/apps/files_sharing/l10n/es_CR.json index c4b04de5cdb..24aacd3f495 100644 --- a/apps/files_sharing/l10n/es_CR.json +++ b/apps/files_sharing/l10n/es_CR.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_DO.js b/apps/files_sharing/l10n/es_DO.js index 4c4e76cd8ad..b9b37744be7 100644 --- a/apps/files_sharing/l10n/es_DO.js +++ b/apps/files_sharing/l10n/es_DO.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_DO.json b/apps/files_sharing/l10n/es_DO.json index c4b04de5cdb..24aacd3f495 100644 --- a/apps/files_sharing/l10n/es_DO.json +++ b/apps/files_sharing/l10n/es_DO.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_EC.js b/apps/files_sharing/l10n/es_EC.js index 4c4e76cd8ad..b9b37744be7 100644 --- a/apps/files_sharing/l10n/es_EC.js +++ b/apps/files_sharing/l10n/es_EC.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_EC.json b/apps/files_sharing/l10n/es_EC.json index c4b04de5cdb..24aacd3f495 100644 --- a/apps/files_sharing/l10n/es_EC.json +++ b/apps/files_sharing/l10n/es_EC.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_GT.js b/apps/files_sharing/l10n/es_GT.js index 4c4e76cd8ad..b9b37744be7 100644 --- a/apps/files_sharing/l10n/es_GT.js +++ b/apps/files_sharing/l10n/es_GT.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_GT.json b/apps/files_sharing/l10n/es_GT.json index c4b04de5cdb..24aacd3f495 100644 --- a/apps/files_sharing/l10n/es_GT.json +++ b/apps/files_sharing/l10n/es_GT.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_HN.js b/apps/files_sharing/l10n/es_HN.js index 0915f17d8bd..bec52e63905 100644 --- a/apps/files_sharing/l10n/es_HN.js +++ b/apps/files_sharing/l10n/es_HN.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_HN.json b/apps/files_sharing/l10n/es_HN.json index 08283c73b07..85ca65463ce 100644 --- a/apps/files_sharing/l10n/es_HN.json +++ b/apps/files_sharing/l10n/es_HN.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_MX.js b/apps/files_sharing/l10n/es_MX.js index 7d2d35a41bc..97deac6c79c 100644 --- a/apps/files_sharing/l10n/es_MX.js +++ b/apps/files_sharing/l10n/es_MX.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_MX.json b/apps/files_sharing/l10n/es_MX.json index 398b736069e..2f60b6cb5c9 100644 --- a/apps/files_sharing/l10n/es_MX.json +++ b/apps/files_sharing/l10n/es_MX.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_NI.js b/apps/files_sharing/l10n/es_NI.js index 0915f17d8bd..bec52e63905 100644 --- a/apps/files_sharing/l10n/es_NI.js +++ b/apps/files_sharing/l10n/es_NI.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_NI.json b/apps/files_sharing/l10n/es_NI.json index 08283c73b07..85ca65463ce 100644 --- a/apps/files_sharing/l10n/es_NI.json +++ b/apps/files_sharing/l10n/es_NI.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_PA.js b/apps/files_sharing/l10n/es_PA.js index 0915f17d8bd..bec52e63905 100644 --- a/apps/files_sharing/l10n/es_PA.js +++ b/apps/files_sharing/l10n/es_PA.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_PA.json b/apps/files_sharing/l10n/es_PA.json index 08283c73b07..85ca65463ce 100644 --- a/apps/files_sharing/l10n/es_PA.json +++ b/apps/files_sharing/l10n/es_PA.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_PE.js b/apps/files_sharing/l10n/es_PE.js index 0915f17d8bd..bec52e63905 100644 --- a/apps/files_sharing/l10n/es_PE.js +++ b/apps/files_sharing/l10n/es_PE.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_PE.json b/apps/files_sharing/l10n/es_PE.json index 08283c73b07..85ca65463ce 100644 --- a/apps/files_sharing/l10n/es_PE.json +++ b/apps/files_sharing/l10n/es_PE.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_PR.js b/apps/files_sharing/l10n/es_PR.js index 0915f17d8bd..bec52e63905 100644 --- a/apps/files_sharing/l10n/es_PR.js +++ b/apps/files_sharing/l10n/es_PR.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_PR.json b/apps/files_sharing/l10n/es_PR.json index 08283c73b07..85ca65463ce 100644 --- a/apps/files_sharing/l10n/es_PR.json +++ b/apps/files_sharing/l10n/es_PR.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_PY.js b/apps/files_sharing/l10n/es_PY.js index 0915f17d8bd..bec52e63905 100644 --- a/apps/files_sharing/l10n/es_PY.js +++ b/apps/files_sharing/l10n/es_PY.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_PY.json b/apps/files_sharing/l10n/es_PY.json index 08283c73b07..85ca65463ce 100644 --- a/apps/files_sharing/l10n/es_PY.json +++ b/apps/files_sharing/l10n/es_PY.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_SV.js b/apps/files_sharing/l10n/es_SV.js index 4c4e76cd8ad..b9b37744be7 100644 --- a/apps/files_sharing/l10n/es_SV.js +++ b/apps/files_sharing/l10n/es_SV.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_SV.json b/apps/files_sharing/l10n/es_SV.json index c4b04de5cdb..24aacd3f495 100644 --- a/apps/files_sharing/l10n/es_SV.json +++ b/apps/files_sharing/l10n/es_SV.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_UY.js b/apps/files_sharing/l10n/es_UY.js index 0915f17d8bd..bec52e63905 100644 --- a/apps/files_sharing/l10n/es_UY.js +++ b/apps/files_sharing/l10n/es_UY.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/es_UY.json b/apps/files_sharing/l10n/es_UY.json index 08283c73b07..85ca65463ce 100644 --- a/apps/files_sharing/l10n/es_UY.json +++ b/apps/files_sharing/l10n/es_UY.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", "No shared links" : "No hay ligas compartidas", "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Download" : "Descargar", "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta", "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas", "Cannot increase permissions" : "No es posible incrementar los permisos", "shared by %s" : "compartido por %s", - "Download" : "Descargar", "Direct link" : "Liga directa", "Add to your Nextcloud" : "Agregar a tu Nextcloud", "Share API is disabled" : "El API para compartir está deshabilitado", diff --git a/apps/files_sharing/l10n/et_EE.js b/apps/files_sharing/l10n/et_EE.js index f6a037d4290..52fbe55a5c3 100644 --- a/apps/files_sharing/l10n/et_EE.js +++ b/apps/files_sharing/l10n/et_EE.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa oled teistega jaganud", "No shared links" : "Jagatud linke pole", "Files and folders you share by link will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa jagad lingiga", + "Download" : "Lae alla", "You can upload into this folder" : "Sa saad sellesse kausta faile üles laadida", "No compatible server found at {remote}" : "Aadressil {remote} ei leitud ühilduvat serverit", "Invalid server URL" : "Vigane serveri URL", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Avalikult jagatud linkide õigusi muuta ei saa", "Cannot increase permissions" : "Ei saa õigusi suurendada", "shared by %s" : "jagas %s", - "Download" : "Lae alla", "Direct link" : "Otsene link", "Add to your Nextcloud" : "Lisa oma Nextcloudi", "Share API is disabled" : "Jagamise API on keelatud", diff --git a/apps/files_sharing/l10n/et_EE.json b/apps/files_sharing/l10n/et_EE.json index 15640a573cf..95c456782b5 100644 --- a/apps/files_sharing/l10n/et_EE.json +++ b/apps/files_sharing/l10n/et_EE.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa oled teistega jaganud", "No shared links" : "Jagatud linke pole", "Files and folders you share by link will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa jagad lingiga", + "Download" : "Lae alla", "You can upload into this folder" : "Sa saad sellesse kausta faile üles laadida", "No compatible server found at {remote}" : "Aadressil {remote} ei leitud ühilduvat serverit", "Invalid server URL" : "Vigane serveri URL", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "Avalikult jagatud linkide õigusi muuta ei saa", "Cannot increase permissions" : "Ei saa õigusi suurendada", "shared by %s" : "jagas %s", - "Download" : "Lae alla", "Direct link" : "Otsene link", "Add to your Nextcloud" : "Lisa oma Nextcloudi", "Share API is disabled" : "Jagamise API on keelatud", diff --git a/apps/files_sharing/l10n/fi.js b/apps/files_sharing/l10n/fi.js index 3e1964f8927..571d44b9b4b 100644 --- a/apps/files_sharing/l10n/fi.js +++ b/apps/files_sharing/l10n/fi.js @@ -18,6 +18,7 @@ OC.L10N.register( "Shares will show up here" : "Jaot näkyvät täällä", "Restore share" : "Palauta jako", "Something happened. Unable to restore the share." : "Jotain tapahtui. Jakoa ei kyetty palauttamaan.", + "Download" : "Lataa", "You can upload into this folder" : "Voit lähettää tiedostoja tähän kansioon", "No compatible server found at {remote}" : "Yhteensopivaa palvelinta ei löytynyt osoitteesta {remote}", "Invalid server URL" : "Virheellinen palvelimen URL", @@ -95,7 +96,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Julkisten jakolinkkien käyttöoikeuksia ei voi muuttaa", "Cannot increase permissions" : "Oikeuksien lisääminen ei onnistu", "shared by %s" : "%s jakama", - "Download" : "Lataa", "Direct link" : "Suora linkki", "Add to your Nextcloud" : "Lisää Nextcloudiisi", "Share API is disabled" : "Jakamisrajapinta on poistettu käytöstä", diff --git a/apps/files_sharing/l10n/fi.json b/apps/files_sharing/l10n/fi.json index fb4c8bcfbaf..ea7c646a99f 100644 --- a/apps/files_sharing/l10n/fi.json +++ b/apps/files_sharing/l10n/fi.json @@ -16,6 +16,7 @@ "Shares will show up here" : "Jaot näkyvät täällä", "Restore share" : "Palauta jako", "Something happened. Unable to restore the share." : "Jotain tapahtui. Jakoa ei kyetty palauttamaan.", + "Download" : "Lataa", "You can upload into this folder" : "Voit lähettää tiedostoja tähän kansioon", "No compatible server found at {remote}" : "Yhteensopivaa palvelinta ei löytynyt osoitteesta {remote}", "Invalid server URL" : "Virheellinen palvelimen URL", @@ -93,7 +94,6 @@ "Can't change permissions for public share links" : "Julkisten jakolinkkien käyttöoikeuksia ei voi muuttaa", "Cannot increase permissions" : "Oikeuksien lisääminen ei onnistu", "shared by %s" : "%s jakama", - "Download" : "Lataa", "Direct link" : "Suora linkki", "Add to your Nextcloud" : "Lisää Nextcloudiisi", "Share API is disabled" : "Jakamisrajapinta on poistettu käytöstä", diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index 597b2114770..9ffdf36f331 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -18,6 +18,7 @@ OC.L10N.register( "Shares will show up here" : "Les partages seront affichés ici", "Restore share" : "Restaurer le partage", "Something happened. Unable to restore the share." : "Quelque chose s'est passé. Impossible de restaurer le partage.", + "Download" : "Télécharger", "You can upload into this folder" : "Vous pouvez téléverser dans ce dossier", "No compatible server found at {remote}" : "Aucun serveur compatible trouvé sur {remote}", "Invalid server URL" : "URL serveur invalide", @@ -98,7 +99,6 @@ OC.L10N.register( "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Le partage de l'envoi du mot de passe par Nextcloud Talk a échoué parce que Nextcloud Talk n'est pas activé.", "Cannot increase permissions" : "Impossible d'augmenter les permissions", "shared by %s" : "partagé par %s", - "Download" : "Télécharger", "Direct link" : "Lien direct", "Add to your Nextcloud" : "Ajouter à votre Nextcloud", "Share API is disabled" : "l'API de partage est désactivée", diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index 034fbf00a98..f8f8e7e3e58 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -16,6 +16,7 @@ "Shares will show up here" : "Les partages seront affichés ici", "Restore share" : "Restaurer le partage", "Something happened. Unable to restore the share." : "Quelque chose s'est passé. Impossible de restaurer le partage.", + "Download" : "Télécharger", "You can upload into this folder" : "Vous pouvez téléverser dans ce dossier", "No compatible server found at {remote}" : "Aucun serveur compatible trouvé sur {remote}", "Invalid server URL" : "URL serveur invalide", @@ -96,7 +97,6 @@ "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Le partage de l'envoi du mot de passe par Nextcloud Talk a échoué parce que Nextcloud Talk n'est pas activé.", "Cannot increase permissions" : "Impossible d'augmenter les permissions", "shared by %s" : "partagé par %s", - "Download" : "Télécharger", "Direct link" : "Lien direct", "Add to your Nextcloud" : "Ajouter à votre Nextcloud", "Share API is disabled" : "l'API de partage est désactivée", diff --git a/apps/files_sharing/l10n/he.js b/apps/files_sharing/l10n/he.js index 7d5483376a6..f0d9f4cbc32 100644 --- a/apps/files_sharing/l10n/he.js +++ b/apps/files_sharing/l10n/he.js @@ -15,6 +15,7 @@ OC.L10N.register( "Shares you deleted will show up here" : "שיתופים שמחקת יופיעו כאן", "Restore share" : "שחזור שיתוף", "Something happened. Unable to restore the share." : "משהו התרחש. לא ניתן לשחזר את השיתוף.", + "Download" : "הורדה", "You can upload into this folder" : "ניתן להעלות לתיקייה זו", "No compatible server found at {remote}" : "לא נמצא שרת תואם בכתובת {remote}", "Invalid server URL" : "כתובת השרת שגויה", @@ -78,7 +79,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "לא ניתן לשנות הרשאות לקישורי שיתוף ציבוריים", "Cannot increase permissions" : "לא ניתן להעלות הרשאות", "shared by %s" : "שותף על ידי %s", - "Download" : "הורדה", "Direct link" : "קישור ישיר", "Add to your Nextcloud" : "הוספה ל־Nextcloud שלך", "Share API is disabled" : "שיתוף API מנוטרל", diff --git a/apps/files_sharing/l10n/he.json b/apps/files_sharing/l10n/he.json index eedf990d70b..c2aa245c09d 100644 --- a/apps/files_sharing/l10n/he.json +++ b/apps/files_sharing/l10n/he.json @@ -13,6 +13,7 @@ "Shares you deleted will show up here" : "שיתופים שמחקת יופיעו כאן", "Restore share" : "שחזור שיתוף", "Something happened. Unable to restore the share." : "משהו התרחש. לא ניתן לשחזר את השיתוף.", + "Download" : "הורדה", "You can upload into this folder" : "ניתן להעלות לתיקייה זו", "No compatible server found at {remote}" : "לא נמצא שרת תואם בכתובת {remote}", "Invalid server URL" : "כתובת השרת שגויה", @@ -76,7 +77,6 @@ "Can't change permissions for public share links" : "לא ניתן לשנות הרשאות לקישורי שיתוף ציבוריים", "Cannot increase permissions" : "לא ניתן להעלות הרשאות", "shared by %s" : "שותף על ידי %s", - "Download" : "הורדה", "Direct link" : "קישור ישיר", "Add to your Nextcloud" : "הוספה ל־Nextcloud שלך", "Share API is disabled" : "שיתוף API מנוטרל", diff --git a/apps/files_sharing/l10n/hu.js b/apps/files_sharing/l10n/hu.js index 7aa87f149c4..b54a455b013 100644 --- a/apps/files_sharing/l10n/hu.js +++ b/apps/files_sharing/l10n/hu.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Az Ön által megosztott fájlok és mappák itt jelennek meg", "No shared links" : "Nincs megosztott hivatkozás", "Files and folders you share by link will show up here" : "A hivatkozással megosztott fájlok és mappák itt jelennek meg", + "Download" : "Letöltés", "You can upload into this folder" : "Ebbe a mappába fel tud tölteni", "No compatible server found at {remote}" : "Itt nem található kompatibilis szerver: {remote}", "Invalid server URL" : "Érvénytelen szerver URL", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Nem lehet módosítani a nyilvános megosztási hivatkozások jogosultságait", "Cannot increase permissions" : "Nem lehet növelni az engedélyeket", "shared by %s" : "megosztotta %s", - "Download" : "Letöltés", "Direct link" : "Közvetlen hivatkozás", "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz", "Share API is disabled" : "Megosztás API letiltva", diff --git a/apps/files_sharing/l10n/hu.json b/apps/files_sharing/l10n/hu.json index f60fbb8d063..42fc56a8e51 100644 --- a/apps/files_sharing/l10n/hu.json +++ b/apps/files_sharing/l10n/hu.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Az Ön által megosztott fájlok és mappák itt jelennek meg", "No shared links" : "Nincs megosztott hivatkozás", "Files and folders you share by link will show up here" : "A hivatkozással megosztott fájlok és mappák itt jelennek meg", + "Download" : "Letöltés", "You can upload into this folder" : "Ebbe a mappába fel tud tölteni", "No compatible server found at {remote}" : "Itt nem található kompatibilis szerver: {remote}", "Invalid server URL" : "Érvénytelen szerver URL", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "Nem lehet módosítani a nyilvános megosztási hivatkozások jogosultságait", "Cannot increase permissions" : "Nem lehet növelni az engedélyeket", "shared by %s" : "megosztotta %s", - "Download" : "Letöltés", "Direct link" : "Közvetlen hivatkozás", "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz", "Share API is disabled" : "Megosztás API letiltva", diff --git a/apps/files_sharing/l10n/id.js b/apps/files_sharing/l10n/id.js index 6f9b9e2a573..0faca4356d9 100644 --- a/apps/files_sharing/l10n/id.js +++ b/apps/files_sharing/l10n/id.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Berkas dan folder yang Anda bagikan akan ditampilkan disini", "No shared links" : "Tidak ada tautan berbagi", "Files and folders you share by link will show up here" : "Berkas dan folder yang Anda bagikan menggunakan tautan akan ditampilkan disini", + "Download" : "Unduh", "You can upload into this folder" : "Anda dapat mengunggah kedalam folder ini", "No compatible server found at {remote}" : "Tidak ditemukan server yang kompatibel pada {remote}", "Invalid server URL" : "Server URL tidak valid", @@ -43,7 +44,6 @@ OC.L10N.register( "Wrong or no update parameter given" : "Parameter salah atau tidak diperbarui", "Can't change permissions for public share links" : "Tidak dapat mengubah izin untuk tautan berbagi publik", "Cannot increase permissions" : "Tidak dapat menambah izin", - "Download" : "Unduh", "Direct link" : "Tautan langsung", "Add to your Nextcloud" : "Tambahkan ke Nextcloud Anda", "Share API is disabled" : "API pembagian dinonaktifkan", diff --git a/apps/files_sharing/l10n/id.json b/apps/files_sharing/l10n/id.json index 521ced495cc..43f421d2338 100644 --- a/apps/files_sharing/l10n/id.json +++ b/apps/files_sharing/l10n/id.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Berkas dan folder yang Anda bagikan akan ditampilkan disini", "No shared links" : "Tidak ada tautan berbagi", "Files and folders you share by link will show up here" : "Berkas dan folder yang Anda bagikan menggunakan tautan akan ditampilkan disini", + "Download" : "Unduh", "You can upload into this folder" : "Anda dapat mengunggah kedalam folder ini", "No compatible server found at {remote}" : "Tidak ditemukan server yang kompatibel pada {remote}", "Invalid server URL" : "Server URL tidak valid", @@ -41,7 +42,6 @@ "Wrong or no update parameter given" : "Parameter salah atau tidak diperbarui", "Can't change permissions for public share links" : "Tidak dapat mengubah izin untuk tautan berbagi publik", "Cannot increase permissions" : "Tidak dapat menambah izin", - "Download" : "Unduh", "Direct link" : "Tautan langsung", "Add to your Nextcloud" : "Tambahkan ke Nextcloud Anda", "Share API is disabled" : "API pembagian dinonaktifkan", diff --git a/apps/files_sharing/l10n/is.js b/apps/files_sharing/l10n/is.js index 24bdaf4f3fc..1bba3ab4340 100644 --- a/apps/files_sharing/l10n/is.js +++ b/apps/files_sharing/l10n/is.js @@ -18,6 +18,7 @@ OC.L10N.register( "Shares will show up here" : "Sameinir munu birtast hér", "Restore share" : "Endurheimta sameign", "Something happened. Unable to restore the share." : "Eitthvað skrýtið gerðist. Gat ekki endurheimt sameignina.", + "Download" : "Niðurhal", "You can upload into this folder" : "Þú getur sent inn skrár í þessa möppu", "No compatible server found at {remote}" : "Enginn samhæfður vefþjónn fannst á {remote}", "Invalid server URL" : "Ógild URI-slóð vefþjóns", @@ -96,7 +97,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Ekki tókst að breyta aðgangsheimildum fyrir opinbera deilingartengla", "Cannot increase permissions" : "Get ekki aukið aðgangsheimildir", "shared by %s" : "Deilt af %s", - "Download" : "Niðurhal", "Direct link" : "Beinn tengill", "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud", "Share API is disabled" : "Deilingar-API er óvirkt", diff --git a/apps/files_sharing/l10n/is.json b/apps/files_sharing/l10n/is.json index 4c15ddb93f2..404e8606403 100644 --- a/apps/files_sharing/l10n/is.json +++ b/apps/files_sharing/l10n/is.json @@ -16,6 +16,7 @@ "Shares will show up here" : "Sameinir munu birtast hér", "Restore share" : "Endurheimta sameign", "Something happened. Unable to restore the share." : "Eitthvað skrýtið gerðist. Gat ekki endurheimt sameignina.", + "Download" : "Niðurhal", "You can upload into this folder" : "Þú getur sent inn skrár í þessa möppu", "No compatible server found at {remote}" : "Enginn samhæfður vefþjónn fannst á {remote}", "Invalid server URL" : "Ógild URI-slóð vefþjóns", @@ -94,7 +95,6 @@ "Can't change permissions for public share links" : "Ekki tókst að breyta aðgangsheimildum fyrir opinbera deilingartengla", "Cannot increase permissions" : "Get ekki aukið aðgangsheimildir", "shared by %s" : "Deilt af %s", - "Download" : "Niðurhal", "Direct link" : "Beinn tengill", "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud", "Share API is disabled" : "Deilingar-API er óvirkt", diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js index 396e166e95b..fdc5f66489e 100644 --- a/apps/files_sharing/l10n/it.js +++ b/apps/files_sharing/l10n/it.js @@ -18,6 +18,7 @@ OC.L10N.register( "Shares will show up here" : "Le condivisioni saranno mostrate qui", "Restore share" : "Ripristina condivisione", "Something happened. Unable to restore the share." : "Qualcosa non ha funzionato. Impossible ripristinare la condivisione.", + "Download" : "Scarica", "You can upload into this folder" : "Puoi caricare in questa cartella", "No compatible server found at {remote}" : "Nessun server compatibile trovato su {remote}", "Invalid server URL" : "URL del server non valido", @@ -98,7 +99,6 @@ OC.L10N.register( "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "La condivisione tramite invio della password da Nextcloud Talk non è riuscito poiché Nextcloud Talk non è abilitato", "Cannot increase permissions" : "Impossibile aumentare i permessi", "shared by %s" : "condiviso da %s", - "Download" : "Scarica", "Direct link" : "Collegamento diretto", "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud", "Share API is disabled" : "API di condivisione disabilitate", diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json index e77b1181ec1..cca17f25aa0 100644 --- a/apps/files_sharing/l10n/it.json +++ b/apps/files_sharing/l10n/it.json @@ -16,6 +16,7 @@ "Shares will show up here" : "Le condivisioni saranno mostrate qui", "Restore share" : "Ripristina condivisione", "Something happened. Unable to restore the share." : "Qualcosa non ha funzionato. Impossible ripristinare la condivisione.", + "Download" : "Scarica", "You can upload into this folder" : "Puoi caricare in questa cartella", "No compatible server found at {remote}" : "Nessun server compatibile trovato su {remote}", "Invalid server URL" : "URL del server non valido", @@ -96,7 +97,6 @@ "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "La condivisione tramite invio della password da Nextcloud Talk non è riuscito poiché Nextcloud Talk non è abilitato", "Cannot increase permissions" : "Impossibile aumentare i permessi", "shared by %s" : "condiviso da %s", - "Download" : "Scarica", "Direct link" : "Collegamento diretto", "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud", "Share API is disabled" : "API di condivisione disabilitate", diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js index c26120f9e09..fa5aae87034 100644 --- a/apps/files_sharing/l10n/ja.js +++ b/apps/files_sharing/l10n/ja.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "共有したファイルやフォルダーは、ここに表示されます。", "No shared links" : "共有リンクはありません", "Files and folders you share by link will show up here" : "リンクで共有したファイルやフォルダーは、ここに表示されます。", + "Download" : "ダウンロード", "You can upload into this folder" : "このフォルダーにアップロードできます", "No compatible server found at {remote}" : "互換性のあるサーバーが {remote} にはありません。", "Invalid server URL" : "サーバーのURLが無効", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "URLリンク共有のパーミッションを変更できません", "Cannot increase permissions" : "パーミッションを追加できません", "shared by %s" : "%s が共有", - "Download" : "ダウンロード", "Direct link" : "リンク", "Add to your Nextcloud" : "あなたのNextcloudに追加", "Share API is disabled" : "共有APIが無効です。", diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json index 7e15984b522..59378036f35 100644 --- a/apps/files_sharing/l10n/ja.json +++ b/apps/files_sharing/l10n/ja.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "共有したファイルやフォルダーは、ここに表示されます。", "No shared links" : "共有リンクはありません", "Files and folders you share by link will show up here" : "リンクで共有したファイルやフォルダーは、ここに表示されます。", + "Download" : "ダウンロード", "You can upload into this folder" : "このフォルダーにアップロードできます", "No compatible server found at {remote}" : "互換性のあるサーバーが {remote} にはありません。", "Invalid server URL" : "サーバーのURLが無効", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "URLリンク共有のパーミッションを変更できません", "Cannot increase permissions" : "パーミッションを追加できません", "shared by %s" : "%s が共有", - "Download" : "ダウンロード", "Direct link" : "リンク", "Add to your Nextcloud" : "あなたのNextcloudに追加", "Share API is disabled" : "共有APIが無効です。", diff --git a/apps/files_sharing/l10n/ka_GE.js b/apps/files_sharing/l10n/ka_GE.js index 57b8d315d34..130b8afc8c7 100644 --- a/apps/files_sharing/l10n/ka_GE.js +++ b/apps/files_sharing/l10n/ka_GE.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "აქ გამოჩნდება ფაილები და დირექტორიები რომლებსაც აზიარებთ თქვენ", "No shared links" : "გაზიარებული ბმულები არაა", "Files and folders you share by link will show up here" : "აქ გამოჩნდება ფაილები და დირექტორიები რომლებსაც ბმულით აზიარებთ თქვენ", + "Download" : "ჩამოტვირთვა", "You can upload into this folder" : "შეგიძლიათ ატვირთოთ ამ დირექტორიაში", "No compatible server found at {remote}" : "თავსებადი სერვერი {remote}-ზე ვერ იქნა ნაპოვნი", "Invalid server URL" : "არასწორი სერვერის URL", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "უფლებები საზოგადოდ გაზიარებულ ბმულზე ვერ შეიცვალა", "Cannot increase permissions" : "უფლებების გაზრდა ვერ მოხერხდა", "shared by %s" : "გააზიარა მომხმარებელმა %s", - "Download" : "ჩამოტვირთვა", "Direct link" : "პირდაპირი ბმული", "Add to your Nextcloud" : "თქვენს Nextcloud-ში დამატება", "Share API is disabled" : "გაზიარების API არაა მოქმედი", diff --git a/apps/files_sharing/l10n/ka_GE.json b/apps/files_sharing/l10n/ka_GE.json index ba176797e5b..4a3a47d929c 100644 --- a/apps/files_sharing/l10n/ka_GE.json +++ b/apps/files_sharing/l10n/ka_GE.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "აქ გამოჩნდება ფაილები და დირექტორიები რომლებსაც აზიარებთ თქვენ", "No shared links" : "გაზიარებული ბმულები არაა", "Files and folders you share by link will show up here" : "აქ გამოჩნდება ფაილები და დირექტორიები რომლებსაც ბმულით აზიარებთ თქვენ", + "Download" : "ჩამოტვირთვა", "You can upload into this folder" : "შეგიძლიათ ატვირთოთ ამ დირექტორიაში", "No compatible server found at {remote}" : "თავსებადი სერვერი {remote}-ზე ვერ იქნა ნაპოვნი", "Invalid server URL" : "არასწორი სერვერის URL", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "უფლებები საზოგადოდ გაზიარებულ ბმულზე ვერ შეიცვალა", "Cannot increase permissions" : "უფლებების გაზრდა ვერ მოხერხდა", "shared by %s" : "გააზიარა მომხმარებელმა %s", - "Download" : "ჩამოტვირთვა", "Direct link" : "პირდაპირი ბმული", "Add to your Nextcloud" : "თქვენს Nextcloud-ში დამატება", "Share API is disabled" : "გაზიარების API არაა მოქმედი", diff --git a/apps/files_sharing/l10n/ko.js b/apps/files_sharing/l10n/ko.js index df13e9af165..4c2dc4b0c21 100644 --- a/apps/files_sharing/l10n/ko.js +++ b/apps/files_sharing/l10n/ko.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "내가 공유하는 파일과 폴더가 여기에 나타납니다", "No shared links" : "공유된 링크 없음", "Files and folders you share by link will show up here" : "내가 링크로 공유하는 파일과 폴더가 여기에 나타납니다", + "Download" : "다운로드", "You can upload into this folder" : "이 폴더에 업로드할 수 있습니다", "No compatible server found at {remote}" : "{remote}에서 호환 서버를 찾을 수 없음", "Invalid server URL" : "잘못된 서버 URL", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "공개 공유 링크의 권한을 변경할 수 없음", "Cannot increase permissions" : "권한을 늘릴 수 없음", "shared by %s" : "%s에 의해 공유됨", - "Download" : "다운로드", "Direct link" : "직접 링크", "Add to your Nextcloud" : "내 Nextcloud에 추가", "Share API is disabled" : "공유 API가 비활성화됨", diff --git a/apps/files_sharing/l10n/ko.json b/apps/files_sharing/l10n/ko.json index 68374c02ec8..3080a709f0c 100644 --- a/apps/files_sharing/l10n/ko.json +++ b/apps/files_sharing/l10n/ko.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "내가 공유하는 파일과 폴더가 여기에 나타납니다", "No shared links" : "공유된 링크 없음", "Files and folders you share by link will show up here" : "내가 링크로 공유하는 파일과 폴더가 여기에 나타납니다", + "Download" : "다운로드", "You can upload into this folder" : "이 폴더에 업로드할 수 있습니다", "No compatible server found at {remote}" : "{remote}에서 호환 서버를 찾을 수 없음", "Invalid server URL" : "잘못된 서버 URL", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "공개 공유 링크의 권한을 변경할 수 없음", "Cannot increase permissions" : "권한을 늘릴 수 없음", "shared by %s" : "%s에 의해 공유됨", - "Download" : "다운로드", "Direct link" : "직접 링크", "Add to your Nextcloud" : "내 Nextcloud에 추가", "Share API is disabled" : "공유 API가 비활성화됨", diff --git a/apps/files_sharing/l10n/lt_LT.js b/apps/files_sharing/l10n/lt_LT.js index 1a1f2e8c5eb..33159925151 100644 --- a/apps/files_sharing/l10n/lt_LT.js +++ b/apps/files_sharing/l10n/lt_LT.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Čia rodomi išsiųsti duomenys", "No shared links" : "Aplankas tuščias", "Files and folders you share by link will show up here" : "Čia rodomos išsiųstos nuorodos į duomenis", + "Download" : "Atsisiųsti", "You can upload into this folder" : "Galite įkelti į šį aplanką", "No compatible server found at {remote}" : "Nerasta jokio suderinamo serverio ties {remote}", "Invalid server URL" : "Neteisingas serverio URL adresas", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Negalima keisti leidimų viešai bendrinamoms nuorodoms", "Cannot increase permissions" : "Negalima pridėti papildomų leidimų", "shared by %s" : "pasidalino %s", - "Download" : "Atsisiųsti", "Direct link" : "Tiesioginė nuoroda", "Add to your Nextcloud" : "Pridėti į jūsų NextCloud", "Share API is disabled" : "Bendrinimo API yra išjungtas", diff --git a/apps/files_sharing/l10n/lt_LT.json b/apps/files_sharing/l10n/lt_LT.json index 9561af1e0fa..1e6e100f193 100644 --- a/apps/files_sharing/l10n/lt_LT.json +++ b/apps/files_sharing/l10n/lt_LT.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Čia rodomi išsiųsti duomenys", "No shared links" : "Aplankas tuščias", "Files and folders you share by link will show up here" : "Čia rodomos išsiųstos nuorodos į duomenis", + "Download" : "Atsisiųsti", "You can upload into this folder" : "Galite įkelti į šį aplanką", "No compatible server found at {remote}" : "Nerasta jokio suderinamo serverio ties {remote}", "Invalid server URL" : "Neteisingas serverio URL adresas", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "Negalima keisti leidimų viešai bendrinamoms nuorodoms", "Cannot increase permissions" : "Negalima pridėti papildomų leidimų", "shared by %s" : "pasidalino %s", - "Download" : "Atsisiųsti", "Direct link" : "Tiesioginė nuoroda", "Add to your Nextcloud" : "Pridėti į jūsų NextCloud", "Share API is disabled" : "Bendrinimo API yra išjungtas", diff --git a/apps/files_sharing/l10n/lv.js b/apps/files_sharing/l10n/lv.js index 75033ac4fd9..1c28c779d44 100644 --- a/apps/files_sharing/l10n/lv.js +++ b/apps/files_sharing/l10n/lv.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Datnes un mapes, ko koplietosi ar citiem, tiks rādīti šeit", "No shared links" : "Nav koplietotu saišu", "Files and folders you share by link will show up here" : "Datnes un mapes, ko koplietosi ar saitēm, tiks rādīti šeit", + "Download" : "Lejupielādēt", "You can upload into this folder" : "Jūs variet augšuplādēt šajā mapē", "No compatible server found at {remote}" : "Nav atrasts neviens saderīgs serveris {remote}", "Invalid server URL" : "Nederīgs servera url", @@ -53,7 +54,6 @@ OC.L10N.register( "Could not lock path" : "Nevarēja bloķēt ceļu", "Can't change permissions for public share links" : "Publiskai koplietošanas saitei nevar mainīt tiesības", "Cannot increase permissions" : "Nevar palielināt tiesības", - "Download" : "Lejupielādēt", "Direct link" : "Tiešā saite", "Add to your Nextcloud" : "Pievienot savam Nextcloud", "Share API is disabled" : "Koplietošanas API ir atslēgta", diff --git a/apps/files_sharing/l10n/lv.json b/apps/files_sharing/l10n/lv.json index bccc9a7f9ce..967a5790b78 100644 --- a/apps/files_sharing/l10n/lv.json +++ b/apps/files_sharing/l10n/lv.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Datnes un mapes, ko koplietosi ar citiem, tiks rādīti šeit", "No shared links" : "Nav koplietotu saišu", "Files and folders you share by link will show up here" : "Datnes un mapes, ko koplietosi ar saitēm, tiks rādīti šeit", + "Download" : "Lejupielādēt", "You can upload into this folder" : "Jūs variet augšuplādēt šajā mapē", "No compatible server found at {remote}" : "Nav atrasts neviens saderīgs serveris {remote}", "Invalid server URL" : "Nederīgs servera url", @@ -51,7 +52,6 @@ "Could not lock path" : "Nevarēja bloķēt ceļu", "Can't change permissions for public share links" : "Publiskai koplietošanas saitei nevar mainīt tiesības", "Cannot increase permissions" : "Nevar palielināt tiesības", - "Download" : "Lejupielādēt", "Direct link" : "Tiešā saite", "Add to your Nextcloud" : "Pievienot savam Nextcloud", "Share API is disabled" : "Koplietošanas API ir atslēgta", diff --git a/apps/files_sharing/l10n/nb.js b/apps/files_sharing/l10n/nb.js index f7d033ab9c7..d8e750b8ecf 100644 --- a/apps/files_sharing/l10n/nb.js +++ b/apps/files_sharing/l10n/nb.js @@ -11,6 +11,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Filer og mapper som du deler vil bli vist her", "No shared links" : "Ingen delte lenker", "Files and folders you share by link will show up here" : "Filer og mapper som du deler med lenke vil bli vist her", + "Download" : "Last ned", "You can upload into this folder" : "Du kan laste opp til denne mappen", "No compatible server found at {remote}" : "Ingen kompatibel tjener ble funnet på {remote}", "Invalid server URL" : "Ugyldig tjener adresse", @@ -88,7 +89,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Kan ikke endre rettigheter for offentlige lenker", "Cannot increase permissions" : "Kan ikke øke tillatelser", "shared by %s" : "delt av %s", - "Download" : "Last ned", "Direct link" : "Direkte lenke", "Add to your Nextcloud" : "Legg til i din Nextcloud", "Share API is disabled" : "Deling API er deaktivert", diff --git a/apps/files_sharing/l10n/nb.json b/apps/files_sharing/l10n/nb.json index 55be7c7da25..16917d9839a 100644 --- a/apps/files_sharing/l10n/nb.json +++ b/apps/files_sharing/l10n/nb.json @@ -9,6 +9,7 @@ "Files and folders you share will show up here" : "Filer og mapper som du deler vil bli vist her", "No shared links" : "Ingen delte lenker", "Files and folders you share by link will show up here" : "Filer og mapper som du deler med lenke vil bli vist her", + "Download" : "Last ned", "You can upload into this folder" : "Du kan laste opp til denne mappen", "No compatible server found at {remote}" : "Ingen kompatibel tjener ble funnet på {remote}", "Invalid server URL" : "Ugyldig tjener adresse", @@ -86,7 +87,6 @@ "Can't change permissions for public share links" : "Kan ikke endre rettigheter for offentlige lenker", "Cannot increase permissions" : "Kan ikke øke tillatelser", "shared by %s" : "delt av %s", - "Download" : "Last ned", "Direct link" : "Direkte lenke", "Add to your Nextcloud" : "Legg til i din Nextcloud", "Share API is disabled" : "Deling API er deaktivert", diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js index 9ffcbce99aa..89a11bf775a 100644 --- a/apps/files_sharing/l10n/nl.js +++ b/apps/files_sharing/l10n/nl.js @@ -13,6 +13,7 @@ OC.L10N.register( "Files and folders you share by link will show up here" : "Bestanden en mappen die je via links deelt, worden hier getoond", "No deleted shares" : "Geen verwijderde shares", "No shares" : "Geen shares", + "Download" : "Downloaden", "You can upload into this folder" : "Je kunt uploaden naar deze map", "No compatible server found at {remote}" : "Geen geschikte server gevonden op {remote}", "Invalid server URL" : "Ongeldig server URL", @@ -90,7 +91,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Kan rechten voor openbaar gedeelde links niet wijzigen", "Cannot increase permissions" : "Kan de rechten niet verruimen", "shared by %s" : "Gedeeld door %s", - "Download" : "Downloaden", "Direct link" : "Directe link", "Add to your Nextcloud" : "Toevoegen aan je Nextcloud", "Share API is disabled" : "Delen API is uitgeschakeld", diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json index 3ac225d9842..d6be0f282fc 100644 --- a/apps/files_sharing/l10n/nl.json +++ b/apps/files_sharing/l10n/nl.json @@ -11,6 +11,7 @@ "Files and folders you share by link will show up here" : "Bestanden en mappen die je via links deelt, worden hier getoond", "No deleted shares" : "Geen verwijderde shares", "No shares" : "Geen shares", + "Download" : "Downloaden", "You can upload into this folder" : "Je kunt uploaden naar deze map", "No compatible server found at {remote}" : "Geen geschikte server gevonden op {remote}", "Invalid server URL" : "Ongeldig server URL", @@ -88,7 +89,6 @@ "Can't change permissions for public share links" : "Kan rechten voor openbaar gedeelde links niet wijzigen", "Cannot increase permissions" : "Kan de rechten niet verruimen", "shared by %s" : "Gedeeld door %s", - "Download" : "Downloaden", "Direct link" : "Directe link", "Add to your Nextcloud" : "Toevoegen aan je Nextcloud", "Share API is disabled" : "Delen API is uitgeschakeld", diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js index f69e3dc02e5..f0d3aa31ef8 100644 --- a/apps/files_sharing/l10n/pl.js +++ b/apps/files_sharing/l10n/pl.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Tutaj pokażą się pliki i foldery, które udostępniasz", "No shared links" : "Brak udostępnionych linków", "Files and folders you share by link will show up here" : "Tutaj pokażą się pliki i foldery, które udostępniasz linkiem", + "Download" : "Pobierz", "You can upload into this folder" : "Możesz przesłać do tego folderu", "No compatible server found at {remote}" : "Nie znaleziono kompatybilnego serwera na {remote}", "Invalid server URL" : "Błędny adres serwera", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Nie można zmienić uprawnień dla publicznych udziałów", "Cannot increase permissions" : "Nie można zwiększyć uprawnień", "shared by %s" : "udostępnione przez %s", - "Download" : "Pobierz", "Direct link" : "Bezpośredni link", "Add to your Nextcloud" : "Dodaj do swojego Nextcloud", "Share API is disabled" : "API udostępniania jest wyłączone", diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json index 13646d79d01..a87e848fb7e 100644 --- a/apps/files_sharing/l10n/pl.json +++ b/apps/files_sharing/l10n/pl.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Tutaj pokażą się pliki i foldery, które udostępniasz", "No shared links" : "Brak udostępnionych linków", "Files and folders you share by link will show up here" : "Tutaj pokażą się pliki i foldery, które udostępniasz linkiem", + "Download" : "Pobierz", "You can upload into this folder" : "Możesz przesłać do tego folderu", "No compatible server found at {remote}" : "Nie znaleziono kompatybilnego serwera na {remote}", "Invalid server URL" : "Błędny adres serwera", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "Nie można zmienić uprawnień dla publicznych udziałów", "Cannot increase permissions" : "Nie można zwiększyć uprawnień", "shared by %s" : "udostępnione przez %s", - "Download" : "Pobierz", "Direct link" : "Bezpośredni link", "Add to your Nextcloud" : "Dodaj do swojego Nextcloud", "Share API is disabled" : "API udostępniania jest wyłączone", diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js index 22acbbf14eb..7201ea57dc2 100644 --- a/apps/files_sharing/l10n/pt_BR.js +++ b/apps/files_sharing/l10n/pt_BR.js @@ -18,6 +18,7 @@ OC.L10N.register( "Shares will show up here" : "Compartilhamentos serão mostrados aqui", "Restore share" : "Restaurar compartilhamento", "Something happened. Unable to restore the share." : "Algo aconteceu. Não foi possível restaurar o compartilhamento.", + "Download" : "Baixar", "You can upload into this folder" : "Você não pode enviar arquivos para esta pasta", "No compatible server found at {remote}" : "Nenhum servidor compativel encontrado em {remote}", "Invalid server URL" : "URL do servidor inválida", @@ -98,7 +99,6 @@ OC.L10N.register( "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "O compartilhamento falhou ao enviar a senha ao Nextcloud Talk porque este não está ativado", "Cannot increase permissions" : "Não foi possível aumentar as permissões", "shared by %s" : "compartilhado por %s", - "Download" : "Baixar", "Direct link" : "Link direto", "Add to your Nextcloud" : "Adicionar ao seu Nextcloud", "Share API is disabled" : "O compartilhamento de API está desabilitado.", diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json index 4b60dc442af..5b96bb51b6d 100644 --- a/apps/files_sharing/l10n/pt_BR.json +++ b/apps/files_sharing/l10n/pt_BR.json @@ -16,6 +16,7 @@ "Shares will show up here" : "Compartilhamentos serão mostrados aqui", "Restore share" : "Restaurar compartilhamento", "Something happened. Unable to restore the share." : "Algo aconteceu. Não foi possível restaurar o compartilhamento.", + "Download" : "Baixar", "You can upload into this folder" : "Você não pode enviar arquivos para esta pasta", "No compatible server found at {remote}" : "Nenhum servidor compativel encontrado em {remote}", "Invalid server URL" : "URL do servidor inválida", @@ -96,7 +97,6 @@ "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "O compartilhamento falhou ao enviar a senha ao Nextcloud Talk porque este não está ativado", "Cannot increase permissions" : "Não foi possível aumentar as permissões", "shared by %s" : "compartilhado por %s", - "Download" : "Baixar", "Direct link" : "Link direto", "Add to your Nextcloud" : "Adicionar ao seu Nextcloud", "Share API is disabled" : "O compartilhamento de API está desabilitado.", diff --git a/apps/files_sharing/l10n/pt_PT.js b/apps/files_sharing/l10n/pt_PT.js index bdadd56df8f..a928eb5554a 100644 --- a/apps/files_sharing/l10n/pt_PT.js +++ b/apps/files_sharing/l10n/pt_PT.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Os ficheiros e as pastas que partilha serão mostrados aqui", "No shared links" : "Sem hiperligações partilhadas", "Files and folders you share by link will show up here" : "Os ficheiros e as pastas que partilha com esta hiperligação, serão mostrados aqui", + "Download" : "Transferir", "You can upload into this folder" : "Pode enviar para esta pasta", "No compatible server found at {remote}" : "Nenhum servidor compatível encontrado em {remote}", "Invalid server URL" : "URL de servidor inválido", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Não é possível alterar as permissões para as hiperligações de partilha pública", "Cannot increase permissions" : "Não é possível incrementar as permissões", "shared by %s" : "partilhado por %s", - "Download" : "Transferir", "Direct link" : "Hiperligação direta", "Add to your Nextcloud" : "Adicionar à sua Nextcloud", "Share API is disabled" : "A partilha de API está desativada", diff --git a/apps/files_sharing/l10n/pt_PT.json b/apps/files_sharing/l10n/pt_PT.json index d0917053f1f..39fd45311af 100644 --- a/apps/files_sharing/l10n/pt_PT.json +++ b/apps/files_sharing/l10n/pt_PT.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Os ficheiros e as pastas que partilha serão mostrados aqui", "No shared links" : "Sem hiperligações partilhadas", "Files and folders you share by link will show up here" : "Os ficheiros e as pastas que partilha com esta hiperligação, serão mostrados aqui", + "Download" : "Transferir", "You can upload into this folder" : "Pode enviar para esta pasta", "No compatible server found at {remote}" : "Nenhum servidor compatível encontrado em {remote}", "Invalid server URL" : "URL de servidor inválido", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "Não é possível alterar as permissões para as hiperligações de partilha pública", "Cannot increase permissions" : "Não é possível incrementar as permissões", "shared by %s" : "partilhado por %s", - "Download" : "Transferir", "Direct link" : "Hiperligação direta", "Add to your Nextcloud" : "Adicionar à sua Nextcloud", "Share API is disabled" : "A partilha de API está desativada", diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js index 2a623108c4d..1ecf22c3508 100644 --- a/apps/files_sharing/l10n/ru.js +++ b/apps/files_sharing/l10n/ru.js @@ -18,6 +18,7 @@ OC.L10N.register( "Shares will show up here" : "Здесь будут показаны общие ресурсы", "Restore share" : "Восстановить ресурсы общего доступа", "Something happened. Unable to restore the share." : "Не удалось восстановить общий ресурс.", + "Download" : "Скачать", "You can upload into this folder" : "Вы можете загружать в этот каталог", "No compatible server found at {remote}" : "Не найден совместимый сервер на {remote}", "Invalid server URL" : "Неверный URL сервера", @@ -98,7 +99,6 @@ OC.L10N.register( "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Не удалось отправить пароль для доступа: приложение Nextcloud Talk отключено.", "Cannot increase permissions" : "Не удалось повысить права доступа", "shared by %s" : "доступ предоставлен пользователем %s", - "Download" : "Скачать", "Direct link" : "Прямая ссылка", "Add to your Nextcloud" : "Добавить в свой Nextcloud", "Share API is disabled" : "API общего доступа отключён", diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json index 8cbb03100dd..6ac4f4749c9 100644 --- a/apps/files_sharing/l10n/ru.json +++ b/apps/files_sharing/l10n/ru.json @@ -16,6 +16,7 @@ "Shares will show up here" : "Здесь будут показаны общие ресурсы", "Restore share" : "Восстановить ресурсы общего доступа", "Something happened. Unable to restore the share." : "Не удалось восстановить общий ресурс.", + "Download" : "Скачать", "You can upload into this folder" : "Вы можете загружать в этот каталог", "No compatible server found at {remote}" : "Не найден совместимый сервер на {remote}", "Invalid server URL" : "Неверный URL сервера", @@ -96,7 +97,6 @@ "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Не удалось отправить пароль для доступа: приложение Nextcloud Talk отключено.", "Cannot increase permissions" : "Не удалось повысить права доступа", "shared by %s" : "доступ предоставлен пользователем %s", - "Download" : "Скачать", "Direct link" : "Прямая ссылка", "Add to your Nextcloud" : "Добавить в свой Nextcloud", "Share API is disabled" : "API общего доступа отключён", diff --git a/apps/files_sharing/l10n/sk.js b/apps/files_sharing/l10n/sk.js index d97f6840eb4..34accfc6253 100644 --- a/apps/files_sharing/l10n/sk.js +++ b/apps/files_sharing/l10n/sk.js @@ -18,6 +18,7 @@ OC.L10N.register( "Shares will show up here" : "Tu sa zobrazia sprístupnené položky", "Restore share" : "Obnoviť sprístupnené položky", "Something happened. Unable to restore the share." : "Niečo sa udialo. Nedarí sa obnoviť sprístupnenú položku.", + "Download" : "Sťahovanie", "You can upload into this folder" : "Môžete nahrávať do tohto priečinka", "No compatible server found at {remote}" : "Nebol nájdený kompatibilný server na adrese {remote}", "Invalid server URL" : "Neplatná URL servera", @@ -96,7 +97,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Nemožno zmeniť oprávnenia pre verejné sprístupnené odkazy", "Cannot increase permissions" : "Nie je možné navýšiť oprávnenia", "shared by %s" : "Sprístupnil %s", - "Download" : "Sťahovanie", "Direct link" : "Priama linka", "Add to your Nextcloud" : "Pridať do svojho Nextcloud", "Share API is disabled" : "API pre sprístupňovanie je zakázané", diff --git a/apps/files_sharing/l10n/sk.json b/apps/files_sharing/l10n/sk.json index 83e6d527801..28536793d14 100644 --- a/apps/files_sharing/l10n/sk.json +++ b/apps/files_sharing/l10n/sk.json @@ -16,6 +16,7 @@ "Shares will show up here" : "Tu sa zobrazia sprístupnené položky", "Restore share" : "Obnoviť sprístupnené položky", "Something happened. Unable to restore the share." : "Niečo sa udialo. Nedarí sa obnoviť sprístupnenú položku.", + "Download" : "Sťahovanie", "You can upload into this folder" : "Môžete nahrávať do tohto priečinka", "No compatible server found at {remote}" : "Nebol nájdený kompatibilný server na adrese {remote}", "Invalid server URL" : "Neplatná URL servera", @@ -94,7 +95,6 @@ "Can't change permissions for public share links" : "Nemožno zmeniť oprávnenia pre verejné sprístupnené odkazy", "Cannot increase permissions" : "Nie je možné navýšiť oprávnenia", "shared by %s" : "Sprístupnil %s", - "Download" : "Sťahovanie", "Direct link" : "Priama linka", "Add to your Nextcloud" : "Pridať do svojho Nextcloud", "Share API is disabled" : "API pre sprístupňovanie je zakázané", diff --git a/apps/files_sharing/l10n/sq.js b/apps/files_sharing/l10n/sq.js index ba6eb14bede..596a336ec55 100644 --- a/apps/files_sharing/l10n/sq.js +++ b/apps/files_sharing/l10n/sq.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Këtu do të shfaqen kartelat dhe dosjet që ndani me të tjerët", "No shared links" : "Pa lidhje ndarjesh", "Files and folders you share by link will show up here" : "Këtu do të shfaqen kartelat dhe dosjet që ndani përmes lidhjesh", + "Download" : "Shkarko", "You can upload into this folder" : "Mund të ngarkoni te kjo dosje", "No compatible server found at {remote}" : "Asnjë server i pajtueshëm nuk është gjetur tek { }", "Invalid server URL" : "Server i pavlefshëm URL", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "S’mund të ndryshohen lejet për lidhje ndarjesh publike", "Cannot increase permissions" : "S’mund të fuqizohen lejet", "shared by %s" : "ndarë nga %s", - "Download" : "Shkarko", "Direct link" : "Lidhje e drejtpërdrejtë", "Add to your Nextcloud" : "Shtojeni tek Nextcloud-i juaj", "Share API is disabled" : "API i ndarjeve është çaktivizuar", diff --git a/apps/files_sharing/l10n/sq.json b/apps/files_sharing/l10n/sq.json index 0565034d1c8..5a8dda76a1f 100644 --- a/apps/files_sharing/l10n/sq.json +++ b/apps/files_sharing/l10n/sq.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Këtu do të shfaqen kartelat dhe dosjet që ndani me të tjerët", "No shared links" : "Pa lidhje ndarjesh", "Files and folders you share by link will show up here" : "Këtu do të shfaqen kartelat dhe dosjet që ndani përmes lidhjesh", + "Download" : "Shkarko", "You can upload into this folder" : "Mund të ngarkoni te kjo dosje", "No compatible server found at {remote}" : "Asnjë server i pajtueshëm nuk është gjetur tek { }", "Invalid server URL" : "Server i pavlefshëm URL", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "S’mund të ndryshohen lejet për lidhje ndarjesh publike", "Cannot increase permissions" : "S’mund të fuqizohen lejet", "shared by %s" : "ndarë nga %s", - "Download" : "Shkarko", "Direct link" : "Lidhje e drejtpërdrejtë", "Add to your Nextcloud" : "Shtojeni tek Nextcloud-i juaj", "Share API is disabled" : "API i ndarjeve është çaktivizuar", diff --git a/apps/files_sharing/l10n/sr.js b/apps/files_sharing/l10n/sr.js index 65770b6ef9f..aca368d9c3d 100644 --- a/apps/files_sharing/l10n/sr.js +++ b/apps/files_sharing/l10n/sr.js @@ -18,6 +18,7 @@ OC.L10N.register( "Shares will show up here" : "Дељења ће се појавити овде", "Restore share" : "Поврати дељење", "Something happened. Unable to restore the share." : "Нешто чудно се десило. Дељење не може да се поврати.", + "Download" : "Преузми", "You can upload into this folder" : "Можете да отпремате у ову фасциклу", "No compatible server found at {remote}" : "Нема компатибилног сервера на {remote}", "Invalid server URL" : "Неисправна адреса сервера", @@ -98,7 +99,6 @@ OC.L10N.register( "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Дељење слањем лозинке преко Nextcloud Talk-а није успело пошто Nextcloud Talk није укључен", "Cannot increase permissions" : "Не могу да повећам привилегије", "shared by %s" : "поделио %s", - "Download" : "Преузми", "Direct link" : "Директна веза", "Add to your Nextcloud" : "Додајте у свој облак", "Share API is disabled" : "API за дељене је искључен", diff --git a/apps/files_sharing/l10n/sr.json b/apps/files_sharing/l10n/sr.json index cfa128498b0..e2ec69eefaf 100644 --- a/apps/files_sharing/l10n/sr.json +++ b/apps/files_sharing/l10n/sr.json @@ -16,6 +16,7 @@ "Shares will show up here" : "Дељења ће се појавити овде", "Restore share" : "Поврати дељење", "Something happened. Unable to restore the share." : "Нешто чудно се десило. Дељење не може да се поврати.", + "Download" : "Преузми", "You can upload into this folder" : "Можете да отпремате у ову фасциклу", "No compatible server found at {remote}" : "Нема компатибилног сервера на {remote}", "Invalid server URL" : "Неисправна адреса сервера", @@ -96,7 +97,6 @@ "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Дељење слањем лозинке преко Nextcloud Talk-а није успело пошто Nextcloud Talk није укључен", "Cannot increase permissions" : "Не могу да повећам привилегије", "shared by %s" : "поделио %s", - "Download" : "Преузми", "Direct link" : "Директна веза", "Add to your Nextcloud" : "Додајте у свој облак", "Share API is disabled" : "API за дељене је искључен", diff --git a/apps/files_sharing/l10n/sv.js b/apps/files_sharing/l10n/sv.js index 8e05bfeca0a..b40650c40cd 100644 --- a/apps/files_sharing/l10n/sv.js +++ b/apps/files_sharing/l10n/sv.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "Filer och mappar som du delar kommer visas här", "No shared links" : "Inga delade länkar", "Files and folders you share by link will show up here" : "Filer och mappar som du delar som länkar kommer visas här", + "Download" : "Ladda ned", "You can upload into this folder" : "Du kan ladda upp i denna mapp", "No compatible server found at {remote}" : "Ingen kompatibel server hittad på {remote}", "Invalid server URL" : "Ogiltig server URL", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "Det går inte att ändra behörigheterna för offentliga länkar", "Cannot increase permissions" : "Kan inte utöka behörigheter", "shared by %s" : "delad av %s", - "Download" : "Ladda ned", "Direct link" : "Direktlänk", "Add to your Nextcloud" : "Lägg till i molnet", "Share API is disabled" : "Delning av API är inaktiverad", diff --git a/apps/files_sharing/l10n/sv.json b/apps/files_sharing/l10n/sv.json index 5515997367a..cdb86c3180c 100644 --- a/apps/files_sharing/l10n/sv.json +++ b/apps/files_sharing/l10n/sv.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "Filer och mappar som du delar kommer visas här", "No shared links" : "Inga delade länkar", "Files and folders you share by link will show up here" : "Filer och mappar som du delar som länkar kommer visas här", + "Download" : "Ladda ned", "You can upload into this folder" : "Du kan ladda upp i denna mapp", "No compatible server found at {remote}" : "Ingen kompatibel server hittad på {remote}", "Invalid server URL" : "Ogiltig server URL", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "Det går inte att ändra behörigheterna för offentliga länkar", "Cannot increase permissions" : "Kan inte utöka behörigheter", "shared by %s" : "delad av %s", - "Download" : "Ladda ned", "Direct link" : "Direktlänk", "Add to your Nextcloud" : "Lägg till i molnet", "Share API is disabled" : "Delning av API är inaktiverad", diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js index 38a3b7eb194..c105cc9d95a 100644 --- a/apps/files_sharing/l10n/tr.js +++ b/apps/files_sharing/l10n/tr.js @@ -18,6 +18,7 @@ OC.L10N.register( "Shares will show up here" : "Paylaşımlar burada görüntülenir", "Restore share" : "Paylaşımı geri yükle", "Something happened. Unable to restore the share." : "Bir sorun çıktı. Paylaşım geri yüklenemedi.", + "Download" : "İndir", "You can upload into this folder" : "Bu klasöre yükleme yapabilirsiniz", "No compatible server found at {remote}" : " {remote} konumunda uyumlu sunucu bulunamadı", "Invalid server URL" : "Sunucu adresi geçersiz", @@ -98,7 +99,6 @@ OC.L10N.register( "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Nextcloud Talk etkinleştirilmemiş olduğundan Nextcloud Talk ile parola gönderilerek paylaşılamadı", "Cannot increase permissions" : "Erişim izinleri yükseltilemez", "shared by %s" : "%s tarafından paylaşıldı", - "Download" : "İndir", "Direct link" : "Doğrudan bağlantı", "Add to your Nextcloud" : "Nextcloud hesabınıza ekleyin", "Share API is disabled" : "Paylaşım API arayüzü devre dışı", diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json index ef547d0ddad..3fbcd62755b 100644 --- a/apps/files_sharing/l10n/tr.json +++ b/apps/files_sharing/l10n/tr.json @@ -16,6 +16,7 @@ "Shares will show up here" : "Paylaşımlar burada görüntülenir", "Restore share" : "Paylaşımı geri yükle", "Something happened. Unable to restore the share." : "Bir sorun çıktı. Paylaşım geri yüklenemedi.", + "Download" : "İndir", "You can upload into this folder" : "Bu klasöre yükleme yapabilirsiniz", "No compatible server found at {remote}" : " {remote} konumunda uyumlu sunucu bulunamadı", "Invalid server URL" : "Sunucu adresi geçersiz", @@ -96,7 +97,6 @@ "Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Nextcloud Talk etkinleştirilmemiş olduğundan Nextcloud Talk ile parola gönderilerek paylaşılamadı", "Cannot increase permissions" : "Erişim izinleri yükseltilemez", "shared by %s" : "%s tarafından paylaşıldı", - "Download" : "İndir", "Direct link" : "Doğrudan bağlantı", "Add to your Nextcloud" : "Nextcloud hesabınıza ekleyin", "Share API is disabled" : "Paylaşım API arayüzü devre dışı", diff --git a/apps/files_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js index 047fd7efcbc..40d47da0872 100644 --- a/apps/files_sharing/l10n/zh_CN.js +++ b/apps/files_sharing/l10n/zh_CN.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "您共享的文件和文件夹将显示在这里", "No shared links" : "无分享链接", "Files and folders you share by link will show up here" : "您通过链接共享的文件和文件夹将显示在这里", + "Download" : "下载", "You can upload into this folder" : "您可以上传文件至此文件夹", "No compatible server found at {remote}" : " {remote} 未发现匹配的服务器", "Invalid server URL" : "无效的服务器地址", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "不能改变公共分享链接权限", "Cannot increase permissions" : "不能增加权限", "shared by %s" : "共享者 %s", - "Download" : "下载", "Direct link" : "直接链接", "Add to your Nextcloud" : "添加到你的 Nextcloud", "Share API is disabled" : "共享 API 已被禁用", diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json index 45bd28a3974..d43abd7ef45 100644 --- a/apps/files_sharing/l10n/zh_CN.json +++ b/apps/files_sharing/l10n/zh_CN.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "您共享的文件和文件夹将显示在这里", "No shared links" : "无分享链接", "Files and folders you share by link will show up here" : "您通过链接共享的文件和文件夹将显示在这里", + "Download" : "下载", "You can upload into this folder" : "您可以上传文件至此文件夹", "No compatible server found at {remote}" : " {remote} 未发现匹配的服务器", "Invalid server URL" : "无效的服务器地址", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "不能改变公共分享链接权限", "Cannot increase permissions" : "不能增加权限", "shared by %s" : "共享者 %s", - "Download" : "下载", "Direct link" : "直接链接", "Add to your Nextcloud" : "添加到你的 Nextcloud", "Share API is disabled" : "共享 API 已被禁用", diff --git a/apps/files_sharing/l10n/zh_TW.js b/apps/files_sharing/l10n/zh_TW.js index 13c1f0a5b08..6384563de29 100644 --- a/apps/files_sharing/l10n/zh_TW.js +++ b/apps/files_sharing/l10n/zh_TW.js @@ -10,6 +10,7 @@ OC.L10N.register( "Files and folders you share will show up here" : "您分享的檔案與資料夾將會顯示在這裡", "No shared links" : "沒有已分享的連結", "Files and folders you share by link will show up here" : "您分享的檔案與資料夾連結將會顯示在這裡", + "Download" : "下載", "You can upload into this folder" : "你可以上傳內容到此資料夾", "No compatible server found at {remote}" : "沒有在 {remote} 找到相容的伺服器", "Invalid server URL" : "無效的伺服器 URL", @@ -87,7 +88,6 @@ OC.L10N.register( "Can't change permissions for public share links" : "無法由公開分享的連結變更權限", "Cannot increase permissions" : "無法增加權限", "shared by %s" : "分享自 %s", - "Download" : "下載", "Direct link" : "直接連結", "Add to your Nextcloud" : "加入到您的 Nextcloud", "Share API is disabled" : "分享 API 已停用", diff --git a/apps/files_sharing/l10n/zh_TW.json b/apps/files_sharing/l10n/zh_TW.json index 3be84e8ce8a..d4c74caf46e 100644 --- a/apps/files_sharing/l10n/zh_TW.json +++ b/apps/files_sharing/l10n/zh_TW.json @@ -8,6 +8,7 @@ "Files and folders you share will show up here" : "您分享的檔案與資料夾將會顯示在這裡", "No shared links" : "沒有已分享的連結", "Files and folders you share by link will show up here" : "您分享的檔案與資料夾連結將會顯示在這裡", + "Download" : "下載", "You can upload into this folder" : "你可以上傳內容到此資料夾", "No compatible server found at {remote}" : "沒有在 {remote} 找到相容的伺服器", "Invalid server URL" : "無效的伺服器 URL", @@ -85,7 +86,6 @@ "Can't change permissions for public share links" : "無法由公開分享的連結變更權限", "Cannot increase permissions" : "無法增加權限", "shared by %s" : "分享自 %s", - "Download" : "下載", "Direct link" : "直接連結", "Add to your Nextcloud" : "加入到您的 Nextcloud", "Share API is disabled" : "分享 API 已停用", diff --git a/apps/files_sharing/lib/Controller/DeletedShareAPIController.php b/apps/files_sharing/lib/Controller/DeletedShareAPIController.php index d95b434e48f..6c7242ef613 100644 --- a/apps/files_sharing/lib/Controller/DeletedShareAPIController.php +++ b/apps/files_sharing/lib/Controller/DeletedShareAPIController.php @@ -26,14 +26,17 @@ declare(strict_types=1); namespace OCA\Files_Sharing\Controller; +use OCP\App\IAppManager; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCS\OCSException; use OCP\AppFramework\OCS\OCSNotFoundException; use OCP\AppFramework\OCSController; +use OCP\AppFramework\QueryException; use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; use OCP\IGroupManager; use OCP\IRequest; +use OCP\IServerContainer; use OCP\IUserManager; use OCP\Share\Exceptions\GenericShareException; use OCP\Share\Exceptions\ShareNotFound; @@ -57,13 +60,21 @@ class DeletedShareAPIController extends OCSController { /** @var IRootFolder */ private $rootFolder; + /** @var IAppManager */ + private $appManager; + + /** @var IServerContainer */ + private $serverContainer; + public function __construct(string $appName, IRequest $request, ShareManager $shareManager, string $UserId, IUserManager $userManager, IGroupManager $groupManager, - IRootFolder $rootFolder) { + IRootFolder $rootFolder, + IAppManager $appManager, + IServerContainer $serverContainer) { parent::__construct($appName, $request); $this->shareManager = $shareManager; @@ -71,8 +82,13 @@ class DeletedShareAPIController extends OCSController { $this->userManager = $userManager; $this->groupManager = $groupManager; $this->rootFolder = $rootFolder; + $this->appManager = $appManager; + $this->serverContainer = $serverContainer; } + /** + * @suppress PhanUndeclaredClassMethod + */ private function formatShare(IShare $share): array { $result = [ @@ -120,9 +136,19 @@ class DeletedShareAPIController extends OCSController { $result['expiration'] = $expiration->format('Y-m-d 00:00:00'); } - $group = $this->groupManager->get($share->getSharedWith()); - $result['share_with'] = $share->getSharedWith(); - $result['share_with_displayname'] = $group !== null ? $group->getDisplayName() : $share->getSharedWith(); + if ($share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP) { + $group = $this->groupManager->get($share->getSharedWith()); + $result['share_with'] = $share->getSharedWith(); + $result['share_with_displayname'] = $group !== null ? $group->getDisplayName() : $share->getSharedWith(); + } else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_ROOM) { + $result['share_with'] = $share->getSharedWith(); + $result['share_with_displayname'] = ''; + + try { + $result = array_merge($result, $this->getRoomShareHelper()->formatShare($share)); + } catch (QueryException $e) { + } + } return $result; @@ -132,7 +158,10 @@ class DeletedShareAPIController extends OCSController { * @NoAdminRequired */ public function index(): DataResponse { - $shares = $this->shareManager->getDeletedSharedWith($this->userId, \OCP\Share::SHARE_TYPE_GROUP, null, -1, 0); + $groupShares = $this->shareManager->getDeletedSharedWith($this->userId, \OCP\Share::SHARE_TYPE_GROUP, null, -1, 0); + $roomShares = $this->shareManager->getDeletedSharedWith($this->userId, \OCP\Share::SHARE_TYPE_ROOM, null, -1, 0); + + $shares = array_merge($groupShares, $roomShares); $shares = array_map(function (IShare $share) { return $this->formatShare($share); @@ -165,4 +194,21 @@ class DeletedShareAPIController extends OCSController { return new DataResponse([]); } + + /** + * Returns the helper of DeletedShareAPIController for room shares. + * + * If the Talk application is not enabled or the helper is not available + * a QueryException is thrown instead. + * + * @return \OCA\Spreed\Share\Helper\DeletedShareAPIController + * @throws QueryException + */ + private function getRoomShareHelper() { + if (!$this->appManager->isEnabledForUser('spreed')) { + throw new QueryException(); + } + + return $this->serverContainer->query('\OCA\Spreed\Share\Helper\DeletedShareAPIController'); + } } diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php index bda0047e66c..461c0e47320 100644 --- a/apps/files_sharing/lib/Controller/ShareAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareAPIController.php @@ -37,6 +37,7 @@ use OCP\AppFramework\OCS\OCSException; use OCP\AppFramework\OCS\OCSForbiddenException; use OCP\AppFramework\OCS\OCSNotFoundException; use OCP\AppFramework\OCSController; +use OCP\AppFramework\QueryException; use OCP\Constants; use OCP\Files\Folder; use OCP\Files\Node; @@ -46,6 +47,7 @@ use OCP\IGroupManager; use OCP\IL10N; use OCP\IUserManager; use OCP\IRequest; +use OCP\IServerContainer; use OCP\IURLGenerator; use OCP\Files\IRootFolder; use OCP\Lock\LockedException; @@ -84,6 +86,8 @@ class ShareAPIController extends OCSController { private $config; /** @var IAppManager */ private $appManager; + /** @var IServerContainer */ + private $serverContainer; /** * Share20OCS constructor. @@ -99,6 +103,7 @@ class ShareAPIController extends OCSController { * @param IL10N $l10n * @param IConfig $config * @param IAppManager $appManager + * @param IServerContainer $serverContainer */ public function __construct( string $appName, @@ -111,7 +116,8 @@ class ShareAPIController extends OCSController { string $userId, IL10N $l10n, IConfig $config, - IAppManager $appManager + IAppManager $appManager, + IServerContainer $serverContainer ) { parent::__construct($appName, $request); @@ -125,6 +131,7 @@ class ShareAPIController extends OCSController { $this->l = $l10n; $this->config = $config; $this->appManager = $appManager; + $this->serverContainer = $serverContainer; } /** @@ -134,6 +141,8 @@ class ShareAPIController extends OCSController { * @param Node|null $recipientNode * @return array * @throws NotFoundException In case the node can't be resolved. + * + * @suppress PhanUndeclaredClassMethod */ protected function formatShare(\OCP\Share\IShare $share, Node $recipientNode = null): array { $sharedBy = $this->userManager->get($share->getSharedBy()); @@ -231,6 +240,14 @@ class ShareAPIController extends OCSController { $shareWithStart = ($hasCircleId? strrpos($share->getSharedWith(), '[') + 1: 0); $shareWithLength = ($hasCircleId? -1: strpos($share->getSharedWith(), ' ')); $result['share_with'] = substr($share->getSharedWith(), $shareWithStart, $shareWithLength); + } else if ($share->getShareType() === Share::SHARE_TYPE_ROOM) { + $result['share_with'] = $share->getSharedWith(); + $result['share_with_displayname'] = ''; + + try { + $result = array_merge($result, $this->getRoomShareHelper()->formatShare($share)); + } catch (QueryException $e) { + } } @@ -315,7 +332,8 @@ class ShareAPIController extends OCSController { throw new OCSNotFoundException($this->l->t('Could not delete share')); } - if ($share->getShareType() === Share::SHARE_TYPE_GROUP && + if (($share->getShareType() === Share::SHARE_TYPE_GROUP || + $share->getShareType() === Share::SHARE_TYPE_ROOM) && $share->getShareOwner() !== $this->currentUser && $share->getSharedBy() !== $this->currentUser) { $this->shareManager->deleteFromSelf($share, $this->currentUser); @@ -515,6 +533,12 @@ class ShareAPIController extends OCSController { } $share->setSharedWith($shareWith); $share->setPermissions($permissions); + } else if ($shareType === Share::SHARE_TYPE_ROOM) { + try { + $this->getRoomShareHelper()->createShare($share, $shareWith, $permissions, $expireDate); + } catch (QueryException $e) { + throw new OCSForbiddenException($this->l->t('Sharing %s failed because the back end does not support room shares', [$path->getPath()])); + } } else { throw new OCSBadRequestException($this->l->t('Unknown share type')); } @@ -546,8 +570,9 @@ class ShareAPIController extends OCSController { $userShares = $this->shareManager->getSharedWith($this->currentUser, Share::SHARE_TYPE_USER, $node, -1, 0); $groupShares = $this->shareManager->getSharedWith($this->currentUser, Share::SHARE_TYPE_GROUP, $node, -1, 0); $circleShares = $this->shareManager->getSharedWith($this->currentUser, Share::SHARE_TYPE_CIRCLE, $node, -1, 0); + $roomShares = $this->shareManager->getSharedWith($this->currentUser, Share::SHARE_TYPE_ROOM, $node, -1, 0); - $shares = array_merge($userShares, $groupShares, $circleShares); + $shares = array_merge($userShares, $groupShares, $circleShares, $roomShares); $shares = array_filter($shares, function (IShare $share) { return $share->getShareOwner() !== $this->currentUser; @@ -594,6 +619,7 @@ class ShareAPIController extends OCSController { if ($this->shareManager->outgoingServer2ServerSharesAllowed()) { $shares = array_merge($shares, $this->shareManager->getSharesBy($this->currentUser, Share::SHARE_TYPE_REMOTE, $node, false, -1, 0)); } + $shares = array_merge($shares, $this->shareManager->getSharesBy($this->currentUser, Share::SHARE_TYPE_ROOM, $node, false, -1, 0)); } $formatted = []; @@ -679,8 +705,9 @@ class ShareAPIController extends OCSController { } else { $circleShares = []; } + $roomShares = $this->shareManager->getSharesBy($this->currentUser, Share::SHARE_TYPE_ROOM, $path, $reshares, -1, 0); - $shares = array_merge($userShares, $groupShares, $linkShares, $mailShares, $circleShares); + $shares = array_merge($userShares, $groupShares, $linkShares, $mailShares, $circleShares, $roomShares); if ($this->shareManager->outgoingServer2ServerSharesAllowed()) { $federatedShares = $this->shareManager->getSharesBy($this->currentUser, Share::SHARE_TYPE_REMOTE, $path, $reshares, -1, 0); @@ -864,6 +891,7 @@ class ShareAPIController extends OCSController { /* Check if this is an incomming share */ $incomingShares = $this->shareManager->getSharedWith($this->currentUser, Share::SHARE_TYPE_USER, $share->getNode(), -1, 0); $incomingShares = array_merge($incomingShares, $this->shareManager->getSharedWith($this->currentUser, Share::SHARE_TYPE_GROUP, $share->getNode(), -1, 0)); + $incomingShares = array_merge($incomingShares, $this->shareManager->getSharedWith($this->currentUser, Share::SHARE_TYPE_ROOM, $share->getNode(), -1, 0)); /** @var \OCP\Share\IShare[] $incomingShares */ if (!empty($incomingShares)) { @@ -888,6 +916,9 @@ class ShareAPIController extends OCSController { return new DataResponse($this->formatShare($share)); } + /** + * @suppress PhanUndeclaredClassMethod + */ protected function canAccessShare(\OCP\Share\IShare $share, bool $checkGroups = true): bool { // A file with permissions 0 can't be accessed by us. So Don't show it if ($share->getPermissions() === 0) { @@ -921,6 +952,14 @@ class ShareAPIController extends OCSController { return true; } + if ($share->getShareType() === Share::SHARE_TYPE_ROOM) { + try { + return $this->getRoomShareHelper()->canAccessShare($share, $this->currentUser); + } catch (QueryException $e) { + return false; + } + } + return false; } @@ -988,6 +1027,13 @@ class ShareAPIController extends OCSController { // Do nothing, just try the other share type } + try { + $share = $this->shareManager->getShareById('ocRoomShare:' . $id, $this->currentUser); + return $share; + } catch (ShareNotFound $e) { + // Do nothing, just try the other share type + } + if (!$this->shareManager->outgoingServer2ServerSharesAllowed()) { throw new ShareNotFound(); } @@ -1016,4 +1062,21 @@ class ShareAPIController extends OCSController { $this->lockedNode->unlock(ILockingProvider::LOCK_SHARED); } } + + /** + * Returns the helper of ShareAPIController for room shares. + * + * If the Talk application is not enabled or the helper is not available + * a QueryException is thrown instead. + * + * @return \OCA\Spreed\Share\Helper\ShareAPIController + * @throws QueryException + */ + private function getRoomShareHelper() { + if (!$this->appManager->isEnabledForUser('spreed')) { + throw new QueryException(); + } + + return $this->serverContainer->query('\OCA\Spreed\Share\Helper\ShareAPIController'); + } } diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php index 6ebffed2b58..9594d6e71f5 100644 --- a/apps/files_sharing/lib/Controller/ShareController.php +++ b/apps/files_sharing/lib/Controller/ShareController.php @@ -399,6 +399,7 @@ class ShareController extends AuthPublicShareController { \OCP\Util::addScript('files', 'fileinfomodel'); \OCP\Util::addScript('files', 'newfilemenu'); \OCP\Util::addScript('files', 'files'); + \OCP\Util::addScript('files', 'filemultiselectmenu'); \OCP\Util::addScript('files', 'filelist'); \OCP\Util::addScript('files', 'keyboardshortcuts'); } diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php index fd4c537210f..cb02a2b5f23 100644 --- a/apps/files_sharing/lib/MountProvider.php +++ b/apps/files_sharing/lib/MountProvider.php @@ -74,6 +74,7 @@ class MountProvider implements IMountProvider { $shares = $this->shareManager->getSharedWith($user->getUID(), \OCP\Share::SHARE_TYPE_USER, null, -1); $shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), \OCP\Share::SHARE_TYPE_GROUP, null, -1)); $shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), \OCP\Share::SHARE_TYPE_CIRCLE, null, -1)); + $shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), \OCP\Share::SHARE_TYPE_ROOM, null, -1)); // filter out excluded shares and group shares that includes self $shares = array_filter($shares, function (\OCP\Share\IShare $share) use ($user) { diff --git a/apps/files_sharing/lib/Updater.php b/apps/files_sharing/lib/Updater.php index 784fe8b72b1..848ada62c7b 100644 --- a/apps/files_sharing/lib/Updater.php +++ b/apps/files_sharing/lib/Updater.php @@ -59,6 +59,7 @@ class Updater { $shares = $shareManager->getSharesBy($userFolder->getOwner()->getUID(), \OCP\Share::SHARE_TYPE_USER, $src, false, -1); $shares = array_merge($shares, $shareManager->getSharesBy($userFolder->getOwner()->getUID(), \OCP\Share::SHARE_TYPE_GROUP, $src, false, -1)); + $shares = array_merge($shares, $shareManager->getSharesBy($userFolder->getOwner()->getUID(), \OCP\Share::SHARE_TYPE_ROOM, $src, false, -1)); // If the path we move is not a share we don't care if (empty($shares)) { diff --git a/apps/files_sharing/tests/ApiTest.php b/apps/files_sharing/tests/ApiTest.php index a68ec7de1f0..0616daed62d 100644 --- a/apps/files_sharing/tests/ApiTest.php +++ b/apps/files_sharing/tests/ApiTest.php @@ -41,6 +41,7 @@ use OCP\AppFramework\OCS\OCSNotFoundException; use OCP\IConfig; use OCP\IL10N; use OCP\IRequest; +use OCP\IServerContainer; /** * Class ApiTest @@ -109,6 +110,7 @@ class ApiTest extends TestCase { })); $config = $this->createMock(IConfig::class); $appManager = $this->createMock(IAppManager::class); + $serverContainer = $this->createMock(IServerContainer::class); return new ShareAPIController( self::APP_NAME, @@ -121,7 +123,8 @@ class ApiTest extends TestCase { $userId, $l, $config, - $appManager + $appManager, + $serverContainer ); } diff --git a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php index 4fd8162db3d..15c4071bc46 100644 --- a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php +++ b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php @@ -38,6 +38,7 @@ use OCA\Files_Sharing\Controller\ShareAPIController; use OCP\Files\NotFoundException; use OCP\IGroupManager; use OCP\IUserManager; +use OCP\IServerContainer; use OCP\IRequest; use OCP\IURLGenerator; use OCP\IUser; @@ -92,6 +93,9 @@ class ShareAPIControllerTest extends TestCase { /** @var IAppManager|\PHPUnit_Framework_MockObject_MockObject */ private $appManager; + /** @var IServerContainer|\PHPUnit_Framework_MockObject_MockObject */ + private $serverContainer; + protected function setUp() { $this->shareManager = $this->createMock(IManager::class); $this->shareManager @@ -112,6 +116,7 @@ class ShareAPIControllerTest extends TestCase { })); $this->config = $this->createMock(IConfig::class); $this->appManager = $this->createMock(IAppManager::class); + $this->serverContainer = $this->createMock(IServerContainer::class); $this->ocs = new ShareAPIController( $this->appName, @@ -124,7 +129,8 @@ class ShareAPIControllerTest extends TestCase { $this->currentUser, $this->l, $this->config, - $this->appManager + $this->appManager, + $this->serverContainer ); } @@ -144,7 +150,8 @@ class ShareAPIControllerTest extends TestCase { $this->currentUser, $this->l, $this->config, - $this->appManager + $this->appManager, + $this->serverContainer ])->setMethods(['formatShare']) ->getMock(); } @@ -159,10 +166,10 @@ class ShareAPIControllerTest extends TestCase { */ public function testDeleteShareShareNotFound() { $this->shareManager - ->expects($this->exactly(2)) + ->expects($this->exactly(3)) ->method('getShareById') ->will($this->returnCallback(function($id) { - if ($id === 'ocinternal:42' || $id === 'ocFederatedSharing:42') { + if ($id === 'ocinternal:42' || $id === 'ocRoomShare:42' || $id === 'ocFederatedSharing:42') { throw new \OCP\Share\Exceptions\ShareNotFound(); } else { throw new \Exception(); @@ -461,7 +468,8 @@ class ShareAPIControllerTest extends TestCase { $this->currentUser, $this->l, $this->config, - $this->appManager + $this->appManager, + $this->serverContainer ])->setMethods(['canAccessShare']) ->getMock(); @@ -596,6 +604,65 @@ class ShareAPIControllerTest extends TestCase { $this->assertFalse($this->invokePrivate($this->ocs, 'canAccessShare', [$share])); } + public function dataCanAccessRoomShare() { + $result = []; + + $share = $this->createMock(IShare::class); + $share->method('getShareType')->willReturn(\OCP\Share::SHARE_TYPE_ROOM); + $share->method('getSharedWith')->willReturn('recipientRoom'); + + $result[] = [ + false, $share, false, false + ]; + + $result[] = [ + false, $share, false, true + ]; + + $result[] = [ + true, $share, true, true + ]; + + $result[] = [ + false, $share, true, false + ]; + + return $result; + } + + /** + * @dataProvider dataCanAccessRoomShare + * + * @param bool $expects + * @param \OCP\Share\IShare $share + * @param bool helperAvailable + * @param bool canAccessShareByHelper + */ + public function testCanAccessRoomShare(bool $expected, \OCP\Share\IShare $share, bool $helperAvailable, bool $canAccessShareByHelper) { + if (!$helperAvailable) { + $this->appManager->method('isEnabledForUser') + ->with('spreed') + ->willReturn(false); + } else { + $this->appManager->method('isEnabledForUser') + ->with('spreed') + ->willReturn(true); + + $helper = $this->getMockBuilder('\OCA\Spreed\Share\Helper\ShareAPIController') + ->setMethods(array('canAccessShare')) + ->getMock(); + $helper->method('canAccessShare') + ->with($share, $this->currentUser) + ->willReturn($canAccessShareByHelper); + + $this->serverContainer->method('query') + ->with('\OCA\Spreed\Share\Helper\ShareAPIController') + ->willReturn($helper); + } + + $this->assertEquals($expected, $this->invokePrivate($this->ocs, 'canAccessShare', [$share])); + } + /** * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException * @expectedExceptionMessage Please specify a file or folder path @@ -733,7 +800,8 @@ class ShareAPIControllerTest extends TestCase { $this->currentUser, $this->l, $this->config, - $this->appManager + $this->appManager, + $this->serverContainer ])->setMethods(['formatShare']) ->getMock(); @@ -832,7 +900,8 @@ class ShareAPIControllerTest extends TestCase { $this->currentUser, $this->l, $this->config, - $this->appManager + $this->appManager, + $this->serverContainer ])->setMethods(['formatShare']) ->getMock(); @@ -1128,6 +1197,186 @@ class ShareAPIControllerTest extends TestCase { $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'false', '', null, 'a1b2d3'); } + public function testCreateShareRoom() { + $ocs = $this->mockFormatShare(); + + $share = $this->newShare(); + $this->shareManager->method('newShare')->willReturn($share); + + $userFolder = $this->getMockBuilder(Folder::class)->getMock(); + $this->rootFolder->expects($this->once()) + ->method('getUserFolder') + ->with('currentUser') + ->willReturn($userFolder); + + $path = $this->getMockBuilder(File::class)->getMock(); + $storage = $this->getMockBuilder(Storage::class)->getMock(); + $storage->method('instanceOfStorage') + ->with('OCA\Files_Sharing\External\Storage') + ->willReturn(false); + $path->method('getStorage')->willReturn($storage); + $userFolder->expects($this->once()) + ->method('get') + ->with('valid-path') + ->willReturn($path); + + $path->expects($this->once()) + ->method('lock') + ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); + + $this->appManager->method('isEnabledForUser') + ->with('spreed') + ->willReturn(true); + + $helper = $this->getMockBuilder('\OCA\Spreed\Share\Helper\ShareAPIController') + ->setMethods(array('createShare')) + ->getMock(); + $helper->method('createShare') + ->with( + $share, + 'recipientRoom', + \OCP\Constants::PERMISSION_ALL & + ~\OCP\Constants::PERMISSION_DELETE & + ~\OCP\Constants::PERMISSION_CREATE, + '' + )->will($this->returnCallback( + function ($share) { + $share->setSharedWith('recipientRoom'); + $share->setPermissions( + \OCP\Constants::PERMISSION_ALL & + ~\OCP\Constants::PERMISSION_DELETE & + ~\OCP\Constants::PERMISSION_CREATE + ); + } + )); + + $this->serverContainer->method('query') + ->with('\OCA\Spreed\Share\Helper\ShareAPIController') + ->willReturn($helper); + + $this->shareManager->method('createShare') + ->with($this->callback(function (\OCP\Share\IShare $share) use ($path) { + return $share->getNode() === $path && + $share->getPermissions() === ( + \OCP\Constants::PERMISSION_ALL & + ~\OCP\Constants::PERMISSION_DELETE & + ~\OCP\Constants::PERMISSION_CREATE + ) && + $share->getShareType() === \OCP\Share::SHARE_TYPE_ROOM && + $share->getSharedWith() === 'recipientRoom' && + $share->getSharedBy() === 'currentUser'; + })) + ->will($this->returnArgument(0)); + + $expected = new DataResponse([]); + $result = $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_ROOM, 'recipientRoom'); + + $this->assertInstanceOf(get_class($expected), $result); + $this->assertEquals($expected->getData(), $result->getData()); + } + + /** + * @expectedException \OCP\AppFramework\OCS\OCSForbiddenException + * @expectedExceptionMessage Sharing valid-path failed because the back end does not support room shares + */ + public function testCreateShareRoomHelperNotAvailable() { + $ocs = $this->mockFormatShare(); + + $share = $this->newShare(); + $this->shareManager->method('newShare')->willReturn($share); + + $userFolder = $this->getMockBuilder(Folder::class)->getMock(); + $this->rootFolder->expects($this->once()) + ->method('getUserFolder') + ->with('currentUser') + ->willReturn($userFolder); + + $path = $this->getMockBuilder(File::class)->getMock(); + $storage = $this->getMockBuilder(Storage::class)->getMock(); + $storage->method('instanceOfStorage') + ->with('OCA\Files_Sharing\External\Storage') + ->willReturn(false); + $path->method('getStorage')->willReturn($storage); + $path->method('getPath')->willReturn('valid-path'); + $userFolder->expects($this->once()) + ->method('get') + ->with('valid-path') + ->willReturn($path); + + $path->expects($this->once()) + ->method('lock') + ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); + + $this->appManager->method('isEnabledForUser') + ->with('spreed') + ->willReturn(false); + + $this->shareManager->expects($this->never())->method('createShare'); + + $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_ROOM, 'recipientRoom'); + } + + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage Exception thrown by the helper + */ + public function testCreateShareRoomHelperThrowException() { + $ocs = $this->mockFormatShare(); + + $share = $this->newShare(); + $this->shareManager->method('newShare')->willReturn($share); + + $userFolder = $this->getMockBuilder(Folder::class)->getMock(); + $this->rootFolder->expects($this->once()) + ->method('getUserFolder') + ->with('currentUser') + ->willReturn($userFolder); + + $path = $this->getMockBuilder(File::class)->getMock(); + $storage = $this->getMockBuilder(Storage::class)->getMock(); + $storage->method('instanceOfStorage') + ->with('OCA\Files_Sharing\External\Storage') + ->willReturn(false); + $path->method('getStorage')->willReturn($storage); + $userFolder->expects($this->once()) + ->method('get') + ->with('valid-path') + ->willReturn($path); + + $path->expects($this->once()) + ->method('lock') + ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); + + $this->appManager->method('isEnabledForUser') + ->with('spreed') + ->willReturn(true); + + $helper = $this->getMockBuilder('\OCA\Spreed\Share\Helper\ShareAPIController') + ->setMethods(array('createShare')) + ->getMock(); + $helper->method('createShare') + ->with( + $share, + 'recipientRoom', + \OCP\Constants::PERMISSION_ALL & + ~\OCP\Constants::PERMISSION_DELETE & + ~\OCP\Constants::PERMISSION_CREATE, + '' + )->will($this->returnCallback( + function ($share) { + throw new OCSNotFoundException("Exception thrown by the helper"); + } + )); + + $this->serverContainer->method('query') + ->with('\OCA\Spreed\Share\Helper\ShareAPIController') + ->willReturn($helper); + + $this->shareManager->expects($this->never())->method('createShare'); + + $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_ROOM, 'recipientRoom'); + } + /** * Test for https://github.com/owncloud/core/issues/22587 * TODO: Remove once proper solution is in place @@ -1149,7 +1398,8 @@ class ShareAPIControllerTest extends TestCase { $this->currentUser, $this->l, $this->config, - $this->appManager + $this->appManager, + $this->serverContainer ])->setMethods(['formatShare']) ->getMock(); @@ -1681,7 +1931,8 @@ class ShareAPIControllerTest extends TestCase { ->method('getSharedWith') ->will($this->returnValueMap([ ['currentUser', \OCP\Share::SHARE_TYPE_USER, $share->getNode(), -1, 0, []], - ['currentUser', \OCP\Share::SHARE_TYPE_GROUP, $share->getNode(), -1, 0, [$incomingShare]] + ['currentUser', \OCP\Share::SHARE_TYPE_GROUP, $share->getNode(), -1, 0, [$incomingShare]], + ['currentUser', \OCP\Share::SHARE_TYPE_ROOM, $share->getNode(), -1, 0, []] ])); $this->shareManager->expects($this->never())->method('updateShare'); @@ -1726,7 +1977,8 @@ class ShareAPIControllerTest extends TestCase { ->method('getSharedWith') ->will($this->returnValueMap([ ['currentUser', \OCP\Share::SHARE_TYPE_USER, $share->getNode(), -1, 0, [$incomingShare]], - ['currentUser', \OCP\Share::SHARE_TYPE_GROUP, $share->getNode(), -1, 0, []] + ['currentUser', \OCP\Share::SHARE_TYPE_GROUP, $share->getNode(), -1, 0, []], + ['currentUser', \OCP\Share::SHARE_TYPE_ROOM, $share->getNode(), -1, 0, []] ])); $this->shareManager->expects($this->never())->method('updateShare'); @@ -1740,6 +1992,69 @@ class ShareAPIControllerTest extends TestCase { } } + public function testUpdateShareCannotIncreasePermissionsRoomShare() { + $ocs = $this->mockFormatShare(); + + $folder = $this->createMock(Folder::class); + + $share = \OC::$server->getShareManager()->newShare(); + $share + ->setId(42) + ->setSharedBy($this->currentUser) + ->setShareOwner('anotheruser') + ->setShareType(\OCP\Share::SHARE_TYPE_ROOM) + ->setSharedWith('group1') + ->setPermissions(\OCP\Constants::PERMISSION_READ) + ->setNode($folder); + + // note: updateShare will modify the received instance but getSharedWith will reread from the database, + // so their values will be different + $incomingShare = \OC::$server->getShareManager()->newShare(); + $incomingShare + ->setId(42) + ->setSharedBy($this->currentUser) + ->setShareOwner('anotheruser') + ->setShareType(\OCP\Share::SHARE_TYPE_ROOM) + ->setSharedWith('group1') + ->setPermissions(\OCP\Constants::PERMISSION_READ) + ->setNode($folder); + + $this->request + ->method('getParam') + ->will($this->returnValueMap([ + ['permissions', null, '31'], + ])); + + $this->shareManager + ->method('getShareById') + ->will($this->returnCallback( + function ($id) use ($share) { + if ($id !== 'ocRoomShare:42') { + throw new \OCP\Share\Exceptions\ShareNotFound(); + } + + return $share; + } + )); + + $this->shareManager->expects($this->any()) + ->method('getSharedWith') + ->will($this->returnValueMap([ + ['currentUser', \OCP\Share::SHARE_TYPE_USER, $share->getNode(), -1, 0, []], + ['currentUser', \OCP\Share::SHARE_TYPE_GROUP, $share->getNode(), -1, 0, []], + ['currentUser', \OCP\Share::SHARE_TYPE_ROOM, $share->getNode(), -1, 0, [$incomingShare]] + ])); + + $this->shareManager->expects($this->never())->method('updateShare'); + + try { + $ocs->updateShare(42, 31); + $this->fail(); + } catch (OCSNotFoundException $e) { + $this->assertEquals('Cannot increase permissions', $e->getMessage()); + } + } + public function testUpdateShareCanIncreasePermissionsIfOwner() { $ocs = $this->mockFormatShare(); @@ -2410,4 +2725,160 @@ class ShareAPIControllerTest extends TestCase { $this->assertTrue($exception); } } + + public function dataFormatRoomShare() { + $file = $this->getMockBuilder(File::class)->getMock(); + $parent = $this->getMockBuilder(Folder::class)->getMock(); + + $file->method('getMimeType')->willReturn('myMimeType'); + + $file->method('getPath')->willReturn('file'); + + $parent->method('getId')->willReturn(1); + $file->method('getId')->willReturn(3); + + $file->method('getParent')->willReturn($parent); + + $cache = $this->getMockBuilder('OCP\Files\Cache\ICache')->getMock(); + $cache->method('getNumericStorageId')->willReturn(100); + $storage = $this->getMockBuilder(Storage::class)->getMock(); + $storage->method('getId')->willReturn('storageId'); + $storage->method('getCache')->willReturn($cache); + + $file->method('getStorage')->willReturn($storage); + + $result = []; + + $share = \OC::$server->getShareManager()->newShare(); + $share->setShareType(\OCP\Share::SHARE_TYPE_ROOM) + ->setSharedWith('recipientRoom') + ->setSharedBy('initiator') + ->setShareOwner('owner') + ->setPermissions(\OCP\Constants::PERMISSION_READ) + ->setNode($file) + ->setShareTime(new \DateTime('2000-01-01T00:01:02')) + ->setTarget('myTarget') + ->setNote('personal note') + ->setId(42); + + $result[] = [ + [ + 'id' => 42, + 'share_type' => \OCP\Share::SHARE_TYPE_ROOM, + 'uid_owner' => 'initiator', + 'displayname_owner' => 'initiator', + 'permissions' => 1, + 'stime' => 946684862, + 'parent' => null, + 'expiration' => null, + 'token' => null, + 'uid_file_owner' => 'owner', + 'displayname_file_owner' => 'owner', + 'note' => 'personal note', + 'path' => 'file', + 'item_type' => 'file', + 'storage_id' => 'storageId', + 'storage' => 100, + 'item_source' => 3, + 'file_source' => 3, + 'file_parent' => 1, + 'file_target' => 'myTarget', + 'share_with' => 'recipientRoom', + 'share_with_displayname' => '', + 'mail_send' => 0, + 'mimetype' => 'myMimeType', + ], $share, false, [] + ]; + + $share = \OC::$server->getShareManager()->newShare(); + $share->setShareType(\OCP\Share::SHARE_TYPE_ROOM) + ->setSharedWith('recipientRoom') + ->setSharedBy('initiator') + ->setShareOwner('owner') + ->setPermissions(\OCP\Constants::PERMISSION_READ) + ->setNode($file) + ->setShareTime(new \DateTime('2000-01-01T00:01:02')) + ->setTarget('myTarget') + ->setNote('personal note') + ->setId(42); + + $result[] = [ + [ + 'id' => 42, + 'share_type' => \OCP\Share::SHARE_TYPE_ROOM, + 'uid_owner' => 'initiator', + 'displayname_owner' => 'initiator', + 'permissions' => 1, + 'stime' => 946684862, + 'parent' => null, + 'expiration' => null, + 'token' => null, + 'uid_file_owner' => 'owner', + 'displayname_file_owner' => 'owner', + 'note' => 'personal note', + 'path' => 'file', + 'item_type' => 'file', + 'storage_id' => 'storageId', + 'storage' => 100, + 'item_source' => 3, + 'file_source' => 3, + 'file_parent' => 1, + 'file_target' => 'myTarget', + 'share_with' => 'recipientRoom', + 'share_with_displayname' => 'recipientRoomName', + 'mail_send' => 0, + 'mimetype' => 'myMimeType', + ], $share, true, [ + 'share_with_displayname' => 'recipientRoomName' + ] + ]; + + return $result; + } + + /** + * @dataProvider dataFormatRoomShare + * + * @param array $expects + * @param \OCP\Share\IShare $share + * @param bool $helperAvailable + * @param array $formatShareByHelper + */ + public function testFormatRoomShare(array $expects, \OCP\Share\IShare $share, bool $helperAvailable, array $formatShareByHelper) { + $this->rootFolder->method('getUserFolder') + ->with($this->currentUser) + ->will($this->returnSelf()); + + $this->rootFolder->method('getById') + ->with($share->getNodeId()) + ->willReturn([$share->getNode()]); + + $this->rootFolder->method('getRelativePath') + ->with($share->getNode()->getPath()) + ->will($this->returnArgument(0)); + + if (!$helperAvailable) { + $this->appManager->method('isEnabledForUser') + ->with('spreed') + ->willReturn(false); + } else { + $this->appManager->method('isEnabledForUser') + ->with('spreed') + ->willReturn(true); + + $helper = $this->getMockBuilder('\OCA\Spreed\Share\Helper\ShareAPIController') + ->setMethods(array('formatShare')) + ->getMock(); + $helper->method('formatShare') + ->with($share) + ->willReturn($formatShareByHelper); + + $this->serverContainer->method('query') + ->with('\OCA\Spreed\Share\Helper\ShareAPIController') + ->willReturn($helper); + } + + $result = $this->invokePrivate($this->ocs, 'formatShare', [$share]); + $this->assertEquals($expects, $result); + } } diff --git a/apps/files_sharing/tests/MountProviderTest.php b/apps/files_sharing/tests/MountProviderTest.php index b521e109cf9..7b533bf8106 100644 --- a/apps/files_sharing/tests/MountProviderTest.php +++ b/apps/files_sharing/tests/MountProviderTest.php @@ -114,6 +114,12 @@ class MountProviderTest extends \Test\TestCase { $this->makeMockShare(4, 101, 'user2', '/share4', 31), $this->makeMockShare(5, 100, 'user1', '/share4', 31), ]; + $roomShares = [ + $this->makeMockShare(6, 102, 'user2', '/share6', 0), + $this->makeMockShare(7, 102, 'user1', '/share6', 31), + $this->makeMockShare(8, 102, 'user2', '/share6', 31), + $this->makeMockShare(9, 102, 'user2', '/share6', 31), + ]; // tests regarding circles are made in the app itself. $circleShares = []; $this->user->expects($this->any()) @@ -131,15 +137,20 @@ class MountProviderTest extends \Test\TestCase { ->method('getSharedWith') ->with('user1', \OCP\Share::SHARE_TYPE_CIRCLE, null, -1) ->will($this->returnValue($circleShares)); + $this->shareManager->expects($this->at(3)) + ->method('getSharedWith') + ->with('user1', \OCP\Share::SHARE_TYPE_ROOM, null, -1) + ->will($this->returnValue($roomShares)); $this->shareManager->expects($this->any()) ->method('newShare') ->will($this->returnCallback(function() use ($rootFolder, $userManager) { return new \OC\Share20\Share($rootFolder, $userManager); })); $mounts = $this->provider->getMountsForUser($this->user, $this->loader); - $this->assertCount(2, $mounts); + $this->assertCount(3, $mounts); $this->assertInstanceOf('OCA\Files_Sharing\SharedMount', $mounts[0]); $this->assertInstanceOf('OCA\Files_Sharing\SharedMount', $mounts[1]); + $this->assertInstanceOf('OCA\Files_Sharing\SharedMount', $mounts[2]); $mountedShare1 = $mounts[0]->getShare(); $this->assertEquals('2', $mountedShare1->getId()); $this->assertEquals('user2', $mountedShare1->getShareOwner()); @@ -152,6 +163,12 @@ class MountProviderTest extends \Test\TestCase { $this->assertEquals(101, $mountedShare2->getNodeId()); $this->assertEquals('/share4', $mountedShare2->getTarget()); $this->assertEquals(31, $mountedShare2->getPermissions()); + $mountedShare3 = $mounts[2]->getShare(); + $this->assertEquals('8', $mountedShare3->getId()); + $this->assertEquals('user2', $mountedShare3->getShareOwner()); + $this->assertEquals(102, $mountedShare3->getNodeId()); + $this->assertEquals('/share6', $mountedShare3->getTarget()); + $this->assertEquals(31, $mountedShare3->getPermissions()); } public function mergeSharesDataProvider() { @@ -316,6 +333,7 @@ class MountProviderTest extends \Test\TestCase { // tests regarding circles are made in the app itself. $circleShares = []; + $roomShares = []; $this->shareManager->expects($this->at(0)) ->method('getSharedWith') ->with('user1', \OCP\Share::SHARE_TYPE_USER) @@ -328,6 +346,10 @@ class MountProviderTest extends \Test\TestCase { ->method('getSharedWith') ->with('user1', \OCP\Share::SHARE_TYPE_CIRCLE, null, -1) ->will($this->returnValue($circleShares)); + $this->shareManager->expects($this->at(3)) + ->method('getSharedWith') + ->with('user1', \OCP\Share::SHARE_TYPE_ROOM, null, -1) + ->will($this->returnValue($roomShares)); $this->shareManager->expects($this->any()) ->method('newShare') ->will($this->returnCallback(function() use ($rootFolder, $userManager) { diff --git a/apps/files_sharing/tests/js/shareSpec.js b/apps/files_sharing/tests/js/shareSpec.js index 91060f6a735..554a3a82b34 100644 --- a/apps/files_sharing/tests/js/shareSpec.js +++ b/apps/files_sharing/tests/js/shareSpec.js @@ -108,6 +108,26 @@ describe('OCA.Sharing.Util tests', function() { expect($action.find('.icon').hasClass('icon-public')).toEqual(false); expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg'); }); + it('shows simple share text with share icon when shared to a room', function() { + var $action, $tr; + fileList.setFiles([{ + id: 1, + type: 'dir', + name: 'One', + path: '/subdir', + mimetype: 'text/plain', + size: 12, + permissions: OC.PERMISSION_ALL, + etag: 'abc', + shareTypes: [OC.Share.SHARE_TYPE_ROOM] + }]); + $tr = fileList.$el.find('tbody tr:first'); + $action = $tr.find('.action-share'); + expect($action.find('>span').text().trim()).toEqual('Shared'); + expect($action.find('.icon').hasClass('icon-shared')).toEqual(true); + expect($action.find('.icon').hasClass('icon-public')).toEqual(false); + expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg'); + }); it('shows simple share text with public icon when shared with link', function() { var $action, $tr; OC.Share.statuses = {1: {link: true, path: '/subdir'}}; diff --git a/apps/sharebymail/l10n/ja.js b/apps/sharebymail/l10n/ja.js index 60e1abe6fbb..715b2553681 100644 --- a/apps/sharebymail/l10n/ja.js +++ b/apps/sharebymail/l10n/ja.js @@ -35,7 +35,7 @@ OC.L10N.register( "You can choose a different password at any time in the share dialog." : "共有ダイアログからいつでも違うパスワードに変更できます。", "Could not find share" : "共有が見つかりませんでした", "Share by mail" : "メールで共有", - "Allows users to share a personalized link to a file or folder by putting in an email address." : "ユーザーがメールアドレスを使ってファイルやフォルダーへの個人リンクを共有することを許可する", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "ユーザーがメールアドレスを使ってファイルやフォルダーへの個人リンクを共有することを許可します。", "Send password by mail" : "メールでパスワード送信", "Enforce password protection" : "常にパスワード保護を有効にする", "Failed to send share by E-mail" : "メールで共有の送信に失敗しました" diff --git a/apps/sharebymail/l10n/ja.json b/apps/sharebymail/l10n/ja.json index be20cc45cfd..b161ef01328 100644 --- a/apps/sharebymail/l10n/ja.json +++ b/apps/sharebymail/l10n/ja.json @@ -33,7 +33,7 @@ "You can choose a different password at any time in the share dialog." : "共有ダイアログからいつでも違うパスワードに変更できます。", "Could not find share" : "共有が見つかりませんでした", "Share by mail" : "メールで共有", - "Allows users to share a personalized link to a file or folder by putting in an email address." : "ユーザーがメールアドレスを使ってファイルやフォルダーへの個人リンクを共有することを許可する", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "ユーザーがメールアドレスを使ってファイルやフォルダーへの個人リンクを共有することを許可します。", "Send password by mail" : "メールでパスワード送信", "Enforce password protection" : "常にパスワード保護を有効にする", "Failed to send share by E-mail" : "メールで共有の送信に失敗しました" diff --git a/apps/systemtags/l10n/ja.js b/apps/systemtags/l10n/ja.js index d669eed877c..95881b768fa 100644 --- a/apps/systemtags/l10n/ja.js +++ b/apps/systemtags/l10n/ja.js @@ -43,7 +43,7 @@ OC.L10N.register( "<strong>System tags</strong> for a file have been modified" : "ファイルの<strong>タグ</strong>が変更されたとき", "Collaborative tags" : "コラボタグ", "Collaborative tagging functionality which shares tags among users." : "ユーザー間でタグを共有するコラボタグ機能", - "Collaborative tags are available for all users. Restricted tags are visible to users but cannot be assigned by them. Invisible tags are for internal use, since users cannot see or assign them." : "コラボタグはすべてのユーザーで利用できます。制限付きタグは、ユーザーから見えますが、ユーザが割り当てることはできません。不可視タグは、ユーザが見ることも割り当てることもできないので、内部利用のためのものです。", + "Collaborative tags are available for all users. Restricted tags are visible to users but cannot be assigned by them. Invisible tags are for internal use, since users cannot see or assign them." : "コラボタグはすべてのユーザーで利用できます。制限付きタグは、ユーザーから見えますが、ユーザーが割り当てることはできません。不可視タグは、ユーザーが見ることも割り当てることもできず、内部利用のためのものです。", "Select tag …" : "タグを選択...", "Name" : "名前", "Public" : "公開", diff --git a/apps/systemtags/l10n/ja.json b/apps/systemtags/l10n/ja.json index 6bb460a57f4..9d343a8beb4 100644 --- a/apps/systemtags/l10n/ja.json +++ b/apps/systemtags/l10n/ja.json @@ -41,7 +41,7 @@ "<strong>System tags</strong> for a file have been modified" : "ファイルの<strong>タグ</strong>が変更されたとき", "Collaborative tags" : "コラボタグ", "Collaborative tagging functionality which shares tags among users." : "ユーザー間でタグを共有するコラボタグ機能", - "Collaborative tags are available for all users. Restricted tags are visible to users but cannot be assigned by them. Invisible tags are for internal use, since users cannot see or assign them." : "コラボタグはすべてのユーザーで利用できます。制限付きタグは、ユーザーから見えますが、ユーザが割り当てることはできません。不可視タグは、ユーザが見ることも割り当てることもできないので、内部利用のためのものです。", + "Collaborative tags are available for all users. Restricted tags are visible to users but cannot be assigned by them. Invisible tags are for internal use, since users cannot see or assign them." : "コラボタグはすべてのユーザーで利用できます。制限付きタグは、ユーザーから見えますが、ユーザーが割り当てることはできません。不可視タグは、ユーザーが見ることも割り当てることもできず、内部利用のためのものです。", "Select tag …" : "タグを選択...", "Name" : "名前", "Public" : "公開", diff --git a/apps/user_ldap/l10n/ja.js b/apps/user_ldap/l10n/ja.js index 2471358fddf..b3be19e7779 100644 --- a/apps/user_ldap/l10n/ja.js +++ b/apps/user_ldap/l10n/ja.js @@ -188,6 +188,6 @@ OC.L10N.register( "Wrong password. Reset it?" : "パスワードが間違っています。リセットしますか?", "LDAP" : "LDAP", "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>警告:</b> user_ldap と user_webdavauth のアプリには互換性がありません。予期せぬ動作をする可能性があります。システム管理者にどちらかを無効にするよう問い合わせてください。", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ユーザー名は(メタ)データの保存と割り当てに使用されます。ユーザーを正確に識別して認識するために、個々のLDAPユーザーは内部ユーザー名を持っています。これは、ユーザー名からLDAPユーザーへのマッピングが必要であることを意味しています。この生成されたユーザ名は、LDAPユーザのUUIDにマッピングされます。加えて、DNがLDAPとのインタラクションを削減するためにキャッシュされますが、識別には利用されません。DNが変わった場合は、変更が検出されます。内部ユーザー名は全体に亘って利用されます。マッピングをクリアすると、いたるところに使われないままの物が残るでしょう。マッピングのクリアは設定に敏感ではありませんが、すべてのLDAPの設定に影響を与えます!本番の環境では決してマッピングをクリアしないでください。テストまたは実験の段階でのみマッピングのクリアを行なってください。" + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ユーザー名は(メタ)データの保存と割り当てに使用されます。ユーザーを正確に識別して認識するために、個々のLDAPユーザーは内部ユーザー名を持っています。これは、ユーザー名からLDAPユーザーへのマッピングが必要であることを意味しています。この生成されたユーザ名は、LDAPユーザーのUUIDにマッピングされます。加えて、DNがLDAPとのインタラクションを削減するためにキャッシュされますが、識別には利用されません。DNが変わった場合は、変更が検出されます。内部ユーザー名は全体に亘って利用されます。マッピングをクリアすると、いたるところに使われないままの物が残るでしょう。マッピングのクリアは設定に敏感ではありませんが、すべてのLDAPの設定に影響を与えます!本番の環境では決してマッピングをクリアしないでください。テストまたは実験の段階でのみマッピングのクリアを行なってください。" }, "nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/ja.json b/apps/user_ldap/l10n/ja.json index c6c05262019..a54cce90ec8 100644 --- a/apps/user_ldap/l10n/ja.json +++ b/apps/user_ldap/l10n/ja.json @@ -186,6 +186,6 @@ "Wrong password. Reset it?" : "パスワードが間違っています。リセットしますか?", "LDAP" : "LDAP", "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>警告:</b> user_ldap と user_webdavauth のアプリには互換性がありません。予期せぬ動作をする可能性があります。システム管理者にどちらかを無効にするよう問い合わせてください。", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ユーザー名は(メタ)データの保存と割り当てに使用されます。ユーザーを正確に識別して認識するために、個々のLDAPユーザーは内部ユーザー名を持っています。これは、ユーザー名からLDAPユーザーへのマッピングが必要であることを意味しています。この生成されたユーザ名は、LDAPユーザのUUIDにマッピングされます。加えて、DNがLDAPとのインタラクションを削減するためにキャッシュされますが、識別には利用されません。DNが変わった場合は、変更が検出されます。内部ユーザー名は全体に亘って利用されます。マッピングをクリアすると、いたるところに使われないままの物が残るでしょう。マッピングのクリアは設定に敏感ではありませんが、すべてのLDAPの設定に影響を与えます!本番の環境では決してマッピングをクリアしないでください。テストまたは実験の段階でのみマッピングのクリアを行なってください。" + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ユーザー名は(メタ)データの保存と割り当てに使用されます。ユーザーを正確に識別して認識するために、個々のLDAPユーザーは内部ユーザー名を持っています。これは、ユーザー名からLDAPユーザーへのマッピングが必要であることを意味しています。この生成されたユーザ名は、LDAPユーザーのUUIDにマッピングされます。加えて、DNがLDAPとのインタラクションを削減するためにキャッシュされますが、識別には利用されません。DNが変わった場合は、変更が検出されます。内部ユーザー名は全体に亘って利用されます。マッピングをクリアすると、いたるところに使われないままの物が残るでしょう。マッピングのクリアは設定に敏感ではありませんが、すべてのLDAPの設定に影響を与えます!本番の環境では決してマッピングをクリアしないでください。テストまたは実験の段階でのみマッピングのクリアを行なってください。" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/workflowengine/js/requestuseragentplugin.js b/apps/workflowengine/js/requestuseragentplugin.js index 973f66cba31..881ea4b8ac7 100644 --- a/apps/workflowengine/js/requestuseragentplugin.js +++ b/apps/workflowengine/js/requestuseragentplugin.js @@ -44,7 +44,7 @@ var placeholder = 'Mozilla/5.0 User Agent'; - if (check['operator'] === 'matches' || check['operator'] === '!matches') { + if (check.operator === 'matches' || check.operator === '!matches') { placeholder = '/^Mozilla\\/5\\.0 (.*)$/i'; } @@ -56,8 +56,8 @@ placement: 'bottom' }); - if (check['operator'] === 'matches' || check['operator'] === '!matches') { - if (this._validateRegex(check['value'])) { + if (check.operator === 'matches' || check.operator === '!matches') { + if (this._validateRegex(check.value)) { $(element).removeClass('invalid-input'); } else { $(element).addClass('invalid-input'); @@ -70,21 +70,22 @@ children: [ {id: 'android', text: t('workflowengine', 'Android client')}, {id: 'ios', text: t('workflowengine', 'iOS client')}, - {id: 'desktop', text: t('workflowengine', 'Desktop client')} + {id: 'desktop', text: t('workflowengine', 'Desktop client')}, + {id: 'mail', text: t('workflowengine', 'Thunderbird & Outlook addons')} ] } ]; - if (this.predefinedValues.indexOf(check['value']) === -1) { + if (this.predefinedValues.indexOf(check.value) === -1) { data.unshift({ - id: check['value'], - text: check['value'] - }) + id: check.value, + text: check.value + }); } $(element).select2({ data: data, createSearchChoice: function(term) { - if (self.predefinedValues.indexOf(check['value']) === -1) { + if (self.predefinedValues.indexOf(check.value) === -1) { return { id: term, text: term diff --git a/build/integration/features/bootstrap/Provisioning.php b/build/integration/features/bootstrap/Provisioning.php index 1a2c32ed8c6..c320be2be6c 100644 --- a/build/integration/features/bootstrap/Provisioning.php +++ b/build/integration/features/bootstrap/Provisioning.php @@ -680,6 +680,30 @@ trait Provisioning { } /** + * @Given /^app "([^"]*)" is not enabled$/ + * + * Checks that the app is disabled or not installed. + * + * @param string $app + */ + public function appIsNotEnabled($app) { + $fullUrl = $this->baseUrl . "v2.php/cloud/apps?filter=enabled"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; + + $this->response = $client->get($fullUrl, $options); + $respondedArray = $this->getArrayOfAppsResponded($this->response); + Assert::assertNotContains($app, $respondedArray); + Assert::assertEquals(200, $this->response->getStatusCode()); + } + + /** * @Then /^user "([^"]*)" is disabled$/ * @param string $user */ diff --git a/build/integration/features/sharing-v1.feature b/build/integration/features/sharing-v1.feature index 5708b7115e4..dd5cc9fff4f 100644 --- a/build/integration/features/sharing-v1.feature +++ b/build/integration/features/sharing-v1.feature @@ -43,6 +43,18 @@ Feature: sharing Then the OCS status code should be "100" And the HTTP status code should be "200" + Scenario: Creating a new room share when Talk is not enabled + Given As an "admin" + And app "spreed" is not enabled + And user "user0" exists + And As an "user0" + When creating a share with + | path | welcome.txt | + | shareWith | a-room-token | + | shareType | 10 | + Then the OCS status code should be "403" + And the HTTP status code should be "401" + Scenario: Creating a new public share Given user "user0" exists And As an "user0" diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php index 5bd06ac7e66..5db650c4c47 100644 --- a/core/Controller/LoginController.php +++ b/core/Controller/LoginController.php @@ -334,7 +334,7 @@ class LoginController extends Controller { if ($this->twoFactorManager->isTwoFactorAuthenticated($loginResult)) { $this->twoFactorManager->prepareTwoFactorLogin($loginResult, $remember_login); - $providers = $this->twoFactorManager->getProviderSet($loginResult)->getProviders(); + $providers = $this->twoFactorManager->getProviderSet($loginResult)->getPrimaryProviders(); if (count($providers) === 1) { // Single provider, hence we can redirect to that provider's challenge page directly /* @var $provider IProvider */ diff --git a/core/css/apps.scss b/core/css/apps.scss index 029301c326f..d17cf9140c8 100644 --- a/core/css/apps.scss +++ b/core/css/apps.scss @@ -829,6 +829,7 @@ $popovericon-size: 16px; background-color: var(--color-main-background); color: var(--color-main-text); border-radius: var(--border-radius); + border: 1px solid transparent; z-index: 110; margin: 5px; margin-top: -5px; @@ -838,9 +839,11 @@ $popovericon-size: 16px; &:after { bottom: 100%; - /* Min-width of popover is 36px and arrow width is 20px - wich leaves us 8px right and 8px left */ - right: 8px; + // Required right-distance is half menu icon size + right padding + // = 16px/2 + 14px = 22px + // popover right margin is 5px, arrow width is 9px to center and border is 1px + // 22px - 9px - 5px - 1px = 7px + right: 7px; /* change this to adjust the arrow position */ border: solid transparent; content: ' '; @@ -849,7 +852,7 @@ $popovericon-size: 16px; position: absolute; pointer-events: none; border-bottom-color: var(--color-main-background); - border-width: 10px; + border-width: 9px; } /* Center the popover */ &.menu-center { diff --git a/core/css/header.scss b/core/css/header.scss index 28aae342c6a..b66c740c8fe 100644 --- a/core/css/header.scss +++ b/core/css/header.scss @@ -152,6 +152,8 @@ #header-right, .header-right { justify-content: flex-end; + flex-basis: 210px; + flex-shrink: 1; } /* Right header standard */ diff --git a/core/img/actions/checkmark-white.svg b/core/img/actions/checkmark-white.svg new file mode 100644 index 00000000000..6190902ea2d --- /dev/null +++ b/core/img/actions/checkmark-white.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" viewBox="0 0 16 16"><path d="m2.35 7.3 4 4l7.3-7.3" stroke="white" stroke-width="2" fill="none"/></svg> diff --git a/core/img/actions/confirm-white.svg b/core/img/actions/confirm-white.svg new file mode 100644 index 00000000000..98a41adefe5 --- /dev/null +++ b/core/img/actions/confirm-white.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 16 16" width="16" version="1.1" height="16"><path fill="#fff" d="m8.5 0.5c-0.8974 0-1.3404 1.0909-0.6973 1.7168l4.7837 4.7832h-11.573c-1.3523-0.019125-1.3523 2.0191 0 2h11.572l-4.7832 4.7832c-0.98163 0.94251 0.47155 2.3957 1.4141 1.4141l6.4911-6.49c0.387-0.3878 0.391-1.0228 0-1.414l-6.4906-6.4903c-0.1883-0.1935-0.4468-0.30268-0.7168-0.3027z"/></svg> diff --git a/core/img/actions/info-white.svg b/core/img/actions/info-white.svg new file mode 100644 index 00000000000..92f6e44add2 --- /dev/null +++ b/core/img/actions/info-white.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewbox="0 0 16 16" width="16" height="16"><path d="M5 7.474c.155.382.325.69.644.246.407-.268 1.76-1.427 1.662-.342-.368 2.017-.834 4.017-1.17 6.04-.393 1.114.634 2.067 1.637 1.31 1.078-.502 1.99-1.287 2.927-2.01-.144-.323-.25-.79-.596-.347-.468.24-1.47 1.318-1.696.472.315-2.18.975-4.295 1.365-6.462.397-1.005-.364-2.223-1.4-1.363C7.117 5.634 6.083 6.6 5 7.474zM9.46.005C8.15-.017 7.553 2.147 8.815 2.68c1.023.378 2.077-.714 1.79-1.75-.098-.542-.598-.97-1.147-.93z" fill="#fff"/></svg> diff --git a/core/js/files/client.js b/core/js/files/client.js index 7e0e136989a..6ddd8b35558 100644 --- a/core/js/files/client.js +++ b/core/js/files/client.js @@ -330,12 +330,10 @@ } var resType = props[Client.PROPERTY_RESOURCETYPE]; - var isFile = true; if (!data.mimetype && resType) { var xmlvalue = resType[0]; if (xmlvalue.namespaceURI === Client.NS_DAV && xmlvalue.nodeName.split(':')[1] === 'collection') { data.mimetype = 'httpd/unix-directory'; - isFile = false; } } diff --git a/core/js/share.js b/core/js/share.js index e4d9364b2d1..cef05eb6479 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -12,6 +12,7 @@ OC.Share = _.extend(OC.Share || {}, { SHARE_TYPE_CIRCLE:7, SHARE_TYPE_GUEST:8, SHARE_TYPE_REMOTE_GROUP:9, + SHARE_TYPE_ROOM:10, /** * Regular expression for splitting parts of remote share owners: diff --git a/core/js/sharedialogresharerinfoview.js b/core/js/sharedialogresharerinfoview.js index fadd0a41f7b..06e18fef3f2 100644 --- a/core/js/sharedialogresharerinfoview.js +++ b/core/js/sharedialogresharerinfoview.js @@ -99,6 +99,17 @@ undefined, {escape: false} ); + } else if (this.model.getReshareType() === OC.Share.SHARE_TYPE_ROOM) { + sharedByText = t( + 'core', + 'Shared with you and the conversation {conversation} by {owner}', + { + conversation: this.model.getReshareWithDisplayName(), + owner: ownerDisplayName + }, + undefined, + {escape: false} + ); } else { sharedByText = t( 'core', diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js index 2ed46f46768..2627d5fa662 100644 --- a/core/js/sharedialogshareelistview.js +++ b/core/js/sharedialogshareelistview.js @@ -243,6 +243,8 @@ } else if (shareType === OC.Share.SHARE_TYPE_EMAIL) { shareWithDisplayName = shareWithDisplayName + " (" + t('core', 'email') + ')'; } else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) { + } else if (shareType === OC.Share.SHARE_TYPE_ROOM) { + shareWithDisplayName = shareWithDisplayName + " (" + t('core', 'conversation') + ')'; } if (shareType === OC.Share.SHARE_TYPE_GROUP) { @@ -291,7 +293,7 @@ shareWithTitle: shareWithTitle, shareType: shareType, shareId: this.model.get('shares')[shareIndex].id, - modSeed: shareType !== OC.Share.SHARE_TYPE_USER && (shareType !== OC.Share.SHARE_TYPE_CIRCLE || shareWithAvatar), + modSeed: shareWithAvatar || (shareType !== OC.Share.SHARE_TYPE_USER && shareType !== OC.Share.SHARE_TYPE_CIRCLE && shareType !== OC.Share.SHARE_TYPE_ROOM), isRemoteShare: shareType === OC.Share.SHARE_TYPE_REMOTE, isRemoteGroupShare: shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP, isNoteAvailable: shareType !== OC.Share.SHARE_TYPE_REMOTE && shareType !== OC.Share.SHARE_TYPE_REMOTE_GROUP, diff --git a/core/js/update.js b/core/js/update.js index 9562c7b2e47..eb65336229e 100644 --- a/core/js/update.js +++ b/core/js/update.js @@ -107,7 +107,7 @@ } setTimeout(function () { - OC.redirect(OC.webroot + '/'); + OC.redirect(window.location.href); }, 3000); } }); diff --git a/core/l10n/ja.js b/core/l10n/ja.js index 19958aff740..5e144091ab7 100644 --- a/core/l10n/ja.js +++ b/core/l10n/ja.js @@ -113,7 +113,7 @@ OC.L10N.register( "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">For better performance it is recommended</a> to use the following settings in the <code>php.ini</code>:" : "PHP OPcacheが適切に設定されていません。<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">よりパフォーマンスを向上させる</a>には、<code>php.ini</code>で以下の設定を推奨します:", "Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました", "The \"Strict-Transport-Security\" HTTP header is not set to at least \"{seconds}\" seconds. For enhanced security, it is recommended to enable HSTS as described in the <a href=\"{docUrl}\" rel=\"noreferrer noopener\">security tips ↗</a>." : "\"Strict-Transport-Security\" HTTPヘッダが最低でも \"{seconds}\" 秒に設定されていません。セキュリティを強化するには、<a href=\"{docUrl}\" rel=\"noreferrer noopener\">セキュリティTips ↗</a>で解説しているHSTSを有効にすることを推奨します。", - "Accessing site insecurely via HTTP. You are strongly adviced to set up your server to require HTTPS instead, as described in the <a href=\"{docUrl}\">security tips ↗</a>." : "セキュアではないHTTP経由でアクセスしています。<a href=\"{docUrl}\">セキュリティTips ↗</a>で述べているように、代わりにHTTPSを必要とするようサーバを設定することを強くおすすめします。", + "Accessing site insecurely via HTTP. You are strongly adviced to set up your server to require HTTPS instead, as described in the <a href=\"{docUrl}\">security tips ↗</a>." : "セキュアではないHTTP経由でアクセスしています。<a href=\"{docUrl}\">セキュリティTips ↗</a>で述べているように、代わりにHTTPSを必要とするようサーバーを設定することを強くおすすめします。", "Shared" : "共有中", "Choose a password for the public link" : "URLによる共有のパスワードを入力", "Choose a password for the public link or press the \"Enter\" key" : "公開リンクのパスワードを入力、または、\"エンター\"のみを叩く", @@ -284,7 +284,7 @@ OC.L10N.register( "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。より詳しい情報は<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ドキュメント</a>で参照できます。", "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "PHP OPcacheが適切に設定されていません。<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">よりパフォーマンスを向上させる</a>には、<code>php.ini</code>で以下の設定を推奨します:", "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTPヘッダが、最低でも \"{seconds}\" 秒に設定されていません。セキュリティを強化するには、<a href=\"{docUrl}\" rel=\"noreferrer\">セキュリティTips</a>で解説しているHSTSを有効にすることを推奨します。", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "セキュアではないHTTP経由でアクセスしています。<a href=\"{docUrl}\">セキュリティTips</a>で述べているように、代わりにHTTPSを必要とするようサーバを設定することを強くおすすめします。", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "セキュアではないHTTP経由でアクセスしています。<a href=\"{docUrl}\">セキュリティTips</a>で述べているように、代わりにHTTPSを必要とするようサーバーを設定することを強くおすすめします。", "Error setting expiration date" : "有効期限の設定でエラー発生", "The public link will expire no later than {days} days after it is created" : "URLによる共有は、作成してから {days} 日以内に有効期限切れになります", "Share with other people by entering a user or group, a federated cloud ID or an email address." : "ユーザー名、グループ、クラウド統合ID、メールアドレスで共有", @@ -295,6 +295,6 @@ OC.L10N.register( "Alternative login using app token" : "アプリトークンを使って代替ログイン", "Add \"%s\" as trusted domain" : "\"%s\" を信頼するドメイン名に追加", "The \"Strict-Transport-Security\" HTTP header is not set to at least \"{seconds}\" seconds. For enhanced security, it is recommended to enable HSTS as described in the <a href=\"{docUrl}\" rel=\"noreferrer noopener\">security tips</a>." : "\"Strict-Transport-Security\" HTTPヘッダが、最低でも \"{seconds}\" 秒に設定されていません。セキュリティを強化するには、<a href=\"{docUrl}\" rel=\"noreferrer noopener\">セキュリティTips</a>で解説しているHSTSを有効にすることを推奨します。", - "Accessing site insecurely via HTTP. You are strongly adviced to set up your server to require HTTPS instead, as described in the <a href=\"{docUrl}\">security tips</a>." : "セキュアではないHTTP経由でアクセスしています。<a href=\"{docUrl}\">セキュリティTips</a>で述べているように、代わりにHTTPSを必要とするようサーバを設定することを強くおすすめします。" + "Accessing site insecurely via HTTP. You are strongly adviced to set up your server to require HTTPS instead, as described in the <a href=\"{docUrl}\">security tips</a>." : "セキュアではないHTTP経由でアクセスしています。<a href=\"{docUrl}\">セキュリティTips</a>で述べているように、代わりにHTTPSを必要とするようサーバーを設定することを強くおすすめします。" }, "nplurals=1; plural=0;"); diff --git a/core/l10n/ja.json b/core/l10n/ja.json index c3aa6b3e175..1e36185b6e4 100644 --- a/core/l10n/ja.json +++ b/core/l10n/ja.json @@ -111,7 +111,7 @@ "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">For better performance it is recommended</a> to use the following settings in the <code>php.ini</code>:" : "PHP OPcacheが適切に設定されていません。<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">よりパフォーマンスを向上させる</a>には、<code>php.ini</code>で以下の設定を推奨します:", "Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました", "The \"Strict-Transport-Security\" HTTP header is not set to at least \"{seconds}\" seconds. For enhanced security, it is recommended to enable HSTS as described in the <a href=\"{docUrl}\" rel=\"noreferrer noopener\">security tips ↗</a>." : "\"Strict-Transport-Security\" HTTPヘッダが最低でも \"{seconds}\" 秒に設定されていません。セキュリティを強化するには、<a href=\"{docUrl}\" rel=\"noreferrer noopener\">セキュリティTips ↗</a>で解説しているHSTSを有効にすることを推奨します。", - "Accessing site insecurely via HTTP. You are strongly adviced to set up your server to require HTTPS instead, as described in the <a href=\"{docUrl}\">security tips ↗</a>." : "セキュアではないHTTP経由でアクセスしています。<a href=\"{docUrl}\">セキュリティTips ↗</a>で述べているように、代わりにHTTPSを必要とするようサーバを設定することを強くおすすめします。", + "Accessing site insecurely via HTTP. You are strongly adviced to set up your server to require HTTPS instead, as described in the <a href=\"{docUrl}\">security tips ↗</a>." : "セキュアではないHTTP経由でアクセスしています。<a href=\"{docUrl}\">セキュリティTips ↗</a>で述べているように、代わりにHTTPSを必要とするようサーバーを設定することを強くおすすめします。", "Shared" : "共有中", "Choose a password for the public link" : "URLによる共有のパスワードを入力", "Choose a password for the public link or press the \"Enter\" key" : "公開リンクのパスワードを入力、または、\"エンター\"のみを叩く", @@ -282,7 +282,7 @@ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。より詳しい情報は<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ドキュメント</a>で参照できます。", "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "PHP OPcacheが適切に設定されていません。<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">よりパフォーマンスを向上させる</a>には、<code>php.ini</code>で以下の設定を推奨します:", "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTPヘッダが、最低でも \"{seconds}\" 秒に設定されていません。セキュリティを強化するには、<a href=\"{docUrl}\" rel=\"noreferrer\">セキュリティTips</a>で解説しているHSTSを有効にすることを推奨します。", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "セキュアではないHTTP経由でアクセスしています。<a href=\"{docUrl}\">セキュリティTips</a>で述べているように、代わりにHTTPSを必要とするようサーバを設定することを強くおすすめします。", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "セキュアではないHTTP経由でアクセスしています。<a href=\"{docUrl}\">セキュリティTips</a>で述べているように、代わりにHTTPSを必要とするようサーバーを設定することを強くおすすめします。", "Error setting expiration date" : "有効期限の設定でエラー発生", "The public link will expire no later than {days} days after it is created" : "URLによる共有は、作成してから {days} 日以内に有効期限切れになります", "Share with other people by entering a user or group, a federated cloud ID or an email address." : "ユーザー名、グループ、クラウド統合ID、メールアドレスで共有", @@ -293,6 +293,6 @@ "Alternative login using app token" : "アプリトークンを使って代替ログイン", "Add \"%s\" as trusted domain" : "\"%s\" を信頼するドメイン名に追加", "The \"Strict-Transport-Security\" HTTP header is not set to at least \"{seconds}\" seconds. For enhanced security, it is recommended to enable HSTS as described in the <a href=\"{docUrl}\" rel=\"noreferrer noopener\">security tips</a>." : "\"Strict-Transport-Security\" HTTPヘッダが、最低でも \"{seconds}\" 秒に設定されていません。セキュリティを強化するには、<a href=\"{docUrl}\" rel=\"noreferrer noopener\">セキュリティTips</a>で解説しているHSTSを有効にすることを推奨します。", - "Accessing site insecurely via HTTP. You are strongly adviced to set up your server to require HTTPS instead, as described in the <a href=\"{docUrl}\">security tips</a>." : "セキュアではないHTTP経由でアクセスしています。<a href=\"{docUrl}\">セキュリティTips</a>で述べているように、代わりにHTTPSを必要とするようサーバを設定することを強くおすすめします。" + "Accessing site insecurely via HTTP. You are strongly adviced to set up your server to require HTTPS instead, as described in the <a href=\"{docUrl}\">security tips</a>." : "セキュアではないHTTP経由でアクセスしています。<a href=\"{docUrl}\">セキュリティTips</a>で述べているように、代わりにHTTPSを必要とするようサーバーを設定することを強くおすすめします。" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/core/templates/403.php b/core/templates/403.php index e053fad764a..72d5d3e4ae6 100644 --- a/core/templates/403.php +++ b/core/templates/403.php @@ -12,6 +12,6 @@ if(!isset($_)) {//standalone page is not supported anymore - redirect to / <ul> <li class='error'> <?php p($l->t( 'Access forbidden' )); ?><br> - <p class='hint'><?php if(isset($_['file'])) p($_['file'])?></p> + <p class='hint'><?php if(isset($_['message'])) p($_['message'])?></p> </li> </ul> diff --git a/lib/private/App/CodeChecker/CodeChecker.php b/lib/private/App/CodeChecker/CodeChecker.php index 456a78aa122..d2f6d7451b4 100644 --- a/lib/private/App/CodeChecker/CodeChecker.php +++ b/lib/private/App/CodeChecker/CodeChecker.php @@ -82,7 +82,7 @@ class CodeChecker extends BasicEmitter { public function analyseFolder(string $appId, string $folder): array { $errors = []; - $excludedDirectories = ['vendor', '3rdparty', '.git', 'l10n', 'tests', 'test']; + $excludedDirectories = ['vendor', '3rdparty', '.git', 'l10n', 'tests', 'test', 'build']; if ($appId === 'password_policy') { $excludedDirectories[] = 'lists'; } diff --git a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php index 2eedc39c3ab..87954ccc1cb 100644 --- a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php +++ b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php @@ -249,7 +249,7 @@ class SecurityMiddleware extends Middleware { $url = $this->urlGenerator->linkToRoute('core.login.showLoginForm', $params); $response = new RedirectResponse($url); } else { - $response = new TemplateResponse('core', '403', ['file' => $exception->getMessage()], 'guest'); + $response = new TemplateResponse('core', '403', ['message' => $exception->getMessage()], 'guest'); $response->setStatus($exception->getCode()); } } diff --git a/lib/private/Authentication/TwoFactorAuth/Db/ProviderUserAssignmentDao.php b/lib/private/Authentication/TwoFactorAuth/Db/ProviderUserAssignmentDao.php index 0e9cd8045cd..e04512b8575 100644 --- a/lib/private/Authentication/TwoFactorAuth/Db/ProviderUserAssignmentDao.php +++ b/lib/private/Authentication/TwoFactorAuth/Db/ProviderUserAssignmentDao.php @@ -72,15 +72,26 @@ class ProviderUserAssignmentDao { public function persist(string $providerId, string $uid, int $enabled) { $qb = $this->conn->getQueryBuilder(); - // First, try to update an existing entry - $updateQuery = $qb->update(self::TABLE_NAME) - ->set('enabled', $qb->createNamedParameter($enabled)) + $this->conn->beginTransaction(); + // To prevent duplicate primary key, we have to first check if an INSERT + // or UPDATE is required + $query = $qb->select('*') + ->from(self::TABLE_NAME) ->where($qb->expr()->eq('provider_id', $qb->createNamedParameter($providerId))) ->andWhere($qb->expr()->eq('uid', $qb->createNamedParameter($uid))); - $updatedRows = $updateQuery->execute(); + $result = $query->execute(); + $rowCount = count($result->fetchAll()); + $result->closeCursor(); - // If this (providerId, UID) key tuple is new, we have to insert it - if (0 === (int)$updatedRows) { + if ($rowCount > 0) { + // There is an entry -> update it + $updateQuery = $qb->update(self::TABLE_NAME) + ->set('enabled', $qb->createNamedParameter($enabled)) + ->where($qb->expr()->eq('provider_id', $qb->createNamedParameter($providerId))) + ->andWhere($qb->expr()->eq('uid', $qb->createNamedParameter($uid))); + $updateQuery->execute(); + } else { + // Insert a new entry $insertQuery = $qb->insert(self::TABLE_NAME)->values([ 'provider_id' => $qb->createNamedParameter($providerId), 'uid' => $qb->createNamedParameter($uid), @@ -89,6 +100,8 @@ class ProviderUserAssignmentDao { $insertQuery->execute(); } + $this->conn->commit(); + } } diff --git a/lib/private/Authentication/TwoFactorAuth/Manager.php b/lib/private/Authentication/TwoFactorAuth/Manager.php index 0ee10ac0eff..6fa41897e1e 100644 --- a/lib/private/Authentication/TwoFactorAuth/Manager.php +++ b/lib/private/Authentication/TwoFactorAuth/Manager.php @@ -27,6 +27,8 @@ declare(strict_types = 1); namespace OC\Authentication\TwoFactorAuth; +use function array_diff; +use function array_filter; use BadMethodCallException; use Exception; use OC\Authentication\Exceptions\InvalidTokenException; @@ -47,6 +49,7 @@ class Manager { const SESSION_UID_KEY = 'two_factor_auth_uid'; const SESSION_UID_DONE = 'two_factor_auth_passed'; const REMEMBER_LOGIN = 'two_factor_remember_login'; + const BACKUP_CODES_PROVIDER_ID = 'backup_codes'; /** @var ProviderLoader */ private $providerLoader; @@ -76,9 +79,9 @@ class Manager { private $dispatcher; public function __construct(ProviderLoader $providerLoader, - IRegistry $providerRegistry, ISession $session, IConfig $config, - IManager $activityManager, ILogger $logger, TokenProvider $tokenProvider, - ITimeFactory $timeFactory, EventDispatcherInterface $eventDispatcher) { + IRegistry $providerRegistry, ISession $session, IConfig $config, + IManager $activityManager, ILogger $logger, TokenProvider $tokenProvider, + ITimeFactory $timeFactory, EventDispatcherInterface $eventDispatcher) { $this->providerLoader = $providerLoader; $this->session = $session; $this->config = $config; @@ -107,8 +110,10 @@ class Manager { $providers = $this->providerLoader->getProviders($user); $fixedStates = $this->fixMissingProviderStates($providerStates, $providers, $user); $enabled = array_filter($fixedStates); + $providerIds = array_keys($enabled); + $providerIdsWithoutBackupCodes = array_diff($providerIds, [self::BACKUP_CODES_PROVIDER_ID]); - return $twoFactorEnabled && !empty($enabled); + return $twoFactorEnabled && !empty($providerIdsWithoutBackupCodes); } /** diff --git a/lib/private/Authentication/TwoFactorAuth/ProviderSet.php b/lib/private/Authentication/TwoFactorAuth/ProviderSet.php index bbb9467798b..91a00a0bf8e 100644 --- a/lib/private/Authentication/TwoFactorAuth/ProviderSet.php +++ b/lib/private/Authentication/TwoFactorAuth/ProviderSet.php @@ -25,6 +25,8 @@ declare(strict_types=1); namespace OC\Authentication\TwoFactorAuth; +use function array_filter; +use OCA\TwoFactorBackupCodes\Provider\BackupCodesProvider; use OCP\Authentication\TwoFactorAuth\IProvider; /** @@ -65,6 +67,15 @@ class ProviderSet { return $this->providers; } + /** + * @return IProvider[] + */ + public function getPrimaryProviders(): array { + return array_filter($this->providers, function(IProvider $provider) { + return !($provider instanceof BackupCodesProvider); + }); + } + public function isProviderMissing(): bool { return $this->providerMissing; } diff --git a/lib/private/Collaboration/Collaborators/UserPlugin.php b/lib/private/Collaboration/Collaborators/UserPlugin.php index 62f76876031..971b7025564 100644 --- a/lib/private/Collaboration/Collaborators/UserPlugin.php +++ b/lib/private/Collaboration/Collaborators/UserPlugin.php @@ -79,7 +79,9 @@ class UserPlugin implements ISearchPlugin { $usersTmp = $this->userManager->searchDisplayName($search, $limit, $offset); foreach ($usersTmp as $user) { - $users[$user->getUID()] = $user->getDisplayName(); + if ($user->isEnabled()) { // Don't keep deactivated users + $users[$user->getUID()] = $user->getDisplayName(); + } } } diff --git a/lib/private/Files/Type/Loader.php b/lib/private/Files/Type/Loader.php index 2b15c9b6e13..41c561dcd22 100644 --- a/lib/private/Files/Type/Loader.php +++ b/lib/private/Files/Type/Loader.php @@ -114,20 +114,9 @@ class Loader implements IMimeTypeLoader { * @param int inserted ID */ protected function store($mimetype) { - try { - $qb = $this->dbConnection->getQueryBuilder(); - $qb->insert('mimetypes') - ->values([ - 'mimetype' => $qb->createNamedParameter($mimetype) - ]); - $qb->execute(); - } catch (UniqueConstraintViolationException $e) { - if ($this->dbConnection->inTransaction()) { - // if we're inside a transaction we can't recover safely - throw $e; - } - // something inserted it before us - } + $this->dbConnection->insertIfNotExist('*PREFIX*mimetypes', [ + 'mimetype' => $mimetype + ]); $fetch = $this->dbConnection->getQueryBuilder(); $fetch->select('id') @@ -137,6 +126,10 @@ class Loader implements IMimeTypeLoader { )); $row = $fetch->execute()->fetch(); + if (!$row) { + throw new \Exception("Failed to get mimetype id for $mimetype after trying to store it"); + } + $this->mimetypes[$row['id']] = $mimetype; $this->mimetypeIds[$mimetype] = $row['id']; return $row['id']; diff --git a/lib/private/Share/Constants.php b/lib/private/Share/Constants.php index 4eb79734c06..72dc5cd43be 100644 --- a/lib/private/Share/Constants.php +++ b/lib/private/Share/Constants.php @@ -31,6 +31,7 @@ class Constants { const SHARE_TYPE_USER = 0; const SHARE_TYPE_GROUP = 1; + // const SHARE_TYPE_USERGROUP = 2; // Internal type used by DefaultShareProvider const SHARE_TYPE_LINK = 3; const SHARE_TYPE_EMAIL = 4; const SHARE_TYPE_CONTACT = 5; // ToDo Check if it is still in use otherwise remove it @@ -38,6 +39,8 @@ class Constants { const SHARE_TYPE_CIRCLE = 7; const SHARE_TYPE_GUEST = 8; const SHARE_TYPE_REMOTE_GROUP = 9; + const SHARE_TYPE_ROOM = 10; + // const SHARE_TYPE_USERROOM = 11; // Internal type used by RoomShareProvider const FORMAT_NONE = -1; const FORMAT_STATUSES = -2; diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index d0316b44c1a..037ea53048a 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -239,6 +239,7 @@ class Manager implements IManager { if ($circle === null) { throw new \InvalidArgumentException('SharedWith is not a valid circle'); } + } else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_ROOM) { } else { // We can't handle other types yet throw new \InvalidArgumentException('unknown share type'); @@ -1247,6 +1248,15 @@ class Manager implements IManager { } } + if ($share === null && $this->shareProviderExists(\OCP\Share::SHARE_TYPE_ROOM)) { + try { + $provider = $this->factory->getProviderForType(\OCP\Share::SHARE_TYPE_ROOM); + $share = $provider->getShareByToken($token); + } catch (ProviderException $e) { + } catch (ShareNotFound $e) { + } + } + if ($share === null) { throw new ShareNotFound($this->l->t('The requested share does not exist anymore')); } diff --git a/lib/private/Share20/ProviderFactory.php b/lib/private/Share20/ProviderFactory.php index 0aacca409d1..6cb6c082df5 100644 --- a/lib/private/Share20/ProviderFactory.php +++ b/lib/private/Share20/ProviderFactory.php @@ -60,6 +60,8 @@ class ProviderFactory implements IProviderFactory { private $shareByCircleProvider = null; /** @var bool */ private $circlesAreNotAvailable = false; + /** @var \OCA\Spreed\Share\RoomShareProvider */ + private $roomShareProvider = null; /** * IProviderFactory constructor. @@ -221,6 +223,30 @@ class ProviderFactory implements IProviderFactory { return $this->shareByCircleProvider; } + /** + * Create the room share provider + * + * @return RoomShareProvider + */ + protected function getRoomShareProvider() { + if ($this->roomShareProvider === null) { + /* + * Check if the app is enabled + */ + $appManager = $this->serverContainer->getAppManager(); + if (!$appManager->isEnabledForUser('spreed')) { + return null; + } + + try { + $this->roomShareProvider = $this->serverContainer->query('\OCA\Spreed\Share\RoomShareProvider'); + } catch (\OCP\AppFramework\QueryException $e) { + return null; + } + } + + return $this->roomShareProvider; + } /** * @inheritdoc @@ -235,6 +261,8 @@ class ProviderFactory implements IProviderFactory { $provider = $this->getShareByMailProvider(); } else if ($id === 'ocCircleShare') { $provider = $this->getShareByCircleProvider(); + } else if ($id === 'ocRoomShare') { + $provider = $this->getRoomShareProvider(); } if ($provider === null) { @@ -261,6 +289,8 @@ class ProviderFactory implements IProviderFactory { $provider = $this->getShareByMailProvider(); } else if ($shareType === \OCP\Share::SHARE_TYPE_CIRCLE) { $provider = $this->getShareByCircleProvider(); + } else if ($shareType === \OCP\Share::SHARE_TYPE_ROOM) { + $provider = $this->getRoomShareProvider(); } @@ -281,6 +311,10 @@ class ProviderFactory implements IProviderFactory { if ($shareByCircle !== null) { $shares[] = $shareByCircle; } + $roomShare = $this->getRoomShareProvider(); + if ($roomShare !== null) { + $shares[] = $roomShare; + } return $shares; } diff --git a/resources/app-info.xsd b/resources/app-info.xsd index 4460b0f63b9..516d984674e 100644 --- a/resources/app-info.xsd +++ b/resources/app-info.xsd @@ -344,6 +344,7 @@ <xs:enumeration value="social"/> <xs:enumeration value="tools"/> <xs:enumeration value="games"/> + <xs:enumeration value="search"/> </xs:restriction> </xs:simpleType> diff --git a/settings/css/settings.scss b/settings/css/settings.scss index 72e69fa240d..f3d51217f01 100644 --- a/settings/css/settings.scss +++ b/settings/css/settings.scss @@ -410,6 +410,7 @@ table.nostyle { } } +/* Devices & sessions access & tokens */ #security { table { width: 100%; @@ -420,12 +421,6 @@ table.nostyle { opacity: .5; padding: 10px 10px 10px 0; } - td { - padding: 10px 10px 10px 0; - &:first-child { - padding: 10px; - } - } } .token-list td { &%icon { @@ -441,8 +436,8 @@ table.nostyle { div { opacity: 0.57; - width: inherit; - padding-top: 5px; + width: 44px; + height: 44px; } } border-top: 1px solid var(--color-border); @@ -450,48 +445,27 @@ table.nostyle { max-width: 200px; white-space: nowrap; overflow: hidden; - vertical-align: top; + vertical-align: middle; position: relative; } tr > *:nth-child(3) { text-align: right; } .token-list { - td > a.icon { - + td > a.icon-more { transition: opacity 0.5s; } - a.icon { - margin-top: 4px; + a.icon-more { + padding: 14px; display: block; + width: 44px; + height: 44px; + opacity: .5; } tr { - &:hover td > a.icon, &.active td > a.icon { - opacity: 0.6; - } - } - td div.configure { - display: none; - } - tr.active div.configure { - display: block; - position: absolute; - top: 45px; - right: -5px; - padding: 10px; - } - div.configure:after { - right: 13px; - } - tr.active { - div.configure > * { - margin-top: 5px; - margin-bottom: 5px; - display: inline-block; - } - a.icon-delete { - background-position: left; - padding-left: 20px; + &:hover td > a.icon, + &.active td > a.icon { + opacity: 0.7; } } } diff --git a/settings/js/authtoken_view.js b/settings/js/authtoken_view.js index 7f788935ac9..523d548f205 100644 --- a/settings/js/authtoken_view.js +++ b/settings/js/authtoken_view.js @@ -36,13 +36,17 @@ + '<td><span class="last-activity has-tooltip" title="{{lastActivityTime}}">{{lastActivity}}</span></td>' + '<td class="more">' + '{{#if showMore}}<a class="icon icon-more"/>{{/if}}' - + '<div class="popovermenu bubble open menu configure">' + + '<div class="popovermenu menu">' + '{{#if canScope}}' + + '<li><span class="menuitem">' + '<input class="filesystem checkbox" type="checkbox" id="{{id}}_filesystem" {{#if scope.filesystem}}checked{{/if}}/>' + '<label for="{{id}}_filesystem">' + t('settings', 'Allow filesystem access') + '</label><br/>' + + '</span></li>' + '{{/if}}' + '{{#if canDelete}}' + + '<li>' + '<a class="icon icon-delete has-tooltip" title="' + t('settings', 'Disconnect') + '">' + t('settings', 'Revoke') +'</a>' + + '</li>' + '{{/if}}' + '</div>' + '</td>' @@ -376,11 +380,13 @@ var $target = $(event.target); var $row = $target.closest('tr'); $row.toggleClass('active'); + $row.find('.popovermenu').toggleClass('open'); var id = $row.data('id'); }, _hideConfigureToken: function() { $('.token-list tr').removeClass('active'); + $('.token-list tr .popovermenu').removeClass('open'); }, _onDeleteToken: function (event) { diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js index 53489f3d98d..a2867b33f6a 100644 --- a/settings/l10n/ja.js +++ b/settings/l10n/ja.js @@ -149,7 +149,7 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "メールサーバー", "Open documentation" : "ドキュメントを開く", - "It is important to set up this server to be able to send emails, like for password reset and notifications." : "パスワードのリセットや通知などのメールを送信できるよう、このサーバを設定することが重要です。", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "パスワードのリセットや通知などのメールを送信できるよう、このサーバーを設定することが重要です。", "Send mode" : "送信モード", "Encryption" : "暗号化", "From address" : "送信元アドレス", @@ -180,7 +180,7 @@ OC.L10N.register( "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。", "Start migration" : "移行を開始", "Security & setup warnings" : "セキュリティ&セットアップ警告", - "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "あなたのサーバのセキュリティとパフォーマンスのためには、すべてが正確に設定されていることが重要です。あなたの力になるよう、Nextcloudでは一部の自動チェックを行っています。詳細な情報は、リンクされたドキュメントを参照してください。", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "あなたのサーバーのセキュリティとパフォーマンスのためには、すべてが正確に設定されていることが重要です。あなたの力になるよう、Nextcloudでは一部の自動チェックを行っています。詳細な情報は、リンクされたドキュメントを参照してください。", "All checks passed." : "すべてのチェックに合格しました。", "Please double check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%s\">log</a>." : "<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">インストールガイド ↗</a>を二度確認して、 <a href=\"%s\">ログ</a>にあるすべてのエラーや警告を確認してください。", "Version" : "バージョン", @@ -320,7 +320,7 @@ OC.L10N.register( "Error creating user: {message}" : "ユーザー作成エラー {message}", "A valid password must be provided" : "有効なパスワードを指定する必要があります", "A valid email must be provided" : "有効なメールアドレスを指定する必要があります", - "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "あなたのサーバのセキュリティとパフォーマンスのためには、すべてが正確に設定されていることが重要です。あなたの力になるよう、Nextcloudでは一部の自動チェックを行っています。Tips & Tricksセクションや、詳細な情報はドキュメントを参照してください。", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "あなたのサーバーのセキュリティとパフォーマンスのためには、すべてが正確に設定されていることが重要です。あなたの力になるよう、Nextcloudでは一部の自動チェックを行っています。Tips & Tricksセクションや、詳細な情報はドキュメントを参照してください。", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "\"config\"は読み取り専用になってます。そのためにWEBインターフェースで設定できません可能性があります。さらに、更新時に\"config\"ファイルを書き込み権限を与えることが必要", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "これは、Zend OPcacheやeAccelerator 等のキャッシュ/アクセラレーターが原因かもしれません。", "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "あなたのデータベースは \"READ COMMITED\" トランザクション分離レベルで動作していません。このことにより複数のアクションが平行して実行される場合に問題が起こる可能性があります。", @@ -371,7 +371,7 @@ OC.L10N.register( "change email address" : "メールアドレスを変更", "Default" : "デフォルト", "{size} used" : "{size} を使用中", - "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Tricks section and the documentation for more information." : "あなたのサーバのセキュリティとパフォーマンスのためには、すべてが正確に設定されていることが重要です。あなたの力になるよう、Nextcloudでは一部の自動チェックを行っています。Tips & Tricksセクションや、詳細な情報はドキュメントを参照してください。", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Tricks section and the documentation for more information." : "あなたのサーバーのセキュリティとパフォーマンスのためには、すべてが正確に設定されていることが重要です。あなたの力になるよう、Nextcloudでは一部の自動チェックを行っています。Tips & Tricksセクションや、詳細な情報はドキュメントを参照してください。", "PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHPのシステム環境変数が正しく設定されていないようです。getenv(\"PATH\") コマンドでテストして何も値を返さないことを確認してください。", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHPでインラインドキュメントブロックを取り除く設定になっています。これによりコアアプリで利用できないものがいくつかあります。", "%1$s below version %2$s is installed, for stability and performance reasons it is recommended to update to a newer %1$s version." : "%2$s よりも古いバージョンの %1$s がインストールされています。安定した稼働とパフォーマンスの観点から、新しいバージョンの %1$s にアップデートすることをお勧めします。", diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json index 0ed9145d4b1..6562c5750a4 100644 --- a/settings/l10n/ja.json +++ b/settings/l10n/ja.json @@ -147,7 +147,7 @@ "STARTTLS" : "STARTTLS", "Email server" : "メールサーバー", "Open documentation" : "ドキュメントを開く", - "It is important to set up this server to be able to send emails, like for password reset and notifications." : "パスワードのリセットや通知などのメールを送信できるよう、このサーバを設定することが重要です。", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "パスワードのリセットや通知などのメールを送信できるよう、このサーバーを設定することが重要です。", "Send mode" : "送信モード", "Encryption" : "暗号化", "From address" : "送信元アドレス", @@ -178,7 +178,7 @@ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。", "Start migration" : "移行を開始", "Security & setup warnings" : "セキュリティ&セットアップ警告", - "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "あなたのサーバのセキュリティとパフォーマンスのためには、すべてが正確に設定されていることが重要です。あなたの力になるよう、Nextcloudでは一部の自動チェックを行っています。詳細な情報は、リンクされたドキュメントを参照してください。", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "あなたのサーバーのセキュリティとパフォーマンスのためには、すべてが正確に設定されていることが重要です。あなたの力になるよう、Nextcloudでは一部の自動チェックを行っています。詳細な情報は、リンクされたドキュメントを参照してください。", "All checks passed." : "すべてのチェックに合格しました。", "Please double check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%s\">log</a>." : "<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">インストールガイド ↗</a>を二度確認して、 <a href=\"%s\">ログ</a>にあるすべてのエラーや警告を確認してください。", "Version" : "バージョン", @@ -318,7 +318,7 @@ "Error creating user: {message}" : "ユーザー作成エラー {message}", "A valid password must be provided" : "有効なパスワードを指定する必要があります", "A valid email must be provided" : "有効なメールアドレスを指定する必要があります", - "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "あなたのサーバのセキュリティとパフォーマンスのためには、すべてが正確に設定されていることが重要です。あなたの力になるよう、Nextcloudでは一部の自動チェックを行っています。Tips & Tricksセクションや、詳細な情報はドキュメントを参照してください。", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "あなたのサーバーのセキュリティとパフォーマンスのためには、すべてが正確に設定されていることが重要です。あなたの力になるよう、Nextcloudでは一部の自動チェックを行っています。Tips & Tricksセクションや、詳細な情報はドキュメントを参照してください。", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "\"config\"は読み取り専用になってます。そのためにWEBインターフェースで設定できません可能性があります。さらに、更新時に\"config\"ファイルを書き込み権限を与えることが必要", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "これは、Zend OPcacheやeAccelerator 等のキャッシュ/アクセラレーターが原因かもしれません。", "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "あなたのデータベースは \"READ COMMITED\" トランザクション分離レベルで動作していません。このことにより複数のアクションが平行して実行される場合に問題が起こる可能性があります。", @@ -369,7 +369,7 @@ "change email address" : "メールアドレスを変更", "Default" : "デフォルト", "{size} used" : "{size} を使用中", - "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Tricks section and the documentation for more information." : "あなたのサーバのセキュリティとパフォーマンスのためには、すべてが正確に設定されていることが重要です。あなたの力になるよう、Nextcloudでは一部の自動チェックを行っています。Tips & Tricksセクションや、詳細な情報はドキュメントを参照してください。", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Tricks section and the documentation for more information." : "あなたのサーバーのセキュリティとパフォーマンスのためには、すべてが正確に設定されていることが重要です。あなたの力になるよう、Nextcloudでは一部の自動チェックを行っています。Tips & Tricksセクションや、詳細な情報はドキュメントを参照してください。", "PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHPのシステム環境変数が正しく設定されていないようです。getenv(\"PATH\") コマンドでテストして何も値を返さないことを確認してください。", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHPでインラインドキュメントブロックを取り除く設定になっています。これによりコアアプリで利用できないものがいくつかあります。", "%1$s below version %2$s is installed, for stability and performance reasons it is recommended to update to a newer %1$s version." : "%2$s よりも古いバージョンの %1$s がインストールされています。安定した稼働とパフォーマンスの観点から、新しいバージョンの %1$s にアップデートすることをお勧めします。", diff --git a/tests/Core/Controller/LoginControllerTest.php b/tests/Core/Controller/LoginControllerTest.php index 7ebd6ee8340..f3e6c854808 100644 --- a/tests/Core/Controller/LoginControllerTest.php +++ b/tests/Core/Controller/LoginControllerTest.php @@ -27,6 +27,7 @@ use OC\Authentication\TwoFactorAuth\ProviderSet; use OC\Core\Controller\LoginController; use OC\Security\Bruteforce\Throttler; use OC\User\Session; +use OCA\TwoFactorBackupCodes\Provider\BackupCodesProvider; use OCP\AppFramework\Http\RedirectResponse; use OCP\AppFramework\Http\TemplateResponse; use OCP\Authentication\TwoFactorAuth\IProvider; @@ -594,7 +595,10 @@ class LoginControllerTest extends TestCase { ->will($this->returnValue('john')); $password = 'secret'; $challengeUrl = 'challenge/url'; - $provider = $this->createMock(IProvider::class); + $provider1 = $this->createMock(IProvider::class); + $provider1->method('getId')->willReturn('u2f'); + $provider2 = $this->createMock(BackupCodesProvider::class); + $provider2->method('getId')->willReturn('backup'); $this->request ->expects($this->once()) @@ -616,14 +620,11 @@ class LoginControllerTest extends TestCase { $this->twoFactorManager->expects($this->once()) ->method('prepareTwoFactorLogin') ->with($user); - $providerSet = new ProviderSet([$provider], false); + $providerSet = new ProviderSet([$provider1, $provider2], false); $this->twoFactorManager->expects($this->once()) ->method('getProviderSet') ->with($user) ->willReturn($providerSet); - $provider->expects($this->once()) - ->method('getId') - ->will($this->returnValue('u2f')); $this->urlGenerator->expects($this->once()) ->method('linkToRoute') ->with('core.TwoFactorChallenge.showChallenge', [ diff --git a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php index f51f7e9a1c6..13c5379b142 100644 --- a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php +++ b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php @@ -568,7 +568,7 @@ class SecurityMiddlewareTest extends \Test\TestCase { 'test', $exception ); - $expected = new TemplateResponse('core', '403', ['file' => $exception->getMessage()], 'guest'); + $expected = new TemplateResponse('core', '403', ['message' => $exception->getMessage()], 'guest'); $expected->setStatus($exception->getCode()); $this->assertEquals($expected , $response); } diff --git a/tests/lib/Authentication/TwoFactorAuth/Db/ProviderUserAssignmentDaoTest.php b/tests/lib/Authentication/TwoFactorAuth/Db/ProviderUserAssignmentDaoTest.php index 6323c2f0aa4..b46bce719fa 100644 --- a/tests/lib/Authentication/TwoFactorAuth/Db/ProviderUserAssignmentDaoTest.php +++ b/tests/lib/Authentication/TwoFactorAuth/Db/ProviderUserAssignmentDaoTest.php @@ -112,4 +112,23 @@ class ProviderUserAssignmentDaoTest extends TestCase { $this->assertCount(1, $data); } + public function testPersistSameStateTwice() { + $qb = $this->dbConn->getQueryBuilder(); + + $this->dao->persist('twofactor_totp', 'user123', 1); + $this->dao->persist('twofactor_totp', 'user123', 1); + + $q = $qb + ->select('*') + ->from(ProviderUserAssignmentDao::TABLE_NAME) + ->where($qb->expr()->eq('provider_id', $qb->createNamedParameter('twofactor_totp'))) + ->andWhere($qb->expr()->eq('uid', $qb->createNamedParameter('user123'))) + ->andWhere($qb->expr()->eq('enabled', $qb->createNamedParameter(1))); + $res = $q->execute(); + $data = $res->fetchAll(); + $res->closeCursor(); + + $this->assertCount(1, $data); + } + } diff --git a/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php b/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php index 34ce340049a..1d7c147d9ce 100644 --- a/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php +++ b/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php @@ -160,6 +160,32 @@ class ManagerTest extends TestCase { $this->assertFalse($this->manager->isTwoFactorAuthenticated($this->user)); } + public function testIsTwoFactorAuthenticatedOnlyBackupCodes() { + $this->user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('user123')); + $this->config->expects($this->once()) + ->method('getUserValue') + ->with('user123', 'core', 'two_factor_auth_disabled', 0) + ->willReturn(0); + $this->providerRegistry->expects($this->once()) + ->method('getProviderStates') + ->willReturn([ + 'backup_codes' => true, + ]); + $backupCodesProvider = $this->createMock(IProvider::class); + $backupCodesProvider + ->method('getId') + ->willReturn('backup_codes'); + $this->providerLoader->expects($this->once()) + ->method('getProviders') + ->willReturn([ + $backupCodesProvider, + ]); + + $this->assertFalse($this->manager->isTwoFactorAuthenticated($this->user)); + } + public function testIsTwoFactorAuthenticatedFailingProviders() { $this->user->expects($this->once()) ->method('getUID') diff --git a/tests/lib/Authentication/TwoFactorAuth/ProviderSetTest.php b/tests/lib/Authentication/TwoFactorAuth/ProviderSetTest.php index a6f0a703d5e..f294e40111d 100644 --- a/tests/lib/Authentication/TwoFactorAuth/ProviderSetTest.php +++ b/tests/lib/Authentication/TwoFactorAuth/ProviderSetTest.php @@ -26,6 +26,7 @@ declare(strict_types=1); namespace Test\Authentication\TwoFactorAuth; use OC\Authentication\TwoFactorAuth\ProviderSet; +use OCA\TwoFactorBackupCodes\Provider\BackupCodesProvider; use OCP\Authentication\TwoFactorAuth\IProvider; use Test\TestCase; @@ -49,6 +50,23 @@ class ProviderSetTest extends TestCase { $this->assertEquals($expected, $set->getProviders()); } + public function testGet3rdPartyProviders() { + $p1 = $this->createMock(IProvider::class); + $p1->method('getId')->willReturn('p1'); + $p2 = $this->createMock(IProvider::class); + $p2->method('getId')->willReturn('p2'); + $p3 = $this->createMock(BackupCodesProvider::class); + $p3->method('getId')->willReturn('p3'); + $expected = [ + 'p1' => $p1, + 'p2' => $p2, + ]; + + $set = new ProviderSet([$p2, $p1], false); + + $this->assertEquals($expected, $set->getPrimaryProviders()); + } + public function testGetProvider() { $p1 = $this->createMock(IProvider::class); $p1->method('getId')->willReturn('p1'); diff --git a/tests/lib/Collaboration/Collaborators/UserPluginTest.php b/tests/lib/Collaboration/Collaborators/UserPluginTest.php index cfb97de8676..7513f9da5b6 100644 --- a/tests/lib/Collaboration/Collaborators/UserPluginTest.php +++ b/tests/lib/Collaboration/Collaborators/UserPluginTest.php @@ -89,7 +89,7 @@ class UserPluginTest extends TestCase { ); } - public function getUserMock($uid, $displayName) { + public function getUserMock($uid, $displayName, $enabled = true) { $user = $this->createMock(IUser::class); $user->expects($this->any()) @@ -100,6 +100,10 @@ class UserPluginTest extends TestCase { ->method('getDisplayName') ->willReturn($displayName); + $user->expects($this->any()) + ->method('isEnabled') + ->willReturn($enabled); + return $user; } diff --git a/tests/lib/Share20/ManagerTest.php b/tests/lib/Share20/ManagerTest.php index 7106e22b264..1125cae9565 100644 --- a/tests/lib/Share20/ManagerTest.php +++ b/tests/lib/Share20/ManagerTest.php @@ -2165,6 +2165,56 @@ class ManagerTest extends \Test\TestCase { $this->assertSame($share, $ret); } + public function testGetShareByTokenRoom() { + $this->config + ->expects($this->once()) + ->method('getAppValue') + ->with('core', 'shareapi_allow_links', 'yes') + ->willReturn('no'); + + $factory = $this->createMock(IProviderFactory::class); + + $manager = new Manager( + $this->logger, + $this->config, + $this->secureRandom, + $this->hasher, + $this->mountManager, + $this->groupManager, + $this->l, + $this->l10nFactory, + $factory, + $this->userManager, + $this->rootFolder, + $this->eventDispatcher, + $this->mailer, + $this->urlGenerator, + $this->defaults + ); + + $share = $this->createMock(IShare::class); + + $roomShareProvider = $this->createMock(IShareProvider::class); + + $factory->expects($this->any()) + ->method('getProviderForType') + ->will($this->returnCallback(function($shareType) use ($roomShareProvider) { + if ($shareType !== \OCP\Share::SHARE_TYPE_ROOM) { + throw new Exception\ProviderException(); + } + + return $roomShareProvider; + })); + + $roomShareProvider->expects($this->once()) + ->method('getShareByToken') + ->with('token') + ->willReturn($share); + + $ret = $manager->getShareByToken('token'); + $this->assertSame($share, $ret); + } + public function testGetShareByTokenWithException() { $this->config ->expects($this->once()) diff --git a/version.php b/version.php index 38ed681b593..4146fb97ccd 100644 --- a/version.php +++ b/version.php @@ -29,10 +29,10 @@ // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel // when updating major/minor version number. -$OC_Version = array(14, 0, 0, 14); +$OC_Version = array(14, 0, 0, 15); // The human readable string -$OC_VersionString = '14.0.0 Beta 2'; +$OC_VersionString = '14.0.0 Beta 3'; $OC_VersionCanBeUpgradedFrom = [ 'nextcloud' => [ |