diff options
318 files changed, 2498 insertions, 3423 deletions
diff --git a/.drone.yml b/.drone.yml index dd4ec404209..24e06dd1b25 100644 --- a/.drone.yml +++ b/.drone.yml @@ -268,6 +268,15 @@ pipeline: when: matrix: TESTS: integration-auth + integration-maintenance-mode: + image: nextcloudci/integration-php7.0:integration-php7.0-3 + commands: + - ./occ maintenance:install --admin-pass=admin + - cd build/integration + - ./run.sh features/maintenance-mode.feature + when: + matrix: + TESTS: integration-maintenance-mode integration-carddav: image: nextcloudci/integration-php7.0:integration-php7.0-3 commands: @@ -448,6 +457,15 @@ pipeline: when: matrix: TESTS: integration-ldap-features + integration-trashbin: + image: nextcloudci/integration-php7.0:integration-php7.0-3 + commands: + - ./occ maintenance:install --admin-pass=admin + - cd build/integration + - ./run.sh features/trashbin.feature + when: + matrix: + TESTS: integration-trashbin nodb-codecov: image: nextcloudci/php7.0:php7.0-7 commands: @@ -497,6 +515,7 @@ matrix: - TESTS: db-codecov - TESTS: integration-capabilities_features - TESTS: integration-federation_features + - TESTS: integration-maintenance-mode - TESTS: integration-auth - TESTS: integration-carddav - TESTS: integration-dav-v2 @@ -518,6 +537,7 @@ matrix: - TESTS: integration-filesdrop-features - TESTS: integration-transfer-ownership-features - TESTS: integration-ldap-features + - TESTS: integration-trashbin - TESTS: jsunit - TESTS: check-autoloader - TESTS: check-mergejs diff --git a/apps/dav/lib/CardDAV/SyncService.php b/apps/dav/lib/CardDAV/SyncService.php index 477e912a797..b6f57753431 100644 --- a/apps/dav/lib/CardDAV/SyncService.php +++ b/apps/dav/lib/CardDAV/SyncService.php @@ -75,6 +75,7 @@ class SyncService { /** * @param string $url * @param string $userName + * @param string $addressBookUrl * @param string $sharedSecret * @param string $syncToken * @param int $targetBookId @@ -83,14 +84,14 @@ class SyncService { * @return string * @throws \Exception */ - public function syncRemoteAddressBook($url, $userName, $sharedSecret, $syncToken, $targetBookId, $targetPrincipal, $targetProperties) { + public function syncRemoteAddressBook($url, $userName, $addressBookUrl, $sharedSecret, $syncToken, $targetBookId, $targetPrincipal, $targetProperties) { // 1. create addressbook $book = $this->ensureSystemAddressBookExists($targetPrincipal, $targetBookId, $targetProperties); $addressBookId = $book['id']; // 2. query changes try { - $response = $this->requestSyncReport($url, $userName, $sharedSecret, $syncToken); + $response = $this->requestSyncReport($url, $userName, $addressBookUrl, $sharedSecret, $syncToken); } catch (ClientHttpException $ex) { if ($ex->getCode() === Http::STATUS_UNAUTHORIZED) { // remote server revoked access to the address book, remove it @@ -105,7 +106,7 @@ class SyncService { foreach ($response['response'] as $resource => $status) { $cardUri = basename($resource); if (isset($status[200])) { - $vCard = $this->download($url, $sharedSecret, $resource); + $vCard = $this->download($url, $userName, $sharedSecret, $resource); $existingCard = $this->backend->getCard($addressBookId, $cardUri); if ($existingCard === false) { $this->backend->createCard($addressBookId, $cardUri, $vCard['body']); @@ -162,6 +163,7 @@ class SyncService { /** * @param string $url * @param string $userName + * @param string $addressBookUrl * @param string $sharedSecret * @return Client */ @@ -185,31 +187,32 @@ class SyncService { /** * @param string $url * @param string $userName + * @param string $addressBookUrl * @param string $sharedSecret * @param string $syncToken * @return array */ - protected function requestSyncReport($url, $userName, $sharedSecret, $syncToken) { - $client = $this->getClient($url, $userName, $sharedSecret); + protected function requestSyncReport($url, $userName, $addressBookUrl, $sharedSecret, $syncToken) { + $client = $this->getClient($url, $userName, $sharedSecret); - $addressBookUrl = "remote.php/dav/addressbooks/system/system/system"; - $body = $this->buildSyncCollectionRequestBody($syncToken); + $body = $this->buildSyncCollectionRequestBody($syncToken); - $response = $client->request('REPORT', $addressBookUrl, $body, [ - 'Content-Type' => 'application/xml' - ]); + $response = $client->request('REPORT', $addressBookUrl, $body, [ + 'Content-Type' => 'application/xml' + ]); - return $this->parseMultiStatus($response['body']); - } + return $this->parseMultiStatus($response['body']); + } /** * @param string $url + * @param string $userName * @param string $sharedSecret * @param string $resourcePath * @return array */ - protected function download($url, $sharedSecret, $resourcePath) { - $client = $this->getClient($url, 'system', $sharedSecret); + protected function download($url, $userName, $sharedSecret, $resourcePath) { + $client = $this->getClient($url, $userName, $sharedSecret); return $client->request('GET', $resourcePath); } diff --git a/apps/dav/lib/Connector/Sabre/Auth.php b/apps/dav/lib/Connector/Sabre/Auth.php index 93d8b14d9c9..bdaf73d46e7 100644 --- a/apps/dav/lib/Connector/Sabre/Auth.php +++ b/apps/dav/lib/Connector/Sabre/Auth.php @@ -174,7 +174,7 @@ class Auth extends AbstractBasic { return false; } - // Official ownCloud clients require no checks + // Official Nextcloud clients require no checks if($this->request->isUserAgent([ IRequest::USER_AGENT_CLIENT_DESKTOP, IRequest::USER_AGENT_CLIENT_ANDROID, diff --git a/apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php b/apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php index e48105f6d7a..66d6b335f40 100644 --- a/apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php @@ -42,6 +42,10 @@ class CommentPropertiesPlugin extends ServerPlugin { /** @var IUserSession */ private $userSession; + private $cachedUnreadCount = []; + + private $cachedFolders = []; + public function __construct(ICommentsManager $commentsManager, IUserSession $userSession) { $this->commentsManager = $commentsManager; $this->userSession = $userSession; @@ -79,6 +83,18 @@ class CommentPropertiesPlugin extends ServerPlugin { return; } + // need prefetch ? + if ($node instanceof \OCA\DAV\Connector\Sabre\Directory + && $propFind->getDepth() !== 0 + && !is_null($propFind->getStatus(self::PROPERTY_NAME_UNREAD)) + ) { + $unreadCounts = $this->commentsManager->getNumberOfUnreadCommentsForFolder($node->getId(), $this->userSession->getUser()); + $this->cachedFolders[] = $node->getPath(); + foreach ($unreadCounts as $id => $count) { + $this->cachedUnreadCount[$id] = $count; + } + } + $propFind->handle(self::PROPERTY_NAME_COUNT, function() use ($node) { return $this->commentsManager->getNumberOfCommentsForObject('files', strval($node->getId())); }); @@ -88,7 +104,20 @@ class CommentPropertiesPlugin extends ServerPlugin { }); $propFind->handle(self::PROPERTY_NAME_UNREAD, function() use ($node) { - return $this->getUnreadCount($node); + if (isset($this->cachedUnreadCount[$node->getId()])) { + return $this->cachedUnreadCount[$node->getId()]; + } else { + list($parentPath,) = \Sabre\Uri\split($node->getPath()); + if ($parentPath === '') { + $parentPath = '/'; + } + // if we already cached the folder this file is in we know there are no shares for this file + if (array_search($parentPath, $this->cachedFolders) === false) { + return $this->getUnreadCount($node); + } else { + return 0; + } + } }); } diff --git a/apps/dav/lib/Connector/Sabre/DummyGetResponsePlugin.php b/apps/dav/lib/Connector/Sabre/DummyGetResponsePlugin.php index a9e339f9ffc..f8193f38e1f 100644 --- a/apps/dav/lib/Connector/Sabre/DummyGetResponsePlugin.php +++ b/apps/dav/lib/Connector/Sabre/DummyGetResponsePlugin.php @@ -27,7 +27,7 @@ use Sabre\HTTP\RequestInterface; /** * Class DummyGetResponsePlugin is a plugin used to not show a "Not implemented" - * error to clients that rely on verifying the functionality of the ownCloud + * error to clients that rely on verifying the functionality of the Nextcloud * WebDAV backend using a simple GET to /. * * This is considered a legacy behaviour and implementers should consider sending diff --git a/apps/dav/lib/Connector/Sabre/QuotaPlugin.php b/apps/dav/lib/Connector/Sabre/QuotaPlugin.php index 4aef5fc8a5a..f0958c353a1 100644 --- a/apps/dav/lib/Connector/Sabre/QuotaPlugin.php +++ b/apps/dav/lib/Connector/Sabre/QuotaPlugin.php @@ -106,7 +106,7 @@ class QuotaPlugin extends \Sabre\DAV\ServerPlugin { $uri = rtrim($parentUri, '/') . '/' . $info['name']; } $freeSpace = $this->getFreeSpace($uri); - if ($freeSpace !== FileInfo::SPACE_UNKNOWN && $length > $freeSpace) { + if ($freeSpace !== FileInfo::SPACE_UNKNOWN && $freeSpace !== FileInfo::SPACE_UNLIMITED && $length > $freeSpace) { if (isset($chunkHandler)) { $chunkHandler->cleanup(); } diff --git a/apps/dav/lib/Connector/Sabre/ServerFactory.php b/apps/dav/lib/Connector/Sabre/ServerFactory.php index 24c93ee571d..f04362dfc08 100644 --- a/apps/dav/lib/Connector/Sabre/ServerFactory.php +++ b/apps/dav/lib/Connector/Sabre/ServerFactory.php @@ -142,7 +142,7 @@ class ServerFactory { $rootInfo = $view->getFileInfo(''); } - // Create ownCloud Dir + // Create Nextcloud Dir if ($rootInfo->getType() === 'dir') { $root = new \OCA\DAV\Connector\Sabre\Directory($view, $rootInfo, $objectTree); } else { diff --git a/apps/dav/lib/Server.php b/apps/dav/lib/Server.php index a5c1379eb7e..e0517477488 100644 --- a/apps/dav/lib/Server.php +++ b/apps/dav/lib/Server.php @@ -74,6 +74,9 @@ class Server { $root = new RootCollection(); $this->server = new \OCA\DAV\Connector\Sabre\Server($root); + // Add maintenance plugin + $this->server->addPlugin(new \OCA\DAV\Connector\Sabre\MaintenancePlugin(\OC::$server->getConfig())); + // Backends $authBackend = new Auth( \OC::$server->getSession(), diff --git a/apps/dav/tests/unit/CardDAV/SyncServiceTest.php b/apps/dav/tests/unit/CardDAV/SyncServiceTest.php index c06e4857743..32f8a2424b1 100644 --- a/apps/dav/tests/unit/CardDAV/SyncServiceTest.php +++ b/apps/dav/tests/unit/CardDAV/SyncServiceTest.php @@ -37,7 +37,7 @@ class SyncServiceTest extends TestCase { $backend = $this->getBackendMock(0, 0, 0); $ss = $this->getSyncServiceMock($backend, []); - $return = $ss->syncRemoteAddressBook('', 'system', '1234567890', null, '1', 'principals/system/system', []); + $return = $ss->syncRemoteAddressBook('', 'system', 'system', '1234567890', null, '1', 'principals/system/system', []); $this->assertEquals('sync-token-1', $return); } @@ -46,7 +46,7 @@ class SyncServiceTest extends TestCase { $backend->method('getCard')->willReturn(false); $ss = $this->getSyncServiceMock($backend, ['0' => [200 => '']]); - $return = $ss->syncRemoteAddressBook('', 'system', '1234567890', null, '1', 'principals/system/system', []); + $return = $ss->syncRemoteAddressBook('', 'system', 'system', '1234567890', null, '1', 'principals/system/system', []); $this->assertEquals('sync-token-1', $return); } @@ -55,7 +55,7 @@ class SyncServiceTest extends TestCase { $backend->method('getCard')->willReturn(true); $ss = $this->getSyncServiceMock($backend, ['0' => [200 => '']]); - $return = $ss->syncRemoteAddressBook('', 'system', '1234567890', null, '1', 'principals/system/system', []); + $return = $ss->syncRemoteAddressBook('', 'system', 'system', '1234567890', null, '1', 'principals/system/system', []); $this->assertEquals('sync-token-1', $return); } @@ -63,7 +63,7 @@ class SyncServiceTest extends TestCase { $backend = $this->getBackendMock(0, 0, 1); $ss = $this->getSyncServiceMock($backend, ['0' => [404 => '']]); - $return = $ss->syncRemoteAddressBook('', 'system', '1234567890', null, '1', 'principals/system/system', []); + $return = $ss->syncRemoteAddressBook('', 'system', 'system', '1234567890', null, '1', 'principals/system/system', []); $this->assertEquals('sync-token-1', $return); } diff --git a/apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php index b37abdc9b05..6286362f47d 100644 --- a/apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php @@ -24,6 +24,7 @@ * */ namespace OCA\DAV\Tests\unit\Connector\Sabre; +use OCP\Files\FileInfo; use Test\TestCase; /** @@ -107,11 +108,16 @@ class QuotaPluginTest extends TestCase { array(1024, array('X-EXPECTED-ENTITY-LENGTH' => '1024')), array(1024, array('CONTENT-LENGTH' => '512')), array(1024, array('OC-TOTAL-LENGTH' => '1024', 'CONTENT-LENGTH' => '512')), - // \OCP\Files\FileInfo::SPACE-UNKNOWN = -2 - array(-2, array()), - array(-2, array('X-EXPECTED-ENTITY-LENGTH' => '1024')), - array(-2, array('CONTENT-LENGTH' => '512')), - array(-2, array('OC-TOTAL-LENGTH' => '1024', 'CONTENT-LENGTH' => '512')), + + array(FileInfo::SPACE_UNKNOWN, array()), + array(FileInfo::SPACE_UNKNOWN, array('X-EXPECTED-ENTITY-LENGTH' => '1024')), + array(FileInfo::SPACE_UNKNOWN, array('CONTENT-LENGTH' => '512')), + array(FileInfo::SPACE_UNKNOWN, array('OC-TOTAL-LENGTH' => '1024', 'CONTENT-LENGTH' => '512')), + + array(FileInfo::SPACE_UNLIMITED, array()), + array(FileInfo::SPACE_UNLIMITED, array('X-EXPECTED-ENTITY-LENGTH' => '1024')), + array(FileInfo::SPACE_UNLIMITED, array('CONTENT-LENGTH' => '512')), + array(FileInfo::SPACE_UNLIMITED, array('OC-TOTAL-LENGTH' => '1024', 'CONTENT-LENGTH' => '512')), ); } diff --git a/apps/encryption/l10n/fi.js b/apps/encryption/l10n/fi.js index 10229e7706e..0a1887a5f3d 100644 --- a/apps/encryption/l10n/fi.js +++ b/apps/encryption/l10n/fi.js @@ -30,11 +30,14 @@ OC.L10N.register( "one-time password for server-side-encryption" : "kertakäyttöinen salasana palvelinpään salausta varten", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tämän tiedoston salauksen purkaminen ei onnistu. Kyseessä on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto kanssasi uudelleen.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tiedostoa ei voi lukea, se on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto uudelleen kanssasi.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hei,\n\nYlläpiäjä on ottanut käyttöön palvelimen salauksen. Tiedostosi salattiin salasanalla '%s'.\n\nOle hyvä ja kirjaudu palveluun verkkokäyttöliittymän kautta, siirry henkilökohtaisten asetustesi kohtaan \"perussalausmoduuli\" ja päivitä salaukseen käytettävä salasanasi syöttämällä yllä mainittu salasana \"vanha kirjautumissalasana\"-kenttään ja nykyinen kirjautumissalasanasi.\n\n", "The share will expire on %s." : "Jakaminen päättyy %s.", "Cheers!" : "Kiitos!", + "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hei,<br><br>Ylläpiäjä on ottanut käyttöön palvelimen salauksen. Tiedostosi salattiin salasanalla <strong>%s</srong>.<br><br>Ole hyvä ja kirjaudu palveluun verkkokäyttöliittymän kautta, siirry henkilökohtaisten asetustesi kohtaan \"perussalausmoduuli\" ja päivitä salaukseen käytettävä salasanasi syöttämällä yllä mainittu salasana \"vanha kirjautumissalasana\"-kenttään ja nykyinen kirjautumissalasanasi.<br><br>", "Default encryption module" : "Oletus salausmoduuli", "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on aktivoitu, mutta avaimia ei ole alustettu, kirjaudu uudelleen sisään", "Encrypt the home storage" : "Salaa oma kotitila", + "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Tämän valinnan ollessa valittuna salataan kaikki päätallennustilaan tallennetut tiedostot. Muussa tapauksessa ainoastaan ulkoisessa tallennustilassa sijaitsevat tiedostot salataan.", "Enable recovery key" : "Ota palautusavain käyttöön", "Disable recovery key" : "Poista palautusavain käytöstä", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Palautusavain on ylimääräinen salausavain, jota käytetään tiedostojen salaamiseen. Sen avulla on mahdollista palauttaa käyttäjien tiedostot, vaikka käyttäjä unohtaisi oman salasanansa.", diff --git a/apps/encryption/l10n/fi.json b/apps/encryption/l10n/fi.json index 14b3b95fc24..5768d7a9d82 100644 --- a/apps/encryption/l10n/fi.json +++ b/apps/encryption/l10n/fi.json @@ -28,11 +28,14 @@ "one-time password for server-side-encryption" : "kertakäyttöinen salasana palvelinpään salausta varten", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tämän tiedoston salauksen purkaminen ei onnistu. Kyseessä on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto kanssasi uudelleen.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tiedostoa ei voi lukea, se on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto uudelleen kanssasi.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hei,\n\nYlläpiäjä on ottanut käyttöön palvelimen salauksen. Tiedostosi salattiin salasanalla '%s'.\n\nOle hyvä ja kirjaudu palveluun verkkokäyttöliittymän kautta, siirry henkilökohtaisten asetustesi kohtaan \"perussalausmoduuli\" ja päivitä salaukseen käytettävä salasanasi syöttämällä yllä mainittu salasana \"vanha kirjautumissalasana\"-kenttään ja nykyinen kirjautumissalasanasi.\n\n", "The share will expire on %s." : "Jakaminen päättyy %s.", "Cheers!" : "Kiitos!", + "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hei,<br><br>Ylläpiäjä on ottanut käyttöön palvelimen salauksen. Tiedostosi salattiin salasanalla <strong>%s</srong>.<br><br>Ole hyvä ja kirjaudu palveluun verkkokäyttöliittymän kautta, siirry henkilökohtaisten asetustesi kohtaan \"perussalausmoduuli\" ja päivitä salaukseen käytettävä salasanasi syöttämällä yllä mainittu salasana \"vanha kirjautumissalasana\"-kenttään ja nykyinen kirjautumissalasanasi.<br><br>", "Default encryption module" : "Oletus salausmoduuli", "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on aktivoitu, mutta avaimia ei ole alustettu, kirjaudu uudelleen sisään", "Encrypt the home storage" : "Salaa oma kotitila", + "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Tämän valinnan ollessa valittuna salataan kaikki päätallennustilaan tallennetut tiedostot. Muussa tapauksessa ainoastaan ulkoisessa tallennustilassa sijaitsevat tiedostot salataan.", "Enable recovery key" : "Ota palautusavain käyttöön", "Disable recovery key" : "Poista palautusavain käytöstä", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Palautusavain on ylimääräinen salausavain, jota käytetään tiedostojen salaamiseen. Sen avulla on mahdollista palauttaa käyttäjien tiedostot, vaikka käyttäjä unohtaisi oman salasanansa.", diff --git a/apps/encryption/l10n/zh_CN.js b/apps/encryption/l10n/zh_CN.js index 9a357f9cb52..9fa407bdac4 100644 --- a/apps/encryption/l10n/zh_CN.js +++ b/apps/encryption/l10n/zh_CN.js @@ -23,6 +23,7 @@ OC.L10N.register( "Private key password successfully updated." : "私钥密码成功更新。", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "您需要从旧版本 (ownCloud <= 8.0) 迁移您的加密密钥. 请运行 'occ encryption:migrate' 或联系您的管理员.", "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的加密应用程序私钥。请在您的个人设置中更新您的私钥密码,以恢复对加密文件的访问。", + "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "加密应用被启用了,但是你的加密密钥没有初始化。请重新登出登录系统一次。", "Encryption app is enabled and ready" : "加密应用程序已启用并准备就绪", "Bad Signature" : "签名已损坏", "Missing Signature" : "签名已丢失", diff --git a/apps/encryption/l10n/zh_CN.json b/apps/encryption/l10n/zh_CN.json index 3b5ecbb4ede..55288744ebc 100644 --- a/apps/encryption/l10n/zh_CN.json +++ b/apps/encryption/l10n/zh_CN.json @@ -21,6 +21,7 @@ "Private key password successfully updated." : "私钥密码成功更新。", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "您需要从旧版本 (ownCloud <= 8.0) 迁移您的加密密钥. 请运行 'occ encryption:migrate' 或联系您的管理员.", "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的加密应用程序私钥。请在您的个人设置中更新您的私钥密码,以恢复对加密文件的访问。", + "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "加密应用被启用了,但是你的加密密钥没有初始化。请重新登出登录系统一次。", "Encryption app is enabled and ready" : "加密应用程序已启用并准备就绪", "Bad Signature" : "签名已损坏", "Missing Signature" : "签名已丢失", diff --git a/apps/encryption/lib/Crypto/Crypt.php b/apps/encryption/lib/Crypto/Crypt.php index 4303cb9e940..9a9ac27b96f 100644 --- a/apps/encryption/lib/Crypto/Crypt.php +++ b/apps/encryption/lib/Crypto/Crypt.php @@ -38,7 +38,7 @@ use OCP\ILogger; use OCP\IUserSession; /** - * Class Crypt provides the encryption implementation of the default ownCloud + * Class Crypt provides the encryption implementation of the default Nextcloud * encryption module. As default AES-256-CTR is used, it does however offer support * for the following modes: * @@ -54,10 +54,10 @@ use OCP\IUserSession; class Crypt { const DEFAULT_CIPHER = 'AES-256-CTR'; - // default cipher from old ownCloud versions + // default cipher from old Nextcloud versions const LEGACY_CIPHER = 'AES-128-CFB'; - // default key format, old ownCloud version encrypted the private key directly + // default key format, old Nextcloud version encrypted the private key directly // with the user password const LEGACY_KEY_FORMAT = 'password'; diff --git a/apps/encryption/lib/Crypto/Encryption.php b/apps/encryption/lib/Crypto/Encryption.php index fdcbd41a09c..7f7665a24fc 100644 --- a/apps/encryption/lib/Crypto/Encryption.php +++ b/apps/encryption/lib/Crypto/Encryption.php @@ -458,7 +458,7 @@ class Encryption implements IEncryptionModule { /** * get size of the unencrypted payload per block. - * ownCloud read/write files with a block size of 8192 byte + * Nextcloud read/write files with a block size of 8192 byte * * @param bool $signed * @return int diff --git a/apps/encryption/lib/Hooks/UserHooks.php b/apps/encryption/lib/Hooks/UserHooks.php index d189ce3eeef..e0826e2c7e3 100644 --- a/apps/encryption/lib/Hooks/UserHooks.php +++ b/apps/encryption/lib/Hooks/UserHooks.php @@ -236,7 +236,7 @@ class UserHooks implements IHook { } /** - * If the password can't be changed within ownCloud, than update the key password in advance. + * If the password can't be changed within Nextcloud, than update the key password in advance. * * @param array $params : uid, password * @return boolean|null diff --git a/apps/encryption/lib/KeyManager.php b/apps/encryption/lib/KeyManager.php index 32872ae99b3..6b260c39bfb 100644 --- a/apps/encryption/lib/KeyManager.php +++ b/apps/encryption/lib/KeyManager.php @@ -687,7 +687,7 @@ class KeyManager { public function getMasterKeyPassword() { $password = $this->config->getSystemValue('secret'); if (empty($password)){ - throw new \Exception('Can not get secret from ownCloud instance'); + throw new \Exception('Can not get secret from Nextcloud instance'); } return $password; diff --git a/apps/encryption/tests/Crypto/EncryptionTest.php b/apps/encryption/tests/Crypto/EncryptionTest.php index 3525d2d4aec..7e074a5b9e8 100644 --- a/apps/encryption/tests/Crypto/EncryptionTest.php +++ b/apps/encryption/tests/Crypto/EncryptionTest.php @@ -345,7 +345,7 @@ class EncryptionTest extends TestCase { } /** - * Test case if the public key is missing. ownCloud should still encrypt + * Test case if the public key is missing. Nextcloud should still encrypt * the file for the remaining users */ public function testUpdateMissingPublicKey() { diff --git a/apps/federatedfilesharing/l10n/cs.js b/apps/federatedfilesharing/l10n/cs.js index fd7e190ee2f..66ba39701ed 100644 --- a/apps/federatedfilesharing/l10n/cs.js +++ b/apps/federatedfilesharing/l10n/cs.js @@ -41,12 +41,12 @@ OC.L10N.register( "Open documentation" : "Otevřít dokumentaci", "Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery", "Allow users on this server to receive shares from other servers" : "Povolit uživatelům na tomto serveru přijímat sdílení z jiných serverů", - "Search global and public address book for users" : "Hledat uživatele v globálním a veřejném adresáři", "Federated Cloud" : "Sdružený cloud", "Your Federated Cloud ID:" : "Vaše sdružené cloud ID:", "Share it:" : "Sdílet:", "Add to your website" : "Přidat na svou webovou stránku", "Share with me via Nextcloud" : "Sdíleno se mnou přes Nextcloud", - "HTML Code:" : "HTML kód:" + "HTML Code:" : "HTML kód:", + "Search global and public address book for users" : "Hledat uživatele v globálním a veřejném adresáři" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/federatedfilesharing/l10n/cs.json b/apps/federatedfilesharing/l10n/cs.json index 01a8fb3c6a5..1455b337314 100644 --- a/apps/federatedfilesharing/l10n/cs.json +++ b/apps/federatedfilesharing/l10n/cs.json @@ -39,12 +39,12 @@ "Open documentation" : "Otevřít dokumentaci", "Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery", "Allow users on this server to receive shares from other servers" : "Povolit uživatelům na tomto serveru přijímat sdílení z jiných serverů", - "Search global and public address book for users" : "Hledat uživatele v globálním a veřejném adresáři", "Federated Cloud" : "Sdružený cloud", "Your Federated Cloud ID:" : "Vaše sdružené cloud ID:", "Share it:" : "Sdílet:", "Add to your website" : "Přidat na svou webovou stránku", "Share with me via Nextcloud" : "Sdíleno se mnou přes Nextcloud", - "HTML Code:" : "HTML kód:" + "HTML Code:" : "HTML kód:", + "Search global and public address book for users" : "Hledat uživatele v globálním a veřejném adresáři" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/de.js b/apps/federatedfilesharing/l10n/de.js index 3d6a3af6469..2f2387c01be 100644 --- a/apps/federatedfilesharing/l10n/de.js +++ b/apps/federatedfilesharing/l10n/de.js @@ -41,12 +41,14 @@ OC.L10N.register( "Open documentation" : "Dokumentation öffnen", "Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben", "Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben", - "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Benutzer", + "Search global and public address book for users and let local users publish their data" : "Globales und öffentliches Adressbuch nach Nutzern durchsuchen und lokale Nutzer ihre Daten veröffentlichen lassen", + "Allow users to publish their data to a global and public address book" : "Erlaube Benutzern ihre Daten an ein globales und öffentliches Adressbuche zu veröffentlichen", "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:", "Share it:" : "Zum Teilen:", "Add to your website" : "Zu deiner Webseite hinzufügen", "Share with me via Nextcloud" : "Teile mit mir über Nextcloud", - "HTML Code:" : "HTML-Code:" + "HTML Code:" : "HTML-Code:", + "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Benutzer" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/de.json b/apps/federatedfilesharing/l10n/de.json index acc7217b1ba..fe1f884181c 100644 --- a/apps/federatedfilesharing/l10n/de.json +++ b/apps/federatedfilesharing/l10n/de.json @@ -39,12 +39,14 @@ "Open documentation" : "Dokumentation öffnen", "Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben", "Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben", - "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Benutzer", + "Search global and public address book for users and let local users publish their data" : "Globales und öffentliches Adressbuch nach Nutzern durchsuchen und lokale Nutzer ihre Daten veröffentlichen lassen", + "Allow users to publish their data to a global and public address book" : "Erlaube Benutzern ihre Daten an ein globales und öffentliches Adressbuche zu veröffentlichen", "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:", "Share it:" : "Zum Teilen:", "Add to your website" : "Zu deiner Webseite hinzufügen", "Share with me via Nextcloud" : "Teile mit mir über Nextcloud", - "HTML Code:" : "HTML-Code:" + "HTML Code:" : "HTML-Code:", + "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Benutzer" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/de_DE.js b/apps/federatedfilesharing/l10n/de_DE.js index 3f7d8bd2789..11983a5e2fd 100644 --- a/apps/federatedfilesharing/l10n/de_DE.js +++ b/apps/federatedfilesharing/l10n/de_DE.js @@ -41,12 +41,14 @@ OC.L10N.register( "Open documentation" : "Dokumentation öffnen", "Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben", "Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben", - "Search global and public address book for users" : "Durchsuche globales und öffentliches Adressbuch nach Nutzern", + "Search global and public address book for users and let local users publish their data" : "Globales und öffentliches Adressbuch nach Nutzern durchsuchen und lokale Nutzer ihre Daten veröffentlichen lassen", + "Allow users to publish their data to a global and public address book" : "Erlaube Benutzern ihre Daten an ein globales und öffentliches Adressbuche zu veröffentlichen", "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:", "Share it:" : "Teilen:", "Add to your website" : "Zu Ihrer Web-Seite hinzufügen", "Share with me via Nextcloud" : "Teilen Sie mit mir über Nextcloud", - "HTML Code:" : "HTML-Code:" + "HTML Code:" : "HTML-Code:", + "Search global and public address book for users" : "Durchsuche globales und öffentliches Adressbuch nach Nutzern" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/de_DE.json b/apps/federatedfilesharing/l10n/de_DE.json index a30f795ae9b..ad6d84c8171 100644 --- a/apps/federatedfilesharing/l10n/de_DE.json +++ b/apps/federatedfilesharing/l10n/de_DE.json @@ -39,12 +39,14 @@ "Open documentation" : "Dokumentation öffnen", "Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben", "Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben", - "Search global and public address book for users" : "Durchsuche globales und öffentliches Adressbuch nach Nutzern", + "Search global and public address book for users and let local users publish their data" : "Globales und öffentliches Adressbuch nach Nutzern durchsuchen und lokale Nutzer ihre Daten veröffentlichen lassen", + "Allow users to publish their data to a global and public address book" : "Erlaube Benutzern ihre Daten an ein globales und öffentliches Adressbuche zu veröffentlichen", "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:", "Share it:" : "Teilen:", "Add to your website" : "Zu Ihrer Web-Seite hinzufügen", "Share with me via Nextcloud" : "Teilen Sie mit mir über Nextcloud", - "HTML Code:" : "HTML-Code:" + "HTML Code:" : "HTML-Code:", + "Search global and public address book for users" : "Durchsuche globales und öffentliches Adressbuch nach Nutzern" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/es.js b/apps/federatedfilesharing/l10n/es.js index ca92111ac2b..881e0e17ee4 100644 --- a/apps/federatedfilesharing/l10n/es.js +++ b/apps/federatedfilesharing/l10n/es.js @@ -41,12 +41,14 @@ OC.L10N.register( "Open documentation" : "Documentación abierta", "Allow users on this server to send shares to other servers" : "Permitir a usuarios de este servidor compartir con usuarios de otros servidores", "Allow users on this server to receive shares from other servers" : "Permitir a usuarios de este servidor recibir archivos de usuarios de otros servidores", - "Search global and public address book for users" : "Buscar libretas de contactos globales y públicas para usuarios", + "Search global and public address book for users and let local users publish their data" : "Buscar libreta de direcciones global y pública para usuarios y permitir a los usuarios locales publicar su información", + "Allow users to publish their data to a global and public address book" : "Permitir a los usuarios publicar su información en la libreta de direcciones global y pública", "Federated Cloud" : "Nube Federada", "Your Federated Cloud ID:" : "Su ID Nube Federada:", "Share it:" : "Compartir:", "Add to your website" : "Añadir a su sitio web", "Share with me via Nextcloud" : "Compartirlo conmigo vía Nextcloud", - "HTML Code:" : "Código HTML:" + "HTML Code:" : "Código HTML:", + "Search global and public address book for users" : "Buscar libretas de contactos globales y públicas para usuarios" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/es.json b/apps/federatedfilesharing/l10n/es.json index d8449b48a0b..da75410734e 100644 --- a/apps/federatedfilesharing/l10n/es.json +++ b/apps/federatedfilesharing/l10n/es.json @@ -39,12 +39,14 @@ "Open documentation" : "Documentación abierta", "Allow users on this server to send shares to other servers" : "Permitir a usuarios de este servidor compartir con usuarios de otros servidores", "Allow users on this server to receive shares from other servers" : "Permitir a usuarios de este servidor recibir archivos de usuarios de otros servidores", - "Search global and public address book for users" : "Buscar libretas de contactos globales y públicas para usuarios", + "Search global and public address book for users and let local users publish their data" : "Buscar libreta de direcciones global y pública para usuarios y permitir a los usuarios locales publicar su información", + "Allow users to publish their data to a global and public address book" : "Permitir a los usuarios publicar su información en la libreta de direcciones global y pública", "Federated Cloud" : "Nube Federada", "Your Federated Cloud ID:" : "Su ID Nube Federada:", "Share it:" : "Compartir:", "Add to your website" : "Añadir a su sitio web", "Share with me via Nextcloud" : "Compartirlo conmigo vía Nextcloud", - "HTML Code:" : "Código HTML:" + "HTML Code:" : "Código HTML:", + "Search global and public address book for users" : "Buscar libretas de contactos globales y públicas para usuarios" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/es_MX.js b/apps/federatedfilesharing/l10n/es_MX.js index e1de2d7f6c0..77bd5724abb 100644 --- a/apps/federatedfilesharing/l10n/es_MX.js +++ b/apps/federatedfilesharing/l10n/es_MX.js @@ -40,12 +40,14 @@ OC.L10N.register( "Open documentation" : "Abrir documentación", "Allow users on this server to send shares to other servers" : "Permitirle a los usuarios de este servidor enviar elementos compartidos a otros servidores", "Allow users on this server to receive shares from other servers" : "Permitir que los usuarios de este servidor recibir elementos compartidos de otros servidores", - "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas", + "Search global and public address book for users and let local users publish their data" : "Buscar una libreta de direcciones global y pública para los usuarios y permitir a los usuarios locales publicar sus datos", + "Allow users to publish their data to a global and public address book" : "Permitir a los usuarios publicar sus datos a una libreta de direcciones global y pública", "Federated Cloud" : "Nube Federada", "Your Federated Cloud ID:" : "Su ID de Nube Federada:", "Share it:" : "Compartirlo:", "Add to your website" : "Agregar a su sitio web", "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud", - "HTML Code:" : "Código HTML:" + "HTML Code:" : "Código HTML:", + "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/es_MX.json b/apps/federatedfilesharing/l10n/es_MX.json index ac45e4ea77d..2530c7f5337 100644 --- a/apps/federatedfilesharing/l10n/es_MX.json +++ b/apps/federatedfilesharing/l10n/es_MX.json @@ -38,12 +38,14 @@ "Open documentation" : "Abrir documentación", "Allow users on this server to send shares to other servers" : "Permitirle a los usuarios de este servidor enviar elementos compartidos a otros servidores", "Allow users on this server to receive shares from other servers" : "Permitir que los usuarios de este servidor recibir elementos compartidos de otros servidores", - "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas", + "Search global and public address book for users and let local users publish their data" : "Buscar una libreta de direcciones global y pública para los usuarios y permitir a los usuarios locales publicar sus datos", + "Allow users to publish their data to a global and public address book" : "Permitir a los usuarios publicar sus datos a una libreta de direcciones global y pública", "Federated Cloud" : "Nube Federada", "Your Federated Cloud ID:" : "Su ID de Nube Federada:", "Share it:" : "Compartirlo:", "Add to your website" : "Agregar a su sitio web", "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud", - "HTML Code:" : "Código HTML:" + "HTML Code:" : "Código HTML:", + "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/fi.js b/apps/federatedfilesharing/l10n/fi.js index 82d9e16fdbf..8274af6c25a 100644 --- a/apps/federatedfilesharing/l10n/fi.js +++ b/apps/federatedfilesharing/l10n/fi.js @@ -41,12 +41,14 @@ OC.L10N.register( "Open documentation" : "Avaa dokumentaatio", "Allow users on this server to send shares to other servers" : "Salli tämän palvelimen käyttäjien lähettää jakoja muille palvelimille", "Allow users on this server to receive shares from other servers" : "Salli tämän palvelimen käyttäjien vastaanottaa jakoja muilta palvelimilta", - "Search global and public address book for users" : "Etsi käyttäjiä maailmanlaajuisesta ja julkisesta osoitekirjasta", + "Search global and public address book for users and let local users publish their data" : "Etsi käyttäjiä maailmanlaajuisesta ja julkisesta osoitekirjasta sekä salli paikallisten käyttäjien julkaista omia tietojaan", + "Allow users to publish their data to a global and public address book" : "Salli käyttäjien julkaista tietojaan maailmanlaajuisessa ja julkisessa osoitekirjassa", "Federated Cloud" : "Federoitu pilvi", "Your Federated Cloud ID:" : "Federoidun pilvesi tunniste:", "Share it:" : "Jaa se:", "Add to your website" : "Lisää verkkosivuillesi", "Share with me via Nextcloud" : "Jaa kanssani Nextcloudin kautta", - "HTML Code:" : "HTML-koodi:" + "HTML Code:" : "HTML-koodi:", + "Search global and public address book for users" : "Etsi käyttäjiä maailmanlaajuisesta ja julkisesta osoitekirjasta" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/fi.json b/apps/federatedfilesharing/l10n/fi.json index 81c26046c40..0a2dc0193ce 100644 --- a/apps/federatedfilesharing/l10n/fi.json +++ b/apps/federatedfilesharing/l10n/fi.json @@ -39,12 +39,14 @@ "Open documentation" : "Avaa dokumentaatio", "Allow users on this server to send shares to other servers" : "Salli tämän palvelimen käyttäjien lähettää jakoja muille palvelimille", "Allow users on this server to receive shares from other servers" : "Salli tämän palvelimen käyttäjien vastaanottaa jakoja muilta palvelimilta", - "Search global and public address book for users" : "Etsi käyttäjiä maailmanlaajuisesta ja julkisesta osoitekirjasta", + "Search global and public address book for users and let local users publish their data" : "Etsi käyttäjiä maailmanlaajuisesta ja julkisesta osoitekirjasta sekä salli paikallisten käyttäjien julkaista omia tietojaan", + "Allow users to publish their data to a global and public address book" : "Salli käyttäjien julkaista tietojaan maailmanlaajuisessa ja julkisessa osoitekirjassa", "Federated Cloud" : "Federoitu pilvi", "Your Federated Cloud ID:" : "Federoidun pilvesi tunniste:", "Share it:" : "Jaa se:", "Add to your website" : "Lisää verkkosivuillesi", "Share with me via Nextcloud" : "Jaa kanssani Nextcloudin kautta", - "HTML Code:" : "HTML-koodi:" + "HTML Code:" : "HTML-koodi:", + "Search global and public address book for users" : "Etsi käyttäjiä maailmanlaajuisesta ja julkisesta osoitekirjasta" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/fr.js b/apps/federatedfilesharing/l10n/fr.js index 7d1dab1c8b3..2d2f087a04a 100644 --- a/apps/federatedfilesharing/l10n/fr.js +++ b/apps/federatedfilesharing/l10n/fr.js @@ -41,12 +41,14 @@ OC.L10N.register( "Open documentation" : "Voir la documentation", "Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs", "Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs", - "Search global and public address book for users" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs", + "Search global and public address book for users and let local users publish their data" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs et laisser les utilisateurs publier leurs données", + "Allow users to publish their data to a global and public address book" : "Autoriser les utilisateurs à publier leurs données dans un carnet d'adresse global et public", "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Votre identifiant Federated Cloud :", "Share it:" : "Partager :", "Add to your website" : "Ajouter à votre site web", "Share with me via Nextcloud" : "Partagez avec moi via Nextcloud", - "HTML Code:" : "Code HTML :" + "HTML Code:" : "Code HTML :", + "Search global and public address book for users" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federatedfilesharing/l10n/fr.json b/apps/federatedfilesharing/l10n/fr.json index 2a0c5f7825f..65f6a55b862 100644 --- a/apps/federatedfilesharing/l10n/fr.json +++ b/apps/federatedfilesharing/l10n/fr.json @@ -39,12 +39,14 @@ "Open documentation" : "Voir la documentation", "Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs", "Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs", - "Search global and public address book for users" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs", + "Search global and public address book for users and let local users publish their data" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs et laisser les utilisateurs publier leurs données", + "Allow users to publish their data to a global and public address book" : "Autoriser les utilisateurs à publier leurs données dans un carnet d'adresse global et public", "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Votre identifiant Federated Cloud :", "Share it:" : "Partager :", "Add to your website" : "Ajouter à votre site web", "Share with me via Nextcloud" : "Partagez avec moi via Nextcloud", - "HTML Code:" : "Code HTML :" + "HTML Code:" : "Code HTML :", + "Search global and public address book for users" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/hu.js b/apps/federatedfilesharing/l10n/hu.js index ffdfac11eff..8b9f29f5673 100644 --- a/apps/federatedfilesharing/l10n/hu.js +++ b/apps/federatedfilesharing/l10n/hu.js @@ -41,12 +41,12 @@ OC.L10N.register( "Open documentation" : "Dokumentáció megnyitása", "Allow users on this server to send shares to other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy fájlokat osszanak meg más szerverekkel.", "Allow users on this server to receive shares from other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől", - "Search global and public address book for users" : "Felhasználók keresése a globális és a nyilvános névjegyekben", "Federated Cloud" : "Egyesített felhő", "Your Federated Cloud ID:" : "Egyesített felhő azonosító:", "Share it:" : "Oszd meg:", "Add to your website" : "Adja hozzá saját weboldalához", "Share with me via Nextcloud" : "Ossza meg velem Nextcloud-on keresztül", - "HTML Code:" : "HTML kód:" + "HTML Code:" : "HTML kód:", + "Search global and public address book for users" : "Felhasználók keresése a globális és a nyilvános névjegyekben" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/hu.json b/apps/federatedfilesharing/l10n/hu.json index 911782613b4..b530e6b7a9d 100644 --- a/apps/federatedfilesharing/l10n/hu.json +++ b/apps/federatedfilesharing/l10n/hu.json @@ -39,12 +39,12 @@ "Open documentation" : "Dokumentáció megnyitása", "Allow users on this server to send shares to other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy fájlokat osszanak meg más szerverekkel.", "Allow users on this server to receive shares from other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől", - "Search global and public address book for users" : "Felhasználók keresése a globális és a nyilvános névjegyekben", "Federated Cloud" : "Egyesített felhő", "Your Federated Cloud ID:" : "Egyesített felhő azonosító:", "Share it:" : "Oszd meg:", "Add to your website" : "Adja hozzá saját weboldalához", "Share with me via Nextcloud" : "Ossza meg velem Nextcloud-on keresztül", - "HTML Code:" : "HTML kód:" + "HTML Code:" : "HTML kód:", + "Search global and public address book for users" : "Felhasználók keresése a globális és a nyilvános névjegyekben" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/ia.js b/apps/federatedfilesharing/l10n/ia.js index b87ef22639b..e0ad7702824 100644 --- a/apps/federatedfilesharing/l10n/ia.js +++ b/apps/federatedfilesharing/l10n/ia.js @@ -41,12 +41,12 @@ OC.L10N.register( "Open documentation" : "Documentation aperte", "Allow users on this server to send shares to other servers" : "Permitter usatores in iste servitor a inviar elementos compartite a altere servitores", "Allow users on this server to receive shares from other servers" : "Permitter usatores in iste servitor a reciper elementos compartite ex altere servitores", - "Search global and public address book for users" : "Cercar pro usatores in adressarios global e public", "Federated Cloud" : "Nube Federate", "Your Federated Cloud ID:" : "Tu ID de Nube Federate:", "Share it:" : "Comparti lo:", "Add to your website" : "Adde a tu sito web", "Share with me via Nextcloud" : "Comparti con me via Nextcloud", - "HTML Code:" : "Codice HTML:" + "HTML Code:" : "Codice HTML:", + "Search global and public address book for users" : "Cercar pro usatores in adressarios global e public" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/ia.json b/apps/federatedfilesharing/l10n/ia.json index 6921a335f97..3180fd5604d 100644 --- a/apps/federatedfilesharing/l10n/ia.json +++ b/apps/federatedfilesharing/l10n/ia.json @@ -39,12 +39,12 @@ "Open documentation" : "Documentation aperte", "Allow users on this server to send shares to other servers" : "Permitter usatores in iste servitor a inviar elementos compartite a altere servitores", "Allow users on this server to receive shares from other servers" : "Permitter usatores in iste servitor a reciper elementos compartite ex altere servitores", - "Search global and public address book for users" : "Cercar pro usatores in adressarios global e public", "Federated Cloud" : "Nube Federate", "Your Federated Cloud ID:" : "Tu ID de Nube Federate:", "Share it:" : "Comparti lo:", "Add to your website" : "Adde a tu sito web", "Share with me via Nextcloud" : "Comparti con me via Nextcloud", - "HTML Code:" : "Codice HTML:" + "HTML Code:" : "Codice HTML:", + "Search global and public address book for users" : "Cercar pro usatores in adressarios global e public" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/id.js b/apps/federatedfilesharing/l10n/id.js index 57bf8e7987f..7173d30b1f3 100644 --- a/apps/federatedfilesharing/l10n/id.js +++ b/apps/federatedfilesharing/l10n/id.js @@ -41,12 +41,12 @@ OC.L10N.register( "Open documentation" : "Buka dokumentasi", "Allow users on this server to send shares to other servers" : "Izinkan para pengguna di server ini untuk mengirimkan berbagi ke server lainnya.", "Allow users on this server to receive shares from other servers" : "Izinkan para pengguna di server ini untuk menerima berbagi ke server lainnya.", - "Search global and public address book for users" : "Cari alamat buku global dan alamat publik untuk pengguna", "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Federated Cloud ID Anda:", "Share it:" : "Bagikan:", "Add to your website" : "Tambahkan pada situs web Anda", "Share with me via Nextcloud" : "Dibagikan pada saya via Nextcloud", - "HTML Code:" : "Kode HTML:" + "HTML Code:" : "Kode HTML:", + "Search global and public address book for users" : "Cari alamat buku global dan alamat publik untuk pengguna" }, "nplurals=1; plural=0;"); diff --git a/apps/federatedfilesharing/l10n/id.json b/apps/federatedfilesharing/l10n/id.json index 12bdd92fecd..bb8070e2505 100644 --- a/apps/federatedfilesharing/l10n/id.json +++ b/apps/federatedfilesharing/l10n/id.json @@ -39,12 +39,12 @@ "Open documentation" : "Buka dokumentasi", "Allow users on this server to send shares to other servers" : "Izinkan para pengguna di server ini untuk mengirimkan berbagi ke server lainnya.", "Allow users on this server to receive shares from other servers" : "Izinkan para pengguna di server ini untuk menerima berbagi ke server lainnya.", - "Search global and public address book for users" : "Cari alamat buku global dan alamat publik untuk pengguna", "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Federated Cloud ID Anda:", "Share it:" : "Bagikan:", "Add to your website" : "Tambahkan pada situs web Anda", "Share with me via Nextcloud" : "Dibagikan pada saya via Nextcloud", - "HTML Code:" : "Kode HTML:" + "HTML Code:" : "Kode HTML:", + "Search global and public address book for users" : "Cari alamat buku global dan alamat publik untuk pengguna" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/is.js b/apps/federatedfilesharing/l10n/is.js index cb34ca3c93c..56663d5f508 100644 --- a/apps/federatedfilesharing/l10n/is.js +++ b/apps/federatedfilesharing/l10n/is.js @@ -41,12 +41,12 @@ OC.L10N.register( "Open documentation" : "Opna hjálparskjöl", "Allow users on this server to send shares to other servers" : "Leyfa notendum á þessum þjóni að senda sameignir til annarra þjóna", "Allow users on this server to receive shares from other servers" : "Leyfa notendum á þessum þjóni að taka á móti sameignum frá öðrum þjónum", - "Search global and public address book for users" : "Leita að notendum í víðværri og opinberri vistfangaskrá", "Federated Cloud" : "Skýjasamband (federated)", "Your Federated Cloud ID:" : "Skýjasambandsauðkennið þitt (Federated Cloud ID):", "Share it:" : "Deila því:", "Add to your website" : "Bæta við vefsvæðið þitt", "Share with me via Nextcloud" : "Deila með mér í gegnum Nextcloud", - "HTML Code:" : "HTML-kóði:" + "HTML Code:" : "HTML-kóði:", + "Search global and public address book for users" : "Leita að notendum í víðværri og opinberri vistfangaskrá" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/federatedfilesharing/l10n/is.json b/apps/federatedfilesharing/l10n/is.json index 44870392402..d49de4d2194 100644 --- a/apps/federatedfilesharing/l10n/is.json +++ b/apps/federatedfilesharing/l10n/is.json @@ -39,12 +39,12 @@ "Open documentation" : "Opna hjálparskjöl", "Allow users on this server to send shares to other servers" : "Leyfa notendum á þessum þjóni að senda sameignir til annarra þjóna", "Allow users on this server to receive shares from other servers" : "Leyfa notendum á þessum þjóni að taka á móti sameignum frá öðrum þjónum", - "Search global and public address book for users" : "Leita að notendum í víðværri og opinberri vistfangaskrá", "Federated Cloud" : "Skýjasamband (federated)", "Your Federated Cloud ID:" : "Skýjasambandsauðkennið þitt (Federated Cloud ID):", "Share it:" : "Deila því:", "Add to your website" : "Bæta við vefsvæðið þitt", "Share with me via Nextcloud" : "Deila með mér í gegnum Nextcloud", - "HTML Code:" : "HTML-kóði:" + "HTML Code:" : "HTML-kóði:", + "Search global and public address book for users" : "Leita að notendum í víðværri og opinberri vistfangaskrá" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/it.js b/apps/federatedfilesharing/l10n/it.js index 56d45c1ec4a..4d6b132e14b 100644 --- a/apps/federatedfilesharing/l10n/it.js +++ b/apps/federatedfilesharing/l10n/it.js @@ -41,12 +41,12 @@ OC.L10N.register( "Open documentation" : "Apri la documentazione", "Allow users on this server to send shares to other servers" : "Consenti agli utenti su questo server di inviare condivisioni ad altri server", "Allow users on this server to receive shares from other servers" : "Consenti agli utenti su questo server di ricevere condivisioni da altri server", - "Search global and public address book for users" : "Cerca gli utenti nella rubrica globale e pubblica", "Federated Cloud" : "Cloud federata", "Your Federated Cloud ID:" : "Il tuo ID di cloud federata:", "Share it:" : "Condividilo:", "Add to your website" : "Aggiungi al tuo sito web", "Share with me via Nextcloud" : "Condividi con me tramite Nextcloud", - "HTML Code:" : "Codice HTML:" + "HTML Code:" : "Codice HTML:", + "Search global and public address book for users" : "Cerca gli utenti nella rubrica globale e pubblica" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/it.json b/apps/federatedfilesharing/l10n/it.json index 69635d0fd01..392f68e686b 100644 --- a/apps/federatedfilesharing/l10n/it.json +++ b/apps/federatedfilesharing/l10n/it.json @@ -39,12 +39,12 @@ "Open documentation" : "Apri la documentazione", "Allow users on this server to send shares to other servers" : "Consenti agli utenti su questo server di inviare condivisioni ad altri server", "Allow users on this server to receive shares from other servers" : "Consenti agli utenti su questo server di ricevere condivisioni da altri server", - "Search global and public address book for users" : "Cerca gli utenti nella rubrica globale e pubblica", "Federated Cloud" : "Cloud federata", "Your Federated Cloud ID:" : "Il tuo ID di cloud federata:", "Share it:" : "Condividilo:", "Add to your website" : "Aggiungi al tuo sito web", "Share with me via Nextcloud" : "Condividi con me tramite Nextcloud", - "HTML Code:" : "Codice HTML:" + "HTML Code:" : "Codice HTML:", + "Search global and public address book for users" : "Cerca gli utenti nella rubrica globale e pubblica" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/nb.js b/apps/federatedfilesharing/l10n/nb.js index 88c555a22a4..ba56ec474e0 100644 --- a/apps/federatedfilesharing/l10n/nb.js +++ b/apps/federatedfilesharing/l10n/nb.js @@ -41,12 +41,12 @@ OC.L10N.register( "Open documentation" : "Åpne dokumentasjonen", "Allow users on this server to send shares to other servers" : "Tillat at brukere på denne tjeneren sender delinger til andre tjenere", "Allow users on this server to receive shares from other servers" : "Tillat at brukere på denne tjeneren mottar delinger fra andre tjenere", - "Search global and public address book for users" : "Søk global og offentlige adressebøker etter brukere", "Federated Cloud" : "Sammenknyttet sky", "Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:", "Share it:" : "Del den:", "Add to your website" : "Legg på websiden din", "Share with me via Nextcloud" : "Del med meg via Nextcloud", - "HTML Code:" : "HTML-kode:" + "HTML Code:" : "HTML-kode:", + "Search global and public address book for users" : "Søk global og offentlige adressebøker etter brukere" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/nb.json b/apps/federatedfilesharing/l10n/nb.json index 822b107b058..38956799c32 100644 --- a/apps/federatedfilesharing/l10n/nb.json +++ b/apps/federatedfilesharing/l10n/nb.json @@ -39,12 +39,12 @@ "Open documentation" : "Åpne dokumentasjonen", "Allow users on this server to send shares to other servers" : "Tillat at brukere på denne tjeneren sender delinger til andre tjenere", "Allow users on this server to receive shares from other servers" : "Tillat at brukere på denne tjeneren mottar delinger fra andre tjenere", - "Search global and public address book for users" : "Søk global og offentlige adressebøker etter brukere", "Federated Cloud" : "Sammenknyttet sky", "Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:", "Share it:" : "Del den:", "Add to your website" : "Legg på websiden din", "Share with me via Nextcloud" : "Del med meg via Nextcloud", - "HTML Code:" : "HTML-kode:" + "HTML Code:" : "HTML-kode:", + "Search global and public address book for users" : "Søk global og offentlige adressebøker etter brukere" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/nl.js b/apps/federatedfilesharing/l10n/nl.js index 6b0ed8caab4..b6eb9737dba 100644 --- a/apps/federatedfilesharing/l10n/nl.js +++ b/apps/federatedfilesharing/l10n/nl.js @@ -41,12 +41,14 @@ OC.L10N.register( "Open documentation" : "Open documentatie", "Allow users on this server to send shares to other servers" : "Toestaan dat gebruikers op deze server shares sturen naar andere servers", "Allow users on this server to receive shares from other servers" : "Toestaan dat gebruikers op deze server shares ontvangen van andere servers", - "Search global and public address book for users" : "Doorzoeken globale en openbare adresboeken naar gebruikers", + "Search global and public address book for users and let local users publish their data" : "Openbare adresboeken voor gebruikers doorzoeken en laat lokale gebruikers de data plubliceren", + "Allow users to publish their data to a global and public address book" : "Publiek maken van data met een openbaar adresboek toestaan", "Federated Cloud" : "Gefedereerde Cloud", "Your Federated Cloud ID:" : "Je Federated Cloud ID:", "Share it:" : "Deel het:", "Add to your website" : "Toevoegen aan je website", "Share with me via Nextcloud" : "Deel met mij via Nextcloud", - "HTML Code:" : "HTML Code:" + "HTML Code:" : "HTML Code:", + "Search global and public address book for users" : "Doorzoeken van openbare adresboeken voor gebruikers" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/nl.json b/apps/federatedfilesharing/l10n/nl.json index de993851166..fa1348d634d 100644 --- a/apps/federatedfilesharing/l10n/nl.json +++ b/apps/federatedfilesharing/l10n/nl.json @@ -39,12 +39,14 @@ "Open documentation" : "Open documentatie", "Allow users on this server to send shares to other servers" : "Toestaan dat gebruikers op deze server shares sturen naar andere servers", "Allow users on this server to receive shares from other servers" : "Toestaan dat gebruikers op deze server shares ontvangen van andere servers", - "Search global and public address book for users" : "Doorzoeken globale en openbare adresboeken naar gebruikers", + "Search global and public address book for users and let local users publish their data" : "Openbare adresboeken voor gebruikers doorzoeken en laat lokale gebruikers de data plubliceren", + "Allow users to publish their data to a global and public address book" : "Publiek maken van data met een openbaar adresboek toestaan", "Federated Cloud" : "Gefedereerde Cloud", "Your Federated Cloud ID:" : "Je Federated Cloud ID:", "Share it:" : "Deel het:", "Add to your website" : "Toevoegen aan je website", "Share with me via Nextcloud" : "Deel met mij via Nextcloud", - "HTML Code:" : "HTML Code:" + "HTML Code:" : "HTML Code:", + "Search global and public address book for users" : "Doorzoeken van openbare adresboeken voor gebruikers" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/pl.js b/apps/federatedfilesharing/l10n/pl.js index de3fb9f5bc9..2364c64be97 100644 --- a/apps/federatedfilesharing/l10n/pl.js +++ b/apps/federatedfilesharing/l10n/pl.js @@ -41,12 +41,12 @@ OC.L10N.register( "Open documentation" : "Otwórz dokumentację", "Allow users on this server to send shares to other servers" : "Zezwalaj użytkownikom na tym serwerze wysłać udostępnienia do innych serwerów", "Allow users on this server to receive shares from other servers" : "Zezwalaj użytkownikom na tym serwerze do otrzymania udostępnień z innych serwerów", - "Search global and public address book for users" : "Szukaj użytkowników w globalnej i publicznej książce adresowej", "Federated Cloud" : "Stowarzyszona Chmura", "Your Federated Cloud ID:" : "Twoje ID Stowarzyszonej Chmury:", "Share it:" : "Udostępnij to:", "Add to your website" : "Dodaj do swojej strony", "Share with me via Nextcloud" : "Podziel się ze mną poprzez Nextcloud", - "HTML Code:" : "Kod HTML:" + "HTML Code:" : "Kod HTML:", + "Search global and public address book for users" : "Szukaj użytkowników w globalnej i publicznej książce adresowej" }, "nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"); diff --git a/apps/federatedfilesharing/l10n/pl.json b/apps/federatedfilesharing/l10n/pl.json index 54d65e2b705..e810ef7cc89 100644 --- a/apps/federatedfilesharing/l10n/pl.json +++ b/apps/federatedfilesharing/l10n/pl.json @@ -39,12 +39,12 @@ "Open documentation" : "Otwórz dokumentację", "Allow users on this server to send shares to other servers" : "Zezwalaj użytkownikom na tym serwerze wysłać udostępnienia do innych serwerów", "Allow users on this server to receive shares from other servers" : "Zezwalaj użytkownikom na tym serwerze do otrzymania udostępnień z innych serwerów", - "Search global and public address book for users" : "Szukaj użytkowników w globalnej i publicznej książce adresowej", "Federated Cloud" : "Stowarzyszona Chmura", "Your Federated Cloud ID:" : "Twoje ID Stowarzyszonej Chmury:", "Share it:" : "Udostępnij to:", "Add to your website" : "Dodaj do swojej strony", "Share with me via Nextcloud" : "Podziel się ze mną poprzez Nextcloud", - "HTML Code:" : "Kod HTML:" + "HTML Code:" : "Kod HTML:", + "Search global and public address book for users" : "Szukaj użytkowników w globalnej i publicznej książce adresowej" },"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/pt_BR.js b/apps/federatedfilesharing/l10n/pt_BR.js index ea4963bdc5c..cbb09e90474 100644 --- a/apps/federatedfilesharing/l10n/pt_BR.js +++ b/apps/federatedfilesharing/l10n/pt_BR.js @@ -41,12 +41,14 @@ OC.L10N.register( "Open documentation" : "Abrir documentação", "Allow users on this server to send shares to other servers" : "Permitir que os usuários deste servidor enviem compartilhamentos para outros servidores", "Allow users on this server to receive shares from other servers" : "Permitir que os usuários deste servidor recebam compartilhamentos de outros servidores", - "Search global and public address book for users" : "Procurar por usuários em catálogo de endereços global e público", + "Search global and public address book for users and let local users publish their data" : "Pesquise o catálogo de endereços global e público para usuários e deixe os usuários locais publicarem seus dados", + "Allow users to publish their data to a global and public address book" : "Permitir que os usuários publiquem seus dados em um catálogo de endereços global e público", "Federated Cloud" : "Nuvem Federada", "Your Federated Cloud ID:" : "Sua ID na Nuvem Federada:", "Share it:" : "Compartilhe:", "Add to your website" : "Adicione ao seu website", "Share with me via Nextcloud" : "Compartilhe comigo via Nextcloud", - "HTML Code:" : "Código HTML:" + "HTML Code:" : "Código HTML:", + "Search global and public address book for users" : "Procurar por usuários em catálogo de endereços global e público" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federatedfilesharing/l10n/pt_BR.json b/apps/federatedfilesharing/l10n/pt_BR.json index ce081e39991..e2a45ede216 100644 --- a/apps/federatedfilesharing/l10n/pt_BR.json +++ b/apps/federatedfilesharing/l10n/pt_BR.json @@ -39,12 +39,14 @@ "Open documentation" : "Abrir documentação", "Allow users on this server to send shares to other servers" : "Permitir que os usuários deste servidor enviem compartilhamentos para outros servidores", "Allow users on this server to receive shares from other servers" : "Permitir que os usuários deste servidor recebam compartilhamentos de outros servidores", - "Search global and public address book for users" : "Procurar por usuários em catálogo de endereços global e público", + "Search global and public address book for users and let local users publish their data" : "Pesquise o catálogo de endereços global e público para usuários e deixe os usuários locais publicarem seus dados", + "Allow users to publish their data to a global and public address book" : "Permitir que os usuários publiquem seus dados em um catálogo de endereços global e público", "Federated Cloud" : "Nuvem Federada", "Your Federated Cloud ID:" : "Sua ID na Nuvem Federada:", "Share it:" : "Compartilhe:", "Add to your website" : "Adicione ao seu website", "Share with me via Nextcloud" : "Compartilhe comigo via Nextcloud", - "HTML Code:" : "Código HTML:" + "HTML Code:" : "Código HTML:", + "Search global and public address book for users" : "Procurar por usuários em catálogo de endereços global e público" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/ru.js b/apps/federatedfilesharing/l10n/ru.js index 1a6dd9339f0..d71f1bc912c 100644 --- a/apps/federatedfilesharing/l10n/ru.js +++ b/apps/federatedfilesharing/l10n/ru.js @@ -41,12 +41,14 @@ OC.L10N.register( "Open documentation" : "Открыть документацию", "Allow users on this server to send shares to other servers" : "Разрешить пользователям делиться с пользователями других серверов", "Allow users on this server to receive shares from other servers" : "Разрешить пользователям использовать общие ресурсы с других серверов", - "Search global and public address book for users" : "Искать пользователей в глобальной и открытой адресной книге", + "Search global and public address book for users and let local users publish their data" : "Поиск пользователей в глобальной и общедоступной адресной книге и резрешение публикации своих данных локальным пользователям ", + "Allow users to publish their data to a global and public address book" : "Резрешить пользователям публиковать свои данные в глобальной и общедосупной адресной книге", "Federated Cloud" : "Федерация облачных хранилищ", "Your Federated Cloud ID:" : "Ваш ID в федерации облачных хранилищ:", "Share it:" : "Поделиться:", "Add to your website" : "Добавить к себе на сайт", "Share with me via Nextcloud" : "Поделитесь со мной через Nextcloud", - "HTML Code:" : "HTML код:" + "HTML Code:" : "HTML код:", + "Search global and public address book for users" : "Искать пользователей в глобальной и открытой адресной книге" }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/apps/federatedfilesharing/l10n/ru.json b/apps/federatedfilesharing/l10n/ru.json index 2d482fb8d29..76208f7b048 100644 --- a/apps/federatedfilesharing/l10n/ru.json +++ b/apps/federatedfilesharing/l10n/ru.json @@ -39,12 +39,14 @@ "Open documentation" : "Открыть документацию", "Allow users on this server to send shares to other servers" : "Разрешить пользователям делиться с пользователями других серверов", "Allow users on this server to receive shares from other servers" : "Разрешить пользователям использовать общие ресурсы с других серверов", - "Search global and public address book for users" : "Искать пользователей в глобальной и открытой адресной книге", + "Search global and public address book for users and let local users publish their data" : "Поиск пользователей в глобальной и общедоступной адресной книге и резрешение публикации своих данных локальным пользователям ", + "Allow users to publish their data to a global and public address book" : "Резрешить пользователям публиковать свои данные в глобальной и общедосупной адресной книге", "Federated Cloud" : "Федерация облачных хранилищ", "Your Federated Cloud ID:" : "Ваш ID в федерации облачных хранилищ:", "Share it:" : "Поделиться:", "Add to your website" : "Добавить к себе на сайт", "Share with me via Nextcloud" : "Поделитесь со мной через Nextcloud", - "HTML Code:" : "HTML код:" + "HTML Code:" : "HTML код:", + "Search global and public address book for users" : "Искать пользователей в глобальной и открытой адресной книге" },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/sv.js b/apps/federatedfilesharing/l10n/sv.js index 27384e3d4b1..a3851e6b82b 100644 --- a/apps/federatedfilesharing/l10n/sv.js +++ b/apps/federatedfilesharing/l10n/sv.js @@ -41,12 +41,12 @@ OC.L10N.register( "Open documentation" : "Öppna dokumentation", "Allow users on this server to send shares to other servers" : "Tillåt användare på denna server att skicka utdelningar till andra servrar", "Allow users on this server to receive shares from other servers" : "Tillåt användare på denna servern att ta emot utdelningar från andra servrar", - "Search global and public address book for users" : "Sök global och offentlig adressbok för användare", "Federated Cloud" : "Federerat Moln", "Your Federated Cloud ID:" : "Ditt Federerade Moln-ID:", "Share it:" : "Dela detta:", "Add to your website" : "Lägg till på din hemsida", "Share with me via Nextcloud" : "Dela med mig via Nextcloud", - "HTML Code:" : "HTML Kod:" + "HTML Code:" : "HTML Kod:", + "Search global and public address book for users" : "Sök global och offentlig adressbok för användare" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/sv.json b/apps/federatedfilesharing/l10n/sv.json index a124e996f37..02fc7d82b07 100644 --- a/apps/federatedfilesharing/l10n/sv.json +++ b/apps/federatedfilesharing/l10n/sv.json @@ -39,12 +39,12 @@ "Open documentation" : "Öppna dokumentation", "Allow users on this server to send shares to other servers" : "Tillåt användare på denna server att skicka utdelningar till andra servrar", "Allow users on this server to receive shares from other servers" : "Tillåt användare på denna servern att ta emot utdelningar från andra servrar", - "Search global and public address book for users" : "Sök global och offentlig adressbok för användare", "Federated Cloud" : "Federerat Moln", "Your Federated Cloud ID:" : "Ditt Federerade Moln-ID:", "Share it:" : "Dela detta:", "Add to your website" : "Lägg till på din hemsida", "Share with me via Nextcloud" : "Dela med mig via Nextcloud", - "HTML Code:" : "HTML Kod:" + "HTML Code:" : "HTML Kod:", + "Search global and public address book for users" : "Sök global och offentlig adressbok för användare" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/tr.js b/apps/federatedfilesharing/l10n/tr.js index 3369f6bca49..c1d9a655557 100644 --- a/apps/federatedfilesharing/l10n/tr.js +++ b/apps/federatedfilesharing/l10n/tr.js @@ -41,12 +41,14 @@ OC.L10N.register( "Open documentation" : "Belgeleri aç", "Allow users on this server to send shares to other servers" : "Bu sunucudaki kullanıcılar diğer sunuculara paylaşım gönderebilsin", "Allow users on this server to receive shares from other servers" : "Bu sunucudaki kullanıcılar diğer sunuculardan paylaşım alabilsin", - "Search global and public address book for users" : "Genel ve herkese açık adres defterinde kullanıcı ara", + "Search global and public address book for users and let local users publish their data" : "Genel ve herkese açık adres defterinde kullanıcı ara ve yerel kullanıcıların bilgilerini paylaşmasını sağla", + "Allow users to publish their data to a global and public address book" : "Kullanıcıların bilgilerini genel ve herkese açık bir adres defterinde paylaşabilsin", "Federated Cloud" : "Birleşmiş Bulut", "Your Federated Cloud ID:" : "Birleşmiş Bulut Kimliğiniz:", "Share it:" : "Paylaşın:", "Add to your website" : "Web sitenize ekleyin", "Share with me via Nextcloud" : "Benimle Nextcloud üzerinden paylaşın", - "HTML Code:" : "HTML Kodu:" + "HTML Code:" : "HTML Kodu:", + "Search global and public address book for users" : "Genel ve herkese açık adres defterinde kullanıcı ara" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federatedfilesharing/l10n/tr.json b/apps/federatedfilesharing/l10n/tr.json index 6b91d101ed8..c9969087598 100644 --- a/apps/federatedfilesharing/l10n/tr.json +++ b/apps/federatedfilesharing/l10n/tr.json @@ -39,12 +39,14 @@ "Open documentation" : "Belgeleri aç", "Allow users on this server to send shares to other servers" : "Bu sunucudaki kullanıcılar diğer sunuculara paylaşım gönderebilsin", "Allow users on this server to receive shares from other servers" : "Bu sunucudaki kullanıcılar diğer sunuculardan paylaşım alabilsin", - "Search global and public address book for users" : "Genel ve herkese açık adres defterinde kullanıcı ara", + "Search global and public address book for users and let local users publish their data" : "Genel ve herkese açık adres defterinde kullanıcı ara ve yerel kullanıcıların bilgilerini paylaşmasını sağla", + "Allow users to publish their data to a global and public address book" : "Kullanıcıların bilgilerini genel ve herkese açık bir adres defterinde paylaşabilsin", "Federated Cloud" : "Birleşmiş Bulut", "Your Federated Cloud ID:" : "Birleşmiş Bulut Kimliğiniz:", "Share it:" : "Paylaşın:", "Add to your website" : "Web sitenize ekleyin", "Share with me via Nextcloud" : "Benimle Nextcloud üzerinden paylaşın", - "HTML Code:" : "HTML Kodu:" + "HTML Code:" : "HTML Kodu:", + "Search global and public address book for users" : "Genel ve herkese açık adres defterinde kullanıcı ara" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/zh_CN.js b/apps/federatedfilesharing/l10n/zh_CN.js index 8ffd7707c34..82976dcb250 100644 --- a/apps/federatedfilesharing/l10n/zh_CN.js +++ b/apps/federatedfilesharing/l10n/zh_CN.js @@ -41,12 +41,12 @@ OC.L10N.register( "Open documentation" : "打开文档", "Allow users on this server to send shares to other servers" : "允许用户分享文件给其他服务器上的用户", "Allow users on this server to receive shares from other servers" : "允许用户从其他服务器接收分享", - "Search global and public address book for users" : "在全局和公开地址簿中寻找用户", "Federated Cloud" : "联合云", "Your Federated Cloud ID:" : "你的联合云ID:", "Share it:" : "分享它:", "Add to your website" : "添加到您的网站", "Share with me via Nextcloud" : "通过联合云与我共享", - "HTML Code:" : "HTML 代码:" + "HTML Code:" : "HTML 代码:", + "Search global and public address book for users" : "在全局和公开地址簿中寻找用户" }, "nplurals=1; plural=0;"); diff --git a/apps/federatedfilesharing/l10n/zh_CN.json b/apps/federatedfilesharing/l10n/zh_CN.json index 4b1ea74c82d..b173ada4d53 100644 --- a/apps/federatedfilesharing/l10n/zh_CN.json +++ b/apps/federatedfilesharing/l10n/zh_CN.json @@ -39,12 +39,12 @@ "Open documentation" : "打开文档", "Allow users on this server to send shares to other servers" : "允许用户分享文件给其他服务器上的用户", "Allow users on this server to receive shares from other servers" : "允许用户从其他服务器接收分享", - "Search global and public address book for users" : "在全局和公开地址簿中寻找用户", "Federated Cloud" : "联合云", "Your Federated Cloud ID:" : "你的联合云ID:", "Share it:" : "分享它:", "Add to your website" : "添加到您的网站", "Share with me via Nextcloud" : "通过联合云与我共享", - "HTML Code:" : "HTML 代码:" + "HTML Code:" : "HTML 代码:", + "Search global and public address book for users" : "在全局和公开地址簿中寻找用户" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/lib/AppInfo/Application.php b/apps/federatedfilesharing/lib/AppInfo/Application.php index 3e97edeada0..9d8464e37d5 100644 --- a/apps/federatedfilesharing/lib/AppInfo/Application.php +++ b/apps/federatedfilesharing/lib/AppInfo/Application.php @@ -51,10 +51,7 @@ class Application extends App { $notification = new Notifications( $addressHandler, $server->getHTTPClientService(), - new \OCA\FederatedFileSharing\DiscoveryManager( - $server->getMemCacheFactory(), - $server->getHTTPClientService() - ), + $server->query(\OCP\OCS\IDiscoveryService::class), \OC::$server->getJobList() ); return new RequestHandlerController( @@ -99,14 +96,10 @@ class Application extends App { \OC::$server->getL10N('federatedfilesharing'), \OC::$server->getCloudIdManager() ); - $discoveryManager = new \OCA\FederatedFileSharing\DiscoveryManager( - \OC::$server->getMemCacheFactory(), - \OC::$server->getHTTPClientService() - ); $notifications = new \OCA\FederatedFileSharing\Notifications( $addressHandler, \OC::$server->getHTTPClientService(), - $discoveryManager, + \OC::$server->query(\OCP\OCS\IDiscoveryService::class), \OC::$server->getJobList() ); $tokenHandler = new \OCA\FederatedFileSharing\TokenHandler( diff --git a/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php b/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php index 2356c569d87..821647e5e39 100644 --- a/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php +++ b/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php @@ -27,7 +27,6 @@ namespace OCA\FederatedFileSharing\BackgroundJob; use OC\BackgroundJob\Job; use OC\BackgroundJob\JobList; use OCA\FederatedFileSharing\AddressHandler; -use OCA\FederatedFileSharing\DiscoveryManager; use OCA\FederatedFileSharing\Notifications; use OCP\BackgroundJob\IJobList; use OCP\ILogger; @@ -68,14 +67,10 @@ class RetryJob extends Job { \OC::$server->getL10N('federatedfilesharing'), \OC::$server->getCloudIdManager() ); - $discoveryManager = new DiscoveryManager( - \OC::$server->getMemCacheFactory(), - \OC::$server->getHTTPClientService() - ); $this->notifications = new Notifications( $addressHandler, \OC::$server->getHTTPClientService(), - $discoveryManager, + \OC::$server->query(\OCP\OCS\IDiscoveryService::class), \OC::$server->getJobList() ); } @@ -108,7 +103,7 @@ class RetryJob extends Job { $try = (int)$argument['try'] + 1; $result = $this->notifications->sendUpdateToRemote($remote, $remoteId, $token, $action, $data, $try); - + if ($result === true || $try > $this->maxTry) { $this->retainJob = false; } diff --git a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php index dd2e88d2dae..d7e466d1a64 100644 --- a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php +++ b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php @@ -248,17 +248,13 @@ class MountPublicLinkController extends Controller { if (Helper::isSameUserOnSameServer($owner, $remote, $currentUser, $currentServer)) { return new JSONResponse(['message' => $this->l->t('Not allowed to create a federated share with the owner.')], Http::STATUS_BAD_REQUEST); } - $discoveryManager = new DiscoveryManager( - \OC::$server->getMemCacheFactory(), - \OC::$server->getHTTPClientService() - ); $externalManager = new Manager( \OC::$server->getDatabaseConnection(), Filesystem::getMountManager(), Filesystem::getLoader(), \OC::$server->getHTTPClientService(), \OC::$server->getNotificationManager(), - $discoveryManager, + \OC::$server->query(\OCP\OCS\IDiscoveryService::class), \OC::$server->getUserSession()->getUser()->getUID() ); diff --git a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php index a41481afd2a..2b643810fb4 100644 --- a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php +++ b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php @@ -152,19 +152,15 @@ class RequestHandlerController extends OCSController { \OC_Util::setupFS($shareWith); - $discoveryManager = new DiscoveryManager( - \OC::$server->getMemCacheFactory(), - \OC::$server->getHTTPClientService() - ); $externalManager = new \OCA\Files_Sharing\External\Manager( - \OC::$server->getDatabaseConnection(), - \OC\Files\Filesystem::getMountManager(), - \OC\Files\Filesystem::getLoader(), - \OC::$server->getHTTPClientService(), - \OC::$server->getNotificationManager(), - $discoveryManager, - $shareWith - ); + \OC::$server->getDatabaseConnection(), + \OC\Files\Filesystem::getMountManager(), + \OC\Files\Filesystem::getLoader(), + \OC::$server->getHTTPClientService(), + \OC::$server->getNotificationManager(), + \OC::$server->query(\OCP\OCS\IDiscoveryService::class), + $shareWith + ); try { $externalManager->addShare($remote, $token, '', $name, $owner, false, $shareWith, $remoteId); diff --git a/apps/federatedfilesharing/lib/DiscoveryManager.php b/apps/federatedfilesharing/lib/DiscoveryManager.php deleted file mode 100644 index 8c8c72dbd66..00000000000 --- a/apps/federatedfilesharing/lib/DiscoveryManager.php +++ /dev/null @@ -1,143 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Vincent Petry <pvince81@owncloud.com> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * 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, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OCA\FederatedFileSharing; - -use GuzzleHttp\Exception\ClientException; -use GuzzleHttp\Exception\ConnectException; -use OCP\Http\Client\IClient; -use OCP\Http\Client\IClientService; -use OCP\ICache; -use OCP\ICacheFactory; - -/** - * Class DiscoveryManager handles the discovery of endpoints used by Federated - * Cloud Sharing. - * - * @package OCA\FederatedFileSharing - */ -class DiscoveryManager { - /** @var ICache */ - private $cache; - /** @var IClient */ - private $client; - - /** - * @param ICacheFactory $cacheFactory - * @param IClientService $clientService - */ - public function __construct(ICacheFactory $cacheFactory, - IClientService $clientService) { - $this->cache = $cacheFactory->create('ocs-discovery'); - $this->client = $clientService->newClient(); - } - - /** - * Returns whether the specified URL includes only safe characters, if not - * returns false - * - * @param string $url - * @return bool - */ - private function isSafeUrl($url) { - return (bool)preg_match('/^[\/\.A-Za-z0-9]+$/', $url); - } - - /** - * Discover the actual data and do some naive caching to ensure that the data - * is not requested multiple times. - * - * If no valid discovery data is found the Nextcloud defaults are returned. - * - * @param string $remote - * @return array - */ - private function discover($remote) { - // Check if something is in the cache - if($cacheData = $this->cache->get($remote)) { - return json_decode($cacheData, true); - } - - // Default response body - $discoveredServices = [ - 'webdav' => '/public.php/webdav', - 'share' => '/ocs/v1.php/cloud/shares', - ]; - - // Read the data from the response body - try { - $response = $this->client->get($remote . '/ocs-provider/', [ - 'timeout' => 10, - 'connect_timeout' => 10, - ]); - if($response->getStatusCode() === 200) { - $decodedService = json_decode($response->getBody(), true); - if(is_array($decodedService)) { - $endpoints = [ - 'webdav', - 'share', - ]; - - foreach($endpoints as $endpoint) { - if(isset($decodedService['services']['FEDERATED_SHARING']['endpoints'][$endpoint])) { - $endpointUrl = (string)$decodedService['services']['FEDERATED_SHARING']['endpoints'][$endpoint]; - if($this->isSafeUrl($endpointUrl)) { - $discoveredServices[$endpoint] = $endpointUrl; - } - } - } - } - } - } catch (ClientException $e) { - // Don't throw any exception since exceptions are handled before - } catch (ConnectException $e) { - // Don't throw any exception since exceptions are handled before - } - - // Write into cache - $this->cache->set($remote, json_encode($discoveredServices)); - return $discoveredServices; - } - - /** - * Return the public WebDAV endpoint used by the specified remote - * - * @param string $host - * @return string - */ - public function getWebDavEndpoint($host) { - return $this->discover($host)['webdav']; - } - - /** - * Return the sharing endpoint used by the specified remote - * - * @param string $host - * @return string - */ - public function getShareEndpoint($host) { - return $this->discover($host)['share']; - } -} diff --git a/apps/federatedfilesharing/lib/FederatedShareProvider.php b/apps/federatedfilesharing/lib/FederatedShareProvider.php index 9063bbf7450..120365263a9 100644 --- a/apps/federatedfilesharing/lib/FederatedShareProvider.php +++ b/apps/federatedfilesharing/lib/FederatedShareProvider.php @@ -608,7 +608,7 @@ class FederatedShareProvider implements IShareProvider { ); } - $qb->innerJoin('s', 'filecache' ,'f', 's.file_source = f.fileid'); + $qb->innerJoin('s', 'filecache' ,'f', $qb->expr()->eq('s.file_source', 'f.fileid')); $qb->andWhere($qb->expr()->eq('f.parent', $qb->createNamedParameter($node->getId()))); $qb->orderBy('id'); @@ -945,7 +945,7 @@ class FederatedShareProvider implements IShareProvider { } /** - * check if users are allowed to mount public links from other ownClouds + * check if users are allowed to mount public links from other Nextclouds * * @return bool */ diff --git a/apps/federatedfilesharing/lib/Notifications.php b/apps/federatedfilesharing/lib/Notifications.php index 8110b4915da..5abac711985 100644 --- a/apps/federatedfilesharing/lib/Notifications.php +++ b/apps/federatedfilesharing/lib/Notifications.php @@ -30,6 +30,7 @@ namespace OCA\FederatedFileSharing; use OCP\AppFramework\Http; use OCP\BackgroundJob\IJobList; use OCP\Http\Client\IClientService; +use OCP\OCS\IDiscoveryService; class Notifications { const RESPONSE_FORMAT = 'json'; // default response format for ocs calls @@ -40,8 +41,8 @@ class Notifications { /** @var IClientService */ private $httpClientService; - /** @var DiscoveryManager */ - private $discoveryManager; + /** @var IDiscoveryService */ + private $discoveryService; /** @var IJobList */ private $jobList; @@ -49,18 +50,18 @@ class Notifications { /** * @param AddressHandler $addressHandler * @param IClientService $httpClientService - * @param DiscoveryManager $discoveryManager + * @param IDiscoveryService $discoveryService * @param IJobList $jobList */ public function __construct( AddressHandler $addressHandler, IClientService $httpClientService, - DiscoveryManager $discoveryManager, + IDiscoveryService $discoveryService, IJobList $jobList ) { $this->addressHandler = $addressHandler; $this->httpClientService = $httpClientService; - $this->discoveryManager = $discoveryManager; + $this->discoveryService = $discoveryService; $this->jobList = $jobList; } @@ -287,7 +288,8 @@ class Notifications { 'result' => '', ]; - $endpoint = $this->discoveryManager->getShareEndpoint($remoteDomain); + $federationEndpoints = $this->discoveryService->discover($remoteDomain, 'FEDERATED_SHARING'); + $endpoint = isset($federationEndpoints['share']) ? $federationEndpoints['share'] : '/ocs/v2.php/cloud/shares'; try { $response = $client->post($remoteDomain . $endpoint . $urlSuffix . '?format=' . self::RESPONSE_FORMAT, [ 'body' => $fields, diff --git a/apps/federatedfilesharing/settings-personal.php b/apps/federatedfilesharing/settings-personal.php index 71353cdef2e..d70f4e491a5 100644 --- a/apps/federatedfilesharing/settings-personal.php +++ b/apps/federatedfilesharing/settings-personal.php @@ -41,7 +41,8 @@ if (count($matches) > 0 && $matches[1] <= 9) { $cloudID = \OC::$server->getUserSession()->getUser()->getCloudId(); $url = 'https://nextcloud.com/federation#' . $cloudID; $logoPath = \OC::$server->getURLGenerator()->imagePath('core', 'logo-icon.svg'); -$theme = \OC::$server->getThemingDefaults(); +/** @var \OCP\Defaults $theme */ +$theme = \OC::$server->query(\OCP\Defaults::class); $color = $theme->getColorPrimary(); $textColor = "#ffffff"; if(\OC::$server->getAppManager()->isEnabledForUser("theming")) { diff --git a/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php b/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php index 233395dec9f..512000181c1 100644 --- a/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php +++ b/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php @@ -270,17 +270,13 @@ class RequestHandlerControllerTest extends TestCase { ->method('newClient') ->willReturn($client); - $discoveryManager = new DiscoveryManager( - \OC::$server->getMemCacheFactory(), - $httpClientService - ); $manager = new \OCA\Files_Sharing\External\Manager( \OC::$server->getDatabaseConnection(), Filesystem::getMountManager(), Filesystem::getLoader(), $httpClientService, \OC::$server->getNotificationManager(), - $discoveryManager, + \OC::$server->query(\OCP\OCS\IDiscoveryService::class), $toDelete ); diff --git a/apps/federatedfilesharing/tests/DiscoveryManagerTest.php b/apps/federatedfilesharing/tests/DiscoveryManagerTest.php deleted file mode 100644 index 77e24aad54b..00000000000 --- a/apps/federatedfilesharing/tests/DiscoveryManagerTest.php +++ /dev/null @@ -1,217 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Björn Schießle <bjoern@schiessle.org> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Vincent Petry <pvince81@owncloud.com> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * 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, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OCA\FederatedFileSharing\Tests; - -use OCA\FederatedFileSharing\DiscoveryManager; -use OCP\Http\Client\IClient; -use OCP\Http\Client\IClientService; -use OCP\ICache; -use OCP\ICacheFactory; - -class DiscoveryManagerTest extends \Test\TestCase { - /** @var ICache */ - private $cache; - /** @var IClient */ - private $client; - /** @var DiscoveryManager */ - private $discoveryManager; - - public function setUp() { - parent::setUp(); - $this->cache = $this->getMockBuilder('\OCP\ICache') - ->getMock(); - /** @var ICacheFactory $cacheFactory */ - $cacheFactory = $this->getMockBuilder('\OCP\ICacheFactory') - ->disableOriginalConstructor()->getMock(); - $cacheFactory - ->expects($this->once()) - ->method('create') - ->with('ocs-discovery') - ->willReturn($this->cache); - - $this->client = $this->getMockBuilder('\OCP\Http\Client\IClient') - ->disableOriginalConstructor()->getMock(); - /** @var IClientService $clientService */ - $clientService = $this->getMockBuilder('\OCP\Http\Client\IClientService') - ->disableOriginalConstructor()->getMock(); - $clientService - ->expects($this->once()) - ->method('newClient') - ->willReturn($this->client); - - $this->discoveryManager = new DiscoveryManager( - $cacheFactory, - $clientService - ); - } - - public function testWithMalformedFormattedEndpointCached() { - $response = $this->getMockBuilder('\OCP\Http\Client\IResponse') - ->getMock(); - $response - ->expects($this->once()) - ->method('getStatusCode') - ->willReturn(200); - $response - ->expects($this->once()) - ->method('getBody') - ->willReturn('CertainlyNotJson'); - $this->client - ->expects($this->once()) - ->method('get') - ->with('https://myhost.com/ocs-provider/', [ - 'timeout' => 10, - 'connect_timeout' => 10, - ]) - ->willReturn($response); - $this->cache - ->expects($this->at(0)) - ->method('get') - ->with('https://myhost.com') - ->willReturn(null); - $this->cache - ->expects($this->at(1)) - ->method('set') - ->with('https://myhost.com', '{"webdav":"\/public.php\/webdav","share":"\/ocs\/v1.php\/cloud\/shares"}'); - $this->cache - ->expects($this->at(2)) - ->method('get') - ->with('https://myhost.com') - ->willReturn('{"webdav":"\/public.php\/webdav","share":"\/ocs\/v1.php\/cloud\/shares"}'); - - $this->assertSame('/public.php/webdav', $this->discoveryManager->getWebDavEndpoint('https://myhost.com')); - $this->assertSame('/ocs/v1.php/cloud/shares', $this->discoveryManager->getShareEndpoint('https://myhost.com')); - } - - public function testGetWebDavEndpointWithValidFormattedEndpointAndNotCached() { - $response = $this->getMockBuilder('\OCP\Http\Client\IResponse') - ->getMock(); - $response - ->expects($this->once()) - ->method('getStatusCode') - ->willReturn(200); - $response - ->expects($this->once()) - ->method('getBody') - ->willReturn('{"version":2,"services":{"PRIVATE_DATA":{"version":1,"endpoints":{"store":"\/ocs\/v2.php\/privatedata\/setattribute","read":"\/ocs\/v2.php\/privatedata\/getattribute","delete":"\/ocs\/v2.php\/privatedata\/deleteattribute"}},"SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/apps\/files_sharing\/api\/v1\/shares"}},"FEDERATED_SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/cloud\/shares","webdav":"\/public.php\/MyCustomEndpoint\/"}},"ACTIVITY":{"version":1,"endpoints":{"list":"\/ocs\/v2.php\/cloud\/activity"}},"PROVISIONING":{"version":1,"endpoints":{"user":"\/ocs\/v2.php\/cloud\/users","groups":"\/ocs\/v2.php\/cloud\/groups","apps":"\/ocs\/v2.php\/cloud\/apps"}}}}'); - $this->client - ->expects($this->once()) - ->method('get') - ->with('https://myhost.com/ocs-provider/', [ - 'timeout' => 10, - 'connect_timeout' => 10, - ]) - ->willReturn($response); - - $expectedResult = '/public.php/MyCustomEndpoint/'; - $this->assertSame($expectedResult, $this->discoveryManager->getWebDavEndpoint('https://myhost.com')); - } - - public function testGetWebDavEndpointWithValidFormattedEndpointWithoutDataAndNotCached() { - $response = $this->getMockBuilder('\OCP\Http\Client\IResponse') - ->getMock(); - $response - ->expects($this->once()) - ->method('getStatusCode') - ->willReturn(200); - $response - ->expects($this->once()) - ->method('getBody') - ->willReturn('{"version":2,"PRIVATE_DATA":{"version":1,"endpoints":{"store":"\/ocs\/v2.php\/privatedata\/setattribute","read":"\/ocs\/v2.php\/privatedata\/getattribute","delete":"\/ocs\/v2.php\/privatedata\/deleteattribute"}},"SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/apps\/files_sharing\/api\/v1\/shares"}},"FEDERATED_SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/cloud\/shares","webdav":"\/public.php\/MyCustomEndpoint\/"}},"ACTIVITY":{"version":1,"endpoints":{"list":"\/ocs\/v2.php\/cloud\/activity"}},"PROVISIONING":{"version":1,"endpoints":{"user":"\/ocs\/v2.php\/cloud\/users","groups":"\/ocs\/v2.php\/cloud\/groups","apps":"\/ocs\/v2.php\/cloud\/apps"}}}'); - $this->client - ->expects($this->once()) - ->method('get') - ->with('https://myhost.com/ocs-provider/', [ - 'timeout' => 10, - 'connect_timeout' => 10, - ]) - ->willReturn($response); - - $expectedResult = '/public.php/webdav'; - $this->assertSame($expectedResult, $this->discoveryManager->getWebDavEndpoint('https://myhost.com')); - } - - public function testGetShareEndpointWithValidFormattedEndpointAndNotCached() { - $response = $this->getMockBuilder('\OCP\Http\Client\IResponse') - ->getMock(); - $response - ->expects($this->once()) - ->method('getStatusCode') - ->willReturn(200); - $response - ->expects($this->once()) - ->method('getBody') - ->willReturn('{"version":2,"services":{"PRIVATE_DATA":{"version":1,"endpoints":{"store":"\/ocs\/v2.php\/privatedata\/setattribute","read":"\/ocs\/v2.php\/privatedata\/getattribute","delete":"\/ocs\/v2.php\/privatedata\/deleteattribute"}},"SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/apps\/files_sharing\/api\/v1\/shares"}},"FEDERATED_SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/cloud\/MyCustomShareEndpoint","webdav":"\/public.php\/MyCustomEndpoint\/"}},"ACTIVITY":{"version":1,"endpoints":{"list":"\/ocs\/v2.php\/cloud\/activity"}},"PROVISIONING":{"version":1,"endpoints":{"user":"\/ocs\/v2.php\/cloud\/users","groups":"\/ocs\/v2.php\/cloud\/groups","apps":"\/ocs\/v2.php\/cloud\/apps"}}}}'); - $this->client - ->expects($this->once()) - ->method('get') - ->with('https://myhost.com/ocs-provider/', [ - 'timeout' => 10, - 'connect_timeout' => 10, - ]) - ->willReturn($response); - - $expectedResult = '/ocs/v2.php/cloud/MyCustomShareEndpoint'; - $this->assertSame($expectedResult, $this->discoveryManager->getShareEndpoint('https://myhost.com')); - } - - public function testWithMaliciousEndpointCached() { - $response = $this->getMockBuilder('\OCP\Http\Client\IResponse') - ->getMock(); - $response - ->expects($this->once()) - ->method('getStatusCode') - ->willReturn(200); - $response - ->expects($this->once()) - ->method('getBody') - ->willReturn('{"version":2,"services":{"PRIVATE_DATA":{"version":1,"endpoints":{"store":"\/ocs\/v2.php\/privatedata\/setattribute","read":"\/ocs\/v2.php\/privatedata\/getattribute","delete":"\/ocs\/v2.php\/privatedata\/deleteattribute"}},"SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/apps\/files_sharing\/api\/v1\/shares"}},"FEDERATED_SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/cl@oud\/MyCustomShareEndpoint","webdav":"\/public.php\/MyC:ustomEndpoint\/"}},"ACTIVITY":{"version":1,"endpoints":{"list":"\/ocs\/v2.php\/cloud\/activity"}},"PROVISIONING":{"version":1,"endpoints":{"user":"\/ocs\/v2.php\/cloud\/users","groups":"\/ocs\/v2.php\/cloud\/groups","apps":"\/ocs\/v2.php\/cloud\/apps"}}}}'); - $this->client - ->expects($this->once()) - ->method('get') - ->with('https://myhost.com/ocs-provider/', [ - 'timeout' => 10, - 'connect_timeout' => 10, - ]) - ->willReturn($response); - $this->cache - ->expects($this->at(0)) - ->method('get') - ->with('https://myhost.com') - ->willReturn(null); - $this->cache - ->expects($this->at(1)) - ->method('set') - ->with('https://myhost.com', '{"webdav":"\/public.php\/webdav","share":"\/ocs\/v1.php\/cloud\/shares"}'); - $this->cache - ->expects($this->at(2)) - ->method('get') - ->with('https://myhost.com') - ->willReturn('{"webdav":"\/public.php\/webdav","share":"\/ocs\/v1.php\/cloud\/shares"}'); - - $this->assertSame('/public.php/webdav', $this->discoveryManager->getWebDavEndpoint('https://myhost.com')); - $this->assertSame('/ocs/v1.php/cloud/shares', $this->discoveryManager->getShareEndpoint('https://myhost.com')); - } -} diff --git a/apps/federatedfilesharing/tests/NotificationsTest.php b/apps/federatedfilesharing/tests/NotificationsTest.php index a5f5c6bc078..4f70d5f3950 100644 --- a/apps/federatedfilesharing/tests/NotificationsTest.php +++ b/apps/federatedfilesharing/tests/NotificationsTest.php @@ -25,10 +25,10 @@ namespace OCA\FederatedFileSharing\Tests; use OCA\FederatedFileSharing\AddressHandler; -use OCA\FederatedFileSharing\DiscoveryManager; use OCA\FederatedFileSharing\Notifications; use OCP\BackgroundJob\IJobList; use OCP\Http\Client\IClientService; +use OCP\OCS\IDiscoveryService; class NotificationsTest extends \Test\TestCase { @@ -38,8 +38,8 @@ class NotificationsTest extends \Test\TestCase { /** @var IClientService | \PHPUnit_Framework_MockObject_MockObject*/ private $httpClientService; - /** @var DiscoveryManager | \PHPUnit_Framework_MockObject_MockObject */ - private $discoveryManager; + /** @var IDiscoveryService | \PHPUnit_Framework_MockObject_MockObject */ + private $discoveryService; /** @var IJobList | \PHPUnit_Framework_MockObject_MockObject */ private $jobList; @@ -48,8 +48,7 @@ class NotificationsTest extends \Test\TestCase { parent::setUp(); $this->jobList = $this->getMockBuilder('OCP\BackgroundJob\IJobList')->getMock(); - $this->discoveryManager = $this->getMockBuilder('OCA\FederatedFileSharing\DiscoveryManager') - ->disableOriginalConstructor()->getMock(); + $this->discoveryService = $this->getMockBuilder(IDiscoveryService::class)->getMock(); $this->httpClientService = $this->getMockBuilder('OCP\Http\Client\IClientService')->getMock(); $this->addressHandler = $this->getMockBuilder('OCA\FederatedFileSharing\AddressHandler') ->disableOriginalConstructor()->getMock(); @@ -67,7 +66,7 @@ class NotificationsTest extends \Test\TestCase { $instance = new Notifications( $this->addressHandler, $this->httpClientService, - $this->discoveryManager, + $this->discoveryService, $this->jobList ); } else { @@ -76,7 +75,7 @@ class NotificationsTest extends \Test\TestCase { [ $this->addressHandler, $this->httpClientService, - $this->discoveryManager, + $this->discoveryService, $this->jobList ] )->setMethods($mockedMethods)->getMock(); diff --git a/apps/federation/appinfo/routes.php b/apps/federation/appinfo/routes.php index 4c742dd705c..01c37eab584 100644 --- a/apps/federation/appinfo/routes.php +++ b/apps/federation/appinfo/routes.php @@ -45,12 +45,12 @@ $application->registerRoutes( 'ocs' => [ // old endpoints, only used by Nextcloud and ownCloud [ - 'name' => 'OCSAuthAPI#getSharedSecret', + 'name' => 'OCSAuthAPI#getSharedSecretLegacy', 'url' => '/api/v1/shared-secret', 'verb' => 'GET', ], [ - 'name' => 'OCSAuthAPI#requestSharedSecret', + 'name' => 'OCSAuthAPI#requestSharedSecretLegacy', 'url' => '/api/v1/request-shared-secret', 'verb' => 'POST', ], diff --git a/apps/federation/lib/AppInfo/Application.php b/apps/federation/lib/AppInfo/Application.php index e5acab52857..3166316b108 100644 --- a/apps/federation/lib/AppInfo/Application.php +++ b/apps/federation/lib/AppInfo/Application.php @@ -135,7 +135,8 @@ class Application extends \OCP\AppFramework\App { public function getSyncService() { $syncService = \OC::$server->query('CardDAVSyncService'); $dbHandler = $this->getContainer()->query('DbHandler'); - return new SyncFederationAddressBooks($dbHandler, $syncService); + $discoveryService = \OC::$server->query(\OCP\OCS\IDiscoveryService::class); + return new SyncFederationAddressBooks($dbHandler, $syncService, $discoveryService); } } diff --git a/apps/federation/lib/BackgroundJob/GetSharedSecret.php b/apps/federation/lib/BackgroundJob/GetSharedSecret.php index 521ffca8a70..4a6e720ae2c 100644 --- a/apps/federation/lib/BackgroundJob/GetSharedSecret.php +++ b/apps/federation/lib/BackgroundJob/GetSharedSecret.php @@ -37,11 +37,12 @@ use OCP\Http\Client\IClient; use OCP\Http\Client\IResponse; use OCP\ILogger; use OCP\IURLGenerator; +use OCP\OCS\IDiscoveryService; /** * Class GetSharedSecret * - * request shared secret from remote ownCloud + * request shared secret from remote Nextcloud * * @package OCA\Federation\Backgroundjob */ @@ -62,13 +63,18 @@ class GetSharedSecret extends Job{ /** @var DbHandler */ private $dbHandler; + /** @var IDiscoveryService */ + private $ocsDiscoveryService; + /** @var ILogger */ private $logger; /** @var bool */ protected $retainJob = false; - private $endPoint = '/ocs/v2.php/apps/federation/api/v1/shared-secret?format=json'; + private $format = '?format=json'; + + private $defaultEndPoint = '/ocs/v2.php/apps/federation/api/v1/shared-secret'; /** * RequestSharedSecret constructor. @@ -79,6 +85,7 @@ class GetSharedSecret extends Job{ * @param TrustedServers $trustedServers * @param ILogger $logger * @param DbHandler $dbHandler + * @param IDiscoveryService $ocsDiscoveryService */ public function __construct( IClient $httpClient = null, @@ -86,13 +93,15 @@ class GetSharedSecret extends Job{ IJobList $jobList = null, TrustedServers $trustedServers = null, ILogger $logger = null, - DbHandler $dbHandler = null + DbHandler $dbHandler = null, + IDiscoveryService $ocsDiscoveryService = null ) { $this->logger = $logger ? $logger : \OC::$server->getLogger(); $this->httpClient = $httpClient ? $httpClient : \OC::$server->getHTTPClientService()->newClient(); $this->jobList = $jobList ? $jobList : \OC::$server->getJobList(); $this->urlGenerator = $urlGenerator ? $urlGenerator : \OC::$server->getURLGenerator(); $this->dbHandler = $dbHandler ? $dbHandler : new DbHandler(\OC::$server->getDatabaseConnection(), \OC::$server->getL10N('federation')); + $this->ocsDiscoveryService = $ocsDiscoveryService ? $ocsDiscoveryService : \OC::$server->query(\OCP\OCS\IDiscoveryService::class); if ($trustedServers) { $this->trustedServers = $trustedServers; } else { @@ -142,10 +151,16 @@ class GetSharedSecret extends Job{ $source = rtrim($source, '/'); $token = $argument['token']; + $endPoints = $this->ocsDiscoveryService->discover($target, 'FEDERATED_SHARING'); + $endPoint = isset($endPoints['shared-secret']) ? $endPoints['shared-secret'] : $this->defaultEndPoint; + + // make sure that we have a well formated url + $url = rtrim($target, '/') . '/' . trim($endPoint, '/') . $this->format; + $result = null; try { $result = $this->httpClient->get( - $target . $this->endPoint, + $url, [ 'query' => [ diff --git a/apps/federation/lib/BackgroundJob/RequestSharedSecret.php b/apps/federation/lib/BackgroundJob/RequestSharedSecret.php index fa7a67a1caf..60b22cd6283 100644 --- a/apps/federation/lib/BackgroundJob/RequestSharedSecret.php +++ b/apps/federation/lib/BackgroundJob/RequestSharedSecret.php @@ -37,11 +37,12 @@ use OCP\BackgroundJob\IJobList; use OCP\Http\Client\IClient; use OCP\ILogger; use OCP\IURLGenerator; +use OCP\OCS\IDiscoveryService; /** * Class RequestSharedSecret * - * Ask remote ownCloud to request a sharedSecret from this server + * Ask remote Nextcloud to request a sharedSecret from this server * * @package OCA\Federation\Backgroundjob */ @@ -62,7 +63,8 @@ class RequestSharedSecret extends Job { /** @var TrustedServers */ private $trustedServers; - private $endPoint = '/ocs/v2.php/apps/federation/api/v1/request-shared-secret?format=json'; + /** @var IDiscoveryService */ + private $ocsDiscoveryService; /** @var ILogger */ private $logger; @@ -70,6 +72,10 @@ class RequestSharedSecret extends Job { /** @var bool */ protected $retainJob = false; + private $format = '?format=json'; + + private $defaultEndPoint = '/ocs/v2.php/apps/federation/api/v1/request-shared-secret'; + /** * RequestSharedSecret constructor. * @@ -78,19 +84,22 @@ class RequestSharedSecret extends Job { * @param IJobList $jobList * @param TrustedServers $trustedServers * @param DbHandler $dbHandler + * @param IDiscoveryService $ocsDiscoveryService */ public function __construct( IClient $httpClient = null, IURLGenerator $urlGenerator = null, IJobList $jobList = null, TrustedServers $trustedServers = null, - DbHandler $dbHandler = null + DbHandler $dbHandler = null, + IDiscoveryService $ocsDiscoveryService = null ) { $this->httpClient = $httpClient ? $httpClient : \OC::$server->getHTTPClientService()->newClient(); $this->jobList = $jobList ? $jobList : \OC::$server->getJobList(); $this->urlGenerator = $urlGenerator ? $urlGenerator : \OC::$server->getURLGenerator(); $this->dbHandler = $dbHandler ? $dbHandler : new DbHandler(\OC::$server->getDatabaseConnection(), \OC::$server->getL10N('federation')); $this->logger = \OC::$server->getLogger(); + $this->ocsDiscoveryService = $ocsDiscoveryService ? $ocsDiscoveryService : \OC::$server->query(\OCP\OCS\IDiscoveryService::class); if ($trustedServers) { $this->trustedServers = $trustedServers; } else { @@ -142,9 +151,15 @@ class RequestSharedSecret extends Job { $source = rtrim($source, '/'); $token = $argument['token']; + $endPoints = $this->ocsDiscoveryService->discover($target, 'FEDERATED_SHARING'); + $endPoint = isset($endPoints['shared-secret']) ? $endPoints['shared-secret'] : $this->defaultEndPoint; + + // make sure that we have a well formated url + $url = rtrim($target, '/') . '/' . trim($endPoint, '/') . $this->format; + try { $result = $this->httpClient->post( - $target . $this->endPoint, + $url, [ 'body' => [ 'url' => $source, diff --git a/apps/federation/lib/Controller/OCSAuthAPIController.php b/apps/federation/lib/Controller/OCSAuthAPIController.php index 6cd3b1890ef..594299a2d02 100644 --- a/apps/federation/lib/Controller/OCSAuthAPIController.php +++ b/apps/federation/lib/Controller/OCSAuthAPIController.php @@ -40,7 +40,7 @@ use OCP\Security\ISecureRandom; /** * Class OCSAuthAPI * - * OCS API end-points to exchange shared secret between two connected ownClouds + * OCS API end-points to exchange shared secret between two connected Nextclouds * * @package OCA\Federation\Controller */ @@ -94,6 +94,37 @@ class OCSAuthAPIController extends OCSController{ * @NoCSRFRequired * @PublicPage * + * request received to ask remote server for a shared secret, for legacy end-points + * + * @param string $url + * @param string $token + * @return Http\DataResponse + * @throws OCSForbiddenException + */ + public function requestSharedSecretLegacy($url, $token) { + return $this->requestSharedSecret($url, $token); + } + + + /** + * @NoCSRFRequired + * @PublicPage + * + * create shared secret and return it, for legacy end-points + * + * @param string $url + * @param string $token + * @return Http\DataResponse + * @throws OCSForbiddenException + */ + public function getSharedSecretLegacy($url, $token) { + return $this->getSharedSecret($url, $token); + } + + /** + * @NoCSRFRequired + * @PublicPage + * * request received to ask remote server for a shared secret * * @param string $url diff --git a/apps/federation/lib/Controller/SettingsController.php b/apps/federation/lib/Controller/SettingsController.php index 40cc4c084a0..afbaa4abeee 100644 --- a/apps/federation/lib/Controller/SettingsController.php +++ b/apps/federation/lib/Controller/SettingsController.php @@ -58,7 +58,7 @@ class SettingsController extends Controller { /** - * add server to the list of trusted ownClouds + * add server to the list of trusted Nextclouds * * @param string $url * @return DataResponse @@ -78,7 +78,7 @@ class SettingsController extends Controller { } /** - * add server to the list of trusted ownClouds + * add server to the list of trusted Nextclouds * * @param int $id * @return DataResponse diff --git a/apps/federation/lib/SyncFederationAddressBooks.php b/apps/federation/lib/SyncFederationAddressBooks.php index 759b59183aa..87419a5ba54 100644 --- a/apps/federation/lib/SyncFederationAddressBooks.php +++ b/apps/federation/lib/SyncFederationAddressBooks.php @@ -23,12 +23,10 @@ */ namespace OCA\Federation; +use OC\OCS\DiscoveryService; use OCA\DAV\CardDAV\SyncService; use OCP\AppFramework\Http; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Helper\ProgressBar; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; +use OCP\OCS\IDiscoveryService; class SyncFederationAddressBooks { @@ -38,13 +36,21 @@ class SyncFederationAddressBooks { /** @var SyncService */ private $syncService; + /** @var DiscoveryService */ + private $ocsDiscoveryService; + /** * @param DbHandler $dbHandler * @param SyncService $syncService + * @param IDiscoveryService $ocsDiscoveryService */ - function __construct(DbHandler $dbHandler, SyncService $syncService) { + public function __construct(DbHandler $dbHandler, + SyncService $syncService, + IDiscoveryService $ocsDiscoveryService + ) { $this->syncService = $syncService; $this->dbHandler = $dbHandler; + $this->ocsDiscoveryService = $ocsDiscoveryService; } /** @@ -59,6 +65,10 @@ class SyncFederationAddressBooks { $sharedSecret = $trustedServer['shared_secret']; $syncToken = $trustedServer['sync_token']; + $endPoints = $this->ocsDiscoveryService->discover($url, 'FEDERATED_SHARING'); + $cardDavUser = isset($endPoints['carddav-user']) ? $endPoints['carddav-user'] : 'system'; + $addressBookUrl = isset($endPoints['system-address-book']) ? trim($endPoints['system-address-book'], '/') : 'remote.php/dav/addressbooks/system/system/system'; + if (is_null($sharedSecret)) { continue; } @@ -68,7 +78,7 @@ class SyncFederationAddressBooks { '{DAV:}displayname' => $url ]; try { - $newToken = $this->syncService->syncRemoteAddressBook($url, 'system', $sharedSecret, $syncToken, $targetBookId, $targetPrincipal, $targetBookProperties); + $newToken = $this->syncService->syncRemoteAddressBook($url, $cardDavUser, $addressBookUrl, $sharedSecret, $syncToken, $targetBookId, $targetPrincipal, $targetBookProperties); if ($newToken !== $syncToken) { $this->dbHandler->setServerStatus($url, TrustedServers::STATUS_OK, $newToken); } diff --git a/apps/federation/lib/TrustedServers.php b/apps/federation/lib/TrustedServers.php index 1376dd683d3..9bf1452eab3 100644 --- a/apps/federation/lib/TrustedServers.php +++ b/apps/federation/lib/TrustedServers.php @@ -183,7 +183,7 @@ class TrustedServers { } /** - * check if given server is a trusted ownCloud server + * check if given server is a trusted Nextcloud server * * @param string $url * @return bool diff --git a/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php b/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php index fe7cc5cc337..6364ddaedff 100644 --- a/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php +++ b/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php @@ -36,6 +36,7 @@ use OCP\Http\Client\IClient; use OCP\Http\Client\IResponse; use OCP\ILogger; use OCP\IURLGenerator; +use OCP\OCS\IDiscoveryService; /** * Class GetSharedSecretTest @@ -67,6 +68,9 @@ class GetSharedSecretTest extends TestCase { /** @var \PHPUnit_Framework_MockObject_MockObject | IResponse */ private $response; + /** @var \PHPUnit_Framework_MockObject_MockObject | IDiscoveryService */ + private $discoverService; + /** @var GetSharedSecret */ private $getSharedSecret; @@ -82,6 +86,9 @@ class GetSharedSecretTest extends TestCase { ->disableOriginalConstructor()->getMock(); $this->logger = $this->getMockBuilder(ILogger::class)->getMock(); $this->response = $this->getMockBuilder(IResponse::class)->getMock(); + $this->discoverService = $this->getMockBuilder(IDiscoveryService::class)->getMock(); + + $this->discoverService->expects($this->any())->method('discover')->willReturn([]); $this->getSharedSecret = new GetSharedSecret( $this->httpClient, @@ -89,7 +96,8 @@ class GetSharedSecretTest extends TestCase { $this->jobList, $this->trustedServers, $this->logger, - $this->dbHandler + $this->dbHandler, + $this->discoverService ); } @@ -109,7 +117,8 @@ class GetSharedSecretTest extends TestCase { $this->jobList, $this->trustedServers, $this->logger, - $this->dbHandler + $this->dbHandler, + $this->discoverService ] )->setMethods(['parentExecute'])->getMock(); $this->invokePrivate($getSharedSecret, 'argument', [['url' => 'url']]); diff --git a/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php b/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php index 3fa2ca2973e..06da29d17fc 100644 --- a/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php +++ b/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php @@ -33,6 +33,7 @@ use OCP\BackgroundJob\IJobList; use OCP\Http\Client\IClient; use OCP\Http\Client\IResponse; use OCP\IURLGenerator; +use OCP\OCS\IDiscoveryService; use Test\TestCase; class RequestSharedSecretTest extends TestCase { @@ -55,6 +56,9 @@ class RequestSharedSecretTest extends TestCase { /** @var \PHPUnit_Framework_MockObject_MockObject | IResponse */ private $response; + /** @var \PHPUnit_Framework_MockObject_MockObject | IDiscoveryService */ + private $discoveryService; + /** @var RequestSharedSecret */ private $requestSharedSecret; @@ -69,13 +73,17 @@ class RequestSharedSecretTest extends TestCase { $this->dbHandler = $this->getMockBuilder(DbHandler::class) ->disableOriginalConstructor()->getMock(); $this->response = $this->getMockBuilder(IResponse::class)->getMock(); + $this->discoveryService = $this->getMockBuilder(IDiscoveryService::class)->getMock(); + + $this->discoveryService->expects($this->any())->method('discover')->willReturn([]); $this->requestSharedSecret = new RequestSharedSecret( $this->httpClient, $this->urlGenerator, $this->jobList, $this->trustedServers, - $this->dbHandler + $this->dbHandler, + $this->discoveryService ); } @@ -94,7 +102,8 @@ class RequestSharedSecretTest extends TestCase { $this->urlGenerator, $this->jobList, $this->trustedServers, - $this->dbHandler + $this->dbHandler, + $this->discoveryService ] )->setMethods(['parentExecute'])->getMock(); $this->invokePrivate($requestSharedSecret, 'argument', [['url' => 'url']]); diff --git a/apps/federation/tests/SyncFederationAddressbooksTest.php b/apps/federation/tests/SyncFederationAddressbooksTest.php index 1a2dbf1bcae..9ce5efeb457 100644 --- a/apps/federation/tests/SyncFederationAddressbooksTest.php +++ b/apps/federation/tests/SyncFederationAddressbooksTest.php @@ -24,6 +24,7 @@ */ namespace OCA\Federation\Tests; +use OC\OCS\DiscoveryService; use OCA\Federation\DbHandler; use OCA\Federation\SyncFederationAddressBooks; @@ -32,7 +33,18 @@ class SyncFederationAddressbooksTest extends \Test\TestCase { /** @var array */ private $callBacks = []; - function testSync() { + /** @var \PHPUnit_Framework_MockObject_MockObject | DiscoveryService */ + private $discoveryService; + + public function setUp() { + parent::setUp(); + + $this->discoveryService = $this->getMockBuilder(DiscoveryService::class) + ->disableOriginalConstructor()->getMock(); + $this->discoveryService->expects($this->any())->method('discover')->willReturn([]); + } + + public function testSync() { /** @var DbHandler | \PHPUnit_Framework_MockObject_MockObject $dbHandler */ $dbHandler = $this->getMockBuilder('OCA\Federation\DbHandler')-> disableOriginalConstructor()-> @@ -55,14 +67,14 @@ class SyncFederationAddressbooksTest extends \Test\TestCase { ->willReturn(1); /** @var \OCA\DAV\CardDAV\SyncService $syncService */ - $s = new SyncFederationAddressBooks($dbHandler, $syncService); + $s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService); $s->syncThemAll(function($url, $ex) { $this->callBacks[] = [$url, $ex]; }); $this->assertEquals(1, count($this->callBacks)); } - function testException() { + public function testException() { /** @var DbHandler | \PHPUnit_Framework_MockObject_MockObject $dbHandler */ $dbHandler = $this->getMockBuilder('OCA\Federation\DbHandler')-> disableOriginalConstructor()-> @@ -83,7 +95,7 @@ class SyncFederationAddressbooksTest extends \Test\TestCase { ->willThrowException(new \Exception('something did not work out')); /** @var \OCA\DAV\CardDAV\SyncService $syncService */ - $s = new SyncFederationAddressBooks($dbHandler, $syncService); + $s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService); $s->syncThemAll(function($url, $ex) { $this->callBacks[] = [$url, $ex]; }); diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php index 2cd09765435..d91db8744c4 100644 --- a/apps/files/ajax/list.php +++ b/apps/files/ajax/list.php @@ -71,7 +71,6 @@ try { $files = \OCA\Files\Helper::getFiles($dir, $sortAttribute, $sortDirection); } - $files = \OCA\Files\Helper::populateTags($files); $data['directory'] = $dir; $data['files'] = \OCA\Files\Helper::formatFileInfos($files); $data['permissions'] = $permissions; diff --git a/apps/files/appinfo/update.php b/apps/files/appinfo/update.php deleted file mode 100644 index 6a0cfe6caa1..00000000000 --- a/apps/files/appinfo/update.php +++ /dev/null @@ -1,98 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Björn Schießle <bjoern@schiessle.org> - * @author Joas Schilling <coding@schilljs.com> - * @author Stefan Weil <sw@weilnetz.de> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * 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, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ -$installedVersion = \OC::$server->getConfig()->getAppValue('files', 'installed_version'); -$ocVersion = explode('.', \OC::$server->getSystemConfig()->getValue('version')); - -/** - * In case encryption was not enabled, we accidentally set encrypted = 1 for - * files inside mount points, since 8.1.0. This breaks opening the files in - * 8.1.1 because we fixed the code that checks if a file is encrypted. - * In order to fix the file, we need to reset the flag of the file. However, - * the flag might be set because the file is in fact encrypted because it was - * uploaded at a time where encryption was enabled. - * - * So we can only do this when: - * - Current version of ownCloud before the update is 8.1.0 or 8.2.0.(0-2) - * - Encryption is disabled - * - files_encryption is not known in the app config - * - * If the first two are not the case, we are save. However, if files_encryption - * values exist in the config, we might have a false negative here. - * Now if there is no file with unencrypted size greater 0, that means there are - * no files that are still encrypted with "files_encryption" encryption. So we - * can also safely reset the flag here. - * - * If this is not the case, we go with "better save then sorry" and don't change - * the flag but write a message to the ownCloud log file. - */ - -/** - * @param \OCP\IDBConnection $conn - */ -function owncloud_reset_encrypted_flag(\OCP\IDBConnection $conn) { - $conn->executeUpdate('UPDATE `*PREFIX*filecache` SET `encrypted` = 0 WHERE `encrypted` = 1'); -} - -// Current version of ownCloud before the update is 8.1.0 or 8.2.0.(0-2) -if ($installedVersion === '1.1.9' && ( - // 8.1.0.x - (((int) $ocVersion[0]) === 8 && ((int) $ocVersion[1]) === 1 && ((int) $ocVersion[2]) === 0) - || - // < 8.2.0.3 - (((int) $ocVersion[0]) === 8 && ((int) $ocVersion[1]) === 2 && ((int) $ocVersion[2]) === 0 && ((int) $ocVersion[3]) < 3) - )) { - - // Encryption is not enabled - if (!\OC::$server->getEncryptionManager()->isEnabled()) { - $conn = \OC::$server->getDatabaseConnection(); - - // Old encryption is not known in app config - $oldEncryption = \OC::$server->getConfig()->getAppKeys('files_encryption'); - if (empty($oldEncryption)) { - owncloud_reset_encrypted_flag($conn); - } else { - $query = $conn->prepare('SELECT * FROM `*PREFIX*filecache` WHERE `encrypted` = 1 AND `unencrypted_size` > 0', 1); - $query->execute(); - $empty = $query->fetch(); - - if (empty($empty)) { - owncloud_reset_encrypted_flag($conn); - } else { - /** - * Sorry in case you are a false positive, but we are not 100% that - * you don't have any encrypted files anymore, so we can not reset - * the value safely - */ - \OC::$server->getLogger()->warning( - 'If you have a problem with files not being accessible and ' - . 'you are not using encryption, please have a look at the following' - . 'issue: {issue}', - [ - 'issue' => 'https://github.com/owncloud/core/issues/17846', - ] - ); - } - } - } -} diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 7e79399bba5..0fcb10a21ee 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -856,7 +856,7 @@ title = ''; } title += this.appName; - // Sets the page title with the " - ownCloud" suffix as in templates + // Sets the page title with the " - Nextcloud" suffix as in templates window.document.title = title + ' - ' + oc_defaults.title; return true; diff --git a/apps/files/js/tagsplugin.js b/apps/files/js/tagsplugin.js index 67bd9c667c8..9bd20be4bf8 100644 --- a/apps/files/js/tagsplugin.js +++ b/apps/files/js/tagsplugin.js @@ -75,7 +75,11 @@ allowedLists: [ 'files', - 'favorites' + 'favorites', + 'systemtags', + 'shares.self', + 'shares.others', + 'shares.link' ], _extendFileActions: function(fileActions) { @@ -241,4 +245,3 @@ })(OCA); OC.Plugins.register('OCA.Files.FileList', OCA.Files.TagsPlugin); - diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js index 397710545cb..3b942bc10d9 100644 --- a/apps/files/l10n/ru.js +++ b/apps/files/l10n/ru.js @@ -78,7 +78,7 @@ OC.L10N.register( "Removed from favorites" : "Удалено из избранного", "You added {file} to your favorites" : "Вы добавили {file} в избранное", "You removed {file} from your favorites" : "Вы удалили {file} из избранного", - "File changes" : "Файлы изменены", + "File changes" : "Изменения файлов", "Created by {user}" : "Создано {user}", "Changed by {user}" : "Изменено {user}", "Deleted by {user}" : "Удалено {user}", diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json index 7e8801c8a9f..f79c7e77154 100644 --- a/apps/files/l10n/ru.json +++ b/apps/files/l10n/ru.json @@ -76,7 +76,7 @@ "Removed from favorites" : "Удалено из избранного", "You added {file} to your favorites" : "Вы добавили {file} в избранное", "You removed {file} from your favorites" : "Вы удалили {file} из избранного", - "File changes" : "Файлы изменены", + "File changes" : "Изменения файлов", "Created by {user}" : "Создано {user}", "Changed by {user}" : "Изменено {user}", "Deleted by {user}" : "Удалено {user}", diff --git a/apps/files/lib/Helper.php b/apps/files/lib/Helper.php index b6b209dea70..c3d80957913 100644 --- a/apps/files/lib/Helper.php +++ b/apps/files/lib/Helper.php @@ -208,19 +208,40 @@ class Helper { * Populate the result set with file tags * * @param array $fileList + * @param string $fileIdentifier identifier attribute name for values in $fileList * @return array file list populated with tags */ - public static function populateTags(array $fileList) { - $filesById = array(); + public static function populateTags(array $fileList, $fileIdentifier = 'fileid') { + $filesById = []; foreach ($fileList as $fileData) { - $filesById[$fileData['fileid']] = $fileData; + $filesById[$fileData[$fileIdentifier]] = $fileData; } $tagger = \OC::$server->getTagManager()->load('files'); $tags = $tagger->getTagsForObjects(array_keys($filesById)); - if ($tags) { + + if (!is_array($tags)) { + throw new \UnexpectedValueException('$tags must be an array'); + } + + if (!empty($tags)) { foreach ($tags as $fileId => $fileTags) { $filesById[$fileId]['tags'] = $fileTags; } + + foreach ($filesById as $key => $fileWithTags) { + foreach($fileList as $key2 => $file){ + if( $file[$fileIdentifier] == $key){ + $fileList[$key2] = $fileWithTags; + } + } + } + + foreach ($fileList as $key => $file) { + if (!array_key_exists('tags', $file)) { + $fileList[$key]['tags'] = []; + } + } + } return $fileList; } diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml index 3f6a48d2e22..74ad050d30e 100644 --- a/apps/files_external/appinfo/info.xml +++ b/apps/files_external/appinfo/info.xml @@ -3,7 +3,7 @@ <id>files_external</id> <name>External storage support</name> <description> -This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, Google Drive, Dropbox, other ownCloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root ownCloud directory, which they can access and use like any other ownCloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file. +This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, Google Drive, Dropbox, other Nextcloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root Nextcloud directory, which they can access and use like any other Nextcloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file. External storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation. </description> diff --git a/apps/files_external/appinfo/update.php b/apps/files_external/appinfo/update.php deleted file mode 100644 index 3d173f300e7..00000000000 --- a/apps/files_external/appinfo/update.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Joas Schilling <coding@schilljs.com> - * @author Robin Appelman <robin@icewind.nl> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * 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, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -$installedVersion = \OC::$server->getConfig()->getAppValue('files_external', 'installed_version'); - -$app = new \OCA\Files_External\AppInfo\Application(); - -// Migration to db config -if (version_compare($installedVersion, '0.5.0', '<')) { - $migrator = $app->getContainer()->query('OCA\Files_External\Migration\StorageMigrator'); - $migrator->migrateGlobal(); -} diff --git a/apps/files_external/lib/Lib/Storage/Google.php b/apps/files_external/lib/Lib/Storage/Google.php index b22b0c29263..2211686055e 100644 --- a/apps/files_external/lib/Lib/Storage/Google.php +++ b/apps/files_external/lib/Lib/Storage/Google.php @@ -126,7 +126,7 @@ class Google extends \OC\Files\Storage\Common { $q = "title='" . str_replace("'","\\'", $name) . "' and '" . str_replace("'","\\'", $parentId) . "' in parents and trashed = false"; $result = $this->service->files->listFiles(array('q' => $q))->getItems(); if (!empty($result)) { - // Google Drive allows files with the same name, ownCloud doesn't + // Google Drive allows files with the same name, Nextcloud doesn't if (count($result) > 1) { $this->onDuplicateFileDetected($path); return false; @@ -294,7 +294,7 @@ class Google extends \OC\Files\Storage\Common { } else { $filepath = $path.'/'.$name; } - // Google Drive allows files with the same name, ownCloud doesn't + // Google Drive allows files with the same name, Nextcloud doesn't // Prevent opendir() from returning any duplicate files $key = array_search($name, $files); if ($key !== false || isset($duplicates[$filepath])) { diff --git a/apps/files_external/lib/Lib/Storage/OwnCloud.php b/apps/files_external/lib/Lib/Storage/OwnCloud.php index 427b55a4a54..9669b5f3dad 100644 --- a/apps/files_external/lib/Lib/Storage/OwnCloud.php +++ b/apps/files_external/lib/Lib/Storage/OwnCloud.php @@ -26,9 +26,9 @@ namespace OCA\Files_External\Lib\Storage; use Sabre\DAV\Client; /** - * ownCloud backend for external storage based on DAV backend. + * Nextcloud backend for external storage based on DAV backend. * - * The ownCloud URL consists of three parts: + * The Nextcloud URL consists of three parts: * http://%host/%context/remote.php/webdav/%root * */ diff --git a/apps/files_external/lib/Migration/StorageMigrator.php b/apps/files_external/lib/Migration/StorageMigrator.php index e48c6726136..2ecc5d6cd66 100644 --- a/apps/files_external/lib/Migration/StorageMigrator.php +++ b/apps/files_external/lib/Migration/StorageMigrator.php @@ -118,16 +118,6 @@ class StorageMigrator { } /** - * Migrate admin configured storages - */ - public function migrateGlobal() { - $legacyService = new GlobalLegacyStoragesService($this->backendService); - $storageService = new GlobalStoragesService($this->backendService, $this->dbConfig, $this->userMountCache); - - $this->migrate($legacyService, $storageService); - } - - /** * Migrate personal storages configured by the current user * * @param IUser $user diff --git a/apps/files_external/lib/Service/GlobalLegacyStoragesService.php b/apps/files_external/lib/Service/GlobalLegacyStoragesService.php deleted file mode 100644 index ee7f158b792..00000000000 --- a/apps/files_external/lib/Service/GlobalLegacyStoragesService.php +++ /dev/null @@ -1,46 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Joas Schilling <coding@schilljs.com> - * @author Robin Appelman <robin@icewind.nl> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * 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, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OCA\Files_External\Service; - -/** - * Read admin defined mounts from the legacy mount.json - */ -class GlobalLegacyStoragesService extends LegacyStoragesService { - /** - * @param BackendService $backendService - */ - public function __construct(BackendService $backendService) { - $this->backendService = $backendService; - } - - /** - * Read legacy config data - * - * @return array list of mount configs - */ - protected function readLegacyConfig() { - // read global config - return \OC_Mount_Config::readData(); - } -} diff --git a/apps/files_external/tests/README.md b/apps/files_external/tests/README.md index 0b3c7fd004f..202ae8eee9a 100644 --- a/apps/files_external/tests/README.md +++ b/apps/files_external/tests/README.md @@ -20,7 +20,7 @@ freely. ## Hands-on way of unit test execution -Run all files_external unit tests by invoking the following in the ownCloud +Run all files_external unit tests by invoking the following in the Nextcloud core root folder: ./autotest-external.sh diff --git a/apps/files_external/tests/Storage/OwncloudTest.php b/apps/files_external/tests/Storage/OwncloudTest.php index 45b5071d941..f1564304e2f 100644 --- a/apps/files_external/tests/Storage/OwncloudTest.php +++ b/apps/files_external/tests/Storage/OwncloudTest.php @@ -45,7 +45,7 @@ class OwncloudTest extends \Test\Files\Storage\Storage { $id = $this->getUniqueID(); $this->config = include('files_external/tests/config.php'); if ( ! is_array($this->config) or ! isset($this->config['owncloud']) or ! $this->config['owncloud']['run']) { - $this->markTestSkipped('ownCloud backend not configured'); + $this->markTestSkipped('Nextcloud backend not configured'); } $this->config['owncloud']['root'] .= '/' . $id; //make sure we have an new empty folder to work in $this->instance = new OwnCloud($this->config['owncloud']); diff --git a/apps/files_external/tests/env/start-webdav-apache.sh b/apps/files_external/tests/env/start-webdav-apache.sh index 48acb8572d6..a5464c9cfab 100755 --- a/apps/files_external/tests/env/start-webdav-apache.sh +++ b/apps/files_external/tests/env/start-webdav-apache.sh @@ -6,7 +6,7 @@ # against. It will also change the files_external config to use the docker # container as testing environment. This is reverted in the stop step. # -# If the environment variable RUN_DOCKER_MYSQL is set the ownCloud will +# If the environment variable RUN_DOCKER_MYSQL is set the Nextcloud will # be set up using MySQL instead of SQLite. # # Set environment variable DEBUG to print config file @@ -74,7 +74,7 @@ return array( DELIM -echo "ownCloud container: $container" +echo "Nextcloud container: $container" # put container IDs into a file to drop them after the test run (keep in mind that multiple tests run in parallel on the same host) echo $container >> $thisFolder/dockerContainerWebdav.$EXECUTOR_NUMBER.webdav diff --git a/apps/files_external/tests/env/start-webdav-ownCloud.sh b/apps/files_external/tests/env/start-webdav-ownCloud.sh index d992516d7b1..870bd5bcdf8 100755 --- a/apps/files_external/tests/env/start-webdav-ownCloud.sh +++ b/apps/files_external/tests/env/start-webdav-ownCloud.sh @@ -6,7 +6,7 @@ # against. It will also change the files_external config to use the docker # container as testing environment. This is reverted in the stop step. # -# If the environment variable RUN_DOCKER_MYSQL is set the ownCloud will +# If the environment variable RUN_DOCKER_MYSQL is set the Nextcloud will # be set up using MySQL instead of SQLite. # # Set environment variable DEBUG to print config file @@ -48,7 +48,7 @@ container=`docker run -P $parameter -d -e ADMINLOGIN=test -e ADMINPWD=test morri host=`docker inspect --format="{{.NetworkSettings.IPAddress}}" $container` -echo -n "Waiting for ownCloud initialization" +echo -n "Waiting for Nextcloud initialization" if ! "$thisFolder"/env/wait-for-connection ${host} 80 60; then echo "[ERROR] Waited 60 seconds, no response" >&2 exit 1 @@ -74,7 +74,7 @@ return array( DELIM -echo "ownCloud container: $container" +echo "Nextcloud container: $container" # put container IDs into a file to drop them after the test run (keep in mind that multiple tests run in parallel on the same host) echo $container >> $thisFolder/dockerContainerOwnCloud.$EXECUTOR_NUMBER.webdav diff --git a/apps/files_sharing/appinfo/update.php b/apps/files_sharing/appinfo/update.php index 917cb7b6639..a83a0c7b5b8 100644 --- a/apps/files_sharing/appinfo/update.php +++ b/apps/files_sharing/appinfo/update.php @@ -24,17 +24,6 @@ use OCA\Files_Sharing\Migration; $installedVersion = \OC::$server->getConfig()->getAppValue('files_sharing', 'installed_version'); -// Migration OC8.2 -> OC9 -if (version_compare($installedVersion, '0.9.1', '<')) { - $m = new Migration(\OC::$server->getDatabaseConnection(), \OC::$server->getConfig()); - $m->removeReShares(); - $m->updateInitiatorInfo(); -} - -if (version_compare($installedVersion, '1.1.1', '<')) { - $m = new Migration(\OC::$server->getDatabaseConnection(), \OC::$server->getConfig()); -} - if (version_compare($installedVersion, '1.4.0', '<')) { $m = new Migration(\OC::$server->getDatabaseConnection(), \OC::$server->getConfig()); $m->addPasswordColumn(); diff --git a/apps/files_sharing/js/sharedfilelist.js b/apps/files_sharing/js/sharedfilelist.js index dccd6027b02..b11b302c6c2 100644 --- a/apps/files_sharing/js/sharedfilelist.js +++ b/apps/files_sharing/js/sharedfilelist.js @@ -56,7 +56,6 @@ if (options && options.linksOnly) { this._linksOnly = true; } - OC.Plugins.attach('OCA.Sharing.FileList', this); }, _renderRow: function() { @@ -83,7 +82,7 @@ // add row with expiration date for link only shares - influenced by _createRow of filelist if (this._linksOnly) { var expirationTimestamp = 0; - if(fileData.shares[0].expiration !== null) { + if(fileData.shares && fileData.shares[0].expiration !== null) { expirationTimestamp = moment(fileData.shares[0].expiration).valueOf(); } $tr.attr('data-expiration', expirationTimestamp); @@ -169,7 +168,8 @@ /* jshint camelcase: false */ data: { format: 'json', - shared_with_me: !!this._sharedWithUser + shared_with_me: !!this._sharedWithUser, + include_tags: true }, type: 'GET', beforeSend: function(xhr) { @@ -183,7 +183,8 @@ url: OC.linkToOCS('apps/files_sharing/api/v1') + 'remote_shares', /* jshint camelcase: false */ data: { - format: 'json' + format: 'json', + include_tags: true }, type: 'GET', beforeSend: function(xhr) { @@ -238,7 +239,8 @@ type: share.type, id: share.file_id, path: OC.dirname(share.mountpoint), - permissions: share.permissions + permissions: share.permissions, + tags: share.tags || [] }; file.shares = [{ @@ -276,7 +278,8 @@ var file = { id: share.file_source, icon: OC.MimeType.getIconUrl(share.mimetype), - mimetype: share.mimetype + mimetype: share.mimetype, + tags: share.tags || [] }; if (share.item_type === 'folder') { file.type = 'dir'; @@ -382,6 +385,12 @@ // Sort by expected sort comparator return files.sort(this._sortComparator); + }, + + _onUrlChanged: function(e) { + if (e && _.isString(e.dir)) { + this.changeDirectory(e.dir, false, true); + } } }); diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js index 5065569f27a..aeb623c0ee0 100644 --- a/apps/files_sharing/l10n/ru.js +++ b/apps/files_sharing/l10n/ru.js @@ -18,7 +18,7 @@ OC.L10N.register( "No expiration date set" : "Дата истечения не установлена", "Shared by" : "Поделился", "Sharing" : "Общий доступ", - "File shares" : "Файловые ресурсы общего доступа", + "File shares" : "Обмен файлами", "Downloaded via public link" : "Скачано по общедоступной ссылке", "Downloaded by {email}" : "Скачано {email}", "{file} downloaded via public link" : "{file} скачан по общедоступной ссылке", diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json index 8330a55101d..daba8b0b633 100644 --- a/apps/files_sharing/l10n/ru.json +++ b/apps/files_sharing/l10n/ru.json @@ -16,7 +16,7 @@ "No expiration date set" : "Дата истечения не установлена", "Shared by" : "Поделился", "Sharing" : "Общий доступ", - "File shares" : "Файловые ресурсы общего доступа", + "File shares" : "Обмен файлами", "Downloaded via public link" : "Скачано по общедоступной ссылке", "Downloaded by {email}" : "Скачано {email}", "{file} downloaded via public link" : "{file} скачан по общедоступной ссылке", diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php index c8cf723630b..f502d905fe8 100644 --- a/apps/files_sharing/lib/AppInfo/Application.php +++ b/apps/files_sharing/lib/AppInfo/Application.php @@ -35,6 +35,7 @@ use OC\AppFramework\Utility\SimpleContainer; use OCA\Files_Sharing\Controller\ExternalSharesController; use OCA\Files_Sharing\Controller\ShareController; use OCA\Files_Sharing\Middleware\SharingCheckMiddleware; +use OCP\Defaults; use OCP\Federation\ICloudIdManager; use \OCP\IContainer; use OCP\IServerContainer; @@ -67,7 +68,7 @@ class Application extends App { $federatedSharingApp->getFederatedShareProvider(), $server->getEventDispatcher(), $server->getL10N($c->query('AppName')), - $server->getThemingDefaults() + $server->query(Defaults::class) ); }); $container->registerService('ExternalSharesController', function (SimpleContainer $c) { @@ -91,17 +92,13 @@ class Application extends App { $container->registerService('ExternalManager', function (SimpleContainer $c) use ($server) { $user = $server->getUserSession()->getUser(); $uid = $user ? $user->getUID() : null; - $discoveryManager = new DiscoveryManager( - \OC::$server->getMemCacheFactory(), - \OC::$server->getHTTPClientService() - ); return new \OCA\Files_Sharing\External\Manager( $server->getDatabaseConnection(), \OC\Files\Filesystem::getMountManager(), \OC\Files\Filesystem::getLoader(), $server->getHTTPClientService(), $server->getNotificationManager(), - $discoveryManager, + $server->query(\OCP\OCS\IDiscoveryService::class), $uid ); }); diff --git a/apps/files_sharing/lib/Capabilities.php b/apps/files_sharing/lib/Capabilities.php index ed00cdc00a6..22a8a8a0a3d 100644 --- a/apps/files_sharing/lib/Capabilities.php +++ b/apps/files_sharing/lib/Capabilities.php @@ -21,7 +21,6 @@ */ namespace OCA\Files_Sharing; -use OCP\App\IAppManager; use OCP\Capabilities\ICapability; use \OCP\IConfig; @@ -35,12 +34,8 @@ class Capabilities implements ICapability { /** @var IConfig */ private $config; - /** @var IAppManager */ - private $appManager; - - public function __construct(IConfig $config, IAppManager $appManager) { + public function __construct(IConfig $config) { $this->config = $config; - $this->appManager = $appManager; } /** @@ -99,15 +94,6 @@ class Capabilities implements ICapability { 'expire_date' => ['enabled' => true] ]; - if ($this->appManager->isEnabledForUser('sharebymail')) { - $res['mailshare'] = [ - 'enabled' => true, - 'upload_files_drop' => ['enabled' => true], - 'password' => ['enabled' => true], - 'expire_date' => ['enabled' => true] - ]; - } - return [ 'files_sharing' => $res, ]; diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php index bc525b6ef82..bd57d80dab0 100644 --- a/apps/files_sharing/lib/Controller/ShareAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareAPIController.php @@ -23,6 +23,7 @@ */ namespace OCA\Files_Sharing\Controller; +use OCA\Files\Helper; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCS\OCSBadRequestException; use OCP\AppFramework\OCS\OCSException; @@ -484,9 +485,10 @@ class ShareAPIController extends OCSController { /** * @param \OCP\Files\File|\OCP\Files\Folder $node + * @param boolean $includeTags * @return DataResponse */ - private function getSharedWithMe($node = null) { + private function getSharedWithMe($node = null, $includeTags) { $userShares = $this->shareManager->getSharedWith($this->currentUser, \OCP\Share::SHARE_TYPE_USER, $node, -1, 0); $groupShares = $this->shareManager->getSharedWith($this->currentUser, \OCP\Share::SHARE_TYPE_GROUP, $node, -1, 0); @@ -509,6 +511,10 @@ class ShareAPIController extends OCSController { } } + if ($includeTags) { + $formatted = Helper::populateTags($formatted, 'file_source'); + } + return new DataResponse($formatted); } @@ -572,7 +578,8 @@ class ShareAPIController extends OCSController { $shared_with_me = 'false', $reshares = 'false', $subfiles = 'false', - $path = null + $path = null, + $include_tags = 'false' ) { if ($path !== null) { @@ -588,7 +595,7 @@ class ShareAPIController extends OCSController { } if ($shared_with_me === 'true') { - $result = $this->getSharedWithMe($path); + $result = $this->getSharedWithMe($path, $include_tags); return $result; } @@ -634,6 +641,10 @@ class ShareAPIController extends OCSController { } } + if ($include_tags) { + $formatted = Helper::populateTags($formatted, 'file_source'); + } + return new DataResponse($formatted); } diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php index bf3b6c77f94..2c6e953a0f5 100644 --- a/apps/files_sharing/lib/Controller/ShareController.php +++ b/apps/files_sharing/lib/Controller/ShareController.php @@ -106,7 +106,7 @@ class ShareController extends Controller { * @param FederatedShareProvider $federatedShareProvider * @param EventDispatcherInterface $eventDispatcher * @param IL10N $l10n - * @param \OC_Defaults $defaults + * @param Defaults $defaults */ public function __construct($appName, IRequest $request, @@ -122,7 +122,7 @@ class ShareController extends Controller { FederatedShareProvider $federatedShareProvider, EventDispatcherInterface $eventDispatcher, IL10N $l10n, - \OC_Defaults $defaults) { + Defaults $defaults) { parent::__construct($appName, $request); $this->config = $config; diff --git a/apps/files_sharing/lib/External/Manager.php b/apps/files_sharing/lib/External/Manager.php index 0a57324c32f..2c348907384 100644 --- a/apps/files_sharing/lib/External/Manager.php +++ b/apps/files_sharing/lib/External/Manager.php @@ -32,8 +32,11 @@ namespace OCA\Files_Sharing\External; use OC\Files\Filesystem; use OCA\FederatedFileSharing\DiscoveryManager; use OCP\Files; +use OCP\Files\Storage\IStorageFactory; use OCP\Http\Client\IClientService; +use OCP\IDBConnection; use OCP\Notification\IManager; +use OCP\OCS\IDiscoveryService; class Manager { const STORAGE = '\OCA\Files_Sharing\External\Storage'; @@ -44,7 +47,7 @@ class Manager { private $uid; /** - * @var \OCP\IDBConnection + * @var IDBConnection */ private $connection; @@ -54,7 +57,7 @@ class Manager { private $mountManager; /** - * @var \OCP\Files\Storage\IStorageFactory + * @var IStorageFactory */ private $storageLoader; @@ -67,24 +70,27 @@ class Manager { * @var IManager */ private $notificationManager; - /** @var DiscoveryManager */ - private $discoveryManager; /** - * @param \OCP\IDBConnection $connection + * @var IDiscoveryService + */ + private $discoveryService; + + /** + * @param IDBConnection $connection * @param \OC\Files\Mount\Manager $mountManager - * @param \OCP\Files\Storage\IStorageFactory $storageLoader + * @param IStorageFactory $storageLoader * @param IClientService $clientService * @param IManager $notificationManager - * @param DiscoveryManager $discoveryManager + * @param IDiscoveryService $discoveryService * @param string $uid */ - public function __construct(\OCP\IDBConnection $connection, + public function __construct(IDBConnection $connection, \OC\Files\Mount\Manager $mountManager, - \OCP\Files\Storage\IStorageFactory $storageLoader, + IStorageFactory $storageLoader, IClientService $clientService, IManager $notificationManager, - DiscoveryManager $discoveryManager, + IDiscoveryService $discoveryService, $uid) { $this->connection = $connection; $this->mountManager = $mountManager; @@ -92,7 +98,7 @@ class Manager { $this->clientService = $clientService; $this->uid = $uid; $this->notificationManager = $notificationManager; - $this->discoveryManager = $discoveryManager; + $this->discoveryService = $discoveryService; } /** @@ -260,7 +266,10 @@ class Manager { */ private function sendFeedbackToRemote($remote, $token, $remoteId, $feedback) { - $url = rtrim($remote, '/') . $this->discoveryManager->getShareEndpoint($remote) . '/' . $remoteId . '/' . $feedback . '?format=' . \OCP\Share::RESPONSE_FORMAT; + $federationEndpoints = $this->discoveryService->discover($remote, 'FEDERATED_SHARING'); + $endpoint = isset($federationEndpoints['share']) ? $federationEndpoints['share'] : '/ocs/v2.php/cloud/shares'; + + $url = rtrim($remote, '/') . $endpoint . '/' . $remoteId . '/' . $feedback . '?format=' . \OCP\Share::RESPONSE_FORMAT; $fields = array('token' => $token); $client = $this->clientService->newClient(); @@ -376,7 +385,7 @@ class Manager { /** * remove re-shares from share table and mapping in the federated_reshares table - * + * * @param $mountPointId */ protected function removeReShares($mountPointId) { diff --git a/apps/files_sharing/lib/External/Storage.php b/apps/files_sharing/lib/External/Storage.php index 51d97388db7..b84ba5d96ab 100644 --- a/apps/files_sharing/lib/External/Storage.php +++ b/apps/files_sharing/lib/External/Storage.php @@ -51,8 +51,6 @@ class Storage extends DAV implements ISharedStorage { private $memcacheFactory; /** @var \OCP\Http\Client\IClientService */ private $httpClient; - /** @var \OCP\ICertificateManager */ - private $certificateManager; /** @var bool */ private $updateChecked = false; @@ -64,14 +62,11 @@ class Storage extends DAV implements ISharedStorage { public function __construct($options) { $this->memcacheFactory = \OC::$server->getMemCacheFactory(); $this->httpClient = $options['HttpClientService']; - $discoveryManager = new DiscoveryManager( - $this->memcacheFactory, - $this->httpClient - ); $this->manager = $options['manager']; - $this->certificateManager = $options['certificateManager']; $this->cloudId = $options['cloudId']; + $discoveryService = \OC::$server->query(\OCP\OCS\IDiscoveryService::class); + list($protocol, $remote) = explode('://', $this->cloudId->getRemote()); if (strpos($remote, '/')) { list($host, $root) = explode('/', $remote, 2); @@ -80,9 +75,12 @@ class Storage extends DAV implements ISharedStorage { $root = ''; } $secure = $protocol === 'https'; - $root = rtrim($root, '/') . $discoveryManager->getWebDavEndpoint($this->cloudId->getRemote()); + $federatedSharingEndpoints = $discoveryService->discover($this->cloudId->getRemote(), 'FEDERATED_SHARING'); + $webDavEndpoint = isset($federatedSharingEndpoints['webdav']) ? $federatedSharingEndpoints['webdav'] : '/public.php/webdav'; + $root = rtrim($root, '/') . $webDavEndpoint; $this->mountPoint = $options['mountpoint']; $this->token = $options['token']; + parent::__construct(array( 'secure' => $secure, 'host' => $host, @@ -208,16 +206,16 @@ class Storage extends DAV implements ISharedStorage { try { $this->getShareInfo(); } catch (NotFoundException $e) { - // a 404 can either mean that the share no longer exists or there is no ownCloud on the remote + // a 404 can either mean that the share no longer exists or there is no Nextcloud on the remote if ($this->testRemote()) { - // valid ownCloud instance means that the public share no longer exists + // valid Nextcloud instance means that the public share no longer exists // since this is permanent (re-sharing the file will create a new token) // we remove the invalid storage $this->manager->removeShare($this->mountPoint); $this->manager->getMountManager()->removeMount($this->mountPoint); throw new StorageInvalidException(); } else { - // ownCloud instance is gone, likely to be a temporary server configuration error + // Nextcloud instance is gone, likely to be a temporary server configuration error throw new StorageNotAvailableException(); } } catch (ForbiddenException $e) { @@ -286,7 +284,7 @@ class Storage extends DAV implements ISharedStorage { } /** - * Whether the remote is an ownCloud, used since some sharing features are not + * Whether the remote is an ownCloud/Nextcloud, used since some sharing features are not * standardized. Let's use this to detect whether to use it. * * @return bool @@ -350,7 +348,7 @@ class Storage extends DAV implements ISharedStorage { } return ($this->getPermissions($path) & \OCP\Constants::PERMISSION_SHARE); } - + public function getPermissions($path) { $response = $this->propfind($path); if (isset($response['{http://open-collaboration-services.org/ns}share-permissions'])) { diff --git a/apps/files_sharing/lib/Hooks.php b/apps/files_sharing/lib/Hooks.php index 2029e97d08b..821c3046595 100644 --- a/apps/files_sharing/lib/Hooks.php +++ b/apps/files_sharing/lib/Hooks.php @@ -32,17 +32,13 @@ use OCA\FederatedFileSharing\DiscoveryManager; class Hooks { public static function deleteUser($params) { - $discoveryManager = new DiscoveryManager( - \OC::$server->getMemCacheFactory(), - \OC::$server->getHTTPClientService() - ); $manager = new External\Manager( \OC::$server->getDatabaseConnection(), \OC\Files\Filesystem::getMountManager(), \OC\Files\Filesystem::getLoader(), \OC::$server->getHTTPClientService(), \OC::$server->getNotificationManager(), - $discoveryManager, + \OC::$server->query(\OCP\OCS\IDiscoveryService::class), $params['uid']); $manager->removeUserShares($params['uid']); diff --git a/apps/files_sharing/tests/CapabilitiesTest.php b/apps/files_sharing/tests/CapabilitiesTest.php index 79ac1854e40..663adc1f271 100644 --- a/apps/files_sharing/tests/CapabilitiesTest.php +++ b/apps/files_sharing/tests/CapabilitiesTest.php @@ -57,9 +57,7 @@ class CapabilitiesTest extends \Test\TestCase { private function getResults(array $map) { $config = $this->getMockBuilder('\OCP\IConfig')->disableOriginalConstructor()->getMock(); $config->method('getAppValue')->will($this->returnValueMap($map)); - $appManager = $this->getMockBuilder(IAppManager::class)->getMock(); - $appManager->expects($this->any())->method('isEnabledForUser')->with('sharebymail')->willReturn(true); - $cap = new Capabilities($config, $appManager); + $cap = new Capabilities($config); $result = $this->getFilesSharingPart($cap->getCapabilities()); return $result; } diff --git a/apps/files_sharing/tests/Controller/ShareControllerTest.php b/apps/files_sharing/tests/Controller/ShareControllerTest.php index dae7740b3ae..c9a1d5ecb24 100644 --- a/apps/files_sharing/tests/Controller/ShareControllerTest.php +++ b/apps/files_sharing/tests/Controller/ShareControllerTest.php @@ -111,7 +111,7 @@ class ShareControllerTest extends \Test\TestCase { $this->federatedShareProvider, $this->eventDispatcher, $this->getMockBuilder('\OCP\IL10N')->getMock(), - $this->getMockBuilder('\OC_Defaults')->getMock() + $this->getMockBuilder('\OCP\Defaults')->getMock() ); diff --git a/apps/files_sharing/tests/External/ManagerTest.php b/apps/files_sharing/tests/External/ManagerTest.php index f2a55babcc7..9f60261c203 100644 --- a/apps/files_sharing/tests/External/ManagerTest.php +++ b/apps/files_sharing/tests/External/ManagerTest.php @@ -70,17 +70,14 @@ class ManagerTest extends TestCase { $this->mountManager = new \OC\Files\Mount\Manager(); $this->clientService = $this->getMockBuilder('\OCP\Http\Client\IClientService') ->disableOriginalConstructor()->getMock(); - $discoveryManager = new DiscoveryManager( - \OC::$server->getMemCacheFactory(), - \OC::$server->getHTTPClientService() - ); + $this->manager = new Manager( \OC::$server->getDatabaseConnection(), $this->mountManager, new StorageFactory(), $this->clientService, \OC::$server->getNotificationManager(), - $discoveryManager, + \OC::$server->query(\OCP\OCS\IDiscoveryService::class), $this->uid ); $this->testMountProvider = new MountProvider(\OC::$server->getDatabaseConnection(), function() { @@ -143,7 +140,7 @@ class ManagerTest extends TestCase { ->disableOriginalConstructor()->getMock(); $client->expects($this->once()) ->method('post') - ->with($this->stringStartsWith('http://localhost/ocs/v1.php/cloud/shares/' . $openShares[0]['remote_id']), $this->anything()) + ->with($this->stringStartsWith('http://localhost/ocs/v2.php/cloud/shares/' . $openShares[0]['remote_id']), $this->anything()) ->willReturn($response); // Accept the first share @@ -186,7 +183,7 @@ class ManagerTest extends TestCase { ->disableOriginalConstructor()->getMock(); $client->expects($this->once()) ->method('post') - ->with($this->stringStartsWith('http://localhost/ocs/v1.php/cloud/shares/' . $openShares[1]['remote_id'] . '/decline'), $this->anything()) + ->with($this->stringStartsWith('http://localhost/ocs/v2.php/cloud/shares/' . $openShares[1]['remote_id'] . '/decline'), $this->anything()) ->willReturn($response); // Decline the third share @@ -226,11 +223,11 @@ class ManagerTest extends TestCase { ->disableOriginalConstructor()->getMock(); $client1->expects($this->once()) ->method('post') - ->with($this->stringStartsWith('http://localhost/ocs/v1.php/cloud/shares/' . $openShares[0]['remote_id'] . '/decline'), $this->anything()) + ->with($this->stringStartsWith('http://localhost/ocs/v2.php/cloud/shares/' . $openShares[0]['remote_id'] . '/decline'), $this->anything()) ->willReturn($response); $client2->expects($this->once()) ->method('post') - ->with($this->stringStartsWith('http://localhost/ocs/v1.php/cloud/shares/' . $acceptedShares[0]['remote_id'] . '/decline'), $this->anything()) + ->with($this->stringStartsWith('http://localhost/ocs/v2.php/cloud/shares/' . $acceptedShares[0]['remote_id'] . '/decline'), $this->anything()) ->willReturn($response); $this->manager->removeUserShares($this->uid); diff --git a/apps/files_sharing/tests/MigrationTest.php b/apps/files_sharing/tests/MigrationTest.php index 708de1c0eca..c8dfefb96b4 100644 --- a/apps/files_sharing/tests/MigrationTest.php +++ b/apps/files_sharing/tests/MigrationTest.php @@ -68,198 +68,6 @@ class MigrationTest extends TestCase { $query->delete($this->table)->execute(); } - public function addDummyValues() { - $query = $this->connection->getQueryBuilder(); - $query->insert($this->table) - ->values( - array( - 'share_type' => $query->createParameter('share_type'), - 'share_with' => $query->createParameter('share_with'), - 'uid_owner' => $query->createParameter('uid_owner'), - 'uid_initiator' => $query->createParameter('uid_initiator'), - 'parent' => $query->createParameter('parent'), - 'item_type' => $query->createParameter('item_type'), - 'item_source' => $query->createParameter('item_source'), - 'item_target' => $query->createParameter('item_target'), - 'file_source' => $query->createParameter('file_source'), - 'file_target' => $query->createParameter('file_target'), - 'permissions' => $query->createParameter('permissions'), - 'stime' => $query->createParameter('stime'), - ) - ); - // shared contact, shouldn't be modified - $query->setParameter('share_type', Share::SHARE_TYPE_CONTACT) - ->setParameter('share_with', 'user1') - ->setParameter('uid_owner', 'owner1') - ->setParameter('uid_initiator', '') - ->setParameter('parent', null) - ->setParameter('item_type', 'contact') - ->setParameter('item_source', '2') - ->setParameter('item_target', '/2') - ->setParameter('file_source', null) - ->setParameter('file_target', null) - ->setParameter('permissions', 31) - ->setParameter('stime', time()); - $this->assertSame(1, - $query->execute() - ); - // shared calendar, shouldn't be modified - $query->setParameter('share_type', Share::SHARE_TYPE_USER) - ->setParameter('share_with', 'user1') - ->setParameter('uid_owner', 'owner1') - ->setParameter('uid_initiator', '') - ->setParameter('parent', null) - ->setParameter('item_type', 'calendar') - ->setParameter('item_source', '2') - ->setParameter('item_target', '/2') - ->setParameter('file_source', null) - ->setParameter('file_target', null) - ->setParameter('permissions', 31) - ->setParameter('stime', time()); - $this->assertSame(1, - $query->execute() - ); - // single user share, shouldn't be modified - $query->setParameter('share_type', Share::SHARE_TYPE_USER) - ->setParameter('share_with', 'user1') - ->setParameter('uid_owner', 'owner1') - ->setParameter('uid_initiator', '') - ->setParameter('parent', null) - ->setParameter('item_type', 'file') - ->setParameter('item_source', '2') - ->setParameter('item_target', '/2') - ->setParameter('file_source', 2) - ->setParameter('file_target', '/foo') - ->setParameter('permissions', 31) - ->setParameter('stime', time()); - $this->assertSame(1, - $query->execute() - ); - // single group share, shouldn't be modified - $query->setParameter('share_type', Share::SHARE_TYPE_GROUP) - ->setParameter('share_with', 'group1') - ->setParameter('uid_owner', 'owner1') - ->setParameter('uid_initiator', '') - ->setParameter('parent', null) - ->setParameter('item_type', 'file') - ->setParameter('item_source', '2') - ->setParameter('item_target', '/2') - ->setParameter('file_source', 2) - ->setParameter('file_target', '/foo') - ->setParameter('permissions', 31) - ->setParameter('stime', time()); - $this->assertSame(1, - $query->execute() - ); - $parent = $query->getLastInsertId(); - // unique target for group share, shouldn't be modified - $query->setParameter('share_type', 2) - ->setParameter('share_with', 'group1') - ->setParameter('uid_owner', 'owner1') - ->setParameter('uid_initiator', '') - ->setParameter('parent', $parent) - ->setParameter('item_type', 'file') - ->setParameter('item_source', '2') - ->setParameter('item_target', '/2') - ->setParameter('file_source', 2) - ->setParameter('file_target', '/foo renamed') - ->setParameter('permissions', 31) - ->setParameter('stime', time()); - $this->assertSame(1, - $query->execute() - ); - // first user share, shouldn't be modified - $query->setParameter('share_type', Share::SHARE_TYPE_USER) - ->setParameter('share_with', 'user1') - ->setParameter('uid_owner', 'owner2') - ->setParameter('uid_initiator', '') - ->setParameter('parent', null) - ->setParameter('item_type', 'file') - ->setParameter('item_source', '2') - ->setParameter('item_target', '/2') - ->setParameter('file_source', 2) - ->setParameter('file_target', '/foobar') - ->setParameter('permissions', 31) - ->setParameter('stime', time()); - $this->assertSame(1, - $query->execute() - ); - $parent = $query->getLastInsertId(); - // first re-share, should be attached to the first user share after migration - $query->setParameter('share_type', Share::SHARE_TYPE_USER) - ->setParameter('share_with', 'user2') - ->setParameter('uid_owner', 'user1') - ->setParameter('uid_initiator', '') - ->setParameter('parent', $parent) - ->setParameter('item_type', 'file') - ->setParameter('item_source', '2') - ->setParameter('item_target', '/2') - ->setParameter('file_source', 2) - ->setParameter('file_target', '/foobar') - ->setParameter('permissions', 31) - ->setParameter('stime', time()); - $this->assertSame(1, - $query->execute() - ); - $parent = $query->getLastInsertId(); - // second re-share, should be attached to the first user share after migration - $query->setParameter('share_type', Share::SHARE_TYPE_USER) - ->setParameter('share_with', 'user3') - ->setParameter('uid_owner', 'user2') - ->setParameter('uid_initiator', '') - ->setParameter('parent', $parent) - ->setParameter('item_type', 'file') - ->setParameter('item_source', '2') - ->setParameter('item_target', '/2') - ->setParameter('file_source', 2) - ->setParameter('file_target', '/foobar') - ->setParameter('permissions', 31) - ->setParameter('stime', time()); - $this->assertSame(1, - $query->execute() - ); - $parent = $query->getLastInsertId(); - // third re-share, should be attached to the first user share after migration - $query->setParameter('share_type', Share::SHARE_TYPE_REMOTE) - ->setParameter('share_with', 'user@server.com') - ->setParameter('uid_owner', 'user3') - ->setParameter('uid_initiator', '') - ->setParameter('parent', $parent) - ->setParameter('item_type', 'file') - ->setParameter('item_source', '2') - ->setParameter('item_target', '/2') - ->setParameter('file_source', 2) - ->setParameter('file_target', '/foobar') - ->setParameter('permissions', 31) - ->setParameter('stime', time()); - $this->assertSame(1, - $query->execute() - ); - - // Link reshare should keep its parent - $query->setParameter('share_type', Share::SHARE_TYPE_LINK) - ->setParameter('share_with', null) - ->setParameter('uid_owner', 'user3') - ->setParameter('uid_initiator', '') - ->setParameter('parent', $parent) - ->setParameter('item_type', 'file') - ->setParameter('item_source', '2') - ->setParameter('item_target', '/2') - ->setParameter('file_source', 2) - ->setParameter('file_target', '/foobar') - ->setParameter('permissions', 31) - ->setParameter('stime', time()); - $this->assertSame(1, - $query->execute() - ); - } - - public function testRemoveReShares() { - $this->addDummyValues(); - $this->migration->removeReShares(); - $this->verifyResult(); - } - public function verifyResult() { $query = $this->connection->getQueryBuilder(); $query->select('*')->from($this->table)->orderBy('id'); @@ -297,66 +105,6 @@ class MigrationTest extends TestCase { $this->assertSame($result[7]['id'], $result[9]['parent']); } - public function test1001DeepReshares() { - $parent = null; - for ($i = 0; $i < 1001; $i++) { - $query = $this->connection->getQueryBuilder(); - $query->insert($this->table) - ->values( - [ - 'share_type' => $query->createParameter('share_type'), - 'share_with' => $query->createParameter('share_with'), - 'uid_owner' => $query->createParameter('uid_owner'), - 'uid_initiator' => $query->createParameter('uid_initiator'), - 'parent' => $query->createParameter('parent'), - 'item_type' => $query->createParameter('item_type'), - 'item_source' => $query->createParameter('item_source'), - 'item_target' => $query->createParameter('item_target'), - 'file_source' => $query->createParameter('file_source'), - 'file_target' => $query->createParameter('file_target'), - 'permissions' => $query->createParameter('permissions'), - 'stime' => $query->createParameter('stime'), - ] - ) - ->setParameter('share_type', Share::SHARE_TYPE_USER) - ->setParameter('share_with', 'user'.($i+1)) - ->setParameter('uid_owner', 'user'.($i)) - ->setParameter('uid_initiator', null) - ->setParameter('parent', $parent) - ->setParameter('item_type', 'file') - ->setParameter('item_source', '2') - ->setParameter('item_target', '/2') - ->setParameter('file_source', 2) - ->setParameter('file_target', '/foobar') - ->setParameter('permissions', 31) - ->setParameter('stime', time()); - - $this->assertSame(1, $query->execute()); - $parent = $query->getLastInsertId(); - } - - $this->migration->removeReShares(); - $this->migration->updateInitiatorInfo(); - - $qb = $this->connection->getQueryBuilder(); - - $stmt = $qb->select('id', 'share_with', 'uid_owner', 'uid_initiator', 'parent') - ->from('share') - ->orderBy('id', 'asc') - ->execute(); - - $i = 0; - while($share = $stmt->fetch()) { - $this->assertEquals('user'.($i+1), $share['share_with']); - $this->assertEquals('user' . ($i), $share['uid_initiator']); - $this->assertEquals('user0', $share['uid_owner']); - $this->assertEquals(null, $share['parent']); - $i++; - } - $stmt->closeCursor(); - $this->assertEquals(1001, $i); - } - /** * test that we really remove the "shareapi_allow_mail_notification" setting only */ diff --git a/apps/files_sharing/tests/js/sharedfilelistSpec.js b/apps/files_sharing/tests/js/sharedfilelistSpec.js index f177b61c78a..3efbb8fcea3 100644 --- a/apps/files_sharing/tests/js/sharedfilelistSpec.js +++ b/apps/files_sharing/tests/js/sharedfilelistSpec.js @@ -48,6 +48,8 @@ describe('OCA.Sharing.FileList tests', function() { '<div id="emptycontent">Empty content message</div>' + '</div>' ); + + OC.Plugins.register('OCA.Files.FileList', OCA.Files.TagsPlugin); }); afterEach(function() { testFiles = undefined; @@ -93,6 +95,7 @@ describe('OCA.Sharing.FileList tests', function() { share_type: OC.Share.SHARE_TYPE_USER, share_with: 'user1', share_with_displayname: 'User One', + tags: [OC.TAG_FAVORITE], mimetype: 'text/plain', uid_owner: 'user2', displayname_owner: 'User Two' @@ -133,12 +136,12 @@ describe('OCA.Sharing.FileList tests', function() { expect(fakeServer.requests.length).toEqual(2); expect(fakeServer.requests[0].url).toEqual( OC.linkToOCS('apps/files_sharing/api/v1') + - 'shares?format=json&shared_with_me=true' + 'shares?format=json&shared_with_me=true&include_tags=true' ); expect(fakeServer.requests[1].url).toEqual( OC.linkToOCS('apps/files_sharing/api/v1') + - 'remote_shares?format=json' + 'remote_shares?format=json&include_tags=true' ); fakeServer.requests[0].respond( @@ -150,7 +153,7 @@ describe('OCA.Sharing.FileList tests', function() { fakeServer.requests[1].respond( 200, { 'Content-Type': 'application/json' }, - JSON.stringify(ocsResponseRemote) + JSON.stringify(ocsResponseRemote) ); var $rows = fileList.$el.find('tbody tr'); @@ -167,6 +170,8 @@ describe('OCA.Sharing.FileList tests', function() { expect($tr.attr('data-mtime')).toEqual('11111000'); expect($tr.attr('data-share-owner')).toEqual('User Two'); expect($tr.attr('data-share-id')).toEqual('7'); + expect($tr.attr('data-favorite')).toEqual('true'); + expect($tr.attr('data-tags')).toEqual(OC.TAG_FAVORITE); expect($tr.find('a.name').attr('href')).toEqual( OC.webroot + '/remote.php/webdav/local%20path/local%20name.txt' @@ -185,6 +190,8 @@ describe('OCA.Sharing.FileList tests', function() { expect($tr.attr('data-mtime')).toEqual('22222000'); expect($tr.attr('data-share-owner')).toEqual('user3@foo.bar/'); expect($tr.attr('data-share-id')).toEqual('8'); + expect($tr.attr('data-favorite')).not.toBeDefined(); + expect($tr.attr('data-tags')).toEqual(''); expect($tr.find('a.name').attr('href')).toEqual( OC.webroot + '/remote.php/webdav/b.txt' @@ -209,11 +216,11 @@ describe('OCA.Sharing.FileList tests', function() { expect(fakeServer.requests.length).toEqual(2); expect(fakeServer.requests[0].url).toEqual( OC.linkToOCS('apps/files_sharing/api/v1') + - 'shares?format=json&shared_with_me=true' + 'shares?format=json&shared_with_me=true&include_tags=true' ); expect(fakeServer.requests[1].url).toEqual( OC.linkToOCS('apps/files_sharing/api/v1') + - 'remote_shares?format=json' + 'remote_shares?format=json&include_tags=true' ); fakeServer.requests[0].respond( @@ -241,6 +248,8 @@ describe('OCA.Sharing.FileList tests', function() { expect($tr.attr('data-mtime')).toEqual('11111000'); expect($tr.attr('data-share-owner')).toEqual('User Two'); expect($tr.attr('data-share-id')).toEqual('7'); + expect($tr.attr('data-favorite')).toEqual('true'); + expect($tr.attr('data-tags')).toEqual(OC.TAG_FAVORITE); expect($tr.find('a.name').attr('href')).toEqual( OC.webroot + '/index.php/apps/files' + @@ -260,6 +269,8 @@ describe('OCA.Sharing.FileList tests', function() { expect($tr.attr('data-mtime')).toEqual('22222000'); expect($tr.attr('data-share-owner')).toEqual('user3@foo.bar/'); expect($tr.attr('data-share-id')).toEqual('8'); + expect($tr.attr('data-favorite')).not.toBeDefined(); + expect($tr.attr('data-tags')).toEqual(''); expect($tr.find('a.name').attr('href')).toEqual( OC.webroot + '/index.php/apps/files' + @@ -301,6 +312,7 @@ describe('OCA.Sharing.FileList tests', function() { share_type: OC.Share.SHARE_TYPE_USER, share_with: 'user2', share_with_displayname: 'User Two', + tags: [OC.TAG_FAVORITE], mimetype: 'text/plain', uid_owner: 'user1', displayname_owner: 'User One' @@ -315,7 +327,7 @@ describe('OCA.Sharing.FileList tests', function() { request = fakeServer.requests[0]; expect(request.url).toEqual( OC.linkToOCS('apps/files_sharing/api/v1') + - 'shares?format=json&shared_with_me=false' + 'shares?format=json&shared_with_me=false&include_tags=true' ); fakeServer.requests[0].respond( @@ -337,6 +349,8 @@ describe('OCA.Sharing.FileList tests', function() { expect($tr.attr('data-mtime')).toEqual('11111000'); expect($tr.attr('data-share-owner')).not.toBeDefined(); expect($tr.attr('data-share-id')).toEqual('7'); + expect($tr.attr('data-favorite')).toEqual('true'); + expect($tr.attr('data-tags')).toEqual(OC.TAG_FAVORITE); expect($tr.find('a.name').attr('href')).toEqual( OC.webroot + '/remote.php/webdav/local%20path/local%20name.txt' @@ -355,7 +369,7 @@ describe('OCA.Sharing.FileList tests', function() { request = fakeServer.requests[0]; expect(request.url).toEqual( OC.linkToOCS('apps/files_sharing/api/v1') + - 'shares?format=json&shared_with_me=false' + 'shares?format=json&shared_with_me=false&include_tags=true' ); fakeServer.requests[0].respond( @@ -377,6 +391,8 @@ describe('OCA.Sharing.FileList tests', function() { expect($tr.attr('data-mtime')).toEqual('11111000'); expect($tr.attr('data-share-owner')).not.toBeDefined(); expect($tr.attr('data-share-id')).toEqual('7'); + expect($tr.attr('data-favorite')).toEqual('true'); + expect($tr.attr('data-tags')).toEqual(OC.TAG_FAVORITE); expect($tr.find('a.name').attr('href')).toEqual( OC.webroot + '/index.php/apps/files' + @@ -400,13 +416,14 @@ describe('OCA.Sharing.FileList tests', function() { token: 'abc', mimetype: 'text/plain', uid_owner: 'user1', - displayname_owner: 'User One' + displayname_owner: 'User One', + tags: [OC.TAG_FAVORITE] }; expect(fakeServer.requests.length).toEqual(1); request = fakeServer.requests[0]; expect(request.url).toEqual( OC.linkToOCS('apps/files_sharing/api/v1') + - 'shares?format=json&shared_with_me=false' + 'shares?format=json&shared_with_me=false&include_tags=true' ); fakeServer.requests[0].respond( @@ -428,6 +445,8 @@ describe('OCA.Sharing.FileList tests', function() { expect($tr.attr('data-mtime')).toEqual('11111000'); expect($tr.attr('data-share-owner')).not.toBeDefined(); expect($tr.attr('data-share-id')).toEqual('7'); + expect($tr.attr('data-favorite')).toEqual('true'); + expect($tr.attr('data-tags')).toEqual(OC.TAG_FAVORITE); expect($tr.find('a.name').attr('href')).toEqual( OC.webroot + '/remote.php/webdav/local%20path/local%20name.txt' ); @@ -451,7 +470,8 @@ describe('OCA.Sharing.FileList tests', function() { token: 'abc', mimetype: 'text/plain', uid_owner: 'user1', - displayname_owner: 'User One' + displayname_owner: 'User One', + tags: [OC.TAG_FAVORITE], }); // another share of the same file ocsResponse.ocs.data.push({ @@ -473,7 +493,7 @@ describe('OCA.Sharing.FileList tests', function() { request = fakeServer.requests[0]; expect(request.url).toEqual( OC.linkToOCS('apps/files_sharing/api/v1') + - 'shares?format=json&shared_with_me=false' + 'shares?format=json&shared_with_me=false&include_tags=true' ); fakeServer.requests[0].respond( @@ -496,6 +516,8 @@ describe('OCA.Sharing.FileList tests', function() { expect($tr.attr('data-mtime')).toEqual('22222000'); expect($tr.attr('data-share-owner')).not.toBeDefined(); expect($tr.attr('data-share-id')).toEqual('7,8,9'); + expect($tr.attr('data-favorite')).toEqual('true'); + expect($tr.attr('data-tags')).toEqual(OC.TAG_FAVORITE); expect($tr.find('a.name').attr('href')).toEqual( OC.webroot + '/remote.php/webdav/local%20path/local%20name.txt' ); @@ -540,7 +562,8 @@ describe('OCA.Sharing.FileList tests', function() { token: 'abc', mimetype: 'text/plain', uid_owner: 'user1', - displayname_owner: 'User One' + displayname_owner: 'User One', + tags: [OC.TAG_FAVORITE] },{ id: 8, item_type: 'file', @@ -577,13 +600,14 @@ describe('OCA.Sharing.FileList tests', function() { share_with_displayname: 'User Two', mimetype: 'text/plain', uid_owner: 'user1', - displayname_owner: 'User One' + displayname_owner: 'User One', + tags: [OC.TAG_FAVORITE] }); expect(fakeServer.requests.length).toEqual(1); request = fakeServer.requests[0]; expect(request.url).toEqual( OC.linkToOCS('apps/files_sharing/api/v1') + - 'shares?format=json&shared_with_me=false' + 'shares?format=json&shared_with_me=false&include_tags=true' ); fakeServer.requests[0].respond( @@ -607,6 +631,8 @@ describe('OCA.Sharing.FileList tests', function() { expect($tr.attr('data-share-recipients')).not.toBeDefined(); expect($tr.attr('data-share-owner')).not.toBeDefined(); expect($tr.attr('data-share-id')).toEqual('7'); + expect($tr.attr('data-favorite')).toEqual('true'); + expect($tr.attr('data-tags')).toEqual(OC.TAG_FAVORITE); expect($tr.find('a.name').attr('href')).toEqual( OC.webroot + '/remote.php/webdav/local%20path/local%20name.txt' ); @@ -620,6 +646,8 @@ describe('OCA.Sharing.FileList tests', function() { expect($tr.attr('data-id')).toEqual('50'); expect($tr.attr('data-file')).toEqual('local name2.txt'); expect($tr.attr('data-expiration')).not.toEqual('0'); + expect($tr.attr('data-favorite')).not.toBeDefined(); + expect($tr.attr('data-tags')).toEqual(''); expect($tr.find('td:last-child span').text()).toEqual('in a day'); }); it('does not show virtual token recipient as recipient when password was set', function() { @@ -632,7 +660,7 @@ describe('OCA.Sharing.FileList tests', function() { request = fakeServer.requests[0]; expect(request.url).toEqual( OC.linkToOCS('apps/files_sharing/api/v1') + - 'shares?format=json&shared_with_me=false' + 'shares?format=json&shared_with_me=false&include_tags=true' ); fakeServer.requests[0].respond( @@ -656,6 +684,8 @@ describe('OCA.Sharing.FileList tests', function() { expect($tr.attr('data-share-recipients')).not.toBeDefined(); expect($tr.attr('data-share-owner')).not.toBeDefined(); expect($tr.attr('data-share-id')).toEqual('7'); + expect($tr.attr('data-favorite')).toEqual('true'); + expect($tr.attr('data-tags')).toEqual(OC.TAG_FAVORITE); expect($tr.find('a.name').attr('href')).toEqual( OC.webroot + '/remote.php/webdav/local%20path/local%20name.txt'); diff --git a/apps/files_trashbin/appinfo/update.php b/apps/files_trashbin/appinfo/update.php deleted file mode 100644 index 6685eea80da..00000000000 --- a/apps/files_trashbin/appinfo/update.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Björn Schießle <bjoern@schiessle.org> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * 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, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -$config = \OC::$server->getConfig(); -$installedVersion = $config->getAppValue('files_trashbin', 'installed_version'); - -if (version_compare($installedVersion, '0.6.4', '<')) { - $isExpirationEnabled = $config->getSystemValue('trashbin_auto_expire', true); - $oldObligation = $config->getSystemValue('trashbin_retention_obligation', null); - - $newObligation = 'auto'; - if ($isExpirationEnabled) { - if (!is_null($oldObligation)) { - $newObligation = strval($oldObligation) . ', auto'; - } - } else { - $newObligation = 'disabled'; - } - - $config->setSystemValue('trashbin_retention_obligation', $newObligation); - $config->deleteSystemValue('trashbin_auto_expire'); -} diff --git a/apps/files_trashbin/lib/Trashbin.php b/apps/files_trashbin/lib/Trashbin.php index 78f0c9212f9..48dc3fbd055 100644 --- a/apps/files_trashbin/lib/Trashbin.php +++ b/apps/files_trashbin/lib/Trashbin.php @@ -680,7 +680,7 @@ class Trashbin { } /** - * resize trash bin if necessary after a new file was added to ownCloud + * resize trash bin if necessary after a new file was added to Nextcloud * * @param string $user user id */ diff --git a/apps/files_versions/l10n/el.js b/apps/files_versions/l10n/el.js index 44654d93735..8b30d0a2127 100644 --- a/apps/files_versions/l10n/el.js +++ b/apps/files_versions/l10n/el.js @@ -6,6 +6,7 @@ OC.L10N.register( "Failed to revert {file} to revision {timestamp}." : "Αποτυχία επαναφοράς του {file} στην αναθεώρηση {timestamp}.", "_%n byte_::_%n bytes_" : ["%n bytes","%n bytes"], "Restore" : "Επαναφορά", + "More versions …" : "Περισσότερες εκδόσεις ...", "No versions available" : "Δεν υπάρχουν εκδόσεις διαθέσιμες", "More versions..." : "Περισσότερες εκδόσεις..." }, diff --git a/apps/files_versions/l10n/el.json b/apps/files_versions/l10n/el.json index 09a08fdb7fc..64d072142e8 100644 --- a/apps/files_versions/l10n/el.json +++ b/apps/files_versions/l10n/el.json @@ -4,6 +4,7 @@ "Failed to revert {file} to revision {timestamp}." : "Αποτυχία επαναφοράς του {file} στην αναθεώρηση {timestamp}.", "_%n byte_::_%n bytes_" : ["%n bytes","%n bytes"], "Restore" : "Επαναφορά", + "More versions …" : "Περισσότερες εκδόσεις ...", "No versions available" : "Δεν υπάρχουν εκδόσεις διαθέσιμες", "More versions..." : "Περισσότερες εκδόσεις..." },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/provisioning_api/appinfo/info.xml b/apps/provisioning_api/appinfo/info.xml index e633df00bd9..ede999ffec6 100644 --- a/apps/provisioning_api/appinfo/info.xml +++ b/apps/provisioning_api/appinfo/info.xml @@ -4,9 +4,9 @@ <name>Provisioning API</name> <description> This application enables a set of APIs that external systems can use to create, edit, delete and query user - attributes, query, set and remove groups, set quota and query total storage used in ownCloud. Group admin users - can also query ownCloud and perform the same functions as an admin for groups they manage. The API also enables - an admin to query for active ownCloud applications, application info, and to enable or disable an app remotely. + attributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users + can also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables + an admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely. Once the app is enabled, http requests can be used via a Basic Auth header to perform any of the functions listed above. More information is available in the Provisioning API documentation, including example calls and server responses. diff --git a/apps/provisioning_api/lib/AppInfo/Application.php b/apps/provisioning_api/lib/AppInfo/Application.php index fd03fd41e16..b1c257de689 100644 --- a/apps/provisioning_api/lib/AppInfo/Application.php +++ b/apps/provisioning_api/lib/AppInfo/Application.php @@ -7,6 +7,7 @@ use OC\AppFramework\Utility\TimeFactory; use OC\Settings\Mailer\NewUserMailHelper; use OCA\Provisioning_API\Middleware\ProvisioningApiMiddleware; use OCP\AppFramework\App; +use OCP\Defaults; use OCP\Util; class Application extends App { @@ -18,7 +19,7 @@ class Application extends App { $container->registerService(NewUserMailHelper::class, function(SimpleContainer $c) use ($server) { return new NewUserMailHelper( - $server->getThemingDefaults(), + $server->query(Defaults::class), $server->getURLGenerator(), $server->getL10N('settings'), $server->getMailer(), diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php index 9684c7f5656..d2aeac540d2 100644 --- a/apps/provisioning_api/lib/Controller/UsersController.php +++ b/apps/provisioning_api/lib/Controller/UsersController.php @@ -33,10 +33,10 @@ use OC\Accounts\AccountManager; use OC\Settings\Mailer\NewUserMailHelper; use \OC_Helper; use OCP\AppFramework\Http\DataResponse; -use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\OCS\OCSException; use OCP\AppFramework\OCS\OCSForbiddenException; use OCP\AppFramework\OCSController; +use OCP\Defaults; use OCP\Files\NotFoundException; use OCP\IConfig; use OCP\IGroup; @@ -69,7 +69,7 @@ class UsersController extends OCSController { private $urlGenerator; /** @var IMailer */ private $mailer; - /** @var \OC_Defaults */ + /** @var Defaults */ private $defaults; /** @var IFactory */ private $l10nFactory; @@ -88,7 +88,7 @@ class UsersController extends OCSController { * @param string $fromMailAddress * @param IURLGenerator $urlGenerator * @param IMailer $mailer - * @param \OC_Defaults $defaults + * @param Defaults $defaults * @param IFactory $l10nFactory * @param NewUserMailHelper $newUserMailHelper */ @@ -103,7 +103,7 @@ class UsersController extends OCSController { $fromMailAddress, IURLGenerator $urlGenerator, IMailer $mailer, - \OC_Defaults $defaults, + Defaults $defaults, IFactory $l10nFactory, NewUserMailHelper $newUserMailHelper) { parent::__construct($appName, $request); diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php index 24516840a7a..1d1cd97b6d2 100644 --- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php +++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php @@ -32,15 +32,15 @@ namespace OCA\Provisioning_API\Tests\Controller; use Exception; use OC\Accounts\AccountManager; use OC\Group\Manager; -use OC\Mail\IEMailTemplate; +use OCP\Mail\IEMailTemplate; use OC\Settings\Mailer\NewUserMailHelper; use OC\SubAdmin; use OCA\Provisioning_API\Controller\UsersController; use OCP\AppFramework\Http\DataResponse; +use OCP\Defaults; use OCP\IConfig; use OCP\IGroup; use OCP\ILogger; -use OCP\AppFramework\Http\TemplateResponse; use OCP\IL10N; use OCP\IRequest; use OCP\IURLGenerator; @@ -74,7 +74,7 @@ class UsersControllerTest extends TestCase { private $urlGenerator; /** @var IMailer|PHPUnit_Framework_MockObject_MockObject */ private $mailer; - /** @var \OC_Defaults|PHPUnit_Framework_MockObject_MockObject */ + /** @var Defaults|PHPUnit_Framework_MockObject_MockObject */ private $defaults; /** @var IFactory|PHPUnit_Framework_MockObject_MockObject */ private $l10nFactory; @@ -93,7 +93,7 @@ class UsersControllerTest extends TestCase { $this->accountManager = $this->createMock(AccountManager::class); $this->urlGenerator = $this->createMock(IURLGenerator::class); $this->mailer = $this->createMock(IMailer::class); - $this->defaults = $this->createMock(\OC_Defaults::class); + $this->defaults = $this->createMock(Defaults::class); $this->l10nFactory = $this->createMock(IFactory::class); $this->newUserMailHelper = $this->createMock(NewUserMailHelper::class); diff --git a/apps/sharebymail/appinfo/app.php b/apps/sharebymail/appinfo/app.php index 5ef7b6f18cb..c1fd39d2a2f 100644 --- a/apps/sharebymail/appinfo/app.php +++ b/apps/sharebymail/appinfo/app.php @@ -19,6 +19,4 @@ * */ -$settings = new \OCA\ShareByMail\Settings(); - -\OCP\Util::connectHook('\OCP\Config', 'js', $settings, 'announceShareProvider'); +$app = new \OCA\ShareByMail\AppInfo\Application(); diff --git a/apps/sharebymail/l10n/es_MX.js b/apps/sharebymail/l10n/es_MX.js index 68240925f4c..0cc51120cb9 100644 --- a/apps/sharebymail/l10n/es_MX.js +++ b/apps/sharebymail/l10n/es_MX.js @@ -14,11 +14,15 @@ OC.L10N.register( "%s shared »%s« with you" : "%s ha compartido »%s« con usted", "%s shared »%s« with you on behalf of %s" : "%s ha compartido »%s« con usted a nombre de %s", "Failed to create the E-mail" : "Se presentó una falla al crear el correo electrónico", + "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido con usted por %s ", "Could not find share" : "No fue posible encontrar el elemento compartido", "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« con usted a nombre de %s.\n\n%s\n", "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« con usted.\n\n%s\n", "Cheers!" : "¡Saludos!", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hola,<br><br>%s ha compartido <a href=\"%s\">%s</a> con usted a nombre de %s.<br><br> ", - "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s ha compartido <a href=\"%s\">%s</a> con usted.<br><br> " + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s ha compartido <a href=\"%s\">%s</a> con usted.<br><br> ", + "Share by mail" : "Compartir por correo", + "Send a personalized link to a file or folder by mail." : "Enviar por correo una liga personalizada a un archivo o carpeta.", + "Send password by mail" : "La contraseña ha sido enviada por correo" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/es_MX.json b/apps/sharebymail/l10n/es_MX.json index b73e92c967f..86c8eb996d8 100644 --- a/apps/sharebymail/l10n/es_MX.json +++ b/apps/sharebymail/l10n/es_MX.json @@ -12,11 +12,15 @@ "%s shared »%s« with you" : "%s ha compartido »%s« con usted", "%s shared »%s« with you on behalf of %s" : "%s ha compartido »%s« con usted a nombre de %s", "Failed to create the E-mail" : "Se presentó una falla al crear el correo electrónico", + "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido con usted por %s ", "Could not find share" : "No fue posible encontrar el elemento compartido", "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« con usted a nombre de %s.\n\n%s\n", "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« con usted.\n\n%s\n", "Cheers!" : "¡Saludos!", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hola,<br><br>%s ha compartido <a href=\"%s\">%s</a> con usted a nombre de %s.<br><br> ", - "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s ha compartido <a href=\"%s\">%s</a> con usted.<br><br> " + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s ha compartido <a href=\"%s\">%s</a> con usted.<br><br> ", + "Share by mail" : "Compartir por correo", + "Send a personalized link to a file or folder by mail." : "Enviar por correo una liga personalizada a un archivo o carpeta.", + "Send password by mail" : "La contraseña ha sido enviada por correo" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/sharebymail/l10n/nl.js b/apps/sharebymail/l10n/nl.js index 8ec5af1defe..4a69b3a2eb1 100644 --- a/apps/sharebymail/l10n/nl.js +++ b/apps/sharebymail/l10n/nl.js @@ -13,12 +13,18 @@ OC.L10N.register( "Failed to send share by E-mail" : "Fout bij delen via e-mail", "%s shared »%s« with you" : "%s deelde »%s« met jou", "%s shared »%s« with you on behalf of %s" : "%s deelde »%s« met jou in naam van %s", - "Failed to create the E-mail" : "Opmaken e-mail mislukt", - "Could not find share" : "Kon share niet vinden", + "Failed to create the E-mail" : "Opmaken van de e-mail is mislukt", + "Password to access »%s« shared to you by %s" : "Toegangswachtwoord »%s« gedeeld met je door %s", + "Could not find share" : "Kon gedeeld niet vinden", "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hallo daar,\n\n%s deelde »%s« met jou namens %s.\n\n%s\n\n", "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hallo daar,\n\n%s deelde »%s« met jou.\n\n%s\n\n", - "Cheers!" : "Proficiat!", + "Cheers!" : "Proost!", + "Hey there,\n\n%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n\nIt is protected with the following password: %s\n\n" : "Hallo daar,\n\n%s deelt »%s« met je.\nJe zou ondertussen een apparte E-mail moet hebben ontvangen met een link om toegang te verkrijgen.\n\nDe link is beschermd met het volgende wachtwoord: %s\n", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hallo daar,<br><br>%s deelde <a href=\"%s\">%s</a> met jou namens %s.<br><br>", - "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hallo daar,<br><br>%s deelde <a href=\"%s\">%s</a> met jou.<br><br>" + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hallo daar,<br><br>%s deelde <a href=\"%s\">%s</a> met jou.<br><br>", + "Hey there,<br><br>%s shared <i>%s</i> with you.<br>You should have already received a separate mail with a link to access it.<br><br>It is protected with the following password: %s<br><br>" : "Halllo daar ,<br><br>%s deelt<i>%s</i> met je.<br>Je zou ondertussen een apparte E-mail moet hebben ontvangen met een link om toegang te verkrijgen.<br><br>De link is beschermd met het volgende wachtwoord: %s<br><br>", + "Share by mail" : "Gedeeld via een E-mail", + "Send a personalized link to a file or folder by mail." : "Zend een gepersonialiseerde link naar een bestand of map per mail.", + "Send password by mail" : "Wachtwoord per E-mail verzenden" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/nl.json b/apps/sharebymail/l10n/nl.json index ce77189bb2f..cb517ba5268 100644 --- a/apps/sharebymail/l10n/nl.json +++ b/apps/sharebymail/l10n/nl.json @@ -11,12 +11,18 @@ "Failed to send share by E-mail" : "Fout bij delen via e-mail", "%s shared »%s« with you" : "%s deelde »%s« met jou", "%s shared »%s« with you on behalf of %s" : "%s deelde »%s« met jou in naam van %s", - "Failed to create the E-mail" : "Opmaken e-mail mislukt", - "Could not find share" : "Kon share niet vinden", + "Failed to create the E-mail" : "Opmaken van de e-mail is mislukt", + "Password to access »%s« shared to you by %s" : "Toegangswachtwoord »%s« gedeeld met je door %s", + "Could not find share" : "Kon gedeeld niet vinden", "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hallo daar,\n\n%s deelde »%s« met jou namens %s.\n\n%s\n\n", "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hallo daar,\n\n%s deelde »%s« met jou.\n\n%s\n\n", - "Cheers!" : "Proficiat!", + "Cheers!" : "Proost!", + "Hey there,\n\n%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n\nIt is protected with the following password: %s\n\n" : "Hallo daar,\n\n%s deelt »%s« met je.\nJe zou ondertussen een apparte E-mail moet hebben ontvangen met een link om toegang te verkrijgen.\n\nDe link is beschermd met het volgende wachtwoord: %s\n", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hallo daar,<br><br>%s deelde <a href=\"%s\">%s</a> met jou namens %s.<br><br>", - "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hallo daar,<br><br>%s deelde <a href=\"%s\">%s</a> met jou.<br><br>" + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hallo daar,<br><br>%s deelde <a href=\"%s\">%s</a> met jou.<br><br>", + "Hey there,<br><br>%s shared <i>%s</i> with you.<br>You should have already received a separate mail with a link to access it.<br><br>It is protected with the following password: %s<br><br>" : "Halllo daar ,<br><br>%s deelt<i>%s</i> met je.<br>Je zou ondertussen een apparte E-mail moet hebben ontvangen met een link om toegang te verkrijgen.<br><br>De link is beschermd met het volgende wachtwoord: %s<br><br>", + "Share by mail" : "Gedeeld via een E-mail", + "Send a personalized link to a file or folder by mail." : "Zend een gepersonialiseerde link naar een bestand of map per mail.", + "Send password by mail" : "Wachtwoord per E-mail verzenden" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/sharebymail/l10n/sv.js b/apps/sharebymail/l10n/sv.js index fb0a4fc44db..486f0666593 100644 --- a/apps/sharebymail/l10n/sv.js +++ b/apps/sharebymail/l10n/sv.js @@ -14,8 +14,17 @@ OC.L10N.register( "%s shared »%s« with you" : "%s delade »%s« med dig", "%s shared »%s« with you on behalf of %s" : "%s delade »%s« med dig på begäran av %s", "Failed to create the E-mail" : "Misslyckades att skapa e-post", + "Password to access »%s« shared to you by %s" : "Lösenord för att få tillgång till »%s« delat med dig av %s", "Could not find share" : "Kunde inte hitta delning", + "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hej!\n\n%s delade »%s« med dig från%s.\n\n%s\n\n", "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hej,\n\n%s delade »%s« med dig.\n\n%s\n", - "Cheers!" : "Skål!" + "Cheers!" : "Ha det fint!", + "Hey there,\n\n%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n\nIt is protected with the following password: %s\n\n" : "Hej!\n\n%s delade »%s« med dig.\nDu borde ha fått ett separat e-mejl med länk för att få tillgång till det.\n\nDet är skyddat med följande lösnord: %s\n\n", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hej!<br><br>%s delade <a href=\"%s\">%s</a> med dig från %s.<br><br>", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hej!<br><br>%s delade <a href=\"%s\">%s</a> med dig.<br><br>", + "Hey there,<br><br>%s shared <i>%s</i> with you.<br>You should have already received a separate mail with a link to access it.<br><br>It is protected with the following password: %s<br><br>" : "Hej!<br><br>%s delade <i>%s</i> med dig.<br>Du borde ha fått ett separat e-mejl med en länk för att få tillgång till det.<br><br>Det är skyddat med följande lösenord: %s<br><br>", + "Share by mail" : "Dela via e-mejl", + "Send a personalized link to a file or folder by mail." : "Skicka en personlig länk till en fil eller mapp via e-mejl", + "Send password by mail" : "Skicka lösenord med e-post" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/sv.json b/apps/sharebymail/l10n/sv.json index 028271c60f2..e295de544ea 100644 --- a/apps/sharebymail/l10n/sv.json +++ b/apps/sharebymail/l10n/sv.json @@ -12,8 +12,17 @@ "%s shared »%s« with you" : "%s delade »%s« med dig", "%s shared »%s« with you on behalf of %s" : "%s delade »%s« med dig på begäran av %s", "Failed to create the E-mail" : "Misslyckades att skapa e-post", + "Password to access »%s« shared to you by %s" : "Lösenord för att få tillgång till »%s« delat med dig av %s", "Could not find share" : "Kunde inte hitta delning", + "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hej!\n\n%s delade »%s« med dig från%s.\n\n%s\n\n", "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hej,\n\n%s delade »%s« med dig.\n\n%s\n", - "Cheers!" : "Skål!" + "Cheers!" : "Ha det fint!", + "Hey there,\n\n%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n\nIt is protected with the following password: %s\n\n" : "Hej!\n\n%s delade »%s« med dig.\nDu borde ha fått ett separat e-mejl med länk för att få tillgång till det.\n\nDet är skyddat med följande lösnord: %s\n\n", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hej!<br><br>%s delade <a href=\"%s\">%s</a> med dig från %s.<br><br>", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hej!<br><br>%s delade <a href=\"%s\">%s</a> med dig.<br><br>", + "Hey there,<br><br>%s shared <i>%s</i> with you.<br>You should have already received a separate mail with a link to access it.<br><br>It is protected with the following password: %s<br><br>" : "Hej!<br><br>%s delade <i>%s</i> med dig.<br>Du borde ha fått ett separat e-mejl med en länk för att få tillgång till det.<br><br>Det är skyddat med följande lösenord: %s<br><br>", + "Share by mail" : "Dela via e-mejl", + "Send a personalized link to a file or folder by mail." : "Skicka en personlig länk till en fil eller mapp via e-mejl", + "Send password by mail" : "Skicka lösenord med e-post" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/sharebymail/lib/AppInfo/Application.php b/apps/sharebymail/lib/AppInfo/Application.php new file mode 100644 index 00000000000..98febf9dad7 --- /dev/null +++ b/apps/sharebymail/lib/AppInfo/Application.php @@ -0,0 +1,45 @@ +<?php +/** + * @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org> + * + * @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 OCA\ShareByMail\AppInfo; + + +use OCA\ShareByMail\Settings; +use OCP\AppFramework\App; +use OCP\Util; + +class Application extends App { + + public function __construct(array $urlParams = array()) { + parent::__construct('sharebymail', $urlParams); + + $settings = new Settings(); + + /** register capabilities */ + $container = $this->getContainer(); + $container->registerCapability('OCA\ShareByMail\Capabilities'); + + /** register hooks */ + Util::connectHook('\OCP\Config', 'js', $settings, 'announceShareProvider'); + } + +} diff --git a/apps/sharebymail/lib/Capabilities.php b/apps/sharebymail/lib/Capabilities.php new file mode 100644 index 00000000000..de57cd13211 --- /dev/null +++ b/apps/sharebymail/lib/Capabilities.php @@ -0,0 +1,50 @@ +<?php +/** + * @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org> + * + * @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 OCA\ShareByMail; + + +use OCP\Capabilities\ICapability; + +class Capabilities implements ICapability { + + /** + * Function an app uses to return the capabilities + * + * @return array Array containing the apps capabilities + * @since 8.2.0 + */ + public function getCapabilities() { + return [ + 'files_sharing' => + [ + 'sharebymail' => + [ + 'enabled' => true, + 'upload_files_drop' => ['enabled' => true], + 'password' => ['enabled' => true], + 'expire_date' => ['enabled' => true] + ] + ] + ]; + } +} diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php index 332f1c0cf74..ec9568b734e 100644 --- a/apps/sharebymail/lib/ShareByMailProvider.php +++ b/apps/sharebymail/lib/ShareByMailProvider.php @@ -839,7 +839,7 @@ class ShareByMailProvider implements IShareProvider { ); } - $qb->innerJoin('s', 'filecache' ,'f', 's.file_source = f.fileid'); + $qb->innerJoin('s', 'filecache' ,'f', $qb->expr()->eq('s.file_source', 'f.fileid')); $qb->andWhere($qb->expr()->eq('f.parent', $qb->createNamedParameter($node->getId()))); $qb->orderBy('id'); diff --git a/apps/testing/clean_opcode_cache.php b/apps/testing/clean_opcode_cache.php new file mode 100644 index 00000000000..d48d3131b70 --- /dev/null +++ b/apps/testing/clean_opcode_cache.php @@ -0,0 +1,22 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @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/>. + * + */ + +opcache_reset(); diff --git a/apps/theming/lib/Controller/IconController.php b/apps/theming/lib/Controller/IconController.php index 7c4e209d0df..ddd1240fab8 100644 --- a/apps/theming/lib/Controller/IconController.php +++ b/apps/theming/lib/Controller/IconController.php @@ -24,19 +24,19 @@ namespace OCA\Theming\Controller; use OCA\Theming\IconBuilder; use OCA\Theming\ImageManager; -use OCA\Theming\ThemingDefaults; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\NotFoundResponse; use OCP\AppFramework\Http\FileDisplayResponse; use OCP\AppFramework\Utility\ITimeFactory; +use OCP\Defaults; use OCP\Files\NotFoundException; use OCP\IRequest; use OCA\Theming\Util; use OCP\IConfig; class IconController extends Controller { - /** @var ThemingDefaults */ + /** @var Defaults */ private $themingDefaults; /** @var Util */ private $util; @@ -54,7 +54,7 @@ class IconController extends Controller { * * @param string $appName * @param IRequest $request - * @param ThemingDefaults $themingDefaults + * @param Defaults $themingDefaults * @param Util $util * @param ITimeFactory $timeFactory * @param IConfig $config @@ -64,7 +64,7 @@ class IconController extends Controller { public function __construct( $appName, IRequest $request, - ThemingDefaults $themingDefaults, + Defaults $themingDefaults, Util $util, ITimeFactory $timeFactory, IConfig $config, diff --git a/apps/theming/lib/ThemingDefaults.php b/apps/theming/lib/ThemingDefaults.php index d4dc56d3ba9..073410da2c3 100644 --- a/apps/theming/lib/ThemingDefaults.php +++ b/apps/theming/lib/ThemingDefaults.php @@ -138,11 +138,13 @@ class ThemingDefaults extends \OC_Defaults { $logoExists = false; } + $cacheBusterCounter = $this->config->getAppValue('theming', 'cachebuster', '0'); + if(!$logo || !$logoExists) { - return $this->urlGenerator->imagePath('core','logo.svg'); + return $this->urlGenerator->imagePath('core','logo.svg') . '?v=' . $cacheBusterCounter; } - return $this->urlGenerator->linkToRoute('theming.Theming.getLogo'); + return $this->urlGenerator->linkToRoute('theming.Theming.getLogo') . '?v=' . $cacheBusterCounter; } /** @@ -191,15 +193,6 @@ class ThemingDefaults extends \OC_Defaults { } /** - * Gets the current cache buster count - * - * @return string - */ - public function getCacheBusterCounter() { - return $this->config->getAppValue('theming', 'cachebuster', '0'); - } - - /** * Increases the cache buster key */ private function increaseCacheBuster() { diff --git a/apps/theming/tests/Controller/IconControllerTest.php b/apps/theming/tests/Controller/IconControllerTest.php index 591c1075492..ce053ff0eab 100644 --- a/apps/theming/tests/Controller/IconControllerTest.php +++ b/apps/theming/tests/Controller/IconControllerTest.php @@ -26,8 +26,8 @@ namespace OCA\Theming\Tests\Controller; use OC\Files\SimpleFS\SimpleFile; use OCA\Theming\ImageManager; use OCP\AppFramework\Http; -use OCP\AppFramework\Http\DataDisplayResponse; use OCP\AppFramework\Http\NotFoundResponse; +use OCP\Defaults; use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; use OCP\IConfig; @@ -41,7 +41,7 @@ use OCP\AppFramework\Http\FileDisplayResponse; class IconControllerTest extends TestCase { /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */ private $request; - /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ + /** @var Defaults|\PHPUnit_Framework_MockObject_MockObject */ private $themingDefaults; /** @var Util */ private $util; @@ -58,7 +58,7 @@ class IconControllerTest extends TestCase { public function setUp() { $this->request = $this->getMockBuilder('OCP\IRequest')->getMock(); - $this->themingDefaults = $this->getMockBuilder('OCA\Theming\ThemingDefaults') + $this->themingDefaults = $this->getMockBuilder('OCP\Defaults') ->disableOriginalConstructor()->getMock(); $this->util = $this->getMockBuilder('\OCA\Theming\Util')->disableOriginalConstructor() ->setMethods(['getAppImage', 'getAppIcon', 'elementColor'])->getMock(); diff --git a/apps/theming/tests/ThemingDefaultsTest.php b/apps/theming/tests/ThemingDefaultsTest.php index 986b2f34267..ad8f86f1c13 100644 --- a/apps/theming/tests/ThemingDefaultsTest.php +++ b/apps/theming/tests/ThemingDefaultsTest.php @@ -417,25 +417,35 @@ class ThemingDefaultsTest extends TestCase { public function testGetLogoDefault() { $this->config - ->expects($this->once()) + ->expects($this->at(0)) ->method('getAppValue') ->with('theming', 'logoMime') ->willReturn(''); + $this->config + ->expects($this->at(1)) + ->method('getAppValue') + ->with('theming', 'cachebuster', '0') + ->willReturn('0'); $this->appData ->expects($this->once()) ->method('getFolder') ->with('images') ->willThrowException(new \Exception()); - $expected = $this->urlGenerator->imagePath('core','logo.svg'); + $expected = $this->urlGenerator->imagePath('core','logo.svg') . '?v=0'; $this->assertEquals($expected, $this->template->getLogo()); } public function testGetLogoCustom() { $this->config - ->expects($this->once()) + ->expects($this->at(0)) ->method('getAppValue') ->with('theming', 'logoMime') ->willReturn('image/svg+xml'); + $this->config + ->expects($this->at(1)) + ->method('getAppValue') + ->with('theming', 'cachebuster', '0') + ->willReturn('0'); $simpleFolder = $this->createMock(ISimpleFolder::class); $this->appData ->expects($this->once()) @@ -447,7 +457,7 @@ class ThemingDefaultsTest extends TestCase { ->method('getFile') ->with('logo') ->willReturn(''); - $expected = $this->urlGenerator->linkToRoute('theming.Theming.getLogo'); + $expected = $this->urlGenerator->linkToRoute('theming.Theming.getLogo') . '?v=0'; $this->assertEquals($expected, $this->template->getLogo()); } } diff --git a/apps/updatenotification/l10n/zh_CN.js b/apps/updatenotification/l10n/zh_CN.js index 92d0d5ee0da..951f76114da 100644 --- a/apps/updatenotification/l10n/zh_CN.js +++ b/apps/updatenotification/l10n/zh_CN.js @@ -5,6 +5,8 @@ OC.L10N.register( "Could not start updater, please try the manual update" : "无法启动自动更新,请尝试手动更新", "{version} is available. Get more information on how to update." : "新版本 {version} 已可以使用。获取更多升级相关信息。", "Channel updated" : "更新通道", + "The update server could not be reached since %d days to check for new updates." : "更新服务器自 1%d 天前起无法访问以检查更新。", + "Please check the nextcloud and server log files for errors." : "请检查 nextcloud 和服务器的日志中的错误。", "Update to %1$s is available." : " 可以更新到 %1$s 。", "Update for %1$s to version %2$s is available." : "可以从 %1$s 版本更新到 %2$s 版本。", "Update for {app} to version %s is available." : "可以将您的 {app} 更新到版本 %s 。", diff --git a/apps/updatenotification/l10n/zh_CN.json b/apps/updatenotification/l10n/zh_CN.json index 4ffaaf3e70f..25dc477b278 100644 --- a/apps/updatenotification/l10n/zh_CN.json +++ b/apps/updatenotification/l10n/zh_CN.json @@ -3,6 +3,8 @@ "Could not start updater, please try the manual update" : "无法启动自动更新,请尝试手动更新", "{version} is available. Get more information on how to update." : "新版本 {version} 已可以使用。获取更多升级相关信息。", "Channel updated" : "更新通道", + "The update server could not be reached since %d days to check for new updates." : "更新服务器自 1%d 天前起无法访问以检查更新。", + "Please check the nextcloud and server log files for errors." : "请检查 nextcloud 和服务器的日志中的错误。", "Update to %1$s is available." : " 可以更新到 %1$s 。", "Update for %1$s to version %2$s is available." : "可以从 %1$s 版本更新到 %2$s 版本。", "Update for {app} to version %s is available." : "可以将您的 {app} 更新到版本 %s 。", diff --git a/apps/user_ldap/js/wizard/configModel.js b/apps/user_ldap/js/wizard/configModel.js index 3732409c3e1..d99392660c8 100644 --- a/apps/user_ldap/js/wizard/configModel.js +++ b/apps/user_ldap/js/wizard/configModel.js @@ -10,11 +10,11 @@ OCA = OCA || {}; /** * @classdesc this class represents a server configuration. It communicates - * with the ownCloud server to ensure to always have the up to date LDAP + * with the Nextcloud server to ensure to always have the up to date LDAP * configuration. It sends various events that views can listen to and * provides methods so they can modify the configuration based upon user * input. This model is also extended by so-called "detectors" who let the - * ownCloud server try to auto-detect settings and manipulate the + * Nextcloud server try to auto-detect settings and manipulate the * configuration as well. * * @constructor @@ -108,7 +108,7 @@ OCA = OCA || {}; */ /** - * calls an AJAX endpoint at ownCloud. This method should be called by + * calls an AJAX endpoint at Nextcloud. This method should be called by * detectors only! * * @param {string} [params] - as return by OC.buildQueryString @@ -121,7 +121,7 @@ OCA = OCA || {}; }, /** - * calls an AJAX endpoint at ownCloud. This method should be called by + * calls an AJAX endpoint at Nextcloud. This method should be called by * detectors only! * * @param {string} destination - the desired end point @@ -148,7 +148,7 @@ OCA = OCA || {}; /** * modifies a configuration key. If a provided configuration key does * not exist or the provided value equals the current setting, false is - * returned. Otherwise ownCloud server will be called to save the new + * returned. Otherwise Nextcloud server will be called to save the new * value, an event will notify when this is done. True is returned when * the request is sent, however it does not mean whether saving was * successful or not. @@ -195,7 +195,7 @@ OCA = OCA || {}; /** * updates the model's configuration data. This should be called only, - * when a new configuration value was received from the ownCloud server. + * when a new configuration value was received from the Nextcloud server. * This is typically done by detectors, but never by views. * * Cancels with false if old and new values already match. @@ -314,7 +314,7 @@ OCA = OCA || {}; }, /** - * starts a configuration test on the ownCloud server + * starts a configuration test on the Nextcloud server */ requestConfigurationTest: function() { var url = OC.generateUrl('apps/user_ldap/ajax/testConfiguration.php'); diff --git a/apps/user_ldap/js/wizard/wizardDetectorAvailableAttributes.js b/apps/user_ldap/js/wizard/wizardDetectorAvailableAttributes.js index f0272351749..fd43b032ad5 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorAvailableAttributes.js +++ b/apps/user_ldap/js/wizard/wizardDetectorAvailableAttributes.js @@ -11,7 +11,7 @@ OCA = OCA || {}; /** * @classdesc an Attributes Detector. It executes the auto-detection of - * available attributes by the ownCloud server, if requirements are met. + * available attributes by the Nextcloud server, if requirements are met. * * @constructor */ diff --git a/apps/user_ldap/js/wizard/wizardDetectorBaseDN.js b/apps/user_ldap/js/wizard/wizardDetectorBaseDN.js index 70b9923e58d..f81d342b692 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorBaseDN.js +++ b/apps/user_ldap/js/wizard/wizardDetectorBaseDN.js @@ -11,7 +11,7 @@ OCA = OCA || {}; /** * @classdesc a Base DN Detector. It executes the auto-detection of the base - * DN by the ownCloud server, if requirements are met. + * DN by the Nextcloud server, if requirements are met. * * @constructor */ diff --git a/apps/user_ldap/js/wizard/wizardDetectorFilterGroup.js b/apps/user_ldap/js/wizard/wizardDetectorFilterGroup.js index cca889839e4..f56550a919e 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorFilterGroup.js +++ b/apps/user_ldap/js/wizard/wizardDetectorFilterGroup.js @@ -11,7 +11,7 @@ OCA = OCA || {}; /** * @classdesc a Port Detector. It executes the auto-detection of the port - * by the ownCloud server, if requirements are met. + * by the Nextcloud server, if requirements are met. * * @constructor */ diff --git a/apps/user_ldap/js/wizard/wizardDetectorFilterLogin.js b/apps/user_ldap/js/wizard/wizardDetectorFilterLogin.js index e796b81e0eb..7012847193b 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorFilterLogin.js +++ b/apps/user_ldap/js/wizard/wizardDetectorFilterLogin.js @@ -11,7 +11,7 @@ OCA = OCA || {}; /** * @classdesc a Port Detector. It executes the auto-detection of the port - * by the ownCloud server, if requirements are met. + * by the Nextcloud server, if requirements are met. * * @constructor */ diff --git a/apps/user_ldap/js/wizard/wizardDetectorFilterUser.js b/apps/user_ldap/js/wizard/wizardDetectorFilterUser.js index d34e244a1f5..3cd2935bd87 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorFilterUser.js +++ b/apps/user_ldap/js/wizard/wizardDetectorFilterUser.js @@ -11,7 +11,7 @@ OCA = OCA || {}; /** * @classdesc a Port Detector. It executes the auto-detection of the port - * by the ownCloud server, if requirements are met. + * by the Nextcloud server, if requirements are met. * * @constructor */ diff --git a/apps/user_ldap/js/wizard/wizardDetectorGeneric.js b/apps/user_ldap/js/wizard/wizardDetectorGeneric.js index fd80018943e..2126828c197 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorGeneric.js +++ b/apps/user_ldap/js/wizard/wizardDetectorGeneric.js @@ -90,7 +90,7 @@ OCA = OCA || {}; }, /** - * processes the result of the ownCloud server + * processes the result of the Nextcloud server * * @param {OCA.LDAP.Wizard.ConfigModel} model * @param {WizardDetectorGeneric} detector diff --git a/apps/user_ldap/js/wizard/wizardDetectorGroupCount.js b/apps/user_ldap/js/wizard/wizardDetectorGroupCount.js index 12d7df7514b..d2f3dd978c5 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorGroupCount.js +++ b/apps/user_ldap/js/wizard/wizardDetectorGroupCount.js @@ -11,7 +11,7 @@ OCA = OCA || {}; /** * @classdesc a Port Detector. It executes the auto-detection of the port - * by the ownCloud server, if requirements are met. + * by the Nextcloud server, if requirements are met. * * @constructor */ diff --git a/apps/user_ldap/js/wizard/wizardDetectorPort.js b/apps/user_ldap/js/wizard/wizardDetectorPort.js index ba075189667..50b1a1b4746 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorPort.js +++ b/apps/user_ldap/js/wizard/wizardDetectorPort.js @@ -11,7 +11,7 @@ OCA = OCA || {}; /** * @classdesc a Port Detector. It executes the auto-detection of the port - * by the ownCloud server, if requirements are met. + * by the Nextcloud server, if requirements are met. * * @constructor */ diff --git a/apps/user_ldap/js/wizard/wizardDetectorSimpleRequestAbstract.js b/apps/user_ldap/js/wizard/wizardDetectorSimpleRequestAbstract.js index 37e41f42a64..8a1da617aa0 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorSimpleRequestAbstract.js +++ b/apps/user_ldap/js/wizard/wizardDetectorSimpleRequestAbstract.js @@ -11,7 +11,7 @@ OCA = OCA || {}; /** * @classdesc a Port Detector. It executes the auto-detection of the port - * by the ownCloud server, if requirements are met. + * by the Nextcloud server, if requirements are met. * * @constructor */ diff --git a/apps/user_ldap/js/wizard/wizardDetectorTestAbstract.js b/apps/user_ldap/js/wizard/wizardDetectorTestAbstract.js index df0b0a2200a..e371dbf0f63 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorTestAbstract.js +++ b/apps/user_ldap/js/wizard/wizardDetectorTestAbstract.js @@ -11,7 +11,7 @@ OCA = OCA || {}; /** * @classdesc a Port Detector. It executes the auto-detection of the port - * by the ownCloud server, if requirements are met. + * by the Nextcloud server, if requirements are met. * * @constructor */ diff --git a/apps/user_ldap/js/wizard/wizardDetectorTestConfiguration.js b/apps/user_ldap/js/wizard/wizardDetectorTestConfiguration.js index 1308c182909..aed99539384 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorTestConfiguration.js +++ b/apps/user_ldap/js/wizard/wizardDetectorTestConfiguration.js @@ -11,7 +11,7 @@ OCA = OCA || {}; /** * @classdesc a Port Detector. It executes the auto-detection of the port - * by the ownCloud server, if requirements are met. + * by the Nextcloud server, if requirements are met. * * @constructor */ diff --git a/apps/user_ldap/js/wizard/wizardTabAdvanced.js b/apps/user_ldap/js/wizard/wizardTabAdvanced.js index d0922bbff32..7d8d0b70269 100644 --- a/apps/user_ldap/js/wizard/wizardTabAdvanced.js +++ b/apps/user_ldap/js/wizard/wizardTabAdvanced.js @@ -332,7 +332,7 @@ OCA = OCA || {}; }, /** - * sets the attribute for the ownCloud user specific home folder location + * sets the attribute for the Nextcloud user specific home folder location * * @param {string} attribute */ diff --git a/apps/user_ldap/js/wizard/wizardTabExpert.js b/apps/user_ldap/js/wizard/wizardTabExpert.js index 7cfd49ba0f6..634d30212ac 100644 --- a/apps/user_ldap/js/wizard/wizardTabExpert.js +++ b/apps/user_ldap/js/wizard/wizardTabExpert.js @@ -65,7 +65,7 @@ OCA = OCA || {}; }, /** - * sets the attribute to be used to create an ownCloud ID (username) + * sets the attribute to be used to create an Nextcloud ID (username) * * @param {string} attribute */ diff --git a/apps/user_ldap/js/wizard/wizardTabGeneric.js b/apps/user_ldap/js/wizard/wizardTabGeneric.js index 4415172a18c..98e26d303b5 100644 --- a/apps/user_ldap/js/wizard/wizardTabGeneric.js +++ b/apps/user_ldap/js/wizard/wizardTabGeneric.js @@ -73,7 +73,7 @@ OCA = OCA || {}; /** * the method can be used to display a different error/information - * message than provided by the ownCloud server response. The concrete + * message than provided by the Nextcloud server response. The concrete * Tab View may optionally implement it. Returning an empty string will * avoid any notification. * diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php index ff95d96ebdb..dbc4f5b0448 100644 --- a/apps/user_ldap/lib/Access.php +++ b/apps/user_ldap/lib/Access.php @@ -407,8 +407,8 @@ class Access extends LDAPUtility implements IUserTools { } /** - * returns the LDAP DN for the given internal ownCloud name of the group - * @param string $name the ownCloud name in question + * returns the LDAP DN for the given internal Nextcloud name of the group + * @param string $name the Nextcloud name in question * @return string|false LDAP DN on success, otherwise false */ public function groupname2dn($name) { @@ -416,8 +416,8 @@ class Access extends LDAPUtility implements IUserTools { } /** - * returns the LDAP DN for the given internal ownCloud name of the user - * @param string $name the ownCloud name in question + * returns the LDAP DN for the given internal Nextcloud name of the user + * @param string $name the Nextcloud name in question * @return string|false with the LDAP DN on success, otherwise false */ public function username2dn($name) { @@ -433,10 +433,10 @@ class Access extends LDAPUtility implements IUserTools { } /** - * returns the internal ownCloud name for the given LDAP DN of the group, false on DN outside of search DN or failure + * returns the internal Nextcloud name for the given LDAP DN of the group, false on DN outside of search DN or failure * @param string $fdn the dn of the group object * @param string $ldapName optional, the display name of the object - * @return string|false with the name to use in ownCloud, false on DN outside of search DN + * @return string|false with the name to use in Nextcloud, false on DN outside of search DN */ public function dn2groupname($fdn, $ldapName = null) { //To avoid bypassing the base DN settings under certain circumstances @@ -489,10 +489,10 @@ class Access extends LDAPUtility implements IUserTools { } /** - * returns the internal ownCloud name for the given LDAP DN of the user, false on DN outside of search DN or failure + * returns the internal Nextcloud name for the given LDAP DN of the user, false on DN outside of search DN or failure * @param string $dn the dn of the user object * @param string $ldapName optional, the display name of the object - * @return string|false with with the name to use in ownCloud + * @return string|false with with the name to use in Nextcloud */ public function dn2username($fdn, $ldapName = null) { //To avoid bypassing the base DN settings under certain circumstances @@ -506,11 +506,11 @@ class Access extends LDAPUtility implements IUserTools { } /** - * returns an internal ownCloud name for the given LDAP DN, false on DN outside of search DN + * returns an internal Nextcloud name for the given LDAP DN, false on DN outside of search DN * @param string $dn the dn of the user object * @param string $ldapName optional, the display name of the object * @param bool $isUser optional, whether it is a user object (otherwise group assumed) - * @return string|false with with the name to use in ownCloud + * @return string|false with with the name to use in Nextcloud */ public function dn2ocname($fdn, $ldapName = null, $isUser = true) { if($isUser) { @@ -521,7 +521,7 @@ class Access extends LDAPUtility implements IUserTools { $nameAttribute = $this->connection->ldapGroupDisplayName; } - //let's try to retrieve the ownCloud name from the mappings table + //let's try to retrieve the Nextcloud name from the mappings table $ocName = $mapper->getNameByDN($fdn); if(is_string($ocName)) { return $ocName; @@ -591,7 +591,7 @@ class Access extends LDAPUtility implements IUserTools { /** * gives back the user names as they are used ownClod internally * @param array $ldapUsers as returned by fetchList() - * @return array an array with the user names to use in ownCloud + * @return array an array with the user names to use in Nextcloud * * gives back the user names as they are used ownClod internally */ @@ -602,7 +602,7 @@ class Access extends LDAPUtility implements IUserTools { /** * gives back the group names as they are used ownClod internally * @param array $ldapGroups as returned by fetchList() - * @return array an array with the group names to use in ownCloud + * @return array an array with the group names to use in Nextcloud * * gives back the group names as they are used ownClod internally */ @@ -649,12 +649,12 @@ class Access extends LDAPUtility implements IUserTools { } } } - return $ownCloudNames; + return $NextcloudNames; } /** * caches the user display name - * @param string $ocName the internal ownCloud username + * @param string $ocName the internal Nextcloud username * @param string|false $home the home directory path */ public function cacheUserHome($ocName, $home) { @@ -664,7 +664,7 @@ class Access extends LDAPUtility implements IUserTools { /** * caches a user as existing - * @param string $ocName the internal ownCloud username + * @param string $ocName the internal Nextcloud username */ public function cacheUserExists($ocName) { $this->connection->writeToCache('userExists'.$ocName, true); @@ -672,7 +672,7 @@ class Access extends LDAPUtility implements IUserTools { /** * caches the user display name - * @param string $ocName the internal ownCloud username + * @param string $ocName the internal Nextcloud username * @param string $displayName the display name * @param string $displayName2 the second display name */ @@ -687,9 +687,9 @@ class Access extends LDAPUtility implements IUserTools { } /** - * creates a unique name for internal ownCloud use for users. Don't call it directly. + * creates a unique name for internal Nextcloud use for users. Don't call it directly. * @param string $name the display name of the object - * @return string|false with with the name to use in ownCloud or false if unsuccessful + * @return string|false with with the name to use in Nextcloud or false if unsuccessful * * Instead of using this method directly, call * createAltInternalOwnCloudName($name, true) @@ -709,9 +709,9 @@ class Access extends LDAPUtility implements IUserTools { } /** - * creates a unique name for internal ownCloud use for groups. Don't call it directly. + * creates a unique name for internal Nextcloud use for groups. Don't call it directly. * @param string $name the display name of the object - * @return string|false with with the name to use in ownCloud or false if unsuccessful. + * @return string|false with with the name to use in Nextcloud or false if unsuccessful. * * Instead of using this method directly, call * createAltInternalOwnCloudName($name, false) @@ -747,10 +747,10 @@ class Access extends LDAPUtility implements IUserTools { } /** - * creates a unique name for internal ownCloud use. + * creates a unique name for internal Nextcloud use. * @param string $name the display name of the object * @param boolean $isUser whether name should be created for a user (true) or a group (false) - * @return string|false with with the name to use in ownCloud or false if unsuccessful + * @return string|false with with the name to use in Nextcloud or false if unsuccessful */ private function createAltInternalOwnCloudName($name, $isUser) { $originalTTL = $this->connection->ldapCacheTTL; @@ -1141,7 +1141,7 @@ class Access extends LDAPUtility implements IUserTools { $offset = $savedoffset; // if we're here, probably no connection resource is returned. - // to make ownCloud behave nicely, we simply give back an empty array. + // to make Nextcloud behave nicely, we simply give back an empty array. if(is_null($findings)) { return array(); } diff --git a/apps/user_ldap/lib/Command/CheckUser.php b/apps/user_ldap/lib/Command/CheckUser.php index 236d2e51d0b..af2806e8cc6 100644 --- a/apps/user_ldap/lib/Command/CheckUser.php +++ b/apps/user_ldap/lib/Command/CheckUser.php @@ -69,7 +69,7 @@ class CheckUser extends Command { ->addArgument( 'ocName', InputArgument::REQUIRED, - 'the user name as used in ownCloud' + 'the user name as used in Nextcloud' ) ->addOption( 'force', @@ -102,7 +102,7 @@ class CheckUser extends Command { /** * checks whether a user is actually mapped - * @param string $ocName the username as used in ownCloud + * @param string $ocName the username as used in Nextcloud * @throws \Exception * @return true */ diff --git a/apps/user_ldap/lib/Command/ShowRemnants.php b/apps/user_ldap/lib/Command/ShowRemnants.php index 0e6aea6a5ab..365c8967ee0 100644 --- a/apps/user_ldap/lib/Command/ShowRemnants.php +++ b/apps/user_ldap/lib/Command/ShowRemnants.php @@ -54,7 +54,7 @@ class ShowRemnants extends Command { protected function configure() { $this ->setName('ldap:show-remnants') - ->setDescription('shows which users are not available on LDAP anymore, but have remnants in ownCloud.') + ->setDescription('shows which users are not available on LDAP anymore, but have remnants in Nextcloud.') ->addOption('json', null, InputOption::VALUE_NONE, 'return JSON array instead of pretty table.'); } @@ -67,7 +67,7 @@ class ShowRemnants extends Command { /** @var \Symfony\Component\Console\Helper\Table $table */ $table = new Table($output); $table->setHeaders(array( - 'ownCloud name', 'Display Name', 'LDAP UID', 'LDAP DN', 'Last Login', + 'Nextcloud name', 'Display Name', 'LDAP UID', 'LDAP DN', 'Last Login', 'Dir', 'Sharer')); $rows = array(); $resultSet = $this->dui->getUsers(); diff --git a/apps/user_ldap/lib/FilesystemHelper.php b/apps/user_ldap/lib/FilesystemHelper.php index 689fcfeda7e..e5b0a9ecef3 100644 --- a/apps/user_ldap/lib/FilesystemHelper.php +++ b/apps/user_ldap/lib/FilesystemHelper.php @@ -25,7 +25,7 @@ namespace OCA\User_LDAP; /** - * @brief wraps around static ownCloud core methods + * @brief wraps around static Nextcloud core methods */ class FilesystemHelper { @@ -39,7 +39,7 @@ class FilesystemHelper { /** * @brief initializes the filesystem for the given user - * @param string $uid the ownCloud username of the user + * @param string $uid the Nextcloud username of the user */ public function setup($uid) { \OC_Util::setupFS($uid); diff --git a/apps/user_ldap/lib/Group_LDAP.php b/apps/user_ldap/lib/Group_LDAP.php index fb9920d3cc2..f1ea831e485 100644 --- a/apps/user_ldap/lib/Group_LDAP.php +++ b/apps/user_ldap/lib/Group_LDAP.php @@ -267,7 +267,7 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface { } /** - * translates a primary group ID into an ownCloud internal name + * translates a primary group ID into an Nextcloud internal name * @param string $gid as given by primaryGroupID on AD * @param string $dn a DN that belongs to the same domain as the group * @return string|bool @@ -296,7 +296,7 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface { $dn = $result[0]['dn'][0]; //and now the group name - //NOTE once we have separate ownCloud group IDs and group names we can + //NOTE once we have separate Nextcloud group IDs and group names we can //directly read the display name attribute instead of the DN $name = $this->access->dn2groupname($dn); diff --git a/apps/user_ldap/lib/ILDAPWrapper.php b/apps/user_ldap/lib/ILDAPWrapper.php index e2089fa8a47..4034d0baea4 100644 --- a/apps/user_ldap/lib/ILDAPWrapper.php +++ b/apps/user_ldap/lib/ILDAPWrapper.php @@ -196,7 +196,7 @@ interface ILDAPWrapper { */ public function unbind($link); - //additional required methods in ownCloud + //additional required methods in Nextcloud /** * Checks whether the server supports LDAP diff --git a/apps/user_ldap/lib/LogWrapper.php b/apps/user_ldap/lib/LogWrapper.php index dd05b58666d..af5323565f8 100644 --- a/apps/user_ldap/lib/LogWrapper.php +++ b/apps/user_ldap/lib/LogWrapper.php @@ -25,7 +25,7 @@ namespace OCA\User_LDAP; /** - * @brief wraps around static ownCloud core methods + * @brief wraps around static Nextcloud core methods */ class LogWrapper { protected $app = 'user_ldap'; diff --git a/apps/user_ldap/lib/User/Manager.php b/apps/user_ldap/lib/User/Manager.php index 1a9138176b0..18430a90cc7 100644 --- a/apps/user_ldap/lib/User/Manager.php +++ b/apps/user_ldap/lib/User/Manager.php @@ -175,7 +175,7 @@ class Manager { /** * Checks whether the specified user is marked as deleted - * @param string $id the ownCloud user name + * @param string $id the Nextcloud user name * @return bool */ public function isDeletedUser($id) { @@ -198,7 +198,7 @@ class Manager { } /** - * @brief returns a User object by it's ownCloud username + * @brief returns a User object by it's Nextcloud username * @param string $id the DN or username of the user * @return \OCA\User_LDAP\User\User|\OCA\User_LDAP\User\OfflineUser|null */ @@ -215,7 +215,7 @@ class Manager { } /** - * @brief returns a User object by it's DN or ownCloud username + * @brief returns a User object by it's DN or Nextcloud username * @param string $id the DN or username of the user * @return \OCA\User_LDAP\User\User|\OCA\User_LDAP\User\OfflineUser|null * @throws \Exception when connection could not be established diff --git a/apps/user_ldap/lib/User/OfflineUser.php b/apps/user_ldap/lib/User/OfflineUser.php index 4ee3bd09911..0e60a29514e 100644 --- a/apps/user_ldap/lib/User/OfflineUser.php +++ b/apps/user_ldap/lib/User/OfflineUser.php @@ -112,7 +112,7 @@ class OfflineUser { } /** - * getter for ownCloud internal name + * getter for Nextcloud internal name * @return string */ public function getOCName() { diff --git a/apps/user_ldap/lib/User/User.php b/apps/user_ldap/lib/User/User.php index 5d4af1fd09c..4419c4983d4 100644 --- a/apps/user_ldap/lib/User/User.php +++ b/apps/user_ldap/lib/User/User.php @@ -251,7 +251,7 @@ class User { } /** - * @brief returns the ownCloud internal username of the user + * @brief returns the Nextcloud internal username of the user * @return string */ public function getUsername() { @@ -429,7 +429,7 @@ class User { } /** - * fetches the email from LDAP and stores it as ownCloud user value + * fetches the email from LDAP and stores it as Nextcloud user value * @param string $valueFromLDAP if known, to save an LDAP read request * @return null */ @@ -462,7 +462,7 @@ class User { * Overall process goes as follow: * 1. fetch the quota from LDAP and check if it's parseable with the "verifyQuotaValue" function * 2. if the value can't be fetched, is empty or not parseable, use the default LDAP quota - * 3. if the default LDAP quota can't be parsed, use the ownCloud's default quota (use 'default') + * 3. if the default LDAP quota can't be parsed, use the Nextcloud's default quota (use 'default') * 4. check if the target user exists and set the quota for the user. * * In order to improve performance and prevent an unwanted extra LDAP call, the $valueFromLDAP @@ -470,10 +470,10 @@ class User { * quota for the user coming from the LDAP server (step 1 of the process) It can be useful to * fetch all the user's attributes in one call and use the fetched values in this function. * The expected value for that parameter is a string describing the quota for the user. Valid - * values are 'none' (unlimited), 'default' (the ownCloud's default quota), '1234' (quota in + * values are 'none' (unlimited), 'default' (the Nextcloud's default quota), '1234' (quota in * bytes), '1234 MB' (quota in MB - check the \OC_Helper::computerFileSize method for more info) * - * fetches the quota from LDAP and stores it as ownCloud user value + * fetches the quota from LDAP and stores it as Nextcloud user value * @param string $valueFromLDAP the quota attribute's value can be passed, * to save the readAttribute request * @return null @@ -541,7 +541,7 @@ class User { } /** - * @brief attempts to get an image from LDAP and sets it as ownCloud avatar + * @brief attempts to get an image from LDAP and sets it as Nextcloud avatar * @return null */ public function updateAvatar() { @@ -558,7 +558,7 @@ class User { } /** - * @brief sets an image as ownCloud avatar + * @brief sets an image as Nextcloud avatar * @return null */ private function setOwnCloudAvatar() { diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php index cfd2450a122..44de3f5da40 100644 --- a/apps/user_ldap/lib/User_LDAP.php +++ b/apps/user_ldap/lib/User_LDAP.php @@ -60,8 +60,8 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn } /** - * checks whether the user is allowed to change his avatar in ownCloud - * @param string $uid the ownCloud user name + * checks whether the user is allowed to change his avatar in Nextcloud + * @param string $uid the Nextcloud user name * @return boolean either the user can or cannot */ public function canChangeAvatar($uid) { @@ -244,7 +244,7 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn /** * checks whether a user is still available on LDAP * - * @param string|\OCA\User_LDAP\User\User $user either the ownCloud user + * @param string|\OCA\User_LDAP\User\User $user either the Nextcloud user * name or an instance of that user * @return bool * @throws \Exception diff --git a/apps/user_ldap/lib/User_Proxy.php b/apps/user_ldap/lib/User_Proxy.php index 2cdf401880e..6417841f245 100644 --- a/apps/user_ldap/lib/User_Proxy.php +++ b/apps/user_ldap/lib/User_Proxy.php @@ -163,7 +163,7 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, /** * check if a user exists on LDAP - * @param string|\OCA\User_LDAP\User\User $user either the ownCloud user + * @param string|\OCA\User_LDAP\User\User $user either the Nextcloud user * name or an instance of that user * @return boolean */ @@ -225,8 +225,8 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, } /** - * checks whether the user is allowed to change his avatar in ownCloud - * @param string $uid the ownCloud user name + * checks whether the user is allowed to change his avatar in Nextcloud + * @param string $uid the Nextcloud user name * @return boolean either the user can or cannot */ public function canChangeAvatar($uid) { diff --git a/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php b/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php index 918dad6d5d0..0dc80e87238 100644 --- a/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php +++ b/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php @@ -87,7 +87,7 @@ class ExceptionOnLostConnection { } /** - * prepares everything for the test run. Includes loading ownCloud and + * prepares everything for the test run. Includes loading Nextcloud and * the LDAP backend, as well as getting information about toxiproxy. * Also creates an instance of the LDAP class, the testee * diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php index 2200ac327a1..9db4cafea41 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php @@ -79,7 +79,7 @@ class IntegrationTestUserHome extends AbstractIntegrationTest { /** * homeDirectory on LDAP is empty. Return values of getHome should be - * identical to user name, following ownCloud default. + * identical to user name, following Nextcloud default. * * @return bool */ @@ -135,7 +135,7 @@ class IntegrationTestUserHome extends AbstractIntegrationTest { /** * homeDirectory on LDAP is set to "attr:" which is effectively empty. - * Return values of getHome should be ownCloud default. + * Return values of getHome should be Nextcloud default. * * @return bool */ diff --git a/bower.json b/bower.json index 72f525f985c..9153272fb03 100644 --- a/bower.json +++ b/bower.json @@ -13,7 +13,7 @@ "tests" ], "dependencies": { - "blueimp-md5": "~1.1.0", + "blueimp-md5": "^2.7.0", "handlebars": "^4.0.5", "jcrop": "~0.9.12", "jquery": "~2.2.0", diff --git a/build/integration/features/bootstrap/Auth.php b/build/integration/features/bootstrap/Auth.php index fd1b2e05a80..7addcab5f97 100644 --- a/build/integration/features/bootstrap/Auth.php +++ b/build/integration/features/bootstrap/Auth.php @@ -22,6 +22,7 @@ use GuzzleHttp\Client; use GuzzleHttp\Exception\ClientException; +use GuzzleHttp\Exception\ServerException; use GuzzleHttp\Cookie\CookieJar; require __DIR__ . '/../../vendor/autoload.php'; @@ -68,6 +69,8 @@ trait Auth { $this->response = $this->client->send($request); } catch (ClientException $ex) { $this->response = $ex->getResponse(); + } catch (ServerException $ex) { + $this->response = $ex->getResponse(); } } diff --git a/build/integration/features/bootstrap/BasicStructure.php b/build/integration/features/bootstrap/BasicStructure.php index ec23916d614..9e7aa272d0a 100644 --- a/build/integration/features/bootstrap/BasicStructure.php +++ b/build/integration/features/bootstrap/BasicStructure.php @@ -35,6 +35,7 @@ require __DIR__ . '/../../vendor/autoload.php'; trait BasicStructure { use Auth; + use Trashbin; /** @var string */ private $currentUser = ''; @@ -378,16 +379,6 @@ trait BasicStructure { } /** - * @When User :user empties trashbin - * @param string $user - */ - public function emptyTrashbin($user) { - $body = new \Behat\Gherkin\Node\TableNode([['allfiles', 'true'], ['dir', '%2F']]); - $this->sendingToWithDirectUrl('POST', "/index.php/apps/files_trashbin/ajax/delete.php", $body); - $this->theHTTPStatusCodeShouldBe('200'); - } - - /** * @When Sleep for :seconds seconds * @param int $seconds */ diff --git a/build/integration/features/bootstrap/CommandLine.php b/build/integration/features/bootstrap/CommandLine.php index c0caf5f8e6e..e880cfe24ab 100644 --- a/build/integration/features/bootstrap/CommandLine.php +++ b/build/integration/features/bootstrap/CommandLine.php @@ -35,7 +35,7 @@ trait CommandLine { /** * Invokes an OCC command * - * @param string OCC command, the part behind "occ". For example: "files:transfer-ownership" + * @param []string $args OCC command, the part behind "occ". For example: "files:transfer-ownership" * @return int exit code */ public function runOcc($args = []) { @@ -54,6 +54,12 @@ trait CommandLine { $this->lastStdOut = stream_get_contents($pipes[1]); $this->lastStdErr = stream_get_contents($pipes[2]); $this->lastCode = proc_close($process); + + // Clean opcode cache + $client = new GuzzleHttp\Client(); + $request = $client->createRequest('GET', 'http://localhost:8080/apps/testing/clean_opcode_cache.php'); + $client->send($request); + return $this->lastCode; } diff --git a/build/integration/features/bootstrap/CommandLineContext.php b/build/integration/features/bootstrap/CommandLineContext.php index c8253966cdb..9a48c8517c7 100644 --- a/build/integration/features/bootstrap/CommandLineContext.php +++ b/build/integration/features/bootstrap/CommandLineContext.php @@ -36,6 +36,20 @@ class CommandLineContext implements \Behat\Behat\Context\Context { $this->remoteBaseUrl = $baseUrl; } + /** + * @Given Maintenance mode is enabled + */ + public function maintenanceModeIsEnabled() { + $this->runOcc(['maintenance:mode', '--on']); + } + + /** + * @Then Maintenance mode is disabled + */ + public function maintenanceModeIsDisabled() { + $this->runOcc(['maintenance:mode', '--off']); + } + /** @BeforeScenario */ public function gatherContexts(BeforeScenarioScope $scope) { $environment = $scope->getEnvironment(); diff --git a/build/integration/features/bootstrap/Trashbin.php b/build/integration/features/bootstrap/Trashbin.php new file mode 100644 index 00000000000..c7d3a338ac1 --- /dev/null +++ b/build/integration/features/bootstrap/Trashbin.php @@ -0,0 +1,120 @@ +<?php +/** + * @author Vincent Petry <pvince81@owncloud.com> + * + * @copyright Copyright (c) 2017, ownCloud GmbH. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +use GuzzleHttp\Client; +use GuzzleHttp\Message\ResponseInterface; + +require __DIR__ . '/../../vendor/autoload.php'; + +/** + * Trashbin functions + */ +trait Trashbin { + + /** + * @When User :user empties trashbin + * @param string $user user + */ + public function emptyTrashbin($user) { + $this->asAn($user); + $body = new \Behat\Gherkin\Node\TableNode([['allfiles', 'true'], ['dir', '%2F']]); + $this->sendingToWithDirectUrl('POST', "/index.php/apps/files_trashbin/ajax/delete.php", $body); + $this->theHTTPStatusCodeShouldBe('200'); + } + + /** + * List trashbin folder + * + * @param string $user user + * @param string $path path + * @return array response + */ + public function listTrashbinFolder($user, $path){ + $this->asAn($user); + $params = '?dir=' . rawurlencode('/' . trim($path, '/')); + $this->sendingToWithDirectUrl('GET', '/index.php/apps/files_trashbin/ajax/list.php' . $params, null); + $this->theHTTPStatusCodeShouldBe('200'); + + $response = json_decode($this->response->getBody(), true); + + return $response['data']['files']; + } + + /** + * @Then /^as "([^"]*)" the (file|folder|entry) "([^"]*)" exists in trash$/ + * @param string $user + * @param string $entryText + * @param string $path + */ + public function asTheFileOrFolderExistsInTrash($user, $entryText, $path) { + $path = trim($path, '/'); + $sections = explode('/', $path, 2); + + $firstEntry = $this->findFirstTrashedEntry($user, trim($sections[0], '/')); + + PHPUnit_Framework_Assert::assertNotNull($firstEntry); + + // query was on the main element ? + if (count($sections) === 1) { + // already found, return + return; + } + + $subdir = trim(dirname($sections[1]), '/'); + if ($subdir !== '' && $subdir !== '.') { + $subdir = $firstEntry . '/' . $subdir; + } else { + $subdir = $firstEntry; + } + + $listing = $this->listTrashbinFolder($user, $subdir); + $checkedName = basename($path); + + $found = false; + foreach ($listing as $entry) { + if ($entry['name'] === $checkedName) { + $found = true; + break; + } + } + + PHPUnit_Framework_Assert::assertTrue($found); + } + + /** + * Finds the first trashed entry matching the given name + * + * @param string $name + * @return string|null real entry name with timestamp suffix or null if not found + */ + private function findFirstTrashedEntry($user, $name) { + $listing = $this->listTrashbinFolder($user, '/'); + + foreach ($listing as $entry) { + if ($entry['name'] === $name) { + return $entry['name'] . '.d' . ((int)$entry['mtime'] / 1000); + } + } + + return null; + } +} + diff --git a/build/integration/features/carddav.feature b/build/integration/features/carddav.feature index 9432130066e..57fd8cd7da4 100644 --- a/build/integration/features/carddav.feature +++ b/build/integration/features/carddav.feature @@ -45,7 +45,7 @@ Feature: carddav |Content-Security-Policy|default-src 'none';| |X-Content-Type-Options |nosniff| |X-Download-Options|noopen| - |X-Frame-Options|Sameorigin| + |X-Frame-Options|SAMEORIGIN| |X-Permitted-Cross-Domain-Policies|none| |X-Robots-Tag|none| |X-XSS-Protection|1; mode=block| @@ -60,7 +60,7 @@ Feature: carddav |Content-Security-Policy|default-src 'none';| |X-Content-Type-Options |nosniff| |X-Download-Options|noopen| - |X-Frame-Options|Sameorigin| + |X-Frame-Options|SAMEORIGIN| |X-Permitted-Cross-Domain-Policies|none| |X-Robots-Tag|none| |X-XSS-Protection|1; mode=block| diff --git a/build/integration/features/dav-v2.feature b/build/integration/features/dav-v2.feature index 3e85dc749d0..ad24c9b5931 100644 --- a/build/integration/features/dav-v2.feature +++ b/build/integration/features/dav-v2.feature @@ -26,7 +26,7 @@ Feature: dav-v2 |Content-Security-Policy|default-src 'none';| |X-Content-Type-Options |nosniff| |X-Download-Options|noopen| - |X-Frame-Options|Sameorigin| + |X-Frame-Options|SAMEORIGIN| |X-Permitted-Cross-Domain-Policies|none| |X-Robots-Tag|none| |X-XSS-Protection|1; mode=block| diff --git a/build/integration/features/maintenance-mode.feature b/build/integration/features/maintenance-mode.feature new file mode 100644 index 00000000000..56d3b9c0fb6 --- /dev/null +++ b/build/integration/features/maintenance-mode.feature @@ -0,0 +1,41 @@ +Feature: maintenance-mode + + Background: + Given Maintenance mode is enabled + Then the command was successful + + Scenario: Accessing /index.php with maintenance mode enabled + When requesting "/index.php" with "GET" + Then the HTTP status code should be "503" + Then Maintenance mode is disabled + And the command was successful + + Scenario: Accessing /remote.php/webdav with maintenance mode enabled + When requesting "/remote.php/webdav" with "GET" + Then the HTTP status code should be "503" + Then Maintenance mode is disabled + And the command was successful + + Scenario: Accessing /remote.php/dav with maintenance mode enabled + When requesting "/remote.php/dav" with "GET" + Then the HTTP status code should be "503" + Then Maintenance mode is disabled + And the command was successful + + Scenario: Accessing /ocs/v1.php with maintenance mode enabled + When requesting "/ocs/v1.php" with "GET" + Then the HTTP status code should be "503" + Then Maintenance mode is disabled + And the command was successful + + Scenario: Accessing /ocs/v2.php with maintenance mode enabled + When requesting "/ocs/v2.php" with "GET" + Then the HTTP status code should be "503" + Then Maintenance mode is disabled + And the command was successful + + Scenario: Accessing /public.php/webdav with maintenance mode enabled + When requesting "/public.php/webdav" with "GET" + Then the HTTP status code should be "503" + Then Maintenance mode is disabled + And the command was successful diff --git a/build/integration/features/sharing-v1-part2.feature b/build/integration/features/sharing-v1-part2.feature index 284e5f9a94b..48c18a0b948 100644 --- a/build/integration/features/sharing-v1-part2.feature +++ b/build/integration/features/sharing-v1-part2.feature @@ -705,6 +705,36 @@ Feature: sharing And Updating last share with | publicUpload | true | Then the OCS status code should be "404" + And the HTTP status code should be "200" + + Scenario: deleting file out of a share as recipient creates a backup for the owner + Given As an "admin" + And user "user0" exists + And user "user1" exists + And user "user0" created a folder "/shared" + And User "user0" moved file "/textfile0.txt" to "/shared/shared_file.txt" + And folder "/shared" of user "user0" is shared with user "user1" + When User "user1" deletes file "/shared/shared_file.txt" + Then as "user1" the file "/shared/shared_file.txt" does not exist + And as "user0" the file "/shared/shared_file.txt" does not exist + And as "user0" the file "/shared_file.txt" exists in trash + And as "user1" the file "/shared_file.txt" exists in trash + + Scenario: deleting folder out of a share as recipient creates a backup for the owner + Given As an "admin" + And user "user0" exists + And user "user1" exists + And user "user0" created a folder "/shared" + And user "user0" created a folder "/shared/sub" + And User "user0" moved file "/textfile0.txt" to "/shared/sub/shared_file.txt" + And folder "/shared" of user "user0" is shared with user "user1" + When User "user1" deletes folder "/shared/sub" + Then as "user1" the folder "/shared/sub" does not exist + And as "user0" the folder "/shared/sub" does not exist + And as "user0" the folder "/sub" exists in trash + And as "user0" the file "/sub/shared_file.txt" exists in trash + And as "user1" the folder "/sub" exists in trash + And as "user1" the file "/sub/shared_file.txt" exists in trash Scenario: moving a file into a share as recipient Given As an "admin" diff --git a/build/integration/features/trashbin.feature b/build/integration/features/trashbin.feature new file mode 100644 index 00000000000..adb73f2b5ea --- /dev/null +++ b/build/integration/features/trashbin.feature @@ -0,0 +1,13 @@ +Feature: trashbin + Background: + Given using api version "1" + And using old dav path + And As an "admin" + And app "files_trashbin" is enabled + + Scenario: deleting a file moves it to trashbin + Given As an "admin" + And user "user0" exists + When User "user0" deletes file "/textfile0.txt" + Then as "user0" the file "/textfile0.txt" exists in trash + diff --git a/build/integration/features/webdav-related.feature b/build/integration/features/webdav-related.feature index 775bf2ca882..6aee59036d3 100644 --- a/build/integration/features/webdav-related.feature +++ b/build/integration/features/webdav-related.feature @@ -243,7 +243,7 @@ Feature: webdav-related |Content-Security-Policy|default-src 'none';| |X-Content-Type-Options |nosniff| |X-Download-Options|noopen| - |X-Frame-Options|Sameorigin| + |X-Frame-Options|SAMEORIGIN| |X-Permitted-Cross-Domain-Policies|none| |X-Robots-Tag|none| |X-XSS-Protection|1; mode=block| diff --git a/core/Application.php b/core/Application.php index 33b7dd1b333..6fa301e5906 100644 --- a/core/Application.php +++ b/core/Application.php @@ -30,11 +30,8 @@ namespace OC\Core; -use OC\AppFramework\Utility\SimpleContainer; use OC\Core\Controller\JsController; -use OC\Core\Controller\OCJSController; use OC\Security\IdentityProof\Manager; -use OC\Server; use OCP\AppFramework\App; use OC\Core\Controller\CssController; use OCP\AppFramework\Utility\ITimeFactory; @@ -70,25 +67,6 @@ class Application extends App { $container->query(ITimeFactory::class) ); }); - $container->registerService(OCJSController::class, function () use ($container) { - /** @var Server $server */ - $server = $container->getServer(); - return new OCJSController( - $container->query('appName'), - $server->getRequest(), - $server->getL10N('core'), - // This is required for the theming to overwrite the `OC_Defaults`, see - // https://github.com/nextcloud/server/issues/3148 - $server->getThemingDefaults(), - $server->getAppManager(), - $server->getSession(), - $server->getUserSession(), - $server->getConfig(), - $server->getGroupManager(), - $server->getIniWrapper(), - $server->getURLGenerator() - ); - }); $container->registerService(JsController::class, function () use ($container) { return new JsController( $container->query('AppName'), diff --git a/core/Command/Maintenance/Install.php b/core/Command/Maintenance/Install.php index 86180489fa4..fa6262d24ad 100644 --- a/core/Command/Maintenance/Install.php +++ b/core/Command/Maintenance/Install.php @@ -30,6 +30,7 @@ namespace OC\Core\Command\Maintenance; use InvalidArgumentException; use OC\Setup; use OC\SystemConfig; +use OCP\Defaults; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\QuestionHelper; use Symfony\Component\Console\Input\InputInterface; @@ -70,7 +71,7 @@ class Install extends Command { // validate the environment $server = \OC::$server; $setupHelper = new Setup($this->config, $server->getIniWrapper(), - $server->getL10N('lib'), $server->getThemingDefaults(), $server->getLogger(), + $server->getL10N('lib'), $server->query(Defaults::class), $server->getLogger(), $server->getSecureRandom()); $sysInfo = $setupHelper->getSystemInfo(true); $errors = $sysInfo['errors']; diff --git a/core/Controller/LostController.php b/core/Controller/LostController.php index 4de1cf5eb00..639dd9da574 100644 --- a/core/Controller/LostController.php +++ b/core/Controller/LostController.php @@ -34,6 +34,7 @@ use OCA\Encryption\Exceptions\PrivateKeyMissingException; use \OCP\AppFramework\Controller; use \OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Utility\ITimeFactory; +use OCP\Defaults; use OCP\Encryption\IManager; use \OCP\IURLGenerator; use \OCP\IRequest; @@ -58,7 +59,7 @@ class LostController extends Controller { protected $urlGenerator; /** @var IUserManager */ protected $userManager; - /** @var \OC_Defaults */ + /** @var Defaults */ protected $defaults; /** @var IL10N */ protected $l10n; @@ -82,7 +83,7 @@ class LostController extends Controller { * @param IRequest $request * @param IURLGenerator $urlGenerator * @param IUserManager $userManager - * @param \OC_Defaults $defaults + * @param Defaults $defaults * @param IL10N $l10n * @param IConfig $config * @param ISecureRandom $secureRandom @@ -96,7 +97,7 @@ class LostController extends Controller { IRequest $request, IURLGenerator $urlGenerator, IUserManager $userManager, - \OC_Defaults $defaults, + Defaults $defaults, IL10N $l10n, IConfig $config, ISecureRandom $secureRandom, diff --git a/core/Controller/OCJSController.php b/core/Controller/OCJSController.php index c2292a6733e..9c19f0c0adf 100644 --- a/core/Controller/OCJSController.php +++ b/core/Controller/OCJSController.php @@ -28,6 +28,7 @@ use OCP\App\IAppManager; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataDisplayResponse; +use OCP\Defaults; use OCP\IConfig; use OCP\IGroupManager; use OCP\IL10N; @@ -47,7 +48,7 @@ class OCJSController extends Controller { * @param string $appName * @param IRequest $request * @param IL10N $l - * @param \OC_Defaults $defaults + * @param Defaults $defaults * @param IAppManager $appManager * @param ISession $session * @param IUserSession $userSession @@ -59,7 +60,7 @@ class OCJSController extends Controller { public function __construct($appName, IRequest $request, IL10N $l, - \OC_Defaults $defaults, + Defaults $defaults, IAppManager $appManager, ISession $session, IUserSession $userSession, diff --git a/core/js/core.json b/core/js/core.json index e03d4cce190..4dc257c59c0 100644 --- a/core/js/core.json +++ b/core/js/core.json @@ -6,7 +6,7 @@ "underscore/underscore.js", "moment/min/moment-with-locales.min.js", "handlebars/handlebars.js", - "blueimp-md5/js/md5.js", + "blueimp-md5/js/md5.min.js", "bootstrap/js/tooltip.js", "backbone/backbone.js", "es6-promise/dist/es6-promise.js", diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js index a9945b594e1..6903dd57c33 100644 --- a/core/js/sharedialogshareelistview.js +++ b/core/js/sharedialogshareelistview.js @@ -190,6 +190,8 @@ var shareWithDisplayName = this.model.getShareWithDisplayName(shareIndex); var shareWithTitle = ''; var shareType = this.model.getShareType(shareIndex); + var sharedBy = this.model.getSharedBy(shareIndex); + var sharedByDisplayName = this.model.getSharedByDisplayName(shareIndex); var hasPermissionOverride = {}; if (shareType === OC.Share.SHARE_TYPE_GROUP) { @@ -211,6 +213,17 @@ shareWithTitle = shareWith; } + if (sharedBy !== oc_current_user) { + var empty = shareWithTitle === ''; + if (!empty) { + shareWithTitle += ' ('; + } + shareWithTitle += t('core', 'shared by {sharer}', {sharer: sharedByDisplayName}); + if (!empty) { + shareWithTitle += ')'; + } + } + var share = this.model.get('shares')[shareIndex]; var password = share.password; var hasPassword = password !== null && password !== ''; diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js index 6bb8d75b91f..bff006f7ef3 100644 --- a/core/js/shareitemmodel.js +++ b/core/js/shareitemmodel.js @@ -47,6 +47,7 @@ * @property {Date} expiration optional? * @property {number} stime optional? * @property {string} uid_owner + * @property {string} displayname_owner */ /** @@ -408,6 +409,32 @@ }, /** + * @param shareIndex + * @returns {string} + */ + getSharedBy: function(shareIndex) { + /** @type OC.Share.Types.ShareInfo **/ + var share = this.get('shares')[shareIndex]; + if(!_.isObject(share)) { + throw "Unknown Share"; + } + return share.uid_owner; + }, + + /** + * @param shareIndex + * @returns {string} + */ + getSharedByDisplayName: function(shareIndex) { + /** @type OC.Share.Types.ShareInfo **/ + var share = this.get('shares')[shareIndex]; + if(!_.isObject(share)) { + throw "Unknown Share"; + } + return share.displayname_owner; + }, + + /** * returns the array index of a sharee for a provided shareId * * @param shareId diff --git a/core/l10n/el.js b/core/l10n/el.js index 32daae5dcab..396bc4a48d6 100644 --- a/core/l10n/el.js +++ b/core/l10n/el.js @@ -14,10 +14,10 @@ OC.L10N.register( "No crop data provided" : "Δεν δόθηκαν δεδομένα περικοπής", "No valid crop data provided" : "Έχουν δοθεί μη έγκυρα δεδομένα περικοπής", "Crop is not square" : "Η περικοπή δεν εχει τετραγωνικό σχήμα", - "Couldn't reset password because the token is invalid" : "Αδυναμία επαναφοράς κωδικού πρόσβασης καθώς το διακριτικό είναι άκυρο", - "Couldn't reset password because the token is expired" : "Αδυναμία επαναφοράς κωδικού πρόσβασης επειδή το διακριτικό έχει λήξει", + "Couldn't reset password because the token is invalid" : "Αδυναμία επαναφοράς συνθηματικού λόγω μη έγκυρου διακριτικού", + "Couldn't reset password because the token is expired" : "Αδυναμία επαναφοράς συνθηματικού επειδή το διακριτικό έχει λήξει", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς γιατί δεν υπάρχει διεύθυνση ηλ. αλληλογραφίας για αυτόν τον χρήστη. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.", - "%s password reset" : "%s επαναφορά κωδικού πρόσβασης", + "%s password reset" : "%s επαναφορά συνθηματικού", "Couldn't send reset email. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.", "Couldn't send reset email. Please make sure your username is correct." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ ελέγξτε ότι το όνομα χρήστη σας είναι ορθό.", "Preparing update" : "Προετοιμασία ενημέρωσης", @@ -68,12 +68,12 @@ OC.L10N.register( "No files in here" : "Δεν υπάρχουν αρχεία", "Choose" : "Επιλέξτε", "Error loading file picker template: {error}" : "Σφάλμα κατά την φόρτωση του προτύπου του επιλογέα αρχείων: {σφάλμα}", - "Ok" : "Οκ", - "Error loading message template: {error}" : "Σφάλμα φόρτωσης προτύπου μηνυμάτων: {σφάλμα}", + "Ok" : "Εντάξει", + "Error loading message template: {error}" : "Σφάλμα φόρτωσης προτύπου μηνυμάτων: {error}", "read-only" : "μόνο για ανάγνωση", "_{count} file conflict_::_{count} file conflicts_" : ["{count} αρχείο διαφέρει","{count} αρχεία είναι σε διένεξη"], "One file conflict" : "Ένα αρχείο είναι σε διένεξη", - "New Files" : "Νέα Αρχεία", + "New Files" : "Νέα αρχεία", "Already existing files" : "Ήδη υπάρχοντα αρχεία", "Which files do you want to keep?" : "Ποια αρχεία θέλετε να κρατήσετε;", "If you select both versions, the copied file will have a number added to its name." : "Εάν επιλέξετε και τις δυο εκδοχές, ένας αριθμός θα προστεθεί στο αντιγραφόμενο αρχείο.", diff --git a/core/l10n/el.json b/core/l10n/el.json index 6c08bf517f3..f9f5ac01efc 100644 --- a/core/l10n/el.json +++ b/core/l10n/el.json @@ -12,10 +12,10 @@ "No crop data provided" : "Δεν δόθηκαν δεδομένα περικοπής", "No valid crop data provided" : "Έχουν δοθεί μη έγκυρα δεδομένα περικοπής", "Crop is not square" : "Η περικοπή δεν εχει τετραγωνικό σχήμα", - "Couldn't reset password because the token is invalid" : "Αδυναμία επαναφοράς κωδικού πρόσβασης καθώς το διακριτικό είναι άκυρο", - "Couldn't reset password because the token is expired" : "Αδυναμία επαναφοράς κωδικού πρόσβασης επειδή το διακριτικό έχει λήξει", + "Couldn't reset password because the token is invalid" : "Αδυναμία επαναφοράς συνθηματικού λόγω μη έγκυρου διακριτικού", + "Couldn't reset password because the token is expired" : "Αδυναμία επαναφοράς συνθηματικού επειδή το διακριτικό έχει λήξει", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς γιατί δεν υπάρχει διεύθυνση ηλ. αλληλογραφίας για αυτόν τον χρήστη. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.", - "%s password reset" : "%s επαναφορά κωδικού πρόσβασης", + "%s password reset" : "%s επαναφορά συνθηματικού", "Couldn't send reset email. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.", "Couldn't send reset email. Please make sure your username is correct." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ ελέγξτε ότι το όνομα χρήστη σας είναι ορθό.", "Preparing update" : "Προετοιμασία ενημέρωσης", @@ -66,12 +66,12 @@ "No files in here" : "Δεν υπάρχουν αρχεία", "Choose" : "Επιλέξτε", "Error loading file picker template: {error}" : "Σφάλμα κατά την φόρτωση του προτύπου του επιλογέα αρχείων: {σφάλμα}", - "Ok" : "Οκ", - "Error loading message template: {error}" : "Σφάλμα φόρτωσης προτύπου μηνυμάτων: {σφάλμα}", + "Ok" : "Εντάξει", + "Error loading message template: {error}" : "Σφάλμα φόρτωσης προτύπου μηνυμάτων: {error}", "read-only" : "μόνο για ανάγνωση", "_{count} file conflict_::_{count} file conflicts_" : ["{count} αρχείο διαφέρει","{count} αρχεία είναι σε διένεξη"], "One file conflict" : "Ένα αρχείο είναι σε διένεξη", - "New Files" : "Νέα Αρχεία", + "New Files" : "Νέα αρχεία", "Already existing files" : "Ήδη υπάρχοντα αρχεία", "Which files do you want to keep?" : "Ποια αρχεία θέλετε να κρατήσετε;", "If you select both versions, the copied file will have a number added to its name." : "Εάν επιλέξετε και τις δυο εκδοχές, ένας αριθμός θα προστεθεί στο αντιγραφόμενο αρχείο.", diff --git a/core/l10n/es_MX.js b/core/l10n/es_MX.js index b3735802174..3ce0e3f0821 100644 --- a/core/l10n/es_MX.js +++ b/core/l10n/es_MX.js @@ -130,11 +130,18 @@ OC.L10N.register( "Send" : "Enviar", "Shared with you and the group {group} by {owner}" : "Compartido con usted y el grupo {group} por {owner}", "Shared with you by {owner}" : "Compartido con usted por {owner}", + "Choose a password for the mail share" : "Establecer una contraseña para el elemento compartido por correo", "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} ha compatido mediante una liga", "group" : "grupo", "remote" : "remoto", "email" : "correo electrónico", "Unshare" : "Dejar de compartir", + "Can reshare" : "Puede volver a compartir", + "Can edit" : "Puede editar", + "Can create" : "Puede crear", + "Can change" : "Puede cambiar", + "Can delete" : "Puede borrar", + "Access control" : "Control de acceso", "Could not unshare" : "No fue posible dejar de compartir", "Share details could not be loaded for this item." : "Los detalles del recurso compartido no se pudieron cargar para este elemento. ", "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Se requiere de la menos {count} caracter para el auto completar","Se requieren de la menos {count} caracteres para el auto completar"], diff --git a/core/l10n/es_MX.json b/core/l10n/es_MX.json index 012d6d6796d..e6995e3f7e5 100644 --- a/core/l10n/es_MX.json +++ b/core/l10n/es_MX.json @@ -128,11 +128,18 @@ "Send" : "Enviar", "Shared with you and the group {group} by {owner}" : "Compartido con usted y el grupo {group} por {owner}", "Shared with you by {owner}" : "Compartido con usted por {owner}", + "Choose a password for the mail share" : "Establecer una contraseña para el elemento compartido por correo", "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} ha compatido mediante una liga", "group" : "grupo", "remote" : "remoto", "email" : "correo electrónico", "Unshare" : "Dejar de compartir", + "Can reshare" : "Puede volver a compartir", + "Can edit" : "Puede editar", + "Can create" : "Puede crear", + "Can change" : "Puede cambiar", + "Can delete" : "Puede borrar", + "Access control" : "Control de acceso", "Could not unshare" : "No fue posible dejar de compartir", "Share details could not be loaded for this item." : "Los detalles del recurso compartido no se pudieron cargar para este elemento. ", "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Se requiere de la menos {count} caracter para el auto completar","Se requieren de la menos {count} caracteres para el auto completar"], diff --git a/core/l10n/fi.js b/core/l10n/fi.js index e8ada83ec31..983c3ead49e 100644 --- a/core/l10n/fi.js +++ b/core/l10n/fi.js @@ -97,7 +97,7 @@ OC.L10N.register( "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Jotkin tiedostot eivät ole läpäisseet eheystarkistusta. Lisätietoa ongelman korjaamiseksi on <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ohjeissamme</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listaa virheelliset tiedostot…</a> / <a href=\"{rescanEndpoint}\">Uudelleen skannaa…</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 ei ole oikein määritelty. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Suosittelemme paremman suorituskyvyn saavuttamiseksi ↗</a> käyttämään seuraavia asetuksia <code>php.ini</code>-asetustiedostossa:", "Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa", - "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datahakemistosi ja tiedostosi ovat luultavasti käytettävissä suoraan Internetistä. .htaccess-tiedosto ei toimi oikein. Suosittelemme määrittämään HTTP-palvelimen asetukset siten, ettei datahakemisto ole suoraan käytettävissä Internetistä tai siirtämään datahakemiston HTTP-palvelimen juurihakemiston ulkopuolelle.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Data-hakemistosi ja tiedostosi ovat luultavasti käytettävissä suoraan Internetistä. .htaccess-tiedosto ei toimi oikein. Suosittelemme määrittämään HTTP-palvelimen asetukset siten, ettei data-hakemisto ole suoraan käytettävissä Internetistä tai siirtämään data-hakemiston HTTP-palvelimen juurihakemiston ulkopuolelle.", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-otsaketta \"{header}\" ei ole määritetty vastaamaan arvoa \"{expected}\". Kyseessä on mahdollinen tietoturvaan tai -suojaan liittyvä riski, joten suosittelemme muuttamaan asetuksen arvoa.", "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>." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritelty vähintään \"{seconds}\" sekuntiin. Paremman tietoturvan vuoksi suosittelemme määrittelemään HSTS:n, kuten <a href=\"{docUrl}\" rel=\"noreferrer\">tietoturvavinkeissämme</a> neuvotaan.", "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>." : "Käytät sivustoa HTTP-yhteydellä. Suosittelemme asettamaan palvelimen vaatimaan HTTPS-yhteyden, kuten <a href=\"{docUrl}\">tietoturvavinkeissämme</a> neuvotaan.", diff --git a/core/l10n/fi.json b/core/l10n/fi.json index 07e9f6f272e..2f95780356f 100644 --- a/core/l10n/fi.json +++ b/core/l10n/fi.json @@ -95,7 +95,7 @@ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Jotkin tiedostot eivät ole läpäisseet eheystarkistusta. Lisätietoa ongelman korjaamiseksi on <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ohjeissamme</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listaa virheelliset tiedostot…</a> / <a href=\"{rescanEndpoint}\">Uudelleen skannaa…</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 ei ole oikein määritelty. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Suosittelemme paremman suorituskyvyn saavuttamiseksi ↗</a> käyttämään seuraavia asetuksia <code>php.ini</code>-asetustiedostossa:", "Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa", - "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datahakemistosi ja tiedostosi ovat luultavasti käytettävissä suoraan Internetistä. .htaccess-tiedosto ei toimi oikein. Suosittelemme määrittämään HTTP-palvelimen asetukset siten, ettei datahakemisto ole suoraan käytettävissä Internetistä tai siirtämään datahakemiston HTTP-palvelimen juurihakemiston ulkopuolelle.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Data-hakemistosi ja tiedostosi ovat luultavasti käytettävissä suoraan Internetistä. .htaccess-tiedosto ei toimi oikein. Suosittelemme määrittämään HTTP-palvelimen asetukset siten, ettei data-hakemisto ole suoraan käytettävissä Internetistä tai siirtämään data-hakemiston HTTP-palvelimen juurihakemiston ulkopuolelle.", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-otsaketta \"{header}\" ei ole määritetty vastaamaan arvoa \"{expected}\". Kyseessä on mahdollinen tietoturvaan tai -suojaan liittyvä riski, joten suosittelemme muuttamaan asetuksen arvoa.", "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>." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritelty vähintään \"{seconds}\" sekuntiin. Paremman tietoturvan vuoksi suosittelemme määrittelemään HSTS:n, kuten <a href=\"{docUrl}\" rel=\"noreferrer\">tietoturvavinkeissämme</a> neuvotaan.", "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>." : "Käytät sivustoa HTTP-yhteydellä. Suosittelemme asettamaan palvelimen vaatimaan HTTPS-yhteyden, kuten <a href=\"{docUrl}\">tietoturvavinkeissämme</a> neuvotaan.", diff --git a/core/l10n/nl.js b/core/l10n/nl.js index 0f2cae739c8..c2ead59138d 100644 --- a/core/l10n/nl.js +++ b/core/l10n/nl.js @@ -132,11 +132,19 @@ OC.L10N.register( "Send" : "Versturen", "Shared with you and the group {group} by {owner}" : "Gedeeld met jou en de groep {group} door {owner}", "Shared with you by {owner}" : "Gedeeld met jou door {owner}", + "Choose a password for the mail share" : "Kies een wachtwoord om gedeelde te mailen", "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} delen via link", "group" : "groep", "remote" : "extern", "email" : "e-mail", "Unshare" : "Delen stoppen", + "Can reshare" : "Kan doordelen", + "Can edit" : "Kan bewerken", + "Can create" : "Kan creëren", + "Can change" : "Kan wijzigen", + "Can delete" : "Kan verwijderen", + "Secure drop (upload only)" : "Veilige drop (alleen uploaden)", + "Access control" : "Toegangscontrole", "Could not unshare" : "Kon delen niet ongedaan maken", "Share details could not be loaded for this item." : "Deel details van dit object kon niet worden geladen.", "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Minimaal {count} karakter benodigd voor automatisch aanvullen","Minimaal {count} karakters benodigd voor automatisch aanvullen"], diff --git a/core/l10n/nl.json b/core/l10n/nl.json index 7ded82d6df3..90c5c02dad9 100644 --- a/core/l10n/nl.json +++ b/core/l10n/nl.json @@ -130,11 +130,19 @@ "Send" : "Versturen", "Shared with you and the group {group} by {owner}" : "Gedeeld met jou en de groep {group} door {owner}", "Shared with you by {owner}" : "Gedeeld met jou door {owner}", + "Choose a password for the mail share" : "Kies een wachtwoord om gedeelde te mailen", "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} delen via link", "group" : "groep", "remote" : "extern", "email" : "e-mail", "Unshare" : "Delen stoppen", + "Can reshare" : "Kan doordelen", + "Can edit" : "Kan bewerken", + "Can create" : "Kan creëren", + "Can change" : "Kan wijzigen", + "Can delete" : "Kan verwijderen", + "Secure drop (upload only)" : "Veilige drop (alleen uploaden)", + "Access control" : "Toegangscontrole", "Could not unshare" : "Kon delen niet ongedaan maken", "Share details could not be loaded for this item." : "Deel details van dit object kon niet worden geladen.", "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Minimaal {count} karakter benodigd voor automatisch aanvullen","Minimaal {count} karakters benodigd voor automatisch aanvullen"], diff --git a/core/templates/404.php b/core/templates/404.php index 79a67b3ce2c..cc45cbeaf5d 100644 --- a/core/templates/404.php +++ b/core/templates/404.php @@ -1,7 +1,7 @@ <?php /** @var $_ array */ /** @var $l \OCP\IL10N */ -/** @var $theme OC_Theme */ +/** @var $theme OCP\Defaults */ // @codeCoverageIgnoreStart if(!isset($_)) {//also provide standalone error page require_once '../../lib/base.php'; diff --git a/core/templates/altmail.php b/core/templates/altmail.php deleted file mode 100644 index 38531d109b7..00000000000 --- a/core/templates/altmail.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -print_unescaped($l->t("Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n", array($_['user_displayname'], $_['filename'], $_['link']))); -if ( isset($_['expiration']) ) { - print_unescaped($l->t("The share will expire on %s.", array($_['expiration']))); - print_unescaped("\n\n"); -} -// TRANSLATORS term at the end of a mail -p($l->t("Cheers!")); -?> - --- -<?php p($theme->getName() . ' - ' . $theme->getSlogan()); ?> -<?php print_unescaped("\n".$theme->getBaseUrl()); diff --git a/core/templates/mail.php b/core/templates/mail.php deleted file mode 100644 index cda33490e85..00000000000 --- a/core/templates/mail.php +++ /dev/null @@ -1,38 +0,0 @@ -<table cellspacing="0" cellpadding="0" border="0" width="100%"> -<tr><td> -<table cellspacing="0" cellpadding="0" border="0" width="600px"> -<tr> -<td colspan="2" bgcolor="<?php p($theme->getColorPrimary());?>"> -<img src="<?php p(\OC::$server->getURLGenerator()->getAbsoluteURL(image_path('', 'logo-mail.png'))); ?>" alt="<?php p($theme->getName()); ?>"/> -</td> -</tr> -<tr><td colspan="2"> </td></tr> -<tr> -<td width="20px"> </td> -<td style="font-weight:normal; font-size:0.8em; line-height:1.2em; font-family:verdana,'arial',sans;"> -<?php -print_unescaped($l->t('Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href="%s">View it!</a><br><br>', array($_['user_displayname'], $_['filename'], $_['link']))); -if ( isset($_['expiration']) ) { - p($l->t("The share will expire on %s.", array($_['expiration']))); - print_unescaped('<br><br>'); -} -// TRANSLATORS term at the end of a mail -p($l->t('Cheers!')); -?> -</td> -</tr> -<tr><td colspan="2"> </td></tr> -<tr> -<td width="20px"> </td> -<td style="font-weight:normal; font-size:0.8em; line-height:1.2em; font-family:verdana,'arial',sans;">--<br> -<?php p($theme->getName()); ?> - -<?php p($theme->getSlogan()); ?> -<br><a href="<?php p($theme->getBaseUrl()); ?>"><?php p($theme->getBaseUrl());?></a> -</td> -</tr> -<tr> -<td colspan="2"> </td> -</tr> -</table> -</td></tr> -</table> diff --git a/core/templates/twofactorselectchallenge.php b/core/templates/twofactorselectchallenge.php index 5cfba8bcb47..431f4c78c22 100644 --- a/core/templates/twofactorselectchallenge.php +++ b/core/templates/twofactorselectchallenge.php @@ -18,13 +18,15 @@ <?php endforeach; ?> </ul> </p> + <p class="two-factor-link"> + <a class="button" <?php print_unescaped($_['logout_attribute']); ?>><?php p($l->t('Cancel log in')) ?></a> + <?php if (!is_null($_['backupProvider'])): ?> + <a class="button" href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.showChallenge', + [ + 'challengeProviderId' => $_['backupProvider']->getId(), + 'redirect_url' => $_['redirect_url'], + ] + )) ?>"><?php p($l->t('Use backup code')) ?></a> + <?php endif; ?> + </p> </div> -<a class="two-factor-link" <?php print_unescaped($_['logout_attribute']); ?>><?php p($l->t('Cancel log in')) ?></a> -<?php if (!is_null($_['backupProvider'])): ?> -<a class="two-factor-link" href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.showChallenge', - [ - 'challengeProviderId' => $_['backupProvider']->getId(), - 'redirect_url' => $_['redirect_url'], - ] - )) ?>"><?php p($l->t('Use backup code')) ?></a> -<?php endif; diff --git a/core/templates/twofactorshowchallenge.php b/core/templates/twofactorshowchallenge.php index 4f3741b5dfe..ec760ead7c7 100644 --- a/core/templates/twofactorshowchallenge.php +++ b/core/templates/twofactorshowchallenge.php @@ -12,22 +12,24 @@ $template = $_['template']; ?> <div class="warning"> - <h2 class="two-factor-header"><?php p($provider->getDisplayName()); ?></h2> - <?php if ($error): ?> + <h2 class="two-factor-header"><?php p($provider->getDisplayName()); ?></h2> + <?php if ($error): ?> <?php if($error_message): ?> <p><strong><?php p($error_message); ?></strong></p> <?php else: ?> <p><strong><?php p($l->t('Error while validating your second factor')); ?></strong></p> <?php endif; ?> + <?php endif; ?> + <?php print_unescaped($template); ?> + <p class="two-factor-link"> + <a class="button" <?php print_unescaped($_['logout_attribute']); ?>><?php p($l->t('Cancel log in')) ?></a> + <?php if (!is_null($_['backupProvider'])): ?> + <a class="button" href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.showChallenge', + [ + 'challengeProviderId' => $_['backupProvider']->getId(), + 'redirect_url' => $_['redirect_url'], + ] + )) ?>"><?php p($l->t('Use backup code')) ?></a> <?php endif; ?> - <?php print_unescaped($template); ?> + </p> </div> -<a class="two-factor-link" <?php print_unescaped($_['logout_attribute']); ?>><?php p($l->t('Cancel log in')) ?></a> -<?php if (!is_null($_['backupProvider'])): ?> -<a class="two-factor-link" href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.showChallenge', - [ - 'challengeProviderId' => $_['backupProvider']->getId(), - 'redirect_url' => $_['redirect_url'], - ] - )) ?>"><?php p($l->t('Use backup code')) ?></a> -<?php endif; diff --git a/core/vendor/.gitignore b/core/vendor/.gitignore index 4e33cfa586b..d4d23202def 100644 --- a/core/vendor/.gitignore +++ b/core/vendor/.gitignore @@ -22,7 +22,7 @@ underscore/** # blueimp-md5 blueimp-md5/css blueimp-md5/js/* -!blueimp-md5/js/md5.js +!blueimp-md5/js/md5.min.js blueimp-md5/index.html # momentjs - ignore all files except the two listed below diff --git a/core/vendor/blueimp-md5/.bower.json b/core/vendor/blueimp-md5/.bower.json index 5559df825c5..0c43e8cd6d5 100644 --- a/core/vendor/blueimp-md5/.bower.json +++ b/core/vendor/blueimp-md5/.bower.json @@ -1,54 +1,14 @@ { "name": "blueimp-md5", - "version": "1.1.0", - "title": "JavaScript MD5", - "description": "JavaScript MD5 implementation.", - "keywords": [ - "javascript", - "md5" - ], "homepage": "https://github.com/blueimp/JavaScript-MD5", - "author": { - "name": "Sebastian Tschan", - "url": "https://blueimp.net" - }, - "maintainers": [ - { - "name": "Sebastian Tschan", - "url": "https://blueimp.net" - } - ], - "contributors": [ - { - "name": "Paul Johnston", - "url": "http://pajhome.org.uk/crypt/md5" - } - ], - "repository": { - "type": "git", - "url": "git://github.com/blueimp/JavaScript-MD5.git" - }, - "bugs": "https://github.com/blueimp/JavaScript-MD5/issues", - "licenses": [ - { - "type": "MIT", - "url": "http://www.opensource.org/licenses/MIT" - } - ], - "main": "js/md5.js", - "ignore": [ - "/*.*", - "css", - "js/demo.js", - "test" - ], - "_release": "1.1.0", + "version": "2.7.0", + "_release": "2.7.0", "_resolution": { "type": "version", - "tag": "1.1.0", - "commit": "b187bf0abe24bacbca83ea4799978b78829e7914" + "tag": "v2.7.0", + "commit": "31cbd8e463b43882c7b0cf461508ddf1c8f14154" }, - "_source": "git://github.com/blueimp/JavaScript-MD5.git", - "_target": "~1.1.0", + "_source": "https://github.com/blueimp/JavaScript-MD5.git", + "_target": "^2.2.7", "_originalSource": "blueimp-md5" }
\ No newline at end of file diff --git a/core/vendor/blueimp-md5/js/md5.js b/core/vendor/blueimp-md5/js/md5.js deleted file mode 100644 index f92ba37a4de..00000000000 --- a/core/vendor/blueimp-md5/js/md5.js +++ /dev/null @@ -1,274 +0,0 @@ -/* - * JavaScript MD5 1.0.1 - * https://github.com/blueimp/JavaScript-MD5 - * - * Copyright 2011, Sebastian Tschan - * https://blueimp.net - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/MIT - * - * Based on - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for more info. - */ - -/*jslint bitwise: true */ -/*global unescape, define */ - -(function ($) { - 'use strict'; - - /* - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ - function safe_add(x, y) { - var lsw = (x & 0xFFFF) + (y & 0xFFFF), - msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); - } - - /* - * Bitwise rotate a 32-bit number to the left. - */ - function bit_rol(num, cnt) { - return (num << cnt) | (num >>> (32 - cnt)); - } - - /* - * These functions implement the four basic operations the algorithm uses. - */ - function md5_cmn(q, a, b, x, s, t) { - return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b); - } - function md5_ff(a, b, c, d, x, s, t) { - return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); - } - function md5_gg(a, b, c, d, x, s, t) { - return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); - } - function md5_hh(a, b, c, d, x, s, t) { - return md5_cmn(b ^ c ^ d, a, b, x, s, t); - } - function md5_ii(a, b, c, d, x, s, t) { - return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); - } - - /* - * Calculate the MD5 of an array of little-endian words, and a bit length. - */ - function binl_md5(x, len) { - /* append padding */ - x[len >> 5] |= 0x80 << (len % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - - var i, olda, oldb, oldc, oldd, - a = 1732584193, - b = -271733879, - c = -1732584194, - d = 271733878; - - for (i = 0; i < x.length; i += 16) { - olda = a; - oldb = b; - oldc = c; - oldd = d; - - a = md5_ff(a, b, c, d, x[i], 7, -680876936); - d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); - c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); - b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); - a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); - d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); - c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); - b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); - a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); - d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); - c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); - b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); - a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); - d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); - c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); - b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); - - a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); - d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); - c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); - b = md5_gg(b, c, d, a, x[i], 20, -373897302); - a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); - d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); - c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); - b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); - a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); - d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); - c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); - b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); - a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); - d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); - c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); - b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); - - a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); - d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); - c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); - b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); - a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); - d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); - c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); - b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); - a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); - d = md5_hh(d, a, b, c, x[i], 11, -358537222); - c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); - b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); - a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); - d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); - c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); - b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); - - a = md5_ii(a, b, c, d, x[i], 6, -198630844); - d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); - c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); - b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); - a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); - d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); - c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); - b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); - a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); - d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); - c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); - b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); - a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); - d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); - c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); - b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); - - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); - } - return [a, b, c, d]; - } - - /* - * Convert an array of little-endian words to a string - */ - function binl2rstr(input) { - var i, - output = ''; - for (i = 0; i < input.length * 32; i += 8) { - output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF); - } - return output; - } - - /* - * Convert a raw string to an array of little-endian words - * Characters >255 have their high-byte silently ignored. - */ - function rstr2binl(input) { - var i, - output = []; - output[(input.length >> 2) - 1] = undefined; - for (i = 0; i < output.length; i += 1) { - output[i] = 0; - } - for (i = 0; i < input.length * 8; i += 8) { - output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32); - } - return output; - } - - /* - * Calculate the MD5 of a raw string - */ - function rstr_md5(s) { - return binl2rstr(binl_md5(rstr2binl(s), s.length * 8)); - } - - /* - * Calculate the HMAC-MD5, of a key and some data (raw strings) - */ - function rstr_hmac_md5(key, data) { - var i, - bkey = rstr2binl(key), - ipad = [], - opad = [], - hash; - ipad[15] = opad[15] = undefined; - if (bkey.length > 16) { - bkey = binl_md5(bkey, key.length * 8); - } - for (i = 0; i < 16; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8); - return binl2rstr(binl_md5(opad.concat(hash), 512 + 128)); - } - - /* - * Convert a raw string to a hex string - */ - function rstr2hex(input) { - var hex_tab = '0123456789abcdef', - output = '', - x, - i; - for (i = 0; i < input.length; i += 1) { - x = input.charCodeAt(i); - output += hex_tab.charAt((x >>> 4) & 0x0F) + - hex_tab.charAt(x & 0x0F); - } - return output; - } - - /* - * Encode a string as utf-8 - */ - function str2rstr_utf8(input) { - return unescape(encodeURIComponent(input)); - } - - /* - * Take string arguments and return either raw or hex encoded strings - */ - function raw_md5(s) { - return rstr_md5(str2rstr_utf8(s)); - } - function hex_md5(s) { - return rstr2hex(raw_md5(s)); - } - function raw_hmac_md5(k, d) { - return rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)); - } - function hex_hmac_md5(k, d) { - return rstr2hex(raw_hmac_md5(k, d)); - } - - function md5(string, key, raw) { - if (!key) { - if (!raw) { - return hex_md5(string); - } - return raw_md5(string); - } - if (!raw) { - return hex_hmac_md5(key, string); - } - return raw_hmac_md5(key, string); - } - - if (typeof define === 'function' && define.amd) { - define(function () { - return md5; - }); - } else { - $.md5 = md5; - } -}(this)); diff --git a/core/vendor/blueimp-md5/js/md5.min.js b/core/vendor/blueimp-md5/js/md5.min.js new file mode 100644 index 00000000000..564e1e0914f --- /dev/null +++ b/core/vendor/blueimp-md5/js/md5.min.js @@ -0,0 +1,2 @@ +!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[(r+64>>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,h=v,d=m,l=o(l,g,v,m,n[e],7,-680876936),m=o(m,l,g,v,n[e+1],12,-389564586),v=o(v,m,l,g,n[e+2],17,606105819),g=o(g,v,m,l,n[e+3],22,-1044525330),l=o(l,g,v,m,n[e+4],7,-176418897),m=o(m,l,g,v,n[e+5],12,1200080426),v=o(v,m,l,g,n[e+6],17,-1473231341),g=o(g,v,m,l,n[e+7],22,-45705983),l=o(l,g,v,m,n[e+8],7,1770035416),m=o(m,l,g,v,n[e+9],12,-1958414417),v=o(v,m,l,g,n[e+10],17,-42063),g=o(g,v,m,l,n[e+11],22,-1990404162),l=o(l,g,v,m,n[e+12],7,1804603682),m=o(m,l,g,v,n[e+13],12,-40341101),v=o(v,m,l,g,n[e+14],17,-1502002290),g=o(g,v,m,l,n[e+15],22,1236535329),l=u(l,g,v,m,n[e+1],5,-165796510),m=u(m,l,g,v,n[e+6],9,-1069501632),v=u(v,m,l,g,n[e+11],14,643717713),g=u(g,v,m,l,n[e],20,-373897302),l=u(l,g,v,m,n[e+5],5,-701558691),m=u(m,l,g,v,n[e+10],9,38016083),v=u(v,m,l,g,n[e+15],14,-660478335),g=u(g,v,m,l,n[e+4],20,-405537848),l=u(l,g,v,m,n[e+9],5,568446438),m=u(m,l,g,v,n[e+14],9,-1019803690),v=u(v,m,l,g,n[e+3],14,-187363961),g=u(g,v,m,l,n[e+8],20,1163531501),l=u(l,g,v,m,n[e+13],5,-1444681467),m=u(m,l,g,v,n[e+2],9,-51403784),v=u(v,m,l,g,n[e+7],14,1735328473),g=u(g,v,m,l,n[e+12],20,-1926607734),l=c(l,g,v,m,n[e+5],4,-378558),m=c(m,l,g,v,n[e+8],11,-2022574463),v=c(v,m,l,g,n[e+11],16,1839030562),g=c(g,v,m,l,n[e+14],23,-35309556),l=c(l,g,v,m,n[e+1],4,-1530992060),m=c(m,l,g,v,n[e+4],11,1272893353),v=c(v,m,l,g,n[e+7],16,-155497632),g=c(g,v,m,l,n[e+10],23,-1094730640),l=c(l,g,v,m,n[e+13],4,681279174),m=c(m,l,g,v,n[e],11,-358537222),v=c(v,m,l,g,n[e+3],16,-722521979),g=c(g,v,m,l,n[e+6],23,76029189),l=c(l,g,v,m,n[e+9],4,-640364487),m=c(m,l,g,v,n[e+12],11,-421815835),v=c(v,m,l,g,n[e+15],16,530742520),g=c(g,v,m,l,n[e+2],23,-995338651),l=f(l,g,v,m,n[e],6,-198630844),m=f(m,l,g,v,n[e+7],10,1126891415),v=f(v,m,l,g,n[e+14],15,-1416354905),g=f(g,v,m,l,n[e+5],21,-57434055),l=f(l,g,v,m,n[e+12],6,1700485571),m=f(m,l,g,v,n[e+3],10,-1894986606),v=f(v,m,l,g,n[e+10],15,-1051523),g=f(g,v,m,l,n[e+1],21,-2054922799),l=f(l,g,v,m,n[e+8],6,1873313359),m=f(m,l,g,v,n[e+15],10,-30611744),v=f(v,m,l,g,n[e+6],15,-1560198380),g=f(g,v,m,l,n[e+13],21,1309151649),l=f(l,g,v,m,n[e+4],6,-145523070),m=f(m,l,g,v,n[e+11],10,-1120210379),v=f(v,m,l,g,n[e+2],15,718787259),g=f(g,v,m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,h),m=t(m,d);return[l,g,v,m]}function a(n){var t,r="",e=32*n.length;for(t=0;t<e;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var e=8*n.length;for(t=0;t<e;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function d(n){return a(i(h(n),8*n.length))}function l(n,t){var r,e,o=h(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;r<16;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),o+=e.charAt(t>>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this); +//# sourceMappingURL=md5.min.js.map
\ No newline at end of file diff --git a/core/vendor/core.js b/core/vendor/core.js index aae3d90d2fd..0368bfe818c 100644 --- a/core/vendor/core.js +++ b/core/vendor/core.js @@ -21518,281 +21518,8 @@ return /******/ (function(modules) { // webpackBootstrap /******/ ]) }); ; -/* - * JavaScript MD5 1.0.1 - * https://github.com/blueimp/JavaScript-MD5 - * - * Copyright 2011, Sebastian Tschan - * https://blueimp.net - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/MIT - * - * Based on - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for more info. - */ - -/*jslint bitwise: true */ -/*global unescape, define */ - -(function ($) { - 'use strict'; - - /* - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ - function safe_add(x, y) { - var lsw = (x & 0xFFFF) + (y & 0xFFFF), - msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); - } - - /* - * Bitwise rotate a 32-bit number to the left. - */ - function bit_rol(num, cnt) { - return (num << cnt) | (num >>> (32 - cnt)); - } - - /* - * These functions implement the four basic operations the algorithm uses. - */ - function md5_cmn(q, a, b, x, s, t) { - return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b); - } - function md5_ff(a, b, c, d, x, s, t) { - return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); - } - function md5_gg(a, b, c, d, x, s, t) { - return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); - } - function md5_hh(a, b, c, d, x, s, t) { - return md5_cmn(b ^ c ^ d, a, b, x, s, t); - } - function md5_ii(a, b, c, d, x, s, t) { - return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); - } - - /* - * Calculate the MD5 of an array of little-endian words, and a bit length. - */ - function binl_md5(x, len) { - /* append padding */ - x[len >> 5] |= 0x80 << (len % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - - var i, olda, oldb, oldc, oldd, - a = 1732584193, - b = -271733879, - c = -1732584194, - d = 271733878; - - for (i = 0; i < x.length; i += 16) { - olda = a; - oldb = b; - oldc = c; - oldd = d; - - a = md5_ff(a, b, c, d, x[i], 7, -680876936); - d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); - c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); - b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); - a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); - d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); - c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); - b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); - a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); - d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); - c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); - b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); - a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); - d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); - c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); - b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); - - a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); - d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); - c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); - b = md5_gg(b, c, d, a, x[i], 20, -373897302); - a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); - d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); - c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); - b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); - a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); - d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); - c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); - b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); - a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); - d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); - c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); - b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); - - a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); - d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); - c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); - b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); - a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); - d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); - c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); - b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); - a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); - d = md5_hh(d, a, b, c, x[i], 11, -358537222); - c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); - b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); - a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); - d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); - c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); - b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); - - a = md5_ii(a, b, c, d, x[i], 6, -198630844); - d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); - c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); - b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); - a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); - d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); - c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); - b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); - a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); - d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); - c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); - b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); - a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); - d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); - c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); - b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); - - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); - } - return [a, b, c, d]; - } - - /* - * Convert an array of little-endian words to a string - */ - function binl2rstr(input) { - var i, - output = ''; - for (i = 0; i < input.length * 32; i += 8) { - output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF); - } - return output; - } - - /* - * Convert a raw string to an array of little-endian words - * Characters >255 have their high-byte silently ignored. - */ - function rstr2binl(input) { - var i, - output = []; - output[(input.length >> 2) - 1] = undefined; - for (i = 0; i < output.length; i += 1) { - output[i] = 0; - } - for (i = 0; i < input.length * 8; i += 8) { - output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32); - } - return output; - } - - /* - * Calculate the MD5 of a raw string - */ - function rstr_md5(s) { - return binl2rstr(binl_md5(rstr2binl(s), s.length * 8)); - } - - /* - * Calculate the HMAC-MD5, of a key and some data (raw strings) - */ - function rstr_hmac_md5(key, data) { - var i, - bkey = rstr2binl(key), - ipad = [], - opad = [], - hash; - ipad[15] = opad[15] = undefined; - if (bkey.length > 16) { - bkey = binl_md5(bkey, key.length * 8); - } - for (i = 0; i < 16; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8); - return binl2rstr(binl_md5(opad.concat(hash), 512 + 128)); - } - - /* - * Convert a raw string to a hex string - */ - function rstr2hex(input) { - var hex_tab = '0123456789abcdef', - output = '', - x, - i; - for (i = 0; i < input.length; i += 1) { - x = input.charCodeAt(i); - output += hex_tab.charAt((x >>> 4) & 0x0F) + - hex_tab.charAt(x & 0x0F); - } - return output; - } - - /* - * Encode a string as utf-8 - */ - function str2rstr_utf8(input) { - return unescape(encodeURIComponent(input)); - } - - /* - * Take string arguments and return either raw or hex encoded strings - */ - function raw_md5(s) { - return rstr_md5(str2rstr_utf8(s)); - } - function hex_md5(s) { - return rstr2hex(raw_md5(s)); - } - function raw_hmac_md5(k, d) { - return rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)); - } - function hex_hmac_md5(k, d) { - return rstr2hex(raw_hmac_md5(k, d)); - } - - function md5(string, key, raw) { - if (!key) { - if (!raw) { - return hex_md5(string); - } - return raw_md5(string); - } - if (!raw) { - return hex_hmac_md5(key, string); - } - return raw_hmac_md5(key, string); - } - - if (typeof define === 'function' && define.amd) { - define(function () { - return md5; - }); - } else { - $.md5 = md5; - } -}(this)); - +!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[(r+64>>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,h=v,d=m,l=o(l,g,v,m,n[e],7,-680876936),m=o(m,l,g,v,n[e+1],12,-389564586),v=o(v,m,l,g,n[e+2],17,606105819),g=o(g,v,m,l,n[e+3],22,-1044525330),l=o(l,g,v,m,n[e+4],7,-176418897),m=o(m,l,g,v,n[e+5],12,1200080426),v=o(v,m,l,g,n[e+6],17,-1473231341),g=o(g,v,m,l,n[e+7],22,-45705983),l=o(l,g,v,m,n[e+8],7,1770035416),m=o(m,l,g,v,n[e+9],12,-1958414417),v=o(v,m,l,g,n[e+10],17,-42063),g=o(g,v,m,l,n[e+11],22,-1990404162),l=o(l,g,v,m,n[e+12],7,1804603682),m=o(m,l,g,v,n[e+13],12,-40341101),v=o(v,m,l,g,n[e+14],17,-1502002290),g=o(g,v,m,l,n[e+15],22,1236535329),l=u(l,g,v,m,n[e+1],5,-165796510),m=u(m,l,g,v,n[e+6],9,-1069501632),v=u(v,m,l,g,n[e+11],14,643717713),g=u(g,v,m,l,n[e],20,-373897302),l=u(l,g,v,m,n[e+5],5,-701558691),m=u(m,l,g,v,n[e+10],9,38016083),v=u(v,m,l,g,n[e+15],14,-660478335),g=u(g,v,m,l,n[e+4],20,-405537848),l=u(l,g,v,m,n[e+9],5,568446438),m=u(m,l,g,v,n[e+14],9,-1019803690),v=u(v,m,l,g,n[e+3],14,-187363961),g=u(g,v,m,l,n[e+8],20,1163531501),l=u(l,g,v,m,n[e+13],5,-1444681467),m=u(m,l,g,v,n[e+2],9,-51403784),v=u(v,m,l,g,n[e+7],14,1735328473),g=u(g,v,m,l,n[e+12],20,-1926607734),l=c(l,g,v,m,n[e+5],4,-378558),m=c(m,l,g,v,n[e+8],11,-2022574463),v=c(v,m,l,g,n[e+11],16,1839030562),g=c(g,v,m,l,n[e+14],23,-35309556),l=c(l,g,v,m,n[e+1],4,-1530992060),m=c(m,l,g,v,n[e+4],11,1272893353),v=c(v,m,l,g,n[e+7],16,-155497632),g=c(g,v,m,l,n[e+10],23,-1094730640),l=c(l,g,v,m,n[e+13],4,681279174),m=c(m,l,g,v,n[e],11,-358537222),v=c(v,m,l,g,n[e+3],16,-722521979),g=c(g,v,m,l,n[e+6],23,76029189),l=c(l,g,v,m,n[e+9],4,-640364487),m=c(m,l,g,v,n[e+12],11,-421815835),v=c(v,m,l,g,n[e+15],16,530742520),g=c(g,v,m,l,n[e+2],23,-995338651),l=f(l,g,v,m,n[e],6,-198630844),m=f(m,l,g,v,n[e+7],10,1126891415),v=f(v,m,l,g,n[e+14],15,-1416354905),g=f(g,v,m,l,n[e+5],21,-57434055),l=f(l,g,v,m,n[e+12],6,1700485571),m=f(m,l,g,v,n[e+3],10,-1894986606),v=f(v,m,l,g,n[e+10],15,-1051523),g=f(g,v,m,l,n[e+1],21,-2054922799),l=f(l,g,v,m,n[e+8],6,1873313359),m=f(m,l,g,v,n[e+15],10,-30611744),v=f(v,m,l,g,n[e+6],15,-1560198380),g=f(g,v,m,l,n[e+13],21,1309151649),l=f(l,g,v,m,n[e+4],6,-145523070),m=f(m,l,g,v,n[e+11],10,-1120210379),v=f(v,m,l,g,n[e+2],15,718787259),g=f(g,v,m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,h),m=t(m,d);return[l,g,v,m]}function a(n){var t,r="",e=32*n.length;for(t=0;t<e;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var e=8*n.length;for(t=0;t<e;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function d(n){return a(i(h(n),8*n.length))}function l(n,t){var r,e,o=h(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;r<16;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),o+=e.charAt(t>>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this); +//# sourceMappingURL=md5.min.js.map /* ======================================================================== * Bootstrap: tooltip.js v3.3.6 * http://getbootstrap.com/javascript/#tooltip diff --git a/lib/base.php b/lib/base.php index a6601a2dd67..feb54ec0331 100644 --- a/lib/base.php +++ b/lib/base.php @@ -912,7 +912,7 @@ class OC { if (!$systemConfig->getValue('installed', false)) { \OC::$server->getSession()->clear(); $setupHelper = new OC\Setup(\OC::$server->getSystemConfig(), \OC::$server->getIniWrapper(), - \OC::$server->getL10N('lib'), \OC::$server->getThemingDefaults(), \OC::$server->getLogger(), + \OC::$server->getL10N('lib'), \OC::$server->query(\OCP\Defaults::class), \OC::$server->getLogger(), \OC::$server->getSecureRandom()); $controller = new OC\Core\Controller\SetupController($setupHelper); $controller->run($_POST); diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index fd73a9561a1..ab6a3781147 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -211,6 +211,7 @@ return array( 'OCP\\Lock\\ILockingProvider' => $baseDir . '/lib/public/Lock/ILockingProvider.php', 'OCP\\Lock\\LockedException' => $baseDir . '/lib/public/Lock/LockedException.php', 'OCP\\Lockdown\\ILockdownManager' => $baseDir . '/lib/public/Lockdown/ILockdownManager.php', + 'OCP\\Mail\\IEMailTemplate' => $baseDir . '/lib/public/Mail/IEMailTemplate.php', 'OCP\\Mail\\IMailer' => $baseDir . '/lib/public/Mail/IMailer.php', 'OCP\\Migration\\IOutput' => $baseDir . '/lib/public/Migration/IOutput.php', 'OCP\\Migration\\IRepairStep' => $baseDir . '/lib/public/Migration/IRepairStep.php', @@ -219,6 +220,7 @@ return array( 'OCP\\Notification\\IManager' => $baseDir . '/lib/public/Notification/IManager.php', 'OCP\\Notification\\INotification' => $baseDir . '/lib/public/Notification/INotification.php', 'OCP\\Notification\\INotifier' => $baseDir . '/lib/public/Notification/INotifier.php', + 'OCP\\OCS\\IDiscoveryService' => $baseDir . '/lib/public/OCS/IDiscoveryService.php', 'OCP\\PreConditionNotMetException' => $baseDir . '/lib/public/PreConditionNotMetException.php', 'OCP\\Preview\\IProvider' => $baseDir . '/lib/public/Preview/IProvider.php', 'OCP\\Response' => $baseDir . '/lib/public/Response.php', @@ -638,7 +640,6 @@ return array( 'OC\\Log\\Rotate' => $baseDir . '/lib/private/Log/Rotate.php', 'OC\\Log\\Syslog' => $baseDir . '/lib/private/Log/Syslog.php', 'OC\\Mail\\EMailTemplate' => $baseDir . '/lib/private/Mail/EMailTemplate.php', - 'OC\\Mail\\IEMailTemplate' => $baseDir . '/lib/private/Mail/IEMailTemplate.php', 'OC\\Mail\\Mailer' => $baseDir . '/lib/private/Mail/Mailer.php', 'OC\\Mail\\Message' => $baseDir . '/lib/private/Mail/Message.php', 'OC\\Memcache\\APCu' => $baseDir . '/lib/private/Memcache/APCu.php', @@ -662,6 +663,7 @@ return array( 'OC\\Notification\\Manager' => $baseDir . '/lib/private/Notification/Manager.php', 'OC\\Notification\\Notification' => $baseDir . '/lib/private/Notification/Notification.php', 'OC\\OCS\\CoreCapabilities' => $baseDir . '/lib/private/OCS/CoreCapabilities.php', + 'OC\\OCS\\DiscoveryService' => $baseDir . '/lib/private/OCS/DiscoveryService.php', 'OC\\OCS\\Exception' => $baseDir . '/lib/private/OCS/Exception.php', 'OC\\OCS\\PrivateData' => $baseDir . '/lib/private/OCS/PrivateData.php', 'OC\\OCS\\Provider' => $baseDir . '/lib/private/OCS/Provider.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 9fe795cfb07..1b2c9f84df8 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -241,6 +241,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\Lock\\ILockingProvider' => __DIR__ . '/../../..' . '/lib/public/Lock/ILockingProvider.php', 'OCP\\Lock\\LockedException' => __DIR__ . '/../../..' . '/lib/public/Lock/LockedException.php', 'OCP\\Lockdown\\ILockdownManager' => __DIR__ . '/../../..' . '/lib/public/Lockdown/ILockdownManager.php', + 'OCP\\Mail\\IEMailTemplate' => __DIR__ . '/../../..' . '/lib/public/Mail/IEMailTemplate.php', 'OCP\\Mail\\IMailer' => __DIR__ . '/../../..' . '/lib/public/Mail/IMailer.php', 'OCP\\Migration\\IOutput' => __DIR__ . '/../../..' . '/lib/public/Migration/IOutput.php', 'OCP\\Migration\\IRepairStep' => __DIR__ . '/../../..' . '/lib/public/Migration/IRepairStep.php', @@ -249,6 +250,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\Notification\\IManager' => __DIR__ . '/../../..' . '/lib/public/Notification/IManager.php', 'OCP\\Notification\\INotification' => __DIR__ . '/../../..' . '/lib/public/Notification/INotification.php', 'OCP\\Notification\\INotifier' => __DIR__ . '/../../..' . '/lib/public/Notification/INotifier.php', + 'OCP\\OCS\\IDiscoveryService' => __DIR__ . '/../../..' . '/lib/public/OCS/IDiscoveryService.php', 'OCP\\PreConditionNotMetException' => __DIR__ . '/../../..' . '/lib/public/PreConditionNotMetException.php', 'OCP\\Preview\\IProvider' => __DIR__ . '/../../..' . '/lib/public/Preview/IProvider.php', 'OCP\\Response' => __DIR__ . '/../../..' . '/lib/public/Response.php', @@ -668,7 +670,6 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Log\\Rotate' => __DIR__ . '/../../..' . '/lib/private/Log/Rotate.php', 'OC\\Log\\Syslog' => __DIR__ . '/../../..' . '/lib/private/Log/Syslog.php', 'OC\\Mail\\EMailTemplate' => __DIR__ . '/../../..' . '/lib/private/Mail/EMailTemplate.php', - 'OC\\Mail\\IEMailTemplate' => __DIR__ . '/../../..' . '/lib/private/Mail/IEMailTemplate.php', 'OC\\Mail\\Mailer' => __DIR__ . '/../../..' . '/lib/private/Mail/Mailer.php', 'OC\\Mail\\Message' => __DIR__ . '/../../..' . '/lib/private/Mail/Message.php', 'OC\\Memcache\\APCu' => __DIR__ . '/../../..' . '/lib/private/Memcache/APCu.php', @@ -692,6 +693,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Notification\\Manager' => __DIR__ . '/../../..' . '/lib/private/Notification/Manager.php', 'OC\\Notification\\Notification' => __DIR__ . '/../../..' . '/lib/private/Notification/Notification.php', 'OC\\OCS\\CoreCapabilities' => __DIR__ . '/../../..' . '/lib/private/OCS/CoreCapabilities.php', + 'OC\\OCS\\DiscoveryService' => __DIR__ . '/../../..' . '/lib/private/OCS/DiscoveryService.php', 'OC\\OCS\\Exception' => __DIR__ . '/../../..' . '/lib/private/OCS/Exception.php', 'OC\\OCS\\PrivateData' => __DIR__ . '/../../..' . '/lib/private/OCS/PrivateData.php', 'OC\\OCS\\Provider' => __DIR__ . '/../../..' . '/lib/private/OCS/Provider.php', diff --git a/lib/l10n/bg.js b/lib/l10n/bg.js deleted file mode 100644 index b54fe1bcecd..00000000000 --- a/lib/l10n/bg.js +++ /dev/null @@ -1,165 +0,0 @@ -OC.L10N.register( - "lib", - { - "Cannot write into \"config\" directory!" : "Неуспешен опит за запис в \"config\" папката!", - "This can usually be fixed by giving the webserver write access to the config directory" : "Това може да бъде решено единствено като разрешиш на уеб сървъра да пише в config папката.", - "See %s" : "Вижте %s", - "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в config папката %s.", - "Sample configuration detected" : "Открита е примерна конфигурация", - "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Усетено беше че примерната конфигурация е копирана. Това може да развли инсталацията ти и не се поддържа. Моля, прочети документацията преди да правиш промени на config.php", - "%1$s and %2$s" : "%1$s и %2$s", - "%1$s, %2$s and %3$s" : "%1$s, %2$s и %3$s", - "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s и %4$s", - "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s и %5$s", - "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.", - "PHP with a version lower than %s is required." : "Необходим е PHP с версия по-ниска от %s.", - "Following databases are supported: %s" : "Следните бази данни са поддържани: %s", - "The command line tool %s could not be found" : "Конзолната команда %s не може да бъде намерена", - "The library %s is not available." : "Библиотеката %s не е налична", - "Library %s with a version higher than %s is required - available version %s." : "Необходима е библиотеката %s с версия по-висока от %s - налична версия %s. ", - "Library %s with a version lower than %s is required - available version %s." : "Необходима е библиотеката %s с версия по-ниска от %s - налична версия %s. ", - "Following platforms are supported: %s" : "Поддържани са следните платформи: %s", - "Unknown filetype" : "Непознат тип файл", - "Invalid image" : "Невалидно изображение.", - "today" : "днес", - "yesterday" : "вчера", - "_%n day ago_::_%n days ago_" : ["преди %n ден","преди %n дни"], - "last month" : "миналия месец", - "_%n month ago_::_%n months ago_" : ["преди %n месец","преди %n месеца"], - "last year" : "миналата година", - "_%n year ago_::_%n years ago_" : ["преди %n година","преди %n години"], - "_%n hour ago_::_%n hours ago_" : ["преди %n час","преди %n часа"], - "_%n minute ago_::_%n minutes ago_" : ["преди %n минута","преди %n минути"], - "seconds ago" : "преди секунди", - "File name contains at least one invalid character" : "Името на файла съдържа поне един невалиден символ", - "File name is too long" : "Името на файла е твърде дълго", - "Help" : "Помощ", - "Apps" : "Приложения", - "Personal" : "Лични", - "Users" : "Потребители", - "Admin" : "Админ", - "APCu" : "APCu", - "Redis" : "Redis", - "Server settings" : "Настройки на сървъра", - "Sharing" : "Споделяне", - "Additional settings" : "Допълнителни настройки", - "%s enter the database username and name." : "%s въведете потребителско име и име за базата данни", - "%s enter the database username." : "%s въведете потребител за базата данни.", - "%s enter the database name." : "%s въведи име на базата данни.", - "%s you may not use dots in the database name" : "%s, не може да ползваш точки в името на базата данни.", - "Oracle username and/or password not valid" : "Невалидно Oracle потребителско име и/или парола.", - "DB Error: \"%s\"" : "Грешка в базата данни: \"%s\".", - "Offending command was: \"%s\"" : "Проблемната команда беше: \"%s\".", - "You need to enter either an existing account or the administrator." : "Необходимо е да въведеш съществуващ профил или като администратор.", - "Offending command was: \"%s\", name: %s, password: %s" : "Проблемната команда беше: \"%s\", име: %s, парола: %s.", - "PostgreSQL username and/or password not valid" : "Невалидно PostgreSQL потребителско име и/или парола.", - "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не се подържа и %s няма да работи правилно на тази платформа. Използвайте го на свой собствен риск!", - "For the best results, please consider using a GNU/Linux server instead." : "За най-добри резултати, моля, помисли дали не бихте желали да използваште GNU/Linux сървър.", - "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Моля, премахтене настройката за open_basedir от вашия php.ini или преминете към 64-битово PHP.", - "Set an admin username." : "Задайте потребителско име за администратор.", - "Set an admin password." : "Задай парола за администратор.", - "Can't create or write into the data directory %s" : "Неуспешно създаване или записване в \"data\" папката %s", - "%s shared »%s« with you" : "%s сподели »%s« с теб", - "%s via %s" : "%s чрез %s", - "Sharing %s failed, because the backend does not allow shares from type %i" : "Неуспешно споделяне на %s , защото сървъра не позволява споделяне от тип $i.", - "Sharing %s failed, because the file does not exist" : "Неуспешно споделяне на %s, защото файлът не съществува.", - "You are not allowed to share %s" : "Не ти е разрешено да споделяш %s.", - "Sharing %s failed, because the user %s does not exist" : "Неуспешно споделяне на %s, защото потребител %s не съществува.", - "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Неуспешно споделяне на %s, защото %s не е член никоя от групите, в които е %s.", - "Sharing %s failed, because this item is already shared with %s" : "Неуспешно споделяне на %s, защото това съдържание е вече споделено с %s.", - "Sharing %s failed, because the group %s does not exist" : "Неупешно споделяне на %s, защото групата %s не съществува.", - "Sharing %s failed, because %s is not a member of the group %s" : "Неуспешно споделяне на %s, защото %s не е член на групата %s.", - "You need to provide a password to create a public link, only protected links are allowed" : "Трябва да зададеш парола, за да създадеш общодостъпен линк за споделяне, само защитени с пароли линкове са разрешени.", - "Sharing %s failed, because sharing with links is not allowed" : "Неуспешно споделяне на %s, защото споделянето посредством връзки не е разрешено.", - "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Неуспешно споделяне на на %s, не може бъде намерено %s. Може би сървъра в момента е недостъпен.", - "Share type %s is not valid for %s" : "Споделянето на тип %s не валидно за %s.", - "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Неуспешна промяна на правата за достъп за %s, защото промените надвишават правата на достъп дадени на %s.", - "Setting permissions for %s failed, because the item was not found" : "Неуспешна промяна на правата за достъп за %s, защото съдържанието не е открито.", - "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Неуспешно задаване на дата на изтичане. Споделни папки или файлове не могат да изтичат по-късно от %s след като са били споделени", - "Cannot set expiration date. Expiration date is in the past" : "Неуспешно задаване на дата на изтичане. Датата на изтичане е в миналото", - "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Споделянето на сървърния %s трябва да поддържа OCP\\Share_Backend интерфейс.", - "Sharing backend %s not found" : "Споделянето на сървърния %s не е открито.", - "Sharing backend for %s not found" : "Споделянето на сървъра за %s не е открито.", - "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Неуспешно споделяне на %s, защото промените надвишават правата на достъп дадени на %s.", - "Sharing %s failed, because resharing is not allowed" : "Неуспешно споделяне на %s, защото повторно споделяне не е разрешено.", - "Sharing %s failed, because the sharing backend for %s could not find its source" : "Неуспешно споделяне на %s, защото не е открит първоизточникът на %s, за да бъде споделяне по сървъра.", - "Sharing %s failed, because the file could not be found in the file cache" : "Неуспешно споделяне на %s, защото файлът не може да бъде намерен в кеша.", - "Could not find category \"%s\"" : "Невъзможно откриване на категорията \"%s\".", - "Sunday" : "неделя", - "Monday" : "понеделник", - "Tuesday" : "вторник", - "Wednesday" : "сряда", - "Thursday" : "четвъртък", - "Friday" : "петък", - "Saturday" : "събота", - "Sun." : "нед", - "Mon." : "пон", - "Tue." : "вт", - "Wed." : "ср", - "Thu." : "чет", - "Fri." : "пет", - "Sat." : "съб", - "Su" : "нд", - "Mo" : "пн", - "We" : "ср", - "Th" : "чт", - "Fr" : "пт", - "Sa" : "сб", - "January" : "януари", - "February" : "февруару", - "March" : "март", - "April" : "април", - "May" : "май", - "June" : "юни", - "July" : "юли", - "August" : "август", - "September" : "септември", - "October" : "октомври", - "November" : "ноември", - "December" : "декември", - "Jan." : "яну", - "Feb." : "фев", - "Mar." : "мар", - "Apr." : "апр", - "May." : "май", - "Jun." : "юни", - "Jul." : "юли", - "Aug." : "авг", - "Sep." : "сеп", - "Oct." : "окт", - "Nov." : "ное", - "Dec." : "дек", - "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Потребителските имена може да съдържат следните знаци: \"a-z\", \"A-Z\", \"0-9\" и \"_.@-'\"", - "A valid username must be provided" : "Трябва да въведете валидно потребителско.", - "Username contains whitespace at the beginning or at the end" : "Потребителското име започва или завършва с интервал.", - "A valid password must be provided" : "Трябва да въведете валидна парола.", - "The username is already being used" : "Потребителското име е вече заето.", - "No app name specified" : "Не е зададено име на преложението", - "a safe home for all your data" : "безопасен дом за всички ваши данни", - "Can't read file" : "Файлът не може да бъде прочетен", - "Application is not enabled" : "Приложението не е включено", - "Authentication error" : "Проблем с идентификацията", - "Token expired. Please reload page." : "Изтекла сесия. Моля, презареди страницата.", - "Unknown user" : "Непознат потребител", - "No database drivers (sqlite, mysql, or postgresql) installed." : "Липсват инсталирани драйвери за бази данни(sqlite, mysql или postgresql).", - "Cannot write into \"config\" directory" : "Неуспешен опит за запис в \"config\" папката.", - "Cannot write into \"apps\" directory" : "Писането в папка приложения не е възможно", - "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в app папката %s или като изключи магазина за приложения в config файла.", - "Cannot create \"data\" directory (%s)" : "Неуспешен опит за създаване на \"data\" папката (%s).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Правата за достъп обикновено могат да бъдат оправени когато %s даде права на уеб сървъра да пише в root папката %s.", - "Setting locale to %s failed" : "Неуспешно задаване на %s като настройка език-държава.", - "Please install one of these locales on your system and restart your webserver." : "Моля, инсталирай едно от следните език-държава на сървъра и рестартирай уеб сървъра.", - "Please ask your server administrator to install the module." : "Моля, помолете вашия администратор да инсталира модула.", - "PHP module %s not installed." : "PHP модулът %s не е инсталиран.", - "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Това може да се дължи на cache/accelerator като Zend OPache или eAccelerator.", - "PHP modules have been installed, but they are still listed as missing?" : "PHP модулите са инсталирани, но все още се обявяват като липсващи?", - "Please ask your server administrator to restart the web server." : "Моля, поискай от своя администратор да рестартира уеб сървъра.", - "PostgreSQL >= 9 required" : "Изисква се PostgreSQL >= 9", - "Please upgrade your database version" : "Моля, обнови базата данни.", - "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Моля, променете правата за достъп на 0770, за да не може директорията да бъде видяна от други потребители.", - "Data directory (%s) is readable by other users" : "Data папката (%s) може да бъде разгледана от други потребители", - "Data directory (%s) is invalid" : "Data папката (%s) e невалидна", - "Please check that the data directory contains a file \".ocdata\" in its root." : "Моля, увери се, че data папката съдържа файл \".ocdata\" в себе си.", - "Could not obtain lock type %d on \"%s\"." : "Неуспешен опит за ексклузивен достъп от типa %d върху \"%s\"." -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/bg.json b/lib/l10n/bg.json deleted file mode 100644 index 94a4a500452..00000000000 --- a/lib/l10n/bg.json +++ /dev/null @@ -1,163 +0,0 @@ -{ "translations": { - "Cannot write into \"config\" directory!" : "Неуспешен опит за запис в \"config\" папката!", - "This can usually be fixed by giving the webserver write access to the config directory" : "Това може да бъде решено единствено като разрешиш на уеб сървъра да пише в config папката.", - "See %s" : "Вижте %s", - "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в config папката %s.", - "Sample configuration detected" : "Открита е примерна конфигурация", - "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Усетено беше че примерната конфигурация е копирана. Това може да развли инсталацията ти и не се поддържа. Моля, прочети документацията преди да правиш промени на config.php", - "%1$s and %2$s" : "%1$s и %2$s", - "%1$s, %2$s and %3$s" : "%1$s, %2$s и %3$s", - "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s и %4$s", - "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s и %5$s", - "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.", - "PHP with a version lower than %s is required." : "Необходим е PHP с версия по-ниска от %s.", - "Following databases are supported: %s" : "Следните бази данни са поддържани: %s", - "The command line tool %s could not be found" : "Конзолната команда %s не може да бъде намерена", - "The library %s is not available." : "Библиотеката %s не е налична", - "Library %s with a version higher than %s is required - available version %s." : "Необходима е библиотеката %s с версия по-висока от %s - налична версия %s. ", - "Library %s with a version lower than %s is required - available version %s." : "Необходима е библиотеката %s с версия по-ниска от %s - налична версия %s. ", - "Following platforms are supported: %s" : "Поддържани са следните платформи: %s", - "Unknown filetype" : "Непознат тип файл", - "Invalid image" : "Невалидно изображение.", - "today" : "днес", - "yesterday" : "вчера", - "_%n day ago_::_%n days ago_" : ["преди %n ден","преди %n дни"], - "last month" : "миналия месец", - "_%n month ago_::_%n months ago_" : ["преди %n месец","преди %n месеца"], - "last year" : "миналата година", - "_%n year ago_::_%n years ago_" : ["преди %n година","преди %n години"], - "_%n hour ago_::_%n hours ago_" : ["преди %n час","преди %n часа"], - "_%n minute ago_::_%n minutes ago_" : ["преди %n минута","преди %n минути"], - "seconds ago" : "преди секунди", - "File name contains at least one invalid character" : "Името на файла съдържа поне един невалиден символ", - "File name is too long" : "Името на файла е твърде дълго", - "Help" : "Помощ", - "Apps" : "Приложения", - "Personal" : "Лични", - "Users" : "Потребители", - "Admin" : "Админ", - "APCu" : "APCu", - "Redis" : "Redis", - "Server settings" : "Настройки на сървъра", - "Sharing" : "Споделяне", - "Additional settings" : "Допълнителни настройки", - "%s enter the database username and name." : "%s въведете потребителско име и име за базата данни", - "%s enter the database username." : "%s въведете потребител за базата данни.", - "%s enter the database name." : "%s въведи име на базата данни.", - "%s you may not use dots in the database name" : "%s, не може да ползваш точки в името на базата данни.", - "Oracle username and/or password not valid" : "Невалидно Oracle потребителско име и/или парола.", - "DB Error: \"%s\"" : "Грешка в базата данни: \"%s\".", - "Offending command was: \"%s\"" : "Проблемната команда беше: \"%s\".", - "You need to enter either an existing account or the administrator." : "Необходимо е да въведеш съществуващ профил или като администратор.", - "Offending command was: \"%s\", name: %s, password: %s" : "Проблемната команда беше: \"%s\", име: %s, парола: %s.", - "PostgreSQL username and/or password not valid" : "Невалидно PostgreSQL потребителско име и/или парола.", - "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не се подържа и %s няма да работи правилно на тази платформа. Използвайте го на свой собствен риск!", - "For the best results, please consider using a GNU/Linux server instead." : "За най-добри резултати, моля, помисли дали не бихте желали да използваште GNU/Linux сървър.", - "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Моля, премахтене настройката за open_basedir от вашия php.ini или преминете към 64-битово PHP.", - "Set an admin username." : "Задайте потребителско име за администратор.", - "Set an admin password." : "Задай парола за администратор.", - "Can't create or write into the data directory %s" : "Неуспешно създаване или записване в \"data\" папката %s", - "%s shared »%s« with you" : "%s сподели »%s« с теб", - "%s via %s" : "%s чрез %s", - "Sharing %s failed, because the backend does not allow shares from type %i" : "Неуспешно споделяне на %s , защото сървъра не позволява споделяне от тип $i.", - "Sharing %s failed, because the file does not exist" : "Неуспешно споделяне на %s, защото файлът не съществува.", - "You are not allowed to share %s" : "Не ти е разрешено да споделяш %s.", - "Sharing %s failed, because the user %s does not exist" : "Неуспешно споделяне на %s, защото потребител %s не съществува.", - "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Неуспешно споделяне на %s, защото %s не е член никоя от групите, в които е %s.", - "Sharing %s failed, because this item is already shared with %s" : "Неуспешно споделяне на %s, защото това съдържание е вече споделено с %s.", - "Sharing %s failed, because the group %s does not exist" : "Неупешно споделяне на %s, защото групата %s не съществува.", - "Sharing %s failed, because %s is not a member of the group %s" : "Неуспешно споделяне на %s, защото %s не е член на групата %s.", - "You need to provide a password to create a public link, only protected links are allowed" : "Трябва да зададеш парола, за да създадеш общодостъпен линк за споделяне, само защитени с пароли линкове са разрешени.", - "Sharing %s failed, because sharing with links is not allowed" : "Неуспешно споделяне на %s, защото споделянето посредством връзки не е разрешено.", - "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Неуспешно споделяне на на %s, не може бъде намерено %s. Може би сървъра в момента е недостъпен.", - "Share type %s is not valid for %s" : "Споделянето на тип %s не валидно за %s.", - "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Неуспешна промяна на правата за достъп за %s, защото промените надвишават правата на достъп дадени на %s.", - "Setting permissions for %s failed, because the item was not found" : "Неуспешна промяна на правата за достъп за %s, защото съдържанието не е открито.", - "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Неуспешно задаване на дата на изтичане. Споделни папки или файлове не могат да изтичат по-късно от %s след като са били споделени", - "Cannot set expiration date. Expiration date is in the past" : "Неуспешно задаване на дата на изтичане. Датата на изтичане е в миналото", - "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Споделянето на сървърния %s трябва да поддържа OCP\\Share_Backend интерфейс.", - "Sharing backend %s not found" : "Споделянето на сървърния %s не е открито.", - "Sharing backend for %s not found" : "Споделянето на сървъра за %s не е открито.", - "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Неуспешно споделяне на %s, защото промените надвишават правата на достъп дадени на %s.", - "Sharing %s failed, because resharing is not allowed" : "Неуспешно споделяне на %s, защото повторно споделяне не е разрешено.", - "Sharing %s failed, because the sharing backend for %s could not find its source" : "Неуспешно споделяне на %s, защото не е открит първоизточникът на %s, за да бъде споделяне по сървъра.", - "Sharing %s failed, because the file could not be found in the file cache" : "Неуспешно споделяне на %s, защото файлът не може да бъде намерен в кеша.", - "Could not find category \"%s\"" : "Невъзможно откриване на категорията \"%s\".", - "Sunday" : "неделя", - "Monday" : "понеделник", - "Tuesday" : "вторник", - "Wednesday" : "сряда", - "Thursday" : "четвъртък", - "Friday" : "петък", - "Saturday" : "събота", - "Sun." : "нед", - "Mon." : "пон", - "Tue." : "вт", - "Wed." : "ср", - "Thu." : "чет", - "Fri." : "пет", - "Sat." : "съб", - "Su" : "нд", - "Mo" : "пн", - "We" : "ср", - "Th" : "чт", - "Fr" : "пт", - "Sa" : "сб", - "January" : "януари", - "February" : "февруару", - "March" : "март", - "April" : "април", - "May" : "май", - "June" : "юни", - "July" : "юли", - "August" : "август", - "September" : "септември", - "October" : "октомври", - "November" : "ноември", - "December" : "декември", - "Jan." : "яну", - "Feb." : "фев", - "Mar." : "мар", - "Apr." : "апр", - "May." : "май", - "Jun." : "юни", - "Jul." : "юли", - "Aug." : "авг", - "Sep." : "сеп", - "Oct." : "окт", - "Nov." : "ное", - "Dec." : "дек", - "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Потребителските имена може да съдържат следните знаци: \"a-z\", \"A-Z\", \"0-9\" и \"_.@-'\"", - "A valid username must be provided" : "Трябва да въведете валидно потребителско.", - "Username contains whitespace at the beginning or at the end" : "Потребителското име започва или завършва с интервал.", - "A valid password must be provided" : "Трябва да въведете валидна парола.", - "The username is already being used" : "Потребителското име е вече заето.", - "No app name specified" : "Не е зададено име на преложението", - "a safe home for all your data" : "безопасен дом за всички ваши данни", - "Can't read file" : "Файлът не може да бъде прочетен", - "Application is not enabled" : "Приложението не е включено", - "Authentication error" : "Проблем с идентификацията", - "Token expired. Please reload page." : "Изтекла сесия. Моля, презареди страницата.", - "Unknown user" : "Непознат потребител", - "No database drivers (sqlite, mysql, or postgresql) installed." : "Липсват инсталирани драйвери за бази данни(sqlite, mysql или postgresql).", - "Cannot write into \"config\" directory" : "Неуспешен опит за запис в \"config\" папката.", - "Cannot write into \"apps\" directory" : "Писането в папка приложения не е възможно", - "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в app папката %s или като изключи магазина за приложения в config файла.", - "Cannot create \"data\" directory (%s)" : "Неуспешен опит за създаване на \"data\" папката (%s).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Правата за достъп обикновено могат да бъдат оправени когато %s даде права на уеб сървъра да пише в root папката %s.", - "Setting locale to %s failed" : "Неуспешно задаване на %s като настройка език-държава.", - "Please install one of these locales on your system and restart your webserver." : "Моля, инсталирай едно от следните език-държава на сървъра и рестартирай уеб сървъра.", - "Please ask your server administrator to install the module." : "Моля, помолете вашия администратор да инсталира модула.", - "PHP module %s not installed." : "PHP модулът %s не е инсталиран.", - "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Това може да се дължи на cache/accelerator като Zend OPache или eAccelerator.", - "PHP modules have been installed, but they are still listed as missing?" : "PHP модулите са инсталирани, но все още се обявяват като липсващи?", - "Please ask your server administrator to restart the web server." : "Моля, поискай от своя администратор да рестартира уеб сървъра.", - "PostgreSQL >= 9 required" : "Изисква се PostgreSQL >= 9", - "Please upgrade your database version" : "Моля, обнови базата данни.", - "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Моля, променете правата за достъп на 0770, за да не може директорията да бъде видяна от други потребители.", - "Data directory (%s) is readable by other users" : "Data папката (%s) може да бъде разгледана от други потребители", - "Data directory (%s) is invalid" : "Data папката (%s) e невалидна", - "Please check that the data directory contains a file \".ocdata\" in its root." : "Моля, увери се, че data папката съдържа файл \".ocdata\" в себе си.", - "Could not obtain lock type %d on \"%s\"." : "Неуспешен опит за ексклузивен достъп от типa %d върху \"%s\"." -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/ca.js b/lib/l10n/ca.js deleted file mode 100644 index 48d98c4a4ec..00000000000 --- a/lib/l10n/ca.js +++ /dev/null @@ -1,164 +0,0 @@ -OC.L10N.register( - "lib", - { - "Cannot write into \"config\" directory!" : "No es pot escriure a la carpeta \"config\"!", - "This can usually be fixed by giving the webserver write access to the config directory" : "Això normalment es pot solucionar donant al servidor web permís d'escriptura a la carpeta de configuració", - "See %s" : "Comproveu %s", - "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s", - "Sample configuration detected" : "Configuració d'exemple detectada", - "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "S'ha detectat que la configuració d'exemple ha estat copiada. Això no està suportat, i podria corrompre la vostra instalació. Siusplau, llegiu la documentació abans de realitzar canvis a config.php", - "%1$s and %2$s" : "%1$s i %2$s", - "%1$s, %2$s and %3$s" : "%1$s, %2$s i %3$s", - "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s i %4$s", - "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s i %5$s", - "PHP %s or higher is required." : "Es requereix PHP %s o superior.", - "%sbit or higher PHP required." : "Es requereix PHP %s o superior.", - "Server version %s or higher is required." : "Es requereix una versió de servidor %s o superior", - "Server version %s or lower is required." : "Es requereix una versió de servidor %s o inferior", - "Unknown filetype" : "Tipus de fitxer desconegut", - "Invalid image" : "Imatge no vàlida", - "Avatar image is not square" : "La imatge de perfil no és quadrada", - "today" : "avui", - "yesterday" : "ahir", - "_%n day ago_::_%n days ago_" : ["fa %n dia","fa %n dies"], - "last month" : "el mes passat", - "_%n month ago_::_%n months ago_" : ["fa %n mes","fa %n mesos"], - "last year" : "l'any passat", - "_%n year ago_::_%n years ago_" : ["fa %n any","fa %n anys"], - "_%n hour ago_::_%n hours ago_" : ["fa %n hora","fa %n hores"], - "_%n minute ago_::_%n minutes ago_" : ["fa %n minut","fa %n minuts"], - "seconds ago" : "segons enrere", - "File name contains at least one invalid character" : "El nom del fitxer conté al menys un caràcter invàlid", - "File name is too long" : "el nom del fitxer es massa gran", - "Help" : "Ajuda", - "Apps" : "Aplicacions", - "Personal" : "Personal", - "Users" : "Usuaris", - "Admin" : "Administració", - "APCu" : "APCu", - "Redis" : "Redis", - "Server settings" : "Configuració del Servidor", - "Sharing" : "Compartir", - "Encryption" : "Xifrat", - "Additional settings" : "Configuració adicional", - "Tips & tricks" : "Consells i trucs", - "%s enter the database username and name." : "%s escriviu el nom d'usuari i el nom de la base de dades.", - "%s enter the database username." : "%s escriviu el nom d'usuari de la base de dades.", - "%s enter the database name." : "%s escriviu el nom de la base de dades.", - "%s you may not use dots in the database name" : "%s no podeu usar punts en el nom de la base de dades", - "Oracle connection could not be established" : "No s'ha pogut establir la connexió Oracle", - "Oracle username and/or password not valid" : "Nom d'usuari i/o contrasenya Oracle no vàlids", - "DB Error: \"%s\"" : "Error DB: \"%s\"", - "Offending command was: \"%s\"" : "L'ordre en conflicte és: \"%s\"", - "You need to enter either an existing account or the administrator." : "Heu d'escriure un compte existent o el d'administrador.", - "Offending command was: \"%s\", name: %s, password: %s" : "L'ordre en conflicte és: \"%s\", nom: %s, contrasenya: %s", - "PostgreSQL username and/or password not valid" : "Nom d'usuari i/o contrasenya PostgreSQL no vàlids", - "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X no té suport i %s no funcionarà correctament en aquesta plataforma. Useu-ho al vostre risc!", - "For the best results, please consider using a GNU/Linux server instead." : "Per millors resultats, millor considereu utilitzar un servidor GNU/Linux.", - "Set an admin username." : "Establiu un nom d'usuari per l'administrador.", - "Set an admin password." : "Establiu una contrasenya per l'administrador.", - "Invalid Federated Cloud ID" : "ID de núvol federat invàlid", - "%s shared »%s« with you" : "%s ha compartit »%s« amb tu", - "%s via %s" : "%s via %s", - "Sharing %s failed, because the file does not exist" : "Ha fallat en compartir %s, perquè el fitxer no existeix", - "You are not allowed to share %s" : "No se us permet compartir %s", - "Sharing %s failed, because the user %s does not exist" : "Ha fallat en compartir %s, perquè l'usuari %s no existeix", - "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Ha fallat en compartir %s, perquè l'usuari %s no és membre de cap grup dels que %s és membre", - "Sharing %s failed, because this item is already shared with %s" : "Ha fallat en compartir %s, perquè l'element ja està compartit amb %s", - "Sharing %s failed, because the group %s does not exist" : "Ha fallat en compartir %s, perquè el grup %s no existeix", - "Sharing %s failed, because %s is not a member of the group %s" : "Ha fallat en compartir %s, perquè %s no és membre del grup %s", - "You need to provide a password to create a public link, only protected links are allowed" : "Heu de proporcionar una contrasenya per crear un enllaç públic. Només es permeten enllaços segurs.", - "Sharing %s failed, because sharing with links is not allowed" : "Ha fallat en compartir %s, perquè no es permet compartir amb enllaços", - "Not allowed to create a federated share with the same user" : "No està permés crear una compartició federada amb el mateix usuari", - "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "La compartició de %s ha fallat, no es pot trobar %s, potser el servidor està actualment innacessible.", - "Share type %s is not valid for %s" : "La compartició tipus %s no és vàlida per %s", - "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Ha fallat en establir els permisos per %s perquè aquests excedeixen els permesos per a %s", - "Setting permissions for %s failed, because the item was not found" : "Ha fallat en establir els permisos per %s, perquè no s'ha trobat l'element", - "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No es pot guardar la data d'expiració. Els fitxers o carpetes compartits no poden expirar més tard de %s després d'haver-se compratit.", - "Cannot set expiration date. Expiration date is in the past" : "No es pot guardar la data d'expiració. La data d'expiració ja ha passat.", - "Sharing backend %s must implement the interface OCP\\Share_Backend" : "El rerefons de compartició %s ha d'implementar la interfície OCP\\Share_Backend", - "Sharing backend %s not found" : "El rerefons de compartició %s no s'ha trobat", - "Sharing backend for %s not found" : "El rerefons de compartició per a %s no s'ha trobat", - "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Ha fallat en compartir %s perquè els permisos excedeixen els permesos per a %s", - "Sharing %s failed, because resharing is not allowed" : "Ha fallat en compartir %s, perquè no es permet compartir de nou", - "Sharing %s failed, because the sharing backend for %s could not find its source" : "Ha fallat en compartir %s, perquè el rerefons de compartir per %s no pot trobar la seva font", - "Sharing %s failed, because the file could not be found in the file cache" : "Ha fallat en compartir %s, perquè el fitxer no s'ha trobat en el fitxer cau", - "Could not find category \"%s\"" : "No s'ha trobat la categoria \"%s\"", - "Sunday" : "Diumenge", - "Monday" : "Dilluns", - "Tuesday" : "Dimarts", - "Wednesday" : "Dimecres", - "Thursday" : "Dijous", - "Friday" : "Divendres", - "Saturday" : "Dissabte", - "Sun." : "Dg.", - "Mon." : "Mon.", - "Tue." : "Dm.", - "Wed." : "Dc.", - "Thu." : "Dj.", - "Fri." : "Dv.", - "Sat." : "Ds.", - "Su" : "Dg", - "Mo" : "Dl", - "Tu" : "Dm", - "We" : "Dc", - "Th" : "Dj", - "Fr" : "Dv", - "Sa" : "Ds", - "January" : "Gener", - "February" : "Febrer", - "March" : "Març", - "April" : "Abril", - "May" : "Maig", - "June" : "Juny", - "July" : "Juliol", - "August" : "Agost", - "September" : "Setembre", - "October" : "Octubre", - "November" : "Novembre", - "December" : "Desembre", - "Jan." : "Gen.", - "Feb." : "Febr.", - "Mar." : "Març", - "Apr." : "Abr", - "May." : "Maig", - "Jun." : "Juny", - "Jul." : "Jul.", - "Aug." : "Ag.", - "Sep." : "Set", - "Oct." : "Oct.", - "Nov." : "Nov.", - "Dec." : "Des.", - "A valid username must be provided" : "Heu de facilitar un nom d'usuari vàlid", - "A valid password must be provided" : "Heu de facilitar una contrasenya vàlida", - "The username is already being used" : "El nom d'usuari ja està en ús", - "Login canceled by app" : "Accés cancel·lat per l'App", - "User disabled" : "Usuari desactivat", - "No app name specified" : "No heu especificat cap nom d'aplicació", - "Can't read file" : "No es pot llegir el fitxer", - "Application is not enabled" : "L'aplicació no està habilitada", - "Authentication error" : "Error d'autenticació", - "Token expired. Please reload page." : "El testimoni ha expirat. Torneu a carregar la pàgina.", - "Unknown user" : "Usuari desconegut", - "No database drivers (sqlite, mysql, or postgresql) installed." : "No hi ha instal·lats controladors de bases de dades (sqlite, mysql o postgresql).", - "Cannot write into \"config\" directory" : "No es pot escriure a la carpeta \"config\"", - "Cannot write into \"apps\" directory" : "No es pot escriure a la carpeta \"apps\"", - "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta d'aplicacions %s o inhabilitant la botiga d'aplicacions en el fitxer de configuració.", - "Cannot create \"data\" directory (%s)" : "No es pot crear la carpeta \"data\" (%s)", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s", - "Setting locale to %s failed" : "Ha fallat en establir la llengua a %s", - "Please install one of these locales on your system and restart your webserver." : "Siusplau, instal·li un d'aquests arxius de localització en el seu sistema, i reinicii el seu servidor web.", - "Please ask your server administrator to install the module." : "Demaneu a l'administrador del sistema que instal·li el mòdul.", - "PHP module %s not installed." : "El mòdul PHP %s no està instal·lat.", - "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Això probablement està provocat per una cau/accelerador com Zend OPcache o eAccelerator.", - "PHP modules have been installed, but they are still listed as missing?" : "S'han instal·lat mòduls PHP, però encara es llisten com una mancança?", - "Please ask your server administrator to restart the web server." : "Demaneu a l'administrador que reinici el servidor web.", - "PostgreSQL >= 9 required" : "Es requereix PostgreSQL >= 9", - "Please upgrade your database version" : "Actualitzeu la versió de la base de dades", - "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Canvieu els permisos a 0770 per tal que la carpeta no es pugui llistar per altres usuaris.", - "Data directory (%s) is readable by other users" : "La carpeta de dades (%s) és llegible per altres usuaris", - "Data directory (%s) is invalid" : "La carpeta de dades (%s) no és vàlida", - "Please check that the data directory contains a file \".ocdata\" in its root." : "Comproveu que la carpeta de dades contingui un fitxer \".ocdata\" a la seva arrel.", - "Could not obtain lock type %d on \"%s\"." : "No s'ha pogut obtenir un bloqueig tipus %d a \"%s\"." -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/ca.json b/lib/l10n/ca.json deleted file mode 100644 index d6180c9ce5b..00000000000 --- a/lib/l10n/ca.json +++ /dev/null @@ -1,162 +0,0 @@ -{ "translations": { - "Cannot write into \"config\" directory!" : "No es pot escriure a la carpeta \"config\"!", - "This can usually be fixed by giving the webserver write access to the config directory" : "Això normalment es pot solucionar donant al servidor web permís d'escriptura a la carpeta de configuració", - "See %s" : "Comproveu %s", - "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s", - "Sample configuration detected" : "Configuració d'exemple detectada", - "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "S'ha detectat que la configuració d'exemple ha estat copiada. Això no està suportat, i podria corrompre la vostra instalació. Siusplau, llegiu la documentació abans de realitzar canvis a config.php", - "%1$s and %2$s" : "%1$s i %2$s", - "%1$s, %2$s and %3$s" : "%1$s, %2$s i %3$s", - "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s i %4$s", - "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s i %5$s", - "PHP %s or higher is required." : "Es requereix PHP %s o superior.", - "%sbit or higher PHP required." : "Es requereix PHP %s o superior.", - "Server version %s or higher is required." : "Es requereix una versió de servidor %s o superior", - "Server version %s or lower is required." : "Es requereix una versió de servidor %s o inferior", - "Unknown filetype" : "Tipus de fitxer desconegut", - "Invalid image" : "Imatge no vàlida", - "Avatar image is not square" : "La imatge de perfil no és quadrada", - "today" : "avui", - "yesterday" : "ahir", - "_%n day ago_::_%n days ago_" : ["fa %n dia","fa %n dies"], - "last month" : "el mes passat", - "_%n month ago_::_%n months ago_" : ["fa %n mes","fa %n mesos"], - "last year" : "l'any passat", - "_%n year ago_::_%n years ago_" : ["fa %n any","fa %n anys"], - "_%n hour ago_::_%n hours ago_" : ["fa %n hora","fa %n hores"], - "_%n minute ago_::_%n minutes ago_" : ["fa %n minut","fa %n minuts"], - "seconds ago" : "segons enrere", - "File name contains at least one invalid character" : "El nom del fitxer conté al menys un caràcter invàlid", - "File name is too long" : "el nom del fitxer es massa gran", - "Help" : "Ajuda", - "Apps" : "Aplicacions", - "Personal" : "Personal", - "Users" : "Usuaris", - "Admin" : "Administració", - "APCu" : "APCu", - "Redis" : "Redis", - "Server settings" : "Configuració del Servidor", - "Sharing" : "Compartir", - "Encryption" : "Xifrat", - "Additional settings" : "Configuració adicional", - "Tips & tricks" : "Consells i trucs", - "%s enter the database username and name." : "%s escriviu el nom d'usuari i el nom de la base de dades.", - "%s enter the database username." : "%s escriviu el nom d'usuari de la base de dades.", - "%s enter the database name." : "%s escriviu el nom de la base de dades.", - "%s you may not use dots in the database name" : "%s no podeu usar punts en el nom de la base de dades", - "Oracle connection could not be established" : "No s'ha pogut establir la connexió Oracle", - "Oracle username and/or password not valid" : "Nom d'usuari i/o contrasenya Oracle no vàlids", - "DB Error: \"%s\"" : "Error DB: \"%s\"", - "Offending command was: \"%s\"" : "L'ordre en conflicte és: \"%s\"", - "You need to enter either an existing account or the administrator." : "Heu d'escriure un compte existent o el d'administrador.", - "Offending command was: \"%s\", name: %s, password: %s" : "L'ordre en conflicte és: \"%s\", nom: %s, contrasenya: %s", - "PostgreSQL username and/or password not valid" : "Nom d'usuari i/o contrasenya PostgreSQL no vàlids", - "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X no té suport i %s no funcionarà correctament en aquesta plataforma. Useu-ho al vostre risc!", - "For the best results, please consider using a GNU/Linux server instead." : "Per millors resultats, millor considereu utilitzar un servidor GNU/Linux.", - "Set an admin username." : "Establiu un nom d'usuari per l'administrador.", - "Set an admin password." : "Establiu una contrasenya per l'administrador.", - "Invalid Federated Cloud ID" : "ID de núvol federat invàlid", - "%s shared »%s« with you" : "%s ha compartit »%s« amb tu", - "%s via %s" : "%s via %s", - "Sharing %s failed, because the file does not exist" : "Ha fallat en compartir %s, perquè el fitxer no existeix", - "You are not allowed to share %s" : "No se us permet compartir %s", - "Sharing %s failed, because the user %s does not exist" : "Ha fallat en compartir %s, perquè l'usuari %s no existeix", - "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Ha fallat en compartir %s, perquè l'usuari %s no és membre de cap grup dels que %s és membre", - "Sharing %s failed, because this item is already shared with %s" : "Ha fallat en compartir %s, perquè l'element ja està compartit amb %s", - "Sharing %s failed, because the group %s does not exist" : "Ha fallat en compartir %s, perquè el grup %s no existeix", - "Sharing %s failed, because %s is not a member of the group %s" : "Ha fallat en compartir %s, perquè %s no és membre del grup %s", - "You need to provide a password to create a public link, only protected links are allowed" : "Heu de proporcionar una contrasenya per crear un enllaç públic. Només es permeten enllaços segurs.", - "Sharing %s failed, because sharing with links is not allowed" : "Ha fallat en compartir %s, perquè no es permet compartir amb enllaços", - "Not allowed to create a federated share with the same user" : "No està permés crear una compartició federada amb el mateix usuari", - "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "La compartició de %s ha fallat, no es pot trobar %s, potser el servidor està actualment innacessible.", - "Share type %s is not valid for %s" : "La compartició tipus %s no és vàlida per %s", - "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Ha fallat en establir els permisos per %s perquè aquests excedeixen els permesos per a %s", - "Setting permissions for %s failed, because the item was not found" : "Ha fallat en establir els permisos per %s, perquè no s'ha trobat l'element", - "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No es pot guardar la data d'expiració. Els fitxers o carpetes compartits no poden expirar més tard de %s després d'haver-se compratit.", - "Cannot set expiration date. Expiration date is in the past" : "No es pot guardar la data d'expiració. La data d'expiració ja ha passat.", - "Sharing backend %s must implement the interface OCP\\Share_Backend" : "El rerefons de compartició %s ha d'implementar la interfície OCP\\Share_Backend", - "Sharing backend %s not found" : "El rerefons de compartició %s no s'ha trobat", - "Sharing backend for %s not found" : "El rerefons de compartició per a %s no s'ha trobat", - "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Ha fallat en compartir %s perquè els permisos excedeixen els permesos per a %s", - "Sharing %s failed, because resharing is not allowed" : "Ha fallat en compartir %s, perquè no es permet compartir de nou", - "Sharing %s failed, because the sharing backend for %s could not find its source" : "Ha fallat en compartir %s, perquè el rerefons de compartir per %s no pot trobar la seva font", - "Sharing %s failed, because the file could not be found in the file cache" : "Ha fallat en compartir %s, perquè el fitxer no s'ha trobat en el fitxer cau", - "Could not find category \"%s\"" : "No s'ha trobat la categoria \"%s\"", - "Sunday" : "Diumenge", - "Monday" : "Dilluns", - "Tuesday" : "Dimarts", - "Wednesday" : "Dimecres", - "Thursday" : "Dijous", - "Friday" : "Divendres", - "Saturday" : "Dissabte", - "Sun." : "Dg.", - "Mon." : "Mon.", - "Tue." : "Dm.", - "Wed." : "Dc.", - "Thu." : "Dj.", - "Fri." : "Dv.", - "Sat." : "Ds.", - "Su" : "Dg", - "Mo" : "Dl", - "Tu" : "Dm", - "We" : "Dc", - "Th" : "Dj", - "Fr" : "Dv", - "Sa" : "Ds", - "January" : "Gener", - "February" : "Febrer", - "March" : "Març", - "April" : "Abril", - "May" : "Maig", - "June" : "Juny", - "July" : "Juliol", - "August" : "Agost", - "September" : "Setembre", - "October" : "Octubre", - "November" : "Novembre", - "December" : "Desembre", - "Jan." : "Gen.", - "Feb." : "Febr.", - "Mar." : "Març", - "Apr." : "Abr", - "May." : "Maig", - "Jun." : "Juny", - "Jul." : "Jul.", - "Aug." : "Ag.", - "Sep." : "Set", - "Oct." : "Oct.", - "Nov." : "Nov.", - "Dec." : "Des.", - "A valid username must be provided" : "Heu de facilitar un nom d'usuari vàlid", - "A valid password must be provided" : "Heu de facilitar una contrasenya vàlida", - "The username is already being used" : "El nom d'usuari ja està en ús", - "Login canceled by app" : "Accés cancel·lat per l'App", - "User disabled" : "Usuari desactivat", - "No app name specified" : "No heu especificat cap nom d'aplicació", - "Can't read file" : "No es pot llegir el fitxer", - "Application is not enabled" : "L'aplicació no està habilitada", - "Authentication error" : "Error d'autenticació", - "Token expired. Please reload page." : "El testimoni ha expirat. Torneu a carregar la pàgina.", - "Unknown user" : "Usuari desconegut", - "No database drivers (sqlite, mysql, or postgresql) installed." : "No hi ha instal·lats controladors de bases de dades (sqlite, mysql o postgresql).", - "Cannot write into \"config\" directory" : "No es pot escriure a la carpeta \"config\"", - "Cannot write into \"apps\" directory" : "No es pot escriure a la carpeta \"apps\"", - "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta d'aplicacions %s o inhabilitant la botiga d'aplicacions en el fitxer de configuració.", - "Cannot create \"data\" directory (%s)" : "No es pot crear la carpeta \"data\" (%s)", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s", - "Setting locale to %s failed" : "Ha fallat en establir la llengua a %s", - "Please install one of these locales on your system and restart your webserver." : "Siusplau, instal·li un d'aquests arxius de localització en el seu sistema, i reinicii el seu servidor web.", - "Please ask your server administrator to install the module." : "Demaneu a l'administrador del sistema que instal·li el mòdul.", - "PHP module %s not installed." : "El mòdul PHP %s no està instal·lat.", - "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Això probablement està provocat per una cau/accelerador com Zend OPcache o eAccelerator.", - "PHP modules have been installed, but they are still listed as missing?" : "S'han instal·lat mòduls PHP, però encara es llisten com una mancança?", - "Please ask your server administrator to restart the web server." : "Demaneu a l'administrador que reinici el servidor web.", - "PostgreSQL >= 9 required" : "Es requereix PostgreSQL >= 9", - "Please upgrade your database version" : "Actualitzeu la versió de la base de dades", - "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Canvieu els permisos a 0770 per tal que la carpeta no es pugui llistar per altres usuaris.", - "Data directory (%s) is readable by other users" : "La carpeta de dades (%s) és llegible per altres usuaris", - "Data directory (%s) is invalid" : "La carpeta de dades (%s) no és vàlida", - "Please check that the data directory contains a file \".ocdata\" in its root." : "Comproveu que la carpeta de dades contingui un fitxer \".ocdata\" a la seva arrel.", - "Could not obtain lock type %d on \"%s\"." : "No s'ha pogut obtenir un bloqueig tipus %d a \"%s\"." -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/cs.js b/lib/l10n/cs.js index c68707af7b4..cc6f6f137d9 100644 --- a/lib/l10n/cs.js +++ b/lib/l10n/cs.js @@ -178,7 +178,6 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Nelze zapisovat do adresáře \"config\"", "Cannot write into \"apps\" directory" : "Nelze zapisovat do adresáře \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "To lze obvykle vyřešit %spovolením zápisu webovému serveru do adresáře apps%s nebo zakázáním appstore v konfiguračním souboru.", - "Cannot create \"data\" directory (%s)" : "Nelze vytvořit adresář \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Toto může být obvykle opraveno <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">nastavením přístupových práv webového serveru pro zápis do kořenového adresáře</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnění lze obvykle napravit %spovolením zápisu webovému serveru do kořenového adresáře%s.", "Setting locale to %s failed" : "Nastavení jazyka na %s selhalo", @@ -198,16 +197,17 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "Je vyžadováno PostgreSQL >= 9", "Please upgrade your database version" : "Aktualizujte prosím verzi své databáze", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Změňte prosím práva na 0770, aby adresář nemohl být otevřen ostatními uživateli.", - "Data directory (%s) is readable by other users" : "Datový adresář (%s) je čitelný i ostatními uživateli", - "Data directory (%s) must be an absolute path" : "Cesta k datovému adresáři (%s) musí být uvedena absolutně", "Check the value of \"datadirectory\" in your configuration" : "Ověřte hodnotu \"datadirectory\" ve své konfiguraci", - "Data directory (%s) is invalid" : "Datový adresář (%s) je neplatný", "Please check that the data directory contains a file \".ocdata\" in its root." : "Ověřte prosím, že kořenový adresář s daty obsahuje soubor \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "Nelze získat zámek typu %d na \"%s\".", "Storage unauthorized. %s" : "Úložiště neověřeno. %s", "Storage incomplete configuration. %s" : "Nekompletní konfigurace úložiště. %s", "Storage connection error. %s" : "Chyba připojení úložiště. %s", "Storage is temporarily not available" : "Úložiště je dočasně nedostupné", - "Storage connection timeout. %s" : "Vypršení připojení k úložišti. %s" + "Storage connection timeout. %s" : "Vypršení připojení k úložišti. %s", + "Cannot create \"data\" directory (%s)" : "Nelze vytvořit adresář \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Datový adresář (%s) je čitelný i ostatními uživateli", + "Data directory (%s) must be an absolute path" : "Cesta k datovému adresáři (%s) musí být uvedena absolutně", + "Data directory (%s) is invalid" : "Datový adresář (%s) je neplatný" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/lib/l10n/cs.json b/lib/l10n/cs.json index 98abbeb7f4a..8828162a127 100644 --- a/lib/l10n/cs.json +++ b/lib/l10n/cs.json @@ -176,7 +176,6 @@ "Cannot write into \"config\" directory" : "Nelze zapisovat do adresáře \"config\"", "Cannot write into \"apps\" directory" : "Nelze zapisovat do adresáře \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "To lze obvykle vyřešit %spovolením zápisu webovému serveru do adresáře apps%s nebo zakázáním appstore v konfiguračním souboru.", - "Cannot create \"data\" directory (%s)" : "Nelze vytvořit adresář \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Toto může být obvykle opraveno <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">nastavením přístupových práv webového serveru pro zápis do kořenového adresáře</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnění lze obvykle napravit %spovolením zápisu webovému serveru do kořenového adresáře%s.", "Setting locale to %s failed" : "Nastavení jazyka na %s selhalo", @@ -196,16 +195,17 @@ "PostgreSQL >= 9 required" : "Je vyžadováno PostgreSQL >= 9", "Please upgrade your database version" : "Aktualizujte prosím verzi své databáze", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Změňte prosím práva na 0770, aby adresář nemohl být otevřen ostatními uživateli.", - "Data directory (%s) is readable by other users" : "Datový adresář (%s) je čitelný i ostatními uživateli", - "Data directory (%s) must be an absolute path" : "Cesta k datovému adresáři (%s) musí být uvedena absolutně", "Check the value of \"datadirectory\" in your configuration" : "Ověřte hodnotu \"datadirectory\" ve své konfiguraci", - "Data directory (%s) is invalid" : "Datový adresář (%s) je neplatný", "Please check that the data directory contains a file \".ocdata\" in its root." : "Ověřte prosím, že kořenový adresář s daty obsahuje soubor \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "Nelze získat zámek typu %d na \"%s\".", "Storage unauthorized. %s" : "Úložiště neověřeno. %s", "Storage incomplete configuration. %s" : "Nekompletní konfigurace úložiště. %s", "Storage connection error. %s" : "Chyba připojení úložiště. %s", "Storage is temporarily not available" : "Úložiště je dočasně nedostupné", - "Storage connection timeout. %s" : "Vypršení připojení k úložišti. %s" + "Storage connection timeout. %s" : "Vypršení připojení k úložišti. %s", + "Cannot create \"data\" directory (%s)" : "Nelze vytvořit adresář \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Datový adresář (%s) je čitelný i ostatními uživateli", + "Data directory (%s) must be an absolute path" : "Cesta k datovému adresáři (%s) musí být uvedena absolutně", + "Data directory (%s) is invalid" : "Datový adresář (%s) je neplatný" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/lib/l10n/de.js b/lib/l10n/de.js index 743ea8d6c15..1d1a18167b9 100644 --- a/lib/l10n/de.js +++ b/lib/l10n/de.js @@ -180,7 +180,7 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Das Schreiben in das „config“-Verzeichnis ist nicht möglich", "Cannot write into \"apps\" directory" : "Das Schreiben in das „apps“-Verzeichnis ist nicht möglich", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dies kann normalerweise behoben werden, %sindem dem Webserver Schreibzugriff auf das App-Verzeichnis gegeben wird%s oder der App Store in der Konfigurationsdatei deaktiviert wird.", - "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", + "Cannot create \"data\" directory" : "Kann das \"Daten\"-Verzeichnis nicht erstellen", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", "Setting locale to %s failed" : "Das Setzen der Umgebungslokale auf %s fehlgeschlagen", @@ -200,16 +200,20 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt", "Please upgrade your database version" : "Bitte aktualisiere deine Datenbankversion", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändere die Berechtigungen auf 0770, sodass das Verzeichnis nicht von anderen Nutzer angezeigt werden kann.", - "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Nutzern lesbar", - "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein", + "Your data directory is readable by other users" : "Dein Datenverzeichnis kann von anderen Benutzern gelesen werden", + "Your data directory must be an absolute path" : "Dein Datenverzeichnis muss einen eindeutigen Pfad haben", "Check the value of \"datadirectory\" in your configuration" : "Überprüfe bitte die Angabe unter „datadirectory“ in Deiner Konfiguration", - "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig", + "Your data directory is invalid" : "Dein Datenverzeichnis ist ungültig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Bitte stelle sicher, dass das Datenverzeichnis auf seiner ersten Ebene eine Datei namens „.ocdata“ enthält.", "Could not obtain lock type %d on \"%s\"." : "Sperrtyp %d auf „%s“ konnte nicht ermittelt werden.", "Storage unauthorized. %s" : "Speichern nicht erlaubt. %s", "Storage incomplete configuration. %s" : "Unvollständige Konfiguration des Storage. %s", "Storage connection error. %s" : "Verbindungsfehler zum Speicherplatz. %s", "Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar", - "Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s" + "Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s", + "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", + "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Nutzern lesbar", + "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein", + "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/de.json b/lib/l10n/de.json index b73974d01da..140e339490f 100644 --- a/lib/l10n/de.json +++ b/lib/l10n/de.json @@ -178,7 +178,7 @@ "Cannot write into \"config\" directory" : "Das Schreiben in das „config“-Verzeichnis ist nicht möglich", "Cannot write into \"apps\" directory" : "Das Schreiben in das „apps“-Verzeichnis ist nicht möglich", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dies kann normalerweise behoben werden, %sindem dem Webserver Schreibzugriff auf das App-Verzeichnis gegeben wird%s oder der App Store in der Konfigurationsdatei deaktiviert wird.", - "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", + "Cannot create \"data\" directory" : "Kann das \"Daten\"-Verzeichnis nicht erstellen", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", "Setting locale to %s failed" : "Das Setzen der Umgebungslokale auf %s fehlgeschlagen", @@ -198,16 +198,20 @@ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt", "Please upgrade your database version" : "Bitte aktualisiere deine Datenbankversion", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändere die Berechtigungen auf 0770, sodass das Verzeichnis nicht von anderen Nutzer angezeigt werden kann.", - "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Nutzern lesbar", - "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein", + "Your data directory is readable by other users" : "Dein Datenverzeichnis kann von anderen Benutzern gelesen werden", + "Your data directory must be an absolute path" : "Dein Datenverzeichnis muss einen eindeutigen Pfad haben", "Check the value of \"datadirectory\" in your configuration" : "Überprüfe bitte die Angabe unter „datadirectory“ in Deiner Konfiguration", - "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig", + "Your data directory is invalid" : "Dein Datenverzeichnis ist ungültig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Bitte stelle sicher, dass das Datenverzeichnis auf seiner ersten Ebene eine Datei namens „.ocdata“ enthält.", "Could not obtain lock type %d on \"%s\"." : "Sperrtyp %d auf „%s“ konnte nicht ermittelt werden.", "Storage unauthorized. %s" : "Speichern nicht erlaubt. %s", "Storage incomplete configuration. %s" : "Unvollständige Konfiguration des Storage. %s", "Storage connection error. %s" : "Verbindungsfehler zum Speicherplatz. %s", "Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar", - "Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s" + "Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s", + "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", + "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Nutzern lesbar", + "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein", + "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js index d78657ab3ec..46c02da16dd 100644 --- a/lib/l10n/de_DE.js +++ b/lib/l10n/de_DE.js @@ -180,7 +180,7 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Schreiben in das „config“-Verzeichnis ist nicht möglich", "Cannot write into \"apps\" directory" : "Schreiben in das „apps“-Verzeichnis ist nicht möglich", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dies kann normalerweise behoben werden, %sindem dem Webserver Schreibzugriff auf das App-Verzeichnis gegeben wird%s oder der App Store in der Konfigurationsdatei deaktiviert wird.", - "Cannot create \"data\" directory (%s)" : "Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", + "Cannot create \"data\" directory" : "Kann das \"Daten\"-Verzeichnis nicht erstellen", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\">Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", "Setting locale to %s failed" : "Das Setzen der Umgebungslokale auf %s fehlgeschlagen", @@ -200,16 +200,20 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt", "Please upgrade your database version" : "Bitte aktualisieren Sie Ihre Datenbankversion", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändern Sie die Berechtigungen auf 0770, so dass das Verzeichnis nicht von anderen Benutzern angezeigt werden kann.", - "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Benutzern lesbar", - "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein", + "Your data directory is readable by other users" : "Dein Datenverzeichnis kann von anderen Benutzern gelesen werden", + "Your data directory must be an absolute path" : "Dein Datenverzeichnis muss einen eindeutigen Pfad haben", "Check the value of \"datadirectory\" in your configuration" : "Überprüfen Sie bitte die Angabe unter „datadirectory“ in Ihrer Konfiguration", - "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig", + "Your data directory is invalid" : "Dein Datenverzeichnis ist ungültig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Bitte stellen Sie sicher, dass das Datenverzeichnis auf seiner ersten Ebene eine Datei namens „.ocdata“ enthält.", "Could not obtain lock type %d on \"%s\"." : "Sperrtyp %d auf „%s“ konnte nicht ermittelt werden.", "Storage unauthorized. %s" : "Speicher ungültig. %s", "Storage incomplete configuration. %s" : "Speicher-Konfiguration unvollständig. %s", "Storage connection error. %s" : "Speicher-Verbindungsfehler. %s", "Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar", - "Storage connection timeout. %s" : "Speicher-Verbindungszeitüberschreitung. %s" + "Storage connection timeout. %s" : "Speicher-Verbindungszeitüberschreitung. %s", + "Cannot create \"data\" directory (%s)" : "Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", + "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Benutzern lesbar", + "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein", + "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json index 7329362bab2..a7c2eb2aad6 100644 --- a/lib/l10n/de_DE.json +++ b/lib/l10n/de_DE.json @@ -178,7 +178,7 @@ "Cannot write into \"config\" directory" : "Schreiben in das „config“-Verzeichnis ist nicht möglich", "Cannot write into \"apps\" directory" : "Schreiben in das „apps“-Verzeichnis ist nicht möglich", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dies kann normalerweise behoben werden, %sindem dem Webserver Schreibzugriff auf das App-Verzeichnis gegeben wird%s oder der App Store in der Konfigurationsdatei deaktiviert wird.", - "Cannot create \"data\" directory (%s)" : "Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", + "Cannot create \"data\" directory" : "Kann das \"Daten\"-Verzeichnis nicht erstellen", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\">Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", "Setting locale to %s failed" : "Das Setzen der Umgebungslokale auf %s fehlgeschlagen", @@ -198,16 +198,20 @@ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt", "Please upgrade your database version" : "Bitte aktualisieren Sie Ihre Datenbankversion", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändern Sie die Berechtigungen auf 0770, so dass das Verzeichnis nicht von anderen Benutzern angezeigt werden kann.", - "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Benutzern lesbar", - "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein", + "Your data directory is readable by other users" : "Dein Datenverzeichnis kann von anderen Benutzern gelesen werden", + "Your data directory must be an absolute path" : "Dein Datenverzeichnis muss einen eindeutigen Pfad haben", "Check the value of \"datadirectory\" in your configuration" : "Überprüfen Sie bitte die Angabe unter „datadirectory“ in Ihrer Konfiguration", - "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig", + "Your data directory is invalid" : "Dein Datenverzeichnis ist ungültig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Bitte stellen Sie sicher, dass das Datenverzeichnis auf seiner ersten Ebene eine Datei namens „.ocdata“ enthält.", "Could not obtain lock type %d on \"%s\"." : "Sperrtyp %d auf „%s“ konnte nicht ermittelt werden.", "Storage unauthorized. %s" : "Speicher ungültig. %s", "Storage incomplete configuration. %s" : "Speicher-Konfiguration unvollständig. %s", "Storage connection error. %s" : "Speicher-Verbindungsfehler. %s", "Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar", - "Storage connection timeout. %s" : "Speicher-Verbindungszeitüberschreitung. %s" + "Storage connection timeout. %s" : "Speicher-Verbindungszeitüberschreitung. %s", + "Cannot create \"data\" directory (%s)" : "Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", + "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Benutzern lesbar", + "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein", + "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/el.js b/lib/l10n/el.js index 91f6783d7c4..e43361541cb 100644 --- a/lib/l10n/el.js +++ b/lib/l10n/el.js @@ -158,7 +158,6 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Αδυναμία εγγραφής στον κατάλογο \"config\"", "Cannot write into \"apps\" directory" : "Αδυναμία εγγραφής στον κατάλογο \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Αυτό μπορεί συνήθως να διορθωθεί %sδίνοντας διακαιώματα εγγραφής για τον κατάλογο εφαρμογών στο διακομιστή δικτύου%s ή απενεργοποιώντας το κέντρο εφαρμογών στο αρχείο config.", - "Cannot create \"data\" directory (%s)" : "Αδυναμία δημιουργίας του καταλόγου \"data\" (%s)", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Τα δικαιώματα πρόσβασης μπορούν συνήθως να διορθωθούν %sδίνοντας δικαιώματα εγγραφής για τον βασικό κατάλογο στο διακομιστή δικτύου%s.", "Setting locale to %s failed" : "Ρύθμιση τοπικών ρυθμίσεων σε %s απέτυχε", "Please install one of these locales on your system and restart your webserver." : "Παρακαλώ να εγκαταστήσετε μία από αυτές τις τοπικές ρυθμίσεις στο σύστημά σας και να επανεκκινήσετε τον διακομιστή δικτύου σας.", @@ -175,11 +174,12 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "Απαιτείται PostgreSQL >= 9", "Please upgrade your database version" : "Παρακαλώ αναβαθμίστε την έκδοση της βάσης δεδομένων σας", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Παρακαλώ αλλάξτε τις ρυθμίσεις σε 0770 έτσι ώστε ο κατάλογος να μην μπορεί να προβάλλεται από άλλους χρήστες.", - "Data directory (%s) is readable by other users" : "Ο κατάλογος δεδομένων (%s) είναι διαθέσιμος προς ανάγνωση για άλλους χρήστες", - "Data directory (%s) must be an absolute path" : "Κατάλογος δεδομένων (%s) πρεπει να είναι απόλυτη η διαδρομή", "Check the value of \"datadirectory\" in your configuration" : "Ελέγξτε την τιμή του \"Φάκελος Δεδομένων\" στις ρυθμίσεις σας", - "Data directory (%s) is invalid" : "Ο κατάλογος δεδομένων (%s) είναι άκυρος", "Please check that the data directory contains a file \".ocdata\" in its root." : "Παρακαλώ ελέγξτε ότι ο κατάλογος δεδομένων περιέχει ένα αρχείο \".ocdata\" στη βάση του.", - "Could not obtain lock type %d on \"%s\"." : "Αδυναμία ανάκτησης τύπου κλειδιού %d στο \"%s\"." + "Could not obtain lock type %d on \"%s\"." : "Αδυναμία ανάκτησης τύπου κλειδιού %d στο \"%s\".", + "Cannot create \"data\" directory (%s)" : "Αδυναμία δημιουργίας του καταλόγου \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Ο κατάλογος δεδομένων (%s) είναι διαθέσιμος προς ανάγνωση για άλλους χρήστες", + "Data directory (%s) must be an absolute path" : "Κατάλογος δεδομένων (%s) πρεπει να είναι απόλυτη η διαδρομή", + "Data directory (%s) is invalid" : "Ο κατάλογος δεδομένων (%s) είναι άκυρος" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/el.json b/lib/l10n/el.json index 499dacfb052..5f597371ba8 100644 --- a/lib/l10n/el.json +++ b/lib/l10n/el.json @@ -156,7 +156,6 @@ "Cannot write into \"config\" directory" : "Αδυναμία εγγραφής στον κατάλογο \"config\"", "Cannot write into \"apps\" directory" : "Αδυναμία εγγραφής στον κατάλογο \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Αυτό μπορεί συνήθως να διορθωθεί %sδίνοντας διακαιώματα εγγραφής για τον κατάλογο εφαρμογών στο διακομιστή δικτύου%s ή απενεργοποιώντας το κέντρο εφαρμογών στο αρχείο config.", - "Cannot create \"data\" directory (%s)" : "Αδυναμία δημιουργίας του καταλόγου \"data\" (%s)", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Τα δικαιώματα πρόσβασης μπορούν συνήθως να διορθωθούν %sδίνοντας δικαιώματα εγγραφής για τον βασικό κατάλογο στο διακομιστή δικτύου%s.", "Setting locale to %s failed" : "Ρύθμιση τοπικών ρυθμίσεων σε %s απέτυχε", "Please install one of these locales on your system and restart your webserver." : "Παρακαλώ να εγκαταστήσετε μία από αυτές τις τοπικές ρυθμίσεις στο σύστημά σας και να επανεκκινήσετε τον διακομιστή δικτύου σας.", @@ -173,11 +172,12 @@ "PostgreSQL >= 9 required" : "Απαιτείται PostgreSQL >= 9", "Please upgrade your database version" : "Παρακαλώ αναβαθμίστε την έκδοση της βάσης δεδομένων σας", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Παρακαλώ αλλάξτε τις ρυθμίσεις σε 0770 έτσι ώστε ο κατάλογος να μην μπορεί να προβάλλεται από άλλους χρήστες.", - "Data directory (%s) is readable by other users" : "Ο κατάλογος δεδομένων (%s) είναι διαθέσιμος προς ανάγνωση για άλλους χρήστες", - "Data directory (%s) must be an absolute path" : "Κατάλογος δεδομένων (%s) πρεπει να είναι απόλυτη η διαδρομή", "Check the value of \"datadirectory\" in your configuration" : "Ελέγξτε την τιμή του \"Φάκελος Δεδομένων\" στις ρυθμίσεις σας", - "Data directory (%s) is invalid" : "Ο κατάλογος δεδομένων (%s) είναι άκυρος", "Please check that the data directory contains a file \".ocdata\" in its root." : "Παρακαλώ ελέγξτε ότι ο κατάλογος δεδομένων περιέχει ένα αρχείο \".ocdata\" στη βάση του.", - "Could not obtain lock type %d on \"%s\"." : "Αδυναμία ανάκτησης τύπου κλειδιού %d στο \"%s\"." + "Could not obtain lock type %d on \"%s\"." : "Αδυναμία ανάκτησης τύπου κλειδιού %d στο \"%s\".", + "Cannot create \"data\" directory (%s)" : "Αδυναμία δημιουργίας του καταλόγου \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Ο κατάλογος δεδομένων (%s) είναι διαθέσιμος προς ανάγνωση για άλλους χρήστες", + "Data directory (%s) must be an absolute path" : "Κατάλογος δεδομένων (%s) πρεπει να είναι απόλυτη η διαδρομή", + "Data directory (%s) is invalid" : "Ο κατάλογος δεδομένων (%s) είναι άκυρος" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/es.js b/lib/l10n/es.js index 2eccf808d27..9c2fdf00c72 100644 --- a/lib/l10n/es.js +++ b/lib/l10n/es.js @@ -180,7 +180,7 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "No se puede escribir el el directorio de configuración", "Cannot write into \"apps\" directory" : "No se puede escribir en el directorio de \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto puede solucionarse fácilmente %sdándole permisos de escritura al servidor en el directorio%s de apps o deshabilitando la tienda de apps en el archivo de configuración.", - "Cannot create \"data\" directory (%s)" : "No puedo crear del directorio \"data\" (%s)", + "Cannot create \"data\" directory" : "No es posible crear el directorio \"data\"", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Normalmente esto se puede solucionar <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dándole al servidor web permisos de escritura en todo el directorio o el directorio 'root'</a>", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos normalmente puede solucionarse %sdándole al servidor permisos de escritura del directorio raíz%s.", "Setting locale to %s failed" : "Falló la activación del idioma %s ", @@ -200,16 +200,20 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "PostgreSQL 9 o superior requerido.", "Please upgrade your database version" : "Actualice su versión de base de datos.", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor cambie los permisos a 0770 para que el directorio no se pueda mostrar para otros usuarios.", - "Data directory (%s) is readable by other users" : "El directorio de datos (%s) se puede leer por otros usuarios.", - "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta", + "Your data directory is readable by other users" : "Su directorio data es leible por otros usuarios", + "Your data directory must be an absolute path" : "Su directorio data debe ser una ruta absoluta", "Check the value of \"datadirectory\" in your configuration" : "Compruebe el valor de \"datadirectory\" en su configuración.", - "Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido", + "Your data directory is invalid" : "Su directorio data es inválido", "Please check that the data directory contains a file \".ocdata\" in its root." : "Verifique que el directorio de datos contiene un archivo \".ocdata\" en su directorio raíz.", "Could not obtain lock type %d on \"%s\"." : "No se pudo realizar el bloqueo %d en \"%s\".", "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s", "Storage incomplete configuration. %s" : "Configuración de almacenamiento incompleta. %s", "Storage connection error. %s" : "Error de conexión de almacenamiento. %s", "Storage is temporarily not available" : "El almacenamiento no esta disponible temporalmente", - "Storage connection timeout. %s" : "Tiempo de conexión de almacenamiento agotado. %s" + "Storage connection timeout. %s" : "Tiempo de conexión de almacenamiento agotado. %s", + "Cannot create \"data\" directory (%s)" : "No puedo crear del directorio \"data\" (%s)", + "Data directory (%s) is readable by other users" : "El directorio de datos (%s) se puede leer por otros usuarios.", + "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta", + "Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/es.json b/lib/l10n/es.json index 9494428e402..c834d361e45 100644 --- a/lib/l10n/es.json +++ b/lib/l10n/es.json @@ -178,7 +178,7 @@ "Cannot write into \"config\" directory" : "No se puede escribir el el directorio de configuración", "Cannot write into \"apps\" directory" : "No se puede escribir en el directorio de \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto puede solucionarse fácilmente %sdándole permisos de escritura al servidor en el directorio%s de apps o deshabilitando la tienda de apps en el archivo de configuración.", - "Cannot create \"data\" directory (%s)" : "No puedo crear del directorio \"data\" (%s)", + "Cannot create \"data\" directory" : "No es posible crear el directorio \"data\"", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Normalmente esto se puede solucionar <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dándole al servidor web permisos de escritura en todo el directorio o el directorio 'root'</a>", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos normalmente puede solucionarse %sdándole al servidor permisos de escritura del directorio raíz%s.", "Setting locale to %s failed" : "Falló la activación del idioma %s ", @@ -198,16 +198,20 @@ "PostgreSQL >= 9 required" : "PostgreSQL 9 o superior requerido.", "Please upgrade your database version" : "Actualice su versión de base de datos.", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor cambie los permisos a 0770 para que el directorio no se pueda mostrar para otros usuarios.", - "Data directory (%s) is readable by other users" : "El directorio de datos (%s) se puede leer por otros usuarios.", - "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta", + "Your data directory is readable by other users" : "Su directorio data es leible por otros usuarios", + "Your data directory must be an absolute path" : "Su directorio data debe ser una ruta absoluta", "Check the value of \"datadirectory\" in your configuration" : "Compruebe el valor de \"datadirectory\" en su configuración.", - "Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido", + "Your data directory is invalid" : "Su directorio data es inválido", "Please check that the data directory contains a file \".ocdata\" in its root." : "Verifique que el directorio de datos contiene un archivo \".ocdata\" en su directorio raíz.", "Could not obtain lock type %d on \"%s\"." : "No se pudo realizar el bloqueo %d en \"%s\".", "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s", "Storage incomplete configuration. %s" : "Configuración de almacenamiento incompleta. %s", "Storage connection error. %s" : "Error de conexión de almacenamiento. %s", "Storage is temporarily not available" : "El almacenamiento no esta disponible temporalmente", - "Storage connection timeout. %s" : "Tiempo de conexión de almacenamiento agotado. %s" + "Storage connection timeout. %s" : "Tiempo de conexión de almacenamiento agotado. %s", + "Cannot create \"data\" directory (%s)" : "No puedo crear del directorio \"data\" (%s)", + "Data directory (%s) is readable by other users" : "El directorio de datos (%s) se puede leer por otros usuarios.", + "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta", + "Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/es_MX.js b/lib/l10n/es_MX.js index 23af7ce6b67..d225d999ff7 100644 --- a/lib/l10n/es_MX.js +++ b/lib/l10n/es_MX.js @@ -42,6 +42,7 @@ OC.L10N.register( "File name is too long" : "El nombre del archivo es demasiado largo", "Dot files are not allowed" : "Los archivos Dot no están permitidos", "Empty filename is not allowed" : "El uso de nombres de archivo vacíos no está permitido", + "This is an automatically generated email, please do not reply." : "Este es un correo generado automáticamente, favor de no contestarlo. ", "Help" : "Ayuda", "Apps" : "Aplicaciones", "Personal" : "Personal", @@ -179,7 +180,7 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "No fue posible escribir en el directorio \"config\"", "Cannot write into \"apps\" directory" : "No fue posible escribir en el directorio \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto se puede arreglar por %s al darle acceso de escritura al servidor web al directorio de las aplicaciones %s o al deshabilitar la tienda de aplicaciones en el archivo de configuración", - "Cannot create \"data\" directory (%s)" : "No fue posible crear el directorio (%s)", + "Cannot create \"data\" directory" : "No fue posible crear el directorio \"data\"", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esto se puede arreglar generalmente al <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">darle al servidor web accesos al directorio raíz</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos se pueden arreglar generalmente al %s darle al servidor web accesos al direcotiro raíz %s.", "Setting locale to %s failed" : "Se presentó una falla al establecer la regionalización a %s", @@ -198,16 +199,19 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "Se requiere PostgreSQL >= 9", "Please upgrade your database version" : "Favor de actualizar la versión de la base de datos", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Favor de cambiar los permisos a 0770 para que el directorio no pueda ser enlistado por otros usuarios. ", - "Data directory (%s) is readable by other users" : "El directorio de datos (%s) puede ser leído por otros usuarios", - "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta", + "Your data directory is readable by other users" : "Su direcctorio data puede ser leído por otros usuarios", + "Your data directory must be an absolute path" : "Su direcctorio data debe ser una ruta absoluta", "Check the value of \"datadirectory\" in your configuration" : "Verifique el valor de \"datadirectory\" en su configuración", - "Data directory (%s) is invalid" : "El directorio de datos (%s) es inválido", "Please check that the data directory contains a file \".ocdata\" in its root." : "Favor de verificar que el directorio de datos tenga un archivo \".ocdata\" en su raíz. ", "Could not obtain lock type %d on \"%s\"." : "No fue posible obtener el tipo de bloqueo %d en \"%s\". ", "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s", "Storage incomplete configuration. %s" : "Configuración incompleta del almacenamiento. %s", "Storage connection error. %s" : "Se presentó un error con la conexión al almacenamiento. %s", "Storage is temporarily not available" : "El almacenamieto se encuentra temporalmente no disponible", - "Storage connection timeout. %s" : "Se agotó el tiempo de conexión del almacenamiento. %s" + "Storage connection timeout. %s" : "Se agotó el tiempo de conexión del almacenamiento. %s", + "Cannot create \"data\" directory (%s)" : "No fue posible crear el directorio (%s)", + "Data directory (%s) is readable by other users" : "El directorio de datos (%s) puede ser leído por otros usuarios", + "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta", + "Data directory (%s) is invalid" : "El directorio de datos (%s) es inválido" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/es_MX.json b/lib/l10n/es_MX.json index ee6b320dc0a..747f51436bd 100644 --- a/lib/l10n/es_MX.json +++ b/lib/l10n/es_MX.json @@ -40,6 +40,7 @@ "File name is too long" : "El nombre del archivo es demasiado largo", "Dot files are not allowed" : "Los archivos Dot no están permitidos", "Empty filename is not allowed" : "El uso de nombres de archivo vacíos no está permitido", + "This is an automatically generated email, please do not reply." : "Este es un correo generado automáticamente, favor de no contestarlo. ", "Help" : "Ayuda", "Apps" : "Aplicaciones", "Personal" : "Personal", @@ -177,7 +178,7 @@ "Cannot write into \"config\" directory" : "No fue posible escribir en el directorio \"config\"", "Cannot write into \"apps\" directory" : "No fue posible escribir en el directorio \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto se puede arreglar por %s al darle acceso de escritura al servidor web al directorio de las aplicaciones %s o al deshabilitar la tienda de aplicaciones en el archivo de configuración", - "Cannot create \"data\" directory (%s)" : "No fue posible crear el directorio (%s)", + "Cannot create \"data\" directory" : "No fue posible crear el directorio \"data\"", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esto se puede arreglar generalmente al <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">darle al servidor web accesos al directorio raíz</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos se pueden arreglar generalmente al %s darle al servidor web accesos al direcotiro raíz %s.", "Setting locale to %s failed" : "Se presentó una falla al establecer la regionalización a %s", @@ -196,16 +197,19 @@ "PostgreSQL >= 9 required" : "Se requiere PostgreSQL >= 9", "Please upgrade your database version" : "Favor de actualizar la versión de la base de datos", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Favor de cambiar los permisos a 0770 para que el directorio no pueda ser enlistado por otros usuarios. ", - "Data directory (%s) is readable by other users" : "El directorio de datos (%s) puede ser leído por otros usuarios", - "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta", + "Your data directory is readable by other users" : "Su direcctorio data puede ser leído por otros usuarios", + "Your data directory must be an absolute path" : "Su direcctorio data debe ser una ruta absoluta", "Check the value of \"datadirectory\" in your configuration" : "Verifique el valor de \"datadirectory\" en su configuración", - "Data directory (%s) is invalid" : "El directorio de datos (%s) es inválido", "Please check that the data directory contains a file \".ocdata\" in its root." : "Favor de verificar que el directorio de datos tenga un archivo \".ocdata\" en su raíz. ", "Could not obtain lock type %d on \"%s\"." : "No fue posible obtener el tipo de bloqueo %d en \"%s\". ", "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s", "Storage incomplete configuration. %s" : "Configuración incompleta del almacenamiento. %s", "Storage connection error. %s" : "Se presentó un error con la conexión al almacenamiento. %s", "Storage is temporarily not available" : "El almacenamieto se encuentra temporalmente no disponible", - "Storage connection timeout. %s" : "Se agotó el tiempo de conexión del almacenamiento. %s" + "Storage connection timeout. %s" : "Se agotó el tiempo de conexión del almacenamiento. %s", + "Cannot create \"data\" directory (%s)" : "No fue posible crear el directorio (%s)", + "Data directory (%s) is readable by other users" : "El directorio de datos (%s) puede ser leído por otros usuarios", + "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta", + "Data directory (%s) is invalid" : "El directorio de datos (%s) es inválido" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/eu.js b/lib/l10n/eu.js index edd34c73f30..76154721f03 100644 --- a/lib/l10n/eu.js +++ b/lib/l10n/eu.js @@ -151,7 +151,6 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Ezin da idatzi \"config\" karpetan", "Cannot write into \"apps\" directory" : "Ezin da idatzi \"apps\" karpetan", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Hau normalean konpondu daiteke %sweb zerbitzarira apps karpetan idazteko baimenak emanez%s edo konfigurazio fitxategian appstorea ez gaituz.", - "Cannot create \"data\" directory (%s)" : "Ezin da \"data\" karpeta sortu (%s)", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira erro karpetan idazteko baimenak emanez%s.", "Setting locale to %s failed" : "Lokala %sra ezartzeak huts egin du", "Please install one of these locales on your system and restart your webserver." : "Instalatu hauetako lokal bat zure sisteman eta berrabiarazi zure web zerbitzaria.", @@ -163,9 +162,10 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "PostgreSQL >= 9 behar da", "Please upgrade your database version" : "Mesedez eguneratu zure datu basearen bertsioa", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Mesedez aldatu baimenak 0770ra beste erabiltzaileek karpetan sartu ezin izateko.", - "Data directory (%s) is readable by other users" : "Data karpeta (%s) beste erabiltzaileek irakur dezakete", - "Data directory (%s) is invalid" : "Datuen karpeta (%s) ez da baliogarria", "Please check that the data directory contains a file \".ocdata\" in its root." : "Mesedez egiaztatu data karpeta \".ocdata\" fitxategia duela bere erroan.", - "Could not obtain lock type %d on \"%s\"." : "Ezin da lortu sarraia mota %d \"%s\"-an." + "Could not obtain lock type %d on \"%s\"." : "Ezin da lortu sarraia mota %d \"%s\"-an.", + "Cannot create \"data\" directory (%s)" : "Ezin da \"data\" karpeta sortu (%s)", + "Data directory (%s) is readable by other users" : "Data karpeta (%s) beste erabiltzaileek irakur dezakete", + "Data directory (%s) is invalid" : "Datuen karpeta (%s) ez da baliogarria" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/eu.json b/lib/l10n/eu.json index 6ca3a20be69..3b416e5fc3e 100644 --- a/lib/l10n/eu.json +++ b/lib/l10n/eu.json @@ -149,7 +149,6 @@ "Cannot write into \"config\" directory" : "Ezin da idatzi \"config\" karpetan", "Cannot write into \"apps\" directory" : "Ezin da idatzi \"apps\" karpetan", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Hau normalean konpondu daiteke %sweb zerbitzarira apps karpetan idazteko baimenak emanez%s edo konfigurazio fitxategian appstorea ez gaituz.", - "Cannot create \"data\" directory (%s)" : "Ezin da \"data\" karpeta sortu (%s)", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira erro karpetan idazteko baimenak emanez%s.", "Setting locale to %s failed" : "Lokala %sra ezartzeak huts egin du", "Please install one of these locales on your system and restart your webserver." : "Instalatu hauetako lokal bat zure sisteman eta berrabiarazi zure web zerbitzaria.", @@ -161,9 +160,10 @@ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 behar da", "Please upgrade your database version" : "Mesedez eguneratu zure datu basearen bertsioa", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Mesedez aldatu baimenak 0770ra beste erabiltzaileek karpetan sartu ezin izateko.", - "Data directory (%s) is readable by other users" : "Data karpeta (%s) beste erabiltzaileek irakur dezakete", - "Data directory (%s) is invalid" : "Datuen karpeta (%s) ez da baliogarria", "Please check that the data directory contains a file \".ocdata\" in its root." : "Mesedez egiaztatu data karpeta \".ocdata\" fitxategia duela bere erroan.", - "Could not obtain lock type %d on \"%s\"." : "Ezin da lortu sarraia mota %d \"%s\"-an." + "Could not obtain lock type %d on \"%s\"." : "Ezin da lortu sarraia mota %d \"%s\"-an.", + "Cannot create \"data\" directory (%s)" : "Ezin da \"data\" karpeta sortu (%s)", + "Data directory (%s) is readable by other users" : "Data karpeta (%s) beste erabiltzaileek irakur dezakete", + "Data directory (%s) is invalid" : "Datuen karpeta (%s) ez da baliogarria" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/fi.js b/lib/l10n/fi.js index 223188796f1..d47d6d10d0d 100644 --- a/lib/l10n/fi.js +++ b/lib/l10n/fi.js @@ -170,7 +170,7 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Hakemistoon \"config\" kirjoittaminen ei onnistu", "Cannot write into \"apps\" directory" : "Hakemistoon \"apps\" kirjoittaminen ei onnistu", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Tämä on yleensä mahdollista korjata %santamalla HTTP-palvelimelle kirjoitusoikeus sovellushakemistoon%s tai poistamalla sovelluskauppa pois käytöstä asetustiedostoa käyttäen.", - "Cannot create \"data\" directory (%s)" : "Kansion \"data\" luominen ei onnistu (%s)", + "Cannot create \"data\" directory" : "Hakemiston \"data\" luominen ei onnistu", "Setting locale to %s failed" : "Maa-asetuksen %s asettaminen epäonnistui", "Please install one of these locales on your system and restart your webserver." : "Asenna ainakin yksi kyseisistä maa-asetuksista järjestelmään ja käynnistä http-palvelin uudelleen.", "Please ask your server administrator to install the module." : "Pyydä palvelimen ylläpitäjää asentamaan moduulin.", @@ -185,16 +185,20 @@ OC.L10N.register( "Please ask your server administrator to restart the web server." : "Pyydä palvelimen ylläpitäjää käynnistämään web-palvelin uudelleen.", "PostgreSQL >= 9 required" : "PostgreSQL >= 9 vaaditaan", "Please upgrade your database version" : "Päivitä tietokantasi versio", - "Data directory (%s) is readable by other users" : "Data-hakemisto (%s) on muiden käyttäjien luettavissa", - "Data directory (%s) must be an absolute path" : "Data-hakemiston (%s) tulee olla absoluuttinen polku", + "Your data directory is readable by other users" : "Data-hakemisto on muiden käyttäjien luettavissa", + "Your data directory must be an absolute path" : "Data-hakemiston tulee olla absoluuttinen polku", "Check the value of \"datadirectory\" in your configuration" : "Tarkista \"datadirectory\"-arvo asetuksistasi", - "Data directory (%s) is invalid" : "Data-hakemisto (%s) on virheellinen", - "Please check that the data directory contains a file \".ocdata\" in its root." : "Varmista, että datakansion juuressa on tiedosto \".ocdata\".", + "Your data directory is invalid" : "Data-hakemisto on virheellinen", + "Please check that the data directory contains a file \".ocdata\" in its root." : "Varmista, että data-hakemiston juuressa on tiedosto \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "Lukitustapaa %d ei saatu kohteelle \"%s\".", "Storage unauthorized. %s" : "Tallennustila ei ole valtuutettu. %s", "Storage incomplete configuration. %s" : "Tallennustilan puutteellinen määritys. %s", "Storage connection error. %s" : "Tallennustilan yhteysvirhe. %s", "Storage is temporarily not available" : "Tallennustila on tilapäisesti pois käytöstä", - "Storage connection timeout. %s" : "Tallennustilan yhteyden aikakatkaisu. %s" + "Storage connection timeout. %s" : "Tallennustilan yhteyden aikakatkaisu. %s", + "Cannot create \"data\" directory (%s)" : "Hakemiston \"data\" luominen ei onnistu (%s)", + "Data directory (%s) is readable by other users" : "Data-hakemisto (%s) on muiden käyttäjien luettavissa", + "Data directory (%s) must be an absolute path" : "Data-hakemiston (%s) tulee olla absoluuttinen polku", + "Data directory (%s) is invalid" : "Data-hakemisto (%s) on virheellinen" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/fi.json b/lib/l10n/fi.json index aed21b5fb99..85e3803b801 100644 --- a/lib/l10n/fi.json +++ b/lib/l10n/fi.json @@ -168,7 +168,7 @@ "Cannot write into \"config\" directory" : "Hakemistoon \"config\" kirjoittaminen ei onnistu", "Cannot write into \"apps\" directory" : "Hakemistoon \"apps\" kirjoittaminen ei onnistu", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Tämä on yleensä mahdollista korjata %santamalla HTTP-palvelimelle kirjoitusoikeus sovellushakemistoon%s tai poistamalla sovelluskauppa pois käytöstä asetustiedostoa käyttäen.", - "Cannot create \"data\" directory (%s)" : "Kansion \"data\" luominen ei onnistu (%s)", + "Cannot create \"data\" directory" : "Hakemiston \"data\" luominen ei onnistu", "Setting locale to %s failed" : "Maa-asetuksen %s asettaminen epäonnistui", "Please install one of these locales on your system and restart your webserver." : "Asenna ainakin yksi kyseisistä maa-asetuksista järjestelmään ja käynnistä http-palvelin uudelleen.", "Please ask your server administrator to install the module." : "Pyydä palvelimen ylläpitäjää asentamaan moduulin.", @@ -183,16 +183,20 @@ "Please ask your server administrator to restart the web server." : "Pyydä palvelimen ylläpitäjää käynnistämään web-palvelin uudelleen.", "PostgreSQL >= 9 required" : "PostgreSQL >= 9 vaaditaan", "Please upgrade your database version" : "Päivitä tietokantasi versio", - "Data directory (%s) is readable by other users" : "Data-hakemisto (%s) on muiden käyttäjien luettavissa", - "Data directory (%s) must be an absolute path" : "Data-hakemiston (%s) tulee olla absoluuttinen polku", + "Your data directory is readable by other users" : "Data-hakemisto on muiden käyttäjien luettavissa", + "Your data directory must be an absolute path" : "Data-hakemiston tulee olla absoluuttinen polku", "Check the value of \"datadirectory\" in your configuration" : "Tarkista \"datadirectory\"-arvo asetuksistasi", - "Data directory (%s) is invalid" : "Data-hakemisto (%s) on virheellinen", - "Please check that the data directory contains a file \".ocdata\" in its root." : "Varmista, että datakansion juuressa on tiedosto \".ocdata\".", + "Your data directory is invalid" : "Data-hakemisto on virheellinen", + "Please check that the data directory contains a file \".ocdata\" in its root." : "Varmista, että data-hakemiston juuressa on tiedosto \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "Lukitustapaa %d ei saatu kohteelle \"%s\".", "Storage unauthorized. %s" : "Tallennustila ei ole valtuutettu. %s", "Storage incomplete configuration. %s" : "Tallennustilan puutteellinen määritys. %s", "Storage connection error. %s" : "Tallennustilan yhteysvirhe. %s", "Storage is temporarily not available" : "Tallennustila on tilapäisesti pois käytöstä", - "Storage connection timeout. %s" : "Tallennustilan yhteyden aikakatkaisu. %s" + "Storage connection timeout. %s" : "Tallennustilan yhteyden aikakatkaisu. %s", + "Cannot create \"data\" directory (%s)" : "Hakemiston \"data\" luominen ei onnistu (%s)", + "Data directory (%s) is readable by other users" : "Data-hakemisto (%s) on muiden käyttäjien luettavissa", + "Data directory (%s) must be an absolute path" : "Data-hakemiston (%s) tulee olla absoluuttinen polku", + "Data directory (%s) is invalid" : "Data-hakemisto (%s) on virheellinen" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js index 117e7a62393..a3d5c5b0e41 100644 --- a/lib/l10n/fr.js +++ b/lib/l10n/fr.js @@ -180,7 +180,7 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Impossible d’écrire dans le répertoire \"config\"", "Cannot write into \"apps\" directory" : "Impossible d’écrire dans le répertoire \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ce problème est généralement résolu %sen donnant au serveur web un accès en écriture au répertoire apps%s ou en désactivant l'appstore dans le fichier de configuration.", - "Cannot create \"data\" directory (%s)" : "Impossible de créer le répertoire \"data\" (%s)", + "Cannot create \"data\" directory" : "Impossible de créer le dossier \"data\"", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ce problème est généralement résolu <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">en donnant au serveur web un accès en écriture au répertoire racine</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Le problème de permissions peut généralement être résolu %sen donnant au serveur web un accès en écriture au répertoire racine%s", "Setting locale to %s failed" : "Echec de la spécification des paramètres régionaux à %s", @@ -200,16 +200,20 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "PostgreSQL >= 9 requis", "Please upgrade your database version" : "Veuillez mettre à jour votre gestionnaire de base de données", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Veuillez changer les permissions du répertoire en mode 0770 afin que son contenu ne puisse pas être listé par les autres utilisateurs.", - "Data directory (%s) is readable by other users" : "Le répertoire de données (%s) est lisible par les autres utilisateurs", - "Data directory (%s) must be an absolute path" : "Le chemin du dossier de données (%s) doit être absolu", + "Your data directory is readable by other users" : "Votre répertoire est lisible par les autres utilisateurs", + "Your data directory must be an absolute path" : "Le chemin de votre répertoire doit être un lien absolu", "Check the value of \"datadirectory\" in your configuration" : "Verifiez la valeur de \"datadirectory\" dans votre configuration", - "Data directory (%s) is invalid" : "Le répertoire (%s) n'est pas valide", + "Your data directory is invalid" : "Votre répertoire n'est pas valide", "Please check that the data directory contains a file \".ocdata\" in its root." : "Veuillez vérifier que le répertoire de données contient un fichier \".ocdata\" à sa racine.", "Could not obtain lock type %d on \"%s\"." : "Impossible d'obtenir le verrouillage de type %d sur \"%s\".", "Storage unauthorized. %s" : "Espace de stockage non autorisé. %s", "Storage incomplete configuration. %s" : "Configuration de l'espace de stockage incomplète. %s", "Storage connection error. %s" : "Erreur de connexion à l'espace stockage. %s", "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible", - "Storage connection timeout. %s" : "Le délai d'attente pour la connexion à l'espace de stockage a été dépassé. %s" + "Storage connection timeout. %s" : "Le délai d'attente pour la connexion à l'espace de stockage a été dépassé. %s", + "Cannot create \"data\" directory (%s)" : "Impossible de créer le répertoire \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Le répertoire de données (%s) est lisible par les autres utilisateurs", + "Data directory (%s) must be an absolute path" : "Le chemin du dossier de données (%s) doit être absolu", + "Data directory (%s) is invalid" : "Le répertoire (%s) n'est pas valide" }, "nplurals=2; plural=(n > 1);"); diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json index d8da83269ec..85961b845f3 100644 --- a/lib/l10n/fr.json +++ b/lib/l10n/fr.json @@ -178,7 +178,7 @@ "Cannot write into \"config\" directory" : "Impossible d’écrire dans le répertoire \"config\"", "Cannot write into \"apps\" directory" : "Impossible d’écrire dans le répertoire \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ce problème est généralement résolu %sen donnant au serveur web un accès en écriture au répertoire apps%s ou en désactivant l'appstore dans le fichier de configuration.", - "Cannot create \"data\" directory (%s)" : "Impossible de créer le répertoire \"data\" (%s)", + "Cannot create \"data\" directory" : "Impossible de créer le dossier \"data\"", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ce problème est généralement résolu <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">en donnant au serveur web un accès en écriture au répertoire racine</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Le problème de permissions peut généralement être résolu %sen donnant au serveur web un accès en écriture au répertoire racine%s", "Setting locale to %s failed" : "Echec de la spécification des paramètres régionaux à %s", @@ -198,16 +198,20 @@ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 requis", "Please upgrade your database version" : "Veuillez mettre à jour votre gestionnaire de base de données", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Veuillez changer les permissions du répertoire en mode 0770 afin que son contenu ne puisse pas être listé par les autres utilisateurs.", - "Data directory (%s) is readable by other users" : "Le répertoire de données (%s) est lisible par les autres utilisateurs", - "Data directory (%s) must be an absolute path" : "Le chemin du dossier de données (%s) doit être absolu", + "Your data directory is readable by other users" : "Votre répertoire est lisible par les autres utilisateurs", + "Your data directory must be an absolute path" : "Le chemin de votre répertoire doit être un lien absolu", "Check the value of \"datadirectory\" in your configuration" : "Verifiez la valeur de \"datadirectory\" dans votre configuration", - "Data directory (%s) is invalid" : "Le répertoire (%s) n'est pas valide", + "Your data directory is invalid" : "Votre répertoire n'est pas valide", "Please check that the data directory contains a file \".ocdata\" in its root." : "Veuillez vérifier que le répertoire de données contient un fichier \".ocdata\" à sa racine.", "Could not obtain lock type %d on \"%s\"." : "Impossible d'obtenir le verrouillage de type %d sur \"%s\".", "Storage unauthorized. %s" : "Espace de stockage non autorisé. %s", "Storage incomplete configuration. %s" : "Configuration de l'espace de stockage incomplète. %s", "Storage connection error. %s" : "Erreur de connexion à l'espace stockage. %s", "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible", - "Storage connection timeout. %s" : "Le délai d'attente pour la connexion à l'espace de stockage a été dépassé. %s" + "Storage connection timeout. %s" : "Le délai d'attente pour la connexion à l'espace de stockage a été dépassé. %s", + "Cannot create \"data\" directory (%s)" : "Impossible de créer le répertoire \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Le répertoire de données (%s) est lisible par les autres utilisateurs", + "Data directory (%s) must be an absolute path" : "Le chemin du dossier de données (%s) doit être absolu", + "Data directory (%s) is invalid" : "Le répertoire (%s) n'est pas valide" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/lib/l10n/he.js b/lib/l10n/he.js index 7832397c275..b99049ba5d1 100644 --- a/lib/l10n/he.js +++ b/lib/l10n/he.js @@ -160,7 +160,6 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "לא ניתן לכתוב לתיקיית \"config\"!", "Cannot write into \"apps\" directory" : "לא ניתן לכתוב לתיקיית \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "בדרך כלל ניתן להסתדר על ידי %s מתן הרשאות כתיבה בשרת האינטרנט לתיקיית היישומים %s או נטרול חנות היישומים בקובץ ה- config.", - "Cannot create \"data\" directory (%s)" : "לא ניתן ליצור תיקיית \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "זה בדרך כלל ניתן לתיקון על ידי <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">מתן הרשאות כתיבה בשרת לתיקיית הבסיס directory</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "הרשאות ניתנות בדרך כלל לתיקון על ידי %s מתן לשרת האינטרנט גישת כתיבה לתיקיית הבסיס %s.", "Setting locale to %s failed" : "הגדרת שפה ל- %s נכשלה", @@ -179,15 +178,16 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "נדרש PostgreSQL >= 9", "Please upgrade your database version" : "יש לשדרג את גרסת מסד הנתונים שלך", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "יש לשנות את ההרשאות ל- 0770 כך שהתיקייה לא תרשם על ידי משתמשים אחרים.", - "Data directory (%s) is readable by other users" : "תיקיית המידע (%s) ניתנת לקריאה על ידי משתמשים אחרים", - "Data directory (%s) must be an absolute path" : "תיקיית המידע (%s) חייבת להיות כנתיב אבסולוטי", "Check the value of \"datadirectory\" in your configuration" : "יש לבדוק את הערך \"datadirectory\" בהגדרות התצורה שלך", - "Data directory (%s) is invalid" : "תיקיית מידע (%s) אינה חוקית", "Please check that the data directory contains a file \".ocdata\" in its root." : "יש לוודא שתיקיית המידע כוללת קובץ \".ocdata\" בנתיב הבסיס שלה", "Could not obtain lock type %d on \"%s\"." : "לא ניתן היה להשיג סוג נעילה %d ב- \"%s\".", "Storage unauthorized. %s" : "אחסון לא מורשה. %s", "Storage incomplete configuration. %s" : "תצורה לא מושלמת של האחסון. %s", "Storage connection error. %s" : "שגיאת חיבור אחסון. %s", - "Storage connection timeout. %s" : "פסק זמן חיבור אחסון. %s" + "Storage connection timeout. %s" : "פסק זמן חיבור אחסון. %s", + "Cannot create \"data\" directory (%s)" : "לא ניתן ליצור תיקיית \"data\" (%s)", + "Data directory (%s) is readable by other users" : "תיקיית המידע (%s) ניתנת לקריאה על ידי משתמשים אחרים", + "Data directory (%s) must be an absolute path" : "תיקיית המידע (%s) חייבת להיות כנתיב אבסולוטי", + "Data directory (%s) is invalid" : "תיקיית מידע (%s) אינה חוקית" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/he.json b/lib/l10n/he.json index 6449bad9a38..8922b165da6 100644 --- a/lib/l10n/he.json +++ b/lib/l10n/he.json @@ -158,7 +158,6 @@ "Cannot write into \"config\" directory" : "לא ניתן לכתוב לתיקיית \"config\"!", "Cannot write into \"apps\" directory" : "לא ניתן לכתוב לתיקיית \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "בדרך כלל ניתן להסתדר על ידי %s מתן הרשאות כתיבה בשרת האינטרנט לתיקיית היישומים %s או נטרול חנות היישומים בקובץ ה- config.", - "Cannot create \"data\" directory (%s)" : "לא ניתן ליצור תיקיית \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "זה בדרך כלל ניתן לתיקון על ידי <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">מתן הרשאות כתיבה בשרת לתיקיית הבסיס directory</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "הרשאות ניתנות בדרך כלל לתיקון על ידי %s מתן לשרת האינטרנט גישת כתיבה לתיקיית הבסיס %s.", "Setting locale to %s failed" : "הגדרת שפה ל- %s נכשלה", @@ -177,15 +176,16 @@ "PostgreSQL >= 9 required" : "נדרש PostgreSQL >= 9", "Please upgrade your database version" : "יש לשדרג את גרסת מסד הנתונים שלך", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "יש לשנות את ההרשאות ל- 0770 כך שהתיקייה לא תרשם על ידי משתמשים אחרים.", - "Data directory (%s) is readable by other users" : "תיקיית המידע (%s) ניתנת לקריאה על ידי משתמשים אחרים", - "Data directory (%s) must be an absolute path" : "תיקיית המידע (%s) חייבת להיות כנתיב אבסולוטי", "Check the value of \"datadirectory\" in your configuration" : "יש לבדוק את הערך \"datadirectory\" בהגדרות התצורה שלך", - "Data directory (%s) is invalid" : "תיקיית מידע (%s) אינה חוקית", "Please check that the data directory contains a file \".ocdata\" in its root." : "יש לוודא שתיקיית המידע כוללת קובץ \".ocdata\" בנתיב הבסיס שלה", "Could not obtain lock type %d on \"%s\"." : "לא ניתן היה להשיג סוג נעילה %d ב- \"%s\".", "Storage unauthorized. %s" : "אחסון לא מורשה. %s", "Storage incomplete configuration. %s" : "תצורה לא מושלמת של האחסון. %s", "Storage connection error. %s" : "שגיאת חיבור אחסון. %s", - "Storage connection timeout. %s" : "פסק זמן חיבור אחסון. %s" + "Storage connection timeout. %s" : "פסק זמן חיבור אחסון. %s", + "Cannot create \"data\" directory (%s)" : "לא ניתן ליצור תיקיית \"data\" (%s)", + "Data directory (%s) is readable by other users" : "תיקיית המידע (%s) ניתנת לקריאה על ידי משתמשים אחרים", + "Data directory (%s) must be an absolute path" : "תיקיית המידע (%s) חייבת להיות כנתיב אבסולוטי", + "Data directory (%s) is invalid" : "תיקיית מידע (%s) אינה חוקית" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/hu.js b/lib/l10n/hu.js index 93648ed8ccb..ed3075befd6 100644 --- a/lib/l10n/hu.js +++ b/lib/l10n/hu.js @@ -179,7 +179,6 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Nem írható a \"config\" könyvtár", "Cannot write into \"apps\" directory" : "Nem írható az \"apps\" könyvtár", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ez rendszerint úgy oldható meg, hogy %sírási jogot adunk a webszervernek az app könyvtárra%s, vagy letiltjuk a config fájlban az appstore használatát.", - "Cannot create \"data\" directory (%s)" : "Nem sikerült létrehozni a \"data\" könyvtárt (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ez általában úgy javítható, hogy <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">a webszervernek írási jogosultságot adsz a root könyvtárra</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Az elérési problémák rendszerint megoldhatók azzal, ha a %swebszervernek írásjogot adunk a gyökérkönyvtárra%s.", "Setting locale to %s failed" : "A lokalizáció %s-re való állítása nem sikerült", @@ -199,16 +198,17 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "PostgreSQL >= 9 szükséges", "Please upgrade your database version" : "Kérem frissítse az adatbázis-szoftvert!", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Kérjük módosítsa a könyvtár elérhetőségi engedélybeállítását 0770-re, hogy a tartalmát más felhasználó ne listázhassa!", - "Data directory (%s) is readable by other users" : "Az adatkönyvtár (%s) más felhasználók számára is olvasható ", - "Data directory (%s) must be an absolute path" : "Az adatkönyvtárnak (%s) abszolút elérési útnak kell lennie", "Check the value of \"datadirectory\" in your configuration" : "Ellenőrizd a \"datadirectory\" értékét a konfigurációban", - "Data directory (%s) is invalid" : "Érvénytelen a megadott adatkönyvtár (%s) ", "Please check that the data directory contains a file \".ocdata\" in its root." : "Kérjük ellenőrizze, hogy az adatkönyvtár tartalmaz a gyökerében egy \".ocdata\" nevű fájlt!", "Could not obtain lock type %d on \"%s\"." : "Nem sikerült %d típusú zárolást elérni itt: \"%s\".", "Storage unauthorized. %s" : "A tároló jogosulatlan. %s", "Storage incomplete configuration. %s" : "A tároló beállítása nem teljes. %s", "Storage connection error. %s" : "Tároló kapcsolódási hiba. %s", "Storage is temporarily not available" : "A tároló átmenetileg nem érthető el", - "Storage connection timeout. %s" : "Tároló kapcsolat időtúllépés. %s" + "Storage connection timeout. %s" : "Tároló kapcsolat időtúllépés. %s", + "Cannot create \"data\" directory (%s)" : "Nem sikerült létrehozni a \"data\" könyvtárt (%s)", + "Data directory (%s) is readable by other users" : "Az adatkönyvtár (%s) más felhasználók számára is olvasható ", + "Data directory (%s) must be an absolute path" : "Az adatkönyvtárnak (%s) abszolút elérési útnak kell lennie", + "Data directory (%s) is invalid" : "Érvénytelen a megadott adatkönyvtár (%s) " }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/hu.json b/lib/l10n/hu.json index 954bd34eb88..ff308900409 100644 --- a/lib/l10n/hu.json +++ b/lib/l10n/hu.json @@ -177,7 +177,6 @@ "Cannot write into \"config\" directory" : "Nem írható a \"config\" könyvtár", "Cannot write into \"apps\" directory" : "Nem írható az \"apps\" könyvtár", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ez rendszerint úgy oldható meg, hogy %sírási jogot adunk a webszervernek az app könyvtárra%s, vagy letiltjuk a config fájlban az appstore használatát.", - "Cannot create \"data\" directory (%s)" : "Nem sikerült létrehozni a \"data\" könyvtárt (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ez általában úgy javítható, hogy <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">a webszervernek írási jogosultságot adsz a root könyvtárra</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Az elérési problémák rendszerint megoldhatók azzal, ha a %swebszervernek írásjogot adunk a gyökérkönyvtárra%s.", "Setting locale to %s failed" : "A lokalizáció %s-re való állítása nem sikerült", @@ -197,16 +196,17 @@ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 szükséges", "Please upgrade your database version" : "Kérem frissítse az adatbázis-szoftvert!", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Kérjük módosítsa a könyvtár elérhetőségi engedélybeállítását 0770-re, hogy a tartalmát más felhasználó ne listázhassa!", - "Data directory (%s) is readable by other users" : "Az adatkönyvtár (%s) más felhasználók számára is olvasható ", - "Data directory (%s) must be an absolute path" : "Az adatkönyvtárnak (%s) abszolút elérési útnak kell lennie", "Check the value of \"datadirectory\" in your configuration" : "Ellenőrizd a \"datadirectory\" értékét a konfigurációban", - "Data directory (%s) is invalid" : "Érvénytelen a megadott adatkönyvtár (%s) ", "Please check that the data directory contains a file \".ocdata\" in its root." : "Kérjük ellenőrizze, hogy az adatkönyvtár tartalmaz a gyökerében egy \".ocdata\" nevű fájlt!", "Could not obtain lock type %d on \"%s\"." : "Nem sikerült %d típusú zárolást elérni itt: \"%s\".", "Storage unauthorized. %s" : "A tároló jogosulatlan. %s", "Storage incomplete configuration. %s" : "A tároló beállítása nem teljes. %s", "Storage connection error. %s" : "Tároló kapcsolódási hiba. %s", "Storage is temporarily not available" : "A tároló átmenetileg nem érthető el", - "Storage connection timeout. %s" : "Tároló kapcsolat időtúllépés. %s" + "Storage connection timeout. %s" : "Tároló kapcsolat időtúllépés. %s", + "Cannot create \"data\" directory (%s)" : "Nem sikerült létrehozni a \"data\" könyvtárt (%s)", + "Data directory (%s) is readable by other users" : "Az adatkönyvtár (%s) más felhasználók számára is olvasható ", + "Data directory (%s) must be an absolute path" : "Az adatkönyvtárnak (%s) abszolút elérési útnak kell lennie", + "Data directory (%s) is invalid" : "Érvénytelen a megadott adatkönyvtár (%s) " },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/is.js b/lib/l10n/is.js index ceadf0bb098..5c9ce3f7e37 100644 --- a/lib/l10n/is.js +++ b/lib/l10n/is.js @@ -157,7 +157,6 @@ OC.L10N.register( "No database drivers (sqlite, mysql, or postgresql) installed." : "Engir reklar fyrir gagnagrunn eru uppsettir (sqlite, mysql eða postgresql).", "Cannot write into \"config\" directory" : "Get ekki skrifað í \"config\" möppuna", "Cannot write into \"apps\" directory" : "Get ekki skrifað í \"apps\" möppuna", - "Cannot create \"data\" directory (%s)" : "Get ekki búið til \"data\" möppu (%s)", "Setting locale to %s failed" : "Mistókst að setja upp staðfærsluna %s", "Please install one of these locales on your system and restart your webserver." : "Settu upp eina af þessum staðfærslum og endurræstu vefþjóninn.", "Please ask your server administrator to install the module." : "Biddu kerfisstjórann þinn um að setja eininguna upp.", @@ -173,14 +172,15 @@ OC.L10N.register( "Please ask your server administrator to restart the web server." : "Biddu kerfisstjórann þinn um að endurræsa vefþjóninn.", "PostgreSQL >= 9 required" : "Krefst PostgreSQL >= 9", "Please upgrade your database version" : "Uppfærðu útgáfu gagnagrunnsins", - "Data directory (%s) is readable by other users" : "Gagnamappa (%s) er lesanleg fyrir aðra notendur", - "Data directory (%s) must be an absolute path" : "Gagnamappan (%s) verður að vera algild slóð", "Check the value of \"datadirectory\" in your configuration" : "Athugaðu gildi \"datadirectory\" í uppsetningunni þinni", - "Data directory (%s) is invalid" : "Gagnamappa (%s) er ógild", "Storage unauthorized. %s" : "Gagnageymsla ekki auðkennd. %s", "Storage incomplete configuration. %s" : "Ófullgerð uppsetning gagnageymslu. %s", "Storage connection error. %s" : "Villa í tengingu við gagnageymslu. %s", "Storage is temporarily not available" : "Gagnageymsla ekki tiltæk í augnablikinu", - "Storage connection timeout. %s" : "Gagnageymsla féll á tíma. %s" + "Storage connection timeout. %s" : "Gagnageymsla féll á tíma. %s", + "Cannot create \"data\" directory (%s)" : "Get ekki búið til \"data\" möppu (%s)", + "Data directory (%s) is readable by other users" : "Gagnamappa (%s) er lesanleg fyrir aðra notendur", + "Data directory (%s) must be an absolute path" : "Gagnamappan (%s) verður að vera algild slóð", + "Data directory (%s) is invalid" : "Gagnamappa (%s) er ógild" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/lib/l10n/is.json b/lib/l10n/is.json index b1a26f38640..b332fbbf150 100644 --- a/lib/l10n/is.json +++ b/lib/l10n/is.json @@ -155,7 +155,6 @@ "No database drivers (sqlite, mysql, or postgresql) installed." : "Engir reklar fyrir gagnagrunn eru uppsettir (sqlite, mysql eða postgresql).", "Cannot write into \"config\" directory" : "Get ekki skrifað í \"config\" möppuna", "Cannot write into \"apps\" directory" : "Get ekki skrifað í \"apps\" möppuna", - "Cannot create \"data\" directory (%s)" : "Get ekki búið til \"data\" möppu (%s)", "Setting locale to %s failed" : "Mistókst að setja upp staðfærsluna %s", "Please install one of these locales on your system and restart your webserver." : "Settu upp eina af þessum staðfærslum og endurræstu vefþjóninn.", "Please ask your server administrator to install the module." : "Biddu kerfisstjórann þinn um að setja eininguna upp.", @@ -171,14 +170,15 @@ "Please ask your server administrator to restart the web server." : "Biddu kerfisstjórann þinn um að endurræsa vefþjóninn.", "PostgreSQL >= 9 required" : "Krefst PostgreSQL >= 9", "Please upgrade your database version" : "Uppfærðu útgáfu gagnagrunnsins", - "Data directory (%s) is readable by other users" : "Gagnamappa (%s) er lesanleg fyrir aðra notendur", - "Data directory (%s) must be an absolute path" : "Gagnamappan (%s) verður að vera algild slóð", "Check the value of \"datadirectory\" in your configuration" : "Athugaðu gildi \"datadirectory\" í uppsetningunni þinni", - "Data directory (%s) is invalid" : "Gagnamappa (%s) er ógild", "Storage unauthorized. %s" : "Gagnageymsla ekki auðkennd. %s", "Storage incomplete configuration. %s" : "Ófullgerð uppsetning gagnageymslu. %s", "Storage connection error. %s" : "Villa í tengingu við gagnageymslu. %s", "Storage is temporarily not available" : "Gagnageymsla ekki tiltæk í augnablikinu", - "Storage connection timeout. %s" : "Gagnageymsla féll á tíma. %s" + "Storage connection timeout. %s" : "Gagnageymsla féll á tíma. %s", + "Cannot create \"data\" directory (%s)" : "Get ekki búið til \"data\" möppu (%s)", + "Data directory (%s) is readable by other users" : "Gagnamappa (%s) er lesanleg fyrir aðra notendur", + "Data directory (%s) must be an absolute path" : "Gagnamappan (%s) verður að vera algild slóð", + "Data directory (%s) is invalid" : "Gagnamappa (%s) er ógild" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/lib/l10n/it.js b/lib/l10n/it.js index 528166650c4..c736901b32d 100644 --- a/lib/l10n/it.js +++ b/lib/l10n/it.js @@ -179,7 +179,6 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Impossibile scrivere nella cartella \"config\"", "Cannot write into \"apps\" directory" : "Impossibile scrivere nella cartella \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ciò può essere normalmente corretto %sfornendo al server web accesso in scrittura alla cartella \"apps\"%s o disabilitando il negozio di applicazioni nel file di configurazione.", - "Cannot create \"data\" directory (%s)" : "Impossibile creare la cartella \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ciò può essere normalmente corretto <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">fornendo al server web accesso in scrittura alla cartella radice</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "I permessi possono essere normalmente corretti %sfornendo al server web accesso in scrittura alla cartella radice%s.", "Setting locale to %s failed" : "L'impostazione della localizzazione a %s non è riuscita", @@ -199,16 +198,17 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "Richiesto PostgreSQL >= 9", "Please upgrade your database version" : "Aggiorna la versione del tuo database", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Modifica i permessi in 0770 in modo tale che la cartella non sia leggibile dagli altri utenti.", - "Data directory (%s) is readable by other users" : "La cartella dei dati (%s) è leggibile dagli altri utenti", - "Data directory (%s) must be an absolute path" : "La cartella dei dati (%s) deve essere un percorso assoluto", "Check the value of \"datadirectory\" in your configuration" : "Controlla il valore di \"datadirectory\" nella tua configurazione", - "Data directory (%s) is invalid" : "La cartella dei dati (%s) non è valida", "Please check that the data directory contains a file \".ocdata\" in its root." : "Verifica che la cartella dei dati contenga un file \".ocdata\" nella sua radice.", "Could not obtain lock type %d on \"%s\"." : "Impossibile ottenere il blocco di tipo %d su \"%s\".", "Storage unauthorized. %s" : "Archiviazione non autorizzata. %s", "Storage incomplete configuration. %s" : "Configurazione dell'archiviazione incompleta.%s", "Storage connection error. %s" : "Errore di connessione all'archiviazione. %s", "Storage is temporarily not available" : "L'archiviazione è temporaneamente non disponibile", - "Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s" + "Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s", + "Cannot create \"data\" directory (%s)" : "Impossibile creare la cartella \"data\" (%s)", + "Data directory (%s) is readable by other users" : "La cartella dei dati (%s) è leggibile dagli altri utenti", + "Data directory (%s) must be an absolute path" : "La cartella dei dati (%s) deve essere un percorso assoluto", + "Data directory (%s) is invalid" : "La cartella dei dati (%s) non è valida" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/it.json b/lib/l10n/it.json index df2d1b9bdb3..9ab12a4cb9a 100644 --- a/lib/l10n/it.json +++ b/lib/l10n/it.json @@ -177,7 +177,6 @@ "Cannot write into \"config\" directory" : "Impossibile scrivere nella cartella \"config\"", "Cannot write into \"apps\" directory" : "Impossibile scrivere nella cartella \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ciò può essere normalmente corretto %sfornendo al server web accesso in scrittura alla cartella \"apps\"%s o disabilitando il negozio di applicazioni nel file di configurazione.", - "Cannot create \"data\" directory (%s)" : "Impossibile creare la cartella \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ciò può essere normalmente corretto <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">fornendo al server web accesso in scrittura alla cartella radice</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "I permessi possono essere normalmente corretti %sfornendo al server web accesso in scrittura alla cartella radice%s.", "Setting locale to %s failed" : "L'impostazione della localizzazione a %s non è riuscita", @@ -197,16 +196,17 @@ "PostgreSQL >= 9 required" : "Richiesto PostgreSQL >= 9", "Please upgrade your database version" : "Aggiorna la versione del tuo database", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Modifica i permessi in 0770 in modo tale che la cartella non sia leggibile dagli altri utenti.", - "Data directory (%s) is readable by other users" : "La cartella dei dati (%s) è leggibile dagli altri utenti", - "Data directory (%s) must be an absolute path" : "La cartella dei dati (%s) deve essere un percorso assoluto", "Check the value of \"datadirectory\" in your configuration" : "Controlla il valore di \"datadirectory\" nella tua configurazione", - "Data directory (%s) is invalid" : "La cartella dei dati (%s) non è valida", "Please check that the data directory contains a file \".ocdata\" in its root." : "Verifica che la cartella dei dati contenga un file \".ocdata\" nella sua radice.", "Could not obtain lock type %d on \"%s\"." : "Impossibile ottenere il blocco di tipo %d su \"%s\".", "Storage unauthorized. %s" : "Archiviazione non autorizzata. %s", "Storage incomplete configuration. %s" : "Configurazione dell'archiviazione incompleta.%s", "Storage connection error. %s" : "Errore di connessione all'archiviazione. %s", "Storage is temporarily not available" : "L'archiviazione è temporaneamente non disponibile", - "Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s" + "Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s", + "Cannot create \"data\" directory (%s)" : "Impossibile creare la cartella \"data\" (%s)", + "Data directory (%s) is readable by other users" : "La cartella dei dati (%s) è leggibile dagli altri utenti", + "Data directory (%s) must be an absolute path" : "La cartella dei dati (%s) deve essere un percorso assoluto", + "Data directory (%s) is invalid" : "La cartella dei dati (%s) non è valida" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js index bf1daae259a..c42230125f7 100644 --- a/lib/l10n/ja.js +++ b/lib/l10n/ja.js @@ -179,7 +179,6 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "\"config\" ディレクトリに書き込みができません", "Cannot write into \"apps\" directory" : "\"apps\" ディレクトリに書き込みができません", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "多くの場合、これは %s Webサーバーにappsディレクトリ %s への書き込み権限を与えるか、設定ファイルでアプリストアを無効化することで解決できます。", - "Cannot create \"data\" directory (%s)" : "\"data\" ディレクトリ (%s) を作成できません", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "通常、<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">Webサーバーにルートディレクトリへの書き込み権限を与える</a>ことで解決できます。", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "多くの場合、パーミッションは %s Webサーバーにルートディレクトリ %s への書き込み権限を与えることで解決できます。", "Setting locale to %s failed" : "ロケールを %s に設定できませんでした", @@ -199,16 +198,17 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "PostgreSQL 9以上が必要です", "Please upgrade your database version" : "新しいバージョンのデータベースにアップグレードしてください", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "ディレクトリが他のユーザーから見えないように、パーミッションを 0770 に変更してください。", - "Data directory (%s) is readable by other users" : "データディレクトリ (%s) は他のユーザーも閲覧することができます", - "Data directory (%s) must be an absolute path" : "データディレクトリ (%s) は、絶対パスである必要があります。", "Check the value of \"datadirectory\" in your configuration" : "設定ファイル内の \"datadirectory\" の値を確認してください。", - "Data directory (%s) is invalid" : "データディレクトリ (%s) は無効です", "Please check that the data directory contains a file \".ocdata\" in its root." : "データディレクトリに \".ocdata\" ファイルが含まれていることを確認してください。", "Could not obtain lock type %d on \"%s\"." : "\"%s\" で %d タイプのロックを取得できませんでした。", "Storage unauthorized. %s" : "権限のないストレージです。 %s", "Storage incomplete configuration. %s" : "設定が未完了のストレージです。 %s", "Storage connection error. %s" : "ストレージへの接続エラー。 %s", "Storage is temporarily not available" : "ストレージは一時的に利用できません", - "Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s" + "Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s", + "Cannot create \"data\" directory (%s)" : "\"data\" ディレクトリ (%s) を作成できません", + "Data directory (%s) is readable by other users" : "データディレクトリ (%s) は他のユーザーも閲覧することができます", + "Data directory (%s) must be an absolute path" : "データディレクトリ (%s) は、絶対パスである必要があります。", + "Data directory (%s) is invalid" : "データディレクトリ (%s) は無効です" }, "nplurals=1; plural=0;"); diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json index 771020b9890..034ac0f94e3 100644 --- a/lib/l10n/ja.json +++ b/lib/l10n/ja.json @@ -177,7 +177,6 @@ "Cannot write into \"config\" directory" : "\"config\" ディレクトリに書き込みができません", "Cannot write into \"apps\" directory" : "\"apps\" ディレクトリに書き込みができません", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "多くの場合、これは %s Webサーバーにappsディレクトリ %s への書き込み権限を与えるか、設定ファイルでアプリストアを無効化することで解決できます。", - "Cannot create \"data\" directory (%s)" : "\"data\" ディレクトリ (%s) を作成できません", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "通常、<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">Webサーバーにルートディレクトリへの書き込み権限を与える</a>ことで解決できます。", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "多くの場合、パーミッションは %s Webサーバーにルートディレクトリ %s への書き込み権限を与えることで解決できます。", "Setting locale to %s failed" : "ロケールを %s に設定できませんでした", @@ -197,16 +196,17 @@ "PostgreSQL >= 9 required" : "PostgreSQL 9以上が必要です", "Please upgrade your database version" : "新しいバージョンのデータベースにアップグレードしてください", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "ディレクトリが他のユーザーから見えないように、パーミッションを 0770 に変更してください。", - "Data directory (%s) is readable by other users" : "データディレクトリ (%s) は他のユーザーも閲覧することができます", - "Data directory (%s) must be an absolute path" : "データディレクトリ (%s) は、絶対パスである必要があります。", "Check the value of \"datadirectory\" in your configuration" : "設定ファイル内の \"datadirectory\" の値を確認してください。", - "Data directory (%s) is invalid" : "データディレクトリ (%s) は無効です", "Please check that the data directory contains a file \".ocdata\" in its root." : "データディレクトリに \".ocdata\" ファイルが含まれていることを確認してください。", "Could not obtain lock type %d on \"%s\"." : "\"%s\" で %d タイプのロックを取得できませんでした。", "Storage unauthorized. %s" : "権限のないストレージです。 %s", "Storage incomplete configuration. %s" : "設定が未完了のストレージです。 %s", "Storage connection error. %s" : "ストレージへの接続エラー。 %s", "Storage is temporarily not available" : "ストレージは一時的に利用できません", - "Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s" + "Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s", + "Cannot create \"data\" directory (%s)" : "\"data\" ディレクトリ (%s) を作成できません", + "Data directory (%s) is readable by other users" : "データディレクトリ (%s) は他のユーザーも閲覧することができます", + "Data directory (%s) must be an absolute path" : "データディレクトリ (%s) は、絶対パスである必要があります。", + "Data directory (%s) is invalid" : "データディレクトリ (%s) は無効です" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/lib/l10n/nb.js b/lib/l10n/nb.js index 4687f54ed5b..3a53fc5afa4 100644 --- a/lib/l10n/nb.js +++ b/lib/l10n/nb.js @@ -177,7 +177,6 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Kan ikke skrive i \"config\"-mappen", "Cannot write into \"apps\" directory" : "Kan ikke skrive i \"apps\"-mappen", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan vanligvis ordnes ved %så gi web-tjeneren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.", - "Cannot create \"data\" directory (%s)" : "Kan ikke opprette \"data\"-mappen (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi webtjeneren skrivetilgang til rotmappen</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi webtjeneren skrivetilgang til rotmappen%s.", "Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s feilet.", @@ -197,16 +196,17 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "PostgreSQL >= 9 kreves", "Please upgrade your database version" : "Vennligst oppgrader versjonen av databasen din", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Endre tillatelsene til 0770 slik at mappen ikke kan listes av andre brukere.", - "Data directory (%s) is readable by other users" : "Data-mappen (%s) kan leses av andre brukere", - "Data directory (%s) must be an absolute path" : "Datamappen (%s) må være en absolutt sti", "Check the value of \"datadirectory\" in your configuration" : "Sjekk verdien for \"datadirectory\" i konfigurasjonen din", - "Data directory (%s) is invalid" : "Data-mappe (%s) er ugyldig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Sjekk at det ligger en fil \".ocdata\" i roten av data-mappen.", "Could not obtain lock type %d on \"%s\"." : "Klarte ikke å låse med type %d på \"%s\".", "Storage unauthorized. %s" : "Lager uautorisert: %s", "Storage incomplete configuration. %s" : "Ikke komplett oppsett for lager. %s", "Storage connection error. %s" : "Tilkoblingsfeil for lager. %s", "Storage is temporarily not available" : "Lagring er midlertidig utilgjengelig", - "Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s" + "Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s", + "Cannot create \"data\" directory (%s)" : "Kan ikke opprette \"data\"-mappen (%s)", + "Data directory (%s) is readable by other users" : "Data-mappen (%s) kan leses av andre brukere", + "Data directory (%s) must be an absolute path" : "Datamappen (%s) må være en absolutt sti", + "Data directory (%s) is invalid" : "Data-mappe (%s) er ugyldig" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/nb.json b/lib/l10n/nb.json index 7ea273008be..d51dabec39f 100644 --- a/lib/l10n/nb.json +++ b/lib/l10n/nb.json @@ -175,7 +175,6 @@ "Cannot write into \"config\" directory" : "Kan ikke skrive i \"config\"-mappen", "Cannot write into \"apps\" directory" : "Kan ikke skrive i \"apps\"-mappen", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan vanligvis ordnes ved %så gi web-tjeneren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.", - "Cannot create \"data\" directory (%s)" : "Kan ikke opprette \"data\"-mappen (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi webtjeneren skrivetilgang til rotmappen</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi webtjeneren skrivetilgang til rotmappen%s.", "Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s feilet.", @@ -195,16 +194,17 @@ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 kreves", "Please upgrade your database version" : "Vennligst oppgrader versjonen av databasen din", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Endre tillatelsene til 0770 slik at mappen ikke kan listes av andre brukere.", - "Data directory (%s) is readable by other users" : "Data-mappen (%s) kan leses av andre brukere", - "Data directory (%s) must be an absolute path" : "Datamappen (%s) må være en absolutt sti", "Check the value of \"datadirectory\" in your configuration" : "Sjekk verdien for \"datadirectory\" i konfigurasjonen din", - "Data directory (%s) is invalid" : "Data-mappe (%s) er ugyldig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Sjekk at det ligger en fil \".ocdata\" i roten av data-mappen.", "Could not obtain lock type %d on \"%s\"." : "Klarte ikke å låse med type %d på \"%s\".", "Storage unauthorized. %s" : "Lager uautorisert: %s", "Storage incomplete configuration. %s" : "Ikke komplett oppsett for lager. %s", "Storage connection error. %s" : "Tilkoblingsfeil for lager. %s", "Storage is temporarily not available" : "Lagring er midlertidig utilgjengelig", - "Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s" + "Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s", + "Cannot create \"data\" directory (%s)" : "Kan ikke opprette \"data\"-mappen (%s)", + "Data directory (%s) is readable by other users" : "Data-mappen (%s) kan leses av andre brukere", + "Data directory (%s) must be an absolute path" : "Datamappen (%s) må være en absolutt sti", + "Data directory (%s) is invalid" : "Data-mappe (%s) er ugyldig" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js index 587d6ef7439..2b61bd43552 100644 --- a/lib/l10n/nl.js +++ b/lib/l10n/nl.js @@ -42,6 +42,7 @@ OC.L10N.register( "File name is too long" : "De bestandsnaam is te lang", "Dot files are not allowed" : "Punt bestanden zijn niet toegestaan", "Empty filename is not allowed" : "Een lege bestandsnaam is niet toegestaan", + "This is an automatically generated email, please do not reply." : "Dit is een automatisch gegenereerde E-mail, aub niet beandwoorden.", "Help" : "Help", "Apps" : "Apps", "Personal" : "Persoonlijk", @@ -179,7 +180,7 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Kan niet schrijven naar de \"config\" directory", "Cannot write into \"apps\" directory" : "Kan niet schrijven naar de \"apps\" directory", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dit kan hersteld worden door de webserver schrijfrechten te %s geven op de appsdirectory %s of door de appstore te deactiveren in het configbestand.", - "Cannot create \"data\" directory (%s)" : "Kan de \"data\" directory (%s) niet aanmaken", + "Cannot create \"data\" directory" : "\"data\" map kan niet worden aangemaakt", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dit kan worden hersteld door <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> de webserver schrijfrechten te geven tot de hoofddirectory</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dit kan hersteld worden door de webserver schrijfrechten te %s geven op de hoofddirectory %s.", "Setting locale to %s failed" : "Instellen taal op %s mislukte", @@ -199,16 +200,20 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "PostgreSQL >= 9 vereist", "Please upgrade your database version" : "Werk je databaseversie bij", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Wijzig de permissies in 0770 zodat de directory niet door anderen bekeken kan worden.", - "Data directory (%s) is readable by other users" : "De datadirectory (%s) is leesbaar voor andere gebruikers", - "Data directory (%s) must be an absolute path" : "De datadirectory (%s) moet een absoluut pad hebben", + "Your data directory is readable by other users" : "Je data map is leesbaar voor andere gebruikers", + "Your data directory must be an absolute path" : "Je data map moet een absoluut pad hebben", "Check the value of \"datadirectory\" in your configuration" : "Controleer de waarde van \"datadirectory\" in je configuratie", - "Data directory (%s) is invalid" : "Data directory (%s) is ongeldig", + "Your data directory is invalid" : "Je data map is ongeldig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Verifieer dat de data directory een bestand \".ocdata\" in de hoofdmap heeft.", "Could not obtain lock type %d on \"%s\"." : "Kon geen lock type %d krijgen op \"%s\".", "Storage unauthorized. %s" : "Opslag niet toegestaan. %s", "Storage incomplete configuration. %s" : "Incomplete opslagconfiguratie. %s", "Storage connection error. %s" : "Opslagverbindingsfout. %s", "Storage is temporarily not available" : "Opslag is tijdelijk niet beschikbaar", - "Storage connection timeout. %s" : "Opslagverbinding time-out. %s" + "Storage connection timeout. %s" : "Opslagverbinding time-out. %s", + "Cannot create \"data\" directory (%s)" : "Kan de \"data\" directory (%s) niet aanmaken", + "Data directory (%s) is readable by other users" : "De datadirectory (%s) is leesbaar voor andere gebruikers", + "Data directory (%s) must be an absolute path" : "De datadirectory (%s) moet een absoluut pad hebben", + "Data directory (%s) is invalid" : "Data directory (%s) is ongeldig" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json index 3598852b59d..4ec369ae8d1 100644 --- a/lib/l10n/nl.json +++ b/lib/l10n/nl.json @@ -40,6 +40,7 @@ "File name is too long" : "De bestandsnaam is te lang", "Dot files are not allowed" : "Punt bestanden zijn niet toegestaan", "Empty filename is not allowed" : "Een lege bestandsnaam is niet toegestaan", + "This is an automatically generated email, please do not reply." : "Dit is een automatisch gegenereerde E-mail, aub niet beandwoorden.", "Help" : "Help", "Apps" : "Apps", "Personal" : "Persoonlijk", @@ -177,7 +178,7 @@ "Cannot write into \"config\" directory" : "Kan niet schrijven naar de \"config\" directory", "Cannot write into \"apps\" directory" : "Kan niet schrijven naar de \"apps\" directory", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dit kan hersteld worden door de webserver schrijfrechten te %s geven op de appsdirectory %s of door de appstore te deactiveren in het configbestand.", - "Cannot create \"data\" directory (%s)" : "Kan de \"data\" directory (%s) niet aanmaken", + "Cannot create \"data\" directory" : "\"data\" map kan niet worden aangemaakt", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dit kan worden hersteld door <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> de webserver schrijfrechten te geven tot de hoofddirectory</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dit kan hersteld worden door de webserver schrijfrechten te %s geven op de hoofddirectory %s.", "Setting locale to %s failed" : "Instellen taal op %s mislukte", @@ -197,16 +198,20 @@ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 vereist", "Please upgrade your database version" : "Werk je databaseversie bij", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Wijzig de permissies in 0770 zodat de directory niet door anderen bekeken kan worden.", - "Data directory (%s) is readable by other users" : "De datadirectory (%s) is leesbaar voor andere gebruikers", - "Data directory (%s) must be an absolute path" : "De datadirectory (%s) moet een absoluut pad hebben", + "Your data directory is readable by other users" : "Je data map is leesbaar voor andere gebruikers", + "Your data directory must be an absolute path" : "Je data map moet een absoluut pad hebben", "Check the value of \"datadirectory\" in your configuration" : "Controleer de waarde van \"datadirectory\" in je configuratie", - "Data directory (%s) is invalid" : "Data directory (%s) is ongeldig", + "Your data directory is invalid" : "Je data map is ongeldig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Verifieer dat de data directory een bestand \".ocdata\" in de hoofdmap heeft.", "Could not obtain lock type %d on \"%s\"." : "Kon geen lock type %d krijgen op \"%s\".", "Storage unauthorized. %s" : "Opslag niet toegestaan. %s", "Storage incomplete configuration. %s" : "Incomplete opslagconfiguratie. %s", "Storage connection error. %s" : "Opslagverbindingsfout. %s", "Storage is temporarily not available" : "Opslag is tijdelijk niet beschikbaar", - "Storage connection timeout. %s" : "Opslagverbinding time-out. %s" + "Storage connection timeout. %s" : "Opslagverbinding time-out. %s", + "Cannot create \"data\" directory (%s)" : "Kan de \"data\" directory (%s) niet aanmaken", + "Data directory (%s) is readable by other users" : "De datadirectory (%s) is leesbaar voor andere gebruikers", + "Data directory (%s) must be an absolute path" : "De datadirectory (%s) moet een absoluut pad hebben", + "Data directory (%s) is invalid" : "Data directory (%s) is ongeldig" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js index 1d1aabd96d3..3f7b10d0d2c 100644 --- a/lib/l10n/pl.js +++ b/lib/l10n/pl.js @@ -180,7 +180,7 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Nie można zapisać do katalogu \"config\"", "Cannot write into \"apps\" directory" : "Nie można zapisać do katalogu \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Można to zwykle rozwiązać przez %sdodanie serwerowi www uprawnień zapisu do katalogu apps%s lub wyłączenie appstore w pliku konfiguracyjnym.", - "Cannot create \"data\" directory (%s)" : "Nie można utworzyć katalogu \"data\" (%s)", + "Cannot create \"data\" directory" : "Nie mozna utworzyć katalogu \"data\"", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Z reguły to może zostać naprawione <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">poprzez danie serwerowi web praw zapisu do katalogu domowego aplikacji</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Problemy z uprawnieniami można zwykle naprawić przez %sdodanie serwerowi www uprawnień zapisu do katalogu głównego%s.", "Setting locale to %s failed" : "Nie udało się zmienić języka na %s", @@ -200,16 +200,20 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "Wymagany PostgreSQL >= 9", "Please upgrade your database version" : "Uaktualnij wersję bazy danych", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Zmień uprawnienia na 0770, żeby ukryć zawartość katalogu przed innymi użytkownikami.", - "Data directory (%s) is readable by other users" : "Katalog danych (%s) jest możliwy do odczytania przez innych użytkowników", - "Data directory (%s) must be an absolute path" : "Katalog danych (%s) musi być ścieżką absolutną", + "Your data directory is readable by other users" : "Twój katalog z danymi mogą czytać inni użytkownicy", + "Your data directory must be an absolute path" : "Twój katalog z danymi musi być ścieżką absolutną", "Check the value of \"datadirectory\" in your configuration" : "Sprawdź wartość \"datadirectory\" w swojej konfiguracji", - "Data directory (%s) is invalid" : "Katalog danych (%s) jest nieprawidłowy", + "Your data directory is invalid" : "Twój katalog z danymi jest nieprawidłowy", "Please check that the data directory contains a file \".ocdata\" in its root." : "Sprawdź, czy katalog danych zawiera plik \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "Nie można uzyskać blokady typu %d na \"%s\".", "Storage unauthorized. %s" : "Magazyn nieautoryzowany. %s", "Storage incomplete configuration. %s" : "Niekompletna konfiguracja magazynu. %s", "Storage connection error. %s" : "Błąd połączenia magazynu. %s", "Storage is temporarily not available" : "Magazyn jest tymczasowo niedostępny", - "Storage connection timeout. %s" : "Limit czasu połączenia do magazynu został przekroczony. %s" + "Storage connection timeout. %s" : "Limit czasu połączenia do magazynu został przekroczony. %s", + "Cannot create \"data\" directory (%s)" : "Nie można utworzyć katalogu \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Katalog danych (%s) jest możliwy do odczytania przez innych użytkowników", + "Data directory (%s) must be an absolute path" : "Katalog danych (%s) musi być ścieżką absolutną", + "Data directory (%s) is invalid" : "Katalog danych (%s) jest nieprawidłowy" }, "nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"); diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json index 0868d53c49f..27af34c24f5 100644 --- a/lib/l10n/pl.json +++ b/lib/l10n/pl.json @@ -178,7 +178,7 @@ "Cannot write into \"config\" directory" : "Nie można zapisać do katalogu \"config\"", "Cannot write into \"apps\" directory" : "Nie można zapisać do katalogu \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Można to zwykle rozwiązać przez %sdodanie serwerowi www uprawnień zapisu do katalogu apps%s lub wyłączenie appstore w pliku konfiguracyjnym.", - "Cannot create \"data\" directory (%s)" : "Nie można utworzyć katalogu \"data\" (%s)", + "Cannot create \"data\" directory" : "Nie mozna utworzyć katalogu \"data\"", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Z reguły to może zostać naprawione <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">poprzez danie serwerowi web praw zapisu do katalogu domowego aplikacji</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Problemy z uprawnieniami można zwykle naprawić przez %sdodanie serwerowi www uprawnień zapisu do katalogu głównego%s.", "Setting locale to %s failed" : "Nie udało się zmienić języka na %s", @@ -198,16 +198,20 @@ "PostgreSQL >= 9 required" : "Wymagany PostgreSQL >= 9", "Please upgrade your database version" : "Uaktualnij wersję bazy danych", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Zmień uprawnienia na 0770, żeby ukryć zawartość katalogu przed innymi użytkownikami.", - "Data directory (%s) is readable by other users" : "Katalog danych (%s) jest możliwy do odczytania przez innych użytkowników", - "Data directory (%s) must be an absolute path" : "Katalog danych (%s) musi być ścieżką absolutną", + "Your data directory is readable by other users" : "Twój katalog z danymi mogą czytać inni użytkownicy", + "Your data directory must be an absolute path" : "Twój katalog z danymi musi być ścieżką absolutną", "Check the value of \"datadirectory\" in your configuration" : "Sprawdź wartość \"datadirectory\" w swojej konfiguracji", - "Data directory (%s) is invalid" : "Katalog danych (%s) jest nieprawidłowy", + "Your data directory is invalid" : "Twój katalog z danymi jest nieprawidłowy", "Please check that the data directory contains a file \".ocdata\" in its root." : "Sprawdź, czy katalog danych zawiera plik \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "Nie można uzyskać blokady typu %d na \"%s\".", "Storage unauthorized. %s" : "Magazyn nieautoryzowany. %s", "Storage incomplete configuration. %s" : "Niekompletna konfiguracja magazynu. %s", "Storage connection error. %s" : "Błąd połączenia magazynu. %s", "Storage is temporarily not available" : "Magazyn jest tymczasowo niedostępny", - "Storage connection timeout. %s" : "Limit czasu połączenia do magazynu został przekroczony. %s" + "Storage connection timeout. %s" : "Limit czasu połączenia do magazynu został przekroczony. %s", + "Cannot create \"data\" directory (%s)" : "Nie można utworzyć katalogu \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Katalog danych (%s) jest możliwy do odczytania przez innych użytkowników", + "Data directory (%s) must be an absolute path" : "Katalog danych (%s) musi być ścieżką absolutną", + "Data directory (%s) is invalid" : "Katalog danych (%s) jest nieprawidłowy" },"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" }
\ No newline at end of file diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js index 5f7c52f48e6..7cfdec156dd 100644 --- a/lib/l10n/pt_BR.js +++ b/lib/l10n/pt_BR.js @@ -180,7 +180,7 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Não é possível gravar no diretório \"config\"", "Cannot write into \"apps\" directory" : "Não é possível gravar no diretório \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Isto pode ser corrigido por %sdando ao servidor web permissão de escrita para o diretório app%s ou desabilitando o appstore no arquivo de configuração.", - "Cannot create \"data\" directory (%s)" : "Não pode ser criado \"dados\" no diretório (%s)", + "Cannot create \"data\" directory" : "Não foi possível criar o diretório de dados", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Isto geralmente pode ser corrigido ao <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dar permissão de gravação no diretório raiz</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissões podem ser corrigidas por %sdando permissão de escrita ao servidor web para o diretório raiz %s", "Setting locale to %s failed" : "Falha ao configurar localização para %s", @@ -200,16 +200,20 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "PostgreSQL >= 9 requirido", "Please upgrade your database version" : "Por favor atualize sua versão do banco de dados", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor altere as permissões para 0770 para que o diretório não possa ser listado por outros usuários.", - "Data directory (%s) is readable by other users" : "Diretório de dados (%s) pode ser lido por outros usuários", - "Data directory (%s) must be an absolute path" : "Diretório de dados (%s) deve ser um caminho absoluto", + "Your data directory is readable by other users" : "O diretório de dados está legível para outros usuários", + "Your data directory must be an absolute path" : "O diretório de dados deve ser um caminho absoluto", "Check the value of \"datadirectory\" in your configuration" : "Verifique o valor do \"diretóriodedados\" na sua configuração", - "Data directory (%s) is invalid" : "Diretório de dados (%s) é inválido", + "Your data directory is invalid" : "O diretório de dados é inválido", "Please check that the data directory contains a file \".ocdata\" in its root." : "Por favor, verifique se o diretório de dados contém um arquivo \".ocdata\" em sua raiz.", "Could not obtain lock type %d on \"%s\"." : "Não foi possível obter tipo de bloqueio %d em \"%s\".", "Storage unauthorized. %s" : "Armazenamento não autorizado. %s", "Storage incomplete configuration. %s" : "Incompleta configuração de armazenamento. %s", "Storage connection error. %s" : "Erro na conexão de armazenamento. %s", "Storage is temporarily not available" : "Storage temporariamente indisponível", - "Storage connection timeout. %s" : "Tempo limite de conexão de armazenamento. %s" + "Storage connection timeout. %s" : "Tempo limite de conexão de armazenamento. %s", + "Cannot create \"data\" directory (%s)" : "Não pode ser criado \"dados\" no diretório (%s)", + "Data directory (%s) is readable by other users" : "Diretório de dados (%s) pode ser lido por outros usuários", + "Data directory (%s) must be an absolute path" : "Diretório de dados (%s) deve ser um caminho absoluto", + "Data directory (%s) is invalid" : "Diretório de dados (%s) é inválido" }, "nplurals=2; plural=(n > 1);"); diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json index 739bf250a2b..83da7a6b7ed 100644 --- a/lib/l10n/pt_BR.json +++ b/lib/l10n/pt_BR.json @@ -178,7 +178,7 @@ "Cannot write into \"config\" directory" : "Não é possível gravar no diretório \"config\"", "Cannot write into \"apps\" directory" : "Não é possível gravar no diretório \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Isto pode ser corrigido por %sdando ao servidor web permissão de escrita para o diretório app%s ou desabilitando o appstore no arquivo de configuração.", - "Cannot create \"data\" directory (%s)" : "Não pode ser criado \"dados\" no diretório (%s)", + "Cannot create \"data\" directory" : "Não foi possível criar o diretório de dados", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Isto geralmente pode ser corrigido ao <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dar permissão de gravação no diretório raiz</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissões podem ser corrigidas por %sdando permissão de escrita ao servidor web para o diretório raiz %s", "Setting locale to %s failed" : "Falha ao configurar localização para %s", @@ -198,16 +198,20 @@ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 requirido", "Please upgrade your database version" : "Por favor atualize sua versão do banco de dados", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor altere as permissões para 0770 para que o diretório não possa ser listado por outros usuários.", - "Data directory (%s) is readable by other users" : "Diretório de dados (%s) pode ser lido por outros usuários", - "Data directory (%s) must be an absolute path" : "Diretório de dados (%s) deve ser um caminho absoluto", + "Your data directory is readable by other users" : "O diretório de dados está legível para outros usuários", + "Your data directory must be an absolute path" : "O diretório de dados deve ser um caminho absoluto", "Check the value of \"datadirectory\" in your configuration" : "Verifique o valor do \"diretóriodedados\" na sua configuração", - "Data directory (%s) is invalid" : "Diretório de dados (%s) é inválido", + "Your data directory is invalid" : "O diretório de dados é inválido", "Please check that the data directory contains a file \".ocdata\" in its root." : "Por favor, verifique se o diretório de dados contém um arquivo \".ocdata\" em sua raiz.", "Could not obtain lock type %d on \"%s\"." : "Não foi possível obter tipo de bloqueio %d em \"%s\".", "Storage unauthorized. %s" : "Armazenamento não autorizado. %s", "Storage incomplete configuration. %s" : "Incompleta configuração de armazenamento. %s", "Storage connection error. %s" : "Erro na conexão de armazenamento. %s", "Storage is temporarily not available" : "Storage temporariamente indisponível", - "Storage connection timeout. %s" : "Tempo limite de conexão de armazenamento. %s" + "Storage connection timeout. %s" : "Tempo limite de conexão de armazenamento. %s", + "Cannot create \"data\" directory (%s)" : "Não pode ser criado \"dados\" no diretório (%s)", + "Data directory (%s) is readable by other users" : "Diretório de dados (%s) pode ser lido por outros usuários", + "Data directory (%s) must be an absolute path" : "Diretório de dados (%s) deve ser um caminho absoluto", + "Data directory (%s) is invalid" : "Diretório de dados (%s) é inválido" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js index 2e68be3063e..24a1a500f3d 100644 --- a/lib/l10n/ru.js +++ b/lib/l10n/ru.js @@ -180,7 +180,7 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Запись в каталог \"config\" невозможна", "Cannot write into \"apps\" directory" : "Запись в каталог \"app\" невозможна", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в каталог приложений%s или отключив магазин приложений в файле конфигурации.", - "Cannot create \"data\" directory (%s)" : "Невозможно создать каталог \"data\" (%s)", + "Cannot create \"data\" directory" : "Невозможно создать каталог «data»", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Обычно это можно исправить <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">предоставив веб-серверу права на запись в корневом каталоге</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в корневой каталог%s.", "Setting locale to %s failed" : "Установка локали %s не удалась", @@ -200,16 +200,20 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "Требуется PostgreSQL >= 9", "Please upgrade your database version" : "Обновите базу данных", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Измените права доступа на 0770, чтобы другие пользователи не могли получить список файлов этого каталога.", - "Data directory (%s) is readable by other users" : "Каталог данных (%s) доступен для чтения другим пользователям", - "Data directory (%s) must be an absolute path" : "Каталог данных (%s) должен быть абсолютным путём", + "Your data directory is readable by other users" : "Каталог данных доступен для чтения другим пользователям", + "Your data directory must be an absolute path" : "Каталог данных должен быть указан в виде абсолютного пути", "Check the value of \"datadirectory\" in your configuration" : "Проверьте значение \"datadirectory\" в настройках.", - "Data directory (%s) is invalid" : "Каталог данных (%s) не верен", + "Your data directory is invalid" : "Каталог данных не верен", "Please check that the data directory contains a file \".ocdata\" in its root." : "Убедитесь, что файл \".ocdata\" присутствует в корне каталога данных.", "Could not obtain lock type %d on \"%s\"." : "Не удалось получить блокировку типа %d для \"%s\"", "Storage unauthorized. %s" : "Хранилище неавторизовано. %s", "Storage incomplete configuration. %s" : "Неполная конфигурация хранилища. %s", "Storage connection error. %s" : "Ошибка подключения к хранилищу. %s", "Storage is temporarily not available" : "Хранилище временно недоступно", - "Storage connection timeout. %s" : "Истекло время ожидания подключения к хранилищу. %s" + "Storage connection timeout. %s" : "Истекло время ожидания подключения к хранилищу. %s", + "Cannot create \"data\" directory (%s)" : "Невозможно создать каталог \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Каталог данных (%s) доступен для чтения другим пользователям", + "Data directory (%s) must be an absolute path" : "Каталог данных (%s) должен быть абсолютным путём", + "Data directory (%s) is invalid" : "Каталог данных (%s) не верен" }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json index b01ffd34904..ae244c727e5 100644 --- a/lib/l10n/ru.json +++ b/lib/l10n/ru.json @@ -178,7 +178,7 @@ "Cannot write into \"config\" directory" : "Запись в каталог \"config\" невозможна", "Cannot write into \"apps\" directory" : "Запись в каталог \"app\" невозможна", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в каталог приложений%s или отключив магазин приложений в файле конфигурации.", - "Cannot create \"data\" directory (%s)" : "Невозможно создать каталог \"data\" (%s)", + "Cannot create \"data\" directory" : "Невозможно создать каталог «data»", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Обычно это можно исправить <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">предоставив веб-серверу права на запись в корневом каталоге</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в корневой каталог%s.", "Setting locale to %s failed" : "Установка локали %s не удалась", @@ -198,16 +198,20 @@ "PostgreSQL >= 9 required" : "Требуется PostgreSQL >= 9", "Please upgrade your database version" : "Обновите базу данных", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Измените права доступа на 0770, чтобы другие пользователи не могли получить список файлов этого каталога.", - "Data directory (%s) is readable by other users" : "Каталог данных (%s) доступен для чтения другим пользователям", - "Data directory (%s) must be an absolute path" : "Каталог данных (%s) должен быть абсолютным путём", + "Your data directory is readable by other users" : "Каталог данных доступен для чтения другим пользователям", + "Your data directory must be an absolute path" : "Каталог данных должен быть указан в виде абсолютного пути", "Check the value of \"datadirectory\" in your configuration" : "Проверьте значение \"datadirectory\" в настройках.", - "Data directory (%s) is invalid" : "Каталог данных (%s) не верен", + "Your data directory is invalid" : "Каталог данных не верен", "Please check that the data directory contains a file \".ocdata\" in its root." : "Убедитесь, что файл \".ocdata\" присутствует в корне каталога данных.", "Could not obtain lock type %d on \"%s\"." : "Не удалось получить блокировку типа %d для \"%s\"", "Storage unauthorized. %s" : "Хранилище неавторизовано. %s", "Storage incomplete configuration. %s" : "Неполная конфигурация хранилища. %s", "Storage connection error. %s" : "Ошибка подключения к хранилищу. %s", "Storage is temporarily not available" : "Хранилище временно недоступно", - "Storage connection timeout. %s" : "Истекло время ожидания подключения к хранилищу. %s" + "Storage connection timeout. %s" : "Истекло время ожидания подключения к хранилищу. %s", + "Cannot create \"data\" directory (%s)" : "Невозможно создать каталог \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Каталог данных (%s) доступен для чтения другим пользователям", + "Data directory (%s) must be an absolute path" : "Каталог данных (%s) должен быть абсолютным путём", + "Data directory (%s) is invalid" : "Каталог данных (%s) не верен" },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" }
\ No newline at end of file diff --git a/lib/l10n/sk.js b/lib/l10n/sk.js index 90f0ea4e598..c45b0d82b36 100644 --- a/lib/l10n/sk.js +++ b/lib/l10n/sk.js @@ -173,7 +173,6 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Nie je možné zapisovať do priečinka \"config\"", "Cannot write into \"apps\" directory" : "Nie je možné zapisovať do priečinka \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Toto je zvyčajne možné opraviť tým, že %s udelíte webovému serveru oprávnenie na zápis do priečinka aplikácií %s alebo vypnete obchod s aplikáciami v konfiguračnom súbore.", - "Cannot create \"data\" directory (%s)" : "Nie je možné vytvoriť priečinok \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "To je zvyčajne možné opraviť tým <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">že udelíte webovému serveru oprávnenie na zápis do koreňového priečinka</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnenia je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis do koreňového priečinka%s.", "Setting locale to %s failed" : "Nastavenie locale na %s zlyhalo", @@ -193,13 +192,14 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "Vyžadované PostgreSQL >= 9", "Please upgrade your database version" : "Prosím, aktualizujte verziu svojej databázy", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Prosím, zmeňte oprávnenia na 0770, aby tento priečinok nemohli ostatní používatelia otvoriť.", - "Data directory (%s) is readable by other users" : "Priečinok dát (%s) je prístupný na čítanie ostatným používateľom", - "Data directory (%s) must be an absolute path" : "Priečinok dát (%s) musí byť zadaný ako absolútna cesta", "Check the value of \"datadirectory\" in your configuration" : "Skontrolujte hodnotu \"datadirectory\" vo vašej konfigurácii", - "Data directory (%s) is invalid" : "Priečinok dát (%s) je neplatný", "Please check that the data directory contains a file \".ocdata\" in its root." : "Prosím, skontrolujte, či priečinok dát obsahuje súbor \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "Nepodarilo sa získať zámok typu %d na „%s“.", "Storage connection error. %s" : "Chyba pripojenia k úložisku. %s", - "Storage is temporarily not available" : "Úložisko je dočasne nedostupné" + "Storage is temporarily not available" : "Úložisko je dočasne nedostupné", + "Cannot create \"data\" directory (%s)" : "Nie je možné vytvoriť priečinok \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Priečinok dát (%s) je prístupný na čítanie ostatným používateľom", + "Data directory (%s) must be an absolute path" : "Priečinok dát (%s) musí byť zadaný ako absolútna cesta", + "Data directory (%s) is invalid" : "Priečinok dát (%s) je neplatný" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/lib/l10n/sk.json b/lib/l10n/sk.json index df3a0c3a118..e720622d417 100644 --- a/lib/l10n/sk.json +++ b/lib/l10n/sk.json @@ -171,7 +171,6 @@ "Cannot write into \"config\" directory" : "Nie je možné zapisovať do priečinka \"config\"", "Cannot write into \"apps\" directory" : "Nie je možné zapisovať do priečinka \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Toto je zvyčajne možné opraviť tým, že %s udelíte webovému serveru oprávnenie na zápis do priečinka aplikácií %s alebo vypnete obchod s aplikáciami v konfiguračnom súbore.", - "Cannot create \"data\" directory (%s)" : "Nie je možné vytvoriť priečinok \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "To je zvyčajne možné opraviť tým <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">že udelíte webovému serveru oprávnenie na zápis do koreňového priečinka</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnenia je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis do koreňového priečinka%s.", "Setting locale to %s failed" : "Nastavenie locale na %s zlyhalo", @@ -191,13 +190,14 @@ "PostgreSQL >= 9 required" : "Vyžadované PostgreSQL >= 9", "Please upgrade your database version" : "Prosím, aktualizujte verziu svojej databázy", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Prosím, zmeňte oprávnenia na 0770, aby tento priečinok nemohli ostatní používatelia otvoriť.", - "Data directory (%s) is readable by other users" : "Priečinok dát (%s) je prístupný na čítanie ostatným používateľom", - "Data directory (%s) must be an absolute path" : "Priečinok dát (%s) musí byť zadaný ako absolútna cesta", "Check the value of \"datadirectory\" in your configuration" : "Skontrolujte hodnotu \"datadirectory\" vo vašej konfigurácii", - "Data directory (%s) is invalid" : "Priečinok dát (%s) je neplatný", "Please check that the data directory contains a file \".ocdata\" in its root." : "Prosím, skontrolujte, či priečinok dát obsahuje súbor \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "Nepodarilo sa získať zámok typu %d na „%s“.", "Storage connection error. %s" : "Chyba pripojenia k úložisku. %s", - "Storage is temporarily not available" : "Úložisko je dočasne nedostupné" + "Storage is temporarily not available" : "Úložisko je dočasne nedostupné", + "Cannot create \"data\" directory (%s)" : "Nie je možné vytvoriť priečinok \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Priečinok dát (%s) je prístupný na čítanie ostatným používateľom", + "Data directory (%s) must be an absolute path" : "Priečinok dát (%s) musí byť zadaný ako absolútna cesta", + "Data directory (%s) is invalid" : "Priečinok dát (%s) je neplatný" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/lib/l10n/sq.js b/lib/l10n/sq.js index 4f76e52d978..7d0966bd2b0 100644 --- a/lib/l10n/sq.js +++ b/lib/l10n/sq.js @@ -177,7 +177,6 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "S’shkruhet dot te drejtoria \"config\"", "Cannot write into \"apps\" directory" : "S’shkruhet dot te drejtoria \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Zakonisht kjo mund të ndreqet duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë e aplikacionit%s ose duke e çaktivizuar appstore-in te kartela e formësimit.", - "Cannot create \"data\" directory (%s)" : "S’krijohet dot drejtoria \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Zakonisht kjo mund të ndreqet duke <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">i akorduar shërbyesit web të drejta shkrimi mbi drejtorinë rrënjë</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Zakonisht lejet mund të ndreqen duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë rrënjë%s.", "Setting locale to %s failed" : "Caktimi i gjuhës si %s dështoi", @@ -197,16 +196,17 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "Lypset PostgreSQL >= 9", "Please upgrade your database version" : "Ju lutemi, përmirësoni bazën tuaj të të dhënave me një version më të ri.", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Ju lutemi, kalojani lejet në 0770, që kështu atë drejtori të mos mund ta shfaqin përdorues të tjerë.", - "Data directory (%s) is readable by other users" : "Drejtoria e të dhënave (%s) është e lexueshme nga përdorues të tjerë", - "Data directory (%s) must be an absolute path" : "Drejtoria e të dhënave (%s) duhet të jepë një shteg absolut", "Check the value of \"datadirectory\" in your configuration" : "Kontrolloni vlerën e \"datadirectory\" te formësimi juaj", - "Data directory (%s) is invalid" : "Drejtoria e të dhënave (%s) është e pavlefshme", "Please check that the data directory contains a file \".ocdata\" in its root." : "Ju lutemi, kontrolloni që drejtoria e të dhënave përmban në rrënjën e saj një kartelë \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "S’u mor dot lloj kyçjeje %d në \"%s\".", "Storage unauthorized. %s" : "Depozitë e paautorizuar. %s", "Storage incomplete configuration. %s" : "Formësim jo i plotë i depozitës. %s", "Storage connection error. %s" : "Gabim lidhje te depozita. %s", "Storage is temporarily not available" : "Hapsira ruajtëse nuk është në dispozicion përkohësisht", - "Storage connection timeout. %s" : "Mbarim kohe lidhjeje për depozitën. %s" + "Storage connection timeout. %s" : "Mbarim kohe lidhjeje për depozitën. %s", + "Cannot create \"data\" directory (%s)" : "S’krijohet dot drejtoria \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Drejtoria e të dhënave (%s) është e lexueshme nga përdorues të tjerë", + "Data directory (%s) must be an absolute path" : "Drejtoria e të dhënave (%s) duhet të jepë një shteg absolut", + "Data directory (%s) is invalid" : "Drejtoria e të dhënave (%s) është e pavlefshme" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/sq.json b/lib/l10n/sq.json index e7338f97429..d49cfc86aed 100644 --- a/lib/l10n/sq.json +++ b/lib/l10n/sq.json @@ -175,7 +175,6 @@ "Cannot write into \"config\" directory" : "S’shkruhet dot te drejtoria \"config\"", "Cannot write into \"apps\" directory" : "S’shkruhet dot te drejtoria \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Zakonisht kjo mund të ndreqet duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë e aplikacionit%s ose duke e çaktivizuar appstore-in te kartela e formësimit.", - "Cannot create \"data\" directory (%s)" : "S’krijohet dot drejtoria \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Zakonisht kjo mund të ndreqet duke <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">i akorduar shërbyesit web të drejta shkrimi mbi drejtorinë rrënjë</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Zakonisht lejet mund të ndreqen duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë rrënjë%s.", "Setting locale to %s failed" : "Caktimi i gjuhës si %s dështoi", @@ -195,16 +194,17 @@ "PostgreSQL >= 9 required" : "Lypset PostgreSQL >= 9", "Please upgrade your database version" : "Ju lutemi, përmirësoni bazën tuaj të të dhënave me një version më të ri.", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Ju lutemi, kalojani lejet në 0770, që kështu atë drejtori të mos mund ta shfaqin përdorues të tjerë.", - "Data directory (%s) is readable by other users" : "Drejtoria e të dhënave (%s) është e lexueshme nga përdorues të tjerë", - "Data directory (%s) must be an absolute path" : "Drejtoria e të dhënave (%s) duhet të jepë një shteg absolut", "Check the value of \"datadirectory\" in your configuration" : "Kontrolloni vlerën e \"datadirectory\" te formësimi juaj", - "Data directory (%s) is invalid" : "Drejtoria e të dhënave (%s) është e pavlefshme", "Please check that the data directory contains a file \".ocdata\" in its root." : "Ju lutemi, kontrolloni që drejtoria e të dhënave përmban në rrënjën e saj një kartelë \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "S’u mor dot lloj kyçjeje %d në \"%s\".", "Storage unauthorized. %s" : "Depozitë e paautorizuar. %s", "Storage incomplete configuration. %s" : "Formësim jo i plotë i depozitës. %s", "Storage connection error. %s" : "Gabim lidhje te depozita. %s", "Storage is temporarily not available" : "Hapsira ruajtëse nuk është në dispozicion përkohësisht", - "Storage connection timeout. %s" : "Mbarim kohe lidhjeje për depozitën. %s" + "Storage connection timeout. %s" : "Mbarim kohe lidhjeje për depozitën. %s", + "Cannot create \"data\" directory (%s)" : "S’krijohet dot drejtoria \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Drejtoria e të dhënave (%s) është e lexueshme nga përdorues të tjerë", + "Data directory (%s) must be an absolute path" : "Drejtoria e të dhënave (%s) duhet të jepë një shteg absolut", + "Data directory (%s) is invalid" : "Drejtoria e të dhënave (%s) është e pavlefshme" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/sv.js b/lib/l10n/sv.js index db159beca1b..97a1c5eef90 100644 --- a/lib/l10n/sv.js +++ b/lib/l10n/sv.js @@ -177,7 +177,6 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Kan inte skriva till \"config\" katalogen", "Cannot write into \"apps\" directory" : "Kan inte skriva till \"apps\" katalogen!", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till applikationskatalogen %s eller stänga av app-butik i konfigurationsfilen.", - "Cannot create \"data\" directory (%s)" : "Kan inte skapa \"data\" katalog (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> ge webbserver skrivåtkomst till rotkatalogen </a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rättigheterna kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till rootkatalogen %s.", "Setting locale to %s failed" : "Sätta locale till %s misslyckades", @@ -197,16 +196,17 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "PostgreSQL >= 9 krävs", "Please upgrade your database version" : "Vänligen uppgradera din databas-version", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Vänligen ändra rättigheterna till 0770 så att katalogen inte kan listas utav andra användare.", - "Data directory (%s) is readable by other users" : "Datakatalogen (%s) kan läsas av andra användare", - "Data directory (%s) must be an absolute path" : "Datakatalogen (%s) måste vara hela sökvägen", "Check the value of \"datadirectory\" in your configuration" : "Kontrollera värdet av \"datakatalog\" i din konfiguration", - "Data directory (%s) is invalid" : "Datakatlogen (%s) är ogiltig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Vänligen kontrollera att datakatalogen innehåller filen \".ocdata\" i rooten.", "Could not obtain lock type %d on \"%s\"." : "Kunde inte hämta låstyp %d på \"%s\".", "Storage unauthorized. %s" : "Lagringsutrymme ej tillåtet. %s", "Storage incomplete configuration. %s" : "Lagringsutrymme felaktigt inställt. %s", "Storage connection error. %s" : "Lagringsutrymme lyckas inte ansluta. %s", "Storage is temporarily not available" : "Lagringsutrymme är för tillfället inte tillgängligt", - "Storage connection timeout. %s" : "Lagringsutrymme lyckas inte ansluta \"timeout\". %s" + "Storage connection timeout. %s" : "Lagringsutrymme lyckas inte ansluta \"timeout\". %s", + "Cannot create \"data\" directory (%s)" : "Kan inte skapa \"data\" katalog (%s)", + "Data directory (%s) is readable by other users" : "Datakatalogen (%s) kan läsas av andra användare", + "Data directory (%s) must be an absolute path" : "Datakatalogen (%s) måste vara hela sökvägen", + "Data directory (%s) is invalid" : "Datakatlogen (%s) är ogiltig" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/sv.json b/lib/l10n/sv.json index 4d698ccfc75..4a69e08bdf2 100644 --- a/lib/l10n/sv.json +++ b/lib/l10n/sv.json @@ -175,7 +175,6 @@ "Cannot write into \"config\" directory" : "Kan inte skriva till \"config\" katalogen", "Cannot write into \"apps\" directory" : "Kan inte skriva till \"apps\" katalogen!", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till applikationskatalogen %s eller stänga av app-butik i konfigurationsfilen.", - "Cannot create \"data\" directory (%s)" : "Kan inte skapa \"data\" katalog (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> ge webbserver skrivåtkomst till rotkatalogen </a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rättigheterna kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till rootkatalogen %s.", "Setting locale to %s failed" : "Sätta locale till %s misslyckades", @@ -195,16 +194,17 @@ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 krävs", "Please upgrade your database version" : "Vänligen uppgradera din databas-version", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Vänligen ändra rättigheterna till 0770 så att katalogen inte kan listas utav andra användare.", - "Data directory (%s) is readable by other users" : "Datakatalogen (%s) kan läsas av andra användare", - "Data directory (%s) must be an absolute path" : "Datakatalogen (%s) måste vara hela sökvägen", "Check the value of \"datadirectory\" in your configuration" : "Kontrollera värdet av \"datakatalog\" i din konfiguration", - "Data directory (%s) is invalid" : "Datakatlogen (%s) är ogiltig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Vänligen kontrollera att datakatalogen innehåller filen \".ocdata\" i rooten.", "Could not obtain lock type %d on \"%s\"." : "Kunde inte hämta låstyp %d på \"%s\".", "Storage unauthorized. %s" : "Lagringsutrymme ej tillåtet. %s", "Storage incomplete configuration. %s" : "Lagringsutrymme felaktigt inställt. %s", "Storage connection error. %s" : "Lagringsutrymme lyckas inte ansluta. %s", "Storage is temporarily not available" : "Lagringsutrymme är för tillfället inte tillgängligt", - "Storage connection timeout. %s" : "Lagringsutrymme lyckas inte ansluta \"timeout\". %s" + "Storage connection timeout. %s" : "Lagringsutrymme lyckas inte ansluta \"timeout\". %s", + "Cannot create \"data\" directory (%s)" : "Kan inte skapa \"data\" katalog (%s)", + "Data directory (%s) is readable by other users" : "Datakatalogen (%s) kan läsas av andra användare", + "Data directory (%s) must be an absolute path" : "Datakatalogen (%s) måste vara hela sökvägen", + "Data directory (%s) is invalid" : "Datakatlogen (%s) är ogiltig" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js index 92624ef19f1..57d491affd9 100644 --- a/lib/l10n/tr.js +++ b/lib/l10n/tr.js @@ -180,7 +180,7 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "\"config\" klasörüne yazılamıyor", "Cannot write into \"apps\" directory" : "\"apps\" klasörüne yazılamıyor", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Bu sorun genellikle, %sweb sunucusuna apps klasörüne yazma izni verilerek%s çözülebilir.", - "Cannot create \"data\" directory (%s)" : "\"Veri\" klasörü oluşturulamadı (%s)", + "Cannot create \"data\" directory" : "\"data\" klasörü oluşturulamadı", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Bu sorun genellikle, <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">web sunucusuna kök klasöre yazma izni verilerek</a> çözülebilir.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "İzinler genellikle, %sweb sunucusuna kök klasöre yazma izni verilerek%s düzeltilebilir.", "Setting locale to %s failed" : "Dil %s olarak ayarlanamadı", @@ -200,16 +200,20 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "PostgreSQL >= 9 gerekli", "Please upgrade your database version" : "Lütfen veritabanı sürümünüzü yükseltin", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Lütfen izinleri 0770 olarak ayarlayarak diğer kullanıcıların klasörü görebilmesini sağlayın.", - "Data directory (%s) is readable by other users" : "Veri klasörü (%s) diğer kullanıcılar tarafından okunabilir", - "Data directory (%s) must be an absolute path" : "Veri klasörü (%s) mutlak bir yol olmalıdır", + "Your data directory is readable by other users" : "Veri klasörünüz diğer kullanıcılar tarafından okunabilir", + "Your data directory must be an absolute path" : "Veri klasörünüz mutlak bir yol olmalıdır", "Check the value of \"datadirectory\" in your configuration" : "Yapılandırmanızdaki \"datadirectory\" seçeneğini denetleyin", - "Data directory (%s) is invalid" : "Veri klasörü (%s) geçersiz", + "Your data directory is invalid" : "Veri klasörünüz geçersiz", "Please check that the data directory contains a file \".ocdata\" in its root." : "Lütfen veri klasörünün kökünde \".ocdata\" dosyasının bulunduğunu denetleyin.", "Could not obtain lock type %d on \"%s\"." : "\"%s\" için %d kilit türü alınamadı.", "Storage unauthorized. %s" : "Depolamaya erişim izni yok. %s", "Storage incomplete configuration. %s" : "Depolama yapılandırması tamamlanmamış. %s", "Storage connection error. %s" : "Depolama bağlantısı sorunu. %s", "Storage is temporarily not available" : "Depolama geçici olarak kullanılamıyor", - "Storage connection timeout. %s" : "Depolama bağlantısı zaman aşımı. %s" + "Storage connection timeout. %s" : "Depolama bağlantısı zaman aşımı. %s", + "Cannot create \"data\" directory (%s)" : "\"Veri\" klasörü oluşturulamadı (%s)", + "Data directory (%s) is readable by other users" : "Veri klasörü (%s) diğer kullanıcılar tarafından okunabilir", + "Data directory (%s) must be an absolute path" : "Veri klasörü (%s) mutlak bir yol olmalıdır", + "Data directory (%s) is invalid" : "Veri klasörü (%s) geçersiz" }, "nplurals=2; plural=(n > 1);"); diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json index 9f460e45f13..55d1af8f4fa 100644 --- a/lib/l10n/tr.json +++ b/lib/l10n/tr.json @@ -178,7 +178,7 @@ "Cannot write into \"config\" directory" : "\"config\" klasörüne yazılamıyor", "Cannot write into \"apps\" directory" : "\"apps\" klasörüne yazılamıyor", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Bu sorun genellikle, %sweb sunucusuna apps klasörüne yazma izni verilerek%s çözülebilir.", - "Cannot create \"data\" directory (%s)" : "\"Veri\" klasörü oluşturulamadı (%s)", + "Cannot create \"data\" directory" : "\"data\" klasörü oluşturulamadı", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Bu sorun genellikle, <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">web sunucusuna kök klasöre yazma izni verilerek</a> çözülebilir.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "İzinler genellikle, %sweb sunucusuna kök klasöre yazma izni verilerek%s düzeltilebilir.", "Setting locale to %s failed" : "Dil %s olarak ayarlanamadı", @@ -198,16 +198,20 @@ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 gerekli", "Please upgrade your database version" : "Lütfen veritabanı sürümünüzü yükseltin", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Lütfen izinleri 0770 olarak ayarlayarak diğer kullanıcıların klasörü görebilmesini sağlayın.", - "Data directory (%s) is readable by other users" : "Veri klasörü (%s) diğer kullanıcılar tarafından okunabilir", - "Data directory (%s) must be an absolute path" : "Veri klasörü (%s) mutlak bir yol olmalıdır", + "Your data directory is readable by other users" : "Veri klasörünüz diğer kullanıcılar tarafından okunabilir", + "Your data directory must be an absolute path" : "Veri klasörünüz mutlak bir yol olmalıdır", "Check the value of \"datadirectory\" in your configuration" : "Yapılandırmanızdaki \"datadirectory\" seçeneğini denetleyin", - "Data directory (%s) is invalid" : "Veri klasörü (%s) geçersiz", + "Your data directory is invalid" : "Veri klasörünüz geçersiz", "Please check that the data directory contains a file \".ocdata\" in its root." : "Lütfen veri klasörünün kökünde \".ocdata\" dosyasının bulunduğunu denetleyin.", "Could not obtain lock type %d on \"%s\"." : "\"%s\" için %d kilit türü alınamadı.", "Storage unauthorized. %s" : "Depolamaya erişim izni yok. %s", "Storage incomplete configuration. %s" : "Depolama yapılandırması tamamlanmamış. %s", "Storage connection error. %s" : "Depolama bağlantısı sorunu. %s", "Storage is temporarily not available" : "Depolama geçici olarak kullanılamıyor", - "Storage connection timeout. %s" : "Depolama bağlantısı zaman aşımı. %s" + "Storage connection timeout. %s" : "Depolama bağlantısı zaman aşımı. %s", + "Cannot create \"data\" directory (%s)" : "\"Veri\" klasörü oluşturulamadı (%s)", + "Data directory (%s) is readable by other users" : "Veri klasörü (%s) diğer kullanıcılar tarafından okunabilir", + "Data directory (%s) must be an absolute path" : "Veri klasörü (%s) mutlak bir yol olmalıdır", + "Data directory (%s) is invalid" : "Veri klasörü (%s) geçersiz" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js index 773db4cb65f..f7c30fc3fe1 100644 --- a/lib/l10n/zh_CN.js +++ b/lib/l10n/zh_CN.js @@ -180,7 +180,6 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "无法写入“config”目录", "Cannot write into \"apps\" directory" : "无法写入“apps”目录", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "您可以由 %s 设置 Web 服务器对应用目录 %s 的写权限或在配置文件中禁用应用商店可以修复这个问题.", - "Cannot create \"data\" directory (%s)" : "无法创建“apps”目录 (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "点击 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">设置 Web 服务器对根目录的写入权限</a> 可修复这个问题.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "您可以由 %s 设置 Web 服务器对根目录 %s 的写权限可以修复这个问题.", "Setting locale to %s failed" : "设置语言为 %s 失败", @@ -200,16 +199,17 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "要求 PostgreSQL >= 9", "Please upgrade your database version" : "请升级您的数据库版本", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "请更改权限为 0770 以避免其他用户查看目录.", - "Data directory (%s) is readable by other users" : "数据目录 (%s) 能被其他用户读取", - "Data directory (%s) must be an absolute path" : "数据目录 (%s) 必须为绝对路径", "Check the value of \"datadirectory\" in your configuration" : "请检查配置文件中 \"datadirectory\" 的值", - "Data directory (%s) is invalid" : "数据目录 (%s) 无效", "Please check that the data directory contains a file \".ocdata\" in its root." : "请检查根目录下 data 目录中包含名为 \".ocdata\" 的文件.", "Could not obtain lock type %d on \"%s\"." : "无法在 \"%s\" 上获取锁类型 %d.", "Storage unauthorized. %s" : "存储认证失败. %s", "Storage incomplete configuration. %s" : "存储未完成配置. %s", "Storage connection error. %s" : "存储连接错误. %s", "Storage is temporarily not available" : "存储暂时不可用", - "Storage connection timeout. %s" : "存储连接超时. %s" + "Storage connection timeout. %s" : "存储连接超时. %s", + "Cannot create \"data\" directory (%s)" : "无法创建“apps”目录 (%s)", + "Data directory (%s) is readable by other users" : "数据目录 (%s) 能被其他用户读取", + "Data directory (%s) must be an absolute path" : "数据目录 (%s) 必须为绝对路径", + "Data directory (%s) is invalid" : "数据目录 (%s) 无效" }, "nplurals=1; plural=0;"); diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json index 3759d5afdc9..ae1cb96333e 100644 --- a/lib/l10n/zh_CN.json +++ b/lib/l10n/zh_CN.json @@ -178,7 +178,6 @@ "Cannot write into \"config\" directory" : "无法写入“config”目录", "Cannot write into \"apps\" directory" : "无法写入“apps”目录", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "您可以由 %s 设置 Web 服务器对应用目录 %s 的写权限或在配置文件中禁用应用商店可以修复这个问题.", - "Cannot create \"data\" directory (%s)" : "无法创建“apps”目录 (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "点击 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">设置 Web 服务器对根目录的写入权限</a> 可修复这个问题.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "您可以由 %s 设置 Web 服务器对根目录 %s 的写权限可以修复这个问题.", "Setting locale to %s failed" : "设置语言为 %s 失败", @@ -198,16 +197,17 @@ "PostgreSQL >= 9 required" : "要求 PostgreSQL >= 9", "Please upgrade your database version" : "请升级您的数据库版本", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "请更改权限为 0770 以避免其他用户查看目录.", - "Data directory (%s) is readable by other users" : "数据目录 (%s) 能被其他用户读取", - "Data directory (%s) must be an absolute path" : "数据目录 (%s) 必须为绝对路径", "Check the value of \"datadirectory\" in your configuration" : "请检查配置文件中 \"datadirectory\" 的值", - "Data directory (%s) is invalid" : "数据目录 (%s) 无效", "Please check that the data directory contains a file \".ocdata\" in its root." : "请检查根目录下 data 目录中包含名为 \".ocdata\" 的文件.", "Could not obtain lock type %d on \"%s\"." : "无法在 \"%s\" 上获取锁类型 %d.", "Storage unauthorized. %s" : "存储认证失败. %s", "Storage incomplete configuration. %s" : "存储未完成配置. %s", "Storage connection error. %s" : "存储连接错误. %s", "Storage is temporarily not available" : "存储暂时不可用", - "Storage connection timeout. %s" : "存储连接超时. %s" + "Storage connection timeout. %s" : "存储连接超时. %s", + "Cannot create \"data\" directory (%s)" : "无法创建“apps”目录 (%s)", + "Data directory (%s) is readable by other users" : "数据目录 (%s) 能被其他用户读取", + "Data directory (%s) must be an absolute path" : "数据目录 (%s) 必须为绝对路径", + "Data directory (%s) is invalid" : "数据目录 (%s) 无效" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js index e46b0058762..c65a9ae4fe6 100644 --- a/lib/l10n/zh_TW.js +++ b/lib/l10n/zh_TW.js @@ -171,7 +171,6 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "無法寫入 config 目錄", "Cannot write into \"apps\" directory" : "無法寫入 apps 目錄", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "通常藉由%s開放網頁伺服器對 apps 目錄的權限%s或是在設定檔中關閉 appstore 就可以修正這個問題", - "Cannot create \"data\" directory (%s)" : "無法建立 data 目錄 (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "可試試修改<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">給予網頁伺服器寫入根目錄的權限。", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "通常藉由%s開放網頁伺服器對根目錄的權限%s就可以修正權限問題", "Setting locale to %s failed" : "設定語系為 %s 失敗", @@ -191,15 +190,16 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "需要 PostgreSQL 版本 >= 9", "Please upgrade your database version" : "請升級您的資料庫版本", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "請將該目錄權限設定為 0770 ,以免其他使用者讀取", - "Data directory (%s) is readable by other users" : "資料目錄 (%s) 可以被其他使用者讀取", - "Data directory (%s) must be an absolute path" : "資料夾目錄(%s) 必須式絕對路徑", "Check the value of \"datadirectory\" in your configuration" : "請檢查您的設定檔中 \"datadirectory\" 的值", - "Data directory (%s) is invalid" : "資料目錄 (%s) 無效", "Please check that the data directory contains a file \".ocdata\" in its root." : "請確保資料目錄當中包含一個 .ocdata 的檔案", "Could not obtain lock type %d on \"%s\"." : "無法取得鎖定:類型 %d ,檔案 %s", "Storage unauthorized. %s" : "儲存空間未經授權。%s", "Storage incomplete configuration. %s" : "儲存空間配置尚未完成。%s", "Storage connection error. %s" : "儲存空間連線錯誤。%s", - "Storage connection timeout. %s" : "儲存空間連線逾時。%s" + "Storage connection timeout. %s" : "儲存空間連線逾時。%s", + "Cannot create \"data\" directory (%s)" : "無法建立 data 目錄 (%s)", + "Data directory (%s) is readable by other users" : "資料目錄 (%s) 可以被其他使用者讀取", + "Data directory (%s) must be an absolute path" : "資料夾目錄(%s) 必須式絕對路徑", + "Data directory (%s) is invalid" : "資料目錄 (%s) 無效" }, "nplurals=1; plural=0;"); diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json index cf2551ac39e..f98ee5bbbeb 100644 --- a/lib/l10n/zh_TW.json +++ b/lib/l10n/zh_TW.json @@ -169,7 +169,6 @@ "Cannot write into \"config\" directory" : "無法寫入 config 目錄", "Cannot write into \"apps\" directory" : "無法寫入 apps 目錄", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "通常藉由%s開放網頁伺服器對 apps 目錄的權限%s或是在設定檔中關閉 appstore 就可以修正這個問題", - "Cannot create \"data\" directory (%s)" : "無法建立 data 目錄 (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "可試試修改<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">給予網頁伺服器寫入根目錄的權限。", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "通常藉由%s開放網頁伺服器對根目錄的權限%s就可以修正權限問題", "Setting locale to %s failed" : "設定語系為 %s 失敗", @@ -189,15 +188,16 @@ "PostgreSQL >= 9 required" : "需要 PostgreSQL 版本 >= 9", "Please upgrade your database version" : "請升級您的資料庫版本", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "請將該目錄權限設定為 0770 ,以免其他使用者讀取", - "Data directory (%s) is readable by other users" : "資料目錄 (%s) 可以被其他使用者讀取", - "Data directory (%s) must be an absolute path" : "資料夾目錄(%s) 必須式絕對路徑", "Check the value of \"datadirectory\" in your configuration" : "請檢查您的設定檔中 \"datadirectory\" 的值", - "Data directory (%s) is invalid" : "資料目錄 (%s) 無效", "Please check that the data directory contains a file \".ocdata\" in its root." : "請確保資料目錄當中包含一個 .ocdata 的檔案", "Could not obtain lock type %d on \"%s\"." : "無法取得鎖定:類型 %d ,檔案 %s", "Storage unauthorized. %s" : "儲存空間未經授權。%s", "Storage incomplete configuration. %s" : "儲存空間配置尚未完成。%s", "Storage connection error. %s" : "儲存空間連線錯誤。%s", - "Storage connection timeout. %s" : "儲存空間連線逾時。%s" + "Storage connection timeout. %s" : "儲存空間連線逾時。%s", + "Cannot create \"data\" directory (%s)" : "無法建立 data 目錄 (%s)", + "Data directory (%s) is readable by other users" : "資料目錄 (%s) 可以被其他使用者讀取", + "Data directory (%s) must be an absolute path" : "資料夾目錄(%s) 必須式絕對路徑", + "Data directory (%s) is invalid" : "資料目錄 (%s) 無效" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/lib/private/Comments/Manager.php b/lib/private/Comments/Manager.php index 1467fef727b..695d209b68f 100644 --- a/lib/private/Comments/Manager.php +++ b/lib/private/Comments/Manager.php @@ -21,9 +21,11 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ + namespace OC\Comments; use Doctrine\DBAL\Exception\DriverException; +use Doctrine\DBAL\Platforms\MySqlPlatform; use OCP\Comments\CommentsEvent; use OCP\Comments\IComment; use OCP\Comments\ICommentsEventHandler; @@ -46,7 +48,7 @@ class Manager implements ICommentsManager { /** @var IConfig */ protected $config; - /** @var IComment[] */ + /** @var IComment[] */ protected $commentsCache = []; /** @var \Closure[] */ @@ -104,7 +106,7 @@ class Manager implements ICommentsManager { * @throws \UnexpectedValueException */ protected function prepareCommentForDatabaseWrite(IComment $comment) { - if( !$comment->getActorType() + if (!$comment->getActorType() || !$comment->getActorId() || !$comment->getObjectType() || !$comment->getObjectId() @@ -113,17 +115,17 @@ class Manager implements ICommentsManager { throw new \UnexpectedValueException('Actor, Object and Verb information must be provided for saving'); } - if($comment->getId() === '') { + if ($comment->getId() === '') { $comment->setChildrenCount(0); $comment->setLatestChildDateTime(new \DateTime('0000-00-00 00:00:00', new \DateTimeZone('UTC'))); $comment->setLatestChildDateTime(null); } - if(is_null($comment->getCreationDateTime())) { + if (is_null($comment->getCreationDateTime())) { $comment->setCreationDateTime(new \DateTime()); } - if($comment->getParentId() !== '0') { + if ($comment->getParentId() !== '0') { $comment->setTopmostParentId($this->determineTopmostParentId($comment->getParentId())); } else { $comment->setTopmostParentId('0'); @@ -143,7 +145,7 @@ class Manager implements ICommentsManager { */ protected function determineTopmostParentId($id) { $comment = $this->get($id); - if($comment->getParentId() === '0') { + if ($comment->getParentId() === '0') { return $comment->getId(); } else { return $this->determineTopmostParentId($comment->getId()); @@ -153,16 +155,16 @@ class Manager implements ICommentsManager { /** * updates child information of a comment * - * @param string $id - * @param \DateTime $cDateTime the date time of the most recent child + * @param string $id + * @param \DateTime $cDateTime the date time of the most recent child * @throws NotFoundException */ protected function updateChildrenInformation($id, \DateTime $cDateTime) { $qb = $this->dbConn->getQueryBuilder(); $query = $qb->select($qb->createFunction('COUNT(`id`)')) - ->from('comments') - ->where($qb->expr()->eq('parent_id', $qb->createParameter('id'))) - ->setParameter('id', $id); + ->from('comments') + ->where($qb->expr()->eq('parent_id', $qb->createParameter('id'))) + ->setParameter('id', $id); $resultStatement = $query->execute(); $data = $resultStatement->fetch(\PDO::FETCH_NUM); @@ -185,8 +187,8 @@ class Manager implements ICommentsManager { * @throws \InvalidArgumentException */ protected function checkRoleParameters($role, $type, $id) { - if( - !is_string($type) || empty($type) + if ( + !is_string($type) || empty($type) || !is_string($id) || empty($id) ) { throw new \InvalidArgumentException($role . ' parameters must be string and not empty'); @@ -200,7 +202,7 @@ class Manager implements ICommentsManager { */ protected function cache(IComment $comment) { $id = $comment->getId(); - if(empty($id)) { + if (empty($id)) { return; } $this->commentsCache[strval($id)] = $comment; @@ -228,11 +230,11 @@ class Manager implements ICommentsManager { * @since 9.0.0 */ public function get($id) { - if(intval($id) === 0) { + if (intval($id) === 0) { throw new \InvalidArgumentException('IDs must be translatable to a number in this implementation.'); } - if(isset($this->commentsCache[$id])) { + if (isset($this->commentsCache[$id])) { return $this->commentsCache[$id]; } @@ -245,7 +247,7 @@ class Manager implements ICommentsManager { $data = $resultStatement->fetch(); $resultStatement->closeCursor(); - if(!$data) { + if (!$data) { throw new NotFoundException(); } @@ -290,20 +292,20 @@ class Manager implements ICommentsManager { $qb = $this->dbConn->getQueryBuilder(); $query = $qb->select('*') - ->from('comments') - ->where($qb->expr()->eq('topmost_parent_id', $qb->createParameter('id'))) - ->orderBy('creation_timestamp', 'DESC') - ->setParameter('id', $id); + ->from('comments') + ->where($qb->expr()->eq('topmost_parent_id', $qb->createParameter('id'))) + ->orderBy('creation_timestamp', 'DESC') + ->setParameter('id', $id); - if($limit > 0) { + if ($limit > 0) { $query->setMaxResults($limit); } - if($offset > 0) { + if ($offset > 0) { $query->setFirstResult($offset); } $resultStatement = $query->execute(); - while($data = $resultStatement->fetch()) { + while ($data = $resultStatement->fetch()) { $comment = new Comment($this->normalizeDatabaseData($data)); $this->cache($comment); $tree['replies'][] = [ @@ -332,37 +334,37 @@ class Manager implements ICommentsManager { * @since 9.0.0 */ public function getForObject( - $objectType, - $objectId, - $limit = 0, - $offset = 0, - \DateTime $notOlderThan = null + $objectType, + $objectId, + $limit = 0, + $offset = 0, + \DateTime $notOlderThan = null ) { $comments = []; $qb = $this->dbConn->getQueryBuilder(); $query = $qb->select('*') - ->from('comments') - ->where($qb->expr()->eq('object_type', $qb->createParameter('type'))) - ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id'))) - ->orderBy('creation_timestamp', 'DESC') - ->setParameter('type', $objectType) - ->setParameter('id', $objectId); - - if($limit > 0) { + ->from('comments') + ->where($qb->expr()->eq('object_type', $qb->createParameter('type'))) + ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id'))) + ->orderBy('creation_timestamp', 'DESC') + ->setParameter('type', $objectType) + ->setParameter('id', $objectId); + + if ($limit > 0) { $query->setMaxResults($limit); } - if($offset > 0) { + if ($offset > 0) { $query->setFirstResult($offset); } - if(!is_null($notOlderThan)) { + if (!is_null($notOlderThan)) { $query ->andWhere($qb->expr()->gt('creation_timestamp', $qb->createParameter('notOlderThan'))) ->setParameter('notOlderThan', $notOlderThan, 'datetime'); } $resultStatement = $query->execute(); - while($data = $resultStatement->fetch()) { + while ($data = $resultStatement->fetch()) { $comment = new Comment($this->normalizeDatabaseData($data)); $this->cache($comment); $comments[] = $comment; @@ -383,13 +385,13 @@ class Manager implements ICommentsManager { public function getNumberOfCommentsForObject($objectType, $objectId, \DateTime $notOlderThan = null) { $qb = $this->dbConn->getQueryBuilder(); $query = $qb->select($qb->createFunction('COUNT(`id`)')) - ->from('comments') - ->where($qb->expr()->eq('object_type', $qb->createParameter('type'))) - ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id'))) - ->setParameter('type', $objectType) - ->setParameter('id', $objectId); + ->from('comments') + ->where($qb->expr()->eq('object_type', $qb->createParameter('type'))) + ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id'))) + ->setParameter('type', $objectType) + ->setParameter('id', $objectId); - if(!is_null($notOlderThan)) { + if (!is_null($notOlderThan)) { $query ->andWhere($qb->expr()->gt('creation_timestamp', $qb->createParameter('notOlderThan'))) ->setParameter('notOlderThan', $notOlderThan, 'datetime'); @@ -402,6 +404,40 @@ class Manager implements ICommentsManager { } /** + * Get the number of unread comments for all files in a folder + * + * @param int $folderId + * @param IUser $user + * @return array [$fileId => $unreadCount] + */ + public function getNumberOfUnreadCommentsForFolder($folderId, IUser $user) { + $qb = $this->dbConn->getQueryBuilder(); + $query = $qb->select('fileid', $qb->createFunction( + 'COUNT(' . $qb->getColumnName('c.id') . ')') + )->from('comments', 'c') + ->innerJoin('c', 'filecache', 'f', $qb->expr()->andX( + $qb->expr()->eq('c.object_type', $qb->createNamedParameter('files')), + $qb->expr()->eq('f.fileid', $qb->expr()->castColumn('c.object_id', IQueryBuilder::PARAM_INT)) + )) + ->leftJoin('c', 'comments_read_markers', 'm', $qb->expr()->andX( + $qb->expr()->eq('m.object_type', $qb->createNamedParameter('files')), + $qb->expr()->eq('m.object_id', 'c.object_id'), + $qb->expr()->eq('m.user_id', $qb->createNamedParameter($user->getUID())) + )) + ->andWhere($qb->expr()->eq('f.parent', $qb->createNamedParameter($folderId))) + ->andWhere($qb->expr()->orX( + $qb->expr()->gt('c.creation_timestamp', 'marker_datetime'), + $qb->expr()->isNull('marker_datetime') + )) + ->groupBy('f.fileid'); + + $resultStatement = $query->execute(); + return array_map(function ($count) { + return (int)$count; + }, $resultStatement->fetchAll(\PDO::FETCH_KEY_PAIR)); + } + + /** * creates a new comment and returns it. At this point of time, it is not * saved in the used data storage. Use save() after setting other fields * of the comment (e.g. message or verb). @@ -433,7 +469,7 @@ class Manager implements ICommentsManager { * @since 9.0.0 */ public function delete($id) { - if(!is_string($id)) { + if (!is_string($id)) { throw new \InvalidArgumentException('Parameter must be string'); } @@ -481,16 +517,16 @@ class Manager implements ICommentsManager { * @since 9.0.0 */ public function save(IComment $comment) { - if($this->prepareCommentForDatabaseWrite($comment)->getId() === '') { + if ($this->prepareCommentForDatabaseWrite($comment)->getId() === '') { $result = $this->insert($comment); } else { $result = $this->update($comment); } - if($result && !!$comment->getParentId()) { + if ($result && !!$comment->getParentId()) { $this->updateChildrenInformation( - $comment->getParentId(), - $comment->getCreationDateTime() + $comment->getParentId(), + $comment->getCreationDateTime() ); $this->cache($comment); } @@ -509,17 +545,17 @@ class Manager implements ICommentsManager { $affectedRows = $qb ->insert('comments') ->values([ - 'parent_id' => $qb->createNamedParameter($comment->getParentId()), - 'topmost_parent_id' => $qb->createNamedParameter($comment->getTopmostParentId()), - 'children_count' => $qb->createNamedParameter($comment->getChildrenCount()), - 'actor_type' => $qb->createNamedParameter($comment->getActorType()), - 'actor_id' => $qb->createNamedParameter($comment->getActorId()), - 'message' => $qb->createNamedParameter($comment->getMessage()), - 'verb' => $qb->createNamedParameter($comment->getVerb()), - 'creation_timestamp' => $qb->createNamedParameter($comment->getCreationDateTime(), 'datetime'), - 'latest_child_timestamp' => $qb->createNamedParameter($comment->getLatestChildDateTime(), 'datetime'), - 'object_type' => $qb->createNamedParameter($comment->getObjectType()), - 'object_id' => $qb->createNamedParameter($comment->getObjectId()), + 'parent_id' => $qb->createNamedParameter($comment->getParentId()), + 'topmost_parent_id' => $qb->createNamedParameter($comment->getTopmostParentId()), + 'children_count' => $qb->createNamedParameter($comment->getChildrenCount()), + 'actor_type' => $qb->createNamedParameter($comment->getActorType()), + 'actor_id' => $qb->createNamedParameter($comment->getActorId()), + 'message' => $qb->createNamedParameter($comment->getMessage()), + 'verb' => $qb->createNamedParameter($comment->getVerb()), + 'creation_timestamp' => $qb->createNamedParameter($comment->getCreationDateTime(), 'datetime'), + 'latest_child_timestamp' => $qb->createNamedParameter($comment->getLatestChildDateTime(), 'datetime'), + 'object_type' => $qb->createNamedParameter($comment->getObjectType()), + 'object_id' => $qb->createNamedParameter($comment->getObjectId()), ]) ->execute(); @@ -548,22 +584,22 @@ class Manager implements ICommentsManager { $qb = $this->dbConn->getQueryBuilder(); $affectedRows = $qb ->update('comments') - ->set('parent_id', $qb->createNamedParameter($comment->getParentId())) - ->set('topmost_parent_id', $qb->createNamedParameter($comment->getTopmostParentId())) - ->set('children_count', $qb->createNamedParameter($comment->getChildrenCount())) - ->set('actor_type', $qb->createNamedParameter($comment->getActorType())) - ->set('actor_id', $qb->createNamedParameter($comment->getActorId())) - ->set('message', $qb->createNamedParameter($comment->getMessage())) - ->set('verb', $qb->createNamedParameter($comment->getVerb())) - ->set('creation_timestamp', $qb->createNamedParameter($comment->getCreationDateTime(), 'datetime')) - ->set('latest_child_timestamp', $qb->createNamedParameter($comment->getLatestChildDateTime(), 'datetime')) - ->set('object_type', $qb->createNamedParameter($comment->getObjectType())) - ->set('object_id', $qb->createNamedParameter($comment->getObjectId())) + ->set('parent_id', $qb->createNamedParameter($comment->getParentId())) + ->set('topmost_parent_id', $qb->createNamedParameter($comment->getTopmostParentId())) + ->set('children_count', $qb->createNamedParameter($comment->getChildrenCount())) + ->set('actor_type', $qb->createNamedParameter($comment->getActorType())) + ->set('actor_id', $qb->createNamedParameter($comment->getActorId())) + ->set('message', $qb->createNamedParameter($comment->getMessage())) + ->set('verb', $qb->createNamedParameter($comment->getVerb())) + ->set('creation_timestamp', $qb->createNamedParameter($comment->getCreationDateTime(), 'datetime')) + ->set('latest_child_timestamp', $qb->createNamedParameter($comment->getLatestChildDateTime(), 'datetime')) + ->set('object_type', $qb->createNamedParameter($comment->getObjectType())) + ->set('object_id', $qb->createNamedParameter($comment->getObjectId())) ->where($qb->expr()->eq('id', $qb->createParameter('id'))) ->setParameter('id', $comment->getId()) ->execute(); - if($affectedRows === 0) { + if ($affectedRows === 0) { throw new NotFoundException('Comment to update does ceased to exist'); } @@ -587,8 +623,8 @@ class Manager implements ICommentsManager { $qb = $this->dbConn->getQueryBuilder(); $affectedRows = $qb ->update('comments') - ->set('actor_type', $qb->createNamedParameter(ICommentsManager::DELETED_USER)) - ->set('actor_id', $qb->createNamedParameter(ICommentsManager::DELETED_USER)) + ->set('actor_type', $qb->createNamedParameter(ICommentsManager::DELETED_USER)) + ->set('actor_id', $qb->createNamedParameter(ICommentsManager::DELETED_USER)) ->where($qb->expr()->eq('actor_type', $qb->createParameter('type'))) ->andWhere($qb->expr()->eq('actor_id', $qb->createParameter('id'))) ->setParameter('type', $actorType) @@ -662,19 +698,19 @@ class Manager implements ICommentsManager { $qb = $this->dbConn->getQueryBuilder(); $values = [ - 'user_id' => $qb->createNamedParameter($user->getUID()), + 'user_id' => $qb->createNamedParameter($user->getUID()), 'marker_datetime' => $qb->createNamedParameter($dateTime, 'datetime'), - 'object_type' => $qb->createNamedParameter($objectType), - 'object_id' => $qb->createNamedParameter($objectId), + 'object_type' => $qb->createNamedParameter($objectType), + 'object_id' => $qb->createNamedParameter($objectId), ]; // Strategy: try to update, if this does not return affected rows, do an insert. $affectedRows = $qb ->update('comments_read_markers') - ->set('user_id', $values['user_id']) + ->set('user_id', $values['user_id']) ->set('marker_datetime', $values['marker_datetime']) - ->set('object_type', $values['object_type']) - ->set('object_id', $values['object_id']) + ->set('object_type', $values['object_type']) + ->set('object_id', $values['object_id']) ->where($qb->expr()->eq('user_id', $qb->createParameter('user_id'))) ->andWhere($qb->expr()->eq('object_type', $qb->createParameter('object_type'))) ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('object_id'))) @@ -717,7 +753,7 @@ class Manager implements ICommentsManager { $data = $resultStatement->fetch(); $resultStatement->closeCursor(); - if(!$data || is_null($data['marker_datetime'])) { + if (!$data || is_null($data['marker_datetime'])) { return null; } @@ -774,10 +810,10 @@ class Manager implements ICommentsManager { * \OutOfBoundsException has to thrown. */ public function registerDisplayNameResolver($type, \Closure $closure) { - if(!is_string($type)) { + if (!is_string($type)) { throw new \InvalidArgumentException('String expected.'); } - if(isset($this->displayNameResolvers[$type])) { + if (isset($this->displayNameResolvers[$type])) { throw new \OutOfBoundsException('Displayname resolver for this type already registered'); } $this->displayNameResolvers[$type] = $closure; @@ -797,10 +833,10 @@ class Manager implements ICommentsManager { * provided ID is unknown. It must be ensured that a string is returned. */ public function resolveDisplayName($type, $id) { - if(!is_string($type)) { + if (!is_string($type)) { throw new \InvalidArgumentException('String expected.'); } - if(!isset($this->displayNameResolvers[$type])) { + if (!isset($this->displayNameResolvers[$type])) { throw new \OutOfBoundsException('No Displayname resolver for this type registered'); } return (string)$this->displayNameResolvers[$type]($id); @@ -812,7 +848,7 @@ class Manager implements ICommentsManager { * @return \OCP\Comments\ICommentsEventHandler[] */ private function getEventHandlers() { - if(!empty($this->eventHandlers)) { + if (!empty($this->eventHandlers)) { return $this->eventHandlers; } diff --git a/lib/private/DB/QueryBuilder/QuoteHelper.php b/lib/private/DB/QueryBuilder/QuoteHelper.php index 041718bce5a..705c3a89712 100644 --- a/lib/private/DB/QueryBuilder/QuoteHelper.php +++ b/lib/private/DB/QueryBuilder/QuoteHelper.php @@ -73,7 +73,7 @@ class QuoteHelper { return $string; } - return $alias . '.`' . $columnName . '`'; + return '`' . $alias . '`.`' . $columnName . '`'; } return '`' . $string . '`'; diff --git a/lib/private/Files/Storage/Wrapper/Encryption.php b/lib/private/Files/Storage/Wrapper/Encryption.php index c0ccd22d147..793849914d7 100644 --- a/lib/private/Files/Storage/Wrapper/Encryption.php +++ b/lib/private/Files/Storage/Wrapper/Encryption.php @@ -910,7 +910,8 @@ class Encryption extends Wrapper { */ protected function getHeader($path) { $realFile = $this->util->stripPartialFileExtension($path); - if ($this->storage->file_exists($realFile)) { + $exists = $this->storage->file_exists($realFile); + if ($exists) { $path = $realFile; } @@ -922,8 +923,9 @@ class Encryption extends Wrapper { if (!isset($result[Util::HEADER_ENCRYPTION_MODULE_KEY])) { if (!empty($result)) { $result[Util::HEADER_ENCRYPTION_MODULE_KEY] = 'OC_DEFAULT_MODULE'; - } else { + } else if ($exists) { // if the header was empty we have to check first if it is a encrypted file at all + // We would do query to filecache only if we know that entry in filecache exists $info = $this->getCache()->get($path); if (isset($info['encrypted']) && $info['encrypted'] === true) { $result[Util::HEADER_ENCRYPTION_MODULE_KEY] = 'OC_DEFAULT_MODULE'; diff --git a/lib/private/Mail/EMailTemplate.php b/lib/private/Mail/EMailTemplate.php index 7d3ca51c50e..338f6594f5e 100644 --- a/lib/private/Mail/EMailTemplate.php +++ b/lib/private/Mail/EMailTemplate.php @@ -25,9 +25,10 @@ namespace OC\Mail; -use OCA\Theming\ThemingDefaults; +use OCP\Defaults; use OCP\IL10N; use OCP\IURLGenerator; +use OCP\Mail\IEMailTemplate; /** * Class EMailTemplate @@ -38,7 +39,7 @@ use OCP\IURLGenerator; * @package OC\Mail */ class EMailTemplate implements IEMailTemplate { - /** @var ThemingDefaults */ + /** @var Defaults */ protected $themingDefaults; /** @var IURLGenerator */ protected $urlGenerator; @@ -264,11 +265,11 @@ EOF; EOF; /** - * @param ThemingDefaults $themingDefaults + * @param Defaults $themingDefaults * @param IURLGenerator $urlGenerator * @param IL10N $l10n */ - public function __construct(ThemingDefaults $themingDefaults, + public function __construct(Defaults $themingDefaults, IURLGenerator $urlGenerator, IL10N $l10n) { $this->themingDefaults = $themingDefaults; @@ -286,7 +287,7 @@ EOF; } $this->headerAdded = true; - $logoUrl = $this->urlGenerator->getAbsoluteURL($this->themingDefaults->getLogo()) . '?v='. $this->themingDefaults->getCacheBusterCounter(); + $logoUrl = $this->urlGenerator->getAbsoluteURL($this->themingDefaults->getLogo()); $this->htmlBody .= vsprintf($this->header, [$this->themingDefaults->getColorPrimary(), $logoUrl]); } @@ -294,25 +295,33 @@ EOF; * Adds a heading to the email * * @param string $title + * @param string $plainTitle Title that is used in the plain text email - if empty the $title is used */ - public function addHeading($title) { + public function addHeading($title, $plainTitle = '') { if ($this->footerAdded) { return; } + if ($plainTitle === '') { + $plainTitle = $title; + } $this->htmlBody .= vsprintf($this->heading, [$title]); - $this->plainBody .= $title . PHP_EOL . PHP_EOL; + $this->plainBody .= $plainTitle . PHP_EOL . PHP_EOL; } /** * Adds a paragraph to the body of the email * * @param string $text + * @param string $plainText Text that is used in the plain text email - if empty the $text is used */ - public function addBodyText($text) { + public function addBodyText($text, $plainText = '') { if ($this->footerAdded) { return; } + if ($plainText === '') { + $plainText = $text; + } if (!$this->bodyOpened) { $this->htmlBody .= $this->bodyBegin; @@ -320,7 +329,7 @@ EOF; } $this->htmlBody .= vsprintf($this->bodyText, [$text]); - $this->plainBody .= $text . PHP_EOL . PHP_EOL; + $this->plainBody .= $plainText . PHP_EOL . PHP_EOL; } /** @@ -330,11 +339,20 @@ EOF; * @param string $urlLeft URL of left button * @param string $textRight Text of right button * @param string $urlRight URL of right button + * @param string $plainTextLeft Text of left button that is used in the plain text version - if unset the $textLeft is used + * @param string $plainTextRight Text of right button that is used in the plain text version - if unset the $textRight is used */ - public function addBodyButtonGroup($textLeft, $urlLeft, $textRight, $urlRight) { + public function addBodyButtonGroup($textLeft, $urlLeft, $textRight, $urlRight, $plainTextLeft = '', $plainTextRight = '') { if ($this->footerAdded) { return; } + if ($plainTextLeft === '') { + $plainTextLeft = $textLeft; + } + + if ($plainTextRight === '') { + $plainTextRight = $textRight; + } if (!$this->bodyOpened) { $this->htmlBody .= $this->bodyBegin; @@ -343,8 +361,8 @@ EOF; $color = $this->themingDefaults->getColorPrimary(); $this->htmlBody .= vsprintf($this->buttonGroup, [$color, $color, $urlLeft, $color, $textLeft, $urlRight, $textRight]); - $this->plainBody .= $textLeft . ': ' . $urlLeft . PHP_EOL; - $this->plainBody .= $textRight . ': ' . $urlRight . PHP_EOL . PHP_EOL; + $this->plainBody .= $plainTextLeft . ': ' . $urlLeft . PHP_EOL; + $this->plainBody .= $plainTextRight . ': ' . $urlRight . PHP_EOL . PHP_EOL; } diff --git a/lib/private/Mail/Mailer.php b/lib/private/Mail/Mailer.php index e704e8e3490..852806b2e43 100644 --- a/lib/private/Mail/Mailer.php +++ b/lib/private/Mail/Mailer.php @@ -22,7 +22,10 @@ namespace OC\Mail; +use OCP\Defaults; use OCP\IConfig; +use OCP\IL10N; +use OCP\IURLGenerator; use OCP\Mail\IMailer; use OCP\ILogger; @@ -51,20 +54,30 @@ class Mailer implements IMailer { private $config; /** @var ILogger */ private $logger; - /** @var \OC_Defaults */ + /** @var Defaults */ private $defaults; + /** @var IURLGenerator */ + private $urlGenerator; + /** @var IL10N */ + private $l10n; /** * @param IConfig $config * @param ILogger $logger - * @param \OC_Defaults $defaults + * @param Defaults $defaults + * @param IURLGenerator $urlGenerator + * @param IL10N $l10n */ - function __construct(IConfig $config, + public function __construct(IConfig $config, ILogger $logger, - \OC_Defaults $defaults) { + Defaults $defaults, + IURLGenerator $urlGenerator, + IL10N $l10n) { $this->config = $config; $this->logger = $logger; $this->defaults = $defaults; + $this->urlGenerator = $urlGenerator; + $this->l10n = $l10n; } /** @@ -76,6 +89,14 @@ class Mailer implements IMailer { return new Message(new \Swift_Message()); } + public function createEMailTemplate() { + return new EMailTemplate( + $this->defaults, + $this->urlGenerator, + $this->l10n + ); + } + /** * Send the specified message. Also sets the from address to the value defined in config.php * if no-one has been passed. diff --git a/lib/private/OCS/DiscoveryService.php b/lib/private/OCS/DiscoveryService.php new file mode 100644 index 00000000000..5534fb24ef5 --- /dev/null +++ b/lib/private/OCS/DiscoveryService.php @@ -0,0 +1,125 @@ +<?php +/** + * @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org> + * + * @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 OC\OCS; + +use OCP\AppFramework\Http; +use OCP\Http\Client\IClient; +use OCP\Http\Client\IClientService; +use OCP\ICache; +use OCP\ICacheFactory; +use OCP\OCS\IDiscoveryService; + +class DiscoveryService implements IDiscoveryService { + + /** @var ICache */ + private $cache; + + /** @var IClient */ + private $client; + + /** + * @param ICacheFactory $cacheFactory + * @param IClientService $clientService + */ + public function __construct(ICacheFactory $cacheFactory, + IClientService $clientService + ) { + $this->cache = $cacheFactory->create('ocs-discovery'); + $this->client = $clientService->newClient(); + } + + + /** + * Discover OCS end-points + * + * If no valid discovery data is found the defaults are returned + * + * @param string $remote + * @param string $service the service you want to discover + * @return array + */ + public function discover($remote, $service) { + // Check the cache first + $cacheData = $this->cache->get($remote . '#' . $service); + if($cacheData) { + return json_decode($cacheData, true); + } + + $discoveredServices = []; + + // query the remote server for available services + try { + $response = $this->client->get($remote . '/ocs-provider/', [ + 'timeout' => 10, + 'connect_timeout' => 10, + ]); + if($response->getStatusCode() === Http::STATUS_OK) { + $decodedServices = json_decode($response->getBody(), true); + $discoveredServices = $this->getEndpoints($decodedServices, $service); + } + } catch (\Exception $e) { + // if we couldn't discover the service or any end-points we return a empty array + return []; + } + + // Write into cache + $this->cache->set($remote . '#' . $service, json_encode($discoveredServices)); + return $discoveredServices; + } + + /** + * get requested end-points from the requested service + * + * @param $decodedServices + * @param $service + * @return array + */ + protected function getEndpoints($decodedServices, $service) { + + $discoveredServices = []; + + if(is_array($decodedServices) && + isset($decodedServices['services'][$service]['endpoints']) + ) { + foreach ($decodedServices['services'][$service]['endpoints'] as $endpoint => $url) { + if($this->isSafeUrl($url)) { + $discoveredServices[$endpoint] = $url; + } + } + } + + return $discoveredServices; + } + + /** + * Returns whether the specified URL includes only safe characters, if not + * returns false + * + * @param string $url + * @return bool + */ + protected function isSafeUrl($url) { + return (bool)preg_match('/^[\/\.\-A-Za-z0-9]+$/', $url); + } + +} diff --git a/lib/private/Repair/CleanTags.php b/lib/private/Repair/CleanTags.php index 8b62395a501..9b44fb1e671 100644 --- a/lib/private/Repair/CleanTags.php +++ b/lib/private/Repair/CleanTags.php @@ -173,7 +173,7 @@ class CleanTags implements IRepairStep { $qb->select('d.' . $deleteId) ->from($deleteTable, 'd') - ->leftJoin('d', $sourceTable, 's', $qb->expr()->eq('d.' . $deleteId, ' s.' . $sourceId)) + ->leftJoin('d', $sourceTable, 's', $qb->expr()->eq('d.' . $deleteId, 's.' . $sourceId)) ->where( $qb->expr()->eq('d.type', $qb->expr()->literal('files')) ) diff --git a/lib/private/Server.php b/lib/private/Server.php index 0d05bfe0dc8..00698a04f89 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -77,6 +77,7 @@ use OC\Mail\Mailer; use OC\Memcache\ArrayCache; use OC\Memcache\Factory; use OC\Notification\Manager; +use OC\OCS\DiscoveryService; use OC\Repair\NC11\CleanPreviewsBackgroundJob; use OC\RichObjectStrings\Validator; use OC\Security\Bruteforce\Throttler; @@ -95,6 +96,7 @@ use OC\Session\CryptoWrapper; use OC\Tagging\TagMapper; use OCA\Theming\ThemingDefaults; use OCP\App\IAppManager; +use OCP\Defaults; use OCP\Federation\ICloudIdManager; use OCP\Authentication\LoginCredentials\IStore; use OCP\ICacheFactory; @@ -726,7 +728,9 @@ class Server extends ServerContainer implements IServerContainer { return new Mailer( $c->getConfig(), $c->getLogger(), - $c->getThemingDefaults() + $c->query(Defaults::class), + $c->getURLGenerator(), + $c->getL10N('lib') ); }); $this->registerAlias('Mailer', \OCP\Mail\IMailer::class); @@ -935,6 +939,10 @@ class Server extends ServerContainer implements IServerContainer { }); }); + $this->registerService(\OCP\OCS\IDiscoveryService::class, function (Server $c) { + return new DiscoveryService($c->getMemCacheFactory(), $c->getHTTPClientService()); + }); + $this->registerService(ICloudIdManager::class, function (Server $c) { return new CloudIdManager(); }); @@ -955,6 +963,13 @@ class Server extends ServerContainer implements IServerContainer { $this->registerAlias(\OCP\AppFramework\Utility\ITimeFactory::class, \OC\AppFramework\Utility\TimeFactory::class); $this->registerAlias('TimeFactory', \OCP\AppFramework\Utility\ITimeFactory::class); + $this->registerService(Defaults::class, function (Server $c) { + return new Defaults( + $c->getThemingDefaults() + ); + }); + $this->registerAlias('Defaults', \OCP\Defaults::class); + $this->registerService(\OCP\ISession::class, function(SimpleContainer $c) { return $c->query(\OCP\IUserSession::class)->getSession(); }); diff --git a/lib/private/Setup.php b/lib/private/Setup.php index 7a2957b5fb3..e2806efad48 100644 --- a/lib/private/Setup.php +++ b/lib/private/Setup.php @@ -41,7 +41,7 @@ namespace OC; use bantu\IniGetWrapper\IniGetWrapper; use Exception; -use OCP\IConfig; +use OCP\Defaults; use OCP\IL10N; use OCP\ILogger; use OCP\Security\ISecureRandom; @@ -53,7 +53,7 @@ class Setup { protected $iniWrapper; /** @var IL10N */ protected $l10n; - /** @var \OC_Defaults */ + /** @var Defaults */ protected $defaults; /** @var ILogger */ protected $logger; @@ -63,12 +63,14 @@ class Setup { /** * @param SystemConfig $config * @param IniGetWrapper $iniWrapper - * @param \OC_Defaults $defaults + * @param Defaults $defaults + * @param ILogger $logger + * @param ISecureRandom $random */ function __construct(SystemConfig $config, IniGetWrapper $iniWrapper, IL10N $l10n, - \OC_Defaults $defaults, + Defaults $defaults, ILogger $logger, ISecureRandom $random ) { @@ -422,7 +424,7 @@ class Setup { } $setupHelper = new \OC\Setup($config, \OC::$server->getIniWrapper(), - \OC::$server->getL10N('lib'), \OC::$server->getThemingDefaults(), \OC::$server->getLogger(), + \OC::$server->getL10N('lib'), \OC::$server->query(Defaults::class), \OC::$server->getLogger(), \OC::$server->getSecureRandom()); $htaccessContent = file_get_contents($setupHelper->pathToHtaccess()); diff --git a/lib/private/Share/MailNotifications.php b/lib/private/Share/MailNotifications.php index 1bbd365699c..e10389e77b9 100644 --- a/lib/private/Share/MailNotifications.php +++ b/lib/private/Share/MailNotifications.php @@ -30,7 +30,6 @@ namespace OC\Share; -use DateTime; use OCP\IL10N; use OCP\IURLGenerator; use OCP\IUser; @@ -87,72 +86,4 @@ class MailNotifications { $this->replyTo = $this->user->getEMailAddress(); $this->senderDisplayName = $this->user->getDisplayName(); } - - /** - * inform recipient about public link share - * - * @param string $recipient recipient email address - * @param string $filename the shared file - * @param string $link the public link - * @param int $expiration expiration date (timestamp) - * @return string[] $result of failed recipients - */ - public function sendLinkShareMail($recipient, $filename, $link, $expiration) { - $subject = (string)$this->l->t('%s shared »%s« with you', [$this->senderDisplayName, $filename]); - list($htmlBody, $textBody) = $this->createMailBody($filename, $link, $expiration); - - $recipient = str_replace([', ', '; ', ',', ';', ' '], ',', $recipient); - $recipients = explode(',', $recipient); - try { - $message = $this->mailer->createMessage(); - $message->setSubject($subject); - $message->setTo($recipients); - $message->setHtmlBody($htmlBody); - $message->setPlainBody($textBody); - $message->setFrom([ - Util::getDefaultEmailAddress('sharing-noreply') => - (string)$this->l->t('%s via %s', [ - $this->senderDisplayName, - $this->defaults->getName() - ]), - ]); - if(!is_null($this->replyTo)) { - $message->setReplyTo([$this->replyTo]); - } - - return $this->mailer->send($message); - } catch (\Exception $e) { - $this->logger->error("Can't send mail with public link to $recipient: ".$e->getMessage(), ['app' => 'sharing']); - return [$recipient]; - } - } - - /** - * create mail body for plain text and html mail - * - * @param string $filename the shared file - * @param string $link link to the shared file - * @param int $expiration expiration date (timestamp) - * @param string $prefix prefix of mail template files - * @return array an array of the html mail body and the plain text mail body - */ - private function createMailBody($filename, $link, $expiration, $prefix = '') { - $formattedDate = $expiration ? $this->l->l('date', $expiration) : null; - - $html = new \OC_Template('core', $prefix . 'mail', ''); - $html->assign ('link', $link); - $html->assign ('user_displayname', $this->senderDisplayName); - $html->assign ('filename', $filename); - $html->assign('expiration', $formattedDate); - $htmlMail = $html->fetchPage(); - - $plainText = new \OC_Template('core', $prefix . 'altmail', ''); - $plainText->assign ('link', $link); - $plainText->assign ('user_displayname', $this->senderDisplayName); - $plainText->assign ('filename', $filename); - $plainText->assign('expiration', $formattedDate); - $plainTextMail = $plainText->fetchPage(); - - return [$htmlMail, $plainTextMail]; - } } diff --git a/lib/private/Share/Share.php b/lib/private/Share/Share.php index 924e2f68396..b3e4cb2d4aa 100644 --- a/lib/private/Share/Share.php +++ b/lib/private/Share/Share.php @@ -2742,12 +2742,10 @@ class Share extends Constants { 'result' => '', ]; $try = 0; - $discoveryManager = new DiscoveryManager( - \OC::$server->getMemCacheFactory(), - \OC::$server->getHTTPClientService() - ); + $discoveryService = \OC::$server->query(\OCP\OCS\IDiscoveryService::class); while ($result['success'] === false && $try < 2) { - $endpoint = $discoveryManager->getShareEndpoint($protocol . $remoteDomain); + $federationEndpoints = $discoveryService->discover($protocol . $remoteDomain, 'FEDERATED_SHARING'); + $endpoint = isset($federationEndpoints['share']) ? $federationEndpoints['share'] : '/ocs/v2.php/cloud/shares'; $result = \OC::$server->getHTTPHelper()->post($protocol . $remoteDomain . $endpoint . $urlSuffix . '?format=' . self::RESPONSE_FORMAT, $fields); $try++; $protocol = 'http://'; diff --git a/lib/private/Share20/DefaultShareProvider.php b/lib/private/Share20/DefaultShareProvider.php index bf8bcc9c6d9..feae147066d 100644 --- a/lib/private/Share20/DefaultShareProvider.php +++ b/lib/private/Share20/DefaultShareProvider.php @@ -493,7 +493,7 @@ class DefaultShareProvider implements IShareProvider { ); } - $qb->innerJoin('s', 'filecache' ,'f', 's.file_source = f.fileid'); + $qb->innerJoin('s', 'filecache' ,'f', $qb->expr()->eq('s.file_source', 'f.fileid')); $qb->andWhere($qb->expr()->eq('f.parent', $qb->createNamedParameter($node->getId()))); $qb->orderBy('id'); diff --git a/lib/private/Share20/ProviderFactory.php b/lib/private/Share20/ProviderFactory.php index b411f42b262..ba6699ae7ad 100644 --- a/lib/private/Share20/ProviderFactory.php +++ b/lib/private/Share20/ProviderFactory.php @@ -104,14 +104,10 @@ class ProviderFactory implements IProviderFactory { $l, $this->serverContainer->getCloudIdManager() ); - $discoveryManager = new DiscoveryManager( - $this->serverContainer->getMemCacheFactory(), - $this->serverContainer->getHTTPClientService() - ); $notifications = new Notifications( $addressHandler, $this->serverContainer->getHTTPClientService(), - $discoveryManager, + $this->serverContainer->query(\OCP\OCS\IDiscoveryService::class), $this->serverContainer->getJobList() ); $tokenHandler = new TokenHandler( diff --git a/lib/private/Template/Base.php b/lib/private/Template/Base.php index 6af679f0a66..18cf6324089 100644 --- a/lib/private/Template/Base.php +++ b/lib/private/Template/Base.php @@ -28,6 +28,8 @@ namespace OC\Template; +use OCP\Defaults; + class Base { private $template; // The template private $vars; // Vars @@ -35,14 +37,14 @@ class Base { /** @var \OCP\IL10N */ private $l10n; - /** @var \OC_Defaults */ + /** @var Defaults */ private $theme; /** * @param string $template * @param string $requestToken * @param \OCP\IL10N $l10n - * @param \OC_Defaults $theme + * @param Defaults $theme */ public function __construct($template, $requestToken, $l10n, $theme ) { $this->vars = array(); diff --git a/lib/private/Template/JSConfigHelper.php b/lib/private/Template/JSConfigHelper.php index 4fc21680211..9a11e84f8d9 100644 --- a/lib/private/Template/JSConfigHelper.php +++ b/lib/private/Template/JSConfigHelper.php @@ -24,6 +24,7 @@ namespace OC\Template; use bantu\IniGetWrapper\IniGetWrapper; use OCP\App\IAppManager; +use OCP\Defaults; use OCP\IConfig; use OCP\IGroupManager; use OCP\IL10N; @@ -36,7 +37,7 @@ class JSConfigHelper { /** @var IL10N */ private $l; - /** @var \OC_Defaults */ + /** @var Defaults */ private $defaults; /** @var IAppManager */ @@ -62,7 +63,7 @@ class JSConfigHelper { /** * @param IL10N $l - * @param \OC_Defaults $defaults + * @param Defaults $defaults * @param IAppManager $appManager * @param ISession $session * @param IUser|null $currentUser @@ -72,7 +73,7 @@ class JSConfigHelper { * @param IURLGenerator $urlGenerator */ public function __construct(IL10N $l, - \OC_Defaults $defaults, + Defaults $defaults, IAppManager $appManager, ISession $session, $currentUser, diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php index 6dc925f8f8c..7a5984a4924 100644 --- a/lib/private/TemplateLayout.php +++ b/lib/private/TemplateLayout.php @@ -38,6 +38,7 @@ namespace OC; use OC\Template\JSCombiner; use OC\Template\JSConfigHelper; use OC\Template\SCSSCacher; +use OCP\Defaults; class TemplateLayout extends \OC_Template { @@ -135,7 +136,7 @@ class TemplateLayout extends \OC_Template { if (\OC::$server->getContentSecurityPolicyNonceManager()->browserSupportsCspV3()) { $jsConfigHelper = new JSConfigHelper( \OC::$server->getL10N('core'), - \OC::$server->getThemingDefaults(), + \OC::$server->query(Defaults::class), \OC::$server->getAppManager(), \OC::$server->getSession(), \OC::$server->getUserSession()->getUser(), diff --git a/lib/private/legacy/defaults.php b/lib/private/legacy/defaults.php index 9fd9b621a14..10dd935d26b 100644 --- a/lib/private/legacy/defaults.php +++ b/lib/private/legacy/defaults.php @@ -47,6 +47,8 @@ class OC_Defaults { private $defaultSlogan; private $defaultLogoClaim; private $defaultColorPrimary; + private $defaultLogoUrl; + private $defaultCacheBuster; function __construct() { $this->l = \OC::$server->getL10N('lib'); @@ -64,6 +66,8 @@ class OC_Defaults { $this->defaultSlogan = $this->l->t('a safe home for all your data'); $this->defaultLogoClaim = ''; $this->defaultColorPrimary = '#0082c9'; + $this->defaultLogoUrl = \OC::$server->getURLGenerator()->imagePath('core','logo.svg'); + $this->defaultLogoUrl .= '?v=' . hash('sha1', implode('.', \OCP\Util::getVersion())); $themePath = OC::$SERVERROOT . '/themes/' . OC_Util::getTheme() . '/defaults.php'; if (file_exists($themePath)) { @@ -263,6 +267,7 @@ class OC_Defaults { /** * @param string $key + * @return string URL to doc with key */ public function buildDocLinkToKey($key) { if ($this->themeExist('buildDocLinkToKey')) { @@ -289,4 +294,17 @@ class OC_Defaults { public function shouldReplaceIcons() { return false; } + + /** + * Themed logo url + * + * @return string + */ + public function getLogo() { + if ($this->themeExist('getLogo')) { + return $this->theme->getLogo(); + } + + return $this->defaultLogoUrl; + } } diff --git a/lib/private/legacy/response.php b/lib/private/legacy/response.php index 115eb5baa68..fa73f3d6d0d 100644 --- a/lib/private/legacy/response.php +++ b/lib/private/legacy/response.php @@ -257,7 +257,7 @@ class OC_Response { . 'object-src \'none\'; ' . 'base-uri \'self\'; '; header('Content-Security-Policy:' . $policy); - header('X-Frame-Options: Sameorigin'); // Disallow iFraming from other domains + header('X-Frame-Options: SAMEORIGIN'); // Disallow iFraming from other domains // Send fallback headers for installations that don't have the possibility to send // custom headers on the webserver side diff --git a/lib/private/legacy/template.php b/lib/private/legacy/template.php index 969f5174278..19b5e418110 100644 --- a/lib/private/legacy/template.php +++ b/lib/private/legacy/template.php @@ -79,7 +79,8 @@ class OC_Template extends \OC\Template\Base { $parts = explode('/', $app); // fix translation when app is something like core/lostpassword $l10n = \OC::$server->getL10N($parts[0]); - $themeDefaults = \OC::$server->getThemingDefaults(); + /** @var \OCP\Defaults $themeDefaults */ + $themeDefaults = \OC::$server->query(\OCP\Defaults::class); list($path, $template) = $this->findTemplate($theme, $app, $name); diff --git a/lib/private/legacy/util.php b/lib/private/legacy/util.php index 0fdd6714b1e..5e01b6e2b87 100644 --- a/lib/private/legacy/util.php +++ b/lib/private/legacy/util.php @@ -651,7 +651,7 @@ class OC_Util { $webServerRestart = false; $setup = new \OC\Setup($config, \OC::$server->getIniWrapper(), \OC::$server->getL10N('lib'), - \OC::$server->getThemingDefaults(), \OC::$server->getLogger(), \OC::$server->getSecureRandom()); + \OC::$server->query(\OCP\Defaults::class), \OC::$server->getLogger(), \OC::$server->getSecureRandom()); $urlGenerator = \OC::$server->getURLGenerator(); diff --git a/lib/public/Comments/ICommentsManager.php b/lib/public/Comments/ICommentsManager.php index b43d5e8800b..f088ad9f70d 100644 --- a/lib/public/Comments/ICommentsManager.php +++ b/lib/public/Comments/ICommentsManager.php @@ -23,6 +23,8 @@ */ namespace OCP\Comments; +use OCP\IUser; + /** * Interface ICommentsManager * @@ -126,6 +128,16 @@ interface ICommentsManager { public function getNumberOfCommentsForObject($objectType, $objectId, \DateTime $notOlderThan = null); /** + * Get the number of unread comments for all files in a folder + * + * @param int $folderId + * @param IUser $user + * @return array [$fileId => $unreadCount] + * @since 12.0.0 + */ + public function getNumberOfUnreadCommentsForFolder($folderId, IUser $user); + + /** * creates a new comment and returns it. At this point of time, it is not * saved in the used data storage. Use save() after setting other fields * of the comment (e.g. message or verb). diff --git a/lib/public/Defaults.php b/lib/public/Defaults.php index ae873831b8b..591da18c7ee 100644 --- a/lib/public/Defaults.php +++ b/lib/public/Defaults.php @@ -42,7 +42,6 @@ class Defaults { /** * \OC_Defaults instance to retrieve the defaults - * @return string * @since 6.0.0 */ private $defaults; @@ -52,8 +51,11 @@ class Defaults { * actual defaults * @since 6.0.0 */ - function __construct() { - $this->defaults = \OC::$server->getThemingDefaults(); + function __construct(\OC_Defaults $defaults = null) { + if ($defaults === null) { + $defaults = \OC::$server->getThemingDefaults(); + } + $this->defaults = $defaults; } /** @@ -172,4 +174,41 @@ class Defaults { public function getiTunesAppId() { return $this->defaults->getiTunesAppId(); } + + /** + * Themed logo url + * + * @return string + * @since 12.0.0 + */ + public function getLogo() { + return $this->defaults->getLogo(); + } + + /** + * Returns primary color + * @return string + * @since 12.0.0 + */ + public function getColorPrimary() { + return $this->defaults->getColorPrimary(); + } + + /** + * @param string $key + * @return string URL to doc with key + * @since 12.0.0 + */ + public function buildDocLinkToKey($key) { + return $this->defaults->buildDocLinkToKey($key); + } + + /** + * Returns the title + * @return string title + * @since 12.0.0 + */ + public function getTitle() { + return $this->defaults->getTitle(); + } } diff --git a/lib/private/Mail/IEMailTemplate.php b/lib/public/Mail/IEMailTemplate.php index 0d660a35516..a1922e86151 100644 --- a/lib/private/Mail/IEMailTemplate.php +++ b/lib/public/Mail/IEMailTemplate.php @@ -21,7 +21,7 @@ * */ -namespace OC\Mail; +namespace OCP\Mail; /** * Interface IEMailTemplate @@ -32,7 +32,7 @@ namespace OC\Mail; * * <?php * - * $emailTemplate = new EMailTemplate($this->defaults); + * $emailTemplate = new EMailTemplate($this->defaults, $this->urlGenerator, $this->l10n); * * $emailTemplate->addHeader(); * $emailTemplate->addHeading('Welcome aboard'); @@ -47,19 +47,14 @@ namespace OC\Mail; * * $htmlContent = $emailTemplate->renderHTML(); * $plainContent = $emailTemplate->renderText(); + * + * @since 12.0.0 */ interface IEMailTemplate { /** - * @param \OCA\Theming\ThemingDefaults $themingDefaults - * @param \OCP\IURLGenerator $urlGenerator - * @param \OCP\IL10N $l10n - */ - public function __construct(\OCA\Theming\ThemingDefaults $themingDefaults, - \OCP\IURLGenerator $urlGenerator, - \OCP\IL10N $l10n); - - /** * Adds a header to the email + * + * @since 12.0.0 */ public function addHeader(); @@ -67,15 +62,21 @@ interface IEMailTemplate { * Adds a heading to the email * * @param string $title + * @param string $plainTitle Title that is used in the plain text email - if empty the $title is used + * + * @since 12.0.0 */ - public function addHeading($title); + public function addHeading($title, $plainTitle = ''); /** * Adds a paragraph to the body of the email * * @param string $text + * @param string $plainText Text that is used in the plain text email - if empty the $text is used + * + * @since 12.0.0 */ - public function addBodyText($text); + public function addBodyText($text, $plainText = ''); /** * Adds a button group of two buttons to the body of the email @@ -84,13 +85,19 @@ interface IEMailTemplate { * @param string $urlLeft URL of left button * @param string $textRight Text of right button * @param string $urlRight URL of right button + * @param string $plainTextLeft Text of left button that is used in the plain text version - if empty the $textLeft is used + * @param string $plainTextRight Text of right button that is used in the plain text version - if empty the $textRight is used + * + * @since 12.0.0 */ - public function addBodyButtonGroup($textLeft, $urlLeft, $textRight, $urlRight); + public function addBodyButtonGroup($textLeft, $urlLeft, $textRight, $urlRight, $plainTextLeft = '', $plainTextRight = ''); /** * Adds a logo and a text to the footer. <br> in the text will be replaced by new lines in the plain text email * * @param string $text + * + * @since 12.0.0 */ public function addFooter($text = ''); @@ -98,6 +105,8 @@ interface IEMailTemplate { * Returns the rendered HTML email as string * * @return string + * + * @since 12.0.0 */ public function renderHTML(); @@ -105,6 +114,8 @@ interface IEMailTemplate { * Returns the rendered plain text email as string * * @return string + * + * @since 12.0.0 */ public function renderText(); } diff --git a/lib/public/Mail/IMailer.php b/lib/public/Mail/IMailer.php index 9ecebd2ee40..af16a8a239a 100644 --- a/lib/public/Mail/IMailer.php +++ b/lib/public/Mail/IMailer.php @@ -55,6 +55,14 @@ interface IMailer { public function createMessage(); /** + * Creates a new email template object + * + * @return IEMailTemplate + * @since 12.0.0 + */ + public function createEMailTemplate(); + + /** * Send the specified message. Also sets the from address to the value defined in config.php * if no-one has been passed. * diff --git a/lib/public/OCS/IDiscoveryService.php b/lib/public/OCS/IDiscoveryService.php new file mode 100644 index 00000000000..eee5bf97f93 --- /dev/null +++ b/lib/public/OCS/IDiscoveryService.php @@ -0,0 +1,48 @@ +<?php +/** + * @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org> + * + * @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 OCP\OCS; + +/** + * Interface IDiscoveryService + * + * Allows you to discover OCS end-points on a remote server + * + * @package OCP\OCS + * @since 12.0.0 + */ +interface IDiscoveryService { + + /** + * Discover OCS end-points + * + * If no valid discovery data is found the defaults are returned + * + * @since 12.0.0 + * + * @param string $remote + * @param string $service the service you want to discover + * @return array + */ + public function discover($remote, $service); + +} diff --git a/settings/Application.php b/settings/Application.php index bf149def94d..8ec8d5eb8a5 100644 --- a/settings/Application.php +++ b/settings/Application.php @@ -35,11 +35,10 @@ use OC\App\AppStore\Fetcher\CategoryFetcher; use OC\AppFramework\Utility\TimeFactory; use OC\Authentication\Token\IProvider; use OC\Server; -use OC\ServerContainer; use OC\Settings\Mailer\NewUserMailHelper; use OC\Settings\Middleware\SubadminMiddleware; -use OCA\Theming\ThemingDefaults; use OCP\AppFramework\App; +use OCP\Defaults; use OCP\IContainer; use OCP\Settings\IManager; use OCP\Util; @@ -94,9 +93,11 @@ class Application extends App { $container->registerService(NewUserMailHelper::class, function (IContainer $c) { /** @var Server $server */ $server = $c->query('ServerContainer'); + /** @var Defaults $defaults */ + $defaults = $server->query(Defaults::class); return new NewUserMailHelper( - $server->getThemingDefaults(), + $defaults, $server->getURLGenerator(), $server->getL10N('settings'), $server->getMailer(), diff --git a/settings/Mailer/NewUserMailHelper.php b/settings/Mailer/NewUserMailHelper.php index 15b912f803a..75ec62e5ad5 100644 --- a/settings/Mailer/NewUserMailHelper.php +++ b/settings/Mailer/NewUserMailHelper.php @@ -22,9 +22,9 @@ namespace OC\Settings\Mailer; use OC\Mail\EMailTemplate; -use OC\Mail\IEMailTemplate; -use OCA\Theming\ThemingDefaults; +use OCP\Mail\IEMailTemplate; use OCP\AppFramework\Utility\ITimeFactory; +use OCP\Defaults; use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; @@ -34,7 +34,7 @@ use OCP\Security\ICrypto; use OCP\Security\ISecureRandom; class NewUserMailHelper { - /** @var ThemingDefaults */ + /** @var Defaults */ private $themingDefaults; /** @var IURLGenerator */ private $urlGenerator; @@ -54,7 +54,7 @@ class NewUserMailHelper { private $fromAddress; /** - * @param ThemingDefaults $themingDefaults + * @param Defaults $themingDefaults * @param IURLGenerator $urlGenerator * @param IL10N $l10n * @param IMailer $mailer @@ -64,7 +64,7 @@ class NewUserMailHelper { * @param ICrypto $crypto * @param string $fromAddress */ - public function __construct(ThemingDefaults $themingDefaults, + public function __construct(Defaults $themingDefaults, IURLGenerator $urlGenerator, IL10N $l10n, IMailer $mailer, diff --git a/settings/l10n/el.js b/settings/l10n/el.js index 04c3c6e12b4..2157c645588 100644 --- a/settings/l10n/el.js +++ b/settings/l10n/el.js @@ -34,6 +34,8 @@ OC.L10N.register( "Invalid user" : "Μη έγκυρος χρήστης", "Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας", "Email saved" : "Το email αποθηκεύτηκε ", + "Set your password" : "Καθορισμός συνθηματικού", + "Install Client" : "Εγκατάσταση πελάτη", "Your %s account was created" : "Ο λογαριασμός %s δημιουργήθηκε", "Password confirmation is required" : "Απαιτείται επιβεβαίωση συνθηματικού", "Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.", @@ -270,8 +272,10 @@ OC.L10N.register( "Like our facebook page!" : "Ακολουθήστε μας στην σελίδα μας στο facebook!", "Subscribe to our twitter channel!" : "Εγγραφείτε στο κανάλι μας στο twitter!", "Subscribe to our news feed!" : "Εγγραφείτε στην ροή των νέων μας!", + "Settings" : "Ρυθμίσεις", "Show storage location" : "Εμφάνιση τοποθεσίας αποθήκευσης", "Show user backend" : "Εμφάνιση χρήστη συστήματος υποστήριξης", + "Show last login" : "Εμφάνιση τελευταιας σύνδεσης", "Show email address" : "Εμφάνιση διεύθυνσης ηλ. αλληλογραφίας", "Send email to new user" : "Αποστολή μηνύματος στο νέο χρήστη", "E-Mail" : "Ηλεκτρονική αλληλογραφία", diff --git a/settings/l10n/el.json b/settings/l10n/el.json index a06a0014699..1a0c9d71b6d 100644 --- a/settings/l10n/el.json +++ b/settings/l10n/el.json @@ -32,6 +32,8 @@ "Invalid user" : "Μη έγκυρος χρήστης", "Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας", "Email saved" : "Το email αποθηκεύτηκε ", + "Set your password" : "Καθορισμός συνθηματικού", + "Install Client" : "Εγκατάσταση πελάτη", "Your %s account was created" : "Ο λογαριασμός %s δημιουργήθηκε", "Password confirmation is required" : "Απαιτείται επιβεβαίωση συνθηματικού", "Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.", @@ -268,8 +270,10 @@ "Like our facebook page!" : "Ακολουθήστε μας στην σελίδα μας στο facebook!", "Subscribe to our twitter channel!" : "Εγγραφείτε στο κανάλι μας στο twitter!", "Subscribe to our news feed!" : "Εγγραφείτε στην ροή των νέων μας!", + "Settings" : "Ρυθμίσεις", "Show storage location" : "Εμφάνιση τοποθεσίας αποθήκευσης", "Show user backend" : "Εμφάνιση χρήστη συστήματος υποστήριξης", + "Show last login" : "Εμφάνιση τελευταιας σύνδεσης", "Show email address" : "Εμφάνιση διεύθυνσης ηλ. αλληλογραφίας", "Send email to new user" : "Αποστολή μηνύματος στο νέο χρήστη", "E-Mail" : "Ηλεκτρονική αλληλογραφία", diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js index 182256a74a4..c43e3c6db60 100644 --- a/settings/l10n/es_MX.js +++ b/settings/l10n/es_MX.js @@ -39,6 +39,13 @@ OC.L10N.register( "Invalid user" : "Usuario inválido", "Unable to change mail address" : "No fue posible cambiar la dirección de correo", "Email saved" : "Correo electrónico guardado", + "Welcome aboard" : "Bienvenido a bordo", + "Welcome aboard %s" : "Bienvenido a bordo %s", + "You have now an %s account, you can add, protect, and share your data." : "Usted tiene ahora una cuenta %s, puede agregar, proteger y compartir sus datos. ", + "Your username is: %s" : "Su nombre de usuario es: %s", + "Set your password" : "Establezca su contraseña", + "Go to %s" : "Ir a %s", + "Install Client" : "Instalar el cliente", "Your %s account was created" : "Su %s cuenta ha sido creada", "Password confirmation is required" : "Se requiere la confirmación de la contraseña", "Couldn't remove app." : "No fue posible eliminar la aplicación. ", @@ -57,6 +64,7 @@ OC.L10N.register( "The app will be downloaded from the app store" : "La aplicación será descargada de la tienda de aplicaciones <app store>", "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Las aplicaciones oficiales son desarrolladas por y dentro de la comunidad. Ofrecen una funcionalidad centralizada y se encuentran listas para ser usadas en producción. ", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Las aplicaciones aprobadas son desarrolladas por desarrolladores de confianza y han pasado una verificación de seguridad. Se les brinda mantenimiento activamente en un repositorio de código abierto y los mantenedores las consideran estables para un uso casual a normal. ", + "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Esta aplicación no ha sido verificada contra temas de seguridad y es nueva o se sabe que es instable. Instale bajo su propio riesgo. ", "Disabling app …" : "Deshabilitando la aplicación ...", "Error while disabling app" : "Se presentó un error mientras se deshabilitaba la aplicación", "Disable" : "Deshabilitar", diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json index 85ea1fe6eb1..f3de05d014c 100644 --- a/settings/l10n/es_MX.json +++ b/settings/l10n/es_MX.json @@ -37,6 +37,13 @@ "Invalid user" : "Usuario inválido", "Unable to change mail address" : "No fue posible cambiar la dirección de correo", "Email saved" : "Correo electrónico guardado", + "Welcome aboard" : "Bienvenido a bordo", + "Welcome aboard %s" : "Bienvenido a bordo %s", + "You have now an %s account, you can add, protect, and share your data." : "Usted tiene ahora una cuenta %s, puede agregar, proteger y compartir sus datos. ", + "Your username is: %s" : "Su nombre de usuario es: %s", + "Set your password" : "Establezca su contraseña", + "Go to %s" : "Ir a %s", + "Install Client" : "Instalar el cliente", "Your %s account was created" : "Su %s cuenta ha sido creada", "Password confirmation is required" : "Se requiere la confirmación de la contraseña", "Couldn't remove app." : "No fue posible eliminar la aplicación. ", @@ -55,6 +62,7 @@ "The app will be downloaded from the app store" : "La aplicación será descargada de la tienda de aplicaciones <app store>", "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Las aplicaciones oficiales son desarrolladas por y dentro de la comunidad. Ofrecen una funcionalidad centralizada y se encuentran listas para ser usadas en producción. ", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Las aplicaciones aprobadas son desarrolladas por desarrolladores de confianza y han pasado una verificación de seguridad. Se les brinda mantenimiento activamente en un repositorio de código abierto y los mantenedores las consideran estables para un uso casual a normal. ", + "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Esta aplicación no ha sido verificada contra temas de seguridad y es nueva o se sabe que es instable. Instale bajo su propio riesgo. ", "Disabling app …" : "Deshabilitando la aplicación ...", "Error while disabling app" : "Se presentó un error mientras se deshabilitaba la aplicación", "Disable" : "Deshabilitar", diff --git a/settings/l10n/hu.js b/settings/l10n/hu.js index 9c03c40bbf7..14289d1c5e1 100644 --- a/settings/l10n/hu.js +++ b/settings/l10n/hu.js @@ -39,6 +39,13 @@ OC.L10N.register( "Invalid user" : "Érvénytelen felhasználó", "Unable to change mail address" : "Nem lehet megváltoztatni az e-mail címet", "Email saved" : "E-mail elmentve!", + "Welcome aboard" : "Üdv a fedélzeten", + "Welcome aboard %s" : "Üdv a fedélzeten %s", + "You have now an %s account, you can add, protect, and share your data." : "Most már van egy %s fiókod, hozzáadhatod, védheted és megoszthatod az adataidat.", + "Your username is: %s" : "A felhasználóneved: %s", + "Set your password" : "Állítsd be a jelszabad", + "Go to %s" : "Menj ide: %s", + "Install Client" : "Kliens telepítés", "Your %s account was created" : "%s fiók létrehozva", "Password confirmation is required" : "Jelszó megerősítés szükséges", "Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.", diff --git a/settings/l10n/hu.json b/settings/l10n/hu.json index 37d7c50637e..e24ea941205 100644 --- a/settings/l10n/hu.json +++ b/settings/l10n/hu.json @@ -37,6 +37,13 @@ "Invalid user" : "Érvénytelen felhasználó", "Unable to change mail address" : "Nem lehet megváltoztatni az e-mail címet", "Email saved" : "E-mail elmentve!", + "Welcome aboard" : "Üdv a fedélzeten", + "Welcome aboard %s" : "Üdv a fedélzeten %s", + "You have now an %s account, you can add, protect, and share your data." : "Most már van egy %s fiókod, hozzáadhatod, védheted és megoszthatod az adataidat.", + "Your username is: %s" : "A felhasználóneved: %s", + "Set your password" : "Állítsd be a jelszabad", + "Go to %s" : "Menj ide: %s", + "Install Client" : "Kliens telepítés", "Your %s account was created" : "%s fiók létrehozva", "Password confirmation is required" : "Jelszó megerősítés szükséges", "Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.", diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js index 9f1629bdd54..4a2dc688c17 100644 --- a/settings/l10n/nl.js +++ b/settings/l10n/nl.js @@ -39,6 +39,13 @@ OC.L10N.register( "Invalid user" : "Ongeldige gebruiker", "Unable to change mail address" : "Kan het e-mailadres niet wijzigen", "Email saved" : "E-mail opgeslagen", + "Welcome aboard" : "Welkom aan boord", + "Welcome aboard %s" : "Welkom aan boord %s", + "You have now an %s account, you can add, protect, and share your data." : "Je hebt nu een %s account, je kan nu je data toevoegen, beschermen en delen.", + "Your username is: %s" : "Je gebruikersnaam is: %s", + "Set your password" : "Stel je wachtwoord in", + "Go to %s" : "Ga naar %s", + "Install Client" : "Installeer Client", "Your %s account was created" : "Je %s account is aangemaakt", "Password confirmation is required" : "Wachtwoordbevestiging vereist", "Couldn't remove app." : "Kon app niet verwijderen.", diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json index 408ccbda486..8a2e63e616d 100644 --- a/settings/l10n/nl.json +++ b/settings/l10n/nl.json @@ -37,6 +37,13 @@ "Invalid user" : "Ongeldige gebruiker", "Unable to change mail address" : "Kan het e-mailadres niet wijzigen", "Email saved" : "E-mail opgeslagen", + "Welcome aboard" : "Welkom aan boord", + "Welcome aboard %s" : "Welkom aan boord %s", + "You have now an %s account, you can add, protect, and share your data." : "Je hebt nu een %s account, je kan nu je data toevoegen, beschermen en delen.", + "Your username is: %s" : "Je gebruikersnaam is: %s", + "Set your password" : "Stel je wachtwoord in", + "Go to %s" : "Ga naar %s", + "Install Client" : "Installeer Client", "Your %s account was created" : "Je %s account is aangemaakt", "Password confirmation is required" : "Wachtwoordbevestiging vereist", "Couldn't remove app." : "Kon app niet verwijderen.", diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 10df437523b..20475290df2 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -5,7 +5,7 @@ */ /** @var $_ mixed[]|\OCP\IURLGenerator[] */ -/** @var \OC_Defaults $theme */ +/** @var \OCP\Defaults $theme */ ?> <div id="app-navigation"> diff --git a/tests/Core/Controller/LostControllerTest.php b/tests/Core/Controller/LostControllerTest.php index 255c6ace359..c8b8f87e73b 100644 --- a/tests/Core/Controller/LostControllerTest.php +++ b/tests/Core/Controller/LostControllerTest.php @@ -23,9 +23,9 @@ namespace Tests\Core\Controller; use OC\Core\Controller\LostController; use OC\Mail\Message; -use OCA\Encryption\Exceptions\PrivateKeyMissingException; use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Utility\ITimeFactory; +use OCP\Defaults; use OCP\Encryption\IManager; use OCP\IConfig; use OCP\IL10N; @@ -55,7 +55,7 @@ class LostControllerTest extends \Test\TestCase { private $l10n; /** @var IUserManager | PHPUnit_Framework_MockObject_MockObject */ private $userManager; - /** @var \OC_Defaults */ + /** @var Defaults */ private $defaults; /** @var IConfig | PHPUnit_Framework_MockObject_MockObject */ private $config; @@ -94,7 +94,7 @@ class LostControllerTest extends \Test\TestCase { ->will($this->returnCallback(function($text, $parameters = array()) { return vsprintf($text, $parameters); })); - $this->defaults = $this->getMockBuilder('\OC_Defaults') + $this->defaults = $this->getMockBuilder('\OCP\Defaults') ->disableOriginalConstructor()->getMock(); $this->userManager = $this->getMockBuilder('\OCP\IUserManager') ->disableOriginalConstructor()->getMock(); diff --git a/tests/Settings/Controller/UsersControllerTest.php b/tests/Settings/Controller/UsersControllerTest.php index d7961e2332b..79e6dd61813 100644 --- a/tests/Settings/Controller/UsersControllerTest.php +++ b/tests/Settings/Controller/UsersControllerTest.php @@ -52,8 +52,6 @@ class UsersControllerTest extends \Test\TestCase { private $config; /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */ private $logger; - /** @var \OC_Defaults|\PHPUnit_Framework_MockObject_MockObject */ - private $defaults; /** @var IMailer|\PHPUnit_Framework_MockObject_MockObject */ private $mailer; /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ diff --git a/tests/Settings/Mailer/NewUserMailHelperTest.php b/tests/Settings/Mailer/NewUserMailHelperTest.php index e77e8e197b8..ef9dae8766c 100644 --- a/tests/Settings/Mailer/NewUserMailHelperTest.php +++ b/tests/Settings/Mailer/NewUserMailHelperTest.php @@ -21,12 +21,11 @@ namespace Tests\Settings\Mailer; -use OC\Mail\EMailTemplate; -use OC\Mail\IEMailTemplate; +use OCP\Mail\IEMailTemplate; use OC\Mail\Message; use OC\Settings\Mailer\NewUserMailHelper; -use OCA\Theming\ThemingDefaults; use OCP\AppFramework\Utility\ITimeFactory; +use OCP\Defaults; use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; @@ -37,8 +36,8 @@ use OCP\Security\ISecureRandom; use Test\TestCase; class NewUserMailHelperTest extends TestCase { - /** @var ThemingDefaults|\PHPUnit_Framework_MockObject_MockObject */ - private $themingDefaults; + /** @var Defaults|\PHPUnit_Framework_MockObject_MockObject */ + private $defaults; /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ private $urlGenerator; /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */ @@ -59,7 +58,7 @@ class NewUserMailHelperTest extends TestCase { public function setUp() { parent::setUp(); - $this->themingDefaults = $this->createMock(ThemingDefaults::class); + $this->defaults = $this->createMock(Defaults::class); $this->urlGenerator = $this->createMock(IURLGenerator::class); $this->l10n = $this->createMock(IL10N::class); $this->mailer = $this->createMock(IMailer::class); @@ -73,7 +72,7 @@ class NewUserMailHelperTest extends TestCase { })); $this->newUserMailHelper = new NewUserMailHelper( - $this->themingDefaults, + $this->defaults, $this->urlGenerator, $this->l10n, $this->mailer, @@ -144,7 +143,7 @@ class NewUserMailHelperTest extends TestCase { ->expects($this->at(5)) ->method('getUID') ->willReturn('john'); - $this->themingDefaults + $this->defaults ->expects($this->at(0)) ->method('getName') ->willReturn('TestCloud'); @@ -175,7 +174,7 @@ class NewUserMailHelperTest extends TestCase { <tbody> <tr style="padding:0;text-align:left;vertical-align:top"> <center data-parsed="" style="min-width:580px;width:100%"> - <img class="logo float-center" src="?v=" alt="logo" align="center" style="-ms-interpolation-mode:bicubic;Margin:0 auto;clear:both;display:block;float:none;margin:0 auto;max-height:100%;max-width:100px;outline:0;text-align:center;text-decoration:none;width:auto"> + <img class="logo float-center" src="" alt="logo" align="center" style="-ms-interpolation-mode:bicubic;Margin:0 auto;clear:both;display:block;float:none;margin:0 auto;max-height:100%;max-width:100px;outline:0;text-align:center;text-decoration:none;width:auto"> </center> </tr> </tbody> @@ -376,7 +375,7 @@ EOF; ->expects($this->at(1)) ->method('getUID') ->willReturn('john'); - $this->themingDefaults + $this->defaults ->expects($this->any()) ->method('getName') ->willReturn('TestCloud'); @@ -407,7 +406,7 @@ EOF; <tbody> <tr style="padding:0;text-align:left;vertical-align:top"> <center data-parsed="" style="min-width:580px;width:100%"> - <img class="logo float-center" src="?v=" alt="logo" align="center" style="-ms-interpolation-mode:bicubic;Margin:0 auto;clear:both;display:block;float:none;margin:0 auto;max-height:100%;max-width:100px;outline:0;text-align:center;text-decoration:none;width:auto"> + <img class="logo float-center" src="" alt="logo" align="center" style="-ms-interpolation-mode:bicubic;Margin:0 auto;clear:both;display:block;float:none;margin:0 auto;max-height:100%;max-width:100px;outline:0;text-align:center;text-decoration:none;width:auto"> </center> </tr> </tbody> @@ -609,7 +608,7 @@ EOF; ->expects($this->at(0)) ->method('setTo') ->with(['recipient@example.com' => 'John Doe']); - $this->themingDefaults + $this->defaults ->expects($this->exactly(2)) ->method('getName') ->willReturn('TestCloud'); diff --git a/tests/data/emails/new-account-email-custom-text-alternative.txt b/tests/data/emails/new-account-email-custom-text-alternative.txt new file mode 100644 index 00000000000..bcbc6632175 --- /dev/null +++ b/tests/data/emails/new-account-email-custom-text-alternative.txt @@ -0,0 +1,11 @@ +Welcome aboard - text + +You have now an Nextcloud account, you can add, protect, and share your data. - text + +Your username is: abc + +Set your password - text: https://example.org/resetPassword/123 +Install Client - text: https://nextcloud.com/install/#install-clients + +-- +TestCloud - A safe home for your data diff --git a/tests/data/emails/new-account-email-custom.html b/tests/data/emails/new-account-email-custom.html index 10d3330604d..c754412e681 100644 --- a/tests/data/emails/new-account-email-custom.html +++ b/tests/data/emails/new-account-email-custom.html @@ -23,7 +23,7 @@ <tbody> <tr style="padding:0;text-align:left;vertical-align:top"> <center data-parsed="" style="min-width:580px;width:100%"> - <img class="logo float-center" src="https://example.org/img/logo-mail-header.png?v=48" alt="logo" align="center" style="-ms-interpolation-mode:bicubic;Margin:0 auto;clear:both;display:block;float:none;margin:0 auto;max-height:100%;max-width:100px;outline:0;text-align:center;text-decoration:none;width:auto"> + <img class="logo float-center" src="https://example.org/img/logo-mail-header.png" alt="logo" align="center" style="-ms-interpolation-mode:bicubic;Margin:0 auto;clear:both;display:block;float:none;margin:0 auto;max-height:100%;max-width:100px;outline:0;text-align:center;text-decoration:none;width:auto"> </center> </tr> </tbody> diff --git a/tests/data/emails/new-account-email.html b/tests/data/emails/new-account-email.html index a32ad61c49c..4fb6f5af15e 100644 --- a/tests/data/emails/new-account-email.html +++ b/tests/data/emails/new-account-email.html @@ -23,7 +23,7 @@ <tbody> <tr style="padding:0;text-align:left;vertical-align:top"> <center data-parsed="" style="min-width:580px;width:100%"> - <img class="logo float-center" src="https://example.org/img/logo-mail-header.png?v=48" alt="logo" align="center" style="-ms-interpolation-mode:bicubic;Margin:0 auto;clear:both;display:block;float:none;margin:0 auto;max-height:100%;max-width:100px;outline:0;text-align:center;text-decoration:none;width:auto"> + <img class="logo float-center" src="https://example.org/img/logo-mail-header.png" alt="logo" align="center" style="-ms-interpolation-mode:bicubic;Margin:0 auto;clear:both;display:block;float:none;margin:0 auto;max-height:100%;max-width:100px;outline:0;text-align:center;text-decoration:none;width:auto"> </center> </tr> </tbody> diff --git a/tests/lib/Accounts/AccountsManagerTest.php b/tests/lib/Accounts/AccountsManagerTest.php index c0e20164908..e6c1552fdc0 100644 --- a/tests/lib/Accounts/AccountsManagerTest.php +++ b/tests/lib/Accounts/AccountsManagerTest.php @@ -24,7 +24,6 @@ namespace Test\Accounts; use OC\Accounts\AccountManager; -use OC\Mail\Mailer; use OCP\IUser; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\GenericEvent; diff --git a/tests/lib/Comments/FakeManager.php b/tests/lib/Comments/FakeManager.php index dfb8f21b64b..840961fb901 100644 --- a/tests/lib/Comments/FakeManager.php +++ b/tests/lib/Comments/FakeManager.php @@ -1,6 +1,7 @@ <?php namespace Test\Comments; +use OCP\IUser; /** * Class FakeManager @@ -44,4 +45,6 @@ class FakeManager implements \OCP\Comments\ICommentsManager { public function registerDisplayNameResolver($type, \Closure $closure) {} public function resolveDisplayName($type, $id) {} + + public function getNumberOfUnreadCommentsForFolder($folderId, IUser $user) {} } diff --git a/tests/lib/Comments/ManagerTest.php b/tests/lib/Comments/ManagerTest.php index a320366f29e..24c634be137 100644 --- a/tests/lib/Comments/ManagerTest.php +++ b/tests/lib/Comments/ManagerTest.php @@ -6,7 +6,9 @@ use OC\Comments\Comment; use OCP\Comments\CommentsEvent; use OCP\Comments\ICommentsEventHandler; use OCP\Comments\ICommentsManager; +use OCP\IDBConnection; use OCP\IUser; +use Test\Files\Storage\DummyUser; use Test\TestCase; /** @@ -15,37 +17,44 @@ use Test\TestCase; * @group DB */ class ManagerTest extends TestCase { + /** @var IDBConnection */ + private $connection; public function setUp() { parent::setUp(); - $sql = \OC::$server->getDatabaseConnection()->getDatabasePlatform()->getTruncateTableSQL('`*PREFIX*comments`'); - \OC::$server->getDatabaseConnection()->prepare($sql)->execute(); + $this->connection = \OC::$server->getDatabaseConnection(); + + $sql = $this->connection->getDatabasePlatform()->getTruncateTableSQL('`*PREFIX*comments`'); + $this->connection->prepare($sql)->execute(); } - protected function addDatabaseEntry($parentId, $topmostParentId, $creationDT = null, $latestChildDT = null) { - if(is_null($creationDT)) { + protected function addDatabaseEntry($parentId, $topmostParentId, $creationDT = null, $latestChildDT = null, $objectId = null) { + if (is_null($creationDT)) { $creationDT = new \DateTime(); } - if(is_null($latestChildDT)) { + if (is_null($latestChildDT)) { $latestChildDT = new \DateTime('yesterday'); } + if (is_null($objectId)) { + $objectId = 'file64'; + } - $qb = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + $qb = $this->connection->getQueryBuilder(); $qb ->insert('comments') ->values([ - 'parent_id' => $qb->createNamedParameter($parentId), - 'topmost_parent_id' => $qb->createNamedParameter($topmostParentId), - 'children_count' => $qb->createNamedParameter(2), - 'actor_type' => $qb->createNamedParameter('users'), - 'actor_id' => $qb->createNamedParameter('alice'), - 'message' => $qb->createNamedParameter('nice one'), - 'verb' => $qb->createNamedParameter('comment'), - 'creation_timestamp' => $qb->createNamedParameter($creationDT, 'datetime'), - 'latest_child_timestamp' => $qb->createNamedParameter($latestChildDT, 'datetime'), - 'object_type' => $qb->createNamedParameter('files'), - 'object_id' => $qb->createNamedParameter('file64'), + 'parent_id' => $qb->createNamedParameter($parentId), + 'topmost_parent_id' => $qb->createNamedParameter($topmostParentId), + 'children_count' => $qb->createNamedParameter(2), + 'actor_type' => $qb->createNamedParameter('users'), + 'actor_id' => $qb->createNamedParameter('alice'), + 'message' => $qb->createNamedParameter('nice one'), + 'verb' => $qb->createNamedParameter('comment'), + 'creation_timestamp' => $qb->createNamedParameter($creationDT, 'datetime'), + 'latest_child_timestamp' => $qb->createNamedParameter($latestChildDT, 'datetime'), + 'object_type' => $qb->createNamedParameter('files'), + 'object_id' => $qb->createNamedParameter($objectId), ]) ->execute(); @@ -83,17 +92,17 @@ class ManagerTest extends TestCase { $qb ->insert('comments') ->values([ - 'parent_id' => $qb->createNamedParameter('2'), - 'topmost_parent_id' => $qb->createNamedParameter('1'), - 'children_count' => $qb->createNamedParameter(2), - 'actor_type' => $qb->createNamedParameter('users'), - 'actor_id' => $qb->createNamedParameter('alice'), - 'message' => $qb->createNamedParameter('nice one'), - 'verb' => $qb->createNamedParameter('comment'), - 'creation_timestamp' => $qb->createNamedParameter($creationDT, 'datetime'), - 'latest_child_timestamp' => $qb->createNamedParameter($latestChildDT, 'datetime'), - 'object_type' => $qb->createNamedParameter('files'), - 'object_id' => $qb->createNamedParameter('file64'), + 'parent_id' => $qb->createNamedParameter('2'), + 'topmost_parent_id' => $qb->createNamedParameter('1'), + 'children_count' => $qb->createNamedParameter(2), + 'actor_type' => $qb->createNamedParameter('users'), + 'actor_id' => $qb->createNamedParameter('alice'), + 'message' => $qb->createNamedParameter('nice one'), + 'verb' => $qb->createNamedParameter('comment'), + 'creation_timestamp' => $qb->createNamedParameter($creationDT, 'datetime'), + 'latest_child_timestamp' => $qb->createNamedParameter($latestChildDT, 'datetime'), + 'object_type' => $qb->createNamedParameter('files'), + 'object_id' => $qb->createNamedParameter('file64'), ]) ->execute(); @@ -149,7 +158,7 @@ class ManagerTest extends TestCase { $this->assertSame(count($tree['replies']), 3); // one level deep - foreach($tree['replies'] as $reply) { + foreach ($tree['replies'] as $reply) { $this->assertTrue($reply['comment'] instanceof \OCP\Comments\IComment); $this->assertSame($reply['comment']->getId(), strval($id)); $this->assertSame(count($reply['replies']), 0); @@ -171,7 +180,7 @@ class ManagerTest extends TestCase { $this->assertSame(count($tree['replies']), 0); // one level deep - foreach($tree['replies'] as $reply) { + foreach ($tree['replies'] as $reply) { throw new \Exception('This ain`t happen'); } } @@ -233,14 +242,14 @@ class ManagerTest extends TestCase { $comments = $manager->getForObject('files', 'file64', 3, $offset); $this->assertTrue(is_array($comments)); - foreach($comments as $comment) { + foreach ($comments as $comment) { $this->assertTrue($comment instanceof \OCP\Comments\IComment); $this->assertSame($comment->getMessage(), 'nice one'); $this->assertSame($comment->getId(), strval($idToVerify)); $idToVerify--; } $offset += 3; - } while(count($comments) > 0); + } while (count($comments) > 0); } public function testGetForObjectWithDateTimeConstraint() { @@ -272,7 +281,7 @@ class ManagerTest extends TestCase { $comments = $manager->getForObject('files', 'file64', 3, $offset, new \DateTime('-4 hours')); $this->assertTrue(is_array($comments)); - foreach($comments as $comment) { + foreach ($comments as $comment) { $this->assertTrue($comment instanceof \OCP\Comments\IComment); $this->assertSame($comment->getMessage(), 'nice one'); $this->assertSame($comment->getId(), strval($idToVerify)); @@ -280,11 +289,11 @@ class ManagerTest extends TestCase { $idToVerify--; } $offset += 3; - } while(count($comments) > 0); + } while (count($comments) > 0); } public function testGetNumberOfCommentsForObject() { - for($i = 1; $i < 5; $i++) { + for ($i = 1; $i < 5; $i++) { $this->addDatabaseEntry(0, 0); } @@ -297,6 +306,52 @@ class ManagerTest extends TestCase { $this->assertSame($amount, 4); } + public function testGetNumberOfUnreadCommentsForFolder() { + // 2 comment for 1111 with 1 before read marker + // 2 comments for 1112 with no read marker + // 1 comment for 1113 before read marker + // 1 comment for 1114 with no read marker + $this->addDatabaseEntry(0, 0, null, null, '1112'); + for ($i = 1; $i < 5; $i++) { + $this->addDatabaseEntry(0, 0, null, null, '111' . $i); + } + $this->addDatabaseEntry(0, 0, (new \DateTime())->modify('-2 days'), null, '1111'); + $user = $this->createMock(IUser::class); + $user->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('comment_test')); + + $manager = $this->getManager(); + + $manager->setReadMark('files', '1111', (new \DateTime())->modify('-1 days'), $user); + $manager->setReadMark('files', '1113', (new \DateTime()), $user); + + $query = $this->connection->getQueryBuilder(); + $query->insert('filecache') + ->values([ + 'fileid' => $query->createParameter('fileid'), + 'parent' => $query->createNamedParameter(1000), + 'size' => $query->createNamedParameter(10), + 'mtime' => $query->createNamedParameter(10), + 'storage_mtime' => $query->createNamedParameter(10), + 'path' => $query->createParameter('path'), + 'path_hash' => $query->createParameter('path'), + ]); + + for ($i = 1111; $i < 1115; $i++) { + $query->setParameter('path', 'path_' . $i); + $query->setParameter('fileid', $i); + $query->execute(); + } + + $amount = $manager->getNumberOfUnreadCommentsForFolder(1000, $user); + $this->assertEquals([ + '1111' => 1, + '1112' => 2, + '1114' => 1, + ], $amount); + } + public function invalidCreateArgsProvider() { return [ ['', 'aId-1', 'oType-1', 'oId-1'], @@ -380,10 +435,10 @@ class ManagerTest extends TestCase { $manager = $this->getManager(); $comment = new Comment(); $comment - ->setActor('users', 'alice') - ->setObject('files', 'file64') - ->setMessage('very beautiful, I am impressed!') - ->setVerb('comment'); + ->setActor('users', 'alice') + ->setObject('files', 'file64') + ->setMessage('very beautiful, I am impressed!') + ->setVerb('comment'); $manager->save($comment); @@ -401,10 +456,10 @@ class ManagerTest extends TestCase { $manager = $this->getManager(); $comment = new Comment(); $comment - ->setActor('users', 'alice') - ->setObject('files', 'file64') - ->setMessage('very beautiful, I am impressed!') - ->setVerb('comment'); + ->setActor('users', 'alice') + ->setObject('files', 'file64') + ->setMessage('very beautiful, I am impressed!') + ->setVerb('comment'); $manager->save($comment); @@ -428,16 +483,16 @@ class ManagerTest extends TestCase { $manager = $this->getManager(); - for($i = 0; $i < 3; $i++) { + for ($i = 0; $i < 3; $i++) { $comment = new Comment(); $comment - ->setActor('users', 'alice') - ->setObject('files', 'file64') - ->setParentId(strval($id)) - ->setMessage('full ack') - ->setVerb('comment') - // setting the creation time avoids using sleep() while making sure to test with different timestamps - ->setCreationDateTime(new \DateTime('+' . $i . ' minutes')); + ->setActor('users', 'alice') + ->setObject('files', 'file64') + ->setParentId(strval($id)) + ->setMessage('full ack') + ->setVerb('comment') + // setting the creation time avoids using sleep() while making sure to test with different timestamps + ->setCreationDateTime(new \DateTime('+' . $i . ' minutes')); $manager->save($comment); @@ -450,11 +505,11 @@ class ManagerTest extends TestCase { public function invalidActorArgsProvider() { return - [ - ['', ''], - [1, 'alice'], - ['users', 1], - ]; + [ + ['', ''], + [1, 'alice'], + ['users', 1], + ]; } /** @@ -482,7 +537,7 @@ class ManagerTest extends TestCase { $wasSuccessful = $manager->deleteReferencesOfActor('users', 'alice'); $this->assertTrue($wasSuccessful); - foreach($ids as $id) { + foreach ($ids as $id) { $comment = $manager->get(strval($id)); $this->assertSame($comment->getActorType(), ICommentsManager::DELETED_USER); $this->assertSame($comment->getActorId(), ICommentsManager::DELETED_USER); @@ -516,11 +571,11 @@ class ManagerTest extends TestCase { public function invalidObjectArgsProvider() { return - [ - ['', ''], - [1, 'file64'], - ['files', 1], - ]; + [ + ['', ''], + [1, 'file64'], + ['files', 1], + ]; } /** @@ -549,7 +604,7 @@ class ManagerTest extends TestCase { $this->assertTrue($wasSuccessful); $verified = 0; - foreach($ids as $id) { + foreach ($ids as $id) { try { $manager->get(strval($id)); } catch (\OCP\Comments\NotFoundException $e) { @@ -575,7 +630,7 @@ class ManagerTest extends TestCase { $manager = $this->getManager(); $manager->setReadMark('robot', '36', $dateTimeSet, $user); - $dateTimeGet = $manager->getReadMark('robot', '36', $user); + $dateTimeGet = $manager->getReadMark('robot', '36', $user); $this->assertEquals($dateTimeGet->getTimestamp(), $dateTimeSet->getTimestamp()); } @@ -594,7 +649,7 @@ class ManagerTest extends TestCase { $dateTimeSet = new \DateTime('today'); $manager->setReadMark('robot', '36', $dateTimeSet, $user); - $dateTimeGet = $manager->getReadMark('robot', '36', $user); + $dateTimeGet = $manager->getReadMark('robot', '36', $user); $this->assertEquals($dateTimeGet, $dateTimeSet); } @@ -611,7 +666,7 @@ class ManagerTest extends TestCase { $manager->setReadMark('robot', '36', $dateTimeSet, $user); $manager->deleteReadMarksFromUser($user); - $dateTimeGet = $manager->getReadMark('robot', '36', $user); + $dateTimeGet = $manager->getReadMark('robot', '36', $user); $this->assertNull($dateTimeGet); } @@ -628,7 +683,7 @@ class ManagerTest extends TestCase { $manager->setReadMark('robot', '36', $dateTimeSet, $user); $manager->deleteReadMarksOnObject('robot', '36'); - $dateTimeGet = $manager->getReadMark('robot', '36', $user); + $dateTimeGet = $manager->getReadMark('robot', '36', $user); $this->assertNull($dateTimeGet); } @@ -643,8 +698,12 @@ class ManagerTest extends TestCase { ->method('handle'); $manager = $this->getManager(); - $manager->registerEventHandler(function () use ($handler1) {return $handler1; }); - $manager->registerEventHandler(function () use ($handler2) {return $handler2; }); + $manager->registerEventHandler(function () use ($handler1) { + return $handler1; + }); + $manager->registerEventHandler(function () use ($handler2) { + return $handler2; + }); $comment = new Comment(); $comment @@ -667,11 +726,11 @@ class ManagerTest extends TestCase { public function testResolveDisplayName() { $manager = $this->getManager(); - $planetClosure = function($name) { + $planetClosure = function ($name) { return ucfirst($name); }; - $galaxyClosure = function($name) { + $galaxyClosure = function ($name) { return strtoupper($name); }; @@ -688,7 +747,7 @@ class ManagerTest extends TestCase { public function testRegisterResolverDuplicate() { $manager = $this->getManager(); - $planetClosure = function($name) { + $planetClosure = function ($name) { return ucfirst($name); }; $manager->registerDisplayNameResolver('planet', $planetClosure); @@ -701,7 +760,7 @@ class ManagerTest extends TestCase { public function testRegisterResolverInvalidType() { $manager = $this->getManager(); - $planetClosure = function($name) { + $planetClosure = function ($name) { return ucfirst($name); }; $manager->registerDisplayNameResolver(1337, $planetClosure); @@ -713,7 +772,7 @@ class ManagerTest extends TestCase { public function testResolveDisplayNameUnregisteredType() { $manager = $this->getManager(); - $planetClosure = function($name) { + $planetClosure = function ($name) { return ucfirst($name); }; @@ -724,7 +783,9 @@ class ManagerTest extends TestCase { public function testResolveDisplayNameDirtyResolver() { $manager = $this->getManager(); - $planetClosure = function() { return null; }; + $planetClosure = function () { + return null; + }; $manager->registerDisplayNameResolver('planet', $planetClosure); $this->assertTrue(is_string($manager->resolveDisplayName('planet', 'neptune'))); @@ -736,7 +797,9 @@ class ManagerTest extends TestCase { public function testResolveDisplayNameInvalidType() { $manager = $this->getManager(); - $planetClosure = function() { return null; }; + $planetClosure = function () { + return null; + }; $manager->registerDisplayNameResolver('planet', $planetClosure); $this->assertTrue(is_string($manager->resolveDisplayName(1337, 'neptune'))); diff --git a/tests/lib/DB/QueryBuilder/QueryBuilderTest.php b/tests/lib/DB/QueryBuilder/QueryBuilderTest.php index 22808f586ef..150c772b26c 100644 --- a/tests/lib/DB/QueryBuilder/QueryBuilderTest.php +++ b/tests/lib/DB/QueryBuilder/QueryBuilderTest.php @@ -1200,7 +1200,7 @@ class QueryBuilderTest extends \Test\TestCase { public function dataGetColumnName() { return [ ['column', '', '`column`'], - ['column', 'a', 'a.`column`'], + ['column', 'a', '`a`.`column`'], ]; } diff --git a/tests/lib/DB/QueryBuilder/QuoteHelperTest.php b/tests/lib/DB/QueryBuilder/QuoteHelperTest.php index b83d9eed2df..3c1abd72f66 100644 --- a/tests/lib/DB/QueryBuilder/QuoteHelperTest.php +++ b/tests/lib/DB/QueryBuilder/QuoteHelperTest.php @@ -65,7 +65,7 @@ class QuoteHelperTest extends \Test\TestCase { public function dataQuoteColumnNames() { return [ // Single case - ['d.column', 'd.`column`'], + ['d.column', '`d`.`column`'], ['column', '`column`'], [new Literal('literal'), 'literal'], [new Literal(1), '1'], diff --git a/tests/lib/Files/Storage/Wrapper/EncryptionTest.php b/tests/lib/Files/Storage/Wrapper/EncryptionTest.php index fb3b463e43b..eb665af8dda 100644 --- a/tests/lib/Files/Storage/Wrapper/EncryptionTest.php +++ b/tests/lib/Files/Storage/Wrapper/EncryptionTest.php @@ -614,11 +614,15 @@ class EncryptionTest extends Storage { * * @dataProvider dataTestGetHeaderAddLegacyModule */ - public function testGetHeaderAddLegacyModule($header, $isEncrypted, $expected) { + public function testGetHeaderAddLegacyModule($header, $isEncrypted, $exists, $expected) { $sourceStorage = $this->getMockBuilder('\OC\Files\Storage\Storage') ->disableOriginalConstructor()->getMock(); + $sourceStorage->expects($this->once()) + ->method('file_exists') + ->willReturn($exists); + $util = $this->getMockBuilder('\OC\Encryption\Util') ->setConstructorArgs([new View(), new Manager($this->config), $this->groupManager, $this->config, $this->arrayCache]) ->getMock(); @@ -657,9 +661,10 @@ class EncryptionTest extends Storage { public function dataTestGetHeaderAddLegacyModule() { return [ - [['cipher' => 'AES-128'], true, ['cipher' => 'AES-128', Util::HEADER_ENCRYPTION_MODULE_KEY => 'OC_DEFAULT_MODULE']], - [[], true, [Util::HEADER_ENCRYPTION_MODULE_KEY => 'OC_DEFAULT_MODULE']], - [[], false, []], + [['cipher' => 'AES-128'], true, true, ['cipher' => 'AES-128', Util::HEADER_ENCRYPTION_MODULE_KEY => 'OC_DEFAULT_MODULE']], + [[], true, false, []], + [[], true, true, [Util::HEADER_ENCRYPTION_MODULE_KEY => 'OC_DEFAULT_MODULE']], + [[], false, true, []], ]; } diff --git a/tests/lib/Mail/EMailTemplateTest.php b/tests/lib/Mail/EMailTemplateTest.php index 47fe09aabbb..9f80dad642a 100644 --- a/tests/lib/Mail/EMailTemplateTest.php +++ b/tests/lib/Mail/EMailTemplateTest.php @@ -24,13 +24,13 @@ namespace Test\Mail; use OC\Mail\EMailTemplate; -use OCA\Theming\ThemingDefaults; +use OCP\Defaults; use OCP\IL10N; use OCP\IURLGenerator; use Test\TestCase; class EMailTemplateTest extends TestCase { - /** @var ThemingDefaults|\PHPUnit_Framework_MockObject_MockObject */ + /** @var Defaults|\PHPUnit_Framework_MockObject_MockObject */ private $defaults; /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ private $urlGenerator; @@ -42,7 +42,7 @@ class EMailTemplateTest extends TestCase { public function setUp() { parent::setUp(); - $this->defaults = $this->createMock(ThemingDefaults::class); + $this->defaults = $this->createMock(Defaults::class); $this->urlGenerator = $this->createMock(IURLGenerator::class); $this->l10n = $this->createMock(IL10N::class); @@ -62,10 +62,6 @@ class EMailTemplateTest extends TestCase { ->expects($this->any()) ->method('getLogo') ->willReturn('/img/logo-mail-header.png'); - $this->defaults - ->expects($this->any()) - ->method('getCacheBusterCounter') - ->willReturn('48'); $this->urlGenerator ->expects($this->once()) ->method('getAbsoluteURL') @@ -107,10 +103,6 @@ class EMailTemplateTest extends TestCase { ->expects($this->any()) ->method('getLogo') ->willReturn('/img/logo-mail-header.png'); - $this->defaults - ->expects($this->any()) - ->method('getCacheBusterCounter') - ->willReturn('48'); $this->urlGenerator ->expects($this->once()) ->method('getAbsoluteURL') @@ -134,4 +126,46 @@ class EMailTemplateTest extends TestCase { } + + public function testEMailTemplateAlternativePlainTexts() { + $this->defaults + ->expects($this->any()) + ->method('getColorPrimary') + ->willReturn('#0082c9'); + $this->defaults + ->expects($this->any()) + ->method('getName') + ->willReturn('TestCloud'); + $this->defaults + ->expects($this->any()) + ->method('getSlogan') + ->willReturn('A safe home for your data'); + $this->defaults + ->expects($this->any()) + ->method('getLogo') + ->willReturn('/img/logo-mail-header.png'); + $this->urlGenerator + ->expects($this->once()) + ->method('getAbsoluteURL') + ->with('/img/logo-mail-header.png') + ->willReturn('https://example.org/img/logo-mail-header.png'); + + $this->emailTemplate->addHeader(); + $this->emailTemplate->addHeading('Welcome aboard', 'Welcome aboard - text'); + $this->emailTemplate->addBodyText('You have now an Nextcloud account, you can add, protect, and share your data.', 'You have now an Nextcloud account, you can add, protect, and share your data. - text'); + $this->emailTemplate->addBodyText('Your username is: abc'); + $this->emailTemplate->addBodyButtonGroup( + 'Set your password', 'https://example.org/resetPassword/123', + 'Install Client', 'https://nextcloud.com/install/#install-clients', + 'Set your password - text', 'Install Client - text' + ); + $this->emailTemplate->addFooter(); + + $expectedHTML = file_get_contents(\OC::$SERVERROOT . '/tests/data/emails/new-account-email-custom.html'); + $this->assertSame($expectedHTML, $this->emailTemplate->renderHTML()); + $expectedTXT = file_get_contents(\OC::$SERVERROOT . '/tests/data/emails/new-account-email-custom-text-alternative.txt'); + $this->assertSame($expectedTXT, $this->emailTemplate->renderText()); + } + + } diff --git a/tests/lib/Mail/MailerTest.php b/tests/lib/Mail/MailerTest.php index 7a7ce0392e9..a7226b9ecd6 100644 --- a/tests/lib/Mail/MailerTest.php +++ b/tests/lib/Mail/MailerTest.php @@ -8,32 +8,44 @@ namespace Test\Mail; +use OC\Mail\EMailTemplate; use OC\Mail\Mailer; +use OCP\Defaults; use OCP\IConfig; -use OC_Defaults; +use OCP\IL10N; use OCP\ILogger; +use OCP\IURLGenerator; use Test\TestCase; class MailerTest extends TestCase { - /** @var IConfig */ + /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ private $config; - /** @var OC_Defaults */ + /** @var Defaults|\PHPUnit_Framework_MockObject_MockObject */ private $defaults; - /** @var ILogger */ + /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */ private $logger; + /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ + private $urlGenerator; + /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */ + private $l10n; /** @var Mailer */ private $mailer; - function setUp() { + public function setUp() { parent::setUp(); - $this->config = $this->getMockBuilder('\OCP\IConfig') - ->disableOriginalConstructor()->getMock(); - $this->defaults = $this->getMockBuilder('\OC_Defaults') - ->disableOriginalConstructor()->getMock(); - $this->logger = $this->getMockBuilder('\OCP\ILogger') - ->disableOriginalConstructor()->getMock(); - $this->mailer = new Mailer($this->config, $this->logger, $this->defaults); + $this->config = $this->createMock(IConfig::class); + $this->defaults = $this->createMock(Defaults::class); + $this->logger = $this->createMock(ILogger::class); + $this->urlGenerator = $this->createMock(IURLGenerator::class); + $this->l10n = $this->createMock(IL10N::class); + $this->mailer = new Mailer( + $this->config, + $this->logger, + $this->defaults, + $this->urlGenerator, + $this->l10n + ); } public function testGetMailInstance() { @@ -120,4 +132,7 @@ class MailerTest extends TestCase { $this->assertSame($expected, $this->mailer->validateMailAddress($email)); } + public function testCreateEMailTemplate() { + $this->assertSame(EMailTemplate::class, get_class($this->mailer->createEMailTemplate())); + } } diff --git a/tests/lib/OCS/DiscoveryServiceTest.php b/tests/lib/OCS/DiscoveryServiceTest.php new file mode 100644 index 00000000000..fdcdddb0813 --- /dev/null +++ b/tests/lib/OCS/DiscoveryServiceTest.php @@ -0,0 +1,99 @@ +<?php +/** + * @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org> + * + * @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 Test\OCS; + + +use OC\OCS\DiscoveryService; +use OCP\Http\Client\IClientService; +use OCP\ICacheFactory; +use OCP\OCS\IDiscoveryService; +use Test\TestCase; + +class DiscoveryServiceTest extends TestCase { + + /** @var \PHPUnit_Framework_MockObject_MockObject | ICacheFactory */ + private $cacheFactory; + + /** @var \PHPUnit_Framework_MockObject_MockObject | IClientService */ + private $clientService; + + /** @var IDiscoveryService */ + private $discoveryService; + + public function setUp() { + parent::setUp(); + + $this->cacheFactory = $this->getMockBuilder(ICacheFactory::class)->getMock(); + $this->clientService = $this->getMockBuilder(IClientService::class)->getMock(); + + $this->discoveryService = new DiscoveryService( + $this->cacheFactory, + $this->clientService + ); + } + + /** + * @dataProvider dataTestIsSafeUrl + * + * @param string $url + * @param bool $expected + */ + public function testIsSafeUrl($url, $expected) { + $result = $this->invokePrivate($this->discoveryService, 'isSafeUrl', [$url]); + $this->assertSame($expected, $result); + } + + public function dataTestIsSafeUrl() { + return [ + ['api/ocs/v1.php/foo', true], + ['/api/ocs/v1.php/foo', true], + ['api/ocs/v1.php/foo/', true], + ['api/ocs/v1.php/foo-bar/', true], + ['api/ocs/v1:php/foo', false], + ['api/ocs/<v1.php/foo', false], + ['api/ocs/v1.php>/foo', false], + ]; + } + + /** + * @dataProvider dataTestGetEndpoints + * + * @param array $decodedServices + * @param string $service + * @param array $expected + */ + public function testGetEndpoints($decodedServices, $service, $expected) { + $result = $this->invokePrivate($this->discoveryService, 'getEndpoints', [$decodedServices, $service]); + $this->assertSame($expected, $result); + } + + public function dataTestGetEndpoints() { + return [ + [['services' => ['myService' => ['endpoints' => []]]], 'myService', []], + [['services' => ['myService' => ['endpoints' => ['foo' => '/bar']]]], 'myService', ['foo' => '/bar']], + [['services' => ['myService' => ['endpoints' => ['foo' => '/bar']]]], 'anotherService', []], + [['services' => ['myService' => ['endpoints' => ['foo' => '/bar</foo']]]], 'myService', []], + ]; + } + +} diff --git a/tests/lib/SetupTest.php b/tests/lib/SetupTest.php index d0e38cf407f..78c35a5b0bb 100644 --- a/tests/lib/SetupTest.php +++ b/tests/lib/SetupTest.php @@ -10,25 +10,26 @@ namespace Test; use bantu\IniGetWrapper\IniGetWrapper; use OC\SystemConfig; +use OCP\Defaults; use OCP\IL10N; use OCP\ILogger; use OCP\Security\ISecureRandom; class SetupTest extends \Test\TestCase { - /** @var SystemConfig | \PHPUnit_Framework_MockObject_MockObject */ + /** @var SystemConfig|\PHPUnit_Framework_MockObject_MockObject */ protected $config; - /** @var \bantu\IniGetWrapper\IniGetWrapper | \PHPUnit_Framework_MockObject_MockObject */ + /** @var \bantu\IniGetWrapper\IniGetWrapper|\PHPUnit_Framework_MockObject_MockObject */ private $iniWrapper; - /** @var \OCP\IL10N | \PHPUnit_Framework_MockObject_MockObject */ + /** @var \OCP\IL10N|\PHPUnit_Framework_MockObject_MockObject */ private $l10n; - /** @var \OC_Defaults | \PHPUnit_Framework_MockObject_MockObject */ + /** @var Defaults|\PHPUnit_Framework_MockObject_MockObject */ private $defaults; - /** @var \OC\Setup | \PHPUnit_Framework_MockObject_MockObject */ + /** @var \OC\Setup|\PHPUnit_Framework_MockObject_MockObject */ protected $setupClass; - /** @var \OCP\ILogger | \PHPUnit_Framework_MockObject_MockObject */ + /** @var \OCP\ILogger|\PHPUnit_Framework_MockObject_MockObject */ protected $logger; - /** @var \OCP\Security\ISecureRandom | \PHPUnit_Framework_MockObject_MockObject */ + /** @var \OCP\Security\ISecureRandom|\PHPUnit_Framework_MockObject_MockObject */ protected $random; protected function setUp() { @@ -37,7 +38,7 @@ class SetupTest extends \Test\TestCase { $this->config = $this->createMock(SystemConfig::class); $this->iniWrapper = $this->createMock(IniGetWrapper::class); $this->l10n = $this->createMock(IL10N::class); - $this->defaults = $this->createMock(\OC_Defaults::class); + $this->defaults = $this->createMock(Defaults::class); $this->logger = $this->createMock(ILogger::class); $this->random = $this->createMock(ISecureRandom::class); $this->setupClass = $this->getMockBuilder('\OC\Setup') diff --git a/tests/lib/Share/MailNotificationsTest.php b/tests/lib/Share/MailNotificationsTest.php index 6fae8eb72fd..2759ee04946 100644 --- a/tests/lib/Share/MailNotificationsTest.php +++ b/tests/lib/Share/MailNotificationsTest.php @@ -84,130 +84,6 @@ class MailNotificationsTest extends \Test\TestCase { } - public function testSendLinkShareMailWithoutReplyTo() { - $message = $this->getMockBuilder('\OC\Mail\Message') - ->disableOriginalConstructor()->getMock(); - - $message - ->expects($this->once()) - ->method('setSubject') - ->with('TestUser shared »MyFile« with you'); - $message - ->expects($this->once()) - ->method('setTo') - ->with(['lukas@owncloud.com']); - $message - ->expects($this->once()) - ->method('setHtmlBody'); - $message - ->expects($this->once()) - ->method('setPlainBody'); - $message - ->expects($this->once()) - ->method('setFrom') - ->with([\OCP\Util::getDefaultEmailAddress('sharing-noreply') => 'TestUser via UnitTestCloud']); - - $this->mailer - ->expects($this->once()) - ->method('createMessage') - ->will($this->returnValue($message)); - $this->mailer - ->expects($this->once()) - ->method('send') - ->with($message) - ->will($this->returnValue([])); - - $mailNotifications = new MailNotifications( - $this->user, - $this->l10n, - $this->mailer, - $this->logger, - $this->defaults, - $this->urlGenerator - ); - - $this->assertSame([], $mailNotifications->sendLinkShareMail('lukas@owncloud.com', 'MyFile', 'https://owncloud.com/file/?foo=bar', 3600)); - } - - public function dataSendLinkShareMailWithReplyTo() { - return [ - ['lukas@owncloud.com', ['lukas@owncloud.com']], - ['lukas@owncloud.com nickvergessen@owncloud.com', ['lukas@owncloud.com', 'nickvergessen@owncloud.com']], - ['lukas@owncloud.com,nickvergessen@owncloud.com', ['lukas@owncloud.com', 'nickvergessen@owncloud.com']], - ['lukas@owncloud.com, nickvergessen@owncloud.com', ['lukas@owncloud.com', 'nickvergessen@owncloud.com']], - ['lukas@owncloud.com;nickvergessen@owncloud.com', ['lukas@owncloud.com', 'nickvergessen@owncloud.com']], - ['lukas@owncloud.com; nickvergessen@owncloud.com', ['lukas@owncloud.com', 'nickvergessen@owncloud.com']], - ]; - } - - /** - * @dataProvider dataSendLinkShareMailWithReplyTo - * @param string $to - * @param array $expectedTo - */ - public function testSendLinkShareMailWithReplyTo($to, array $expectedTo) { - $message = $this->getMockBuilder('\OC\Mail\Message') - ->disableOriginalConstructor()->getMock(); - - $message - ->expects($this->once()) - ->method('setSubject') - ->with('TestUser shared »MyFile« with you'); - $message - ->expects($this->once()) - ->method('setTo') - ->with($expectedTo); - $message - ->expects($this->once()) - ->method('setHtmlBody'); - $message - ->expects($this->once()) - ->method('setPlainBody'); - $message - ->expects($this->once()) - ->method('setFrom') - ->with([\OCP\Util::getDefaultEmailAddress('sharing-noreply') => 'TestUser via UnitTestCloud']); - $message - ->expects($this->once()) - ->method('setReplyTo') - ->with(['sharer@owncloud.com']); - - $this->mailer - ->expects($this->once()) - ->method('createMessage') - ->will($this->returnValue($message)); - $this->mailer - ->expects($this->once()) - ->method('send') - ->with($message) - ->will($this->returnValue([])); - - $mailNotifications = new MailNotifications( - $this->user, - $this->l10n, - $this->mailer, - $this->logger, - $this->defaults, - $this->urlGenerator - ); - $this->assertSame([], $mailNotifications->sendLinkShareMail($to, 'MyFile', 'https://owncloud.com/file/?foo=bar', 3600)); - } - - public function testSendLinkShareMailException() { - $this->setupMailerMock('TestUser shared »MyFile« with you', ['lukas@owncloud.com']); - - $mailNotifications = new MailNotifications( - $this->user, - $this->l10n, - $this->mailer, - $this->logger, - $this->defaults, - $this->urlGenerator - ); - - $this->assertSame(['lukas@owncloud.com'], $mailNotifications->sendLinkShareMail('lukas@owncloud.com', 'MyFile', 'https://owncloud.com/file/?foo=bar', 3600)); - } - /** * @param string $subject */ diff --git a/tests/lib/Share/ShareTest.php b/tests/lib/Share/ShareTest.php index 6b0ebd76ed7..40e88d597a4 100644 --- a/tests/lib/Share/ShareTest.php +++ b/tests/lib/Share/ShareTest.php @@ -1064,11 +1064,11 @@ class ShareTest extends \Test\TestCase { $httpHelperMock->expects($this->at(0)) ->method('post') - ->with($this->stringStartsWith('https://' . $urlHost . '/ocs/v1.php/cloud/shares'), $this->anything()) + ->with($this->stringStartsWith('https://' . $urlHost . '/ocs/v2.php/cloud/shares'), $this->anything()) ->willReturn(['success' => false, 'result' => 'Exception']); $httpHelperMock->expects($this->at(1)) ->method('post') - ->with($this->stringStartsWith('http://' . $urlHost . '/ocs/v1.php/cloud/shares'), $this->anything()) + ->with($this->stringStartsWith('http://' . $urlHost . '/ocs/v2.php/cloud/shares'), $this->anything()) ->willReturn(['success' => true, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 100]]])]); \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_REMOTE, $shareWith, \OCP\Constants::PERMISSION_READ); @@ -1077,11 +1077,11 @@ class ShareTest extends \Test\TestCase { $httpHelperMock->expects($this->at(0)) ->method('post') - ->with($this->stringStartsWith('https://' . $urlHost . '/ocs/v1.php/cloud/shares/' . $share['id'] . '/unshare'), $this->anything()) + ->with($this->stringStartsWith('https://' . $urlHost . '/ocs/v2.php/cloud/shares/' . $share['id'] . '/unshare'), $this->anything()) ->willReturn(['success' => false, 'result' => 'Exception']); $httpHelperMock->expects($this->at(1)) ->method('post') - ->with($this->stringStartsWith('http://' . $urlHost . '/ocs/v1.php/cloud/shares/' . $share['id'] . '/unshare'), $this->anything()) + ->with($this->stringStartsWith('http://' . $urlHost . '/ocs/v2.php/cloud/shares/' . $share['id'] . '/unshare'), $this->anything()) ->willReturn(['success' => true, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 100]]])]); \OCP\Share::unshare('test', 'test.txt', \OCP\Share::SHARE_TYPE_REMOTE, $shareWith); @@ -1490,7 +1490,7 @@ class ShareTest extends \Test\TestCase { $httpHelperMock->expects($this->at(0)) ->method('post') - ->with($this->stringStartsWith('https://localhost/ocs/v1.php/cloud/shares'), $this->anything()) + ->with($this->stringStartsWith('https://localhost/ocs/v2.php/cloud/shares'), $this->anything()) ->willReturn(['success' => true, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 100]]])]); \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_REMOTE, 'foo@localhost', \OCP\Constants::PERMISSION_READ); @@ -1507,7 +1507,7 @@ class ShareTest extends \Test\TestCase { $httpHelperMock->expects($this->at(0)) ->method('post') - ->with($this->stringStartsWith('https://localhost/ocs/v1.php/cloud/shares/' . $share['id'] . '/unshare'), $this->anything()) + ->with($this->stringStartsWith('https://localhost/ocs/v2.php/cloud/shares/' . $share['id'] . '/unshare'), $this->anything()) ->willReturn(['success' => true, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 100]]])]); \OCP\Share::unshare('test', 'test.txt', \OCP\Share::SHARE_TYPE_REMOTE, 'foo@localhost'); diff --git a/tests/lib/Template/SCSSCacherTest.php b/tests/lib/Template/SCSSCacherTest.php index 24865b9ae45..08084e68382 100644 --- a/tests/lib/Template/SCSSCacherTest.php +++ b/tests/lib/Template/SCSSCacherTest.php @@ -42,8 +42,6 @@ class SCSSCacherTest extends \Test\TestCase { protected $urlGenerator; /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ protected $config; - /** @var \OC_Defaults|\PHPUnit_Framework_MockObject_MockObject */ - protected $defaults; /** @var SCSSCacher */ protected $scssCacher; /** @var ICache|\PHPUnit_Framework_MockObject_MockObject */ diff --git a/tests/lib/TestCase.php b/tests/lib/TestCase.php index 23a66f73ec7..c3aa2c73c9e 100644 --- a/tests/lib/TestCase.php +++ b/tests/lib/TestCase.php @@ -24,12 +24,11 @@ namespace Test; use DOMDocument; use DOMNode; -use OC\Cache\CappedMemoryCache; use OC\Command\QueueBus; use OC\Files\Filesystem; use OC\Template\Base; -use OC_Defaults; use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\Defaults; use OCP\IDBConnection; use OCP\IL10N; use OCP\Security\ISecureRandom; @@ -483,8 +482,13 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase { require_once __DIR__.'/../../lib/private/legacy/template/functions.php'; $requestToken = 12345; - $theme = new OC_Defaults(); - /** @var IL10N | \PHPUnit_Framework_MockObject_MockObject $l10n */ + /** @var Defaults|\PHPUnit_Framework_MockObject_MockObject $l10n */ + $theme = $this->getMockBuilder('\OCP\Defaults') + ->disableOriginalConstructor()->getMock(); + $theme->expects($this->any()) + ->method('getName') + ->willReturn('Nextcloud'); + /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject $l10n */ $l10n = $this->getMockBuilder('\OCP\IL10N') ->disableOriginalConstructor()->getMock(); $l10n |