diff options
394 files changed, 4923 insertions, 4343 deletions
diff --git a/.drone.yml b/.drone.yml index 1e35b2a2fe8..5e4f18af9f6 100644 --- a/.drone.yml +++ b/.drone.yml @@ -413,6 +413,16 @@ pipeline: when: matrix: TESTS: integration-transfer-ownership-features + integration-ldap-features: + image: nextcloudci/integration-php7.0:integration-php7.0-3 + commands: + - ./occ maintenance:install --admin-pass=admin + - ./occ app:enable user_ldap + - cd build/integration + - ./run.sh ldap_features/ldap-ocs.feature + when: + matrix: + TESTS: integration-ldap-features nodb-codecov: image: nextcloudci/php7.0:php7.0-7 commands: @@ -480,6 +490,7 @@ matrix: - TESTS: integration-setup-features - TESTS: integration-filesdrop-features - TESTS: integration-transfer-ownership-features + - TESTS: integration-ldap-features - TESTS: jsunit - TESTS: check-autoloader - TESTS: app-check-code diff --git a/3rdparty b/3rdparty -Subproject ae67e91bac6e959fb9666b997c02fb45e63aadf +Subproject f2d8ba7bfebb769835b637f01eaa602e36cdcca diff --git a/apps/comments/l10n/fr.js b/apps/comments/l10n/fr.js index 21641df269b..588f429babc 100644 --- a/apps/comments/l10n/fr.js +++ b/apps/comments/l10n/fr.js @@ -9,7 +9,7 @@ OC.L10N.register( "Cancel" : "Annuler", "Edit comment" : "Modifier le commentaire", "[Deleted user]" : "[Utilisateur supprimé]", - "No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrer la conversation!", + "No comments yet, start the conversation!" : "Aucun commentaire actuellement, débutez une conversation !", "More comments …" : "Plus de commentaires ...", "Save" : "Enregistrer", "Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés", diff --git a/apps/comments/l10n/fr.json b/apps/comments/l10n/fr.json index c8aa168fc3c..71e3823b84a 100644 --- a/apps/comments/l10n/fr.json +++ b/apps/comments/l10n/fr.json @@ -7,7 +7,7 @@ "Cancel" : "Annuler", "Edit comment" : "Modifier le commentaire", "[Deleted user]" : "[Utilisateur supprimé]", - "No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrer la conversation!", + "No comments yet, start the conversation!" : "Aucun commentaire actuellement, débutez une conversation !", "More comments …" : "Plus de commentaires ...", "Save" : "Enregistrer", "Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés", diff --git a/apps/comments/l10n/nb_NO.js b/apps/comments/l10n/nb_NO.js index a73cdd768f4..d6ac9a2b7b6 100644 --- a/apps/comments/l10n/nb_NO.js +++ b/apps/comments/l10n/nb_NO.js @@ -26,6 +26,8 @@ OC.L10N.register( "%1$s commented on %2$s" : "%1$s kommenterte %2$s", "{author} commented on {file}" : "{author} kommenterte på {file}", "<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer", + "A (now) deleted user mentioned you in a comment on “%s”" : "En (now) slettet bruker nevnte deg i en kommentar til “%s”", + "A (now) deleted user mentioned you in a comment on “{file}”" : "A (now) slettet bruker nevnte deg i en kommentar til “{file}”", "%1$s mentioned you in a comment on “%2$s”" : "%1$s nevnte deg i en kommentar på “%2$s”", "{user} mentioned you in a comment on “{file}”" : "{user} nevnte deg i en kommentar på “{file}”", "Type in a new comment..." : "Skriv inn en ny kommentar...", diff --git a/apps/comments/l10n/nb_NO.json b/apps/comments/l10n/nb_NO.json index 84f83315f25..293eca39e84 100644 --- a/apps/comments/l10n/nb_NO.json +++ b/apps/comments/l10n/nb_NO.json @@ -24,6 +24,8 @@ "%1$s commented on %2$s" : "%1$s kommenterte %2$s", "{author} commented on {file}" : "{author} kommenterte på {file}", "<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer", + "A (now) deleted user mentioned you in a comment on “%s”" : "En (now) slettet bruker nevnte deg i en kommentar til “%s”", + "A (now) deleted user mentioned you in a comment on “{file}”" : "A (now) slettet bruker nevnte deg i en kommentar til “{file}”", "%1$s mentioned you in a comment on “%2$s”" : "%1$s nevnte deg i en kommentar på “%2$s”", "{user} mentioned you in a comment on “{file}”" : "{user} nevnte deg i en kommentar på “{file}”", "Type in a new comment..." : "Skriv inn en ny kommentar...", diff --git a/apps/comments/l10n/zh_CN.js b/apps/comments/l10n/zh_CN.js index a2eb29f322f..9a459c92b6e 100644 --- a/apps/comments/l10n/zh_CN.js +++ b/apps/comments/l10n/zh_CN.js @@ -8,7 +8,7 @@ OC.L10N.register( "Post" : "发布", "Cancel" : "取消", "Edit comment" : "编辑评论", - "[Deleted user]" : "[Deleted user]", + "[Deleted user]" : "[已删除用户]", "No comments yet, start the conversation!" : "还没有评论,开始对话吧!", "More comments …" : "更多评论 ...", "Save" : "保存", @@ -22,18 +22,18 @@ OC.L10N.register( "%1$s commented" : "%1$s 已评论", "{author} commented" : "{author} 评论了", "You commented on %1$s" : "您在 %1$s 的评论", - "You commented on {file}" : "您对 {file} 的注释", + "You commented on {file}" : "您对 {file} 的评论", "%1$s commented on %2$s" : "%1$s 评论了 %2$s", - "{author} commented on {file}" : "{author} 对 {file} 的注释", - "<strong>Comments</strong> for files" : "显示文件的<strong>注释</strong>", - "A (now) deleted user mentioned you in a comment on “%s”" : "一个(正)被删除的用户提醒您注释 “%s”", - "A (now) deleted user mentioned you in a comment on “{file}”" : "一个(正)被删除的用户提醒您注释 “{file}”", - "%1$s mentioned you in a comment on “%2$s”" : "%1$s 提醒您注释 “%2$s”", - "{user} mentioned you in a comment on “{file}”" : "{user} 提醒您注释 “{file}”", + "{author} commented on {file}" : "{author} 对 {file} 的评论", + "<strong>Comments</strong> for files" : "文件的<strong>评论</strong>", + "A (now) deleted user mentioned you in a comment on “%s”" : "一个(已)被删除的用户在 “%s” 的评论中提到了您", + "A (now) deleted user mentioned you in a comment on “{file}”" : "一个(已)被删除的用户在 “{file}” 的评论中提到了您", + "%1$s mentioned you in a comment on “%2$s”" : "%1$s 在 “%2$s” 的评论中提到了您", + "{user} mentioned you in a comment on “{file}”" : "{user} 在 “{file}” 的评论中提到了您", "Type in a new comment..." : "添加新评论...", "No other comments available" : "没有其他评论", "More comments..." : "更多评论...", "{count} unread comments" : "{count} 条未读评论", - "You commented on %2$s" : "你评论了 %2$s" + "You commented on %2$s" : "您评论了 %2$s" }, "nplurals=1; plural=0;"); diff --git a/apps/comments/l10n/zh_CN.json b/apps/comments/l10n/zh_CN.json index cbc878d898c..be867c5b856 100644 --- a/apps/comments/l10n/zh_CN.json +++ b/apps/comments/l10n/zh_CN.json @@ -6,7 +6,7 @@ "Post" : "发布", "Cancel" : "取消", "Edit comment" : "编辑评论", - "[Deleted user]" : "[Deleted user]", + "[Deleted user]" : "[已删除用户]", "No comments yet, start the conversation!" : "还没有评论,开始对话吧!", "More comments …" : "更多评论 ...", "Save" : "保存", @@ -20,18 +20,18 @@ "%1$s commented" : "%1$s 已评论", "{author} commented" : "{author} 评论了", "You commented on %1$s" : "您在 %1$s 的评论", - "You commented on {file}" : "您对 {file} 的注释", + "You commented on {file}" : "您对 {file} 的评论", "%1$s commented on %2$s" : "%1$s 评论了 %2$s", - "{author} commented on {file}" : "{author} 对 {file} 的注释", - "<strong>Comments</strong> for files" : "显示文件的<strong>注释</strong>", - "A (now) deleted user mentioned you in a comment on “%s”" : "一个(正)被删除的用户提醒您注释 “%s”", - "A (now) deleted user mentioned you in a comment on “{file}”" : "一个(正)被删除的用户提醒您注释 “{file}”", - "%1$s mentioned you in a comment on “%2$s”" : "%1$s 提醒您注释 “%2$s”", - "{user} mentioned you in a comment on “{file}”" : "{user} 提醒您注释 “{file}”", + "{author} commented on {file}" : "{author} 对 {file} 的评论", + "<strong>Comments</strong> for files" : "文件的<strong>评论</strong>", + "A (now) deleted user mentioned you in a comment on “%s”" : "一个(已)被删除的用户在 “%s” 的评论中提到了您", + "A (now) deleted user mentioned you in a comment on “{file}”" : "一个(已)被删除的用户在 “{file}” 的评论中提到了您", + "%1$s mentioned you in a comment on “%2$s”" : "%1$s 在 “%2$s” 的评论中提到了您", + "{user} mentioned you in a comment on “{file}”" : "{user} 在 “{file}” 的评论中提到了您", "Type in a new comment..." : "添加新评论...", "No other comments available" : "没有其他评论", "More comments..." : "更多评论...", "{count} unread comments" : "{count} 条未读评论", - "You commented on %2$s" : "你评论了 %2$s" + "You commented on %2$s" : "您评论了 %2$s" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/dav/appinfo/v1/webdav.php b/apps/dav/appinfo/v1/webdav.php index f04bf406334..5ad11ceada8 100644 --- a/apps/dav/appinfo/v1/webdav.php +++ b/apps/dav/appinfo/v1/webdav.php @@ -25,6 +25,7 @@ // no php execution timeout for webdav set_time_limit(0); +ignore_user_abort(true); // Turn off output buffering to prevent memory problems \OC_Util::obEnd(); diff --git a/apps/dav/appinfo/v2/remote.php b/apps/dav/appinfo/v2/remote.php index ab05e376503..b4a6578a41a 100644 --- a/apps/dav/appinfo/v2/remote.php +++ b/apps/dav/appinfo/v2/remote.php @@ -21,6 +21,7 @@ */ // no php execution timeout for webdav set_time_limit(0); +ignore_user_abort(true); // Turn off output buffering to prevent memory problems \OC_Util::obEnd(); diff --git a/apps/dav/lib/CalDAV/CalendarObject.php b/apps/dav/lib/CalDAV/CalendarObject.php index 6d429fa6bf5..c5dc50650af 100644 --- a/apps/dav/lib/CalDAV/CalendarObject.php +++ b/apps/dav/lib/CalDAV/CalendarObject.php @@ -1,8 +1,10 @@ <?php /** * @copyright Copyright (c) 2016, ownCloud, Inc. + * @copyright Copyright (c) 2017, Georg Ehrke * * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Georg Ehrke <oc.list@georgehrke.com> * * @license AGPL-3.0 * @@ -42,7 +44,11 @@ class CalendarObject extends \Sabre\CalDAV\CalendarObject { } private function isShared() { - return isset($this->calendarInfo['{http://owncloud.org/ns}owner-principal']); + if (!isset($this->calendarInfo['{http://owncloud.org/ns}owner-principal'])) { + return false; + } + + return $this->calendarInfo['{http://owncloud.org/ns}owner-principal'] !== $this->calendarInfo['principaluri']; } /** diff --git a/apps/dav/tests/unit/CalDAV/CalendarTest.php b/apps/dav/tests/unit/CalDAV/CalendarTest.php index d0fb2d19243..70a072f04de 100644 --- a/apps/dav/tests/unit/CalDAV/CalendarTest.php +++ b/apps/dav/tests/unit/CalDAV/CalendarTest.php @@ -334,17 +334,15 @@ EOD; ->willReturn($calObject1)->with(666, 'event-1'); $calendarInfo = [ + '{http://owncloud.org/ns}owner-principal' => $isShared ? 'user1' : 'user2', 'principaluri' => 'user2', 'id' => 666, 'uri' => 'cal', ]; - - if ($isShared) { - $calendarInfo['{http://owncloud.org/ns}owner-principal'] = 'user1'; - - } $c = new Calendar($backend, $calendarInfo, $this->l10n); + $this->assertEquals(count($c->getChildren()), $expectedChildren); + // test private event $privateEvent = $c->getChild('event-1'); $calData = $privateEvent->get(); diff --git a/apps/encryption/css/settings-personal.css b/apps/encryption/css/settings-personal.css index 8eb5bedcb06..4bab1a8d46b 100644 --- a/apps/encryption/css/settings-personal.css +++ b/apps/encryption/css/settings-personal.css @@ -8,3 +8,8 @@ , #recoveryEnabledSuccess { display: none; } + +/* icons for sidebar */ +.nav-icon-basic-encryption-module { + background-image: url('../img/app.svg?v=1'); +}
\ No newline at end of file diff --git a/apps/encryption/l10n/fr.js b/apps/encryption/l10n/fr.js index 77a433ef58d..14b693baa28 100644 --- a/apps/encryption/l10n/fr.js +++ b/apps/encryption/l10n/fr.js @@ -12,7 +12,7 @@ OC.L10N.register( "Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération", "Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération", "Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération", - "Password successfully changed." : "Mot de passe changé avec succès.", + "Password successfully changed." : "Mot de passe modifié avec succès.", "Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.", "Recovery Key disabled" : "Clé de récupération désactivée", "Recovery Key enabled" : "Clef de récupération activée", diff --git a/apps/encryption/l10n/fr.json b/apps/encryption/l10n/fr.json index 2129bd43828..74c0b7492a8 100644 --- a/apps/encryption/l10n/fr.json +++ b/apps/encryption/l10n/fr.json @@ -10,7 +10,7 @@ "Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération", "Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération", "Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération", - "Password successfully changed." : "Mot de passe changé avec succès.", + "Password successfully changed." : "Mot de passe modifié avec succès.", "Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.", "Recovery Key disabled" : "Clé de récupération désactivée", "Recovery Key enabled" : "Clef de récupération activée", diff --git a/apps/encryption/l10n/id.js b/apps/encryption/l10n/id.js index c48146d1df8..41a6cfd74a7 100644 --- a/apps/encryption/l10n/id.js +++ b/apps/encryption/l10n/id.js @@ -34,6 +34,7 @@ OC.L10N.register( "The share will expire on %s." : "Pembagian akan berakhir pada %s.", "Cheers!" : "Horee!", "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>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>", + "Default encryption module" : "Modul bawaan enkripsi", "Encrypt the home storage" : "Enkripsi penyimpanan rumah", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Mengaktifkan opsi ini akan mengenkripsi semua berkas yang disimpan pada penyimpanan utama, jika tidak diaktifkan maka hanya berkas pada penyimpanan eksternal saja yang akan dienkripsi.", "Enable recovery key" : "Aktifkan kunci pemulihan", diff --git a/apps/encryption/l10n/id.json b/apps/encryption/l10n/id.json index 536f4616ddc..e653db4f950 100644 --- a/apps/encryption/l10n/id.json +++ b/apps/encryption/l10n/id.json @@ -32,6 +32,7 @@ "The share will expire on %s." : "Pembagian akan berakhir pada %s.", "Cheers!" : "Horee!", "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>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>", + "Default encryption module" : "Modul bawaan enkripsi", "Encrypt the home storage" : "Enkripsi penyimpanan rumah", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Mengaktifkan opsi ini akan mengenkripsi semua berkas yang disimpan pada penyimpanan utama, jika tidak diaktifkan maka hanya berkas pada penyimpanan eksternal saja yang akan dienkripsi.", "Enable recovery key" : "Aktifkan kunci pemulihan", diff --git a/apps/encryption/l10n/sv.js b/apps/encryption/l10n/sv.js index 0b8530bf006..2a5893af8bf 100644 --- a/apps/encryption/l10n/sv.js +++ b/apps/encryption/l10n/sv.js @@ -34,7 +34,7 @@ OC.L10N.register( "The share will expire on %s." : "Utdelningen kommer att upphöra %s.", "Cheers!" : "Ha de fint!", "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>" : "Hallå där, <br> Administratören aktiverade serverkryptering. Alla dina filer har blivit krypterade med lösenordet: <strong>%s</ strong>. <br> Gå till i din profil för att ändra krypteringslösenordet till ditt egna lösenord. Ange lösenordet ovan som \"Gammalt lösenord\" och ange sedan ditt egna lösenord.<br>", - "Default encryption module" : "Standard krypteringsfunktion", + "Default encryption module" : "Krypteringsfunktion", "Encrypt the home storage" : "Kryptera alla filer i molnet", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aktivering av det här alternativet krypterar alla filer som är lagrade på huvudlagringsplatsen, annars kommer bara filer på extern lagringsplats att krypteras", "Enable recovery key" : "Aktivera återställningsnyckel", @@ -47,7 +47,7 @@ OC.L10N.register( "New recovery key password" : "Nytt lösenord", "Repeat new recovery key password" : "Repetera lösenord", "Change Password" : "Byt lösenord", - "Basic encryption module" : "Krypteringsmodul", + "Basic encryption module" : "Kryptering", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen", "Your private key password no longer matches your log-in password." : "Ditt lösenord för din privata nyckel matchar inte längre ditt inloggningslösenord.", "Set your old private key password to your current log-in password:" : "Sätt ditt gamla privatnyckellösenord till ditt aktuella inloggningslösenord:", diff --git a/apps/encryption/l10n/sv.json b/apps/encryption/l10n/sv.json index 976336ae068..f0e64f2c807 100644 --- a/apps/encryption/l10n/sv.json +++ b/apps/encryption/l10n/sv.json @@ -32,7 +32,7 @@ "The share will expire on %s." : "Utdelningen kommer att upphöra %s.", "Cheers!" : "Ha de fint!", "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>" : "Hallå där, <br> Administratören aktiverade serverkryptering. Alla dina filer har blivit krypterade med lösenordet: <strong>%s</ strong>. <br> Gå till i din profil för att ändra krypteringslösenordet till ditt egna lösenord. Ange lösenordet ovan som \"Gammalt lösenord\" och ange sedan ditt egna lösenord.<br>", - "Default encryption module" : "Standard krypteringsfunktion", + "Default encryption module" : "Krypteringsfunktion", "Encrypt the home storage" : "Kryptera alla filer i molnet", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aktivering av det här alternativet krypterar alla filer som är lagrade på huvudlagringsplatsen, annars kommer bara filer på extern lagringsplats att krypteras", "Enable recovery key" : "Aktivera återställningsnyckel", @@ -45,7 +45,7 @@ "New recovery key password" : "Nytt lösenord", "Repeat new recovery key password" : "Repetera lösenord", "Change Password" : "Byt lösenord", - "Basic encryption module" : "Krypteringsmodul", + "Basic encryption module" : "Kryptering", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen", "Your private key password no longer matches your log-in password." : "Ditt lösenord för din privata nyckel matchar inte längre ditt inloggningslösenord.", "Set your old private key password to your current log-in password:" : "Sätt ditt gamla privatnyckellösenord till ditt aktuella inloggningslösenord:", diff --git a/apps/federatedfilesharing/l10n/fr.js b/apps/federatedfilesharing/l10n/fr.js index 4a1d7767965..092b87fb9e8 100644 --- a/apps/federatedfilesharing/l10n/fr.js +++ b/apps/federatedfilesharing/l10n/fr.js @@ -29,7 +29,7 @@ OC.L10N.register( "File is already shared with %s" : "Le fichier est déjà partagé avec %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Le partage de %s a échoué, impossible de trouver %s, le serveur est peut-être momentanément injoignable ou utilise un certificat auto-signé.", "Could not find share" : "Impossible de trouver le partage", - "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)", + "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)", "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vous avez reçu {share} comme partage distant de la part de {user} (de la part de {behalf})", "You received \"%3$s\" as a remote share from %1$s" : "Vous avez reçu \"%3$s\" comme partage distant de %1$s", "You received {share} as a remote share from {user}" : "Vous avez reçu {share} comme partage distant de la part de {user}", diff --git a/apps/federatedfilesharing/l10n/fr.json b/apps/federatedfilesharing/l10n/fr.json index 670a3bd043c..f90620b940d 100644 --- a/apps/federatedfilesharing/l10n/fr.json +++ b/apps/federatedfilesharing/l10n/fr.json @@ -27,7 +27,7 @@ "File is already shared with %s" : "Le fichier est déjà partagé avec %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Le partage de %s a échoué, impossible de trouver %s, le serveur est peut-être momentanément injoignable ou utilise un certificat auto-signé.", "Could not find share" : "Impossible de trouver le partage", - "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)", + "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)", "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vous avez reçu {share} comme partage distant de la part de {user} (de la part de {behalf})", "You received \"%3$s\" as a remote share from %1$s" : "Vous avez reçu \"%3$s\" comme partage distant de %1$s", "You received {share} as a remote share from {user}" : "Vous avez reçu {share} comme partage distant de la part de {user}", diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 7956ef5c6ae..05b8e58cbe4 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -768,46 +768,20 @@ html.ie8 #controls .button.new { } .newFileMenu { - width: 200px; - margin-left: -56px; - margin-top: 25px; + font-weight: 300; + top: 100%; + margin-top: 4px; + min-width: 100px; + margin-left: 7px; z-index: 1001; } -.newFileMenu .menuitem { - white-space: nowrap; - overflow: hidden; -} -.newFileMenu.popovermenu a.menuitem, -.newFileMenu.popovermenu label.menuitem, -.newFileMenu.popovermenu .menuitem { - padding: 0; - margin: 0; -} - -.newFileMenu.popovermenu a.menuitem.active { - opacity: 1; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); -} - -.newFileMenu.bubble:after { - left: 75px; - right: auto; -} -.newFileMenu.bubble:before { - left: 75px; - right: auto; -} - .newFileMenu .filenameform { display: inline-block; } .newFileMenu .filenameform input { - width: 100%; - box-sizing: border-box; - margin: -2px 0; + margin: 2px 0; } #fileList .popovermenu .action { @@ -835,6 +809,9 @@ html.ie8 #controls .button.new { height: 15px; } +.app-files .actions .button.new { + position: relative; +} .app-files .actions .button.new .icon { margin-bottom: 2px; } diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index bb50814dfdc..3a59da53517 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -2478,6 +2478,11 @@ if (!_.isArray(file)) { file = [file]; } + if (file.length === 1) { + _.defer(function() { + this.showDetailsView(file[0]); + }.bind(this)); + } this.highlightFiles(file, function($tr) { $tr.addClass('searchresult'); $tr.one('hover', function() { @@ -2951,7 +2956,7 @@ this._newFileMenu = new OCA.Files.NewFileMenu({ fileList: this }); - $('body').append(this._newFileMenu.$el); + $('.actions').append(this._newFileMenu.$el); } this._newFileMenu.showAt($target); diff --git a/apps/files/js/newfilemenu.js b/apps/files/js/newfilemenu.js index 75c4cdcc0ba..e4023c62342 100644 --- a/apps/files/js/newfilemenu.js +++ b/apps/files/js/newfilemenu.js @@ -38,7 +38,8 @@ */ var NewFileMenu = OC.Backbone.View.extend({ tagName: 'div', - className: 'newFileMenu popovermenu bubble hidden open menu', + // Menu is opened by default because it's rendered on "add-button" click + className: 'newFileMenu popovermenu bubble menu open menu-left', events: { 'click .menuitem': '_onClickAction' @@ -235,13 +236,6 @@ */ showAt: function($target) { this.render(); - var targetOffset = $target.offset(); - this.$el.css({ - left: targetOffset.left, - top: targetOffset.top + $target.height() - }); - this.$el.removeClass('hidden'); - OC.showMenu(null, this.$el); } }); diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index afd1f8142c2..0127235b605 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -76,7 +76,7 @@ OC.L10N.register( "Added to favorites" : "Zu den Favoriten hinzugefügt", "Removed from favorites" : "Aus den Favoriten entfernt", "You added {file} to your favorites" : "Du hast {file} zu deinen Favoriten hinzugefügt", - "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten hentfernt", + "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten entfernt", "File changes" : "Dateiänderungen", "Created by {user}" : "Erstellt durch {user}", "Changed by {user}" : "Geändert durch {user}", @@ -98,7 +98,7 @@ OC.L10N.register( "You moved {oldfile} to {newfile}" : "Du hast {oldfile} nach {newfile} verschoben", "{user} moved {oldfile} to {newfile}" : "{user} hat {oldfile} nach {newfile} verschoben", "A file has been added to or removed from your <strong>favorites</strong>" : "Eine Datei wurde deinen <strong>Favoriten</strong> hinzugefügt oder daraus entfernt", - "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei oder Ordner wurden <strong>geändert</strong> oder <strong>umbenannt</strong>", + "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei / Ordner wurde <strong>geändert</strong> oder <strong>umbenannt</strong>", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A new file or folder has been <strong>deleted</strong>" : "Neue Datei oder Verzeichnis wurde <strong>gelöscht</strong>", "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf deine <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>", diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index 30a2730b47c..d64a9eb0850 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -74,7 +74,7 @@ "Added to favorites" : "Zu den Favoriten hinzugefügt", "Removed from favorites" : "Aus den Favoriten entfernt", "You added {file} to your favorites" : "Du hast {file} zu deinen Favoriten hinzugefügt", - "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten hentfernt", + "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten entfernt", "File changes" : "Dateiänderungen", "Created by {user}" : "Erstellt durch {user}", "Changed by {user}" : "Geändert durch {user}", @@ -96,7 +96,7 @@ "You moved {oldfile} to {newfile}" : "Du hast {oldfile} nach {newfile} verschoben", "{user} moved {oldfile} to {newfile}" : "{user} hat {oldfile} nach {newfile} verschoben", "A file has been added to or removed from your <strong>favorites</strong>" : "Eine Datei wurde deinen <strong>Favoriten</strong> hinzugefügt oder daraus entfernt", - "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei oder Ordner wurden <strong>geändert</strong> oder <strong>umbenannt</strong>", + "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei / Ordner wurde <strong>geändert</strong> oder <strong>umbenannt</strong>", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A new file or folder has been <strong>deleted</strong>" : "Neue Datei oder Verzeichnis wurde <strong>gelöscht</strong>", "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf deine <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>", diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index 9ef2aed2802..17961360c98 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -76,7 +76,7 @@ OC.L10N.register( "Added to favorites" : "Zu den Favoriten hinzugefügt", "Removed from favorites" : "Aus den Favoriten entfernt", "You added {file} to your favorites" : "Sie haben {file} zu Ihren Favoriten hinzugefügt", - "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten hentfernt", + "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten entfernt", "File changes" : "Datei geändert", "Created by {user}" : "Erstellt durch {user}", "Changed by {user}" : "Geändert durch {user}", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index 3466d7ebd9a..926434c523c 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -74,7 +74,7 @@ "Added to favorites" : "Zu den Favoriten hinzugefügt", "Removed from favorites" : "Aus den Favoriten entfernt", "You added {file} to your favorites" : "Sie haben {file} zu Ihren Favoriten hinzugefügt", - "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten hentfernt", + "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten entfernt", "File changes" : "Datei geändert", "Created by {user}" : "Erstellt durch {user}", "Changed by {user}" : "Geändert durch {user}", diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index dcd0928ca25..8d110fe5f3f 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -1,24 +1,24 @@ OC.L10N.register( "files", { - "Storage is temporarily not available" : "Le support de stockage est temporairement non disponible", - "Storage invalid" : "Support de stockage non valable", + "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible", + "Storage invalid" : "Support de stockage invalide", "Unknown error" : "Erreur inconnue ", "Files" : "Fichiers", "All files" : "Tous les fichiers", "Recent" : "Récent", - "File could not be found" : "Ce fichier n'a pu être trouvé.", + "File could not be found" : "Fichier introuvable", "Home" : "Mes fichiers", "Close" : "Fermer", "Favorites" : "Favoris", "Could not create folder \"{dir}\"" : "Impossible de créer le dossier \"{dir}\"", - "Upload cancelled." : "Envoi annulé.", + "Upload cancelled." : "Téléversement annulé.", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible d'envoyer {filename} car il s'agit d'un répertoire ou d'un fichier de taille nulle", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace libre insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles", "Target folder \"{dir}\" does not exist any more" : "Le dossier cible « {dir} » n'existe plus", - "Not enough free space" : "Pas assez d'espace disponible", + "Not enough free space" : "Espace disponible insuffisant", "Uploading..." : "Téléversement en cours…", - "..." : "...", + "..." : "…", "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} sur {totalSize} ({bitrate})", "Actions" : "Actions", "Download" : "Télécharger", @@ -34,7 +34,7 @@ OC.L10N.register( "Pending" : "En attente", "Unable to determine date" : "Impossible de déterminer la date", "This operation is forbidden" : "Cette opération est interdite", - "This directory is unavailable, please check the logs or contact the administrator" : "Ce répertoire n'est pas disponible. Consultez les logs ou contactez votre administrateur", + "This directory is unavailable, please check the logs or contact the administrator" : "Ce dossier n'est pas disponible. Consultez les logs ou contactez votre administrateur", "Could not move \"{file}\", target exists" : "Impossible de déplacer \"{file}\", la cible existe", "Could not move \"{file}\"" : "Impossible de déplacer \"{file}\"", "{newName} already exists" : "{newName} existe déjà", @@ -52,18 +52,18 @@ OC.L10N.register( "_%n folder_::_%n folders_" : ["%n dossier","%n dossiers"], "_%n file_::_%n files_" : ["%n fichier","%n fichiers"], "{dirs} and {files}" : "{dirs} et {files}", - "_including %n hidden_::_including %n hidden_" : ["inclus %n caché","inclus %n cachés"], - "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici", + "_including %n hidden_::_including %n hidden_" : ["inclus %n masqué","inclus %n masqués"], + "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'envoyer ou de créer des fichiers ici", "_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"], "New" : "Nouveau", "\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.", "File name cannot be empty." : "Le nom de fichier ne peut être vide.", - "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisés!", - "Your storage is full, files can not be updated or synced anymore!" : "Votre espage de stockage est plein, les fichiers ne peuvent plus être ajoutés ou synchronisés !", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !", + "Your storage is full, files can not be updated or synced anymore!" : "Votre espace de stockage est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"], - "View in folder" : "Voir dans le dossier", + "View in folder" : "Afficher dans le dossier", "Path" : "Chemin", "_%n byte_::_%n bytes_" : ["%n octet","%n octets"], "Favorited" : "Marqué comme favori", @@ -71,13 +71,13 @@ OC.L10N.register( "Copy local link" : "Copier le dossier local", "Folder" : "Dossier", "New folder" : "Nouveau dossier", - "Upload" : "Chargement", + "Upload" : "Téléverser", "An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes", "Added to favorites" : "Ajouté aux favoris", "Removed from favorites" : "Retiré des favoris", "You added {file} to your favorites" : "Vous avez ajouté {file} à vos favoris", "You removed {file} from your favorites" : "Vous avez retiré {file} de vos favoris", - "File changes" : "Modifications du fichier", + "File changes" : "Modifications de fichiers", "Created by {user}" : "Créé par {user}", "Changed by {user}" : "Modifié par {user}", "Deleted by {user}" : "Supprimé par {user}", @@ -107,9 +107,9 @@ OC.L10N.register( "File handling" : "Gestion de fichiers", "Maximum upload size" : "Taille max. d'envoi", "max. possible: " : "Max. possible :", - "Save" : "Sauvegarder", + "Save" : "Enregistrer", "With PHP-FPM it might take 5 minutes for changes to be applied." : "Avec PHP-FPM il peut se passer jusqu'à 5 minutes pour que les changements soient appliqués.", - "Missing permissions to edit from here." : "Manque de permissions pour éditer à partir d'ici.", + "Missing permissions to edit from here." : "Permissions insuffisantes pour modifier à partir d'ici.", "Settings" : "Paramètres", "Show hidden files" : "Afficher les fichiers cachés", "WebDAV" : "WebDAV", @@ -129,21 +129,21 @@ OC.L10N.register( "Deleted files" : "Fichiers supprimés", "Text file" : "Fichier texte", "New text file.txt" : "Nouveau fichier texte.txt", - "Storage not available" : "Support de stockage non disponible", + "Storage not available" : "Espace de stockage non disponible", "Unable to set upload directory." : "Impossible de définir le dossier de destination.", "Invalid Token" : "Jeton non valide", "No file was uploaded. Unknown error" : "Aucun fichier n'a été envoyé. Erreur inconnue", - "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès.", + "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Le fichier envoyé dépasse l'instruction upload_max_filesize située dans le fichier php.ini :", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML.", "The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé.", "No file was uploaded" : "Pas de fichier envoyé.", "Missing a temporary folder" : "Absence de dossier temporaire", "Failed to write to disk" : "Erreur d'écriture sur le disque", - "Not enough storage available" : "Trop peu d'espace de stockage disponible", + "Not enough storage available" : "Espace disponible insuffisant", "The target folder has been moved or deleted." : "Le dossier cible a été déplacé ou supprimé.", - "Upload failed. Could not find uploaded file" : "L'envoi a échoué. Impossible de trouver le fichier envoyé.", - "Upload failed. Could not get file info." : "L'envoi a échoué. Impossible d'obtenir les informations du fichier.", + "Upload failed. Could not find uploaded file" : "Le téléversement a échoué. Impossible de trouver le fichier envoyé.", + "Upload failed. Could not get file info." : "Le téléversement a échoué. Impossible d'obtenir les informations du fichier.", "Invalid directory." : "Dossier non valide.", "Total file size {size1} exceeds upload limit {size2}" : "La taille totale du fichier {size1} excède la taille maximale d'envoi {size2}", "Error uploading file \"{fileName}\": {message}" : "Erreur lors de l'envoi du fichier \"{fileName}\" : {message}", @@ -155,10 +155,10 @@ OC.L10N.register( "{seconds} second{plural_s} left" : "{seconds} seconde{plural_s} restante{plural_s}", "{seconds}s" : "{seconds}s", "Any moment now..." : "D'ici quelques instants…", - "Soon..." : "Bientôt...", + "Soon..." : "Bientôt…", "File upload is in progress. Leaving the page now will cancel the upload." : "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.", "No entries in this folder match '{filter}'" : "Aucune entrée de ce dossier ne correspond à '{filter}'", - "Local link" : "Dossier local", + "Local link" : "Lien local", "{newname} already exists" : "{newname} existe déjà", "A file or folder has been <strong>changed</strong>" : "Un fichier ou un répertoire a été <strong>modifié</strong>", "A file or folder has been <strong>deleted</strong>" : "Un fichier ou un répertoire a été <strong>supprimé</strong>", diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index e990093bbbb..7538abdba42 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -1,22 +1,22 @@ { "translations": { - "Storage is temporarily not available" : "Le support de stockage est temporairement non disponible", - "Storage invalid" : "Support de stockage non valable", + "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible", + "Storage invalid" : "Support de stockage invalide", "Unknown error" : "Erreur inconnue ", "Files" : "Fichiers", "All files" : "Tous les fichiers", "Recent" : "Récent", - "File could not be found" : "Ce fichier n'a pu être trouvé.", + "File could not be found" : "Fichier introuvable", "Home" : "Mes fichiers", "Close" : "Fermer", "Favorites" : "Favoris", "Could not create folder \"{dir}\"" : "Impossible de créer le dossier \"{dir}\"", - "Upload cancelled." : "Envoi annulé.", + "Upload cancelled." : "Téléversement annulé.", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible d'envoyer {filename} car il s'agit d'un répertoire ou d'un fichier de taille nulle", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace libre insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles", "Target folder \"{dir}\" does not exist any more" : "Le dossier cible « {dir} » n'existe plus", - "Not enough free space" : "Pas assez d'espace disponible", + "Not enough free space" : "Espace disponible insuffisant", "Uploading..." : "Téléversement en cours…", - "..." : "...", + "..." : "…", "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} sur {totalSize} ({bitrate})", "Actions" : "Actions", "Download" : "Télécharger", @@ -32,7 +32,7 @@ "Pending" : "En attente", "Unable to determine date" : "Impossible de déterminer la date", "This operation is forbidden" : "Cette opération est interdite", - "This directory is unavailable, please check the logs or contact the administrator" : "Ce répertoire n'est pas disponible. Consultez les logs ou contactez votre administrateur", + "This directory is unavailable, please check the logs or contact the administrator" : "Ce dossier n'est pas disponible. Consultez les logs ou contactez votre administrateur", "Could not move \"{file}\", target exists" : "Impossible de déplacer \"{file}\", la cible existe", "Could not move \"{file}\"" : "Impossible de déplacer \"{file}\"", "{newName} already exists" : "{newName} existe déjà", @@ -50,18 +50,18 @@ "_%n folder_::_%n folders_" : ["%n dossier","%n dossiers"], "_%n file_::_%n files_" : ["%n fichier","%n fichiers"], "{dirs} and {files}" : "{dirs} et {files}", - "_including %n hidden_::_including %n hidden_" : ["inclus %n caché","inclus %n cachés"], - "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici", + "_including %n hidden_::_including %n hidden_" : ["inclus %n masqué","inclus %n masqués"], + "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'envoyer ou de créer des fichiers ici", "_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"], "New" : "Nouveau", "\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.", "File name cannot be empty." : "Le nom de fichier ne peut être vide.", - "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisés!", - "Your storage is full, files can not be updated or synced anymore!" : "Votre espage de stockage est plein, les fichiers ne peuvent plus être ajoutés ou synchronisés !", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !", + "Your storage is full, files can not be updated or synced anymore!" : "Votre espace de stockage est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"], - "View in folder" : "Voir dans le dossier", + "View in folder" : "Afficher dans le dossier", "Path" : "Chemin", "_%n byte_::_%n bytes_" : ["%n octet","%n octets"], "Favorited" : "Marqué comme favori", @@ -69,13 +69,13 @@ "Copy local link" : "Copier le dossier local", "Folder" : "Dossier", "New folder" : "Nouveau dossier", - "Upload" : "Chargement", + "Upload" : "Téléverser", "An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes", "Added to favorites" : "Ajouté aux favoris", "Removed from favorites" : "Retiré des favoris", "You added {file} to your favorites" : "Vous avez ajouté {file} à vos favoris", "You removed {file} from your favorites" : "Vous avez retiré {file} de vos favoris", - "File changes" : "Modifications du fichier", + "File changes" : "Modifications de fichiers", "Created by {user}" : "Créé par {user}", "Changed by {user}" : "Modifié par {user}", "Deleted by {user}" : "Supprimé par {user}", @@ -105,9 +105,9 @@ "File handling" : "Gestion de fichiers", "Maximum upload size" : "Taille max. d'envoi", "max. possible: " : "Max. possible :", - "Save" : "Sauvegarder", + "Save" : "Enregistrer", "With PHP-FPM it might take 5 minutes for changes to be applied." : "Avec PHP-FPM il peut se passer jusqu'à 5 minutes pour que les changements soient appliqués.", - "Missing permissions to edit from here." : "Manque de permissions pour éditer à partir d'ici.", + "Missing permissions to edit from here." : "Permissions insuffisantes pour modifier à partir d'ici.", "Settings" : "Paramètres", "Show hidden files" : "Afficher les fichiers cachés", "WebDAV" : "WebDAV", @@ -127,21 +127,21 @@ "Deleted files" : "Fichiers supprimés", "Text file" : "Fichier texte", "New text file.txt" : "Nouveau fichier texte.txt", - "Storage not available" : "Support de stockage non disponible", + "Storage not available" : "Espace de stockage non disponible", "Unable to set upload directory." : "Impossible de définir le dossier de destination.", "Invalid Token" : "Jeton non valide", "No file was uploaded. Unknown error" : "Aucun fichier n'a été envoyé. Erreur inconnue", - "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès.", + "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Le fichier envoyé dépasse l'instruction upload_max_filesize située dans le fichier php.ini :", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML.", "The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé.", "No file was uploaded" : "Pas de fichier envoyé.", "Missing a temporary folder" : "Absence de dossier temporaire", "Failed to write to disk" : "Erreur d'écriture sur le disque", - "Not enough storage available" : "Trop peu d'espace de stockage disponible", + "Not enough storage available" : "Espace disponible insuffisant", "The target folder has been moved or deleted." : "Le dossier cible a été déplacé ou supprimé.", - "Upload failed. Could not find uploaded file" : "L'envoi a échoué. Impossible de trouver le fichier envoyé.", - "Upload failed. Could not get file info." : "L'envoi a échoué. Impossible d'obtenir les informations du fichier.", + "Upload failed. Could not find uploaded file" : "Le téléversement a échoué. Impossible de trouver le fichier envoyé.", + "Upload failed. Could not get file info." : "Le téléversement a échoué. Impossible d'obtenir les informations du fichier.", "Invalid directory." : "Dossier non valide.", "Total file size {size1} exceeds upload limit {size2}" : "La taille totale du fichier {size1} excède la taille maximale d'envoi {size2}", "Error uploading file \"{fileName}\": {message}" : "Erreur lors de l'envoi du fichier \"{fileName}\" : {message}", @@ -153,10 +153,10 @@ "{seconds} second{plural_s} left" : "{seconds} seconde{plural_s} restante{plural_s}", "{seconds}s" : "{seconds}s", "Any moment now..." : "D'ici quelques instants…", - "Soon..." : "Bientôt...", + "Soon..." : "Bientôt…", "File upload is in progress. Leaving the page now will cancel the upload." : "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.", "No entries in this folder match '{filter}'" : "Aucune entrée de ce dossier ne correspond à '{filter}'", - "Local link" : "Dossier local", + "Local link" : "Lien local", "{newname} already exists" : "{newname} existe déjà", "A file or folder has been <strong>changed</strong>" : "Un fichier ou un répertoire a été <strong>modifié</strong>", "A file or folder has been <strong>deleted</strong>" : "Un fichier ou un répertoire a été <strong>supprimé</strong>", diff --git a/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js index 13504df625a..a78413903b8 100644 --- a/apps/files/l10n/hu_HU.js +++ b/apps/files/l10n/hu_HU.js @@ -28,6 +28,7 @@ OC.L10N.register( "Delete" : "Törlés", "Disconnect storage" : "Tároló leválasztása", "Unshare" : "A megosztás visszavonása", + "Could not load info for file \"{file}\"" : "Nem sikerült betölteni az információs fájl ehhez: \"{file}\"", "Details" : "Részletek", "Select" : "Kiválaszt", "Pending" : "Folyamatban", diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json index 2eab8691b64..f0606da7774 100644 --- a/apps/files/l10n/hu_HU.json +++ b/apps/files/l10n/hu_HU.json @@ -26,6 +26,7 @@ "Delete" : "Törlés", "Disconnect storage" : "Tároló leválasztása", "Unshare" : "A megosztás visszavonása", + "Could not load info for file \"{file}\"" : "Nem sikerült betölteni az információs fájl ehhez: \"{file}\"", "Details" : "Részletek", "Select" : "Kiválaszt", "Pending" : "Folyamatban", diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js index a3178964e31..009b2077182 100644 --- a/apps/files/l10n/ja.js +++ b/apps/files/l10n/ja.js @@ -28,6 +28,7 @@ OC.L10N.register( "Delete" : "削除", "Disconnect storage" : "ストレージを切断する", "Unshare" : "共有解除", + "Could not load info for file \"{file}\"" : "\"{file}\" ファイルの情報を読み込めませんでした", "Details" : "詳細", "Select" : "選択", "Pending" : "中断", diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json index 4c3db9acc3d..804156d6ee7 100644 --- a/apps/files/l10n/ja.json +++ b/apps/files/l10n/ja.json @@ -26,6 +26,7 @@ "Delete" : "削除", "Disconnect storage" : "ストレージを切断する", "Unshare" : "共有解除", + "Could not load info for file \"{file}\"" : "\"{file}\" ファイルの情報を読み込めませんでした", "Details" : "詳細", "Select" : "選択", "Pending" : "中断", diff --git a/apps/files/l10n/lv.js b/apps/files/l10n/lv.js index 80e636ff5f0..c7a118853d4 100644 --- a/apps/files/l10n/lv.js +++ b/apps/files/l10n/lv.js @@ -1,6 +1,7 @@ OC.L10N.register( "files", { + "Storage is temporarily not available" : "Glabātuve īslaicīgi nav pieejama", "Storage invalid" : "Nepareiza glabātuve", "Unknown error" : "Nezināma kļūda", "Files" : "Datnes", @@ -14,12 +15,14 @@ OC.L10N.register( "Upload cancelled." : "Augšupielāde ir atcelta.", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Neizdodas augšupielādēt {filename}, jo tā ir vai nu mape vai 0 baitu saturoša datne.", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nav pietiekami daudz brīvas vietas. Tiek augšupielādēti {size1}, bet pieejami tikai {size2}", + "Not enough free space" : "Nav pietiekami daudz brīvas vietas", "Uploading..." : "Augšupielādē...", "..." : "...", "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} no {totalSize} ({bitrate})", "Actions" : "Darbības", "Download" : "Lejupielādēt", "Rename" : "Pārsaukt", + "Move" : "Pārvietot", "Delete" : "Dzēst", "Disconnect storage" : "Atvienot glabātuvi", "Unshare" : "Pārtraukt koplietošanu", @@ -64,6 +67,7 @@ OC.L10N.register( "New folder" : "Jauna mape", "Upload" : "Augšupielādēt", "An error occurred while trying to update the tags" : "Notika kļūda atjaunojot atzīmi", + "You restored {file}" : "Tu atjaunoji {file}", "A new file or folder has been <strong>created</strong>" : "<strong>Izveidota</strong> jauna datne vai mape", "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitēt ziņojumus par jūsu <strong>iecienīto datņu</strong> izveidošanu un izmaiņām <em>(tikai datu straumei)</em>", "Upload (max. %s)" : "Augšupielādēt (maks. %s)", @@ -85,6 +89,10 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Augšupielādējamās datnes pārsniedz servera pieļaujamo datņu augšupielādes apjomu", "No favorites" : "Nav favorītu", "Files and folders you mark as favorite will show up here" : "Datnes un mapes, ko atzīmēsiet kā favorītus, tiks rādīti šeit", + "Shared with you" : "Koplietots ar tevi", + "Shared by link" : "Koplietots ar saiti", + "Tags" : "Atzīmes", + "Deleted files" : "Dzēstās datnes", "Text file" : "Teksta datne", "New text file.txt" : "Jauna teksta datne.txt", "Storage not available" : "Glabātuve nav pieejama", diff --git a/apps/files/l10n/lv.json b/apps/files/l10n/lv.json index d88665b810f..5c84bba9999 100644 --- a/apps/files/l10n/lv.json +++ b/apps/files/l10n/lv.json @@ -1,4 +1,5 @@ { "translations": { + "Storage is temporarily not available" : "Glabātuve īslaicīgi nav pieejama", "Storage invalid" : "Nepareiza glabātuve", "Unknown error" : "Nezināma kļūda", "Files" : "Datnes", @@ -12,12 +13,14 @@ "Upload cancelled." : "Augšupielāde ir atcelta.", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Neizdodas augšupielādēt {filename}, jo tā ir vai nu mape vai 0 baitu saturoša datne.", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nav pietiekami daudz brīvas vietas. Tiek augšupielādēti {size1}, bet pieejami tikai {size2}", + "Not enough free space" : "Nav pietiekami daudz brīvas vietas", "Uploading..." : "Augšupielādē...", "..." : "...", "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} no {totalSize} ({bitrate})", "Actions" : "Darbības", "Download" : "Lejupielādēt", "Rename" : "Pārsaukt", + "Move" : "Pārvietot", "Delete" : "Dzēst", "Disconnect storage" : "Atvienot glabātuvi", "Unshare" : "Pārtraukt koplietošanu", @@ -62,6 +65,7 @@ "New folder" : "Jauna mape", "Upload" : "Augšupielādēt", "An error occurred while trying to update the tags" : "Notika kļūda atjaunojot atzīmi", + "You restored {file}" : "Tu atjaunoji {file}", "A new file or folder has been <strong>created</strong>" : "<strong>Izveidota</strong> jauna datne vai mape", "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitēt ziņojumus par jūsu <strong>iecienīto datņu</strong> izveidošanu un izmaiņām <em>(tikai datu straumei)</em>", "Upload (max. %s)" : "Augšupielādēt (maks. %s)", @@ -83,6 +87,10 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Augšupielādējamās datnes pārsniedz servera pieļaujamo datņu augšupielādes apjomu", "No favorites" : "Nav favorītu", "Files and folders you mark as favorite will show up here" : "Datnes un mapes, ko atzīmēsiet kā favorītus, tiks rādīti šeit", + "Shared with you" : "Koplietots ar tevi", + "Shared by link" : "Koplietots ar saiti", + "Tags" : "Atzīmes", + "Deleted files" : "Dzēstās datnes", "Text file" : "Teksta datne", "New text file.txt" : "Jauna teksta datne.txt", "Storage not available" : "Glabātuve nav pieejama", diff --git a/apps/files/l10n/nb_NO.js b/apps/files/l10n/nb_NO.js index 63164a86d65..e0f02a26713 100644 --- a/apps/files/l10n/nb_NO.js +++ b/apps/files/l10n/nb_NO.js @@ -28,6 +28,7 @@ OC.L10N.register( "Delete" : "Slett", "Disconnect storage" : "Koble fra lagring", "Unshare" : "Avslutt deling", + "Could not load info for file \"{file}\"" : "Klarte ikke å hente informasjon som filen \"{file}\"", "Details" : "Detaljer", "Select" : "Velg", "Pending" : "Venter", diff --git a/apps/files/l10n/nb_NO.json b/apps/files/l10n/nb_NO.json index 1d6d0ab113d..216f9a56368 100644 --- a/apps/files/l10n/nb_NO.json +++ b/apps/files/l10n/nb_NO.json @@ -26,6 +26,7 @@ "Delete" : "Slett", "Disconnect storage" : "Koble fra lagring", "Unshare" : "Avslutt deling", + "Could not load info for file \"{file}\"" : "Klarte ikke å hente informasjon som filen \"{file}\"", "Details" : "Detaljer", "Select" : "Velg", "Pending" : "Venter", diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js index 0a8e66d18c9..e13409dfc91 100644 --- a/apps/files/l10n/zh_CN.js +++ b/apps/files/l10n/zh_CN.js @@ -1,7 +1,7 @@ OC.L10N.register( "files", { - "Storage is temporarily not available" : "存储暂时不可用", + "Storage is temporarily not available" : "存储空间暂时不可用", "Storage invalid" : "存储空间无效", "Unknown error" : "未知错误", "Files" : "文件", @@ -13,8 +13,8 @@ OC.L10N.register( "Favorites" : "收藏", "Could not create folder \"{dir}\"" : "无法创建文件夹 \"{dir}\"", "Upload cancelled." : "上传已取消", - "Unable to upload {filename} as it is a directory or has 0 bytes" : "无法上传文件 {filename}, 因为其是一个目录或者长度为0字节", - "Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足, 您上传的文件大小为 {size1}, 但可用空间仅剩 {size2}", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "无法上传文件 {filename},因为它是一个目录或者是大小为 0 的空文件", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足,您上传的文件大小为 {size1} ,但可用空间仅剩 {size2}", "Target folder \"{dir}\" does not exist any more" : "目标目录 \"{dir}\" 不存在", "Not enough free space" : "可用空间不足", "Uploading..." : "正在上传...", @@ -28,7 +28,7 @@ OC.L10N.register( "Delete" : "删除", "Disconnect storage" : "断开存储链接", "Unshare" : "取消共享", - "Could not load info for file \"{file}\"" : "无法加载 \"{file}\" 文件信息", + "Could not load info for file \"{file}\"" : "无法加载文件 \"{file}\" 的信息", "Details" : "详细信息", "Select" : "选择", "Pending" : "等待", @@ -42,15 +42,15 @@ OC.L10N.register( "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "文件夹 \"{dir}\" 中已经存在 \"{targetName}\". 请尝试其他的名称.", "Could not rename \"{fileName}\"" : "无法重命名 \"{fileName}\"", "Could not create file \"{file}\"" : "无法创建文件 \"{file}\"", - "Could not create file \"{file}\" because it already exists" : "无法创建文件 \"{file}\", 因为其已经存在", - "Could not create folder \"{dir}\" because it already exists" : "无法创建文件夹 \"{dir}\", 因为其已经存在", + "Could not create file \"{file}\" because it already exists" : "无法创建文件 \"{file}\", 因为其已经存在", + "Could not create folder \"{dir}\" because it already exists" : "无法创建文件夹 \"{dir}\", 因为其已经存在", "Error deleting file \"{fileName}\"." : "删除文件 \"{fileName}\" 时出错.", "No search results in other folders for '{tag}{filter}{endtag}'" : " 在其他文件夹未找到包含 '{tag}{filter}{endtag}' 标签的结果", "Name" : "名称", "Size" : "大小", "Modified" : "修改日期", "_%n folder_::_%n folders_" : ["%n 个文件夹"], - "_%n file_::_%n files_" : ["%n个文件"], + "_%n file_::_%n files_" : ["%n 个文件"], "{dirs} and {files}" : "{dirs} 和 {files}", "_including %n hidden_::_including %n hidden_" : ["包括 %n 个隐藏文件"], "You don’t have permission to upload or create files here" : "您没有权限在此上传或创建文件", @@ -131,7 +131,7 @@ OC.L10N.register( "New text file.txt" : "创建文本文件 .txt", "Storage not available" : "存储空间不可用", "Unable to set upload directory." : "无法设置上传文件夹.", - "Invalid Token" : "无效密匙", + "Invalid Token" : "无效密钥", "No file was uploaded. Unknown error" : "没有文件被上传. 未知错误", "There is no error, the file uploaded with success" : "文件上传成功, 没有任何错误", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "上传文件的大小已超过 php.ini 中 upload_max_filesize 设置的值", diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json index 26ed83ac15c..9de26c4ee29 100644 --- a/apps/files/l10n/zh_CN.json +++ b/apps/files/l10n/zh_CN.json @@ -1,5 +1,5 @@ { "translations": { - "Storage is temporarily not available" : "存储暂时不可用", + "Storage is temporarily not available" : "存储空间暂时不可用", "Storage invalid" : "存储空间无效", "Unknown error" : "未知错误", "Files" : "文件", @@ -11,8 +11,8 @@ "Favorites" : "收藏", "Could not create folder \"{dir}\"" : "无法创建文件夹 \"{dir}\"", "Upload cancelled." : "上传已取消", - "Unable to upload {filename} as it is a directory or has 0 bytes" : "无法上传文件 {filename}, 因为其是一个目录或者长度为0字节", - "Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足, 您上传的文件大小为 {size1}, 但可用空间仅剩 {size2}", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "无法上传文件 {filename},因为它是一个目录或者是大小为 0 的空文件", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足,您上传的文件大小为 {size1} ,但可用空间仅剩 {size2}", "Target folder \"{dir}\" does not exist any more" : "目标目录 \"{dir}\" 不存在", "Not enough free space" : "可用空间不足", "Uploading..." : "正在上传...", @@ -26,7 +26,7 @@ "Delete" : "删除", "Disconnect storage" : "断开存储链接", "Unshare" : "取消共享", - "Could not load info for file \"{file}\"" : "无法加载 \"{file}\" 文件信息", + "Could not load info for file \"{file}\"" : "无法加载文件 \"{file}\" 的信息", "Details" : "详细信息", "Select" : "选择", "Pending" : "等待", @@ -40,15 +40,15 @@ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "文件夹 \"{dir}\" 中已经存在 \"{targetName}\". 请尝试其他的名称.", "Could not rename \"{fileName}\"" : "无法重命名 \"{fileName}\"", "Could not create file \"{file}\"" : "无法创建文件 \"{file}\"", - "Could not create file \"{file}\" because it already exists" : "无法创建文件 \"{file}\", 因为其已经存在", - "Could not create folder \"{dir}\" because it already exists" : "无法创建文件夹 \"{dir}\", 因为其已经存在", + "Could not create file \"{file}\" because it already exists" : "无法创建文件 \"{file}\", 因为其已经存在", + "Could not create folder \"{dir}\" because it already exists" : "无法创建文件夹 \"{dir}\", 因为其已经存在", "Error deleting file \"{fileName}\"." : "删除文件 \"{fileName}\" 时出错.", "No search results in other folders for '{tag}{filter}{endtag}'" : " 在其他文件夹未找到包含 '{tag}{filter}{endtag}' 标签的结果", "Name" : "名称", "Size" : "大小", "Modified" : "修改日期", "_%n folder_::_%n folders_" : ["%n 个文件夹"], - "_%n file_::_%n files_" : ["%n个文件"], + "_%n file_::_%n files_" : ["%n 个文件"], "{dirs} and {files}" : "{dirs} 和 {files}", "_including %n hidden_::_including %n hidden_" : ["包括 %n 个隐藏文件"], "You don’t have permission to upload or create files here" : "您没有权限在此上传或创建文件", @@ -129,7 +129,7 @@ "New text file.txt" : "创建文本文件 .txt", "Storage not available" : "存储空间不可用", "Unable to set upload directory." : "无法设置上传文件夹.", - "Invalid Token" : "无效密匙", + "Invalid Token" : "无效密钥", "No file was uploaded. Unknown error" : "没有文件被上传. 未知错误", "There is no error, the file uploaded with success" : "文件上传成功, 没有任何错误", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "上传文件的大小已超过 php.ini 中 upload_max_filesize 设置的值", diff --git a/apps/files_external/3rdparty/composer.json b/apps/files_external/3rdparty/composer.json index 84f1e192018..2eab8a8f7b4 100644 --- a/apps/files_external/3rdparty/composer.json +++ b/apps/files_external/3rdparty/composer.json @@ -9,7 +9,7 @@ }, "require": { "icewind/smb": "2.0.0", - "icewind/streams": "0.4.1" + "icewind/streams": "0.5.2" } } diff --git a/apps/files_external/3rdparty/composer.lock b/apps/files_external/3rdparty/composer.lock index 305cc8dc4ba..99ef5f94871 100644 --- a/apps/files_external/3rdparty/composer.lock +++ b/apps/files_external/3rdparty/composer.lock @@ -4,8 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "a8b4080027a432533f6d0597ad527fe7", - "content-hash": "8165981792437b03b39c11d28b061eda", + "content-hash": "0bbca3fe2d180fbc5681985bdf6b22e7", "packages": [ { "name": "icewind/smb", @@ -46,20 +45,20 @@ } ], "description": "php wrapper for smbclient and libsmbclient-php", - "time": "2016-12-13 13:56:55" + "time": "2016-12-13T13:56:55+00:00" }, { "name": "icewind/streams", - "version": "0.4.1", + "version": "0.5.2", "source": { "type": "git", "url": "https://github.com/icewind1991/Streams.git", - "reference": "d3620e8dc410c86c2ba55579803679c4e0b289ac" + "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/icewind1991/Streams/zipball/d3620e8dc410c86c2ba55579803679c4e0b289ac", - "reference": "d3620e8dc410c86c2ba55579803679c4e0b289ac", + "url": "https://api.github.com/repos/icewind1991/Streams/zipball/6bfd2fdbd99319f5e010d0a684409189a562cb1e", + "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e", "shasum": "" }, "require": { @@ -87,7 +86,7 @@ } ], "description": "A set of generic stream wrappers", - "time": "2016-06-02 14:37:52" + "time": "2016-12-02T14:21:23+00:00" } ], "packages-dev": [], diff --git a/apps/files_external/3rdparty/composer/ClassLoader.php b/apps/files_external/3rdparty/composer/ClassLoader.php index ac67d302a18..4626994fd4d 100644 --- a/apps/files_external/3rdparty/composer/ClassLoader.php +++ b/apps/files_external/3rdparty/composer/ClassLoader.php @@ -55,6 +55,7 @@ class ClassLoader private $classMap = array(); private $classMapAuthoritative = false; private $missingClasses = array(); + private $apcuPrefix; public function getPrefixes() { @@ -272,6 +273,26 @@ class ClassLoader } /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** * Registers this instance as an autoloader. * * @param bool $prepend Whether to prepend the autoloader or not @@ -313,11 +334,6 @@ class ClassLoader */ public function findFile($class) { - // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731 - if ('\\' == $class[0]) { - $class = substr($class, 1); - } - // class map lookup if (isset($this->classMap[$class])) { return $this->classMap[$class]; @@ -325,6 +341,12 @@ class ClassLoader if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { return false; } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } $file = $this->findFileWithExtension($class, '.php'); @@ -333,6 +355,10 @@ class ClassLoader $file = $this->findFileWithExtension($class, '.hh'); } + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + if (false === $file) { // Remember that this class does not exist. $this->missingClasses[$class] = true; diff --git a/apps/files_external/3rdparty/composer/autoload_classmap.php b/apps/files_external/3rdparty/composer/autoload_classmap.php index ba5d06f7011..e6bba3a9a15 100644 --- a/apps/files_external/3rdparty/composer/autoload_classmap.php +++ b/apps/files_external/3rdparty/composer/autoload_classmap.php @@ -7,7 +7,6 @@ $baseDir = $vendorDir; return array( 'Icewind\\SMB\\AbstractShare' => $vendorDir . '/icewind/smb/src/AbstractShare.php', - 'Icewind\\SMB\\Change' => $vendorDir . '/icewind/smb/src/Change.php', 'Icewind\\SMB\\Connection' => $vendorDir . '/icewind/smb/src/Connection.php', 'Icewind\\SMB\\ErrorCodes' => $vendorDir . '/icewind/smb/src/ErrorCodes.php', 'Icewind\\SMB\\Exception\\AccessDeniedException' => $vendorDir . '/icewind/smb/src/Exception/AccessDeniedException.php', @@ -16,7 +15,6 @@ return array( 'Icewind\\SMB\\Exception\\ConnectException' => $vendorDir . '/icewind/smb/src/Exception/ConnectException.php', 'Icewind\\SMB\\Exception\\ConnectionException' => $vendorDir . '/icewind/smb/src/Exception/ConnectionException.php', 'Icewind\\SMB\\Exception\\ConnectionRefusedException' => $vendorDir . '/icewind/smb/src/Exception/ConnectionRefusedException.php', - 'Icewind\\SMB\\Exception\\DependencyException' => $vendorDir . '/icewind/smb/src/Exception/DependencyException.php', 'Icewind\\SMB\\Exception\\Exception' => $vendorDir . '/icewind/smb/src/Exception/Exception.php', 'Icewind\\SMB\\Exception\\FileInUseException' => $vendorDir . '/icewind/smb/src/Exception/FileInUseException.php', 'Icewind\\SMB\\Exception\\ForbiddenException' => $vendorDir . '/icewind/smb/src/Exception/ForbiddenException.php', @@ -33,14 +31,12 @@ return array( 'Icewind\\SMB\\Exception\\TimedOutException' => $vendorDir . '/icewind/smb/src/Exception/TimedOutException.php', 'Icewind\\SMB\\FileInfo' => $vendorDir . '/icewind/smb/src/FileInfo.php', 'Icewind\\SMB\\IFileInfo' => $vendorDir . '/icewind/smb/src/IFileInfo.php', - 'Icewind\\SMB\\INotifyHandler' => $vendorDir . '/icewind/smb/src/INotifyHandler.php', 'Icewind\\SMB\\IShare' => $vendorDir . '/icewind/smb/src/IShare.php', 'Icewind\\SMB\\NativeFileInfo' => $vendorDir . '/icewind/smb/src/NativeFileInfo.php', 'Icewind\\SMB\\NativeServer' => $vendorDir . '/icewind/smb/src/NativeServer.php', 'Icewind\\SMB\\NativeShare' => $vendorDir . '/icewind/smb/src/NativeShare.php', 'Icewind\\SMB\\NativeState' => $vendorDir . '/icewind/smb/src/NativeState.php', 'Icewind\\SMB\\NativeStream' => $vendorDir . '/icewind/smb/src/NativeStream.php', - 'Icewind\\SMB\\NotifyHandler' => $vendorDir . '/icewind/smb/src/NotifyHandler.php', 'Icewind\\SMB\\Parser' => $vendorDir . '/icewind/smb/src/Parser.php', 'Icewind\\SMB\\RawConnection' => $vendorDir . '/icewind/smb/src/RawConnection.php', 'Icewind\\SMB\\Server' => $vendorDir . '/icewind/smb/src/Server.php', @@ -63,8 +59,23 @@ return array( 'Icewind\\Streams\\IteratorDirectory' => $vendorDir . '/icewind/streams/src/IteratorDirectory.php', 'Icewind\\Streams\\NullWrapper' => $vendorDir . '/icewind/streams/src/NullWrapper.php', 'Icewind\\Streams\\Path' => $vendorDir . '/icewind/streams/src/Path.php', + 'Icewind\\Streams\\PathWrapper' => $vendorDir . '/icewind/streams/src/PathWrapper.php', 'Icewind\\Streams\\RetryWrapper' => $vendorDir . '/icewind/streams/src/RetryWrapper.php', 'Icewind\\Streams\\SeekableWrapper' => $vendorDir . '/icewind/streams/src/SeekableWrapper.php', + 'Icewind\\Streams\\Tests\\CallbackWrapper' => $vendorDir . '/icewind/streams/tests/CallbackWrapper.php', + 'Icewind\\Streams\\Tests\\DirectoryFilter' => $vendorDir . '/icewind/streams/tests/DirectoryFilter.php', + 'Icewind\\Streams\\Tests\\DirectoryWrapper' => $vendorDir . '/icewind/streams/tests/DirectoryWrapper.php', + 'Icewind\\Streams\\Tests\\DirectoryWrapperDummy' => $vendorDir . '/icewind/streams/tests/DirectoryWrapper.php', + 'Icewind\\Streams\\Tests\\DirectoryWrapperNull' => $vendorDir . '/icewind/streams/tests/DirectoryWrapper.php', + 'Icewind\\Streams\\Tests\\FailWrapper' => $vendorDir . '/icewind/streams/tests/RetryWrapper.php', + 'Icewind\\Streams\\Tests\\IteratorDirectory' => $vendorDir . '/icewind/streams/tests/IteratorDirectory.php', + 'Icewind\\Streams\\Tests\\NullWrapper' => $vendorDir . '/icewind/streams/tests/NullWrapper.php', + 'Icewind\\Streams\\Tests\\PartialWrapper' => $vendorDir . '/icewind/streams/tests/RetryWrapper.php', + 'Icewind\\Streams\\Tests\\PathWrapper' => $vendorDir . '/icewind/streams/tests/PathWrapper.php', + 'Icewind\\Streams\\Tests\\RetryWrapper' => $vendorDir . '/icewind/streams/tests/RetryWrapper.php', + 'Icewind\\Streams\\Tests\\SeekableWrapper' => $vendorDir . '/icewind/streams/tests/SeekableWrapper.php', + 'Icewind\\Streams\\Tests\\UrlCallBack' => $vendorDir . '/icewind/streams/tests/UrlCallBack.php', + 'Icewind\\Streams\\Tests\\Wrapper' => $vendorDir . '/icewind/streams/tests/Wrapper.php', 'Icewind\\Streams\\Url' => $vendorDir . '/icewind/streams/src/Url.php', 'Icewind\\Streams\\UrlCallback' => $vendorDir . '/icewind/streams/src/UrlCallBack.php', 'Icewind\\Streams\\Wrapper' => $vendorDir . '/icewind/streams/src/Wrapper.php', diff --git a/apps/files_external/3rdparty/composer/autoload_static.php b/apps/files_external/3rdparty/composer/autoload_static.php index 10c09bfc409..9fa922caeab 100644 --- a/apps/files_external/3rdparty/composer/autoload_static.php +++ b/apps/files_external/3rdparty/composer/autoload_static.php @@ -37,7 +37,6 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3 public static $classMap = array ( 'Icewind\\SMB\\AbstractShare' => __DIR__ . '/..' . '/icewind/smb/src/AbstractShare.php', - 'Icewind\\SMB\\Change' => __DIR__ . '/..' . '/icewind/smb/src/Change.php', 'Icewind\\SMB\\Connection' => __DIR__ . '/..' . '/icewind/smb/src/Connection.php', 'Icewind\\SMB\\ErrorCodes' => __DIR__ . '/..' . '/icewind/smb/src/ErrorCodes.php', 'Icewind\\SMB\\Exception\\AccessDeniedException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/AccessDeniedException.php', @@ -46,7 +45,6 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3 'Icewind\\SMB\\Exception\\ConnectException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/ConnectException.php', 'Icewind\\SMB\\Exception\\ConnectionException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/ConnectionException.php', 'Icewind\\SMB\\Exception\\ConnectionRefusedException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/ConnectionRefusedException.php', - 'Icewind\\SMB\\Exception\\DependencyException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/DependencyException.php', 'Icewind\\SMB\\Exception\\Exception' => __DIR__ . '/..' . '/icewind/smb/src/Exception/Exception.php', 'Icewind\\SMB\\Exception\\FileInUseException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/FileInUseException.php', 'Icewind\\SMB\\Exception\\ForbiddenException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/ForbiddenException.php', @@ -63,14 +61,12 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3 'Icewind\\SMB\\Exception\\TimedOutException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/TimedOutException.php', 'Icewind\\SMB\\FileInfo' => __DIR__ . '/..' . '/icewind/smb/src/FileInfo.php', 'Icewind\\SMB\\IFileInfo' => __DIR__ . '/..' . '/icewind/smb/src/IFileInfo.php', - 'Icewind\\SMB\\INotifyHandler' => __DIR__ . '/..' . '/icewind/smb/src/INotifyHandler.php', 'Icewind\\SMB\\IShare' => __DIR__ . '/..' . '/icewind/smb/src/IShare.php', 'Icewind\\SMB\\NativeFileInfo' => __DIR__ . '/..' . '/icewind/smb/src/NativeFileInfo.php', 'Icewind\\SMB\\NativeServer' => __DIR__ . '/..' . '/icewind/smb/src/NativeServer.php', 'Icewind\\SMB\\NativeShare' => __DIR__ . '/..' . '/icewind/smb/src/NativeShare.php', 'Icewind\\SMB\\NativeState' => __DIR__ . '/..' . '/icewind/smb/src/NativeState.php', 'Icewind\\SMB\\NativeStream' => __DIR__ . '/..' . '/icewind/smb/src/NativeStream.php', - 'Icewind\\SMB\\NotifyHandler' => __DIR__ . '/..' . '/icewind/smb/src/NotifyHandler.php', 'Icewind\\SMB\\Parser' => __DIR__ . '/..' . '/icewind/smb/src/Parser.php', 'Icewind\\SMB\\RawConnection' => __DIR__ . '/..' . '/icewind/smb/src/RawConnection.php', 'Icewind\\SMB\\Server' => __DIR__ . '/..' . '/icewind/smb/src/Server.php', @@ -93,8 +89,23 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3 'Icewind\\Streams\\IteratorDirectory' => __DIR__ . '/..' . '/icewind/streams/src/IteratorDirectory.php', 'Icewind\\Streams\\NullWrapper' => __DIR__ . '/..' . '/icewind/streams/src/NullWrapper.php', 'Icewind\\Streams\\Path' => __DIR__ . '/..' . '/icewind/streams/src/Path.php', + 'Icewind\\Streams\\PathWrapper' => __DIR__ . '/..' . '/icewind/streams/src/PathWrapper.php', 'Icewind\\Streams\\RetryWrapper' => __DIR__ . '/..' . '/icewind/streams/src/RetryWrapper.php', 'Icewind\\Streams\\SeekableWrapper' => __DIR__ . '/..' . '/icewind/streams/src/SeekableWrapper.php', + 'Icewind\\Streams\\Tests\\CallbackWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/CallbackWrapper.php', + 'Icewind\\Streams\\Tests\\DirectoryFilter' => __DIR__ . '/..' . '/icewind/streams/tests/DirectoryFilter.php', + 'Icewind\\Streams\\Tests\\DirectoryWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/DirectoryWrapper.php', + 'Icewind\\Streams\\Tests\\DirectoryWrapperDummy' => __DIR__ . '/..' . '/icewind/streams/tests/DirectoryWrapper.php', + 'Icewind\\Streams\\Tests\\DirectoryWrapperNull' => __DIR__ . '/..' . '/icewind/streams/tests/DirectoryWrapper.php', + 'Icewind\\Streams\\Tests\\FailWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/RetryWrapper.php', + 'Icewind\\Streams\\Tests\\IteratorDirectory' => __DIR__ . '/..' . '/icewind/streams/tests/IteratorDirectory.php', + 'Icewind\\Streams\\Tests\\NullWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/NullWrapper.php', + 'Icewind\\Streams\\Tests\\PartialWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/RetryWrapper.php', + 'Icewind\\Streams\\Tests\\PathWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/PathWrapper.php', + 'Icewind\\Streams\\Tests\\RetryWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/RetryWrapper.php', + 'Icewind\\Streams\\Tests\\SeekableWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/SeekableWrapper.php', + 'Icewind\\Streams\\Tests\\UrlCallBack' => __DIR__ . '/..' . '/icewind/streams/tests/UrlCallBack.php', + 'Icewind\\Streams\\Tests\\Wrapper' => __DIR__ . '/..' . '/icewind/streams/tests/Wrapper.php', 'Icewind\\Streams\\Url' => __DIR__ . '/..' . '/icewind/streams/src/Url.php', 'Icewind\\Streams\\UrlCallback' => __DIR__ . '/..' . '/icewind/streams/src/UrlCallBack.php', 'Icewind\\Streams\\Wrapper' => __DIR__ . '/..' . '/icewind/streams/src/Wrapper.php', diff --git a/apps/files_external/3rdparty/composer/installed.json b/apps/files_external/3rdparty/composer/installed.json index bc71c6d0458..8e065858d02 100644 --- a/apps/files_external/3rdparty/composer/installed.json +++ b/apps/files_external/3rdparty/composer/installed.json @@ -1,33 +1,33 @@ [ { - "name": "icewind/streams", - "version": "0.4.1", - "version_normalized": "0.4.1.0", + "name": "icewind/smb", + "version": "v2.0.0", + "version_normalized": "2.0.0.0", "source": { "type": "git", - "url": "https://github.com/icewind1991/Streams.git", - "reference": "d3620e8dc410c86c2ba55579803679c4e0b289ac" + "url": "https://github.com/icewind1991/SMB.git", + "reference": "95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/icewind1991/Streams/zipball/d3620e8dc410c86c2ba55579803679c4e0b289ac", - "reference": "d3620e8dc410c86c2ba55579803679c4e0b289ac", + "url": "https://api.github.com/repos/icewind1991/SMB/zipball/95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a", + "reference": "95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a", "shasum": "" }, "require": { - "php": ">=5.3" + "icewind/streams": ">=0.2.0", + "php": ">=5.4" }, "require-dev": { - "phpunit/phpunit": "^4.8", - "satooshi/php-coveralls": "v1.0.0" + "phpunit/phpunit": "^4.8" }, - "time": "2016-06-02 14:37:52", + "time": "2016-12-13T13:56:55+00:00", "type": "library", - "installation-source": "dist", + "installation-source": "source", "autoload": { "psr-4": { - "Icewind\\Streams\\Tests\\": "tests/", - "Icewind\\Streams\\": "src/" + "Icewind\\SMB\\": "src/", + "Icewind\\SMB\\Test\\": "tests/" } }, "notification-url": "https://packagist.org/downloads/", @@ -40,37 +40,37 @@ "email": "icewind@owncloud.com" } ], - "description": "A set of generic stream wrappers" + "description": "php wrapper for smbclient and libsmbclient-php" }, { - "name": "icewind/smb", - "version": "v2.0.0", - "version_normalized": "2.0.0.0", + "name": "icewind/streams", + "version": "0.5.2", + "version_normalized": "0.5.2.0", "source": { "type": "git", - "url": "https://github.com/icewind1991/SMB.git", - "reference": "95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a" + "url": "https://github.com/icewind1991/Streams.git", + "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/icewind1991/SMB/zipball/95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a", - "reference": "95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a", + "url": "https://api.github.com/repos/icewind1991/Streams/zipball/6bfd2fdbd99319f5e010d0a684409189a562cb1e", + "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e", "shasum": "" }, "require": { - "icewind/streams": ">=0.2.0", - "php": ">=5.4" + "php": ">=5.3" }, "require-dev": { - "phpunit/phpunit": "^4.8" + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "v1.0.0" }, - "time": "2016-12-13 13:56:55", + "time": "2016-12-02T14:21:23+00:00", "type": "library", - "installation-source": "source", + "installation-source": "dist", "autoload": { "psr-4": { - "Icewind\\SMB\\": "src/", - "Icewind\\SMB\\Test\\": "tests/" + "Icewind\\Streams\\Tests\\": "tests/", + "Icewind\\Streams\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -83,6 +83,6 @@ "email": "icewind@owncloud.com" } ], - "description": "php wrapper for smbclient and libsmbclient-php" + "description": "A set of generic stream wrappers" } ] diff --git a/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php index c5847b95fdb..4eef55681c7 100644 --- a/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php +++ b/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php @@ -107,6 +107,8 @@ class CallbackWrapper extends Wrapper { $result = parent::stream_close(); if (is_callable($this->closeCallback)) { call_user_func($this->closeCallback); + // prevent further calls by potential PHP 7 GC ghosts + $this->closeCallback = null; } return $result; } diff --git a/apps/files_external/3rdparty/icewind/streams/src/Path.php b/apps/files_external/3rdparty/icewind/streams/src/Path.php index 46d2156b69a..bef9fd5f616 100644 --- a/apps/files_external/3rdparty/icewind/streams/src/Path.php +++ b/apps/files_external/3rdparty/icewind/streams/src/Path.php @@ -56,7 +56,7 @@ class Path { protected function register() { if (!$this->registered) { - $this->appendDefaultContent($this->getProtocol(), $this->contextOptions); + $this->appendDefaultContent($this->contextOptions); stream_wrapper_register($this->getProtocol(), $this->class); $this->registered = true; } @@ -71,13 +71,17 @@ class Path { /** * Add values to the default stream context * - * @param string $key * @param array $values */ - protected function appendDefaultContent($key, $values) { + protected function appendDefaultContent($values) { + if (!is_array(current($values))) { + $values = array($this->getProtocol() => $values); + } $context = stream_context_get_default(); $defaults = stream_context_get_options($context); - $defaults[$key] = $values; + foreach ($values as $key => $value) { + $defaults[$key] = $value; + } stream_context_set_default($defaults); } diff --git a/apps/files_external/3rdparty/icewind/streams/src/PathWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/PathWrapper.php new file mode 100644 index 00000000000..88af7e17b33 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/src/PathWrapper.php @@ -0,0 +1,25 @@ +<?php +/** + * Copyright (c) 2016 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\Streams; + +/** + * A string-like object that maps to an existing stream when opened + */ +class PathWrapper extends NullWrapper { + /** + * @param resource $source + * @return Path|string + */ + public static function getPath($source) { + return new Path(__CLASS__, [ + 'null' => [ + 'source' => $source + ] + ]); + } +} diff --git a/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php b/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php index 53de2942ca9..8e52eff9a08 100644 --- a/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php +++ b/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php @@ -53,7 +53,7 @@ abstract class Wrapper implements File, Directory { if (isset($context[$name])) { $context = $context[$name]; } else { - throw new \BadMethodCallException('Invalid context, "callable" options not set'); + throw new \BadMethodCallException('Invalid context, "' . $name . '" options not set'); } if (isset($context['source']) and is_resource($context['source'])) { $this->setSourceStream($context['source']); diff --git a/apps/files_external/img/app-dark.svg b/apps/files_external/img/app-dark.svg new file mode 100644 index 00000000000..157af238eeb --- /dev/null +++ b/apps/files_external/img/app-dark.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" viewBox="0 0 32 32"><path d="M14.903 3.237l4.76 4.515-7.14 6.772 4.76 4.514 7.142-6.772 4.762 4.515V3.237H14.904zM5.38 5.495C4.063 5.495 3 6.5 3 7.752V25.81c0 1.25 1.062 2.257 2.38 2.257h19.045c1.318 0 2.38-1.007 2.38-2.257v-6.772l-2.38-2.257v9.03H5.38V7.752h9.523l-2.38-2.258H5.38z" fill="#000"/></svg> diff --git a/apps/files_external/l10n/is.js b/apps/files_external/l10n/is.js index 13836b83147..1ecf0fb8795 100644 --- a/apps/files_external/l10n/is.js +++ b/apps/files_external/l10n/is.js @@ -25,6 +25,7 @@ OC.L10N.register( "Save" : "Vista", "Empty response from the server" : "Tómt svar frá þjóni móttekið", "Couldn't access. Please logout and login to activate this mount point" : "Náði ekki aðgangi. Skráðu þig út og svo aftur inn til að virkja þennan tengipunkt", + "Couldn't get the information from the remote server: {code} {type}" : "Gat ekki lesið upplýsingar frá fjartengda þjóninum: {code} {type}", "Couldn't get the list of external mount points: {type}" : "Gat ekki fengið lista yfir fjartengda tengipunkta: {type}", "There was an error with message: " : "Það kom upp villa með skilaboðunum: ", "External mount error" : "Villa við tengingu í fjartengdu skráakerfi", diff --git a/apps/files_external/l10n/is.json b/apps/files_external/l10n/is.json index c60d621f7d9..76d65737747 100644 --- a/apps/files_external/l10n/is.json +++ b/apps/files_external/l10n/is.json @@ -23,6 +23,7 @@ "Save" : "Vista", "Empty response from the server" : "Tómt svar frá þjóni móttekið", "Couldn't access. Please logout and login to activate this mount point" : "Náði ekki aðgangi. Skráðu þig út og svo aftur inn til að virkja þennan tengipunkt", + "Couldn't get the information from the remote server: {code} {type}" : "Gat ekki lesið upplýsingar frá fjartengda þjóninum: {code} {type}", "Couldn't get the list of external mount points: {type}" : "Gat ekki fengið lista yfir fjartengda tengipunkta: {type}", "There was an error with message: " : "Það kom upp villa með skilaboðunum: ", "External mount error" : "Villa við tengingu í fjartengdu skráakerfi", diff --git a/apps/files_external/lib/Settings/Section.php b/apps/files_external/lib/Settings/Section.php index 4b4bac93d29..4829bb60d39 100644 --- a/apps/files_external/lib/Settings/Section.php +++ b/apps/files_external/lib/Settings/Section.php @@ -24,13 +24,21 @@ namespace OCA\Files_External\Settings; use OCP\IL10N; -use OCP\Settings\ISection; +use OCP\IURLGenerator; +use OCP\Settings\IIconSection; -class Section implements ISection { +class Section implements IIconSection { /** @var IL10N */ private $l; + /** @var IURLGenerator */ + private $url; - public function __construct(IL10N $l) { + /** + * @param IURLGenerator $url + * @param IL10N $l + */ + public function __construct(IURLGenerator $url, IL10N $l) { + $this->url = $url; $this->l = $l; } @@ -64,4 +72,11 @@ class Section implements ISection { public function getPriority() { return 10; } + + /** + * {@inheritdoc} + */ + public function getIcon() { + return $this->url->imagePath('files_external', 'app-dark.svg'); + } } diff --git a/apps/files_external/tests/Settings/SectionTest.php b/apps/files_external/tests/Settings/SectionTest.php index b5dfb28b382..ee501b1270b 100644 --- a/apps/files_external/tests/Settings/SectionTest.php +++ b/apps/files_external/tests/Settings/SectionTest.php @@ -25,19 +25,24 @@ namespace OCA\Files_External\Tests\Settings; use OCA\Files_External\Settings\Section; use OCP\IL10N; +use OCP\IURLGenerator; use Test\TestCase; class SectionTest extends TestCase { /** @var IL10N */ private $l; + /** @var IURLGenerator */ + private $urlGenerator; /** @var Section */ private $section; public function setUp() { parent::setUp(); + $this->urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')->disableOriginalConstructor()->getMock(); $this->l = $this->getMockBuilder('\OCP\IL10N')->disableOriginalConstructor()->getMock(); $this->section = new Section( + $this->urlGenerator, $this->l ); } diff --git a/apps/files_sharing/css/authenticate.css b/apps/files_sharing/css/authenticate.css index 55a40cf508d..16687916ac4 100644 --- a/apps/files_sharing/css/authenticate.css +++ b/apps/files_sharing/css/authenticate.css @@ -9,12 +9,8 @@ input[type='submit'] { margin: 6px; } -#body-login input[type='submit'] { - position: absolute; - top: 0; - border: none; -} - fieldset > p { position: relative; + display: flex; + align-items: center; } diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css index 94183cf0057..9c8c4a66630 100644 --- a/apps/files_sharing/css/public.css +++ b/apps/files_sharing/css/public.css @@ -107,29 +107,33 @@ thead { max-width: 90%; } +/* header buttons */ +#details { + display: inline-flex; +} +#details button, +#details input, +#details .button { + margin: 0 5px; + line-height: normal; +} +#details button:hover, +#details input:hover, +#details .button:hover { + /* No */ + border-color: rgba(0,0,0,0.3) !important; +} + /* within #save */ #save .save-form { position: relative; } #remote_address { - margin: 0; - width: 130px; - height: 14px; - padding: 6px; - padding-right: 24px; -} + width: 200px; -.ie8 #remote_address { - padding-right: 30px; -} - -#save #save-button, -#save #save-button-confirm { - margin: 0 5px; - height: 28px; - padding-bottom: 4px; - line-height: 14px; + margin-right: 4px; + height: 31px; } #save-button-confirm { @@ -137,31 +141,9 @@ thead { background-color: transparent; border: none; margin: 2px 4px !important; - right: 0; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); - opacity: .5; -} - -.ie8 #save-button-confirm { - margin: 2px 0 !important; -} - -#save-button-confirm:disabled, -#save-button-confirm:disabled:hover, -#save-button-confirm:disabled:focus { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"; - filter: alpha(opacity=20); - opacity: .2; - cursor: default; -} - -#save-button-confirm:hover, -#save-button-confirm:focus { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); - opacity: 1; - cursor: pointer; + right: 7px; + top: -8px; + height: 30px; } #public-upload .avatardiv { diff --git a/apps/files_sharing/css/sharetabview.css b/apps/files_sharing/css/sharetabview.css index 936e1af246a..979ef01c030 100644 --- a/apps/files_sharing/css/sharetabview.css +++ b/apps/files_sharing/css/sharetabview.css @@ -51,10 +51,9 @@ padding: 0 0 16px; } -#shareWithList li { +#shareWithList > li { padding-top: 5px; padding-bottom: 5px; - font-weight: bold; white-space: normal; display: inline-flex; align-items: center; @@ -70,6 +69,11 @@ opacity: .5; } +#shareWithList .shareOption.menuitem > label:before { + /* Checkboxes positionning */ + margin: 0 12px !important; +} + #shareWithList .unshare { padding: 1px 6px; vertical-align: text-bottom; @@ -78,12 +82,6 @@ vertical-align: text-top; } -#shareWithList .unshare .icon-delete { - padding-right: 4px; - background-position-x: 0; - display: inline-block; -} - #shareWithList .sharingOptionsGroup .popovermenu:after { right: 3px; } @@ -100,7 +98,7 @@ overflow: hidden; vertical-align: middle; } -#shareWithList li label { +#shareWithList li .sharingOptionsGroup > .shareOption > label { padding: 6px; margin-right: 8px; vertical-align: text-top; diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js index 0045c7156d2..ad3ef856f23 100644 --- a/apps/files_sharing/js/public.js +++ b/apps/files_sharing/js/public.js @@ -259,7 +259,7 @@ OCA.Sharing.PublicApp = { $('.save-form').submit(function (event) { event.preventDefault(); - var remote = $(this).find('input[type="text"]').val(); + var remote = $(this).find('input[type="email"]').val(); var token = $('#sharingToken').val(); var owner = $('#save').data('owner'); var ownerDisplayName = $('#save').data('owner-display-name'); diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index be95fb9cbca..3505b3b07ab 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -91,9 +91,9 @@ OC.L10N.register( "{actor} shared {file} with you" : "{actor} hat {file} mit dir geteilt", "%2$s removed you from %1$s" : "Du wurdest durch %2$s von %1$s entfernt", "{actor} removed you from {file}" : "Du wurdest durch {actor} von {file} entfernt", - "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Eine Datei oder ein Ordner der per E-Mail oder öffentlich geteilt ist wurde <strong>heruntergeladen</strong>", + "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Öffentlich oder per E-Mail geteilte Datei / Ordner wurde <strong>heruntergeladen</strong>", "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt", - "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>", + "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurden <strong>geteilt</strong>", "Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht", "could not delete share" : "Freigabe konnte nicht gelöscht werden", "Could not delete share" : "Freigabe konnte nicht gelöscht werden", @@ -138,7 +138,7 @@ OC.L10N.register( "Select or drop files" : "Dateien auswählen oder hierher ziehen", "Uploading files…" : "Dateien werden hochgeladen...", "Uploaded files:" : "Hochgeladene Dateien: ", - "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>", + "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentlich geteilte Datei / Ordner wurde <strong>heruntergeladen</strong>", "You received a new remote share %2$s from %1$s" : "Du hast eine neue Remotefreigabe %2$s von %1$s erhalten", "You received a new remote share from %s" : "Du hast eine neue Remotefreigabe von %s erhalten", "%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert", diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index fe75914067f..95c3f5dd72e 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -89,9 +89,9 @@ "{actor} shared {file} with you" : "{actor} hat {file} mit dir geteilt", "%2$s removed you from %1$s" : "Du wurdest durch %2$s von %1$s entfernt", "{actor} removed you from {file}" : "Du wurdest durch {actor} von {file} entfernt", - "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Eine Datei oder ein Ordner der per E-Mail oder öffentlich geteilt ist wurde <strong>heruntergeladen</strong>", + "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Öffentlich oder per E-Mail geteilte Datei / Ordner wurde <strong>heruntergeladen</strong>", "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt", - "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>", + "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurden <strong>geteilt</strong>", "Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht", "could not delete share" : "Freigabe konnte nicht gelöscht werden", "Could not delete share" : "Freigabe konnte nicht gelöscht werden", @@ -136,7 +136,7 @@ "Select or drop files" : "Dateien auswählen oder hierher ziehen", "Uploading files…" : "Dateien werden hochgeladen...", "Uploaded files:" : "Hochgeladene Dateien: ", - "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>", + "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentlich geteilte Datei / Ordner wurde <strong>heruntergeladen</strong>", "You received a new remote share %2$s from %1$s" : "Du hast eine neue Remotefreigabe %2$s von %1$s erhalten", "You received a new remote share from %s" : "Du hast eine neue Remotefreigabe von %s erhalten", "%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert", diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index bbfdae37c58..01bcc8ccbe8 100644 --- a/apps/files_sharing/l10n/de_DE.js +++ b/apps/files_sharing/l10n/de_DE.js @@ -97,7 +97,7 @@ OC.L10N.register( "Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht", "could not delete share" : "Freigabe konnte nicht gelöscht werden", "Could not delete share" : "Freigabe konnte nicht gelöscht werden", - "Please specify a file or folder path" : "Bitte geben Sie eine Datei oder Ordner an", + "Please specify a file or folder path" : "Bitte Datei oder Ordner-Pfad eingeben", "Wrong path, file/folder doesn't exist" : "Falscher Pfad, Datei/Verzeichnis existiert nicht", "Could not create share" : "Freigabe konnte nicht erstellt werden", "invalid permissions" : "Ungültige Berechtigung", diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index e62bb0d816f..5c5d6b815b7 100644 --- a/apps/files_sharing/l10n/de_DE.json +++ b/apps/files_sharing/l10n/de_DE.json @@ -95,7 +95,7 @@ "Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht", "could not delete share" : "Freigabe konnte nicht gelöscht werden", "Could not delete share" : "Freigabe konnte nicht gelöscht werden", - "Please specify a file or folder path" : "Bitte geben Sie eine Datei oder Ordner an", + "Please specify a file or folder path" : "Bitte Datei oder Ordner-Pfad eingeben", "Wrong path, file/folder doesn't exist" : "Falscher Pfad, Datei/Verzeichnis existiert nicht", "Could not create share" : "Freigabe konnte nicht erstellt werden", "invalid permissions" : "Ungültige Berechtigung", diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index ce7f6154280..095483d6167 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -13,7 +13,7 @@ OC.L10N.register( "You can upload into this folder" : "Vous pouvez téléverser dans ce dossier", "No compatible server found at {remote}" : "Aucun serveur compatible trouvé sur {remote}", "Invalid server URL" : "URL serveur invalide", - "Failed to add the public link to your Nextcloud" : "Echec de l'ajout du lien public à votre Nextcloud", + "Failed to add the public link to your Nextcloud" : "Échec de l'ajout du lien public à votre Nextcloud", "Share" : "Partager", "No expiration date set" : "Aucune date d'expiration définie", "Shared by" : "Partagé par", diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index ba1cc34f790..024e9f7983d 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -11,7 +11,7 @@ "You can upload into this folder" : "Vous pouvez téléverser dans ce dossier", "No compatible server found at {remote}" : "Aucun serveur compatible trouvé sur {remote}", "Invalid server URL" : "URL serveur invalide", - "Failed to add the public link to your Nextcloud" : "Echec de l'ajout du lien public à votre Nextcloud", + "Failed to add the public link to your Nextcloud" : "Échec de l'ajout du lien public à votre Nextcloud", "Share" : "Partager", "No expiration date set" : "Aucune date d'expiration définie", "Shared by" : "Partagé par", diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php index ccd0e3aa31d..6181cde6fe6 100644 --- a/apps/files_sharing/lib/Controller/ShareAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareAPIController.php @@ -668,6 +668,7 @@ class ShareAPIController extends OCSController { \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE, // legacy \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE, // correct \OCP\Constants::PERMISSION_CREATE, // hidden file list + \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE, // allow to edit single files ]) ) { throw new OCSBadRequestException($this->l->t('Can\'t change permissions for public share links')); diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php index 178c4265dd5..6f9d4ca032a 100644 --- a/apps/files_sharing/lib/Controller/ShareController.php +++ b/apps/files_sharing/lib/Controller/ShareController.php @@ -160,6 +160,7 @@ class ShareController extends Controller { /** * @PublicPage * @UseSession + * @BruteForceProtection publicLinkAuth * * Authenticates against password-protected shares * @param string $token diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php index 32e4f3d3dd6..dd2ea855b0b 100644 --- a/apps/files_sharing/templates/public.php +++ b/apps/files_sharing/templates/public.php @@ -35,40 +35,35 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size); <header><div id="header" class="<?php p((isset($_['folder']) ? 'share-folder' : 'share-file')) ?>"> - <a href="<?php print_unescaped(link_to('', 'index.php')); ?>" - title="" id="nextcloud"> - <div class="logo-icon svg"> - </div> - </a> - - <div class="header-appname-container"> - <h1 class="header-appname"> - <?php p($theme->getName()); ?> - </h1> + <div id="header-left"> + <a href="<?php print_unescaped(link_to('', 'index.php')); ?>" + title="" id="nextcloud"> + <div class="logo-icon svg"></div> + <h1 class="header-appname"> + <?php p($theme->getName()); ?> + </h1> + </a> </div> <div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div> - <div class="header-right"> - <span id="details"> - <?php - if (!isset($_['hideFileList']) || (isset($_['hideFileList']) && $_['hideFileList'] === false)) { - if ($_['server2serversharing']) { - ?> - <span id="save" data-protected="<?php p($_['protected']) ?>" - data-owner-display-name="<?php p($_['displayName']) ?>" data-owner="<?php p($_['owner']) ?>" data-name="<?php p($_['filename']) ?>"> - <button id="save-button"><?php p($l->t('Add to your Nextcloud')) ?></button> - <form class="save-form hidden" action="#"> - <input type="text" id="remote_address" placeholder="user@yourNextcloud.org"/> - <button id="save-button-confirm" class="icon-confirm svg" disabled></button> - </form> - </span> - <?php } ?> - <a href="<?php p($_['downloadURL']); ?>" id="download" class="button"> - <img class="svg" alt="" src="<?php print_unescaped(image_path("core", "actions/download.svg")); ?>"/> - <span id="download-text"><?php p($l->t('Download'))?></span> - </a> + <div id="header-right"> + <?php if (!isset($_['hideFileList']) || (isset($_['hideFileList']) && $_['hideFileList'] === false)) { + if ($_['server2serversharing']) { + ?> + <span id="save" data-protected="<?php p($_['protected']) ?>" + data-owner-display-name="<?php p($_['displayName']) ?>" data-owner="<?php p($_['owner']) ?>" data-name="<?php p($_['filename']) ?>"> + <button id="save-button"><?php p($l->t('Add to your Nextcloud')) ?></button> + <form class="save-form hidden" action="#"> + <input type="email" id="remote_address" placeholder="user@yourNextcloud.org"/> + <button id="save-button-confirm" class="icon-confirm svg" disabled></button> + </form> + </span> <?php } ?> - </span> + <a href="<?php p($_['downloadURL']); ?>" id="download" class="button"> + <span class="icon icon-download"></span> + <span id="download-text"><?php p($l->t('Download'))?></span> + </a> + <?php } ?> </div> </div></header> <div id="content-wrapper"> @@ -89,8 +84,8 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size); <div id="imgframe"></div> <?php endif; ?> <div class="directDownload"> - <a href="<?php p($_['downloadURL']); ?>" id="downloadFile" class="button"> - <img class="svg" alt="" src="<?php print_unescaped(image_path("core", "actions/download.svg")); ?>"/> + <a href="<?php p($_['downloadURL']); ?>" id="downloadFile" class="button primary"> + <span class="icon icon-download"></span> <?php p($l->t('Download %s', array($_['filename'])))?> (<?php p($_['fileSize']) ?>) </a> </div> diff --git a/apps/files_versions/l10n/id.js b/apps/files_versions/l10n/id.js index aba6fb7f64d..243100d1477 100644 --- a/apps/files_versions/l10n/id.js +++ b/apps/files_versions/l10n/id.js @@ -4,7 +4,9 @@ OC.L10N.register( "Could not revert: %s" : "Tidak dapat mengembalikan: %s", "Versions" : "Versi", "Failed to revert {file} to revision {timestamp}." : "Gagal mengembalikan {file} ke revisi {timestamp}.", + "_%n byte_::_%n bytes_" : ["%n bytes"], "Restore" : "Pulihkan", + "No versions available" : "Tidak ada versi yang tersedia", "More versions..." : "Versi lainnya...", "No other versions available" : "Tidak ada versi lain yang tersedia" }, diff --git a/apps/files_versions/l10n/id.json b/apps/files_versions/l10n/id.json index 1df16f621f9..d2cd5919722 100644 --- a/apps/files_versions/l10n/id.json +++ b/apps/files_versions/l10n/id.json @@ -2,7 +2,9 @@ "Could not revert: %s" : "Tidak dapat mengembalikan: %s", "Versions" : "Versi", "Failed to revert {file} to revision {timestamp}." : "Gagal mengembalikan {file} ke revisi {timestamp}.", + "_%n byte_::_%n bytes_" : ["%n bytes"], "Restore" : "Pulihkan", + "No versions available" : "Tidak ada versi yang tersedia", "More versions..." : "Versi lainnya...", "No other versions available" : "Tidak ada versi lain yang tersedia" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files_versions/l10n/ja.js b/apps/files_versions/l10n/ja.js index 4601312a680..9b8cf55e4dd 100644 --- a/apps/files_versions/l10n/ja.js +++ b/apps/files_versions/l10n/ja.js @@ -6,6 +6,7 @@ OC.L10N.register( "Failed to revert {file} to revision {timestamp}." : "{file} を {timestamp} のリビジョンに戻すことができません。", "_%n byte_::_%n bytes_" : ["%n バイト"], "Restore" : "復元", + "No versions available" : "履歴はありません", "More versions..." : "他のバージョン...", "No other versions available" : "利用可能なバージョンはありません" }, diff --git a/apps/files_versions/l10n/ja.json b/apps/files_versions/l10n/ja.json index 56c81e17ac6..4e5b8164fef 100644 --- a/apps/files_versions/l10n/ja.json +++ b/apps/files_versions/l10n/ja.json @@ -4,6 +4,7 @@ "Failed to revert {file} to revision {timestamp}." : "{file} を {timestamp} のリビジョンに戻すことができません。", "_%n byte_::_%n bytes_" : ["%n バイト"], "Restore" : "復元", + "No versions available" : "履歴はありません", "More versions..." : "他のバージョン...", "No other versions available" : "利用可能なバージョンはありません" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files_versions/l10n/lv.js b/apps/files_versions/l10n/lv.js index e2f19658d5b..932e457cb41 100644 --- a/apps/files_versions/l10n/lv.js +++ b/apps/files_versions/l10n/lv.js @@ -4,7 +4,9 @@ OC.L10N.register( "Could not revert: %s" : "Nevarēja atgriezt — %s", "Versions" : "Versijas", "Failed to revert {file} to revision {timestamp}." : "Neizdevās atjaunot {file} no rediģējuma {timestamp} ", + "_%n byte_::_%n bytes_" : ["%n baiti","%n baiti","%n baiti"], "Restore" : "Atjaunot", + "No versions available" : "Nav versijas", "More versions..." : "Vairāk versiju...", "No other versions available" : "Citas versijas nav pieejamas" }, diff --git a/apps/files_versions/l10n/lv.json b/apps/files_versions/l10n/lv.json index 7c2f786034a..fcf03c1f9f5 100644 --- a/apps/files_versions/l10n/lv.json +++ b/apps/files_versions/l10n/lv.json @@ -2,7 +2,9 @@ "Could not revert: %s" : "Nevarēja atgriezt — %s", "Versions" : "Versijas", "Failed to revert {file} to revision {timestamp}." : "Neizdevās atjaunot {file} no rediģējuma {timestamp} ", + "_%n byte_::_%n bytes_" : ["%n baiti","%n baiti","%n baiti"], "Restore" : "Atjaunot", + "No versions available" : "Nav versijas", "More versions..." : "Vairāk versiju...", "No other versions available" : "Citas versijas nav pieejamas" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" diff --git a/apps/provisioning_api/appinfo/routes.php b/apps/provisioning_api/appinfo/routes.php index 04a34fba903..baa4e475be8 100644 --- a/apps/provisioning_api/appinfo/routes.php +++ b/apps/provisioning_api/appinfo/routes.php @@ -45,6 +45,7 @@ return [ ['root' => '/cloud', 'name' => 'Users#getUsers', 'url' => '/users', 'verb' => 'GET'], ['root' => '/cloud', 'name' => 'Users#addUser', 'url' => '/users', 'verb' => 'POST'], ['root' => '/cloud', 'name' => 'Users#getUser', 'url' => '/users/{userId}', 'verb' => 'GET'], + ['root' => '/cloud', 'name' => 'Users#getCurrentUser', 'url' => '/user', 'verb' => 'GET'], ['root' => '/cloud', 'name' => 'Users#editUser', 'url' => '/users/{userId}', 'verb' => 'PUT'], ['root' => '/cloud', 'name' => 'Users#deleteUser', 'url' => '/users/{userId}', 'verb' => 'DELETE'], ['root' => '/cloud', 'name' => 'Users#enableUser', 'url' => '/users/{userId}/enable', 'verb' => 'PUT'], diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php index cc1d63d2d34..1e8a767b33a 100644 --- a/apps/provisioning_api/lib/Controller/UsersController.php +++ b/apps/provisioning_api/lib/Controller/UsersController.php @@ -29,14 +29,15 @@ namespace OCA\Provisioning_API\Controller; +use OC\Accounts\AccountManager; use \OC_Helper; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCS\OCSException; use OCP\AppFramework\OCS\OCSForbiddenException; -use OCP\AppFramework\OCS\OCSNotFoundException; use OCP\AppFramework\OCSController; use OCP\Files\NotFoundException; use OCP\IConfig; +use OCP\IGroup; use OCP\IGroupManager; use OCP\ILogger; use OCP\IRequest; @@ -53,6 +54,8 @@ class UsersController extends OCSController { private $groupManager; /** @var IUserSession */ private $userSession; + /** @var AccountManager */ + private $accountManager; /** @var ILogger */ private $logger; @@ -63,6 +66,7 @@ class UsersController extends OCSController { * @param IConfig $config * @param IGroupManager $groupManager * @param IUserSession $userSession + * @param AccountManager $accountManager * @param ILogger $logger */ public function __construct($appName, @@ -71,6 +75,7 @@ class UsersController extends OCSController { IConfig $config, IGroupManager $groupManager, IUserSession $userSession, + AccountManager $accountManager, ILogger $logger) { parent::__construct($appName, $request); @@ -78,6 +83,7 @@ class UsersController extends OCSController { $this->config = $config; $this->groupManager = $groupManager; $this->userSession = $userSession; + $this->accountManager = $accountManager; $this->logger = $logger; } @@ -107,7 +113,7 @@ class UsersController extends OCSController { } if($offset === null) { - $offset = 0; + $offset = 0; } $users = []; @@ -159,7 +165,7 @@ class UsersController extends OCSController { throw new OCSException('no group specified (required for subadmins)', 106); } } - + try { $newUser = $this->userManager->createUser($userid, $password); $this->logger->info('Successful addUser call with userid: '.$userid, ['app' => 'ocs_api']); @@ -188,6 +194,42 @@ class UsersController extends OCSController { * @throws OCSException */ public function getUser($userId) { + $data = $this->getUserData($userId); + return new DataResponse($data); + } + + /** + * @NoAdminRequired + * @NoSubAdminRequired + * + * gets user info from the currently logged in user + * + * @return DataResponse + * @throws OCSException + */ + public function getCurrentUser() { + $user = $this->userSession->getUser(); + if ($user) { + $data = $this->getUserData($user->getUID()); + // rename "displayname" to "display-name" only for this call to keep + // the API stable. + $data['display-name'] = $data['displayname']; + unset($data['displayname']); + return new DataResponse($data); + + } + + throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED); + } + + /** + * creates a array with all user data + * + * @param $userId + * @return array + * @throws OCSException + */ + protected function getUserData($userId) { $currentLoggedInUser = $this->userSession->getUser(); $data = []; @@ -209,12 +251,19 @@ class UsersController extends OCSController { } } + $userAccount = $this->accountManager->getUser($targetUserObject); + // Find the data + $data['id'] = $targetUserObject->getUID(); $data['quota'] = $this->fillStorageInfo($userId); $data['email'] = $targetUserObject->getEMailAddress(); $data['displayname'] = $targetUserObject->getDisplayName(); + $data['phone'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_PHONE]['value']; + $data['address'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_ADDRESS]['value']; + $data['webpage'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_WEBSITE]['value']; + $data['twitter'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_TWITTER]['value']; - return new DataResponse($data); + return $data; } /** @@ -275,9 +324,9 @@ class UsersController extends OCSController { break; case 'quota': $quota = $value; - if($quota !== 'none' and $quota !== 'default') { + if($quota !== 'none' && $quota !== 'default') { if (is_numeric($quota)) { - $quota = floatval($quota); + $quota = (float) $quota; } else { $quota = \OCP\Util::computerFileSize($quota); } @@ -421,6 +470,7 @@ class UsersController extends OCSController { // Looking up someone else if($subAdminManager->isUserAccessible($loggedInUser, $targetUser)) { // Return the group that the method caller is subadmin of for the user in question + /** @var IGroup[] $getSubAdminsGroups */ $getSubAdminsGroups = $subAdminManager->getSubAdminsGroups($loggedInUser); foreach ($getSubAdminsGroups as $key => $group) { $getSubAdminsGroups[$key] = $group->getGID(); @@ -435,11 +485,13 @@ class UsersController extends OCSController { throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED); } } - + } /** * @PasswordConfirmationRequired + * @NoAdminRequired + * * @param string $userId * @param string $groupid * @return DataResponse @@ -459,6 +511,13 @@ class UsersController extends OCSController { throw new OCSException('', 103); } + // If they're not an admin, check they are a subadmin of the group in question + $loggedInUser = $this->userSession->getUser(); + $subAdminManager = $this->groupManager->getSubAdmin(); + if (!$this->groupManager->isAdmin($loggedInUser->getUID()) && !$subAdminManager->isSubAdminOfGroup($loggedInUser, $group)) { + throw new OCSException('', 104); + } + // Add user to group $group->addUser($targetUser); return new DataResponse(); @@ -492,25 +551,33 @@ class UsersController extends OCSController { // If they're not an admin, check they are a subadmin of the group in question $subAdminManager = $this->groupManager->getSubAdmin(); - if(!$this->groupManager->isAdmin($loggedInUser->getUID()) && !$subAdminManager->isSubAdminofGroup($loggedInUser, $group)) { + if (!$this->groupManager->isAdmin($loggedInUser->getUID()) && !$subAdminManager->isSubAdminOfGroup($loggedInUser, $group)) { throw new OCSException('', 104); } + // Check they aren't removing themselves from 'admin' or their 'subadmin; group - if($userId === $loggedInUser->getUID()) { - if($this->groupManager->isAdmin($loggedInUser->getUID())) { - if($group->getGID() === 'admin') { + if ($userId === $loggedInUser->getUID()) { + if ($this->groupManager->isAdmin($loggedInUser->getUID())) { + if ($group->getGID() === 'admin') { throw new OCSException('Cannot remove yourself from the admin group', 105); } } else { - // Not an admin, check they are not removing themself from their subadmin group - $subAdminGroups = $subAdminManager->getSubAdminsGroups($loggedInUser); - foreach ($subAdminGroups as $key => $group) { - $subAdminGroups[$key] = $group->getGID(); - } + // Not an admin, so the user must be a subadmin of this group, but that is not allowed. + throw new OCSException('Cannot remove yourself from this group as you are a SubAdmin', 105); + } - if(in_array($group->getGID(), $subAdminGroups, true)) { - throw new OCSException('Cannot remove yourself from this group as you are a SubAdmin', 105); - } + } else if (!$this->groupManager->isAdmin($loggedInUser->getUID())) { + /** @var IGroup[] $subAdminGroups */ + $subAdminGroups = $subAdminManager->getSubAdminsGroups($loggedInUser); + $subAdminGroups = array_map(function (IGroup $subAdminGroup) { + return $subAdminGroup->getGID(); + }, $subAdminGroups); + $userGroups = $this->groupManager->getUserGroupIds($targetUser); + $userSubAdminGroups = array_intersect($subAdminGroups, $userGroups); + + if (count($userSubAdminGroups) <= 1) { + // Subadmin must not be able to remove a user from all their subadmin groups. + throw new OCSException('Cannot remove user from this group as this is the only remaining group you are a SubAdmin of', 105); } } diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php index e04ee86feae..a3e5bf6fde6 100644 --- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php +++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php @@ -29,7 +29,12 @@ namespace OCA\Provisioning_API\Tests\Controller; +use OC\Accounts\AccountManager; use OCA\Provisioning_API\Controller\UsersController; +use OCP\AppFramework\Http\DataResponse; +use OCP\IGroup; +use OCP\IRequest; +use OCP\IUser; use OCP\IUserManager; use OCP\IConfig; use OCP\IUserSession; @@ -38,7 +43,7 @@ use Test\TestCase as OriginalTest; use OCP\ILogger; class UsersControllerTest extends OriginalTest { - + /** @var IUserManager | PHPUnit_Framework_MockObject_MockObject */ protected $userManager; /** @var IConfig | PHPUnit_Framework_MockObject_MockObject */ @@ -51,6 +56,10 @@ class UsersControllerTest extends OriginalTest { protected $logger; /** @var UsersController | PHPUnit_Framework_MockObject_MockObject */ protected $api; + /** @var AccountManager | PHPUnit_Framework_MockObject_MockObject */ + protected $accountManager; + /** @var IRequest | PHPUnit_Framework_MockObject_MockObject */ + protected $request; protected function tearDown() { parent::tearDown(); @@ -74,17 +83,21 @@ class UsersControllerTest extends OriginalTest { $this->logger = $this->getMockBuilder('OCP\ILogger') ->disableOriginalConstructor() ->getMock(); - $request = $this->getMockBuilder('OCP\IRequest') + $this->request = $this->getMockBuilder('OCP\IRequest') + ->disableOriginalConstructor() + ->getMock(); + $this->accountManager = $this->getMockBuilder(AccountManager::class) ->disableOriginalConstructor() ->getMock(); $this->api = $this->getMockBuilder('OCA\Provisioning_API\Controller\UsersController') ->setConstructorArgs([ 'provisioning_api', - $request, + $this->request, $this->userManager, $this->config, $this->groupManager, $this->userSession, + $this->accountManager, $this->logger, ]) ->setMethods(['fillStorageInfo']) @@ -621,7 +634,7 @@ class UsersControllerTest extends OriginalTest { $this->api->getUser('UserToGet'); } - public function testGetUserAsAdmin() { + public function testGetUserDataAsAdmin() { $loggedInUser = $this->getMockBuilder('OCP\IUser') ->disableOriginalConstructor() ->getMock(); @@ -649,6 +662,16 @@ class UsersControllerTest extends OriginalTest { ->method('isAdmin') ->with('admin') ->will($this->returnValue(true)); + $this->accountManager->expects($this->any())->method('getUser') + ->with($targetUser) + ->willReturn( + [ + AccountManager::PROPERTY_ADDRESS => ['value' => 'address'], + AccountManager::PROPERTY_PHONE => ['value' => 'phone'], + AccountManager::PROPERTY_TWITTER => ['value' => 'twitter'], + AccountManager::PROPERTY_WEBSITE => ['value' => 'website'], + ] + ); $this->config ->expects($this->at(0)) ->method('getUserValue') @@ -663,17 +686,26 @@ class UsersControllerTest extends OriginalTest { ->expects($this->once()) ->method('getDisplayName') ->will($this->returnValue('Demo User')); + $targetUser + ->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('UID')); $expected = [ + 'id' => 'UID', 'enabled' => 'true', 'quota' => ['DummyValue'], 'email' => 'demo@owncloud.org', 'displayname' => 'Demo User', + 'phone' => 'phone', + 'address' => 'address', + 'webpage' => 'website', + 'twitter' => 'twitter' ]; - $this->assertEquals($expected, $this->api->getUser('UserToGet')->getData()); + $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UserToGet'])); } - public function testGetUserAsSubAdminAndUserIsAccessible() { + public function testGetUserDataAsSubAdminAndUserIsAccessible() { $loggedInUser = $this->getMockBuilder('OCP\IUser') ->disableOriginalConstructor() ->getMock(); @@ -728,14 +760,33 @@ class UsersControllerTest extends OriginalTest { ->expects($this->once()) ->method('getDisplayName') ->will($this->returnValue('Demo User')); + $targetUser + ->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('UID')); + $this->accountManager->expects($this->any())->method('getUser') + ->with($targetUser) + ->willReturn( + [ + AccountManager::PROPERTY_ADDRESS => ['value' => 'address'], + AccountManager::PROPERTY_PHONE => ['value' => 'phone'], + AccountManager::PROPERTY_TWITTER => ['value' => 'twitter'], + AccountManager::PROPERTY_WEBSITE => ['value' => 'website'], + ] + ); $expected = [ + 'id' => 'UID', 'enabled' => 'true', 'quota' => ['DummyValue'], 'email' => 'demo@owncloud.org', 'displayname' => 'Demo User', + 'phone' => 'phone', + 'address' => 'address', + 'webpage' => 'website', + 'twitter' => 'twitter' ]; - $this->assertEquals($expected, $this->api->getUser('UserToGet')->getData()); + $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UserToGet'])); } @@ -743,7 +794,7 @@ class UsersControllerTest extends OriginalTest { * @expectedException \OCP\AppFramework\OCS\OCSException * @expectedExceptionCode 997 */ - public function testGetUserAsSubAdminAndUserIsNotAccessible() { + public function testGetUserDataAsSubAdminAndUserIsNotAccessible() { $loggedInUser = $this->getMockBuilder('OCP\IUser') ->disableOriginalConstructor() ->getMock(); @@ -781,10 +832,10 @@ class UsersControllerTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $this->api->getUser('UserToGet'); + $this->invokePrivate($this->api, 'getUserData', ['UserToGet']); } - public function testGetUserAsSubAdminSelfLookup() { + public function testGetUserDataAsSubAdminSelfLookup() { $loggedInUser = $this->getMockBuilder('OCP\IUser') ->disableOriginalConstructor() ->getMock(); @@ -834,13 +885,32 @@ class UsersControllerTest extends OriginalTest { ->expects($this->once()) ->method('getEMailAddress') ->will($this->returnValue('subadmin@owncloud.org')); + $targetUser + ->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('UID')); + $this->accountManager->expects($this->any())->method('getUser') + ->with($targetUser) + ->willReturn( + [ + AccountManager::PROPERTY_ADDRESS => ['value' => 'address'], + AccountManager::PROPERTY_PHONE => ['value' => 'phone'], + AccountManager::PROPERTY_TWITTER => ['value' => 'twitter'], + AccountManager::PROPERTY_WEBSITE => ['value' => 'website'], + ] + ); $expected = [ + 'id' => 'UID', 'quota' => ['DummyValue'], 'email' => 'subadmin@owncloud.org', 'displayname' => 'Subadmin User', + 'phone' => 'phone', + 'address' => 'address', + 'webpage' => 'website', + 'twitter' => 'twitter' ]; - $this->assertEquals($expected, $this->api->getUser('subadmin')->getData()); + $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['subadmin'])); } public function testEditUserRegularUserSelfEditChangeDisplayName() { @@ -1598,11 +1668,10 @@ class UsersControllerTest extends OriginalTest { * @expectedExceptionCode 102 */ public function testAddToGroupWithTargetGroupNotExisting() { - $this->groupManager - ->expects($this->once()) + $this->groupManager->expects($this->once()) ->method('get') ->with('GroupToAddTo') - ->will($this->returnValue(null)); + ->willReturn(null); $this->api->addToGroup('TargetUser', 'GroupToAddTo'); } @@ -1620,16 +1689,149 @@ class UsersControllerTest extends OriginalTest { * @expectedExceptionCode 103 */ public function testAddToGroupWithTargetUserNotExisting() { - $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock(); - $this->groupManager - ->expects($this->once()) + $targetGroup = $this->createMock(IGroup::class); + $this->groupManager->expects($this->once()) ->method('get') ->with('GroupToAddTo') - ->will($this->returnValue($targetGroup)); + ->willReturn($targetGroup); + + $this->api->addToGroup('TargetUser', 'GroupToAddTo'); + } + + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 104 + */ + public function testAddToGroupNoSubadmin() { + $targetUser = $this->createMock(IUser::class); + $loggedInUser = $this->createMock(IUser::class); + $loggedInUser->expects($this->once()) + ->method('getUID') + ->willReturn('subadmin'); + + $targetGroup = $this->createMock(IGroup::class); + $targetGroup->expects($this->never()) + ->method('addUser') + ->with($targetUser); + + $this->groupManager->expects($this->once()) + ->method('get') + ->with('GroupToAddTo') + ->willReturn($targetGroup); + + + $subAdminManager = $this->createMock(\OC\SubAdmin::class); + $subAdminManager->expects($this->once()) + ->method('isSubAdminOfGroup') + ->with($loggedInUser, $targetGroup) + ->willReturn(false); + + $this->groupManager->expects($this->once()) + ->method('getSubAdmin') + ->willReturn($subAdminManager); + $this->groupManager->expects($this->once()) + ->method('isAdmin') + ->with('subadmin') + ->willReturn(false); + + $this->userManager->expects($this->once()) + ->method('get') + ->with('TargetUser') + ->willReturn($targetUser); + + $this->userSession->expects($this->once()) + ->method('getUser') + ->willReturn($loggedInUser); $this->api->addToGroup('TargetUser', 'GroupToAddTo'); } + public function testAddToGroupSuccessAsSubadmin() { + $targetUser = $this->createMock(IUser::class); + $loggedInUser = $this->createMock(IUser::class); + $loggedInUser->expects($this->once()) + ->method('getUID') + ->willReturn('subadmin'); + + $targetGroup = $this->createMock(IGroup::class); + $targetGroup->expects($this->once()) + ->method('addUser') + ->with($targetUser); + + $this->groupManager->expects($this->once()) + ->method('get') + ->with('GroupToAddTo') + ->willReturn($targetGroup); + + + $subAdminManager = $this->createMock(\OC\SubAdmin::class); + $subAdminManager->expects($this->once()) + ->method('isSubAdminOfGroup') + ->with($loggedInUser, $targetGroup) + ->willReturn(true); + + $this->groupManager->expects($this->once()) + ->method('getSubAdmin') + ->willReturn($subAdminManager); + $this->groupManager->expects($this->once()) + ->method('isAdmin') + ->with('subadmin') + ->willReturn(false); + + $this->userManager->expects($this->once()) + ->method('get') + ->with('TargetUser') + ->willReturn($targetUser); + + $this->userSession->expects($this->once()) + ->method('getUser') + ->willReturn($loggedInUser); + + $this->assertEquals(new DataResponse(), $this->api->addToGroup('TargetUser', 'GroupToAddTo')); + } + + public function testAddToGroupSuccessAsAdmin() { + $targetUser = $this->createMock(IUser::class); + $loggedInUser = $this->createMock(IUser::class); + $loggedInUser->expects($this->once()) + ->method('getUID') + ->willReturn('admin'); + + $targetGroup = $this->createMock(IGroup::class); + $targetGroup->expects($this->once()) + ->method('addUser') + ->with($targetUser); + + $this->groupManager->expects($this->once()) + ->method('get') + ->with('GroupToAddTo') + ->willReturn($targetGroup); + + + $subAdminManager = $this->createMock(\OC\SubAdmin::class); + $subAdminManager->expects($this->never()) + ->method('isSubAdminOfGroup'); + + $this->groupManager->expects($this->once()) + ->method('getSubAdmin') + ->willReturn($subAdminManager); + $this->groupManager->expects($this->once()) + ->method('isAdmin') + ->with('admin') + ->willReturn(true); + + $this->userManager->expects($this->once()) + ->method('get') + ->with('TargetUser') + ->willReturn($targetUser); + + $this->userSession->expects($this->once()) + ->method('getUser') + ->willReturn($loggedInUser); + + $this->assertEquals(new DataResponse(), $this->api->addToGroup('TargetUser', 'GroupToAddTo')); + } + /** * @expectedException \OCP\AppFramework\OCS\OCSException * @expectedExceptionCode 101 @@ -1813,22 +2015,79 @@ class UsersControllerTest extends OriginalTest { ->method('isSubAdminofGroup') ->with($loggedInUser, $targetGroup) ->will($this->returnValue(true)); + $this->groupManager + ->expects($this->once()) + ->method('getSubAdmin') + ->will($this->returnValue($subAdminManager)); + $this->groupManager + ->expects($this->any()) + ->method('isAdmin') + ->with('subadmin') + ->will($this->returnValue(false)); + + $this->api->removeFromGroup('subadmin', 'subadmin'); + } + + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 105 + * @expectedExceptionMessage Cannot remove user from this group as this is the only remaining group you are a SubAdmin of + */ + public function testRemoveFromGroupAsSubAdminFromLastSubAdminGroup() { + $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); + $loggedInUser + ->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('subadmin')); + $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); + $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock(); + $targetGroup + ->expects($this->any()) + ->method('getGID') + ->will($this->returnValue('subadmin')); + $this->userSession + ->expects($this->once()) + ->method('getUser') + ->will($this->returnValue($loggedInUser)); + $this->groupManager + ->expects($this->once()) + ->method('get') + ->with('subadmin') + ->will($this->returnValue($targetGroup)); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('AnotherUser') + ->will($this->returnValue($targetUser)); + $subAdminManager = $this->getMockBuilder('OC\SubAdmin') + ->disableOriginalConstructor()->getMock(); $subAdminManager ->expects($this->once()) - ->method('getSubAdminsGroups') - ->with($loggedInUser) - ->will($this->returnValue([$targetGroup])); + ->method('isSubAdminofGroup') + ->with($loggedInUser, $targetGroup) + ->will($this->returnValue(true)); $this->groupManager ->expects($this->once()) ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); + $subAdminManager + ->expects($this->once()) + ->method('getSubAdminsGroups') + ->with($loggedInUser) + ->will($this->returnValue([$targetGroup])); + $this->groupManager ->expects($this->any()) ->method('isAdmin') ->with('subadmin') ->will($this->returnValue(false)); + $this->groupManager + ->expects($this->once()) + ->method('getUserGroupIds') + ->with($targetUser) + ->willReturn(['subadmin', 'other group']); - $this->api->removeFromGroup('subadmin', 'subadmin'); + $this->api->removeFromGroup('AnotherUser', 'subadmin'); } public function testRemoveFromGroupSuccessful() { @@ -2293,4 +2552,105 @@ class UsersControllerTest extends OriginalTest { $this->assertEquals([], $this->api->disableUser('RequestedUser')->getData()); } + + public function testGetCurrentUserLoggedIn() { + + $user = $this->getMock(IUser::class); + $user->expects($this->once())->method('getUID')->willReturn('UID'); + + $this->userSession->expects($this->once())->method('getUser') + ->willReturn($user); + + /** @var UsersController | PHPUnit_Framework_MockObject_MockObject $api */ + $api = $this->getMockBuilder('OCA\Provisioning_API\Controller\UsersController') + ->setConstructorArgs([ + 'provisioning_api', + $this->request, + $this->userManager, + $this->config, + $this->groupManager, + $this->userSession, + $this->accountManager, + $this->logger, + ]) + ->setMethods(['getUserData']) + ->getMock(); + + $api->expects($this->once())->method('getUserData')->with('UID') + ->willReturn( + [ + 'id' => 'UID', + 'enabled' => 'true', + 'quota' => ['DummyValue'], + 'email' => 'demo@owncloud.org', + 'displayname' => 'Demo User', + 'phone' => 'phone', + 'address' => 'address', + 'webpage' => 'website', + 'twitter' => 'twitter' + ] + ); + + $expected = [ + 'id' => 'UID', + 'enabled' => 'true', + 'quota' => ['DummyValue'], + 'email' => 'demo@owncloud.org', + 'phone' => 'phone', + 'address' => 'address', + 'webpage' => 'website', + 'twitter' => 'twitter', + 'display-name' => 'Demo User' + ]; + + $this->assertSame($expected, $api->getCurrentUser()->getData()); + } + + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + */ + public function testGetCurrentUserNotLoggedIn() { + + $this->userSession->expects($this->once())->method('getUser') + ->willReturn(null); + + $this->api->getCurrentUser(); + } + + + public function testGetUser() { + /** @var UsersController | PHPUnit_Framework_MockObject_MockObject $api */ + $api = $this->getMockBuilder('OCA\Provisioning_API\Controller\UsersController') + ->setConstructorArgs([ + 'provisioning_api', + $this->request, + $this->userManager, + $this->config, + $this->groupManager, + $this->userSession, + $this->accountManager, + $this->logger, + ]) + ->setMethods(['getUserData']) + ->getMock(); + + $expected = [ + 'id' => 'UID', + 'enabled' => 'true', + 'quota' => ['DummyValue'], + 'email' => 'demo@owncloud.org', + 'phone' => 'phone', + 'address' => 'address', + 'webpage' => 'website', + 'twitter' => 'twitter', + 'displayname' => 'Demo User' + ]; + + $api->expects($this->once())->method('getUserData') + ->with('uid') + ->willReturn($expected); + + $this->assertSame($expected, $api->getUser('uid')->getData()); + } + } diff --git a/apps/systemtags/l10n/de.js b/apps/systemtags/l10n/de.js index 2fb855a859b..8694bb0b389 100644 --- a/apps/systemtags/l10n/de.js +++ b/apps/systemtags/l10n/de.js @@ -40,7 +40,7 @@ OC.L10N.register( "{actor} removed system tag {systemtag} from {file}" : "{actor} hat den System-Tag {systemtag} von {file} entfernt", "%s (restricted)" : "%s (eingeschränkt)", "%s (invisible)" : "%s (unsichtbar)", - "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden", + "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert", "Collaborative tags" : "Zusammenarbeits-Tags", "Name" : "Name", "Delete" : "Löschen", diff --git a/apps/systemtags/l10n/de.json b/apps/systemtags/l10n/de.json index defb3f58a0c..9c408bb0c09 100644 --- a/apps/systemtags/l10n/de.json +++ b/apps/systemtags/l10n/de.json @@ -38,7 +38,7 @@ "{actor} removed system tag {systemtag} from {file}" : "{actor} hat den System-Tag {systemtag} von {file} entfernt", "%s (restricted)" : "%s (eingeschränkt)", "%s (invisible)" : "%s (unsichtbar)", - "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden", + "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert", "Collaborative tags" : "Zusammenarbeits-Tags", "Name" : "Name", "Delete" : "Löschen", diff --git a/apps/systemtags/l10n/de_DE.js b/apps/systemtags/l10n/de_DE.js index 33554f5086d..69d9bce4420 100644 --- a/apps/systemtags/l10n/de_DE.js +++ b/apps/systemtags/l10n/de_DE.js @@ -40,7 +40,7 @@ OC.L10N.register( "{actor} removed system tag {systemtag} from {file}" : "{actor} hat den System-Tag {systemtag} von {file} entfernt", "%s (restricted)" : "%s (eingeschränkt)", "%s (invisible)" : "%s (unsichtbar)", - "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden", + "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert", "Collaborative tags" : "Gemeinsame Tags", "Name" : "Name", "Delete" : "Löschen", diff --git a/apps/systemtags/l10n/de_DE.json b/apps/systemtags/l10n/de_DE.json index f1a71612dfb..1155159a066 100644 --- a/apps/systemtags/l10n/de_DE.json +++ b/apps/systemtags/l10n/de_DE.json @@ -38,7 +38,7 @@ "{actor} removed system tag {systemtag} from {file}" : "{actor} hat den System-Tag {systemtag} von {file} entfernt", "%s (restricted)" : "%s (eingeschränkt)", "%s (invisible)" : "%s (unsichtbar)", - "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden", + "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert", "Collaborative tags" : "Gemeinsame Tags", "Name" : "Name", "Delete" : "Löschen", diff --git a/apps/systemtags/l10n/sq.js b/apps/systemtags/l10n/sq.js index 9312d671bd1..3c1c1b4f039 100644 --- a/apps/systemtags/l10n/sq.js +++ b/apps/systemtags/l10n/sq.js @@ -2,31 +2,52 @@ OC.L10N.register( "systemtags", { "Tags" : "Etiketa", + "Update" : "Përditëso", + "Create" : "Krijo", + "Select tag…" : "Përzgjidh etiketën...", "Tagged files" : "Kartela të etiketuara", "Select tags to filter by" : "Përzgjidhni etiketa sipas të cilat të bëhet filtrimi", + "No tags found" : "Asnjë etiket nuk u gjet", "Please select tags to filter by" : "Ju lutemi, përzgjidhni etiketa sipas të cilat të bëhet filtrimi", "No files found for the selected tags" : "S’u gjetën kartela për etiketat e përzgjedhura", + "Added system tag %1$s" : "U shtua etiketa %1$s e sistemit ", + "Added system tag {systemtag}" : "Tagu i shtuar i sistemit{systemtag}", + "%1$s added system tag %2$s" : "%1$s shtoi etiketën %2$s të sistemit ", + "{actor} added system tag {systemtag}" : "{actor} shtoi etiketën e sistemit {systemtag}", + "Removed system tag %1$s" : "Hoqi etiketën %1$s të sistemit ", + "Removed system tag {systemtag}" : "Hoqi etiketën e sistemit {systemtag}", + "%1$s removed system tag %2$s" : "%1$s hoqi etiketën %2$s të sistemit ", + "{actor} removed system tag {systemtag}" : "{actor} hoqi etiketën e sistemit {systemtag}", + "You created system tag %1$s" : "Ju krijuat etiketën %1$s të sistemit", + "%1$s created system tag %2$s" : "%1$s krijoi etiketën e sistemit %2$s", + "You deleted system tag %1$s" : "Ju fshit etiketën %1$s të sistemit", + "You deleted system tag {systemtag}" : "Ju fshit etiketën {systemtag} të sistemit", + "%1$s deleted system tag %2$s" : "%1$s fshiu etiketën e sistemit %2$s", + "{actor} deleted system tag {systemtag}" : "{actor} fshiu etiketën {systemtag} të sistemit", + "You updated system tag %2$s to %1$s" : "Ju përditësuat etiketën e sistemit nga %2$s në %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Ju përditësuat etiketën e sistemit nga {oldsystemtag} në {newsystemtag}", + "%1$s updated system tag %3$s to %2$s" : "%1$s përditësoi etiketën e sistemit %3$s si %2$s", + "You added system tag %2$s to %1$s" : "Ju shtuat tagun e sistemit%2$s në %1$s", + "You added system tag {systemtag} to {file}" : "Ju shtuat tagun e sistemit{systemtag} në{file}", + "You removed system tag {systemtag} from {file}" : "Hoqët etiketën e sistemit {systemtag} nga {file}", + "%s (restricted)" : "%s (e kufizuar)", + "%s (invisible)" : "%s (e padukshme)", "<strong>System tags</strong> for a file have been modified" : "U ndryshyan <strong>etiketa sistemi</strong>për një kartelë", + "Name" : "Emër", + "No files in here" : "S’ka kartela këtu", + "No entries found in this folder" : "S’u gjetën zëra në këtë dosje", + "Size" : "Madhësi", + "Modified" : "Ndryshuar më", "You assigned system tag %3$s" : "Caktuat etiketën e sistemit %3$s", "%1$s assigned system tag %3$s" : "%1$s caktoi etiketën e sistemit %3$s", "You unassigned system tag %3$s" : "I hoqët etiketën e sistemit %3$s", "%1$s unassigned system tag %3$s" : "%1$s e hoqi %3$s si etiketë sistemi", "You created system tag %2$s" : "Krijuat etiketën e sistemit %2$s", - "%1$s created system tag %2$s" : "%1$s krijoi etiketën e sistemit %2$s", "You deleted system tag %2$s" : "Fshitë etiketën e sistemit %2$s", - "%1$s deleted system tag %2$s" : "%1$s fshiu etiketën e sistemit %2$s", "You updated system tag %3$s to %2$s" : "Përditësuat etiketën e sistemit %3$s në %2$s", - "%1$s updated system tag %3$s to %2$s" : "%1$s përditësoi etiketën e sistemit %3$s si %2$s", "You assigned system tag %3$s to %2$s" : "Caktuat etiketë sistemi %3$s për %2$s", "%1$s assigned system tag %3$s to %2$s" : "%1$s caktoi etiketën e sistemit %3$s si %2$s", "You unassigned system tag %3$s from %2$s" : "I hoqët %2$s etiketën e sistemit %3$s", - "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s", - "%s (restricted)" : "%s (e kufizuar)", - "%s (invisible)" : "%s (e padukshme)", - "Name" : "Emër", - "No files in here" : "S’ka kartela këtu", - "No entries found in this folder" : "S’u gjetën zëra në këtë dosje", - "Size" : "Madhësi", - "Modified" : "Ndryshuar më" + "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/systemtags/l10n/sq.json b/apps/systemtags/l10n/sq.json index eed88992e5a..31b30a1ffa3 100644 --- a/apps/systemtags/l10n/sq.json +++ b/apps/systemtags/l10n/sq.json @@ -1,30 +1,51 @@ { "translations": { "Tags" : "Etiketa", + "Update" : "Përditëso", + "Create" : "Krijo", + "Select tag…" : "Përzgjidh etiketën...", "Tagged files" : "Kartela të etiketuara", "Select tags to filter by" : "Përzgjidhni etiketa sipas të cilat të bëhet filtrimi", + "No tags found" : "Asnjë etiket nuk u gjet", "Please select tags to filter by" : "Ju lutemi, përzgjidhni etiketa sipas të cilat të bëhet filtrimi", "No files found for the selected tags" : "S’u gjetën kartela për etiketat e përzgjedhura", + "Added system tag %1$s" : "U shtua etiketa %1$s e sistemit ", + "Added system tag {systemtag}" : "Tagu i shtuar i sistemit{systemtag}", + "%1$s added system tag %2$s" : "%1$s shtoi etiketën %2$s të sistemit ", + "{actor} added system tag {systemtag}" : "{actor} shtoi etiketën e sistemit {systemtag}", + "Removed system tag %1$s" : "Hoqi etiketën %1$s të sistemit ", + "Removed system tag {systemtag}" : "Hoqi etiketën e sistemit {systemtag}", + "%1$s removed system tag %2$s" : "%1$s hoqi etiketën %2$s të sistemit ", + "{actor} removed system tag {systemtag}" : "{actor} hoqi etiketën e sistemit {systemtag}", + "You created system tag %1$s" : "Ju krijuat etiketën %1$s të sistemit", + "%1$s created system tag %2$s" : "%1$s krijoi etiketën e sistemit %2$s", + "You deleted system tag %1$s" : "Ju fshit etiketën %1$s të sistemit", + "You deleted system tag {systemtag}" : "Ju fshit etiketën {systemtag} të sistemit", + "%1$s deleted system tag %2$s" : "%1$s fshiu etiketën e sistemit %2$s", + "{actor} deleted system tag {systemtag}" : "{actor} fshiu etiketën {systemtag} të sistemit", + "You updated system tag %2$s to %1$s" : "Ju përditësuat etiketën e sistemit nga %2$s në %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Ju përditësuat etiketën e sistemit nga {oldsystemtag} në {newsystemtag}", + "%1$s updated system tag %3$s to %2$s" : "%1$s përditësoi etiketën e sistemit %3$s si %2$s", + "You added system tag %2$s to %1$s" : "Ju shtuat tagun e sistemit%2$s në %1$s", + "You added system tag {systemtag} to {file}" : "Ju shtuat tagun e sistemit{systemtag} në{file}", + "You removed system tag {systemtag} from {file}" : "Hoqët etiketën e sistemit {systemtag} nga {file}", + "%s (restricted)" : "%s (e kufizuar)", + "%s (invisible)" : "%s (e padukshme)", "<strong>System tags</strong> for a file have been modified" : "U ndryshyan <strong>etiketa sistemi</strong>për një kartelë", + "Name" : "Emër", + "No files in here" : "S’ka kartela këtu", + "No entries found in this folder" : "S’u gjetën zëra në këtë dosje", + "Size" : "Madhësi", + "Modified" : "Ndryshuar më", "You assigned system tag %3$s" : "Caktuat etiketën e sistemit %3$s", "%1$s assigned system tag %3$s" : "%1$s caktoi etiketën e sistemit %3$s", "You unassigned system tag %3$s" : "I hoqët etiketën e sistemit %3$s", "%1$s unassigned system tag %3$s" : "%1$s e hoqi %3$s si etiketë sistemi", "You created system tag %2$s" : "Krijuat etiketën e sistemit %2$s", - "%1$s created system tag %2$s" : "%1$s krijoi etiketën e sistemit %2$s", "You deleted system tag %2$s" : "Fshitë etiketën e sistemit %2$s", - "%1$s deleted system tag %2$s" : "%1$s fshiu etiketën e sistemit %2$s", "You updated system tag %3$s to %2$s" : "Përditësuat etiketën e sistemit %3$s në %2$s", - "%1$s updated system tag %3$s to %2$s" : "%1$s përditësoi etiketën e sistemit %3$s si %2$s", "You assigned system tag %3$s to %2$s" : "Caktuat etiketë sistemi %3$s për %2$s", "%1$s assigned system tag %3$s to %2$s" : "%1$s caktoi etiketën e sistemit %3$s si %2$s", "You unassigned system tag %3$s from %2$s" : "I hoqët %2$s etiketën e sistemit %3$s", - "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s", - "%s (restricted)" : "%s (e kufizuar)", - "%s (invisible)" : "%s (e padukshme)", - "Name" : "Emër", - "No files in here" : "S’ka kartela këtu", - "No entries found in this folder" : "S’u gjetën zëra në këtë dosje", - "Size" : "Madhësi", - "Modified" : "Ndryshuar më" + "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/theming/img/app-dark.svg b/apps/theming/img/app-dark.svg new file mode 100644 index 00000000000..adf97966c41 --- /dev/null +++ b/apps/theming/img/app-dark.svg @@ -0,0 +1 @@ +<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M10.707 11.412l-.587-.587-.03-.03a.513.513 0 0 1-.074-.526L13.07 3.4l-1.5-1.498-.15.15-.708-.706.505-.505a.538.538 0 0 1 .224-.128c.04-.01.05-.01.087-.016h.087c.04.006.05.006.086.016.072.02.134.055.192.1.74.676 1.42 1.415 2.127 2.124a.503.503 0 0 1 .103.556l-3.053 6.87.344.343.49-.49 3.01 3.01a1.192 1.192 0 0 1-1.685 1.686l-3.012-3.01.49-.488zm-.533-10.217a.986.986 0 0 0-1.396 0l-7.582 7.58a.99.99 0 0 0 0 1.398l1.397 1.396a.986.986 0 0 0 1.396 0l7.58-7.583a.988.988 0 0 0 0-1.396l-1.396-1.395z" fill="#000"/></svg> diff --git a/apps/theming/lib/Settings/Section.php b/apps/theming/lib/Settings/Section.php index cffbb8901c8..6078743dead 100644 --- a/apps/theming/lib/Settings/Section.php +++ b/apps/theming/lib/Settings/Section.php @@ -24,13 +24,21 @@ namespace OCA\Theming\Settings; use OCP\IL10N; -use OCP\Settings\ISection; +use OCP\IURLGenerator; +use OCP\Settings\IIconSection; -class Section implements ISection { +class Section implements IIconSection { /** @var IL10N */ private $l; + /** @var IURLGenerator */ + private $url; - public function __construct(IL10N $l) { + /** + * @param IURLGenerator $url + * @param IL10N $l + */ + public function __construct(IURLGenerator $url, IL10N $l) { + $this->url = $url; $this->l = $l; } @@ -64,4 +72,11 @@ class Section implements ISection { public function getPriority() { return 30; } + + /** + * {@inheritdoc} + */ + public function getIcon() { + return $this->url->imagePath('theming', 'app-dark.svg'); + } } diff --git a/apps/theming/templates/settings-admin.php b/apps/theming/templates/settings-admin.php index 013b3bcf34f..920b4a007da 100644 --- a/apps/theming/templates/settings-admin.php +++ b/apps/theming/templates/settings-admin.php @@ -74,7 +74,7 @@ style('theming', 'settings-admin'); <div> <form class="uploadButton inlineblock" method="post" action="<?php p($_['uploadLogoRoute']) ?>"> <input type="hidden" id="current-backgroundMime" name="current-backgroundMime" value="<?php p($_['backgroundMime']); ?>" /> - <label for="upload-login-background"><span><?php p($l->t('Log in image')) ?></span></label> + <label for="upload-login-background"><span><?php p($l->t('Login image')) ?></span></label> <input id="upload-login-background" class="upload-logo-field" name="upload-login-background" type="file"> <label for="upload-login-background" class="button icon-upload svg" id="upload-login-background" title="<?php p($l->t("Upload new login background")) ?>"></label> <div data-setting="backgroundMime" data-toggle="tooltip" data-original-title="<?php p($l->t('reset to default')); ?>" class="theme-undo icon icon-history"></div> diff --git a/apps/theming/tests/Settings/SectionTest.php b/apps/theming/tests/Settings/SectionTest.php index 3a3a4375236..90d1854aebf 100644 --- a/apps/theming/tests/Settings/SectionTest.php +++ b/apps/theming/tests/Settings/SectionTest.php @@ -25,19 +25,24 @@ namespace OCA\Theming\Tests\Settings; use OCA\Theming\Settings\Section; use OCP\IL10N; +use OCP\IURLGenerator; use Test\TestCase; class SectionTest extends TestCase { - /** @var IL10N */ + /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ + private $url; + /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */ private $l; /** @var Section */ private $section; public function setUp() { parent::setUp(); - $this->l = $this->getMockBuilder('\OCP\IL10N')->getMock(); + $this->url = $this->createMock(IURLGenerator::class); + $this->l = $this->createMock(IL10N::class); $this->section = new Section( + $this->url, $this->l ); } @@ -59,4 +64,13 @@ class SectionTest extends TestCase { public function testGetPriority() { $this->assertSame(30, $this->section->getPriority()); } + + public function testGetIcon() { + $this->url->expects($this->once()) + ->method('imagePath') + ->with('theming', 'app-dark.svg') + ->willReturn('icon'); + + $this->assertSame('icon', $this->section->getIcon()); + } } diff --git a/apps/twofactor_backupcodes/l10n/lv.js b/apps/twofactor_backupcodes/l10n/lv.js new file mode 100644 index 00000000000..8d0aba6bab3 --- /dev/null +++ b/apps/twofactor_backupcodes/l10n/lv.js @@ -0,0 +1,17 @@ +OC.L10N.register( + "twofactor_backupcodes", + { + "Generate backup codes" : "Izveidot rezerves kodus", + "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Rezerves kodi ir ģenerēti. {{used}} no {{total}} kodiem ir izmantoti.", + "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Šie ir jūsu dublējuma kodi. Lūdzu saglabāt un / vai izdrukāt tos, jūs nevarēsiet izlasīt kodus vēlreiz", + "Save backup codes" : "Saglabāt rezerves kodus", + "Print backup codes" : "Drukāt dublējuma kodus", + "Regenerate backup codes" : "Atjaunot dublējuma kodus", + "If you regenerate backup codes, you automatically invalidate old codes." : "Ja atjaunot dublējum kodus, tiek automātiski anulēti vecie kodi.", + "An error occurred while generating your backup codes" : "Radās kļūda, ģenerējot jūsu dublējuma kodus", + "Nextcloud backup codes" : "Nextcloud dublēšanas kodi", + "Two-factor authentication" : "Divpakāpju autentifikācija", + "Backup code" : "Dublēšanas kods", + "Use backup code" : "Izmantojiet dublēšanas kodu" +}, +"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/apps/twofactor_backupcodes/l10n/lv.json b/apps/twofactor_backupcodes/l10n/lv.json new file mode 100644 index 00000000000..35cd09352c2 --- /dev/null +++ b/apps/twofactor_backupcodes/l10n/lv.json @@ -0,0 +1,15 @@ +{ "translations": { + "Generate backup codes" : "Izveidot rezerves kodus", + "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Rezerves kodi ir ģenerēti. {{used}} no {{total}} kodiem ir izmantoti.", + "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Šie ir jūsu dublējuma kodi. Lūdzu saglabāt un / vai izdrukāt tos, jūs nevarēsiet izlasīt kodus vēlreiz", + "Save backup codes" : "Saglabāt rezerves kodus", + "Print backup codes" : "Drukāt dublējuma kodus", + "Regenerate backup codes" : "Atjaunot dublējuma kodus", + "If you regenerate backup codes, you automatically invalidate old codes." : "Ja atjaunot dublējum kodus, tiek automātiski anulēti vecie kodi.", + "An error occurred while generating your backup codes" : "Radās kļūda, ģenerējot jūsu dublējuma kodus", + "Nextcloud backup codes" : "Nextcloud dublēšanas kodi", + "Two-factor authentication" : "Divpakāpju autentifikācija", + "Backup code" : "Dublēšanas kods", + "Use backup code" : "Izmantojiet dublēšanas kodu" +},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" +}
\ No newline at end of file diff --git a/apps/updatenotification/l10n/ja.js b/apps/updatenotification/l10n/ja.js index 2e8e64decb3..2f55b714507 100644 --- a/apps/updatenotification/l10n/ja.js +++ b/apps/updatenotification/l10n/ja.js @@ -7,6 +7,7 @@ OC.L10N.register( "Channel updated" : "チャンネルが更新されました", "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 へアップデートが利用可能です。", "A new version is available: %s" : "新しいバージョンが利用可能: %s", "Open updater" : "アップデーターを開く", "Download now" : "今すぐダウンロード", diff --git a/apps/updatenotification/l10n/ja.json b/apps/updatenotification/l10n/ja.json index 22fb09f50fc..25f9244798b 100644 --- a/apps/updatenotification/l10n/ja.json +++ b/apps/updatenotification/l10n/ja.json @@ -5,6 +5,7 @@ "Channel updated" : "チャンネルが更新されました", "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 へアップデートが利用可能です。", "A new version is available: %s" : "新しいバージョンが利用可能: %s", "Open updater" : "アップデーターを開く", "Download now" : "今すぐダウンロード", diff --git a/apps/updatenotification/l10n/zh_CN.js b/apps/updatenotification/l10n/zh_CN.js index ddfe6179139..9c224667f6b 100644 --- a/apps/updatenotification/l10n/zh_CN.js +++ b/apps/updatenotification/l10n/zh_CN.js @@ -6,8 +6,8 @@ OC.L10N.register( "{version} is available. Get more information on how to update." : "新版本 {version} 已可以使用。获取更多升级相关信息。", "Channel updated" : "更新通道", "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 。", + "Update for %1$s to version %2$s is available." : "可以从 %1$s 版本更新到 %2$s 版本。", + "Update for {app} to version %s is available." : "可以将您的 {app} 更新到版本 %s 。", "A new version is available: %s" : "有可用的新版本: %s", "Open updater" : "打开更新器", "Download now" : "开始下载", diff --git a/apps/updatenotification/l10n/zh_CN.json b/apps/updatenotification/l10n/zh_CN.json index fc886540cb4..4ffaf9f9e96 100644 --- a/apps/updatenotification/l10n/zh_CN.json +++ b/apps/updatenotification/l10n/zh_CN.json @@ -4,8 +4,8 @@ "{version} is available. Get more information on how to update." : "新版本 {version} 已可以使用。获取更多升级相关信息。", "Channel updated" : "更新通道", "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 。", + "Update for %1$s to version %2$s is available." : "可以从 %1$s 版本更新到 %2$s 版本。", + "Update for {app} to version %s is available." : "可以将您的 {app} 更新到版本 %s 。", "A new version is available: %s" : "有可用的新版本: %s", "Open updater" : "打开更新器", "Download now" : "开始下载", diff --git a/apps/user_ldap/appinfo/routes.php b/apps/user_ldap/appinfo/routes.php index c01a3c11472..45b43c21409 100644 --- a/apps/user_ldap/appinfo/routes.php +++ b/apps/user_ldap/appinfo/routes.php @@ -36,3 +36,13 @@ $this->create('user_ldap_ajax_testConfiguration', 'ajax/testConfiguration.php') ->actionInclude('user_ldap/ajax/testConfiguration.php'); $this->create('user_ldap_ajax_wizard', 'ajax/wizard.php') ->actionInclude('user_ldap/ajax/wizard.php'); + +$application = new \OCP\AppFramework\App('user_ldap'); +$application->registerRoutes($this, [ + 'ocs' => [ + ['name' => 'ConfigAPI#create', 'url' => '/api/v1/config', 'verb' => 'POST'], + ['name' => 'ConfigAPI#show', 'url' => '/api/v1/config/{configID}', 'verb' => 'GET'], + ['name' => 'ConfigAPI#modify', 'url' => '/api/v1/config/{configID}', 'verb' => 'PUT'], + ['name' => 'ConfigAPI#delete', 'url' => '/api/v1/config/{configID}', 'verb' => 'DELETE'], + ] +]); diff --git a/apps/user_ldap/img/app-dark.svg b/apps/user_ldap/img/app-dark.svg new file mode 100644 index 00000000000..54939fab4f2 --- /dev/null +++ b/apps/user_ldap/img/app-dark.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" viewBox="0 0 16 16"> + <path style="block-progression:tb;color:#000000;text-transform:none;text-indent:0" fill="#000" d="m8.4036 1c-1.7312 0-3.1998 1.2661-3.1998 2.9 0.012287 0.51643 0.058473 1.1532 0.36664 2.5v0.033333l0.033328 0.033333c0.098928 0.28338 0.24289 0.44549 0.4333 0.66666s0.41742 0.48149 0.63328 0.69999c0.025397 0.025708 0.041676 0.041633 0.066656 0.066677 0.04281 0.18631 0.094672 0.38681 0.13332 0.56666 0.10284 0.47851 0.092296 0.81737 0.066668 0.93332-0.74389 0.26121-1.6694 0.57228-2.4998 0.93332-0.46622 0.2027-0.8881 0.3837-1.2332 0.59999-0.34513 0.2163-0.68837 0.37971-0.79994 0.86666-0.16004 0.63293-0.19866 0.7539-0.39997 1.5333-0.027212 0.20914 0.083011 0.42961 0.26665 0.53333 1.5078 0.81451 3.824 1.1423 6.1329 1.1333s4.6066-0.35609 6.0662-1.1333c0.11739-0.07353 0.14304-0.10869 0.13332-0.2333-0.04365-0.68908-0.08154-1.3669-0.13332-1.7666-0.01807-0.09908-0.06492-0.19275-0.13332-0.26666-0.46366-0.5537-1.1564-0.89218-1.9665-1.2333-0.7396-0.31144-1.6067-0.63486-2.4665-0.99999-0.048123-0.10721-0.095926-0.41912 0-0.89999 0.025759-0.12912 0.066096-0.26742 0.099994-0.4 0.0808-0.090507 0.14378-0.16447 0.23332-0.26666 0.19096-0.21796 0.39614-0.44661 0.56662-0.66666s0.30996-0.40882 0.39997-0.66666l0.03333-0.033333c0.34839-1.4062 0.34857-1.9929 0.36664-2.5v-0.033333c0-1.6339-1.4686-2.9-3.1998-2.9z"/> +</svg> diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js index cbbe871d9cc..d07010761eb 100644 --- a/apps/user_ldap/l10n/fr.js +++ b/apps/user_ldap/l10n/fr.js @@ -10,7 +10,7 @@ OC.L10N.register( "No action specified" : "Aucune action spécifiée", "No configuration specified" : "Aucune configuration spécifiée", "No data specified" : "Aucune donnée spécifiée", - " Could not set configuration %s" : "Impossible de spécifier la configuration %s", + " Could not set configuration %s" : "Impossible d'appliquer la configuration %s", "Action does not exist" : "L'action n'existe pas", "The Base DN appears to be wrong" : "Le DN de base est erroné", "Testing configuration…" : "Test de configuration", @@ -36,7 +36,7 @@ OC.L10N.register( "LDAP Operations error. Anonymous bind might not be allowed." : "Erreur LDAP. La connexion anonyme au serveur n'est probablement pas acceptée.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "La sauvegarde a échoué. Veuillez vérifier que la base de données est opérationnelle. Rechargez avant de poursuivre.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Changer de mode activera les requêtes LDAP automatiques. Selon la taille de votre annuaire LDAP, cela peut prendre du temps. Voulez-vous toujours changer de mode ?", - "Mode switch" : "Changer de mode", + "Mode switch" : "Basculer de mode", "Select attributes" : "Sélectionner les attributs", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utilisateur introuvable. Veuillez vérifier les attributs de login et le nom d'utilisateur. Filtre effectif (à copier-coller pour valider en ligne de commande):<br/>", "User found and settings verified." : "Utilisateur trouvé et paramètres vérifiés.", @@ -122,7 +122,7 @@ OC.L10N.register( "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Non recommandé, à utiliser à des fins de tests uniquement. Si la connexion ne fonctionne qu'avec cette option, importez le certificat SSL du serveur LDAP dans le serveur %s.", "Cache Time-To-Live" : "Durée de vie du cache (TTL)", "in seconds. A change empties the cache." : "en secondes. Tout changement vide le cache.", - "Directory Settings" : "Paramètres du répertoire", + "Directory Settings" : "Paramètres du dossier", "User Display Name Field" : "Champ \"nom d'affichage\" de l'utilisateur", "The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage de l'utilisateur.", "2nd User Display Name Field" : "Second attribut pour le nom d'affichage", diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json index e31c5f7fbe2..72feb90e314 100644 --- a/apps/user_ldap/l10n/fr.json +++ b/apps/user_ldap/l10n/fr.json @@ -8,7 +8,7 @@ "No action specified" : "Aucune action spécifiée", "No configuration specified" : "Aucune configuration spécifiée", "No data specified" : "Aucune donnée spécifiée", - " Could not set configuration %s" : "Impossible de spécifier la configuration %s", + " Could not set configuration %s" : "Impossible d'appliquer la configuration %s", "Action does not exist" : "L'action n'existe pas", "The Base DN appears to be wrong" : "Le DN de base est erroné", "Testing configuration…" : "Test de configuration", @@ -34,7 +34,7 @@ "LDAP Operations error. Anonymous bind might not be allowed." : "Erreur LDAP. La connexion anonyme au serveur n'est probablement pas acceptée.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "La sauvegarde a échoué. Veuillez vérifier que la base de données est opérationnelle. Rechargez avant de poursuivre.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Changer de mode activera les requêtes LDAP automatiques. Selon la taille de votre annuaire LDAP, cela peut prendre du temps. Voulez-vous toujours changer de mode ?", - "Mode switch" : "Changer de mode", + "Mode switch" : "Basculer de mode", "Select attributes" : "Sélectionner les attributs", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utilisateur introuvable. Veuillez vérifier les attributs de login et le nom d'utilisateur. Filtre effectif (à copier-coller pour valider en ligne de commande):<br/>", "User found and settings verified." : "Utilisateur trouvé et paramètres vérifiés.", @@ -120,7 +120,7 @@ "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Non recommandé, à utiliser à des fins de tests uniquement. Si la connexion ne fonctionne qu'avec cette option, importez le certificat SSL du serveur LDAP dans le serveur %s.", "Cache Time-To-Live" : "Durée de vie du cache (TTL)", "in seconds. A change empties the cache." : "en secondes. Tout changement vide le cache.", - "Directory Settings" : "Paramètres du répertoire", + "Directory Settings" : "Paramètres du dossier", "User Display Name Field" : "Champ \"nom d'affichage\" de l'utilisateur", "The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage de l'utilisateur.", "2nd User Display Name Field" : "Second attribut pour le nom d'affichage", diff --git a/apps/user_ldap/l10n/id.js b/apps/user_ldap/l10n/id.js index 8c62d7df617..7f256c26649 100644 --- a/apps/user_ldap/l10n/id.js +++ b/apps/user_ldap/l10n/id.js @@ -40,12 +40,15 @@ OC.L10N.register( "Select attributes" : "Pilih atribut", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Pengguna tidak ditemukan. Mohon periksa atribut login dan nama pengguna Anda. Penyaring efektif (salin dan tempel berikut untuk validasi baris perintah):\n<br/>", "User found and settings verified." : "Pengguna ditemukan dan pengaturan terverifikasi.", + "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Pengaturan terverifikasi, tapi lebih dari satu pengguna ditemukan. Hanya pengguna pertama yang dapat masuk log. Pertimbangkan lebih mempersempit penyaringan.", "An unspecified error occurred. Please check the settings and the log." : "Terjadi kesalahan yang tidak disebutkan. Mohon periksa pengaturan dan log.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Penyaring pencarian tidak sah, kemungkinan karena masalah sintaks seperti jumlah kurung buka dan tutup tidak sama. Mohon diperiksa.", "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Terjadi kesalahan sambungan ke LDAP / AD, mohon periksa host, port dan kredensial.", "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Placeholder %uid tidak ada. Placeholder akan digantikan dengan nama login saat melakukan kueri LDAP / AD.", "Please provide a login name to test against" : "Mohon berikan nama login untuk mengujinya kembali", "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kotak grup telah dinonaktifkan, karena server LDAP / AD tidak mendukung keanggotaan.", + "Password change rejected. Hint: " : "Perubahan sandi ditolak. Petunjuk:", + "LDAP / AD integration" : "Integrasi LDAP / AD", "_%s group found_::_%s groups found_" : ["%s grup ditemukan"], "_%s user found_::_%s users found_" : ["%s pengguna ditemukan"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Tidak mendeteksi atribut nama tampilan pengguna. Silakan menentukannya sendiri di pengaturan ldap lanjutan.", @@ -140,6 +143,9 @@ OC.L10N.register( "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Ketika dihidupkan, grup yang berisi grup akan didukung. (Hanya bekerja jika atribut anggota grup berisi DN.)", "Paging chunksize" : "Paging chunksize", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize digunakan untuk pencarian paged LDAP yang mengembalikan hasil secara massal seperti enumerasi pengguna dan grup. (Atur dengan nilai 0 untuk menonaktifkan pencarian paged LDAP dalam situasi tersebut.)", + "Enable LDAP password changes per user" : "Aktifkan perubahan sandi LDAP per pengguna", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Perbolehkan pengguna LDAP mengubah sandi mereka dan perbolehkan Administrator Super dan Administrator Grup untuk mengubah sandi pengguna LDAP mereka. Hanya bekerja ketika kebijaksanaan akses kontrol terconfigurasi berdasarkan server LDAP. Sebagaimana sandi dikirim dalam plain teks ke server LDAP, pengiriman enkripsi harus digunakan dan hashing sandi harus terkonfigurasi di server LDAP.", + "(New password is sent as plain text to LDAP)" : "(Sandi baru dikirim sebagai plain teks ke LDAP)", "Special Attributes" : "Atribut Khusus", "Quota Field" : "Kolom Kuota", "Quota Default" : "Kuota Baku", diff --git a/apps/user_ldap/l10n/id.json b/apps/user_ldap/l10n/id.json index a356fdac06b..7fc32321558 100644 --- a/apps/user_ldap/l10n/id.json +++ b/apps/user_ldap/l10n/id.json @@ -38,12 +38,15 @@ "Select attributes" : "Pilih atribut", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Pengguna tidak ditemukan. Mohon periksa atribut login dan nama pengguna Anda. Penyaring efektif (salin dan tempel berikut untuk validasi baris perintah):\n<br/>", "User found and settings verified." : "Pengguna ditemukan dan pengaturan terverifikasi.", + "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Pengaturan terverifikasi, tapi lebih dari satu pengguna ditemukan. Hanya pengguna pertama yang dapat masuk log. Pertimbangkan lebih mempersempit penyaringan.", "An unspecified error occurred. Please check the settings and the log." : "Terjadi kesalahan yang tidak disebutkan. Mohon periksa pengaturan dan log.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Penyaring pencarian tidak sah, kemungkinan karena masalah sintaks seperti jumlah kurung buka dan tutup tidak sama. Mohon diperiksa.", "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Terjadi kesalahan sambungan ke LDAP / AD, mohon periksa host, port dan kredensial.", "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Placeholder %uid tidak ada. Placeholder akan digantikan dengan nama login saat melakukan kueri LDAP / AD.", "Please provide a login name to test against" : "Mohon berikan nama login untuk mengujinya kembali", "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kotak grup telah dinonaktifkan, karena server LDAP / AD tidak mendukung keanggotaan.", + "Password change rejected. Hint: " : "Perubahan sandi ditolak. Petunjuk:", + "LDAP / AD integration" : "Integrasi LDAP / AD", "_%s group found_::_%s groups found_" : ["%s grup ditemukan"], "_%s user found_::_%s users found_" : ["%s pengguna ditemukan"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Tidak mendeteksi atribut nama tampilan pengguna. Silakan menentukannya sendiri di pengaturan ldap lanjutan.", @@ -138,6 +141,9 @@ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Ketika dihidupkan, grup yang berisi grup akan didukung. (Hanya bekerja jika atribut anggota grup berisi DN.)", "Paging chunksize" : "Paging chunksize", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize digunakan untuk pencarian paged LDAP yang mengembalikan hasil secara massal seperti enumerasi pengguna dan grup. (Atur dengan nilai 0 untuk menonaktifkan pencarian paged LDAP dalam situasi tersebut.)", + "Enable LDAP password changes per user" : "Aktifkan perubahan sandi LDAP per pengguna", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Perbolehkan pengguna LDAP mengubah sandi mereka dan perbolehkan Administrator Super dan Administrator Grup untuk mengubah sandi pengguna LDAP mereka. Hanya bekerja ketika kebijaksanaan akses kontrol terconfigurasi berdasarkan server LDAP. Sebagaimana sandi dikirim dalam plain teks ke server LDAP, pengiriman enkripsi harus digunakan dan hashing sandi harus terkonfigurasi di server LDAP.", + "(New password is sent as plain text to LDAP)" : "(Sandi baru dikirim sebagai plain teks ke LDAP)", "Special Attributes" : "Atribut Khusus", "Quota Field" : "Kolom Kuota", "Quota Default" : "Kuota Baku", diff --git a/apps/user_ldap/l10n/sq.js b/apps/user_ldap/l10n/sq.js index dd53169a6bd..2f09cd96511 100644 --- a/apps/user_ldap/l10n/sq.js +++ b/apps/user_ldap/l10n/sq.js @@ -46,6 +46,7 @@ OC.L10N.register( "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Vendmbajtësja %uid mungon. Do të zëvendësohet me emrin e hyrjes, kur të kërkohet te LDAP / AD.", "Please provide a login name to test against" : "Ju lutemi, jepni një emër hyrjesh që të ritestohet", "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kutia e grupeve u çaktivizua, ngaqë shërbyesi LDAP / AD nuk mbulon memberOf.", + "LDAP / AD integration" : "Integrimi LDAP / AD", "_%s group found_::_%s groups found_" : ["U gjet %s grup","U gjetën %s grupe"], "_%s user found_::_%s users found_" : ["U gjet %s përdorues","U gjetën %s përdorues"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "S’u zbulua dot atribut emri përdoruesi në ekran. Ju lutemi, caktojeni ju vetë te rregullime e mëtejshme për LDAP.", @@ -140,6 +141,7 @@ OC.L10N.register( "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Kur aktivizohet, grupet që përmbajnë grupe mbulohen. (Funksionon vetëm nëse atributi për anëtar grupi përmban DN-ra.)", "Paging chunksize" : "Madhësi copash faqosjeje", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Madhësi copash të përdorura për kërkime LDAP të sistemuara në faqe, kërkime që japin përfundime të papërpunuara, të tilla si numër përdoruesish ose grupesh. (Caktimi si 0 i çaktivizon kërkimet e faqosura LDAP për këto raste.)", + "(New password is sent as plain text to LDAP)" : "(Fjalëkalimi i ri është dërgur si text i thjeshtë te LDAP)", "Special Attributes" : "Atribute Speciale", "Quota Field" : "Fushë Kuotash", "Quota Default" : "Parazgjedhje Kuotash", diff --git a/apps/user_ldap/l10n/sq.json b/apps/user_ldap/l10n/sq.json index 135a2f27170..053ae0f5a2d 100644 --- a/apps/user_ldap/l10n/sq.json +++ b/apps/user_ldap/l10n/sq.json @@ -44,6 +44,7 @@ "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Vendmbajtësja %uid mungon. Do të zëvendësohet me emrin e hyrjes, kur të kërkohet te LDAP / AD.", "Please provide a login name to test against" : "Ju lutemi, jepni një emër hyrjesh që të ritestohet", "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kutia e grupeve u çaktivizua, ngaqë shërbyesi LDAP / AD nuk mbulon memberOf.", + "LDAP / AD integration" : "Integrimi LDAP / AD", "_%s group found_::_%s groups found_" : ["U gjet %s grup","U gjetën %s grupe"], "_%s user found_::_%s users found_" : ["U gjet %s përdorues","U gjetën %s përdorues"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "S’u zbulua dot atribut emri përdoruesi në ekran. Ju lutemi, caktojeni ju vetë te rregullime e mëtejshme për LDAP.", @@ -138,6 +139,7 @@ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Kur aktivizohet, grupet që përmbajnë grupe mbulohen. (Funksionon vetëm nëse atributi për anëtar grupi përmban DN-ra.)", "Paging chunksize" : "Madhësi copash faqosjeje", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Madhësi copash të përdorura për kërkime LDAP të sistemuara në faqe, kërkime që japin përfundime të papërpunuara, të tilla si numër përdoruesish ose grupesh. (Caktimi si 0 i çaktivizon kërkimet e faqosura LDAP për këto raste.)", + "(New password is sent as plain text to LDAP)" : "(Fjalëkalimi i ri është dërgur si text i thjeshtë te LDAP)", "Special Attributes" : "Atribute Speciale", "Quota Field" : "Fushë Kuotash", "Quota Default" : "Parazgjedhje Kuotash", diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php index cace64a7deb..9f6639c0db0 100644 --- a/apps/user_ldap/lib/Access.php +++ b/apps/user_ldap/lib/Access.php @@ -678,6 +678,9 @@ class Access extends LDAPUtility implements IUserTools { */ public function cacheUserDisplayName($ocName, $displayName, $displayName2 = '') { $user = $this->userManager->get($ocName); + if($user === null) { + return; + } $displayName = $user->composeAndStoreDisplayName($displayName, $displayName2); $cacheKeyTrunk = 'getDisplayName'; $this->connection->writeToCache($cacheKeyTrunk.$ocName, $displayName); diff --git a/apps/user_ldap/lib/Command/CreateEmptyConfig.php b/apps/user_ldap/lib/Command/CreateEmptyConfig.php index 28d3a1d8bff..38d3192058c 100644 --- a/apps/user_ldap/lib/Command/CreateEmptyConfig.php +++ b/apps/user_ldap/lib/Command/CreateEmptyConfig.php @@ -29,6 +29,7 @@ use OCA\User_LDAP\Configuration; use OCA\User_LDAP\Helper; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class CreateEmptyConfig extends Command { @@ -47,29 +48,24 @@ class CreateEmptyConfig extends Command { $this ->setName('ldap:create-empty-config') ->setDescription('creates an empty LDAP configuration') + ->addOption( + 'only-print-prefix', + 'p', + InputOption::VALUE_NONE, + 'outputs only the prefix' + ) ; } protected function execute(InputInterface $input, OutputInterface $output) { - $configPrefix = $this->getNewConfigurationPrefix(); - $output->writeln("Created new configuration with configID '{$configPrefix}'"); - + $configPrefix = $this->helper->getNextServerConfigurationPrefix(); $configHolder = new Configuration($configPrefix); $configHolder->saveConfiguration(); - } - protected function getNewConfigurationPrefix() { - $serverConnections = $this->helper->getServerConfigurationPrefixes(); - - // first connection uses no prefix - if(sizeof($serverConnections) == 0) { - return ''; + $prose = ''; + if(!$input->getOption('only-print-prefix')) { + $prose = 'Created new configuration with configID '; } - - sort($serverConnections); - $lastKey = array_pop($serverConnections); - $lastNumber = intval(str_replace('s', '', $lastKey)); - $nextPrefix = 's' . str_pad($lastNumber + 1, 2, '0', STR_PAD_LEFT); - return $nextPrefix; + $output->writeln($prose . "{$configPrefix}"); } } diff --git a/apps/user_ldap/lib/Configuration.php b/apps/user_ldap/lib/Configuration.php index eb4fcd3fbe6..65ee9c70807 100644 --- a/apps/user_ldap/lib/Configuration.php +++ b/apps/user_ldap/lib/Configuration.php @@ -393,9 +393,12 @@ class Configuration { * @return bool */ protected function saveValue($varName, $value) { - return \OCP\Config::setAppValue('user_ldap', - $this->configPrefix.$varName, - $value); + \OC::$server->getConfig()->setAppValue( + 'user_ldap', + $this->configPrefix.$varName, + $value + ); + return true; } /** diff --git a/apps/user_ldap/lib/Controller/ConfigAPIController.php b/apps/user_ldap/lib/Controller/ConfigAPIController.php new file mode 100644 index 00000000000..7d51b0aafe4 --- /dev/null +++ b/apps/user_ldap/lib/Controller/ConfigAPIController.php @@ -0,0 +1,322 @@ +<?php +/** + * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @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\User_LDAP\Controller; + +use OC\CapabilitiesManager; +use OC\Core\Controller\OCSController; +use OC\Security\Bruteforce\Throttler; +use OC\Security\IdentityProof\Manager; +use OCA\User_LDAP\Configuration; +use OCA\User_LDAP\Helper; +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\OCS\OCSBadRequestException; +use OCP\AppFramework\OCS\OCSException; +use OCP\AppFramework\OCS\OCSNotFoundException; +use OCP\ILogger; +use OCP\IRequest; +use OCP\IUserManager; +use OCP\IUserSession; + +class ConfigAPIController extends OCSController { + + /** @var Helper */ + private $ldapHelper; + + /** @var ILogger */ + private $logger; + + public function __construct( + $appName, + IRequest $request, + CapabilitiesManager $capabilitiesManager, + IUserSession $userSession, + IUserManager $userManager, + Throttler $throttler, + Manager $keyManager, + Helper $ldapHelper, + ILogger $logger + ) { + parent::__construct( + $appName, + $request, + $capabilitiesManager, + $userSession, + $userManager, + $throttler, + $keyManager + ); + + + $this->ldapHelper = $ldapHelper; + $this->logger = $logger; + } + + /** + * creates a new (empty) configuration and returns the resulting prefix + * + * Example: curl -X POST -H "OCS-APIREQUEST: true" -u $admin:$password \ + * https://nextcloud.server/ocs/v2.php/apps/user_ldap/api/v1/config + * + * results in: + * + * <?xml version="1.0"?> + * <ocs> + * <meta> + * <status>ok</status> + * <statuscode>200</statuscode> + * <message>OK</message> + * </meta> + * <data> + * <configID>s40</configID> + * </data> + * </ocs> + * + * Failing example: if an exception is thrown (e.g. Database connection lost) + * the detailed error will be logged. The output will then look like: + * + * <?xml version="1.0"?> + * <ocs> + * <meta> + * <status>failure</status> + * <statuscode>999</statuscode> + * <message>An issue occurred when creating the new config.</message> + * </meta> + * <data/> + * </ocs> + * + * For JSON output provide the format=json parameter + * + * @return DataResponse + * @throws OCSException + */ + public function create() { + try { + $configPrefix = $this->ldapHelper->getNextServerConfigurationPrefix(); + $configHolder = new Configuration($configPrefix); + $configHolder->saveConfiguration(); + } catch (\Exception $e) { + $this->logger->logException($e); + throw new OCSException('An issue occurred when creating the new config.'); + } + return new DataResponse(['configID' => $configPrefix]); + } + + /** + * Deletes a LDAP configuration, if present. + * + * Example: + * curl -X DELETE -H "OCS-APIREQUEST: true" -u $admin:$password \ + * https://nextcloud.server/ocs/v2.php/apps/user_ldap/api/v1/config/s60 + * + * <?xml version="1.0"?> + * <ocs> + * <meta> + * <status>ok</status> + * <statuscode>200</statuscode> + * <message>OK</message> + * </meta> + * <data/> + * </ocs> + * + * @param string $configID + * @return DataResponse + * @throws OCSBadRequestException + * @throws OCSException + */ + public function delete($configID) { + try { + $this->ensureConfigIDExists($configID); + if(!$this->ldapHelper->deleteServerConfiguration($configID)) { + throw new OCSException('Could not delete configuration'); + } + } catch(OCSException $e) { + throw $e; + } catch(\Exception $e) { + $this->logger->logException($e); + throw new OCSException('An issue occurred when deleting the config.'); + } + + return new DataResponse(); + } + + /** + * modifies a configuration + * + * Example: + * curl -X PUT -d "configData[ldapHost]=ldaps://my.ldap.server&configData[ldapPort]=636" \ + * -H "OCS-APIREQUEST: true" -u $admin:$password \ + * https://nextcloud.server/ocs/v2.php/apps/user_ldap/api/v1/config/s60 + * + * <?xml version="1.0"?> + * <ocs> + * <meta> + * <status>ok</status> + * <statuscode>200</statuscode> + * <message>OK</message> + * </meta> + * <data/> + * </ocs> + * + * @param string $configID + * @param array $configData + * @return DataResponse + * @throws OCSException + */ + public function modify($configID, $configData) { + try { + $this->ensureConfigIDExists($configID); + + if(!is_array($configData)) { + throw new OCSBadRequestException('configData is not properly set'); + } + + $configuration = new Configuration($configID); + $configKeys = $configuration->getConfigTranslationArray(); + + foreach ($configKeys as $i => $key) { + if(isset($configData[$key])) { + $configuration->$key = $configData[$key]; + } + } + + $configuration->saveConfiguration(); + } catch(OCSException $e) { + throw $e; + } catch (\Exception $e) { + $this->logger->logException($e); + throw new OCSException('An issue occurred when modifying the config.'); + } + + return new DataResponse(); + } + + /** + * retrieves a configuration + * + * <?xml version="1.0"?> + * <ocs> + * <meta> + * <status>ok</status> + * <statuscode>200</statuscode> + * <message>OK</message> + * </meta> + * <data> + * <ldapHost>ldaps://my.ldap.server</ldapHost> + * <ldapPort>7770</ldapPort> + * <ldapBackupHost></ldapBackupHost> + * <ldapBackupPort></ldapBackupPort> + * <ldapBase>ou=small,dc=my,dc=ldap,dc=server</ldapBase> + * <ldapBaseUsers>ou=users,ou=small,dc=my,dc=ldap,dc=server</ldapBaseUsers> + * <ldapBaseGroups>ou=small,dc=my,dc=ldap,dc=server</ldapBaseGroups> + * <ldapAgentName>cn=root,dc=my,dc=ldap,dc=server</ldapAgentName> + * <ldapAgentPassword>clearTextWithShowPassword=1</ldapAgentPassword> + * <ldapTLS>1</ldapTLS> + * <turnOffCertCheck>0</turnOffCertCheck> + * <ldapIgnoreNamingRules/> + * <ldapUserDisplayName>displayname</ldapUserDisplayName> + * <ldapUserDisplayName2>uid</ldapUserDisplayName2> + * <ldapUserFilterObjectclass>inetOrgPerson</ldapUserFilterObjectclass> + * <ldapUserFilterGroups></ldapUserFilterGroups> + * <ldapUserFilter>(&(objectclass=nextcloudUser)(nextcloudEnabled=TRUE))</ldapUserFilter> + * <ldapUserFilterMode>1</ldapUserFilterMode> + * <ldapGroupFilter>(&(|(objectclass=nextcloudGroup)))</ldapGroupFilter> + * <ldapGroupFilterMode>0</ldapGroupFilterMode> + * <ldapGroupFilterObjectclass>nextcloudGroup</ldapGroupFilterObjectclass> + * <ldapGroupFilterGroups></ldapGroupFilterGroups> + * <ldapGroupDisplayName>cn</ldapGroupDisplayName> + * <ldapGroupMemberAssocAttr>memberUid</ldapGroupMemberAssocAttr> + * <ldapLoginFilter>(&(|(objectclass=inetOrgPerson))(uid=%uid))</ldapLoginFilter> + * <ldapLoginFilterMode>0</ldapLoginFilterMode> + * <ldapLoginFilterEmail>0</ldapLoginFilterEmail> + * <ldapLoginFilterUsername>1</ldapLoginFilterUsername> + * <ldapLoginFilterAttributes></ldapLoginFilterAttributes> + * <ldapQuotaAttribute></ldapQuotaAttribute> + * <ldapQuotaDefault></ldapQuotaDefault> + * <ldapEmailAttribute>mail</ldapEmailAttribute> + * <ldapCacheTTL>20</ldapCacheTTL> + * <ldapUuidUserAttribute>auto</ldapUuidUserAttribute> + * <ldapUuidGroupAttribute>auto</ldapUuidGroupAttribute> + * <ldapOverrideMainServer></ldapOverrideMainServer> + * <ldapConfigurationActive>1</ldapConfigurationActive> + * <ldapAttributesForUserSearch>uid;sn;givenname</ldapAttributesForUserSearch> + * <ldapAttributesForGroupSearch></ldapAttributesForGroupSearch> + * <ldapExperiencedAdmin>0</ldapExperiencedAdmin> + * <homeFolderNamingRule></homeFolderNamingRule> + * <hasPagedResultSupport></hasPagedResultSupport> + * <hasMemberOfFilterSupport></hasMemberOfFilterSupport> + * <useMemberOfToDetectMembership>1</useMemberOfToDetectMembership> + * <ldapExpertUsernameAttr>uid</ldapExpertUsernameAttr> + * <ldapExpertUUIDUserAttr>uid</ldapExpertUUIDUserAttr> + * <ldapExpertUUIDGroupAttr></ldapExpertUUIDGroupAttr> + * <lastJpegPhotoLookup>0</lastJpegPhotoLookup> + * <ldapNestedGroups>0</ldapNestedGroups> + * <ldapPagingSize>500</ldapPagingSize> + * <turnOnPasswordChange>1</turnOnPasswordChange> + * <ldapDynamicGroupMemberURL></ldapDynamicGroupMemberURL> + * </data> + * </ocs> + * + * @param string $configID + * @param bool|string $showPassword + * @return DataResponse + * @throws OCSException + */ + public function show($configID, $showPassword = false) { + try { + $this->ensureConfigIDExists($configID); + + $config = new Configuration($configID); + $data = $config->getConfiguration(); + if(!boolval(intval($showPassword))) { + $data['ldapAgentPassword'] = '***'; + } + foreach ($data as $key => $value) { + if(is_array($value)) { + $value = implode(';', $value); + $data[$key] = $value; + } + } + } catch(OCSException $e) { + throw $e; + } catch (\Exception $e) { + $this->logger->logException($e); + throw new OCSException('An issue occurred when modifying the config.'); + } + + return new DataResponse($data); + } + + /** + * if the given config ID is not available, an exception is thrown + * + * @param string $configID + * @throws OCSNotFoundException + */ + private function ensureConfigIDExists($configID) { + $prefixes = $this->ldapHelper->getServerConfigurationPrefixes(); + if(!in_array($configID, $prefixes, true)) { + throw new OCSNotFoundException('Config ID not found'); + } + } +} diff --git a/apps/user_ldap/lib/Helper.php b/apps/user_ldap/lib/Helper.php index b48b4001f9d..f1186ffa310 100644 --- a/apps/user_ldap/lib/Helper.php +++ b/apps/user_ldap/lib/Helper.php @@ -105,6 +105,25 @@ class Helper { return $result; } + /** + * return the next available configuration prefix + * + * @return string + */ + public function getNextServerConfigurationPrefix() { + $serverConnections = $this->getServerConfigurationPrefixes(); + + if(count($serverConnections) === 0) { + return 's01'; + } + + sort($serverConnections); + $lastKey = array_pop($serverConnections); + $lastNumber = intval(str_replace('s', '', $lastKey)); + $nextPrefix = 's' . str_pad($lastNumber + 1, 2, '0', STR_PAD_LEFT); + return $nextPrefix; + } + private function getServersConfig($value) { $regex = '/' . $value . '$/S'; diff --git a/apps/user_ldap/lib/Mapping/AbstractMapping.php b/apps/user_ldap/lib/Mapping/AbstractMapping.php index 8e7f1f8b137..6fb4a5436c3 100644 --- a/apps/user_ldap/lib/Mapping/AbstractMapping.php +++ b/apps/user_ldap/lib/Mapping/AbstractMapping.php @@ -209,6 +209,17 @@ abstract class AbstractMapping { * @return bool */ public function map($fdn, $name, $uuid) { + if(mb_strlen($fdn) > 255) { + \OC::$server->getLogger()->error( + 'Cannot map, because the DN exceeds 255 characters: {dn}', + [ + 'app' => 'user_ldap', + 'dn' => $fdn, + ] + ); + return false; + } + $row = array( 'ldap_dn' => $fdn, 'owncloud_name' => $name, diff --git a/apps/user_ldap/lib/Settings/Section.php b/apps/user_ldap/lib/Settings/Section.php index 82d8d0c84fa..86d293d3879 100644 --- a/apps/user_ldap/lib/Settings/Section.php +++ b/apps/user_ldap/lib/Settings/Section.php @@ -24,13 +24,21 @@ namespace OCA\User_LDAP\Settings; use OCP\IL10N; -use OCP\Settings\ISection; +use OCP\IURLGenerator; +use OCP\Settings\IIconSection; -class Section implements ISection { +class Section implements IIconSection { /** @var IL10N */ private $l; + /** @var IURLGenerator */ + private $url; - public function __construct(IL10N $l) { + /** + * @param IURLGenerator $url + * @param IL10N $l + */ + public function __construct(IURLGenerator $url, IL10N $l) { + $this->url = $url; $this->l = $l; } @@ -64,4 +72,11 @@ class Section implements ISection { public function getPriority() { return 25; } + + /** + * {@inheritdoc} + */ + public function getIcon() { + return $this->url->imagePath('user_ldap', 'app-dark.svg'); + } } diff --git a/apps/user_ldap/tests/Mapping/AbstractMappingTest.php b/apps/user_ldap/tests/Mapping/AbstractMappingTest.php index 91013085c2c..5c3474d9ad2 100644 --- a/apps/user_ldap/tests/Mapping/AbstractMappingTest.php +++ b/apps/user_ldap/tests/Mapping/AbstractMappingTest.php @@ -106,7 +106,8 @@ abstract class AbstractMappingTest extends \Test\TestCase { list($mapper, $data) = $this->initTest(); // test that mapping will not happen when it shall not - $paramKeys = array('', 'dn', 'name', 'uuid'); + $tooLongDN = 'uid=joann,ou=Secret Small Specialized Department,ou=Some Tremendously Important Department,ou=Another Very Important Department,ou=Pretty Meaningful Derpartment,ou=Quite Broad And General Department,ou=The Topmost Department,dc=hugelysuccessfulcompany,dc=com'; + $paramKeys = array('', 'dn', 'name', 'uuid', $tooLongDN); foreach($paramKeys as $key) { $failEntry = $data[0]; if(!empty($key)) { diff --git a/apps/user_ldap/tests/Settings/SectionTest.php b/apps/user_ldap/tests/Settings/SectionTest.php index 2d2165b8e56..5f565e89933 100644 --- a/apps/user_ldap/tests/Settings/SectionTest.php +++ b/apps/user_ldap/tests/Settings/SectionTest.php @@ -25,19 +25,24 @@ namespace OCA\User_LDAP\Tests\Settings; use OCA\User_LDAP\Settings\Section; use OCP\IL10N; +use OCP\IURLGenerator; use Test\TestCase; class SectionTest extends TestCase { - /** @var IL10N */ + /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ + private $url; + /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */ private $l; /** @var Section */ private $section; public function setUp() { parent::setUp(); - $this->l = $this->getMockBuilder('\OCP\IL10N')->getMock(); + $this->url = $this->createMock(IURLGenerator::class); + $this->l = $this->createMock(IL10N::class); $this->section = new Section( + $this->url, $this->l ); } @@ -59,4 +64,13 @@ class SectionTest extends TestCase { public function testGetPriority() { $this->assertSame(25, $this->section->getPriority()); } + + public function testGetIcon() { + $this->url->expects($this->once()) + ->method('imagePath') + ->with('user_ldap', 'app-dark.svg') + ->willReturn('icon'); + + $this->assertSame('icon', $this->section->getIcon()); + } } diff --git a/apps/workflowengine/lib/Settings/Section.php b/apps/workflowengine/lib/Settings/Section.php index df8bb807134..b46f9a4a35f 100644 --- a/apps/workflowengine/lib/Settings/Section.php +++ b/apps/workflowengine/lib/Settings/Section.php @@ -24,13 +24,21 @@ namespace OCA\WorkflowEngine\Settings; use OCP\IL10N; -use OCP\Settings\ISection; +use OCP\IURLGenerator; +use OCP\Settings\IIconSection; -class Section implements ISection { +class Section implements IIconSection { /** @var IL10N */ private $l; + /** @var IURLGenerator */ + private $url; - public function __construct(IL10N $l) { + /** + * @param IURLGenerator $url + * @param IL10N $l + */ + public function __construct(IURLGenerator $url, IL10N $l) { + $this->url = $url; $this->l = $l; } @@ -54,4 +62,11 @@ class Section implements ISection { public function getPriority() { return 55; } + + /** + * {@inheritdoc} + */ + public function getIcon() { + return $this->url->imagePath('core', 'actions/tag.svg'); + } } diff --git a/build/integration/config/behat.yml b/build/integration/config/behat.yml index 82ad6eaa170..3573f9d6a6b 100644 --- a/build/integration/config/behat.yml +++ b/build/integration/config/behat.yml @@ -75,6 +75,16 @@ default: - admin - admin regular_user_password: 123456 + ldap: + paths: + - %paths.base%/../ldap_features + contexts: + - LDAPContext: + baseUrl: http://localhost:8080 + admin: + - admin + - admin + regular_user_password: what_for extensions: jarnaiz\JUnitFormatter\JUnitFormatterExtension: diff --git a/build/integration/features/bootstrap/LDAPContext.php b/build/integration/features/bootstrap/LDAPContext.php new file mode 100644 index 00000000000..f23de6f47cd --- /dev/null +++ b/build/integration/features/bootstrap/LDAPContext.php @@ -0,0 +1,85 @@ +<?php + +/** + * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @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/>. + * + */ + +use Behat\Behat\Context\Context; +use Behat\Gherkin\Node\TableNode; + +class LDAPContext implements Context { + use BasicStructure; + + protected $configID; + + protected $apiUrl; + + /** + * @Given /^the response should contain a tag "([^"]*)"$/ + */ + public function theResponseShouldContainATag($arg1) { + $configID = $this->response->xml()->data[0]->$arg1; + PHPUnit_Framework_Assert::assertInstanceOf(SimpleXMLElement::class, $configID[0]); + } + + /** + * @Given /^creating an LDAP configuration at "([^"]*)"$/ + */ + public function creatingAnLDAPConfigurationAt($apiUrl) { + $this->apiUrl = $apiUrl; + $this->sendingToWith('POST', $this->apiUrl, null); + $configElements = $this->response->xml()->data[0]->configID; + $this->configID = $configElements[0]; + } + + /** + * @When /^deleting the LDAP configuration$/ + */ + public function deletingTheLDAPConfiguration() { + $this->sendingToWith('DELETE', $this->apiUrl . '/' . $this->configID, null); + } + + /** + * @Given /^the response should contain a tag "([^"]*)" with value "([^"]*)"$/ + */ + public function theResponseShouldContainATagWithValue($tagName, $expectedValue) { + $data = $this->response->xml()->data[0]->$tagName; + PHPUnit_Framework_Assert::assertEquals($expectedValue, $data[0]); + } + + /** + * @When /^getting the LDAP configuration with showPassword "([^"]*)"$/ + */ + public function gettingTheLDAPConfigurationWithShowPassword($showPassword) { + $this->sendingToWith( + 'GET', + $this->apiUrl . '/' . $this->configID . '?showPassword=' . $showPassword, + null + ); + } + + /** + * @Given /^setting the LDAP configuration to$/ + */ + public function settingTheLDAPConfigurationTo(TableNode $configData) { + $this->sendingToWith('PUT', $this->apiUrl . '/' . $this->configID, $configData); + } +} diff --git a/build/integration/ldap_features/ldap-ocs.feature b/build/integration/ldap_features/ldap-ocs.feature new file mode 100644 index 00000000000..a9ad0478702 --- /dev/null +++ b/build/integration/ldap_features/ldap-ocs.feature @@ -0,0 +1,70 @@ +Feature: LDAP + Background: + Given using api version "2" + + Scenario: Creating an new, empty configuration + Given As an "admin" + When sending "POST" to "/apps/user_ldap/api/v1/config" + Then the OCS status code should be "200" + And the HTTP status code should be "200" + And the response should contain a tag "configID" + + Scenario: Delete a non-existing configuration + Given As an "admin" + When sending "DELETE" to "/apps/user_ldap/api/v1/config/s666" + Then the OCS status code should be "404" + And the HTTP status code should be "404" + + Scenario: Create and delete a configuration + Given As an "admin" + And creating an LDAP configuration at "/apps/user_ldap/api/v1/config" + When deleting the LDAP configuration + Then the OCS status code should be "200" + And the HTTP status code should be "200" + + Scenario: Create and modify a configuration + Given As an "admin" + And creating an LDAP configuration at "/apps/user_ldap/api/v1/config" + When setting the LDAP configuration to + | configData[ldapHost] | ldaps://my.ldap.server | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + + Scenario: Modifying a non-existing configuration + Given As an "admin" + When sending "PUT" to "/apps/user_ldap/api/v1/config/s666" with + | configData[ldapHost] | ldaps://my.ldap.server | + Then the OCS status code should be "404" + And the HTTP status code should be "404" + + Scenario: Modifying an existing configuration with malformed configData + Given As an "admin" + And creating an LDAP configuration at "/apps/user_ldap/api/v1/config" + When setting the LDAP configuration to + | configData | ldapHost=ldaps://my.ldap.server | + Then the OCS status code should be "400" + And the HTTP status code should be "400" + + Scenario: create, modify and get a configuration + Given As an "admin" + And creating an LDAP configuration at "/apps/user_ldap/api/v1/config" + And setting the LDAP configuration to + | configData[ldapHost] | ldaps://my.ldap.server | + | configData[ldapLoginFilter] | (&(\|(objectclass=inetOrgPerson))(uid=%uid)) | + | configData[ldapAgentPassword] | psst,secret | + When getting the LDAP configuration with showPassword "0" + Then the OCS status code should be "200" + And the HTTP status code should be "200" + And the response should contain a tag "ldapHost" with value "ldaps://my.ldap.server" + And the response should contain a tag "ldapLoginFilter" with value "(&(|(objectclass=inetOrgPerson))(uid=%uid))" + And the response should contain a tag "ldapAgentPassword" with value "***" + + Scenario: receiving password in plain text + Given As an "admin" + And creating an LDAP configuration at "/apps/user_ldap/api/v1/config" + And setting the LDAP configuration to + | configData[ldapAgentPassword] | psst,secret | + When getting the LDAP configuration with showPassword "1" + Then the OCS status code should be "200" + And the HTTP status code should be "200" + And the response should contain a tag "ldapAgentPassword" with value "psst,secret" diff --git a/config/config.sample.php b/config/config.sample.php index 9a0c50425f2..a9ab67374f8 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -310,9 +310,9 @@ $CONFIG = array( * For ``qmail`` the binary is /var/qmail/bin/sendmail, and it must be installed * on your Unix system. * - * Defaults to ``sendmail`` + * Defaults to ``php`` */ -'mail_smtpmode' => 'sendmail', +'mail_smtpmode' => 'php', /** * This depends on ``mail_smtpmode``. Specify the IP address of your mail diff --git a/core/Application.php b/core/Application.php index dad7546dcb8..6621964c289 100644 --- a/core/Application.php +++ b/core/Application.php @@ -30,7 +30,9 @@ namespace OC\Core; +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; @@ -66,5 +68,24 @@ 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() + ); + }); } } diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php index 187c818b9e1..2509cdf0bde 100644 --- a/core/Controller/LoginController.php +++ b/core/Controller/LoginController.php @@ -170,6 +170,8 @@ class LoginController extends Controller { $parameters['user_autofocus'] = true; } + \OC_Util::addStyle('guest'); + return new TemplateResponse( $this->appName, 'login', $parameters, 'guest' ); diff --git a/core/Controller/OCSController.php b/core/Controller/OCSController.php index dc9775f2603..1deb5e958bd 100644 --- a/core/Controller/OCSController.php +++ b/core/Controller/OCSController.php @@ -106,20 +106,6 @@ class OCSController extends \OCP\AppFramework\OCSController { } /** - * @NoAdminRequired - * @return DataResponse - */ - public function getCurrentUser() { - $userObject = $this->userSession->getUser(); - $data = [ - 'id' => $userObject->getUID(), - 'display-name' => $userObject->getDisplayName(), - 'email' => $userObject->getEMailAddress(), - ]; - return new DataResponse($data); - } - - /** * @PublicPage * * @param string $login diff --git a/core/Controller/SetupController.php b/core/Controller/SetupController.php index bb7c8c4969d..87508423cd3 100644 --- a/core/Controller/SetupController.php +++ b/core/Controller/SetupController.php @@ -92,6 +92,7 @@ class SetupController { \OC_Util::addVendorScript('strengthify/jquery.strengthify'); \OC_Util::addVendorStyle('strengthify/strengthify'); + \OC_Util::addStyle('guest'); \OC_Util::addScript('setup'); \OC_Template::printGuestPage('', 'installation', $parameters); } diff --git a/core/css/apps.scss b/core/css/apps.scss index 93e60fbfbf1..bb9326fd22d 100644 --- a/core/css/apps.scss +++ b/core/css/apps.scss @@ -1,6 +1,16 @@ /** - * @copyright Copyright (c) 2014, Jan-Christoph Borchardt (http://jancborchardt.net) - * @copyright Copyright (c) 2017, John Molakvoæ (skjnldsv@protonmail.com) + * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com> + * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net> + * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de> + * @copyright Copyright (c) 2016, pgys <info@pexlab.space> + * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch> + * @copyright Copyright (c) 2016, Stefan Weil <sw@weilnetz.de> + * @copyright Copyright (c) 2016, Roeland Jago Douma <rullzer@owncloud.com> + * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch> + * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de> + * @copyright Copyright (c) 2015, Jan-Christoph Borchardt <hey@jancborchardt.net> + * @copyright Copyright (c) 2015, Thomas Müller <thomas.mueller@tmit.eu> + * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com> * * @license GNU AGPL version 3 or any later version * @@ -104,6 +114,12 @@ em { opacity: 1; box-shadow: inset 2px 0 #0082c9; } + li > a:first-child img { + margin-bottom: -3px; + margin-right: 11px; + width: 16px; + margin-left: 2px; + } .collapse { display: none; /* hide collapse button initially */ @@ -214,7 +230,8 @@ em { top: 0; bottom: 0; font-size: 12px; - button, .counter { + button, + .counter { width: 44px; height: 44px; padding-top: 12px; @@ -258,6 +275,7 @@ em { height: 100%; width: 100%; margin: 0; + box-shadow: none; } .app-navigation-entry-utils-menu-button { button { @@ -620,6 +638,7 @@ em { height: auto; margin: 0; font-weight: inherit; + box-shadow: none; /* prevent .action class to break the design */ &.action { padding: inherit !important; @@ -632,6 +651,7 @@ em { } > span { cursor: pointer; + white-space: nowrap; } > p { width: 150px; diff --git a/core/css/guest.css b/core/css/guest.css new file mode 100644 index 00000000000..3223e764ac0 --- /dev/null +++ b/core/css/guest.css @@ -0,0 +1,660 @@ +/* Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net + This file is licensed under the Affero General Public License version 3 or later. + See the COPYING-README file. */ + +/* Default and reset */ +html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section { margin:0; padding:0; border:0; outline:0; font-weight:inherit; font-size:100%; font-family:inherit; vertical-align:baseline; cursor:default; } +html, body { height:100%; } +article, aside, dialog, figure, footer, header, hgroup, nav, section { display:block; } +body { line-height:1.5; } +table { border-collapse:separate; border-spacing:0; white-space:nowrap; } +caption, th, td { text-align:left; font-weight:normal; } +table, td, th { vertical-align:middle; } +a { border:0; color:#000; text-decoration:none;} +a, a *, input, input *, select, .button span, label { cursor:pointer; } +ul { list-style:none; } + +body { + background-color: #ffffff; + font-weight: 400; + font-size: .8em; + line-height: 1.6em; + font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif; + color: #000; + text-align: center; + background-color: #0082c9; + background-image: url('../img/background.jpg?v=1'); + background-position: 50% 50%; + background-repeat: no-repeat; + background-size: cover; + background-attachment: fixed; /* fix background gradient */ + height: 100%; /* fix sticky footer */ +} + +/* Various fonts settings */ +p.info a, +#showAdvanced { + color: #fff; +} +#remember_login:hover+label, +#remember_login:focus+label, +#forgot-password:hover, +#forgot-password:focus, +p.info a:hover, +p.info a:focus { + opacity: .6; +} +em { + font-style: normal; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + opacity: .5; +} + +/* heading styles */ +h2 { + font-size: 20px; + font-weight: 300; + margin-bottom: 12px; + line-height: 140%; +} +h3 { + font-size: 15px; + font-weight: 300; + margin: 12px 0; +} + +/* Global content */ +#header { + padding-top: 100px; +} +#header .logo { + background-image: url(../img/logo-icon.svg?v=1); + background-repeat: no-repeat; + background-size: 175px; + background-position: center; + width: 252px; + height: 120px; + margin: 0 auto; +} +.wrapper { + min-height: 100%; + margin: 0 auto -70px; + width: 300px; +} +.v-align { + width: inherit; +} + +/* Default FORM */ +form { + position: relative; + width: 280px; + margin: 16px auto; + padding: 0; +} +form fieldset { + margin-bottom: 20px; + text-align: left; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +form #sqliteInformation { + margin-top: -20px; + margin-bottom: 20px; +} +form #adminaccount { + margin-bottom: 15px; +} +form fieldset legend, #datadirContent label { + width: 100%; +} +#datadirContent label { + display: block; + margin: 0; +} +form #datadirField legend { + margin-bottom: 15px; +} + +/* View more button */ +#showAdvanced { + padding: 13px; /* increase clickable area of Advanced dropdown */ +} +#showAdvanced img { + vertical-align: middle; /* adjust position of Advanced dropdown arrow */ +} + +/* Buttons and input */ +input, textarea, select, button { + font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif; +} +input { + font-size: 20px; + margin: 5px; + padding: 11px 10px 9px; + outline: none; + border-radius: 3px; +} +input[type="submit"], +input[type="button"], +button, .button, +select { + width: auto; + min-width: 25px; + padding: 5px; + background-color: rgba(240,240,240,.9); + font-weight: 600; + color: #555; + border: 1px solid rgba(240,240,240,.9); + cursor: pointer; +} +input[type="text"], +input[type="password"], +input[type='email'] { + width: 249px; + background: #fff; + color: #555; + cursor: text; + font-family: inherit; + -webkit-appearance: textfield; + -moz-appearance: textfield; + box-sizing: content-box; + border: none; + font-weight: 300; +} +input.login { + width: 269px; + background-position: right 16px center; +} +input[type="submit"], +input.updateButton, +input.update-continue { + padding: 10px 20px; /* larger log in and installation buttons */ +} +input.primary, +button.primary { + border: 1px solid #0082c9; + background-color: #00a2e9; + color: #fff; +} + +/* Radio and Checkbox */ +input[type="checkbox"].checkbox { + position: absolute; + left:-10000px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; +} +input[type="checkbox"].checkbox + label:before { + content: ""; + display: inline-block; + + height: 20px; + width: 20px; + vertical-align: middle; + + background: url('../img/actions/checkbox.svg') left top no-repeat; +} +input[type="checkbox"].checkbox:disabled +label:before { opacity: .6; } +input[type="checkbox"].checkbox.u-left +label:before { float: left; } +input[type="checkbox"].checkbox.u-hidden + label:before { display: none; } +input[type="checkbox"].checkbox:checked + label:before { + background-image: url('../img/actions/checkbox-checked.svg'); +} +input[type="checkbox"].checkbox:indeterminate + label:before { + background-image: url('../img/actions/checkbox-mixed.svg'); +} +input[type="checkbox"].checkbox:disabled + label:before { + background-image: url('../img/actions/checkbox-disabled.svg'); +} +input[type="checkbox"].checkbox:checked:disabled + label:before { + background-image: url('../img/actions/checkbox-checked-disabled.svg'); +} +input[type="checkbox"].checkbox:indeterminate:disabled + label:before { + background-image: url('../img/actions/checkbox-mixed-disabled.svg'); +} +input[type="checkbox"].checkbox--white + label:before { + background-image: url('../img/actions/checkbox-white.svg'); +} +input[type="checkbox"].checkbox--white:checked + label:before { + background-image: url('../img/actions/checkbox-checked-white.svg'); +} +input[type="checkbox"].checkbox--white:indeterminate + label:before { + background-image: url('../img/actions/checkbox-mixed-white.svg'); +} +input[type="checkbox"].checkbox--white:disabled + label:before { + background-image: url('../img/actions/checkbox-disabled-white.svg'); +} +input[type="checkbox"].checkbox--white:checked:disabled + label:before { + background-image: url('../img/actions/checkbox-checked-disabled.svg'); +} +input[type="checkbox"].checkbox--white:indeterminate:disabled + label:before { + background-image: url('../img/actions/checkbox-mixed-disabled.svg'); +} +input[type="checkbox"].checkbox:hover+label:before, input[type="checkbox"]:focus+label:before { + color:#111 !important; +} +input[type="checkbox"]+label { + position: relative; + margin: 0; + padding: 14px; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +input[type="radio"].radio { + position: absolute; + left:-10000px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; +} +input[type="radio"].radio + label:before { + content: ""; + display: inline-block; + + height: 20px; + width: 20px; + vertical-align: middle; + + background: url('../img/actions/radio.svg') left top no-repeat; +} +input[type="radio"].radio:checked + label:before { + background-image: url('../img/actions/radio-checked.svg'); +} +input[type="radio"].radio:disabled + label:before { + background-image: url('../img/actions/radio-disabled.svg'); +} +input[type="radio"].radio:checked:disabled + label:before { + background-image: url('../img/actions/radio-checked-disabled.svg'); +} +input[type="radio"].radio--white + label:before { + background-image: url('../img/actions/radio-white.svg'); +} +input[type="radio"].radio--white:checked + label:before { + background-image: url('../img/actions/radio-checked-white.svg'); +} +input[type="radio"].radio--white:disabled + label:before { + background-image: url('../img/actions/radio-disabled.svg'); +} +input[type="radio"].radio--white:checked:disabled + label:before { + background-image: url('../img/actions/radio-checked-disabled.svg'); +} + +/* keep the labels for screen readers but hide them since we use placeholders */ +label.infield { + display: none; +} + +/* Password strength meter */ +.strengthify-wrapper { + display: inline-block; + position: relative; + left: 15px; + top: -23px; + width: 250px; +} +.tooltip-inner { + font-weight: bold; + color: #ccc; + padding: 3px 6px; + text-align: center; +} + +/* Show password toggle */ +#show, #dbpassword { + position: absolute; + right: 1em; + top: .8em; + float: right; +} +#show, #dbpassword, #personal-show { + display: none; +} +#show + label, #dbpassword + label { + right: 21px; + top: 15px !important; + margin: -14px !important; + padding: 14px !important; +} +#show:checked + label, #dbpassword:checked + label, #personal-show:checked + label { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + opacity: .8; +} +#show + label, #dbpassword + label, #personal-show + label { + position: absolute !important; + height: 20px; + width: 24px; + background-image: url('../img/actions/toggle.svg?v=1'); + background-repeat: no-repeat; + background-position: center; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; + opacity: .3; +} +#show + label:before, #dbpassword + label:before, #personal-show + label:before { + display: none; +} +#pass2, input[name="personal-password-clone"] { + padding: .6em 2.5em .4em .4em; + width: 8em; +} +#personal-show + label { + height: 14px; + margin-top: -25px; + left: 295px; + display: block; +} +#passwordbutton { + margin-left: .5em; +} + +/* Dark subtle label text */ +p.info, +form fieldset legend, +#datadirContent label, +form fieldset .warning-info, +form input[type="checkbox"]+label { + text-align: center; + color: #fff; +} +/* overrides another !important statement that sets this to unreadable black */ +form .warning input[type="checkbox"]:hover+label, +form .warning input[type="checkbox"]:focus+label, +form .warning input[type="checkbox"]+label { + color: #fff !important; +} + +/* Additional login options */ +#remember_login { + margin: 18px 5px 0 16px !important; +} +.remember-login-container { + display: inline-block; + margin: 10px 0; + text-align: center; + width: 100%; +} +#forgot-password { + padding: 11px; + float: right; + color: #fff; +} + +/* Alternative Logins */ +#alternative-logins legend { margin-bottom:10px; } +#alternative-logins li { height:40px; display:inline-block; white-space:nowrap; } + +/* fixes for update page TODO should be fixed some time in a proper way */ +/* this is just for an error while updating the ownCloud instance */ +.updateProgress .error { + margin-top: 10px; + margin-bottom: 10px; +} + +/* Database selector on install page */ +form #selectDbType { + text-align:center; + white-space: nowrap; + margin: 0; +} +form #selectDbType .info { + white-space: normal; +} +form #selectDbType label { + position: static; + margin: 0 -3px 5px; + font-size: 12px; + background:#f8f8f8; + color:#888; + cursor:pointer; + border: 1px solid #ddd; +} +form #selectDbType label span { + cursor: pointer; + padding: 10px 20px; +} +form #selectDbType label.ui-state-hover, +form #selectDbType label.ui-state-active { + color:#000; + background-color:#e8e8e8; } + +/* Nicely grouping input field sets */ +.grouptop, +.groupmiddle, +.groupbottom { + position: relative; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.grouptop input { + margin-bottom: 0 !important; + border-bottom: 0 !important; + border-bottom-left-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} +.groupmiddle input { + margin-top: 0 !important; + margin-bottom: 0 !important; + border-top: 0 !important; + border-bottom: 0 !important; + border-radius: 0 !important; + box-shadow: 0 1px 0 rgba(0,0,0,.1) inset !important; +} +.groupbottom input { + margin-top: 0 !important; + border-top: 0 !important; + border-top-right-radius: 0 !important; + border-top-left-radius: 0 !important; + box-shadow: 0 1px 0 rgba(0,0,0,.1) inset !important; +} +.groupbottom input[type=submit] { + box-shadow: none !important; +} + +/* Errors */ +/* Warnings and errors are the same */ +.warning, +.update, +.error { + display: block; + padding: 10px; + background-color: rgba(0,0,0,.3); + color: #fff; + text-align: left; + border-radius: 3px; + cursor: default; +} +.warning, { + padding: 5px; + background: #fdd; + margin: 0 7px 5px 4px; +} +.warning legend, +.warning a, +.error a { + color: #fff !important; + font-weight: 600 !important; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; +} +.error a.button { + color: #555 !important; + display: inline-block; + text-align: center; +} +.error pre { + white-space: pre-wrap; + text-align: left; +} +.error-wide { + width: 700px; + margin-left: -200px !important; + margin-top: 35px; +} +.error-wide .button { + color: black !important; +} +.warning-input { + border-color: #ce3702 !important; +} +a.warning { + cursor: pointer; +} +fieldset.warning legend, +fieldset.update legend { + top: 18px; + position: relative; +} +fieldset.warning legend + p, +fieldset.update legend + p { + margin-top: 12px; +} + +/* Various paragraph styles */ +.infogroup { + margin-bottom: 15px; +} +p.info { + margin: 0 auto; + padding-top: 20px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* Update */ +.update { + width: inherit; + text-align: center; +} +.update .appList { + list-style: disc; + text-align: left; + margin-left: 25px; + margin-right: 25px; +} +.update img.float-spinner { + float: left; +} +.update h2 { + margin: 0 0 20px; +} +.update a { + color: #fff; + border-bottom: 1px solid #aaa; +} +.update a.update-show-detailed { + border-bottom: inherit; +} +#update-progress-detailed { + text-align: left; +} +.update-show-detailed { + padding: 13px; + display: block; + opacity: .75; +} +#update-progress-icon { + height: 32px; + margin: 10px; + background-size: 32px; +} + +/* Icons */ +.icon-info-white { + background-image: url(../img/actions/info-white.svg?v=1); +} + +/* Loading */ +.float-spinner { + margin-top: -32px; + padding-top: 32px; +} +[class^='icon-'], [class*=' icon-'] { + background-repeat: no-repeat; + background-position: center; + min-width: 16px; + min-height: 16px; +} +.loading, .loading-small, .icon-loading, .icon-loading-dark, .icon-loading-small, .icon-loading-small-dark { + position: relative; +} +.loading:after, .loading-small:after, .icon-loading:after, .icon-loading-dark:after, .icon-loading-small:after, .icon-loading-small-dark:after { + z-index: 2; + content: ''; + height: 32px; + width: 32px; + margin: -17px 0 0 -17px; + position: absolute; + top: 50%; + left: 50%; + border-radius: 100%; + -webkit-animation: rotate .8s infinite linear; + animation: rotate .8s infinite linear; + -webkit-transform-origin: center; + -ms-transform-origin: center; + transform-origin: center; +} +.loading:after, .loading-small:after, .icon-loading:after, .icon-loading-dark:after, .icon-loading-small:after, .icon-loading-small-dark:after { + border: 2px solid rgba(150, 150, 150, 0.5); + border-top-color: #646464; +} +.icon-loading-dark:after, .icon-loading-small-dark:after { + border: 2px solid rgba(187, 187, 187, 0.5); + border-top-color: #bbb; +} +.icon-loading-small:after, .icon-loading-small-dark:after { + height: 16px; + width: 16px; + margin: -9px 0 0 -9px; +} +/* Css replaced elements don't have ::after nor ::before */ +img.icon-loading, object.icon-loading, video.icon-loading, button.icon-loading, textarea.icon-loading, input.icon-loading, select.icon-loading { + background-image: url("../img/loading.gif"); +} +img.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark, button.icon-loading-dark, textarea.icon-loading-dark, input.icon-loading-dark, select.icon-loading-dark { + background-image: url("../img/loading-dark.gif"); +} +img.icon-loading-small, object.icon-loading-small, video.icon-loading-small, button.icon-loading-small, textarea.icon-loading-small, input.icon-loading-small, select.icon-loading-small { + background-image: url("../img/loading-small.gif"); +} +img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-small-dark, button.icon-loading-small-dark, textarea.icon-loading-small-dark, input.icon-loading-small-dark, select.icon-loading-small-dark { + background-image: url("../img/loading-small-dark.gif"); +} +@-webkit-keyframes rotate { + from { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes rotate { + from { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +/* FOOTER */ +footer, +.push { + height: 70px; +}
\ No newline at end of file diff --git a/core/css/header.scss b/core/css/header.scss index 886c2489a63..21b8cff4d28 100644 --- a/core/css/header.scss +++ b/core/css/header.scss @@ -1,8 +1,13 @@ /** - * @copyright Copyright (c) 2017, John Molakvoæ (skjnldsv@protonmail.com) - * @copyright Copyright (c) 2016, Lukas Reschke (lukas@statuscode.ch) - * @copyright Copyright (c) 2016, Julius Härtl (jus@bitgrid.net) - * @copyright Copyright (c) 2016, Jos Poortvliet (jospoortvliet@gmail.com) + * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com> + * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net> + * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch> + * @copyright Copyright (c) 2016, Jos Poortvliet <jos@opensuse.org> + * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org> + * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch> + * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de> + * @copyright Copyright (c) 2015, Jan-Christoph Borchardt <hey@jancborchardt.net> + * @copyright Copyright (c) 2015, Volker E <volker.e@temporaer.net> * * @license GNU AGPL version 3 or any later version * @@ -38,22 +43,20 @@ #body-user #header, #body-settings #header, #body-public #header { + display: inline-flex; position: fixed; top: 0; left: 0; right: 0; z-index: 2000; height: 45px; - line-height: 2.5em; background-color: #0082c9; box-sizing: border-box; + justify-content: space-between; } /* LOGO and APP NAME -------------------------------------------------------- */ #nextcloud { - position: absolute; - top: 0; - left: 0; padding: 5px; padding-bottom: 0; height: 45px; @@ -92,11 +95,9 @@ } .header-appname-container { display: inline-block; - position: absolute; - left: 70px; - height: 27px; - padding-top: 18px; + padding-top: 22px; padding-right: 10px; + flex-shrink: 0; } /* show caret indicator next to logo to make clear it is tappable */ .icon-caret { @@ -108,6 +109,21 @@ padding: 0; vertical-align: middle; } + + #header-left, + #header-right { + display: inline-flex; + align-items: center; + } + + #header-left { + flex: 0 0; + flex-grow: 1; + } + + #header-right { + justify-content: flex-end; + } } /* hover effect for app switcher label */ @@ -150,7 +166,7 @@ font-size: 16px; font-weight: 300; margin: 0; - margin-top: -24px; + margin-top: -27px; padding: 7px 0 7px 5px; vertical-align: middle; } @@ -293,20 +309,8 @@ /* USER MENU -----------------------------------------------------------------*/ -/* info part on the right, used e.g. for info on who shared something */ -.header-right { - position: absolute; - right: 0; - padding: 7px 5px; - color: #fff; - height: 100%; - max-width: 80%; - white-space: nowrap; - box-sizing: border-box; -} - #settings { - float: right; + display: inline-block; color: #ddd; cursor: pointer; .icon-loading-small-dark { @@ -315,11 +319,13 @@ margin-right: 6px; background-size: 16px 16px; } + flex: 0 0 auto; } /* User menu on the right */ #expand { - display: block; + display: flex; + align-items: center; padding: 7px 30px 6px 10px; cursor: pointer; * { @@ -345,8 +351,6 @@ /* Profile picture in header */ .avatardiv { - float: left; - display: inline-block; margin-right: 8px; cursor: pointer; height: 32px; @@ -377,23 +381,22 @@ &:after { /* position of dropdown arrow */ right: 15px; - border-color: rgba(0, 0, 0, 0); - border-bottom-color: rgba(255, 255, 255, 1); + border: 10px solid transparent; + border-color: transparent; + border-bottom-color: #fff; bottom: 100%; - border: solid transparent; content: ' '; height: 0; width: 0; position: absolute; pointer-events: none; - border-width: 10px; margin-left: -10px; } a { display: block; height: 40px; color: #000; - padding: 4px 12px 0; + padding: 10px 12px 0; -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)'; opacity: .5; box-sizing: border-box; diff --git a/core/css/icons.scss b/core/css/icons.scss index b1f9cc6df67..28f6bd9bbb8 100644 --- a/core/css/icons.scss +++ b/core/css/icons.scss @@ -1,5 +1,12 @@ /** - * @copyright Copyright (c) 2017, John Molakvoæ (skjnldsv@protonmail.com) + * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com> + * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com> + * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch> + * @copyright Copyright (c) 2016, Roeland Jago Douma <roeland@famdouma.nl> + * @copyright Copyright (c) 2016, Vincent Chan <plus.vincchan@gmail.com> + * @copyright Copyright (c) 2015, Thomas Müller <thomas.mueller@tmit.eu> + * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de> + * @copyright Copyright (c) 2015, Jan-Christoph Borchardt <hey@jancborchardt.net> * * @license GNU AGPL version 3 or any later version * @@ -131,6 +138,10 @@ img, object, video, button, textarea, input, select { background-image: url('../img/actions/close.svg?v=1'); } +.icon-close-white { + background-image: url('../img/actions/close-white.svg?v=1'); +} + .icon-comment { background-image: url('../img/actions/comment.svg?v=1'); } diff --git a/core/css/inputs.scss b/core/css/inputs.scss index aa9c841f2b2..f7b9cdb723c 100644 --- a/core/css/inputs.scss +++ b/core/css/inputs.scss @@ -1,163 +1,203 @@ -/* INPUTS */ - -/* specifically override browser styles */ - +/** + * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com> + * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de> + * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net> + * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com> + * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net> + * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch> + * @copyright Copyright (c) 2015, Joas Schilling <nickvergessen@owncloud.com> + * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de> + * + * @license GNU AGPL version 3 or any later version + * + */ + + /* Specifically override browser styles */ input, textarea, select, button { font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif; } - .select2-container-multi .select2-choices .select2-search-field input, .select2-search input, .ui-widget { font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif !important; } -input { - &[type='text'], &[type='password'], &[type='search'], &[type='number'], &[type='email'], &[type='tel'], &[type='url'], &[type='time'], &[type='date'] { - width: 130px; - margin: 3px 3px 3px 0; - padding: 7px 6px 5px; - font-size: 13px; - background-color: #fff; - color: #333; - border: 1px solid #ddd; - outline: none; - border-radius: 3px; - } -} - -textarea, select, button, .button { +/* Simple selector to allow easy overriding */ +select, +button, +input, +textarea { width: 130px; - margin: 3px 3px 3px 0; - padding: 7px 6px 5px; - font-size: 13px; - background-color: #fff; - color: #333; - border: 1px solid #ddd; - outline: none; - border-radius: 3px; -} - -input { - &[type='submit'], &[type='button'] { - width: 130px; - margin: 3px 3px 3px 0; - padding: 7px 6px 5px; - font-size: 13px; - background-color: #fff; - color: #333; - border: 1px solid #ddd; - outline: none; - border-radius: 3px; - } + min-height: 32px; + box-sizing: border-box; } -#quota, .pager li a { - width: 130px; +/* Default global values */ +select, +button, .button, +input:not([type='range']), +textarea, +#quota, .pager li a { margin: 3px 3px 3px 0; - padding: 7px 6px 5px; + padding: 7px 6px; font-size: 13px; background-color: #fff; color: #333; border: 1px solid #ddd; outline: none; border-radius: 3px; -} - -input { - &[type='hidden'] { - height: 0; - width: 0; + &:not(:disabled):not(.primary) { + /* no border on quota */ + &:not(#quota):hover, + &:focus, + &.active { + /* active class used for multiselect */ + border-color: #0082c9; + outline: none; + } + &:active { + outline: none; + background-color: #fff; + } } - &[type='text'], &[type='password'], &[type='search'], &[type='number'], &[type='email'], &[type='tel'], &[type='url'], &[type='time'] { - background: #fff; - color: #555; - cursor: text; - font-family: inherit; - /* use default ownCloud font instead of default textarea monospace */ + &:disabled { + background-color: #eee; + color: #999; + cursor: default; + opacity: 0.5; + } + /* Primary action button, use sparingly */ + &.primary { + border: 1px solid #0082c9; + background-color: #00a2e9; + color: #fff; + cursor: pointer; + &:not(:disabled) { + &:hover, + &:focus { + background-color: #0092d9; + } + &:active { + background-color: #00a2e9; + } + } + &:disabled { + background-color: #00a2e9; + color: #bbb; + } } } -textarea { - background: #fff; - color: #555; - cursor: text; - font-family: inherit; - /* use default ownCloud font instead of default textarea monospace */ -} - +/* Specific override */ input { - &[type='text'], &[type='password'], &[type='search'], &[type='number'], &[type='email'], &[type='tel'], &[type='url'], &[type='time'] { + &:not([type='radio']):not([type='checkbox']):not([type='range']):not([type='submit']):not([type='button']):not([type='reset']):not([type='color']):not([type='file']):not([type='image']) { -webkit-appearance: textfield; -moz-appearance: textfield; - box-sizing: content-box; - } - &[type='text'] { - &:hover, &:focus, &:active { - color: #333; - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)'; - opacity: 1; - } - } - &[type='password'] { - &:hover, &:focus, &:active { - color: #333; - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)'; - opacity: 1; - } } - &[type='number'] { - &:hover, &:focus, &:active { - color: #333; - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)'; - opacity: 1; - } - } - &[type='search'] { - &:hover, &:focus, &:active { - color: #333; - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)'; - opacity: 1; - } - } - &[type='email'] { - &:hover, &:focus, &:active { - color: #333; - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)'; - opacity: 1; - } + &[type='radio'], + &[type='checkbox'], + &[type='file'], + &[type='image'] { + height: auto; + width: auto; } - &[type='tel'] { - &:hover, &:focus, &:active { - color: #333; - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)'; - opacity: 1; - } + /* Color input doesn't respect the initial height + so we need to set a custom one */ + &[type='color'] { + margin: 3px; + padding: 0 2px; + min-height: 30px; + width: 40px; + cursor: pointer; } - &[type='url'] { - &:hover, &:focus, &:active { - color: #333; - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)'; - opacity: 1; - } + &[type='hidden'] { + height: 0; + width: 0; } &[type='time'] { - &:hover, &:focus, &:active { - color: #333; - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)'; - opacity: 1; + width: initial; + } +} + +/* 'Click' inputs */ +select, +button, .button, +input[type='button'], +input[type='submit'], +input[type='reset'] { + padding: 6px 12px; + width: auto; + min-height: 34px; + cursor: pointer; + box-sizing: border-box; + background-color: #fafafa; +} + +/* Buttons */ +button, .button, +input[type='button'], +input[type='submit'], +input[type='reset'] { + font-weight: bold; + /* Get rid of the ugly firefox dotted line */ + &::-moz-focus-inner { + border: 0; + } +} +button, .button { + > span { + /* icon position inside buttons */ + &[class^='icon-'], + &[class*=' icon-'] { + display: inline-block; + vertical-align: text-bottom; + opacity: 0.5; } } } textarea { - &:hover, &:focus, &:active { - color: #333; - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)'; - opacity: 1; + color: #555; + cursor: text; + font-family: inherit; + height: auto; + &:not(:disabled) { + &:active, + &:hover, + &:focus { + border-color: #ddd !important; + background-color: #fff !important; + } } } +/* Override the ugly select arrow */ +select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: url('../img/actions/triangle-s.svg') no-repeat right 4px center; + background-color: inherit; + outline: 0; + padding-right: 24px !important; +} + +/* Various Fixes */ +button img, +.button img { + cursor: pointer; +} +#quota { + color: #555; +} +select, +.button.multiselect { + font-weight: 400; +} + +/* Radio & Checkboxes */ input { - &[type='checkbox'] { + &[type='checkbox'], + &[type='radio'] { + &.radio, &.checkbox { position: absolute; left: -10000px; @@ -165,126 +205,109 @@ input { width: 1px; height: 1px; overflow: hidden; + + label { + user-select: none; + } + &:disabled + label, + &:disabled + label:before { + cursor: default; + } + label:before { content: ''; display: inline-block; - height: 20px; - width: 20px; + height: 12px; + width: 12px; vertical-align: middle; - background: url('../img/actions/checkbox.svg') left top no-repeat; - } - &:disabled + label:before { - opacity: .6; + border-radius: 50%; + margin: 3px; + margin-top: 1px; + border: 1px solid #888; } - &.u-left + label:before { - float: left; + &:not(:disabled):not(:checked) + label:hover:before, + &:focus + label:before { + border-color: #0082c9; } - &.u-hidden + label:before { - display: none; - } - &:checked + label:before { - background-image: url('../img/actions/checkbox-checked.svg'); - } - &:indeterminate + label:before { - background-image: url('../img/actions/checkbox-mixed.svg'); + &:checked + label:before, + &.checkbox:indeterminate + label:before { + /* ^ :indeterminate have a strange behavior on radio, + so we respecified the checkbox class again to be safe */ + box-shadow: inset 0px 0px 0px 2px #fff; + background-color: #0082c9; + border-color: #0082c9 } &:disabled + label:before { - background-image: url('../img/actions/checkbox-disabled.svg'); + background-color: #ccc !important; /* override other status */ } &:checked:disabled + label:before { - background-image: url('../img/actions/checkbox-checked-disabled.svg'); - } - &:indeterminate:disabled + label:before { - background-image: url('../img/actions/checkbox-mixed-disabled.svg'); + box-shadow: inset 0px 0px 0px 2px #fff; + border-color: #aaa; + background-color: #bbb; } } - &.checkbox--white { + &.checkbox { + label:before { - background-image: url('../img/actions/checkbox-white.svg'); + border-radius: 1px; + height: 10px; + width: 10px; + box-shadow: none !important; + background-position: center; } &:checked + label:before { - background-image: url('../img/actions/checkbox-checked-white.svg'); + background-image: url('../img/actions/checkbox-mark.svg'); } &:indeterminate + label:before { - background-image: url('../img/actions/checkbox-mixed-white.svg'); - } - &:disabled + label:before { - background-image: url('../img/actions/checkbox-disabled-white.svg'); - } - &:checked:disabled + label:before { - background-image: url('../img/actions/checkbox-checked-disabled.svg'); + background-image: url('../img/actions/checkbox-mixed.svg'); } &:indeterminate:disabled + label:before { - background-image: url('../img/actions/checkbox-mixed-disabled.svg'); + border-color: #888; } } - &.checkbox:hover + label:before, &:focus + label:before { - color: #111 !important; - } - } - &[type='radio'] { - &.radio { - position: absolute; - left: -10000px; - top: auto; - width: 1px; - height: 1px; - overflow: hidden; + &.radio--white, + &.checkbox--white { + label:before { - content: ''; - display: inline-block; - height: 20px; - width: 20px; - vertical-align: middle; - background: url('../img/actions/radio.svg') left top no-repeat; + border-color: #aaa; } - &:checked + label:before { - background-image: url('../img/actions/radio-checked.svg'); + &:not(:disabled):not(:checked) + label:hover:before, + &:focus + label:before { + border-color: #fff; + } + &:checked + label:before, + &.checkbox:indeterminate + label:before { + /* ^ :indeterminate have a strange behavior on radio, + so we respecified the checkbox class again to be safe */ + box-shadow: inset 0px 0px 0px 2px #000; + background-color: #eee; + border-color: #eee } &:disabled + label:before { - background-image: url('../img/actions/radio-disabled.svg'); + background-color: #666 !important; /* override other status */ + border-color: #999 !important; /* override other status */ } &:checked:disabled + label:before { - background-image: url('../img/actions/radio-checked-disabled.svg'); + box-shadow: inset 0px 0px 0px 2px #000; + border-color: #666; + background-color: #222; } } - &.radio--white { - + label:before { - background-image: url('../img/actions/radio-white.svg'); - } + &.checkbox--white { &:checked + label:before { - background-image: url('../img/actions/radio-checked-white.svg'); + background-image: url('../img/actions/checkbox-mark-white.svg'); } - &:disabled + label:before { - background-image: url('../img/actions/radio-disabled.svg'); + &:indeterminate + label:before { + background-image: url('../img/actions/checkbox-mixed-white.svg'); } - &:checked:disabled + label:before { - background-image: url('../img/actions/radio-checked-disabled.svg'); + &:checked:disabled + label:after { + border-color: #aaa; + } + &:indeterminate:disabled + label:after { + background-color: #aaa; } } } - &[type='time'] { - width: initial; - height: 31px; - box-sizing: border-box; - } } -select { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background: url('../../core/img/actions/triangle-s.svg') no-repeat right 8px center rgba(240, 240, 240, 0.9); - outline: 0; - padding-right: 24px !important; - &:hover { - background-color: #fefefe; - } -} - -/* select2 adjustments */ - -#select2-drop { +/* Select2 overriding. Merged to core with vendor stylesheet */ +.select2-drop { margin-top: -2px; &.select2-drop-active { border-color: #ddd; @@ -297,15 +320,7 @@ select { cursor: pointer; } } -} - -.select2-chosen .avatar img, #select2-drop .avatar, .select2-chosen .avatar { - cursor: pointer; -} - -#select2-drop { .select2-search input { - width: calc(100% - 14px); min-height: auto; background: url('../img/actions/search.svg') no-repeat right center !important; background-origin: content-box !important; @@ -322,7 +337,9 @@ select { cursor: pointer; } } - .select2-result, .select2-no-results, .select2-searching { + .select2-result, + .select2-no-results, + .select2-searching { position: relative; display: list-item; padding: 12px; @@ -341,9 +358,16 @@ select { } } } - +.select2-chosen, +#select2-drop { + .avatar, + .avatar img { + cursor: pointer; + } +} .select2-container-multi { - .select2-choices, &.select2-container-active .select2-choices { + .select2-choices, + &.select2-container-active .select2-choices { box-shadow: none; white-space: nowrap; text-overflow: ellipsis; @@ -355,83 +379,28 @@ select { margin: 0; padding: 2px 0; min-height: auto; - } -} - -.select2-container .select2-choice { - box-shadow: none; - white-space: nowrap; - text-overflow: ellipsis; - background: #fff; - color: #555; - box-sizing: content-box; - border-radius: 3px; - border: 1px solid #ddd; - margin: 0; - padding: 2px 0; - min-height: auto; -} - -.select2-container-multi { - .select2-choices .select2-search-choice, &.select2-container-active .select2-choices .select2-search-choice { - line-height: 20px; - padding-left: 5px; - background-image: none; - background-color: #f8f8f8; - border-color: #f8f8f8; - } -} - -.select2-container .select2-choice .select2-search-choice { - line-height: 20px; - padding-left: 5px; - background-image: none; - background-color: #f8f8f8; - border-color: #f8f8f8; -} - -.select2-container-multi { - .select2-choices .select2-search-choice { - &.select2-search-choice-focus, &:hover { - background-color: #f0f0f0; - border-color: #f0f0f0; + .select2-search-choice { + line-height: 20px; + padding-left: 5px; + &.select2-search-choice-focus, + &:hover, + &:active, + & { + background-image: none; + background-color: #fff; + color: #333; + border: 1px solid #ddd; + } + .select2-search-choice-close { + display: none; + } } - } - &.select2-container-active .select2-choices .select2-search-choice { - &.select2-search-choice-focus, &:hover { - background-color: #f0f0f0; - border-color: #f0f0f0; + .select2-search-field input { + line-height: 20px; } } } - -.select2-container .select2-choice .select2-search-choice { - &.select2-search-choice-focus, &:hover { - background-color: #f0f0f0; - border-color: #f0f0f0; - } -} - -.select2-container-multi { - .select2-choices .select2-search-choice .select2-search-choice-close, &.select2-container-active .select2-choices .select2-search-choice .select2-search-choice-close { - display: none; - } -} - -.select2-container .select2-choice .select2-search-choice .select2-search-choice-close { - display: none; -} - -.select2-container-multi { - .select2-choices .select2-search-field input, &.select2-container-active .select2-choices .select2-search-field input { - line-height: 20px; - } -} - .select2-container { - .select2-choice .select2-search-field input { - line-height: 20px; - } margin: 3px 3px 3px 0; &.select2-container-multi .select2-choices { display: flex; @@ -441,7 +410,33 @@ select { } } .select2-choice { - padding-left: 38px; + box-shadow: none; + white-space: nowrap; + text-overflow: ellipsis; + background: #fff; + color: #555; + box-sizing: content-box; + border-radius: 3px; + border: 1px solid #ddd; + margin: 0; + padding: 2px 0; + padding-left: 6px; + min-height: auto; + .select2-search-choice { + line-height: 20px; + padding-left: 5px; + background-image: none; + background-color: #f8f8f8; + border-color: #f8f8f8; + .select2-search-choice-close { + display: none; + } + &.select2-search-choice-focus, + &:hover { + background-color: #f0f0f0; + border-color: #f0f0f0; + } + } .select2-arrow { background: none; border-radius: 0; @@ -451,14 +446,19 @@ select { opacity: .5; } } - &:hover .select2-arrow b, &:focus .select2-arrow b, &:active .select2-arrow b { + &:hover .select2-arrow b, + &:focus .select2-arrow b, + &:active .select2-arrow b { opacity: .7; } + .select2-search-field input { + line-height: 20px; + } } } -/* jQuery UI fixes */ - +/* Select menus - TODO: move to jquery-ui-fixes.css +----------------------------------*/ .ui-menu { padding: 0; .ui-menu-item a { @@ -485,298 +485,28 @@ select { background: #f8f8f8; } -/* correctly align images inside of buttons */ - -input img, button img, .button img { - vertical-align: text-bottom; -} - -input[type='submit'].enabled { - background-color: #66f866; - border: 1px solid #5e5; -} - -.input-button-inline { - position: absolute !important; - right: 0; - background-color: transparent !important; - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=30)'; - opacity: .3; -} - -/* BUTTONS */ - -input { - &[type='submit'], &[type='button'] { - width: auto; - min-width: 25px; - padding: 5px; - background-color: rgba(240, 240, 240, 0.9); - font-weight: 600; - color: #555; - border: 1px solid rgba(240, 240, 240, 0.9); - cursor: pointer; - } -} - -button, .button, #quota, select, .pager li a { - width: auto; - min-width: 25px; - padding: 5px; - background-color: rgba(240, 240, 240, 0.9); - font-weight: 600; - color: #555; - border: 1px solid rgba(240, 240, 240, 0.9); - cursor: pointer; -} - -select, .button.multiselect { - font-weight: 400; -} - -input { - &[type='submit'] { - &:hover, &:focus { - background-color: rgba(255, 255, 255, 0.95); - color: #111; - } - } - &[type='button'] { - &:hover, &:focus { - background-color: rgba(255, 255, 255, 0.95); - color: #111; - } - } -} - -button { - &:hover, &:focus { - background-color: rgba(255, 255, 255, 0.95); - color: #111; - } -} - -.button { - &:hover, &:focus, a:focus { - background-color: rgba(255, 255, 255, 0.95); - color: #111; - } -} - -select { - &:hover, &:focus, &:active { - background-color: rgba(255, 255, 255, 0.95); - color: #111; - } -} - -input { - &[type='submit'] img, &[type='button'] img { - cursor: pointer; - } -} - -button img, .button img { - cursor: pointer; -} - -#header .button { - border: none; - box-shadow: none; -} - -/* disabled input fields and buttons */ - -input:disabled { - background-color: rgba(230, 230, 230, 0.9); - color: #999; - cursor: default; - &:hover, &:focus { - background-color: rgba(230, 230, 230, 0.9); - color: #999; - cursor: default; - } -} - -button:disabled { - background-color: rgba(230, 230, 230, 0.9); - color: #999; - cursor: default; - &:hover, &:focus { - background-color: rgba(230, 230, 230, 0.9); - color: #999; - cursor: default; - } -} - -.button:disabled { - background-color: rgba(230, 230, 230, 0.9); - color: #999; - cursor: default; - &:hover, &:focus { - background-color: rgba(230, 230, 230, 0.9); - color: #999; - cursor: default; - } -} - -a.disabled { - background-color: rgba(230, 230, 230, 0.9); - color: #999; - cursor: default; - &:hover, &:focus { - background-color: rgba(230, 230, 230, 0.9); - color: #999; - cursor: default; - } -} - -textarea:disabled { - background-color: rgba(230, 230, 230, 0.9); - color: #999; - cursor: default; -} - -input:disabled { - + label, &:hover + label, &:focus + label { - color: #999 !important; - cursor: default; - } -} - -/* Primary action button, use sparingly */ - -.primary { - border: 1px solid #0082c9; - background-color: #00a2e9; - color: #fff; -} - -input { - &[type='submit'].primary, &[type='button'].primary { - border: 1px solid #0082c9; - background-color: #00a2e9; - color: #fff; - } -} - -button.primary, .button.primary { - border: 1px solid #0082c9; - background-color: #00a2e9; - color: #fff; -} - -.primary:hover { - background-color: #0092d9; - color: #fff; -} - -input { - &[type='submit'].primary:hover, &[type='button'].primary:hover { - background-color: #0092d9; - color: #fff; - } -} - -button.primary:hover, .button.primary:hover, .primary:focus { - background-color: #0092d9; - color: #fff; -} - -input { - &[type='submit'].primary:focus, &[type='button'].primary:focus { - background-color: #0092d9; - color: #fff; - } -} - -button.primary:focus, .button.primary:focus { - background-color: #0092d9; - color: #fff; -} - -.primary:active { - background-color: #00a2e9; - color: #bbb; -} - -input { - &[type='submit'].primary:active, &[type='button'].primary:active { - background-color: #00a2e9; - color: #bbb; - } -} - -button.primary:active, .button.primary:active, .primary:disabled { - background-color: #00a2e9; - color: #bbb; -} - -input { - &[type='submit'].primary:disabled, &[type='button'].primary:disabled { - background-color: #00a2e9; - color: #bbb; - } -} - -button.primary:disabled, .button.primary:disabled, .primary:disabled:hover { - background-color: #00a2e9; - color: #bbb; -} - -input { - &[type='submit'].primary:disabled:hover, &[type='button'].primary:disabled:hover { - background-color: #00a2e9; - color: #bbb; - } -} - -button.primary:disabled:hover, .button.primary:disabled:hover, .primary:disabled:focus { - background-color: #00a2e9; - color: #bbb; -} - -input { - &[type='submit'].primary:disabled:focus, &[type='button'].primary:disabled:focus { - background-color: #00a2e9; - color: #bbb; - } -} - -button.primary:disabled:focus, .button.primary:disabled:focus { - background-color: #00a2e9; - color: #bbb; -} - +/* Animation */ @keyframes shake { - 0% { - transform: translate(-5px, 0); + 10%, + 90% { + transform: translate(-1px); } - - 20% { - transform: translate(5px, 0); + 20%, + 80% { + transform: translate(2px); } - - 40% { - transform: translate(-5px, 0); + 30%, + 50%, + 70% { + transform: translate(-4px); } - + 40%, 60% { - transform: translate(5px, 0); - } - - 80% { - transform: translate(-5px, 0); - } - - 100% { - transform: translate(5px, 0); + transform: translate(4px); } } - - .shake { animation-name: shake; - animation-duration: .3s; + animation-duration: .7s; animation-timing-function: ease-out; } diff --git a/core/css/installation.css b/core/css/installation.css deleted file mode 100644 index 69c98f1ea22..00000000000 --- a/core/css/installation.css +++ /dev/null @@ -1,802 +0,0 @@ -/* -* Installation css file. -* This file is used on the install page only when the database -* isn't set, preventing scss files to be stored using the AppdataController. -* It should contain every style needed to correctly display the installation template. -* -*/ - -/* Reset */ -html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section { - margin: 0; - padding: 0; - border: 0; - outline: 0; - font-weight: inherit; - font-size: 100%; - font-family: inherit; - vertical-align: baseline; - cursor: default; -} - -html, body { - height: 100%; -} - -article, aside, dialog, figure, footer, header, hgroup, nav, section { - display: block; -} - -body { - line-height: 1.5; -} - -table { - border-collapse: separate; - border-spacing: 0; - white-space: nowrap; -} - -caption, th, td { - text-align: left; - font-weight: normal; -} - -table, td, th { - vertical-align: middle; -} - -a { - border: 0; - color: #000; - text-decoration: none; - cursor: pointer; -} -a * { - cursor: pointer; -} - -input { - cursor: pointer; -} -input * { - cursor: pointer; -} - -select, .button span, label { - cursor: pointer; -} - -ul { - list-style: none; -} - -body { - background-color: #ffffff; - font-weight: 400; - font-size: .8em; - line-height: 1.6em; - font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif; - color: #000; - height: auto; -} - -/* Global */ -#body-login { - text-align: center; - background-color: #0082c9; - background-image: url("../img/background.jpg?v=1"); - background-position: 50% 50%; - background-repeat: no-repeat; - background-size: cover; - background-attachment: fixed; - /* fix background gradient */ - height: 100%; - /* fix sticky footer */ -} - - -/* heading styles */ -h2 { - font-size: 20px; - font-weight: 300; - margin-bottom: 12px; - line-height: 140%; -} -h3 { - font-size: 15px; - font-weight: 300; - margin: 12px 0; -} - - -/* do not use italic typeface style, instead lighter color */ -em { - font-style: normal; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - opacity: .5; -} - -#header { - padding-top: 100px; -} - -p.info, form fieldset legend, #datadirContent label { - text-align: center; - color: #fff; -} - -form fieldset .warning-info, form input[type='checkbox'] + label { - text-align: center; - color: #fff; -} -form .warning input[type='checkbox']:hover + label, form .warning input[type='checkbox']:focus + label, form .warning input[type='checkbox'] + label { - color: #fff !important; -} - -.infogroup { - margin-bottom: 15px; -} - -p#message img { - vertical-align: middle; - padding: 5px; -} - -div.buttons { - text-align: center; -} - -p.info { - width: 22em; - margin: 0 auto; - padding-top: 20px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -p.info a { - font-weight: 600; - padding: 13px; - margin: -13px; - color: #fff; -} - -#body-login .warning, #body-login .update, #body-login .error { - display: block; - padding: 10px; - background-color: rgba(0, 0, 0, 0.3); - color: #fff; - text-align: left; - border-radius: 3px; - cursor: default; -} - -#body-login .warning { - margin: 0 7px 5px 4px; -} - -form { - position: relative; - width: 280px; - margin: 16px auto; - padding: 0; -} -form fieldset { - margin-bottom: 20px; - text-align: left; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -form #sqliteInformation { - margin-top: -20px; - margin-bottom: 20px; -} -form #adminaccount { - margin-bottom: 15px; -} -form fieldset legend { - width: 100%; -} -form fieldset.warning legend, form fieldset.update legend { - top: 18px; - position: relative; -} -form fieldset.warning legend + p, form fieldset.update legend + p { - margin-top: 12px; -} -form input[type='checkbox'] + label { - position: relative; - margin: 0; - padding: 14px; - vertical-align: middle; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -form .errors { - background: #fed7d7; - border: 1px solid #f00; - list-style-indent: inside; - margin: 0 0 2em; - padding: 1em; -} -form .success { - background: #d7fed7; - border: 1px solid #0f0; - width: 35%; - margin: 30px auto; - padding: 1em; - text-align: center; -} -form #showAdvanced > img { - padding: 4px; - box-sizing: border-box; -} -form p.info a, form #showAdvanced { - color: #fff; -} -form #remember_login:hover + label, form #remember_login:focus + label { - opacity: .6; -} -form #forgot-password:hover, form #forgot-password:focus { - opacity: .6; -} -form p.info a:hover, form p.info a:focus { - opacity: .6; -} -form footer .info { - white-space: nowrap; -} - -#datadirContent label { - display: block; - width: 100%; - margin: 0; -} - -form #datadirField legend { - margin-bottom: 15px; -} - -#showAdvanced { - padding: 13px; - /* increase clickable area of Advanced dropdown */ -} -#showAdvanced img { - vertical-align: bottom; - /* adjust position of Advanced dropdown arrow */ - margin-left: -4px; -} - -.icon-info-white { - padding: 10px; -} - -.float-spinner { - height: 32px; - display: none; -} - -.strengthify-wrapper { - display: inline-block; - position: relative; - left: 15px; - top: -23px; - width: 250px; -} - -.tipsy-inner { - font-weight: bold; - color: #ccc; -} - - -/* LOGO */ -#header .logo { - background-image: url(../img/logo-icon.svg?v=1); - background-repeat: no-repeat; - background-size: 175px; - background-position: center; - width: 252px; - height: 120px; - margin: 0 auto; -} - -/* Show password toggle */ -#show, #dbpassword { - position: absolute; - right: 1em; - top: .8em; - float: right; -} - -#show, #dbpassword, #personal-show { - display: none; -} - -#show + label, #dbpassword + label { - right: 21px; - top: 15px !important; - margin: -14px !important; - padding: 14px !important; -} - -#show:checked + label, #dbpassword:checked + label, #personal-show:checked + label { - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)'; - opacity: .8; -} - -#show + label, #dbpassword + label, #personal-show + label { - position: absolute !important; - height: 20px; - width: 24px; - background-image: url("../img/actions/toggle.svg?v=1"); - background-repeat: no-repeat; - background-position: center; - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=30)'; - opacity: .3; -} - -#show + label:before, #dbpassword + label:before, #personal-show + label:before { - display: none; -} - -#pass2, input[name='personal-password-clone'] { - padding: .6em 2.5em .4em .4em; - width: 8em; -} - -#personal-show + label { - height: 14px; - margin-top: -25px; - left: 295px; - display: block; -} - -#passwordbutton { - margin-left: .5em; -} - -/* LOADER */ -#body-login .float-spinner { - margin-top: -32px; - padding-top: 32px; -} - -[class^='icon-'], [class*=' icon-'] { - background-repeat: no-repeat; - background-position: center; - min-width: 16px; - min-height: 16px; -} - -.loading, .loading-small, .icon-loading, .icon-loading-dark, .icon-loading-small, .icon-loading-small-dark { - position: relative; -} - -.loading:after, .loading-small:after, .icon-loading:after, .icon-loading-dark:after, .icon-loading-small:after, .icon-loading-small-dark:after { - z-index: 2; - content: ''; - height: 32px; - width: 32px; - margin: -17px 0 0 -17px; - position: absolute; - top: 50%; - left: 50%; - border-radius: 100%; - -webkit-animation: rotate .8s infinite linear; - animation: rotate .8s infinite linear; - -webkit-transform-origin: center; - -ms-transform-origin: center; - transform-origin: center; -} - -.loading:after, .loading-small:after, .icon-loading:after, .icon-loading-dark:after, .icon-loading-small:after, .icon-loading-small-dark:after { - border: 2px solid rgba(150, 150, 150, 0.5); - border-top-color: #646464; -} - -.icon-loading-dark:after, .icon-loading-small-dark:after { - border: 2px solid rgba(187, 187, 187, 0.5); - border-top-color: #bbb; -} - -.icon-loading-small:after, .icon-loading-small-dark:after { - height: 16px; - width: 16px; - margin: -9px 0 0 -9px; -} - -.icon-info-white { - background-image: url(../img/actions/info-white.svg?v=1); -} - -@-webkit-keyframes rotate { - from { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -@keyframes rotate { - from { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -/*! - * Bootstrap v3.3.5 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 12px; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); -} -.tooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.tooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.tooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.tooltip.left { - margin-left: -3px; - padding: 0 5px; -} - -.tooltip-inner { - max-width: 350px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - background-color: #000000; - border-radius: 4px; -} - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-left .tooltip-arrow { - bottom: 0; - right: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} - -/* SCROLLING */ -::-webkit-scrollbar { - width: 5px; -} - -::-webkit-scrollbar-track-piece { - background-color: transparent; -} - -::-webkit-scrollbar-thumb { - background: #ddd; - border-radius: 3px; -} -.error-wide { - width: 700px; - margin-left: -200px !important; -} - -/* Config write issue */ -#body-login .v-align { - width: inherit; -} -#body-login .wrapper { - min-height: 100%; - margin: 0 auto -70px; - width: 300px; -} -.warning legend, .warning a, .error a { - color: #fff !important; - font-weight: 600 !important; -} -#body-login ul.error-wide { - margin-top: 35px; -} - -/* Update info */ -#body-login .update { - width: inherit; - text-align: center; -} -#body-login .update h2 { - margin: 0 0 20px; -} - -#body-login .update a { - color: #fff; - border-bottom: 1px solid #aaa; -} - -/* INPUTS */ -input[type="text"], input[type="password"], input[type="search"], input[type="number"], input[type="email"], input[type="tel"], input[type="url"], input[type="time"], input[type="date"], textarea, select, button, .button, input[type="submit"], input[type="button"], #quota, .pager li a { - width: 130px; - margin: 3px 3px 3px 0; - padding: 7px 6px 5px; - font-size: 13px; - background-color: #fff; - color: #333; - border: 1px solid #ddd; - outline: none; - border-radius: 3px; -} -#body-login input { - font-size: 20px; - margin: 5px; - padding: 11px 10px 9px; -} -input[type="submit"], input[type="button"], button, .button { - width: auto; - min-width: 25px; - padding: 5px; - background-color: rgba(240, 240, 240, 0.9); - font-weight: 600; - color: #555; - border: 1px solid rgba(240, 240, 240, 0.9); - cursor: pointer; -} - -input { - font-size: 20px; - margin: 5px; - padding: 11px 10px 9px; -} -input[type='text'], input[type='password'], input[type='email'] { - font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif; - border: none; - font-weight: 300; - font-size: 20px; - margin: 5px; - padding: 11px 10px 9px; - -webkit-appearance: textfield; - -moz-appearance: textfield; - box-sizing: content-box; - background: #fff; - color: #555; - cursor: text; - font-family: inherit; - outline: none; - border-radius: 3px; - width: 249px; -} -input.login { - width: 269px; - background-position: right 16px center; -} -input[type='submit'] { - padding: 10px 20px; - /* larger log in and installation buttons */ -} - -/* Nicely grouping input field sets */ -.grouptop, .groupmiddle, .groupbottom { - position: relative; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.grouptop input { - margin-bottom: 0 !important; - border-bottom: 0 !important; - border-bottom-left-radius: 0 !important; - border-bottom-right-radius: 0 !important; -} - -.groupmiddle input { - margin-top: 0 !important; - margin-bottom: 0 !important; - border-top: 0 !important; - border-bottom: 0 !important; - border-radius: 0 !important; - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1) inset !important; -} - -.groupbottom input { - margin-top: 0 !important; - border-top: 0 !important; - border-top-right-radius: 0 !important; - border-top-left-radius: 0 !important; - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1) inset !important; -} - -.groupbottom input[type=submit] { - box-shadow: none !important; -} - -label.infield { - display: none; -} - -/* Primary action button, use sparingly */ -.primary { - border: 1px solid #0082c9; - background-color: #00a2e9; - color: #fff; -} - -input[type='submit'].primary, input[type='button'].primary { - border: 1px solid #0082c9; - background-color: #00a2e9; - color: #fff; -} - -button.primary, .button.primary { - border: 1px solid #0082c9; - background-color: #00a2e9; - color: #fff; -} - -.primary:hover { - background-color: #0092d9; - color: #fff; -} - -input[type='submit'].primary:hover, input[type='button'].primary:hover { - background-color: #0092d9; - color: #fff; -} - -button.primary:hover, .button.primary:hover, .primary:focus { - background-color: #0092d9; - color: #fff; -} - -input[type='submit'].primary:focus, input[type='button'].primary:focus { - background-color: #0092d9; - color: #fff; -} - -button.primary:focus, .button.primary:focus { - background-color: #0092d9; - color: #fff; -} - -.primary:active { - background-color: #00a2e9; - color: #bbb; -} - -input[type='submit'].primary:active, input[type='button'].primary:active { - background-color: #00a2e9; - color: #bbb; -} - -button.primary:active, .button.primary:active, .primary:disabled { - background-color: #00a2e9; - color: #bbb; -} - -input[type='submit'].primary:disabled, input[type='button'].primary:disabled { - background-color: #00a2e9; - color: #bbb; -} - -button.primary:disabled, .button.primary:disabled, .primary:disabled:hover { - background-color: #00a2e9; - color: #bbb; -} - -input[type='submit'].primary:disabled:hover, input[type='button'].primary:disabled:hover { - background-color: #00a2e9; - color: #bbb; -} - -button.primary:disabled:hover, .button.primary:disabled:hover, .primary:disabled:focus { - background-color: #00a2e9; - color: #bbb; -} - -input[type='submit'].primary:disabled:focus, input[type='button'].primary:disabled:focus { - background-color: #00a2e9; - color: #bbb; -} - -button.primary:disabled:focus, .button.primary:disabled:focus { - background-color: #00a2e9; - color: #bbb; -} -input, textarea, select, button { - font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif; -} diff --git a/core/css/jquery-ui-fixes.scss b/core/css/jquery-ui-fixes.css index 4cf4f4cdd4a..e8cf2b769b8 100644 --- a/core/css/jquery-ui-fixes.scss +++ b/core/css/jquery-ui-fixes.css @@ -1,124 +1,134 @@ /* Component containers ----------------------------------*/ - .ui-widget { - font-family: 'Lucida Grande', Arial, Verdana, sans-serif; + font-family: "Lucida Grande", Arial, Verdana, sans-serif; font-size: 1em; - button { - font-family: 'Lucida Grande', Arial, Verdana, sans-serif; - } } - +.ui-widget button { + font-family: "Lucida Grande", Arial, Verdana, sans-serif; +} .ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url('images/ui-bg_highlight-soft_100_eeeeee_1x100.png') 50% top repeat-x; color: #333333; - a { - color: #333333; - } } - +.ui-widget-content a { + color: #333333; +} .ui-widget-header { border: 1px solid #0082c9; background: #0082c9; color: #ffffff; - a { - color: #ffffff; - } +} +.ui-widget-header a { + color: #ffffff; } /* Interaction states ----------------------------------*/ - -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { border: 1px solid #ddd; background: #f8f8f8 url('images/ui-bg_glass_100_f8f8f8_1x400.png') 50% 50% repeat-x; font-weight: bold; color: #555; } - -.ui-state-default a { +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { color: #555; - &:link, &:visited { - color: #555; - } } - -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { border: 1px solid #ddd; background: #ffffff url('images/ui-bg_flat_100_ffffff_40x100.png') 50% 50% repeat-x; font-weight: bold; color: #333; } - -.ui-state-hover a { +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited { color: #333; - &:hover, &:link, &:visited { - color: #333; - } } - -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { border: 1px solid #0082c9; background: #f8f8f8 url('images/ui-bg_glass_100_f8f8f8_1x400.png') 50% 50% repeat-x; font-weight: bold; color: #0082c9; } - -.ui-state-active a { +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { color: #0082c9; - &:link, &:visited { - color: #0082c9; - } } /* Interaction Cues ----------------------------------*/ - -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { border: 1px solid #ddd; background: #f8f8f8 url('images/ui-bg_highlight-hard_100_f8f8f8_1x100.png') 50% top repeat-x; color: #555; } - -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a { +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { color: #555; } - -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { border: 1px solid #cd0a0a; background: #b81900 url('images/ui-bg_diagonals-thick_18_b81900_40x40.png') 50% 50% repeat; color: #ffffff; } - -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a, .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #ffffff; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { color: #ffffff; } /* Icons ----------------------------------*/ - -.ui-state-default .ui-icon, .ui-state-hover .ui-icon, .ui-state-focus .ui-icon, .ui-state-active .ui-icon { +.ui-state-default .ui-icon { + background-image: url('images/ui-icons_1d2d44_256x240.png'); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url('images/ui-icons_1d2d44_256x240.png'); +} +.ui-state-active .ui-icon { background-image: url('images/ui-icons_1d2d44_256x240.png'); } - .ui-state-highlight .ui-icon { background-image: url('images/ui-icons_ffffff_256x240.png'); } - -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon { +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { background-image: url('images/ui-icons_ffd27a_256x240.png'); } /* Misc visuals ----------------------------------*/ /* Overlays */ - .ui-widget-overlay { background: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat; opacity: .5; } - .ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; diff --git a/core/css/multiselect.scss b/core/css/multiselect.scss index 024e5818a40..4b5d9cb6cf3 100644 --- a/core/css/multiselect.scss +++ b/core/css/multiselect.scss @@ -1,5 +1,16 @@ /** - * @copyright Copyright (c) 2011, Jan-Christoph Borchardt <hey@jancborchardt.net> + * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com> + * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net> + * @copyright Copyright (c) 2016, Sergio Bertolín <sbertolin@solidgear.es> + * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de> + * @copyright Copyright (c) 2014, Vincent Petry <pvince81@owncloud.com> + * @copyright Copyright (c) 2013, Vincent Petry <pvince81@owncloud.com> + * @copyright Copyright (c) 2013, raghunayyar <me@iraghu.com> + * @copyright Copyright (c) 2013, Victor Dubiniuk <victor.dubiniuk@gmail.com> + * @copyright Copyright (c) 2013, kondou <kondou@ts.unde.re> + * @copyright Copyright (c) 2012, Thomas Tanghus <thomas@tanghus.net> + * @copyright Copyright (c) 2012, Lukas Reschke <lukas@statuscode.ch> + * @copyright Copyright (c) 2012, Jan-Christoph Borchardt <hey@jancborchardt.net> * * @license GNU AGPL version 3 or any later version * diff --git a/core/css/share.scss b/core/css/share.scss index 7ce365a1454..8852ad2748e 100644 --- a/core/css/share.scss +++ b/core/css/share.scss @@ -1,6 +1,14 @@ /** - * @copyright Copyright (c) 2011, Jan-Christoph Borchardt <hey@jancborchardt.net> - * @copyright Copyright (c) 2017, John Molakvoæ (skjnldsv@protonmail.com) + * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com> + * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de> + * @copyright Copyright (c) 2016, Julia Bode <julia.bode@lulisaur.us> + * @copyright Copyright (c) 2016, Christoph Wurst <christoph@winzerhof-wurst.at> + * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de> + * @copyright Copyright (c) 2015, Jan-Christoph Borchardt <hey@jancborchardt.net> + * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com> + * @copyright Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> + * @copyright Copyright (c) 2015, Roeland Jago Douma <roeland@famdouma.nl> + * @copyright Copyright (c) 2015, Morris Jobke <hey@morrisjobke.de> * * @license GNU AGPL version 3 or any later version * @@ -73,7 +81,7 @@ #shareWithList { list-style-type: none; padding: 8px; - li { + > li { padding-top: 10px; padding-bottom: 10px; font-weight: bold; @@ -85,8 +93,8 @@ flex-shrink: 0; position: relative; .popovermenu { - right: -6px; - top: 40px; + right: -11px; + top: 35px; padding: 3px 6px; } } @@ -112,9 +120,6 @@ vertical-align: middle; flex-grow: 5; } - li label { - margin-right: 8px; - } } a { diff --git a/core/css/styles.scss b/core/css/styles.scss index affaec14342..d958a01655b 100644 --- a/core/css/styles.scss +++ b/core/css/styles.scss @@ -1,6 +1,17 @@ -/* Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net - This file is licensed under the Affero General Public License version 3 or later. - See the COPYING-README file. */ +/** + * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com> + * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch> + * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl> + * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net> + * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com> + * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de> + * @copyright Copyright (c) 2016, Christoph Wurst <christoph@winzerhof-wurst.at> + * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net> + * @copyright Copyright (c) 2016, Raghu Nayyar <hey@raghunayyar.com> + * + * @license GNU AGPL version 3 or any later version + * + */ html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section { margin: 0; @@ -159,30 +170,49 @@ body { /* Searchbox */ -.searchbox input[type='search'] { +.searchbox { position: relative; - font-size: 1.2em; - padding: 3px; - padding-left: 25px; - background: transparent url('../img/actions/search-white.svg?v=1') no-repeat 6px center; - color: #fff; - border: 0; - border-radius: 3px; - margin-top: 9px; - float: right; - width: 0; - cursor: pointer; - -webkit-transition: all 100ms; - transition: all 100ms; - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=70)'; - opacity: .7; - &:focus, &:active, &:valid { + input[type='search'] { + position: relative; + font-size: 1.2em; + padding: 3px; + padding-left: 25px; + background: transparent url('../img/actions/search-white.svg?v=1') no-repeat 6px center; color: #fff; - width: 155px; - max-width: 50%; - cursor: text; - background-color: #0082c9; - border: 1px solid rgba(255, 255, 255, 0.5); + border: 0; + border-radius: 3px; + margin-top: 3px; + width: 0; + cursor: pointer; + -webkit-transition: all 100ms; + transition: all 100ms; + -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=70)'; + opacity: .7; + &:focus, &:active, &:valid { + color: #fff; + width: 155px; + cursor: text; + background-color: #0082c9 !important; + border: 1px solid rgba(255, 255, 255, 0.5) !important; + } + & ~ .icon-close-white { + display: inline; + position: absolute; + width: 15px; + height: 32px; + right: 3px; + top: 0; + &, &:focus, &:active, &:hover { + border: none; + background-color: transparent; + } + } + &:not(:valid) ~ .icon-close-white { + display: none; + } + &::-webkit-search-cancel-button { + -webkit-appearance: none; + } } } @@ -567,19 +597,19 @@ label.infield { } #pass2, input[name='personal-password-clone'] { - padding: .6em 2.5em .4em .4em; - width: 8em; + padding-right: 30px; } +.personal-show-container { + position: relative; + display: inline-block; + margin-right: 6px; +} #personal-show + label { - height: 14px; - margin-top: -25px; - left: 295px; display: block; -} - -#passwordbutton { - margin-left: .5em; + right: 0; + margin-top: -36px; + padding: 6px 4px; } /* Database selector */ @@ -724,9 +754,9 @@ label.infield { #body-login input { font-size: 20px; margin: 5px; - padding: 11px 10px 9px; + padding: 10px 10px 8px; &[type='text'], &[type='password'] { - width: 249px; + width: calc(100% - 10px); /* 5px margin */ } &.login { width: 269px; diff --git a/core/css/systemtags.scss b/core/css/systemtags.scss index 1ae26710108..b32f33f36e5 100644 --- a/core/css/systemtags.scss +++ b/core/css/systemtags.scss @@ -1,5 +1,10 @@ /** - * @copyright Copyright (c) 2017 + * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com> + * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl> + * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net> + * @copyright Copyright (c) 2016, Vincent Petry <pvince81@owncloud.com> + * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org> + * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com> * * @license GNU AGPL version 3 or any later version * diff --git a/core/css/tooltip.scss b/core/css/tooltip.scss index 96073962884..263dad0b0c9 100644 --- a/core/css/tooltip.scss +++ b/core/css/tooltip.scss @@ -1,4 +1,10 @@ -/*! +/** + * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com> + * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl> + * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net> + * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org> + * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com> + * * Bootstrap v3.3.5 (http://getbootstrap.com) * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) diff --git a/core/css/update.css b/core/css/update.css deleted file mode 100644 index 0ae72fd04a0..00000000000 --- a/core/css/update.css +++ /dev/null @@ -1,449 +0,0 @@ -#update-progress-icon { - height: 32px; - margin: 10px; - background-size: 32px; -} - -#update-progress-message-error, -#update-progress-message-warnings { - font-weight: 600; - margin-bottom: 10px; -} - -#update-progress-message { - margin-bottom: 10px; -} - -.update-show-detailed { - padding: 13px; - display: block; - opacity: .75; -} - -#body-login .update a.update-show-detailed { - border-bottom: inherit; -} - -#update-progress-detailed { - text-align: left; -} - -#body-login .warning.hidden { - display: none; -} - -/** - * Below this is a copy of the original CSS because we moved to on-the-fly - * generated CSS from SCSS which doesn't work during update - */ - -/** HEADER **/ - -/* prevent ugly selection effect on accidental selection */ -#header { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; -} - -/* removed until content-focusing issue is fixed */ -#skip-to-content a { - position: absolute; - left: -10000px; - top: auto; - width: 1px; - height: 1px; - overflow: hidden; -} -#skip-to-content a:focus { - left: 76px; - top: -9px; - color: #fff; - width: auto; - height: auto; -} - -/* HEADERS ------------------------------------------------------------------ */ - -#header .logo { - background-image: url('../img/logo-icon.svg?v=1'); - background-repeat: no-repeat; - background-size: 175px; - background-position: center; - width: 252px; - height: 120px; - margin: 0 auto; -} - -/** STYLES **/ - -/* Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net - This file is licensed under the Affero General Public License version 3 or later. - See the COPYING-README file. */ - -html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section { margin:0; padding:0; border:0; outline:0; font-weight:inherit; font-size:100%; font-family:inherit; vertical-align:baseline; cursor:default; } -html, body { height:100%; } -article, aside, dialog, figure, footer, header, hgroup, nav, section { display:block; } -body { line-height:1.5; } -table { border-collapse:separate; border-spacing:0; white-space:nowrap; } -caption, th, td { text-align:left; font-weight:normal; } -table, td, th { vertical-align:middle; } -a { border:0; color:#000; text-decoration:none;} -a, a *, input, input *, select, .button span, label { cursor:pointer; } -ul { list-style:none; } - -body { - background-color: #ffffff; - font-weight: 400; - font-size: .8em; - line-height: 1.6em; - font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif; - color: #000; - height: auto; -} - -#body-login { - text-align: center; - background-color: #0082c9; - background-image: url('../img/background.jpg?v=1'); - background-position: 50% 50%; - background-repeat: no-repeat; - background-size: cover; -} - -#nojavascript { - position: fixed; - top: 0; - bottom: 0; - height: 100%; - width: 100%; - z-index: 9000; - text-align: center; - background-color: rgba(0,0,0,0.5); - color: #fff; - line-height: 125%; - font-size: 24px; -} -#nojavascript div { - display: block; - position: relative; - width: 50%; - top: 35%; - margin: 0px auto; -} -#nojavascript a { - color: #fff; - border-bottom: 2px dotted #fff; -} -#nojavascript a:hover, -#nojavascript a:focus { - color: #ddd; -} - -/* SCROLLING */ -::-webkit-scrollbar { - width: 5px; -} -::-webkit-scrollbar-track-piece { - background-color: transparent; -} -::-webkit-scrollbar-thumb { - background: #ddd; - border-radius: 3px; -} - -/* LOG IN & INSTALLATION ------------------------------------------------------------ */ - -/* Some whitespace to the top */ -#body-login #header { - padding-top: 100px; -} -#body-login { - background-attachment: fixed; /* fix background gradient */ - height: 100%; /* fix sticky footer */ -} - -/* Dark subtle label text */ -#body-login p.info { - text-align: center; - color: #fff; -} - -#body-login .update h2 { - margin: 0 0 20px; -} - -#body-login .update a { - color: #fff; - border-bottom: 1px solid #aaa; -} - -#body-login .infogroup { - margin-bottom: 15px; -} - -#body-login p#message img { - vertical-align: middle; - padding: 5px; -} - -#body-login p.info { - margin: 0 auto; - padding-top: 20px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -#body-login p.info a { - font-weight: 600; - padding: 13px; - margin: -13px; - color: #fff; -} - -#body-login .success { - background:#d7fed7; - border:1px solid #0f0; - width: 35%; - margin: 30px auto; - padding:1em; - text-align: center; -} - -#body-login p.info a:hover, -#body-login p.info a:focus { - opacity: .6; -} - -/* Warnings and errors are the same */ -#body-login .warning, -#body-login .update, -#body-login .error { - display: block; - padding: 10px; - background-color: rgba(0,0,0,.3); - color: #fff; - text-align: left; - border-radius: 3px; - cursor: default; -} - -#body-login .update { - width: inherit; - text-align: center; -} - -#body-login .update .appList { - list-style: disc; - text-align: left; - margin-left: 25px; - margin-right: 25px; -} - -#body-login .v-align { - width: inherit; -} - -.error a { - color: #fff !important; - font-weight: 600 !important; -} -.error a.button { - color: #555 !important; - display: inline-block; - text-align: center; -} -.error pre { - white-space: pre-wrap; - text-align: left; -} - -/* fixes for update page TODO should be fixed some time in a proper way */ -/* this is just for an error while updating the ownCloud instance */ -#body-login .updateProgress .error { - margin-top: 10px; - margin-bottom: 10px; -} - -/* Log in and install button */ -#body-login input { - font-size: 20px; - margin: 5px; - padding: 11px 10px 9px; -} -#body-login input.login { - width: 269px; - background-position: right 16px center; -} - -/* Sticky footer */ -#body-login .wrapper { - min-height: 100%; - margin: 0 auto -70px; - width: 300px; -} -#body-login footer, #body-login .push { - height: 70px; -} - -code { font-family:"Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", monospace; } - -/* for IE10 */ -@-ms-viewport { - width: device-width; -} - -/** APPS **/ - -/* buttons */ -button.loading { - background-image: url('../img/loading.gif'); - background-position: right 10px center; background-repeat: no-repeat; - background-size: 16px; - padding-right: 30px; -} - -/* heading styles */ -h2 { - font-size: 20px; - font-weight: 300; - margin-bottom: 12px; - line-height: 140%; -} -h3 { - font-size: 15px; - font-weight: 300; - margin: 12px 0; -} - -/* do not use italic typeface style, instead lighter color */ -em { - font-style: normal; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - opacity: .5; -} - -/** ICONS **/ - -[class^="icon-"], [class*=" icon-"] { - background-repeat: no-repeat; - background-position: center; - min-width: 16px; - min-height: 16px; -} - -/* general assets */ - -.icon-loading-dark { - position: relative; -} -.icon-loading-dark:after { - z-index: 2; - content: ""; - height: 30px; - width: 30px; - margin: -16px 0 0 -16px; - position: absolute; - top: 50%; - left: 50%; - border-radius: 100%; - -webkit-animation: rotate .8s infinite linear; - animation: rotate .8s infinite linear; - -webkit-transform-origin: center; - -ms-transform-origin: center; - transform-origin: center; -} -.icon-loading-dark:after { - border: 2px solid rgba(150, 150, 150, .5); - border-top-color: rgb(100, 100, 100); -} - -.icon-loading-dark:after, -.icon-loading-small-dark:after { - border: 2px solid rgba(187, 187, 187, .5); - border-top-color: #bbb; -} - -/* Css replaced elements don't have ::after nor ::before */ -img.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark, button.icon-loading-dark, textarea.icon-loading-dark, input.icon-loading-dark, select.icon-loading-dark { - background-image: url("../img/loading-dark.gif"); -} - -@-webkit-keyframes rotate { - from { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -@keyframes rotate { - from { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -.icon-32 { - background-size: 32px !important; -} - -.icon-checkmark-white { - background-image: url('../img/actions/checkmark-white.svg?v=1'); -} - -.icon-error-white { - background-image: url('../img/actions/error-white.svg?v=1'); -} - -/* INPUTS */ - -/* specifically override browser styles */ -input { - font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif; -} - -input[type="button"] { - width: 130px; - margin: 3px 3px 3px 0; - padding: 7px 6px 5px; - font-size: 13px; - background-color: #fff; - color: #333; - border: 1px solid #ddd; - outline: none; - border-radius: 3px; -} - -/* correctly align images inside of buttons */ -input img { - vertical-align: text-bottom; -} - -/* BUTTONS */ -input[type="button"] { - width: auto; - min-width: 25px; - padding: 5px; - background-color: rgba(240,240,240,.9); - font-weight: 600; - color: #555; - border: 1px solid rgba(240,240,240,.9); - cursor: pointer; -} - -input[type="button"]:hover, input[type="button"]:focus { - background-color: rgba(255, 255, 255, .95); - color: #111; -} -input[type="button"] img { - border: none; - box-shadow: none; -} diff --git a/core/img/actions/checkbox-checked-disabled.svg b/core/img/actions/checkbox-checked-disabled.svg deleted file mode 100644 index 8b0118da343..00000000000 --- a/core/img/actions/checkbox-checked-disabled.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#fff"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm8.924 2.066l1.433 1.432-6.365 6.365L2.75 7.62l1.414-1.415 2.828 2.83 4.932-4.97z" fill="#969696"/></svg>
\ No newline at end of file diff --git a/core/img/actions/checkbox-checked-white.svg b/core/img/actions/checkbox-checked-white.svg deleted file mode 100644 index 8043bd463be..00000000000 --- a/core/img/actions/checkbox-checked-white.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm8.924 2.066l1.433 1.432-6.365 6.365L2.75 7.62l1.414-1.415 2.828 2.83 4.932-4.97z" fill="#fff"/></svg>
\ No newline at end of file diff --git a/core/img/actions/checkbox-checked.svg b/core/img/actions/checkbox-checked.svg deleted file mode 100644 index bd9241d664c..00000000000 --- a/core/img/actions/checkbox-checked.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#fff"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm8.924 2.066l1.433 1.432-6.365 6.365L2.75 7.62l1.414-1.415 2.828 2.83 4.932-4.97z" fill="#0082c9"/></svg>
\ No newline at end of file diff --git a/core/img/actions/checkbox-disabled-white.svg b/core/img/actions/checkbox-disabled-white.svg deleted file mode 100644 index c5cf4a66585..00000000000 --- a/core/img/actions/checkbox-disabled-white.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#dcdcdc"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#fff"/></svg>
\ No newline at end of file diff --git a/core/img/actions/checkbox-disabled.svg b/core/img/actions/checkbox-disabled.svg deleted file mode 100644 index fa73b4f4352..00000000000 --- a/core/img/actions/checkbox-disabled.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#dcdcdc"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#969696"/></svg>
\ No newline at end of file diff --git a/core/img/actions/checkbox-mark-white.svg b/core/img/actions/checkbox-mark-white.svg new file mode 100644 index 00000000000..8407898164b --- /dev/null +++ b/core/img/actions/checkbox-mark-white.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M11.924 4.066l-4.932 4.97-2.828-2.83L2.75 7.618l4.242 4.243 6.365-6.365-1.433-1.432z"/></svg>
\ No newline at end of file diff --git a/core/img/actions/checkbox-mark.svg b/core/img/actions/checkbox-mark.svg new file mode 100644 index 00000000000..1013b6cc3f2 --- /dev/null +++ b/core/img/actions/checkbox-mark.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M11.924 4.066l-4.932 4.97-2.828-2.83L2.75 7.618l4.242 4.243 6.365-6.365-1.433-1.432z" fill="#fff"/></svg>
\ No newline at end of file diff --git a/core/img/actions/checkbox-mixed-disabled.svg b/core/img/actions/checkbox-mixed-disabled.svg deleted file mode 100644 index 2e8e98fb9fc..00000000000 --- a/core/img/actions/checkbox-mixed-disabled.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#dcdcdc"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#969696"/><path d="M4 7h8v2H4z" fill="#fff"/></svg>
\ No newline at end of file diff --git a/core/img/actions/checkbox-mixed-white.svg b/core/img/actions/checkbox-mixed-white.svg index ca7d92bbeed..c66636717be 100644 --- a/core/img/actions/checkbox-mixed-white.svg +++ b/core/img/actions/checkbox-mixed-white.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm1 5h8v2H4V7z" fill="#fff"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M4 7v2h8V7H4z"/></svg>
\ No newline at end of file diff --git a/core/img/actions/checkbox-mixed.svg b/core/img/actions/checkbox-mixed.svg index 8a1412bf849..308baae3920 100644 --- a/core/img/actions/checkbox-mixed.svg +++ b/core/img/actions/checkbox-mixed.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#fff"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm1 5h8v2H4V7z" fill="#969696"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M4 7v2h8V7H4z" fill="#fff"/></svg>
\ No newline at end of file diff --git a/core/img/actions/checkbox-white.svg b/core/img/actions/checkbox-white.svg deleted file mode 100644 index 1a0cd569e1c..00000000000 --- a/core/img/actions/checkbox-white.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#fff"/></svg>
\ No newline at end of file diff --git a/core/img/actions/checkbox.svg b/core/img/actions/checkbox.svg deleted file mode 100644 index 46cad084ab5..00000000000 --- a/core/img/actions/checkbox.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#fff"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#969696"/></svg>
\ No newline at end of file diff --git a/core/img/actions/close-white.svg b/core/img/actions/close-white.svg new file mode 100644 index 00000000000..cd2a8c62468 --- /dev/null +++ b/core/img/actions/close-white.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1"> + <path fill="#fff" d="m12.95 11.536l-1.414 1.414-3.536-3.536-3.535 3.536-1.415-1.414 3.536-3.536-3.536-3.536 1.415-1.414 3.535 3.536 3.516-3.555 1.434 1.434-3.536 3.535z"/> +</svg> diff --git a/core/img/actions/radio-checked-disabled.svg b/core/img/actions/radio-checked-disabled.svg deleted file mode 100644 index 470293c2960..00000000000 --- a/core/img/actions/radio-checked-disabled.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13z" fill="#fff"/><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="#969696"/></svg>
\ No newline at end of file diff --git a/core/img/actions/radio-checked-white.svg b/core/img/actions/radio-checked-white.svg deleted file mode 100644 index d024c91ff19..00000000000 --- a/core/img/actions/radio-checked-white.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="#fff"/></svg>
\ No newline at end of file diff --git a/core/img/actions/radio-checked.svg b/core/img/actions/radio-checked.svg deleted file mode 100644 index bb4c622a9f7..00000000000 --- a/core/img/actions/radio-checked.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13z" fill="#fff"/><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="#0082c9"/></svg>
\ No newline at end of file diff --git a/core/img/actions/radio-disabled.svg b/core/img/actions/radio-disabled.svg deleted file mode 100644 index e6bf778f192..00000000000 --- a/core/img/actions/radio-disabled.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13z" fill="#dcdcdc"/><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6z" fill="#969696"/></svg>
\ No newline at end of file diff --git a/core/img/actions/radio-white.svg b/core/img/actions/radio-white.svg deleted file mode 100644 index 0eda991c4d3..00000000000 --- a/core/img/actions/radio-white.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6z" fill="#fff"/></svg>
\ No newline at end of file diff --git a/core/img/actions/radio.svg b/core/img/actions/radio.svg deleted file mode 100644 index 31a364b88e0..00000000000 --- a/core/img/actions/radio.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13z" fill="#fff"/><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6z" fill="#969696"/></svg>
\ No newline at end of file diff --git a/core/img/actions/settings-dark.svg b/core/img/actions/settings-dark.svg new file mode 100644 index 00000000000..2160b673e30 --- /dev/null +++ b/core/img/actions/settings-dark.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1"><path d="M6.938 0A.43.43 0 0 0 6.5.438v1.25a5.818 5.818 0 0 0-1.53.656l-.907-.906a.436.436 0 0 0-.625 0l-1.5 1.5a.436.436 0 0 0 0 .624l.906.907c-.285.48-.514.976-.656 1.53H.938a.43.43 0 0 0-.438.438v2.125C.5 8.81.69 9 .938 9h1.25a5.82 5.82 0 0 0 .656 1.53l-.907.908a.436.436 0 0 0 0 .625l1.5 1.5c.176.176.45.176.625 0l.907-.907c.48.285.976.514 1.53.656v1.25c0 .25.19.438.437.438h2.125a.43.43 0 0 0 .438-.438v-1.25a5.82 5.82 0 0 0 1.53-.657l.907.907c.176.175.45.175.625 0l1.5-1.5a.436.436 0 0 0 0-.625l-.906-.906A5.79 5.79 0 0 0 13.812 9h1.25a.43.43 0 0 0 .438-.438V6.437A.43.43 0 0 0 15.062 6h-1.25a5.79 5.79 0 0 0-.656-1.532l.906-.906a.436.436 0 0 0 0-.625l-1.5-1.5a.436.436 0 0 0-.625 0l-.906.906a5.816 5.816 0 0 0-1.53-.656V.437A.43.43 0 0 0 9.063 0zM8 4.157a3.344 3.344 0 0 1 0 6.686 3.344 3.344 0 0 1 0-6.686z" display="block"/></svg> diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js index cb553947de6..84a3d18942f 100644 --- a/core/js/sharedialoglinkshareview.js +++ b/core/js/sharedialoglinkshareview.js @@ -43,6 +43,13 @@ '</div>' + ' {{/if}}' + ' {{/if}}' + + ' {{#if publicEditing}}' + + '<div id="allowPublicEditingWrapper">' + + ' <span class="icon-loading-small hidden"></span>' + + ' <input type="checkbox" value="1" name="allowPublicEditing" id="sharingDialogAllowPublicEditing-{{cid}}" class="checkbox publicEditingCheckbox" {{{publicEditingChecked}}} />' + + '<label for="sharingDialogAllowPublicEditing-{{cid}}">{{publicEditingLabel}}</label>' + + '</div>' + + ' {{/if}}' + ' {{#if showPasswordCheckBox}}' + '<input type="checkbox" name="showPassword" id="showPassword-{{cid}}" class="checkbox showPasswordCheckbox" {{#if isPasswordSet}}checked="checked"{{/if}} value="1" />' + '<label for="showPassword-{{cid}}">{{enablePasswordLabel}}</label>' + @@ -87,6 +94,7 @@ 'click .linkCheckbox': 'onLinkCheckBoxChange', 'click .linkText': 'onLinkTextClick', 'change .publicUploadCheckbox': 'onAllowPublicUploadChange', + 'change .publicEditingCheckbox': 'onAllowPublicEditingChange', 'change .hideFileListCheckbox': 'onHideFileListChange', 'click .showPasswordCheckbox': 'onShowPasswordClick' }, @@ -128,7 +136,8 @@ 'onLinkTextClick', 'onShowPasswordClick', 'onHideFileListChange', - 'onAllowPublicUploadChange' + 'onAllowPublicUploadChange', + 'onAllowPublicEditingChange' ); var clipboard = new Clipboard('.clipboardButton'); @@ -266,6 +275,20 @@ }); }, + onAllowPublicEditingChange: function() { + var $checkbox = this.$('.publicEditingCheckbox'); + $checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock'); + + var permissions = OC.PERMISSION_READ; + if($checkbox.is(':checked')) { + permissions = OC.PERMISSION_UPDATE | OC.PERMISSION_READ; + } + + this.model.saveLinkShare({ + permissions: permissions + }); + }, + onHideFileListChange: function () { var $checkbox = this.$('.hideFileListCheckbox'); $checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock'); @@ -307,6 +330,12 @@ publicUploadChecked = 'checked="checked"'; } + var publicEditingChecked = ''; + if(this.model.isPublicEditingAllowed()) { + publicEditingChecked = 'checked="checked"'; + } + + var hideFileList = publicUploadChecked; var hideFileListChecked = ''; @@ -320,6 +349,11 @@ && ( !this.configModel.get('enforcePasswordForPublicLink') || !this.model.get('linkShare').password); + var publicEditable = + !this.model.isFolder() + && isLinkShare + && this.model.updatePermissionPossible(); + this.$el.html(linkShareTemplate({ cid: this.cid, shareAllowed: true, @@ -337,6 +371,9 @@ publicUploadChecked: publicUploadChecked, hideFileListChecked: hideFileListChecked, publicUploadLabel: t('core', 'Allow upload and editing'), + publicEditing: publicEditable, + publicEditingChecked: publicEditingChecked, + publicEditingLabel: t('core', 'Allow editing'), hideFileListLabel: t('core', 'File drop (upload only)'), mailPrivatePlaceholder: t('core', 'Email link to person'), mailButtonText: t('core', 'Send') diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js index 0fe0747dd59..4647dedd722 100644 --- a/core/js/sharedialogshareelistview.js +++ b/core/js/sharedialogshareelistview.js @@ -59,7 +59,7 @@ '<ul>' + '{{#if isResharingAllowed}} {{#if sharePermissionPossible}} {{#unless isMailShare}}' + '<li>' + - '<span class="shareOption">' + + '<span class="shareOption menuitem">' + '<input id="canShare-{{cid}}-{{shareWith}}" type="checkbox" name="share" class="permissions checkbox" {{#if hasSharePermission}}checked="checked"{{/if}} data-permissions="{{sharePermission}}" />' + '<label for="canShare-{{cid}}-{{shareWith}}">{{canShareLabel}}</label>' + '</span>' + @@ -68,7 +68,7 @@ '{{#if isFolder}}' + '{{#if createPermissionPossible}}{{#unless isMailShare}}' + '<li>' + - '<span class="shareOption">' + + '<span class="shareOption menuitem">' + '<input id="canCreate-{{cid}}-{{shareWith}}" type="checkbox" name="create" class="permissions checkbox" {{#if hasCreatePermission}}checked="checked"{{/if}} data-permissions="{{createPermission}}"/>' + '<label for="canCreate-{{cid}}-{{shareWith}}">{{createPermissionLabel}}</label>' + '</span>' + @@ -76,7 +76,7 @@ '{{/unless}}{{/if}}' + '{{#if updatePermissionPossible}}{{#unless isMailShare}}' + '<li>' + - '<span class="shareOption">' + + '<span class="shareOption menuitem">' + '<input id="canUpdate-{{cid}}-{{shareWith}}" type="checkbox" name="update" class="permissions checkbox" {{#if hasUpdatePermission}}checked="checked"{{/if}} data-permissions="{{updatePermission}}"/>' + '<label for="canUpdate-{{cid}}-{{shareWith}}">{{updatePermissionLabel}}</label>' + '</span>' + @@ -84,7 +84,7 @@ '{{/unless}}{{/if}}' + '{{#if deletePermissionPossible}}{{#unless isMailShare}}' + '<li>' + - '<span class="shareOption">' + + '<span class="shareOption menuitem">' + '<input id="canDelete-{{cid}}-{{shareWith}}" type="checkbox" name="delete" class="permissions checkbox" {{#if hasDeletePermission}}checked="checked"{{/if}} data-permissions="{{deletePermission}}"/>' + '<label for="canDelete-{{cid}}-{{shareWith}}">{{deletePermissionLabel}}</label>' + '</span>' + diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js index 9b10f067afc..ae4c07e3f4e 100644 --- a/core/js/shareitemmodel.js +++ b/core/js/shareitemmodel.js @@ -272,6 +272,10 @@ return this.get('allowPublicUploadStatus'); }, + isPublicEditingAllowed: function() { + return this.get('allowPublicEditingStatus'); + }, + /** * @returns {boolean} */ @@ -679,6 +683,17 @@ }); } + var allowPublicEditingStatus = true; + if(!_.isUndefined(data.shares)) { + $.each(data.shares, function (key, value) { + if (value.share_type === OC.Share.SHARE_TYPE_LINK) { + allowPublicEditingStatus = (value.permissions & OC.PERMISSION_UPDATE) ? true : false; + return true; + } + }); + } + + var hideFileListStatus = false; if(!_.isUndefined(data.shares)) { $.each(data.shares, function (key, value) { @@ -762,6 +777,7 @@ linkShare: linkShare, permissions: permissions, allowPublicUploadStatus: allowPublicUploadStatus, + allowPublicEditingStatus: allowPublicEditingStatus, hideFileListStatus: hideFileListStatus }; }, diff --git a/core/l10n/bg_BG.js b/core/l10n/bg_BG.js index cb41f4e1437..a23ead44e93 100644 --- a/core/l10n/bg_BG.js +++ b/core/l10n/bg_BG.js @@ -121,6 +121,7 @@ OC.L10N.register( "Link" : "Връзка", "Password protect" : "Защитено с парола", "Allow upload and editing" : "Позволи обновяване и редактиране", + "Allow editing" : "Позволяване на редактиране", "File drop (upload only)" : "Пускане на файл (качване само)", "Email link to person" : "Имейл връзка към човек", "Send" : "Изпращане", @@ -238,8 +239,8 @@ OC.L10N.register( "Need help?" : "Нуждаете се от помощ?", "See the documentation" : "Прегледайте документацията", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "За да функционира приложението изисква JavaScript. Моля, {linkstart}включете JavaScript{linkend} и презаредете страницата.", - "Log out" : "Отписване", "Search" : "Търсене", + "Log out" : "Отписване", "This action requires you to confirm your password:" : "Това действие изисква да потвърдите паролата си:", "Confirm your password" : "Потвърдете паролата си", "Server side authentication failed!" : "Удостоверяването от страна на сървъра е неуспешно!", @@ -340,7 +341,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Файловете Ви са криптирани. Ако не сте настроили ключ за възстановяване, няма да можете да възстановите данните си след смяна на паролата.<br />Ако не сте сигурни какво да направите, моля, свържете се с Вашия администратор преди да продължите. <br/>Наистина ли желаете да продължите?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Сървърът няма работеща интернет връзка. Това означава, че някои функции като прикачването на външни дискови устройства, уведомления за обновяване или инсталиране на външни приложения няма да работят. Достъпът на файлове отвън или изпращане на имейли за уведомление вероятно също няма да работят. Препоръчваме да включиш интернет връзката за този сървър ако искаш да използваш всички тези функции.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Хедърите за обратно прокси са невалидни, или достъпвате Nextcloud от доверено прокси. Ако не достъпвате Nextcloud от доверено прокси, то това е проблем в сигурността и може да позволи на хакер да прикрие IP адреса си в Nextcloud. Допълнителна информация може да бъде намерена в нашата <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документация</a>.", - "Allow editing" : "Позволяване на редактиране", "Hide file listing" : "Скрий показването на файлове", "Sending ..." : "Изпращане ...", "Email sent" : "Имейла е изпратен", diff --git a/core/l10n/bg_BG.json b/core/l10n/bg_BG.json index 91ea33e4c87..7146057c1f0 100644 --- a/core/l10n/bg_BG.json +++ b/core/l10n/bg_BG.json @@ -119,6 +119,7 @@ "Link" : "Връзка", "Password protect" : "Защитено с парола", "Allow upload and editing" : "Позволи обновяване и редактиране", + "Allow editing" : "Позволяване на редактиране", "File drop (upload only)" : "Пускане на файл (качване само)", "Email link to person" : "Имейл връзка към човек", "Send" : "Изпращане", @@ -236,8 +237,8 @@ "Need help?" : "Нуждаете се от помощ?", "See the documentation" : "Прегледайте документацията", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "За да функционира приложението изисква JavaScript. Моля, {linkstart}включете JavaScript{linkend} и презаредете страницата.", - "Log out" : "Отписване", "Search" : "Търсене", + "Log out" : "Отписване", "This action requires you to confirm your password:" : "Това действие изисква да потвърдите паролата си:", "Confirm your password" : "Потвърдете паролата си", "Server side authentication failed!" : "Удостоверяването от страна на сървъра е неуспешно!", @@ -338,7 +339,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Файловете Ви са криптирани. Ако не сте настроили ключ за възстановяване, няма да можете да възстановите данните си след смяна на паролата.<br />Ако не сте сигурни какво да направите, моля, свържете се с Вашия администратор преди да продължите. <br/>Наистина ли желаете да продължите?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Сървърът няма работеща интернет връзка. Това означава, че някои функции като прикачването на външни дискови устройства, уведомления за обновяване или инсталиране на външни приложения няма да работят. Достъпът на файлове отвън или изпращане на имейли за уведомление вероятно също няма да работят. Препоръчваме да включиш интернет връзката за този сървър ако искаш да използваш всички тези функции.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Хедърите за обратно прокси са невалидни, или достъпвате Nextcloud от доверено прокси. Ако не достъпвате Nextcloud от доверено прокси, то това е проблем в сигурността и може да позволи на хакер да прикрие IP адреса си в Nextcloud. Допълнителна информация може да бъде намерена в нашата <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документация</a>.", - "Allow editing" : "Позволяване на редактиране", "Hide file listing" : "Скрий показването на файлове", "Sending ..." : "Изпращане ...", "Email sent" : "Имейла е изпратен", diff --git a/core/l10n/cs_CZ.js b/core/l10n/cs_CZ.js index 67ea21fd64a..3c590e6f727 100644 --- a/core/l10n/cs_CZ.js +++ b/core/l10n/cs_CZ.js @@ -60,6 +60,7 @@ OC.L10N.register( "seconds ago" : "před pár sekundami", "Logging in …" : "Přihlašování …", "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Odkaz na obnovení hesla byl odeslán na vaši emailovou adresu. Pokud jej v krátké době neobdržíte, zkontrolujte nevyžádanou poštu a koš.<br>Pokud jej nenaleznete, kontaktujte svého správce systému.", + "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Po vyresetování vašeho hesla nebudete moc získat data zpět.<br/>Pokud si nejste jisti tím co děláte, předtím než budete pokračovat, kontaktujte vašeho administrátora.<br/>Opravdu chcete pokračovat?", "I know what I'm doing" : "Vím co dělám", "Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého správce systému.", "No" : "Ne", @@ -121,6 +122,7 @@ OC.L10N.register( "Link" : "Odkaz", "Password protect" : "Chránit heslem", "Allow upload and editing" : "Povolit nahrávání a úpravy", + "Allow editing" : "Povolit úpravy", "File drop (upload only)" : "Přetažení souboru (pouze nahrání)", "Email link to person" : "Odeslat osobě odkaz emailem", "Send" : "Odeslat", @@ -239,8 +241,8 @@ OC.L10N.register( "Need help?" : "Potřebujete pomoc?", "See the documentation" : "Shlédnout dokumentaci", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tato aplikace potřebuje pro správnou funkčnost JavaScript. Prosím {linkstart}povolte JavaScript{linkend} a znovu načtěte stránku.", - "Log out" : "Odhlásit se", "Search" : "Hledat", + "Log out" : "Odhlásit se", "This action requires you to confirm your password:" : "Tato akce vyžaduje potvrzení vašeho hesla:", "Confirm your password" : "Potvrdit heslo", "Server side authentication failed!" : "Autentizace na serveru selhala!", @@ -341,7 +343,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tento server nemá funkční připojení k Internetu. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti ownCloud, doporučujeme povolit pro tento server připojení k Internetu.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurace hlaviček reverzní proxy není správná nebo přistupujete na ownCloud z důvěryhodné proxy. Pokud nepřistupujete k ownCloud z důvěryhodné proxy, potom je toto bezpečností chyba a může útočníkovi umožnit falšovat IP adresu, kterou ownCloud vidí. Další informace lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentaci</a>.", - "Allow editing" : "Povolit úpravy", "Hide file listing" : "Skrýt seznam souborů", "Sending ..." : "Odesílám ...", "Email sent" : "Email odeslán", diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json index b1b7501e039..ef9261ac7b9 100644 --- a/core/l10n/cs_CZ.json +++ b/core/l10n/cs_CZ.json @@ -58,6 +58,7 @@ "seconds ago" : "před pár sekundami", "Logging in …" : "Přihlašování …", "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Odkaz na obnovení hesla byl odeslán na vaši emailovou adresu. Pokud jej v krátké době neobdržíte, zkontrolujte nevyžádanou poštu a koš.<br>Pokud jej nenaleznete, kontaktujte svého správce systému.", + "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Po vyresetování vašeho hesla nebudete moc získat data zpět.<br/>Pokud si nejste jisti tím co děláte, předtím než budete pokračovat, kontaktujte vašeho administrátora.<br/>Opravdu chcete pokračovat?", "I know what I'm doing" : "Vím co dělám", "Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého správce systému.", "No" : "Ne", @@ -119,6 +120,7 @@ "Link" : "Odkaz", "Password protect" : "Chránit heslem", "Allow upload and editing" : "Povolit nahrávání a úpravy", + "Allow editing" : "Povolit úpravy", "File drop (upload only)" : "Přetažení souboru (pouze nahrání)", "Email link to person" : "Odeslat osobě odkaz emailem", "Send" : "Odeslat", @@ -237,8 +239,8 @@ "Need help?" : "Potřebujete pomoc?", "See the documentation" : "Shlédnout dokumentaci", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tato aplikace potřebuje pro správnou funkčnost JavaScript. Prosím {linkstart}povolte JavaScript{linkend} a znovu načtěte stránku.", - "Log out" : "Odhlásit se", "Search" : "Hledat", + "Log out" : "Odhlásit se", "This action requires you to confirm your password:" : "Tato akce vyžaduje potvrzení vašeho hesla:", "Confirm your password" : "Potvrdit heslo", "Server side authentication failed!" : "Autentizace na serveru selhala!", @@ -339,7 +341,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tento server nemá funkční připojení k Internetu. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti ownCloud, doporučujeme povolit pro tento server připojení k Internetu.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurace hlaviček reverzní proxy není správná nebo přistupujete na ownCloud z důvěryhodné proxy. Pokud nepřistupujete k ownCloud z důvěryhodné proxy, potom je toto bezpečností chyba a může útočníkovi umožnit falšovat IP adresu, kterou ownCloud vidí. Další informace lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentaci</a>.", - "Allow editing" : "Povolit úpravy", "Hide file listing" : "Skrýt seznam souborů", "Sending ..." : "Odesílám ...", "Email sent" : "Email odeslán", diff --git a/core/l10n/da.js b/core/l10n/da.js index 8b8bfa3c9de..16740e8fc55 100644 --- a/core/l10n/da.js +++ b/core/l10n/da.js @@ -100,6 +100,7 @@ OC.L10N.register( "Share link" : "Del link", "Link" : "Link", "Password protect" : "Beskyt med adgangskode", + "Allow editing" : "Tillad redigering", "Email link to person" : "E-mail link til person", "Send" : "Send", "Shared with you and the group {group} by {owner}" : "Delt med dig og gruppen {group} af {owner}", @@ -191,8 +192,8 @@ OC.L10N.register( "Need help?" : "Brug for hjælp?", "See the documentation" : "Se dokumentationen", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikation kræver JavaScript for at fungere korrekt. {linkstart}Slå venligst JavaScript til{linkend} og genindlæs siden. ", - "Log out" : "Log ud", "Search" : "Søg", + "Log out" : "Log ud", "Server side authentication failed!" : "Server side godkendelse mislykkedes!", "Please contact your administrator." : "Kontakt venligst din administrator", "An internal error occurred." : "Der opstod en intern fejl.", @@ -280,7 +281,6 @@ OC.L10N.register( "Dec." : "Dec.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurationen af reverse proxy-headere er ikke korrekt eller du tilgår ownCloud fra en betroet proxy. Hvis du ikke tilgår ownCloud fra en betroet proxy, så er dette et sikkerhedsproblem og kan tillade en angriber af forfalske deres IP-adresse som synlig for ownCloud. Yderligere information kan findes i vores <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.", - "Allow editing" : "Tillad redigering", "Sending ..." : "Sender ...", "Email sent" : "E-mail afsendt", "Send link via email" : "Send link via e-mail", diff --git a/core/l10n/da.json b/core/l10n/da.json index c94b4019f56..b479be4e426 100644 --- a/core/l10n/da.json +++ b/core/l10n/da.json @@ -98,6 +98,7 @@ "Share link" : "Del link", "Link" : "Link", "Password protect" : "Beskyt med adgangskode", + "Allow editing" : "Tillad redigering", "Email link to person" : "E-mail link til person", "Send" : "Send", "Shared with you and the group {group} by {owner}" : "Delt med dig og gruppen {group} af {owner}", @@ -189,8 +190,8 @@ "Need help?" : "Brug for hjælp?", "See the documentation" : "Se dokumentationen", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikation kræver JavaScript for at fungere korrekt. {linkstart}Slå venligst JavaScript til{linkend} og genindlæs siden. ", - "Log out" : "Log ud", "Search" : "Søg", + "Log out" : "Log ud", "Server side authentication failed!" : "Server side godkendelse mislykkedes!", "Please contact your administrator." : "Kontakt venligst din administrator", "An internal error occurred." : "Der opstod en intern fejl.", @@ -278,7 +279,6 @@ "Dec." : "Dec.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurationen af reverse proxy-headere er ikke korrekt eller du tilgår ownCloud fra en betroet proxy. Hvis du ikke tilgår ownCloud fra en betroet proxy, så er dette et sikkerhedsproblem og kan tillade en angriber af forfalske deres IP-adresse som synlig for ownCloud. Yderligere information kan findes i vores <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.", - "Allow editing" : "Tillad redigering", "Sending ..." : "Sender ...", "Email sent" : "E-mail afsendt", "Send link via email" : "Send link via e-mail", diff --git a/core/l10n/de.js b/core/l10n/de.js index 9c558ffd2a8..3ac9e1ab061 100644 --- a/core/l10n/de.js +++ b/core/l10n/de.js @@ -122,6 +122,7 @@ OC.L10N.register( "Link" : "Link", "Password protect" : "Passwortschutz", "Allow upload and editing" : "Hochladen und Bearbeiten erlauben", + "Allow editing" : "Bearbeitung erlauben", "File drop (upload only)" : "Dateien ablegen (nur Hochladen)", "Email link to person" : "Link per E-Mail verschicken", "Send" : "Senden", @@ -240,8 +241,8 @@ OC.L10N.register( "Need help?" : "Hilfe nötig?", "See the documentation" : "Schau in die Dokumentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt JavaScript zum ordnungsgemäßen Betrieb. Bitte aktiviere {linkstart}JavaScript{linkend} und lade die Seite neu.", - "Log out" : "Abmelden", "Search" : "Suche", + "Log out" : "Abmelden", "This action requires you to confirm your password:" : "Dieser Vorgang benötigt eine Passwortbestätigung von dir:", "Confirm your password" : "Bestätige dein Passwort", "Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!", @@ -342,7 +343,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Deine Dateien sind verschlüsselt. Solltest du den Wiederherstellungsschlüssel nicht aktiviert haben, gibt es keine Möglichkeit, deine Daten zurückzuerlangen, nachdem dein Passwort zurückgesetzt wurde.<br />Falls du dir nicht sicher bist, was zu tun ist, kontaktiere bitte deinen Administrator, bevor du fortfährst<br />Möchtest du wirklich fortfahren?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn du alle Funktionen nutzen möchtest.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder du greifst auf Nextcloud über einen vertrauenswürdigen Proxy zu. Wenn du nicht über einen vertrauenswürdigen Proxy zugreifst, dann liegt ein Sicherheitsproblem vor, das es einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu findest du in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.", - "Allow editing" : "Bearbeitung erlauben", "Hide file listing" : "Dateiliste verbergen", "Sending ..." : "Senden…", "Email sent" : "E-Mail wurde verschickt", diff --git a/core/l10n/de.json b/core/l10n/de.json index 9491465ac37..be81fc7f0a2 100644 --- a/core/l10n/de.json +++ b/core/l10n/de.json @@ -120,6 +120,7 @@ "Link" : "Link", "Password protect" : "Passwortschutz", "Allow upload and editing" : "Hochladen und Bearbeiten erlauben", + "Allow editing" : "Bearbeitung erlauben", "File drop (upload only)" : "Dateien ablegen (nur Hochladen)", "Email link to person" : "Link per E-Mail verschicken", "Send" : "Senden", @@ -238,8 +239,8 @@ "Need help?" : "Hilfe nötig?", "See the documentation" : "Schau in die Dokumentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt JavaScript zum ordnungsgemäßen Betrieb. Bitte aktiviere {linkstart}JavaScript{linkend} und lade die Seite neu.", - "Log out" : "Abmelden", "Search" : "Suche", + "Log out" : "Abmelden", "This action requires you to confirm your password:" : "Dieser Vorgang benötigt eine Passwortbestätigung von dir:", "Confirm your password" : "Bestätige dein Passwort", "Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!", @@ -340,7 +341,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Deine Dateien sind verschlüsselt. Solltest du den Wiederherstellungsschlüssel nicht aktiviert haben, gibt es keine Möglichkeit, deine Daten zurückzuerlangen, nachdem dein Passwort zurückgesetzt wurde.<br />Falls du dir nicht sicher bist, was zu tun ist, kontaktiere bitte deinen Administrator, bevor du fortfährst<br />Möchtest du wirklich fortfahren?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn du alle Funktionen nutzen möchtest.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder du greifst auf Nextcloud über einen vertrauenswürdigen Proxy zu. Wenn du nicht über einen vertrauenswürdigen Proxy zugreifst, dann liegt ein Sicherheitsproblem vor, das es einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu findest du in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.", - "Allow editing" : "Bearbeitung erlauben", "Hide file listing" : "Dateiliste verbergen", "Sending ..." : "Senden…", "Email sent" : "E-Mail wurde verschickt", diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js index c73bccbf0b2..626653e7d63 100644 --- a/core/l10n/de_DE.js +++ b/core/l10n/de_DE.js @@ -122,6 +122,7 @@ OC.L10N.register( "Link" : "Link", "Password protect" : "Passwortschutz", "Allow upload and editing" : "Hochladen und Bearbeiten erlauben", + "Allow editing" : "Bearbeitung erlauben", "File drop (upload only)" : "Dateien ablegen (nur Hochladen)", "Email link to person" : "Link per E-Mail verschicken", "Send" : "Senden", @@ -240,8 +241,8 @@ OC.L10N.register( "Need help?" : "Hilfe nötig?", "See the documentation" : "Schauen Sie in die Dokumentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt zum ordnungsgemäßen Betrieb JavaScript. Bitte {linkstart}aktivieren Sie JavaScript{linkend} und laden Sie die Seite neu.", - "Log out" : "Abmelden", "Search" : "Suche", + "Log out" : "Abmelden", "This action requires you to confirm your password:" : "Dieser Vorgang benötigt eine Passwortbestätigung von Ihnen:", "Confirm your password" : "Bestätigen Sie Ihr Passwort", "Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!", @@ -342,7 +343,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Sie alle Funktionen nutzen möchten.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder Sie greifen auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn Sie auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifen, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fäschen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.", - "Allow editing" : "Bearbeitung erlauben", "Hide file listing" : "Dateiliste verbergen", "Sending ..." : "Senden…", "Email sent" : "E-Mail gesendet", diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json index 024fb770198..213f7886d71 100644 --- a/core/l10n/de_DE.json +++ b/core/l10n/de_DE.json @@ -120,6 +120,7 @@ "Link" : "Link", "Password protect" : "Passwortschutz", "Allow upload and editing" : "Hochladen und Bearbeiten erlauben", + "Allow editing" : "Bearbeitung erlauben", "File drop (upload only)" : "Dateien ablegen (nur Hochladen)", "Email link to person" : "Link per E-Mail verschicken", "Send" : "Senden", @@ -238,8 +239,8 @@ "Need help?" : "Hilfe nötig?", "See the documentation" : "Schauen Sie in die Dokumentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt zum ordnungsgemäßen Betrieb JavaScript. Bitte {linkstart}aktivieren Sie JavaScript{linkend} und laden Sie die Seite neu.", - "Log out" : "Abmelden", "Search" : "Suche", + "Log out" : "Abmelden", "This action requires you to confirm your password:" : "Dieser Vorgang benötigt eine Passwortbestätigung von Ihnen:", "Confirm your password" : "Bestätigen Sie Ihr Passwort", "Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!", @@ -340,7 +341,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Sie alle Funktionen nutzen möchten.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder Sie greifen auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn Sie auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifen, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fäschen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.", - "Allow editing" : "Bearbeitung erlauben", "Hide file listing" : "Dateiliste verbergen", "Sending ..." : "Senden…", "Email sent" : "E-Mail gesendet", diff --git a/core/l10n/el.js b/core/l10n/el.js index fe3def81035..c2eb36e3a9f 100644 --- a/core/l10n/el.js +++ b/core/l10n/el.js @@ -95,6 +95,7 @@ OC.L10N.register( "Share link" : "Διαμοιρασμός συνδέσμου", "Link" : "Σύνδεσμος", "Password protect" : "Προστασία συνθηματικού", + "Allow editing" : "Επιτρέπεται η επεξεργασία", "Email link to person" : "Αποστολή συνδέσμου με email ", "Send" : "Αποστολή", "Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}", @@ -183,8 +184,8 @@ OC.L10N.register( "Need help?" : "Θέλετε βοήθεια;", "See the documentation" : "Δείτε την τεκμηρίωση", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Αυτή η εφαρμογή απαιτεί JavaScript για σωστή λειτουργία. Παρακαλώ {linkstart} ενεργοποιήστε τη JavaScrip {linkend} και επαναφορτώστε τη σελίδα.", - "Log out" : "Αποσύνδεση", "Search" : "Αναζήτηση", + "Log out" : "Αποσύνδεση", "Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!", "Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.", "An internal error occurred." : "Παρουσιάστηκε ένα εσωτερικό σφάλμα.", @@ -274,7 +275,6 @@ OC.L10N.register( "Nov." : "Νοε.", "Dec." : "Δεκ.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του κωδικού πρόσβασής σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε στ' αλήθεια να συνεχίσετε;", - "Allow editing" : "Επιτρέπεται η επεξεργασία", "Sending ..." : "Αποστολή...", "Email sent" : "Το Email απεστάλη ", "Send link via email" : "Αποστολή συνδέσμου μέσω email", diff --git a/core/l10n/el.json b/core/l10n/el.json index b2ba470c7b0..a93bcb6e975 100644 --- a/core/l10n/el.json +++ b/core/l10n/el.json @@ -93,6 +93,7 @@ "Share link" : "Διαμοιρασμός συνδέσμου", "Link" : "Σύνδεσμος", "Password protect" : "Προστασία συνθηματικού", + "Allow editing" : "Επιτρέπεται η επεξεργασία", "Email link to person" : "Αποστολή συνδέσμου με email ", "Send" : "Αποστολή", "Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}", @@ -181,8 +182,8 @@ "Need help?" : "Θέλετε βοήθεια;", "See the documentation" : "Δείτε την τεκμηρίωση", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Αυτή η εφαρμογή απαιτεί JavaScript για σωστή λειτουργία. Παρακαλώ {linkstart} ενεργοποιήστε τη JavaScrip {linkend} και επαναφορτώστε τη σελίδα.", - "Log out" : "Αποσύνδεση", "Search" : "Αναζήτηση", + "Log out" : "Αποσύνδεση", "Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!", "Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.", "An internal error occurred." : "Παρουσιάστηκε ένα εσωτερικό σφάλμα.", @@ -272,7 +273,6 @@ "Nov." : "Νοε.", "Dec." : "Δεκ.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του κωδικού πρόσβασής σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε στ' αλήθεια να συνεχίσετε;", - "Allow editing" : "Επιτρέπεται η επεξεργασία", "Sending ..." : "Αποστολή...", "Email sent" : "Το Email απεστάλη ", "Send link via email" : "Αποστολή συνδέσμου μέσω email", diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js index a12d3a48840..d78122ce116 100644 --- a/core/l10n/en_GB.js +++ b/core/l10n/en_GB.js @@ -116,6 +116,7 @@ OC.L10N.register( "Share link" : "Share link", "Link" : "Link", "Password protect" : "Password protect", + "Allow editing" : "Allow editing", "Email link to person" : "Email link to person", "Send" : "Send", "Shared with you and the group {group} by {owner}" : "Shared with you and the group {group} by {owner}", @@ -211,8 +212,8 @@ OC.L10N.register( "Need help?" : "Need help?", "See the documentation" : "See the documentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.", - "Log out" : "Log out", "Search" : "Search", + "Log out" : "Log out", "Server side authentication failed!" : "Server side authentication failed!", "Please contact your administrator." : "Please contact your administrator.", "An internal error occurred." : "An internal error occurred.", @@ -305,7 +306,6 @@ OC.L10N.register( "Dec." : "Dec.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.", - "Allow editing" : "Allow editing", "Hide file listing" : "Hide file listing", "Sending ..." : "Sending ...", "Email sent" : "Email sent", diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json index b5cb70086ef..64f79a7e768 100644 --- a/core/l10n/en_GB.json +++ b/core/l10n/en_GB.json @@ -114,6 +114,7 @@ "Share link" : "Share link", "Link" : "Link", "Password protect" : "Password protect", + "Allow editing" : "Allow editing", "Email link to person" : "Email link to person", "Send" : "Send", "Shared with you and the group {group} by {owner}" : "Shared with you and the group {group} by {owner}", @@ -209,8 +210,8 @@ "Need help?" : "Need help?", "See the documentation" : "See the documentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.", - "Log out" : "Log out", "Search" : "Search", + "Log out" : "Log out", "Server side authentication failed!" : "Server side authentication failed!", "Please contact your administrator." : "Please contact your administrator.", "An internal error occurred." : "An internal error occurred.", @@ -303,7 +304,6 @@ "Dec." : "Dec.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.", - "Allow editing" : "Allow editing", "Hide file listing" : "Hide file listing", "Sending ..." : "Sending ...", "Email sent" : "Email sent", diff --git a/core/l10n/es.js b/core/l10n/es.js index e8b699a87d2..90a007b3658 100644 --- a/core/l10n/es.js +++ b/core/l10n/es.js @@ -121,6 +121,7 @@ OC.L10N.register( "Link" : "Enlace", "Password protect" : "Protección con contraseña", "Allow upload and editing" : "Permitir subito y edición", + "Allow editing" : "Permitir edición", "File drop (upload only)" : "Entrega de archivos (solo subida)", "Email link to person" : "Enviar enlace por correo electrónico a una persona", "Send" : "Enviar", @@ -239,8 +240,8 @@ OC.L10N.register( "Need help?" : "¿Necesita ayuda?", "See the documentation" : "Vea la documentación", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere JavaScript para operar correctamente. Por favor, {linkstart}habilite JavaScript{linkend} y recargue la página.", - "Log out" : "Salir", "Search" : "Buscar", + "Log out" : "Salir", "This action requires you to confirm your password:" : "Esta acción requiere que confirme su contraseña:", "Confirm your password" : "Confirme su contraseña", "Server side authentication failed!" : "La autenticación a fallado en el servidor.", @@ -341,7 +342,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no ha activado la clave de recuperación, no habrá manera de recuperar los datos una vez su contraseña sea restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor no tiene una conexión a Internet. Esto significa que algunas de las características como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones o instalación de aplicaciones de terceros no funcionarán. Podría no funcionar el acceso a los archivos de forma remota y el envío de correos electrónicos de notificación. Sugerimos habilitar la conexión a Internet de este servidor, si quiere tener todas las funciones.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuración de las cabeceras inversas del proxy son incorrectas, o está accediendo a ownCloud desde un proxy confiable. Si no está accediendo a ownCloud desde un proxy certificado y confiable, este es un problema de seguridad y puede permitirle a un hacker camuflar su dirección IP a ownCloud. Más información puede ser encontrada en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.", - "Allow editing" : "Permitir edición", "Hide file listing" : "Ocultar la lista de archivos.", "Sending ..." : "Enviando...", "Email sent" : "Correo electrónico enviado", diff --git a/core/l10n/es.json b/core/l10n/es.json index 3d239d2c769..bfea7c92f8f 100644 --- a/core/l10n/es.json +++ b/core/l10n/es.json @@ -119,6 +119,7 @@ "Link" : "Enlace", "Password protect" : "Protección con contraseña", "Allow upload and editing" : "Permitir subito y edición", + "Allow editing" : "Permitir edición", "File drop (upload only)" : "Entrega de archivos (solo subida)", "Email link to person" : "Enviar enlace por correo electrónico a una persona", "Send" : "Enviar", @@ -237,8 +238,8 @@ "Need help?" : "¿Necesita ayuda?", "See the documentation" : "Vea la documentación", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere JavaScript para operar correctamente. Por favor, {linkstart}habilite JavaScript{linkend} y recargue la página.", - "Log out" : "Salir", "Search" : "Buscar", + "Log out" : "Salir", "This action requires you to confirm your password:" : "Esta acción requiere que confirme su contraseña:", "Confirm your password" : "Confirme su contraseña", "Server side authentication failed!" : "La autenticación a fallado en el servidor.", @@ -339,7 +340,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no ha activado la clave de recuperación, no habrá manera de recuperar los datos una vez su contraseña sea restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor no tiene una conexión a Internet. Esto significa que algunas de las características como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones o instalación de aplicaciones de terceros no funcionarán. Podría no funcionar el acceso a los archivos de forma remota y el envío de correos electrónicos de notificación. Sugerimos habilitar la conexión a Internet de este servidor, si quiere tener todas las funciones.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuración de las cabeceras inversas del proxy son incorrectas, o está accediendo a ownCloud desde un proxy confiable. Si no está accediendo a ownCloud desde un proxy certificado y confiable, este es un problema de seguridad y puede permitirle a un hacker camuflar su dirección IP a ownCloud. Más información puede ser encontrada en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.", - "Allow editing" : "Permitir edición", "Hide file listing" : "Ocultar la lista de archivos.", "Sending ..." : "Enviando...", "Email sent" : "Correo electrónico enviado", diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js index bce3567feae..1d0653a51a3 100644 --- a/core/l10n/fi_FI.js +++ b/core/l10n/fi_FI.js @@ -110,6 +110,7 @@ OC.L10N.register( "Link" : "Linkki", "Password protect" : "Suojaa salasanalla", "Allow upload and editing" : "Salli lähetys ja muokkaus", + "Allow editing" : "Salli muokkaus", "Email link to person" : "Lähetä linkki sähköpostitse", "Send" : "Lähetä", "Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjän {owner} toimesta", @@ -210,8 +211,8 @@ OC.L10N.register( "Need help?" : "Tarvitsetko apua?", "See the documentation" : "Tutustu dokumentaatioon", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tämä sovellus vaatii toimiakseen JavaScript-tuen. {linkstart}Ota JavaScript käyttöön{linkend} ja päivitä sivu.", - "Log out" : "Kirjaudu ulos", "Search" : "Etsi", + "Log out" : "Kirjaudu ulos", "Server side authentication failed!" : "Palvelimen puoleinen tunnistautuminen epäonnistui!", "Please contact your administrator." : "Ota yhteys ylläpitäjään.", "An internal error occurred." : "Tapahtui sisäinen virhe", @@ -309,7 +310,6 @@ OC.L10N.register( "Dec." : "Joulu", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tällä palvelimella ei ole toimivaa internetyhteyttä. Sen seurauksena jotkin ominaisuudet, kuten erillinen tallennustila, ilmoitukset päivityksistä ja kolmansien osapuolten sovellusten asennus eivät toimi. Tiedostojen käyttö etänä tai ilmoitusten lähetys sähköpostitse eivät välttämättä toimi myöskään. Suosittelemme kytkemään palvelimen internetyhteyteen, jos haluat käyttää kaikkia ominaisuuksia.", - "Allow editing" : "Salli muokkaus", "Hide file listing" : "Piilota tiedostolistaus", "Sending ..." : "Lähetetään...", "Email sent" : "Sähköposti lähetetty", diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json index 205eb023c05..da11bc2635d 100644 --- a/core/l10n/fi_FI.json +++ b/core/l10n/fi_FI.json @@ -108,6 +108,7 @@ "Link" : "Linkki", "Password protect" : "Suojaa salasanalla", "Allow upload and editing" : "Salli lähetys ja muokkaus", + "Allow editing" : "Salli muokkaus", "Email link to person" : "Lähetä linkki sähköpostitse", "Send" : "Lähetä", "Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjän {owner} toimesta", @@ -208,8 +209,8 @@ "Need help?" : "Tarvitsetko apua?", "See the documentation" : "Tutustu dokumentaatioon", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tämä sovellus vaatii toimiakseen JavaScript-tuen. {linkstart}Ota JavaScript käyttöön{linkend} ja päivitä sivu.", - "Log out" : "Kirjaudu ulos", "Search" : "Etsi", + "Log out" : "Kirjaudu ulos", "Server side authentication failed!" : "Palvelimen puoleinen tunnistautuminen epäonnistui!", "Please contact your administrator." : "Ota yhteys ylläpitäjään.", "An internal error occurred." : "Tapahtui sisäinen virhe", @@ -307,7 +308,6 @@ "Dec." : "Joulu", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tällä palvelimella ei ole toimivaa internetyhteyttä. Sen seurauksena jotkin ominaisuudet, kuten erillinen tallennustila, ilmoitukset päivityksistä ja kolmansien osapuolten sovellusten asennus eivät toimi. Tiedostojen käyttö etänä tai ilmoitusten lähetys sähköpostitse eivät välttämättä toimi myöskään. Suosittelemme kytkemään palvelimen internetyhteyteen, jos haluat käyttää kaikkia ominaisuuksia.", - "Allow editing" : "Salli muokkaus", "Hide file listing" : "Piilota tiedostolistaus", "Sending ..." : "Lähetetään...", "Email sent" : "Sähköposti lähetetty", diff --git a/core/l10n/fr.js b/core/l10n/fr.js index 660cedc31a0..90e99370f2e 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -122,6 +122,7 @@ OC.L10N.register( "Link" : "Lien", "Password protect" : "Protéger par un mot de passe", "Allow upload and editing" : "Autoriser l'envoi et l'édition", + "Allow editing" : "Permettre la modification", "File drop (upload only)" : "Dépôt de fichier (téléversement uniquement)", "Email link to person" : "Envoyer le lien par courriel", "Send" : "Envoyer", @@ -240,8 +241,8 @@ OC.L10N.register( "Need help?" : "Besoin d'aide ?", "See the documentation" : "Lire la documentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Cette application requiert JavaScript pour fonctionner correctement. Veuillez {linkstart}activer JavaScript{linkend} et recharger la page.", - "Log out" : "Se déconnecter", "Search" : "Rechercher", + "Log out" : "Se déconnecter", "This action requires you to confirm your password:" : "Cette action nécessite que vous confirmiez votre mot de passe :", "Confirm your password" : "Confirmer votre mot de passe", "Server side authentication failed!" : "L'authentification sur le serveur a échoué !", @@ -342,7 +343,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clé de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par courriel peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuration des entêtes du proxy inverse est incorrecte, ou vous accédez à ownCloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à ownCloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant de masquer sa véritable adresse IP. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.", - "Allow editing" : "Permettre la modification", "Hide file listing" : "Cacher la liste des fichiers", "Sending ..." : "Envoi…", "Email sent" : "Courriel envoyé", diff --git a/core/l10n/fr.json b/core/l10n/fr.json index e99e1adc9ad..df5e24efb1d 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -120,6 +120,7 @@ "Link" : "Lien", "Password protect" : "Protéger par un mot de passe", "Allow upload and editing" : "Autoriser l'envoi et l'édition", + "Allow editing" : "Permettre la modification", "File drop (upload only)" : "Dépôt de fichier (téléversement uniquement)", "Email link to person" : "Envoyer le lien par courriel", "Send" : "Envoyer", @@ -238,8 +239,8 @@ "Need help?" : "Besoin d'aide ?", "See the documentation" : "Lire la documentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Cette application requiert JavaScript pour fonctionner correctement. Veuillez {linkstart}activer JavaScript{linkend} et recharger la page.", - "Log out" : "Se déconnecter", "Search" : "Rechercher", + "Log out" : "Se déconnecter", "This action requires you to confirm your password:" : "Cette action nécessite que vous confirmiez votre mot de passe :", "Confirm your password" : "Confirmer votre mot de passe", "Server side authentication failed!" : "L'authentification sur le serveur a échoué !", @@ -340,7 +341,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clé de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par courriel peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuration des entêtes du proxy inverse est incorrecte, ou vous accédez à ownCloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à ownCloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant de masquer sa véritable adresse IP. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.", - "Allow editing" : "Permettre la modification", "Hide file listing" : "Cacher la liste des fichiers", "Sending ..." : "Envoi…", "Email sent" : "Courriel envoyé", diff --git a/core/l10n/he.js b/core/l10n/he.js index dc544b6eece..8212568973e 100644 --- a/core/l10n/he.js +++ b/core/l10n/he.js @@ -103,6 +103,7 @@ OC.L10N.register( "Share link" : "קישור לשיתוף", "Link" : "קישור", "Password protect" : "הגנה בססמה", + "Allow editing" : "אישור עריכה", "Email link to person" : "שליחת קישור בדוא״ל למשתמש", "Send" : "שליחה", "Shared with you and the group {group} by {owner}" : "שותף אתך ועם הקבוצה {group} שבבעלות {owner}", @@ -196,8 +197,8 @@ OC.L10N.register( "Need help?" : "עזרה נזקקת?", "See the documentation" : "יש לצפות במסמכי התיעוד", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "יישום זה דורש JavaScript לפעולה נכונה. יש {linkstart}לאפשר JavaScript{linkend} ולטעון את העמוד מחדש.", - "Log out" : "התנתקות", "Search" : "חיפוש", + "Log out" : "התנתקות", "Server side authentication failed!" : "אימות לצד שרת נכשל!", "Please contact your administrator." : "יש ליצור קשר עם המנהל.", "An internal error occurred." : "אירעה שגיאה פנימית.", @@ -290,7 +291,6 @@ OC.L10N.register( "Dec." : "דצמ׳", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "הקבצים שלך מוצפנים. אם לא הפעלת את מפתח השחזור, לא תהיה דרך לקבל את המידע מחדש אחרי שהסיסמא תאופס.<br />אם אין לך מושג מה לעשות what to do, מוטב לפנות למנהל שלך לפני ההמשך. <br />האם באמת ברצונך להמשיך?", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "תצורת כותרות פרוקסי ההפוכה אינה נכונה, או שהגישה ל- ownCloud מתבצעת מ- proxy אמין. אם הגישה ל- ownCloud אינה מ- proxy אמין, מדובר בבעיית אבטחה שמאפשרת לתוקף לזייף את כתובת ה- IP כגלויה ל- ownCloud. מידע נוסף ניתן למצוא ב- <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">מסמכי התיעוד</a> שלנו.", - "Allow editing" : "אישור עריכה", "Sending ..." : "מתבצעת שליחה ...", "Email sent" : "הודעת הדוא״ל נשלחה", "Send link via email" : "שליחת קישור באמצעות דואר אלקטרוני", diff --git a/core/l10n/he.json b/core/l10n/he.json index aa562c78360..60e70973ebe 100644 --- a/core/l10n/he.json +++ b/core/l10n/he.json @@ -101,6 +101,7 @@ "Share link" : "קישור לשיתוף", "Link" : "קישור", "Password protect" : "הגנה בססמה", + "Allow editing" : "אישור עריכה", "Email link to person" : "שליחת קישור בדוא״ל למשתמש", "Send" : "שליחה", "Shared with you and the group {group} by {owner}" : "שותף אתך ועם הקבוצה {group} שבבעלות {owner}", @@ -194,8 +195,8 @@ "Need help?" : "עזרה נזקקת?", "See the documentation" : "יש לצפות במסמכי התיעוד", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "יישום זה דורש JavaScript לפעולה נכונה. יש {linkstart}לאפשר JavaScript{linkend} ולטעון את העמוד מחדש.", - "Log out" : "התנתקות", "Search" : "חיפוש", + "Log out" : "התנתקות", "Server side authentication failed!" : "אימות לצד שרת נכשל!", "Please contact your administrator." : "יש ליצור קשר עם המנהל.", "An internal error occurred." : "אירעה שגיאה פנימית.", @@ -288,7 +289,6 @@ "Dec." : "דצמ׳", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "הקבצים שלך מוצפנים. אם לא הפעלת את מפתח השחזור, לא תהיה דרך לקבל את המידע מחדש אחרי שהסיסמא תאופס.<br />אם אין לך מושג מה לעשות what to do, מוטב לפנות למנהל שלך לפני ההמשך. <br />האם באמת ברצונך להמשיך?", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "תצורת כותרות פרוקסי ההפוכה אינה נכונה, או שהגישה ל- ownCloud מתבצעת מ- proxy אמין. אם הגישה ל- ownCloud אינה מ- proxy אמין, מדובר בבעיית אבטחה שמאפשרת לתוקף לזייף את כתובת ה- IP כגלויה ל- ownCloud. מידע נוסף ניתן למצוא ב- <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">מסמכי התיעוד</a> שלנו.", - "Allow editing" : "אישור עריכה", "Sending ..." : "מתבצעת שליחה ...", "Email sent" : "הודעת הדוא״ל נשלחה", "Send link via email" : "שליחת קישור באמצעות דואר אלקטרוני", diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js index a3b04dc33e3..5a8251eb0bb 100644 --- a/core/l10n/hu_HU.js +++ b/core/l10n/hu_HU.js @@ -121,6 +121,7 @@ OC.L10N.register( "Link" : "Hivatkozás", "Password protect" : "Jelszóval védett", "Allow upload and editing" : "Feltöltés és szerkesztés engedélyezése", + "Allow editing" : "Szerkesztés engedélyezése", "File drop (upload only)" : "Fájl ejtés (csak feltöltés)", "Email link to person" : "Hivatkozás elküldése e-mail címre", "Send" : "Küldés", @@ -239,8 +240,8 @@ OC.L10N.register( "Need help?" : "Segítségre van szüksége?", "See the documentation" : "Nézze meg a dokumentációt", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Az alkalmazás megfelelő működéséhez JavaScript szükséges. Kérjük, {linkstart}engedélyezze a JavaScript-et{linkend} és frissítse a lapot.", - "Log out" : "Kijelentkezés", "Search" : "Keresés", + "Log out" : "Kijelentkezés", "This action requires you to confirm your password:" : "A művelethez szükség van a jelszavad megerősítésére:", "Confirm your password" : "Erősítsd meg a jelszavad:", "Server side authentication failed!" : "A szerveroldali hitelesítés sikertelen!", @@ -341,7 +342,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Az Ön fájljai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne.<br />Biztos, hogy folytatni kívánja?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ennek a szervernek nincs működő internet kapcsolata. Ez azt jelenti, hogy néhány funkció, mint pl. külső tárolók csatolása, frissítési értesítések, vagy a harmadik féltől származó alkalmazások telepítése nem fog működni. A fájlok távoli elérése és az e-mail értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden funkciót használni szeretnél.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A fordított proxy fejlécek konfigurációs beállításai helytelenek, vagy egy megbízható proxy-ból próbálja az ownCloud-ot elérni. Ha nem megbízható proxy-ból próbálja elérni az ownCloud-ot, akkor ez egy biztonsági probléma, a támadó az ownCloud számára látható IP cím csalást tud végrehajtani. Bővebb információt a <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentációban</a> találhat.", - "Allow editing" : "Szerkesztés engedélyezése", "Hide file listing" : "Fájl lista elrejtése", "Sending ..." : "Küldés ...", "Email sent" : "Az e-mailt elküldtük!", diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json index 81458973e3d..a3c1cab9276 100644 --- a/core/l10n/hu_HU.json +++ b/core/l10n/hu_HU.json @@ -119,6 +119,7 @@ "Link" : "Hivatkozás", "Password protect" : "Jelszóval védett", "Allow upload and editing" : "Feltöltés és szerkesztés engedélyezése", + "Allow editing" : "Szerkesztés engedélyezése", "File drop (upload only)" : "Fájl ejtés (csak feltöltés)", "Email link to person" : "Hivatkozás elküldése e-mail címre", "Send" : "Küldés", @@ -237,8 +238,8 @@ "Need help?" : "Segítségre van szüksége?", "See the documentation" : "Nézze meg a dokumentációt", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Az alkalmazás megfelelő működéséhez JavaScript szükséges. Kérjük, {linkstart}engedélyezze a JavaScript-et{linkend} és frissítse a lapot.", - "Log out" : "Kijelentkezés", "Search" : "Keresés", + "Log out" : "Kijelentkezés", "This action requires you to confirm your password:" : "A művelethez szükség van a jelszavad megerősítésére:", "Confirm your password" : "Erősítsd meg a jelszavad:", "Server side authentication failed!" : "A szerveroldali hitelesítés sikertelen!", @@ -339,7 +340,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Az Ön fájljai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne.<br />Biztos, hogy folytatni kívánja?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ennek a szervernek nincs működő internet kapcsolata. Ez azt jelenti, hogy néhány funkció, mint pl. külső tárolók csatolása, frissítési értesítések, vagy a harmadik féltől származó alkalmazások telepítése nem fog működni. A fájlok távoli elérése és az e-mail értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden funkciót használni szeretnél.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A fordított proxy fejlécek konfigurációs beállításai helytelenek, vagy egy megbízható proxy-ból próbálja az ownCloud-ot elérni. Ha nem megbízható proxy-ból próbálja elérni az ownCloud-ot, akkor ez egy biztonsági probléma, a támadó az ownCloud számára látható IP cím csalást tud végrehajtani. Bővebb információt a <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentációban</a> találhat.", - "Allow editing" : "Szerkesztés engedélyezése", "Hide file listing" : "Fájl lista elrejtése", "Sending ..." : "Küldés ...", "Email sent" : "Az e-mailt elküldtük!", diff --git a/core/l10n/id.js b/core/l10n/id.js index 1f8d96e4001..2ed3768d6a4 100644 --- a/core/l10n/id.js +++ b/core/l10n/id.js @@ -121,6 +121,7 @@ OC.L10N.register( "Link" : "Tautan", "Password protect" : "Lindungi dengan sandi", "Allow upload and editing" : "Izinkan pengunggahan dan penyuntingan", + "Allow editing" : "Izinkan penyuntingan", "Email link to person" : "Emailkan tautan ini ke orang", "Send" : "Kirim", "Shared with you and the group {group} by {owner}" : "Dibagikan dengan anda dan grup {group} oleh {owner}", @@ -219,8 +220,8 @@ OC.L10N.register( "Need help?" : "Butuh bantuan?", "See the documentation" : "Lihat dokumentasi", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aplikasi ini memerlukan JavaScript untuk dapat beroperasi dengan benar. Mohon {linkstart}aktifkan JavaScript{linkend} dan muat ulang halaman ini.", - "Log out" : "Keluar", "Search" : "Cari", + "Log out" : "Keluar", "Server side authentication failed!" : "Otentikasi dari sisi server gagal!", "Please contact your administrator." : "Silahkan hubungi administrator anda.", "An internal error occurred." : "Terjadi kesalahan internal.", @@ -314,7 +315,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Server ini tidak tersambung ke internet. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses ownCloud dari proxy terpercaya. Apabila Anda tidak mengakses ownCloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke ownCloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.", - "Allow editing" : "Izinkan penyuntingan", "Hide file listing" : "Sembunyikan pendaftaran berkas", "Sending ..." : "Mengirim ...", "Email sent" : "Email terkirim", diff --git a/core/l10n/id.json b/core/l10n/id.json index 8ca0ea8a28d..dd562e7d9b1 100644 --- a/core/l10n/id.json +++ b/core/l10n/id.json @@ -119,6 +119,7 @@ "Link" : "Tautan", "Password protect" : "Lindungi dengan sandi", "Allow upload and editing" : "Izinkan pengunggahan dan penyuntingan", + "Allow editing" : "Izinkan penyuntingan", "Email link to person" : "Emailkan tautan ini ke orang", "Send" : "Kirim", "Shared with you and the group {group} by {owner}" : "Dibagikan dengan anda dan grup {group} oleh {owner}", @@ -217,8 +218,8 @@ "Need help?" : "Butuh bantuan?", "See the documentation" : "Lihat dokumentasi", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aplikasi ini memerlukan JavaScript untuk dapat beroperasi dengan benar. Mohon {linkstart}aktifkan JavaScript{linkend} dan muat ulang halaman ini.", - "Log out" : "Keluar", "Search" : "Cari", + "Log out" : "Keluar", "Server side authentication failed!" : "Otentikasi dari sisi server gagal!", "Please contact your administrator." : "Silahkan hubungi administrator anda.", "An internal error occurred." : "Terjadi kesalahan internal.", @@ -312,7 +313,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Server ini tidak tersambung ke internet. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses ownCloud dari proxy terpercaya. Apabila Anda tidak mengakses ownCloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke ownCloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.", - "Allow editing" : "Izinkan penyuntingan", "Hide file listing" : "Sembunyikan pendaftaran berkas", "Sending ..." : "Mengirim ...", "Email sent" : "Email terkirim", diff --git a/core/l10n/is.js b/core/l10n/is.js index 1c20ea4faa6..ac8414d4cf8 100644 --- a/core/l10n/is.js +++ b/core/l10n/is.js @@ -109,6 +109,7 @@ OC.L10N.register( "Link" : "Tengill", "Password protect" : "Verja með lykilorði", "Allow upload and editing" : "Leyfa innsendingu og breytingar", + "Allow editing" : "Leyfa breytingar", "Email link to person" : "Senda veftengil í tölvupósti til notanda", "Send" : "Senda", "Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}", @@ -207,8 +208,8 @@ OC.L10N.register( "Need help?" : "Þarftu hjálp?", "See the documentation" : "Sjá hjálparskjölin", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Þetta forrit krefst JavaScript fyrir rétta virkni. {linkstart} virkjaðu JavaScript {linkend} og endurlestu síðan síðuna.", - "Log out" : "Skrá út", "Search" : "Leita", + "Log out" : "Skrá út", "Server side authentication failed!" : "Auðkenning af hálfu þjóns tókst ekki!", "Please contact your administrator." : "Hafðu samband við kerfisstjóra.", "An internal error occurred." : "Innri villa kom upp.", @@ -307,7 +308,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Skrárnar þínar eru dulritaðar. Ef þú hefur ekki virkjað endurheimtingarlykilinn, þá verður engin leið til að fá gögnin þín til baka eftir lykilorðið þitt er endurstillt.<br />Ef þú ert ekki viss hvað eigi að gera, skaltu hafa samband við kerfisstjórann áður en þú heldur áfram. <br />Viltu halda áfram?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Þessi þjónn er ekki með virka nettengingu. Þetta þýðir að sumir eiginleikar eins og að virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á forritum þriðja aðila, mun ekki virka. Fjartengdur aðgangur að skrám og sending tilkynninga í tölvupósti virka líklega ekki heldur. Við leggjum til að internettenging sé virkjuð fyrir þennan vefþjón ef þú vilt hafa alla eiginleika tiltæka.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Uppsetning gagnstæðs milliþjónshauss (reverse proxy header) er röng, eða að þú ert að tengjast Nextcloud frá treystum milliþjóni. Ef þú ert ekki að tengjast Nextcloud frá treystum milliþjóni, þá er þetta er öryggisvandamál og getur leyft árásaraðilum að dulbúa IP-vistfang þeirra sem sýnilegt Nextcloud. Nánari upplýsingar má finna í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.", - "Allow editing" : "Leyfa breytingar", "Hide file listing" : "Fela skráalista", "Sending ..." : "Sendi ...", "Email sent" : "Tölvupóstur sendur", diff --git a/core/l10n/is.json b/core/l10n/is.json index c4b579cd2bd..a389453cfc7 100644 --- a/core/l10n/is.json +++ b/core/l10n/is.json @@ -107,6 +107,7 @@ "Link" : "Tengill", "Password protect" : "Verja með lykilorði", "Allow upload and editing" : "Leyfa innsendingu og breytingar", + "Allow editing" : "Leyfa breytingar", "Email link to person" : "Senda veftengil í tölvupósti til notanda", "Send" : "Senda", "Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}", @@ -205,8 +206,8 @@ "Need help?" : "Þarftu hjálp?", "See the documentation" : "Sjá hjálparskjölin", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Þetta forrit krefst JavaScript fyrir rétta virkni. {linkstart} virkjaðu JavaScript {linkend} og endurlestu síðan síðuna.", - "Log out" : "Skrá út", "Search" : "Leita", + "Log out" : "Skrá út", "Server side authentication failed!" : "Auðkenning af hálfu þjóns tókst ekki!", "Please contact your administrator." : "Hafðu samband við kerfisstjóra.", "An internal error occurred." : "Innri villa kom upp.", @@ -305,7 +306,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Skrárnar þínar eru dulritaðar. Ef þú hefur ekki virkjað endurheimtingarlykilinn, þá verður engin leið til að fá gögnin þín til baka eftir lykilorðið þitt er endurstillt.<br />Ef þú ert ekki viss hvað eigi að gera, skaltu hafa samband við kerfisstjórann áður en þú heldur áfram. <br />Viltu halda áfram?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Þessi þjónn er ekki með virka nettengingu. Þetta þýðir að sumir eiginleikar eins og að virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á forritum þriðja aðila, mun ekki virka. Fjartengdur aðgangur að skrám og sending tilkynninga í tölvupósti virka líklega ekki heldur. Við leggjum til að internettenging sé virkjuð fyrir þennan vefþjón ef þú vilt hafa alla eiginleika tiltæka.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Uppsetning gagnstæðs milliþjónshauss (reverse proxy header) er röng, eða að þú ert að tengjast Nextcloud frá treystum milliþjóni. Ef þú ert ekki að tengjast Nextcloud frá treystum milliþjóni, þá er þetta er öryggisvandamál og getur leyft árásaraðilum að dulbúa IP-vistfang þeirra sem sýnilegt Nextcloud. Nánari upplýsingar má finna í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.", - "Allow editing" : "Leyfa breytingar", "Hide file listing" : "Fela skráalista", "Sending ..." : "Sendi ...", "Email sent" : "Tölvupóstur sendur", diff --git a/core/l10n/it.js b/core/l10n/it.js index 1e8630be362..27555092526 100644 --- a/core/l10n/it.js +++ b/core/l10n/it.js @@ -121,6 +121,7 @@ OC.L10N.register( "Link" : "Collegamento", "Password protect" : "Proteggi con password", "Allow upload and editing" : "Consenti il caricamento e la modifica", + "Allow editing" : "Consenti la modifica", "File drop (upload only)" : "Rilascia file (solo caricamento)", "Email link to person" : "Invia collegamento via email", "Send" : "Invia", @@ -239,8 +240,8 @@ OC.L10N.register( "Need help?" : "Ti serve aiuto?", "See the documentation" : "Leggi la documentazione", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Questa applicazione richiede JavaScript per un corretto funzionamento. {linkstart}Abilita JavaScript{linkend} e ricarica la pagina.", - "Log out" : "Esci", "Search" : "Cerca", + "Log out" : "Esci", "This action requires you to confirm your password:" : "Questa azione richiede la conferma della tua password:", "Confirm your password" : "Conferma la tua password", "Server side authentication failed!" : "Autenticazione lato server non riuscita!", @@ -341,7 +342,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di ripristino, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Questo server non ha una connessione a Internet funzionante. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a ownCloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendolo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</a>.", - "Allow editing" : "Consenti la modifica", "Hide file listing" : "Nascondi elenco dei file", "Sending ..." : "Invio in corso...", "Email sent" : "Messaggio inviato", diff --git a/core/l10n/it.json b/core/l10n/it.json index a2269c3dea2..a5424c326c6 100644 --- a/core/l10n/it.json +++ b/core/l10n/it.json @@ -119,6 +119,7 @@ "Link" : "Collegamento", "Password protect" : "Proteggi con password", "Allow upload and editing" : "Consenti il caricamento e la modifica", + "Allow editing" : "Consenti la modifica", "File drop (upload only)" : "Rilascia file (solo caricamento)", "Email link to person" : "Invia collegamento via email", "Send" : "Invia", @@ -237,8 +238,8 @@ "Need help?" : "Ti serve aiuto?", "See the documentation" : "Leggi la documentazione", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Questa applicazione richiede JavaScript per un corretto funzionamento. {linkstart}Abilita JavaScript{linkend} e ricarica la pagina.", - "Log out" : "Esci", "Search" : "Cerca", + "Log out" : "Esci", "This action requires you to confirm your password:" : "Questa azione richiede la conferma della tua password:", "Confirm your password" : "Conferma la tua password", "Server side authentication failed!" : "Autenticazione lato server non riuscita!", @@ -339,7 +340,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di ripristino, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Questo server non ha una connessione a Internet funzionante. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a ownCloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendolo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</a>.", - "Allow editing" : "Consenti la modifica", "Hide file listing" : "Nascondi elenco dei file", "Sending ..." : "Invio in corso...", "Email sent" : "Messaggio inviato", diff --git a/core/l10n/ja.js b/core/l10n/ja.js index c27c4f1c2ff..8b411db8077 100644 --- a/core/l10n/ja.js +++ b/core/l10n/ja.js @@ -60,6 +60,7 @@ OC.L10N.register( "seconds ago" : "数秒前", "Logging in …" : "ログイン中...", "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "パスワードをリセットするリンクをクリックしたので、メールを送信しました。しばらくたってもメールが届かなかった場合は、スパム/ジャンクフォルダーを確認してください。<br>それでも見つからなかった場合は、管理者に問合わせてください。", + "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。パスワードをリセットした場合、データを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に問い合わせてください。<br />続けてよろしいでしょうか?", "I know what I'm doing" : "どういう操作をしているか理解しています", "Password can not be changed. Please contact your administrator." : "パスワードは変更できません。管理者に問い合わせてください。", "No" : "いいえ", @@ -121,6 +122,7 @@ OC.L10N.register( "Link" : "リンク", "Password protect" : "パスワード保護を有効化", "Allow upload and editing" : "アップロードと編集を許可する", + "Allow editing" : "編集を許可", "File drop (upload only)" : "ファイルドロップ(アップロードのみ)", "Email link to person" : "メールリンク", "Send" : "送信", @@ -239,8 +241,8 @@ OC.L10N.register( "Need help?" : "ヘルプが必要ですか?", "See the documentation" : "ドキュメントを確認してください", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "このアプリケーションの動作にはJavaScriptが必要です。\n {linkstart}JavaScriptを有効にし{linkend} 、ページを更新してください。 ", - "Log out" : "ログアウト", "Search" : "検索", + "Log out" : "ログアウト", "This action requires you to confirm your password:" : "この操作では、パスワードを確認する必要があります:", "Confirm your password" : "パスワードを確認", "Server side authentication failed!" : "サーバーサイドの認証に失敗しました!", @@ -341,7 +343,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に問い合わせてください。<br />続けてよろしいでしょうか?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティ製のアプリ、といった一部の機能が利用できません。また、リモート接続でのファイルアクセス、通知メールの送信のような機能も利用できないことがあります。すべての機能を利用するには、このサーバーのインターネット接続を有効にすることをお勧めします。", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "リバースプロキシのヘッダー設定が間違っているか、または信頼されたプロキシからownCloudにアクセスしていません。もし、信頼されたプロキシからアクセスされているのでないなら、攻撃者の詐称されたIPアドレスから ownCloudを見ることができるように許可されていて、セキュリティに問題があります。詳細な情報は、 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ドキュメント</a>を確認してください。", - "Allow editing" : "編集を許可", "Hide file listing" : "ファイルリストを隠す", "Sending ..." : "送信中...", "Email sent" : "メールを送信しました", diff --git a/core/l10n/ja.json b/core/l10n/ja.json index f43227e85b4..03bfcd2173e 100644 --- a/core/l10n/ja.json +++ b/core/l10n/ja.json @@ -58,6 +58,7 @@ "seconds ago" : "数秒前", "Logging in …" : "ログイン中...", "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "パスワードをリセットするリンクをクリックしたので、メールを送信しました。しばらくたってもメールが届かなかった場合は、スパム/ジャンクフォルダーを確認してください。<br>それでも見つからなかった場合は、管理者に問合わせてください。", + "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。パスワードをリセットした場合、データを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に問い合わせてください。<br />続けてよろしいでしょうか?", "I know what I'm doing" : "どういう操作をしているか理解しています", "Password can not be changed. Please contact your administrator." : "パスワードは変更できません。管理者に問い合わせてください。", "No" : "いいえ", @@ -119,6 +120,7 @@ "Link" : "リンク", "Password protect" : "パスワード保護を有効化", "Allow upload and editing" : "アップロードと編集を許可する", + "Allow editing" : "編集を許可", "File drop (upload only)" : "ファイルドロップ(アップロードのみ)", "Email link to person" : "メールリンク", "Send" : "送信", @@ -237,8 +239,8 @@ "Need help?" : "ヘルプが必要ですか?", "See the documentation" : "ドキュメントを確認してください", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "このアプリケーションの動作にはJavaScriptが必要です。\n {linkstart}JavaScriptを有効にし{linkend} 、ページを更新してください。 ", - "Log out" : "ログアウト", "Search" : "検索", + "Log out" : "ログアウト", "This action requires you to confirm your password:" : "この操作では、パスワードを確認する必要があります:", "Confirm your password" : "パスワードを確認", "Server side authentication failed!" : "サーバーサイドの認証に失敗しました!", @@ -339,7 +341,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に問い合わせてください。<br />続けてよろしいでしょうか?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティ製のアプリ、といった一部の機能が利用できません。また、リモート接続でのファイルアクセス、通知メールの送信のような機能も利用できないことがあります。すべての機能を利用するには、このサーバーのインターネット接続を有効にすることをお勧めします。", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "リバースプロキシのヘッダー設定が間違っているか、または信頼されたプロキシからownCloudにアクセスしていません。もし、信頼されたプロキシからアクセスされているのでないなら、攻撃者の詐称されたIPアドレスから ownCloudを見ることができるように許可されていて、セキュリティに問題があります。詳細な情報は、 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ドキュメント</a>を確認してください。", - "Allow editing" : "編集を許可", "Hide file listing" : "ファイルリストを隠す", "Sending ..." : "送信中...", "Email sent" : "メールを送信しました", diff --git a/core/l10n/ko.js b/core/l10n/ko.js index 446672597f0..11ec45f71a9 100644 --- a/core/l10n/ko.js +++ b/core/l10n/ko.js @@ -119,6 +119,7 @@ OC.L10N.register( "Link" : "링크", "Password protect" : "암호 보호", "Allow upload and editing" : "업로드 및 편집 허용", + "Allow editing" : "편집 허용", "Email link to person" : "이메일 주소", "Send" : "전송", "Shared with you and the group {group} by {owner}" : "{owner} 님이 여러분 및 그룹 {group}와(과) 공유 중", @@ -220,8 +221,8 @@ OC.L10N.register( "Need help?" : "도움이 필요한가요?", "See the documentation" : "문서 보기", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "이 프로그램이 올바르게 작동하려면 JavaScript가 필요합니다. {linkstart}JavaScript를 활성화{linkend}한 다음 페이지를 새로 고치십시오.", - "Log out" : "로그아웃", "Search" : "검색", + "Log out" : "로그아웃", "This action requires you to confirm your password:" : "이 작업을 수행하려면 암호를 입력해야 합니다:", "Confirm your password" : "암호를 입력하십시오", "Server side authentication failed!" : "서버 인증 실패!", @@ -322,7 +323,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "파일이 암호화되어 있습니다. 복구 키를 활성화하지 않았다면 암호를 초기화한 후 데이터를 복구할 수 없습니다.<br />무엇을 해야 할 지 잘 모르겠으면 계속하기 전에 관리자에게 연락하십시오.<br />그래도 계속 진행하시겠습니까?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "서버에서 인터넷 연결을 사용할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "역방향 프록시 헤더 설정이 올바르지 않거나 Trusted Proxy를 통해 ownCloud에 접근하고 있을 수 있습니다. 만약 ownCloud를 Trusted Proxy를 통해 접근하고 있지 않다면 이는 보안 문제이며 공격자가 IP 주소를 속이고 있을 수 있습니다. 자세한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">사용 설명서</a>를 참고하십시오.", - "Allow editing" : "편집 허용", "Hide file listing" : "숨김 파일 목록", "Sending ..." : "전송 중...", "Email sent" : "이메일 발송됨", diff --git a/core/l10n/ko.json b/core/l10n/ko.json index 8341f8a846a..c36e174afb3 100644 --- a/core/l10n/ko.json +++ b/core/l10n/ko.json @@ -117,6 +117,7 @@ "Link" : "링크", "Password protect" : "암호 보호", "Allow upload and editing" : "업로드 및 편집 허용", + "Allow editing" : "편집 허용", "Email link to person" : "이메일 주소", "Send" : "전송", "Shared with you and the group {group} by {owner}" : "{owner} 님이 여러분 및 그룹 {group}와(과) 공유 중", @@ -218,8 +219,8 @@ "Need help?" : "도움이 필요한가요?", "See the documentation" : "문서 보기", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "이 프로그램이 올바르게 작동하려면 JavaScript가 필요합니다. {linkstart}JavaScript를 활성화{linkend}한 다음 페이지를 새로 고치십시오.", - "Log out" : "로그아웃", "Search" : "검색", + "Log out" : "로그아웃", "This action requires you to confirm your password:" : "이 작업을 수행하려면 암호를 입력해야 합니다:", "Confirm your password" : "암호를 입력하십시오", "Server side authentication failed!" : "서버 인증 실패!", @@ -320,7 +321,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "파일이 암호화되어 있습니다. 복구 키를 활성화하지 않았다면 암호를 초기화한 후 데이터를 복구할 수 없습니다.<br />무엇을 해야 할 지 잘 모르겠으면 계속하기 전에 관리자에게 연락하십시오.<br />그래도 계속 진행하시겠습니까?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "서버에서 인터넷 연결을 사용할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "역방향 프록시 헤더 설정이 올바르지 않거나 Trusted Proxy를 통해 ownCloud에 접근하고 있을 수 있습니다. 만약 ownCloud를 Trusted Proxy를 통해 접근하고 있지 않다면 이는 보안 문제이며 공격자가 IP 주소를 속이고 있을 수 있습니다. 자세한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">사용 설명서</a>를 참고하십시오.", - "Allow editing" : "편집 허용", "Hide file listing" : "숨김 파일 목록", "Sending ..." : "전송 중...", "Email sent" : "이메일 발송됨", diff --git a/core/l10n/nb_NO.js b/core/l10n/nb_NO.js index c8083c8fe3a..b3141566eec 100644 --- a/core/l10n/nb_NO.js +++ b/core/l10n/nb_NO.js @@ -117,6 +117,7 @@ OC.L10N.register( "Link" : "Lenke", "Password protect" : "Passordbeskyttet", "Allow upload and editing" : "Tillatt opplasting og redigering", + "Allow editing" : "Tillat redigering", "File drop (upload only)" : "Filkasse (kun opplasting)", "Email link to person" : "Email lenke til person", "Send" : "Send", @@ -233,8 +234,8 @@ OC.L10N.register( "Need help?" : "Trenger du hjelp?", "See the documentation" : "Se dokumentasjonen", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. Vennligst {linkstart}aktiver JavaScript{linkend} og last siden på nytt.", - "Log out" : "Logg ut", "Search" : "Søk", + "Log out" : "Logg ut", "This action requires you to confirm your password:" : "Denne handlingen krever at du bekrefter ditt passord:", "Confirm your password" : "Bekreft ditt passord", "Server side authentication failed!" : "Autentisering feilet på tjeneren!", @@ -334,7 +335,6 @@ OC.L10N.register( "Dec." : "Des.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.", - "Allow editing" : "Tillat redigering", "Hide file listing" : "Skjul filliste", "Sending ..." : "Sender...", "Email sent" : "E-post sendt", diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json index 4e7eeedb33a..35df1224439 100644 --- a/core/l10n/nb_NO.json +++ b/core/l10n/nb_NO.json @@ -115,6 +115,7 @@ "Link" : "Lenke", "Password protect" : "Passordbeskyttet", "Allow upload and editing" : "Tillatt opplasting og redigering", + "Allow editing" : "Tillat redigering", "File drop (upload only)" : "Filkasse (kun opplasting)", "Email link to person" : "Email lenke til person", "Send" : "Send", @@ -231,8 +232,8 @@ "Need help?" : "Trenger du hjelp?", "See the documentation" : "Se dokumentasjonen", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. Vennligst {linkstart}aktiver JavaScript{linkend} og last siden på nytt.", - "Log out" : "Logg ut", "Search" : "Søk", + "Log out" : "Logg ut", "This action requires you to confirm your password:" : "Denne handlingen krever at du bekrefter ditt passord:", "Confirm your password" : "Bekreft ditt passord", "Server side authentication failed!" : "Autentisering feilet på tjeneren!", @@ -332,7 +333,6 @@ "Dec." : "Des.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.", - "Allow editing" : "Tillat redigering", "Hide file listing" : "Skjul filliste", "Sending ..." : "Sender...", "Email sent" : "E-post sendt", diff --git a/core/l10n/nl.js b/core/l10n/nl.js index 4c3dc21b210..af191be30b1 100644 --- a/core/l10n/nl.js +++ b/core/l10n/nl.js @@ -122,6 +122,7 @@ OC.L10N.register( "Link" : "Link", "Password protect" : "Wachtwoord beveiligd", "Allow upload and editing" : "Toestaan uploaden en bewerken", + "Allow editing" : "Toestaan bewerken", "File drop (upload only)" : "File drop (alleen uploaden)", "Email link to person" : "E-mail link naar persoon", "Send" : "Versturen", @@ -240,8 +241,8 @@ OC.L10N.register( "Need help?" : "Hulp nodig?", "See the documentation" : "Zie de documentatie", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Deze applicatie heeft JavaScript nodig. {linkstart}Activeer JavaScript{linkend} en ververs deze pagina.", - "Log out" : "Afmelden", "Search" : "Zoeken", + "Log out" : "Afmelden", "This action requires you to confirm your password:" : "Deze actie vereist dat je je wachtwoord bevestigt:", "Confirm your password" : "Bevestig je wachtwoord", "Server side authentication failed!" : "Authenticatie bij de server mislukte!", @@ -342,7 +343,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Je bestanden zijn versleuteld. Als je de herstelsleutel niet hebt geactiveerd, is het niet mogelijk om je gegevens terug te krijgen nadat je wachtwoord is hersteld. <br>Als je niet weet wat je moet doen, neem dan eerst contact op met je beheerder. <br>Wil je echt verder gaan?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Deze server heeft geen actieve internetverbinding. Dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van 3e partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie e-mails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of je hebt toegang tot Nextcloud via een vertrouwde proxy. Als je Nextcloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat Nextcloud ziet kan vervalsen. Meer informatie is te vinden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</a>.", - "Allow editing" : "Toestaan bewerken", "Hide file listing" : "Verberg bestandsoverzicht", "Sending ..." : "Versturen ...", "Email sent" : "E-mail verzonden", diff --git a/core/l10n/nl.json b/core/l10n/nl.json index 9109a279abb..c53918ff27a 100644 --- a/core/l10n/nl.json +++ b/core/l10n/nl.json @@ -120,6 +120,7 @@ "Link" : "Link", "Password protect" : "Wachtwoord beveiligd", "Allow upload and editing" : "Toestaan uploaden en bewerken", + "Allow editing" : "Toestaan bewerken", "File drop (upload only)" : "File drop (alleen uploaden)", "Email link to person" : "E-mail link naar persoon", "Send" : "Versturen", @@ -238,8 +239,8 @@ "Need help?" : "Hulp nodig?", "See the documentation" : "Zie de documentatie", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Deze applicatie heeft JavaScript nodig. {linkstart}Activeer JavaScript{linkend} en ververs deze pagina.", - "Log out" : "Afmelden", "Search" : "Zoeken", + "Log out" : "Afmelden", "This action requires you to confirm your password:" : "Deze actie vereist dat je je wachtwoord bevestigt:", "Confirm your password" : "Bevestig je wachtwoord", "Server side authentication failed!" : "Authenticatie bij de server mislukte!", @@ -340,7 +341,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Je bestanden zijn versleuteld. Als je de herstelsleutel niet hebt geactiveerd, is het niet mogelijk om je gegevens terug te krijgen nadat je wachtwoord is hersteld. <br>Als je niet weet wat je moet doen, neem dan eerst contact op met je beheerder. <br>Wil je echt verder gaan?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Deze server heeft geen actieve internetverbinding. Dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van 3e partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie e-mails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of je hebt toegang tot Nextcloud via een vertrouwde proxy. Als je Nextcloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat Nextcloud ziet kan vervalsen. Meer informatie is te vinden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</a>.", - "Allow editing" : "Toestaan bewerken", "Hide file listing" : "Verberg bestandsoverzicht", "Sending ..." : "Versturen ...", "Email sent" : "E-mail verzonden", diff --git a/core/l10n/pl.js b/core/l10n/pl.js index 6fef626b0ea..a8c54a6af18 100644 --- a/core/l10n/pl.js +++ b/core/l10n/pl.js @@ -111,6 +111,7 @@ OC.L10N.register( "Link" : "Odnośnik", "Password protect" : "Zabezpiecz hasłem", "Allow upload and editing" : "Pozwól na przesyłanie i edycję", + "Allow editing" : "Pozwól na edycję", "Email link to person" : "Wyślij osobie odnośnik poprzez e-mail", "Send" : "Wyślij", "Shared with you and the group {group} by {owner}" : "Udostępnione tobie i grupie {group} przez {owner}", @@ -226,8 +227,8 @@ OC.L10N.register( "Need help?" : "Potrzebujesz pomocy?", "See the documentation" : "Zapoznaj się z dokumentacją", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ta aplikacja wymaga JavaScript do poprawnego działania. Proszę {linkstart}włączyć JavaScript{linkend} i przeładować stronę.", - "Log out" : "Wyloguj", "Search" : "Wyszukaj", + "Log out" : "Wyloguj", "This action requires you to confirm your password:" : "Ta akcja wymaga potwierdzenia hasłem:", "Confirm your password" : "Potwierdź hasło", "Server side authentication failed!" : "Uwierzytelnianie po stronie serwera nie powiodło się!", @@ -326,7 +327,6 @@ OC.L10N.register( "Nov." : "Lis.", "Dec." : "Gru.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ", - "Allow editing" : "Pozwól na edycję", "Hide file listing" : "Schowaj listę plików", "Sending ..." : "Wysyłanie...", "Email sent" : "E-mail wysłany", diff --git a/core/l10n/pl.json b/core/l10n/pl.json index c768d3bf79f..52f23012923 100644 --- a/core/l10n/pl.json +++ b/core/l10n/pl.json @@ -109,6 +109,7 @@ "Link" : "Odnośnik", "Password protect" : "Zabezpiecz hasłem", "Allow upload and editing" : "Pozwól na przesyłanie i edycję", + "Allow editing" : "Pozwól na edycję", "Email link to person" : "Wyślij osobie odnośnik poprzez e-mail", "Send" : "Wyślij", "Shared with you and the group {group} by {owner}" : "Udostępnione tobie i grupie {group} przez {owner}", @@ -224,8 +225,8 @@ "Need help?" : "Potrzebujesz pomocy?", "See the documentation" : "Zapoznaj się z dokumentacją", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ta aplikacja wymaga JavaScript do poprawnego działania. Proszę {linkstart}włączyć JavaScript{linkend} i przeładować stronę.", - "Log out" : "Wyloguj", "Search" : "Wyszukaj", + "Log out" : "Wyloguj", "This action requires you to confirm your password:" : "Ta akcja wymaga potwierdzenia hasłem:", "Confirm your password" : "Potwierdź hasło", "Server side authentication failed!" : "Uwierzytelnianie po stronie serwera nie powiodło się!", @@ -324,7 +325,6 @@ "Nov." : "Lis.", "Dec." : "Gru.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ", - "Allow editing" : "Pozwól na edycję", "Hide file listing" : "Schowaj listę plików", "Sending ..." : "Wysyłanie...", "Email sent" : "E-mail wysłany", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index 0f073a81176..7f5bea95d53 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -122,6 +122,7 @@ OC.L10N.register( "Link" : "Link", "Password protect" : "Proteger com senha", "Allow upload and editing" : "Permitir envio e edição", + "Allow editing" : "Permitir edição", "File drop (upload only)" : "Zona de arquivos (somente upload)", "Email link to person" : "Enviar link por e-mail", "Send" : "Enviar", @@ -240,8 +241,8 @@ OC.L10N.register( "Need help?" : "Precisa de ajuda?", "See the documentation" : "Veja a documentação", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer JavaScript para sua correta operação. Por favor {linkstart}habilite JavaScript{linkend} e recerregue a página.", - "Log out" : "Sair", "Search" : "Perquisar", + "Log out" : "Sair", "This action requires you to confirm your password:" : "Essa ação requer confirmação da sua senha:", "Confirm your password" : "Confirme sua senha", "Server side authentication failed!" : "Autenticação do servidor falhou!", @@ -282,7 +283,7 @@ OC.L10N.register( "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar tempos de espera com instalações maiores, você pode em vez disso executar o seguinte comando a partir do diretório de instalação:", "Detailed logs" : "Logs detalhados", "Update needed" : "Atualização necessária", - "Please use the command line updater because you have a big instance." : "Por favor, use a atualização de linha de comando, porque você tem um grande exemplo.", + "Please use the command line updater because you have a big instance." : "Por favor, use a atualização de linha de comando, porque você tem muitos dados em sua instância.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para obter ajuda, consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Esta instância %s está em modo de manutenção, o que pode demorar um pouco.", "This page will refresh itself when the %s instance is available again." : "Esta página será atualizada automaticamente quando esta instância %s estiver disponível novamente.", @@ -342,7 +343,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida.<br/>Se não tiver certeza do que deve fazer, contate o administrador antes de continuar. <br/>Deseja realmente continuar?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor não tem nenhuma conexão com a Internet. Isso significa que alguns dos recursos como montar armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acessar arquivos remotamente e envio de e-mails de notificação pode não funcionar, também. Sugerimos permitir conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A configuração de cabeçalhos do proxy reverso está incorreta, ou você está acessando ownCloud de um proxy confiável. Se você não estiver acessando ownCloud de um proxy de confiança, esta é uma questão de segurança e pode permitir a um invasor falsificar o endereço IP como visíveis para ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.", - "Allow editing" : "Permitir edição", "Hide file listing" : "Listar arquivo oculto", "Sending ..." : "Enviando ...", "Email sent" : "E-mail enviado", diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index 83f931be39c..caa468c1de4 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -120,6 +120,7 @@ "Link" : "Link", "Password protect" : "Proteger com senha", "Allow upload and editing" : "Permitir envio e edição", + "Allow editing" : "Permitir edição", "File drop (upload only)" : "Zona de arquivos (somente upload)", "Email link to person" : "Enviar link por e-mail", "Send" : "Enviar", @@ -238,8 +239,8 @@ "Need help?" : "Precisa de ajuda?", "See the documentation" : "Veja a documentação", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer JavaScript para sua correta operação. Por favor {linkstart}habilite JavaScript{linkend} e recerregue a página.", - "Log out" : "Sair", "Search" : "Perquisar", + "Log out" : "Sair", "This action requires you to confirm your password:" : "Essa ação requer confirmação da sua senha:", "Confirm your password" : "Confirme sua senha", "Server side authentication failed!" : "Autenticação do servidor falhou!", @@ -280,7 +281,7 @@ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar tempos de espera com instalações maiores, você pode em vez disso executar o seguinte comando a partir do diretório de instalação:", "Detailed logs" : "Logs detalhados", "Update needed" : "Atualização necessária", - "Please use the command line updater because you have a big instance." : "Por favor, use a atualização de linha de comando, porque você tem um grande exemplo.", + "Please use the command line updater because you have a big instance." : "Por favor, use a atualização de linha de comando, porque você tem muitos dados em sua instância.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para obter ajuda, consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Esta instância %s está em modo de manutenção, o que pode demorar um pouco.", "This page will refresh itself when the %s instance is available again." : "Esta página será atualizada automaticamente quando esta instância %s estiver disponível novamente.", @@ -340,7 +341,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida.<br/>Se não tiver certeza do que deve fazer, contate o administrador antes de continuar. <br/>Deseja realmente continuar?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor não tem nenhuma conexão com a Internet. Isso significa que alguns dos recursos como montar armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acessar arquivos remotamente e envio de e-mails de notificação pode não funcionar, também. Sugerimos permitir conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A configuração de cabeçalhos do proxy reverso está incorreta, ou você está acessando ownCloud de um proxy confiável. Se você não estiver acessando ownCloud de um proxy de confiança, esta é uma questão de segurança e pode permitir a um invasor falsificar o endereço IP como visíveis para ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.", - "Allow editing" : "Permitir edição", "Hide file listing" : "Listar arquivo oculto", "Sending ..." : "Enviando ...", "Email sent" : "E-mail enviado", diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js index 3dc75f4f190..28fc45b20e2 100644 --- a/core/l10n/pt_PT.js +++ b/core/l10n/pt_PT.js @@ -103,6 +103,7 @@ OC.L10N.register( "Share link" : "Compartilhar hiperligação", "Link" : "Hiperligação", "Password protect" : "Proteger com palavra-passe", + "Allow editing" : "Permitir edição", "Email link to person" : "Enviar hiperligação por mensagem para a pessoa", "Send" : "Enviar", "Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}", @@ -196,8 +197,8 @@ OC.L10N.register( "Need help?" : "Precisa de ajuda?", "See the documentation" : "Consulte a documentação", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer o JavaScript para funcionar corretamente. Por favor, {linkstart}ative o JavaScript{linkend} e recarregue a página.", - "Log out" : "Terminar sessão", "Search" : "Procurar", + "Log out" : "Terminar sessão", "Server side authentication failed!" : "Autenticação do lado do servidor falhou!", "Please contact your administrator." : "Por favor, contacte o seu administrador.", "An internal error occurred." : "Ocorreu um erro interno.", @@ -290,7 +291,6 @@ OC.L10N.register( "Dec." : "Dez.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros estão encriptados. Se não ativou a chave de recuperação, não terá nenhum modo para voltar obter os seus dados depois de reiniciar a sua senha. <br />Se não tem a certeza do que fazer, por favor, contacte o seu administrador antes de continuar.<br /> Tem a certeza que quer continuar?", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A configuração dos headers do proxy reverso está incorreta, ou então está a aceder ao ownCloud através de um proxy de confiança. Se não está a aceder ao ownCloud através de um proxy de confiança, isto é um problema de segurança e poderá permitir a um invasor falsificar um endereço IP como visível para o ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.", - "Allow editing" : "Permitir edição", "Sending ..." : "A enviar...", "Email sent" : "Mensagem enviada", "Send link via email" : "Enviar hiperligação por mensagem", diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json index 54693ed0609..fd0d06d47a4 100644 --- a/core/l10n/pt_PT.json +++ b/core/l10n/pt_PT.json @@ -101,6 +101,7 @@ "Share link" : "Compartilhar hiperligação", "Link" : "Hiperligação", "Password protect" : "Proteger com palavra-passe", + "Allow editing" : "Permitir edição", "Email link to person" : "Enviar hiperligação por mensagem para a pessoa", "Send" : "Enviar", "Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}", @@ -194,8 +195,8 @@ "Need help?" : "Precisa de ajuda?", "See the documentation" : "Consulte a documentação", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer o JavaScript para funcionar corretamente. Por favor, {linkstart}ative o JavaScript{linkend} e recarregue a página.", - "Log out" : "Terminar sessão", "Search" : "Procurar", + "Log out" : "Terminar sessão", "Server side authentication failed!" : "Autenticação do lado do servidor falhou!", "Please contact your administrator." : "Por favor, contacte o seu administrador.", "An internal error occurred." : "Ocorreu um erro interno.", @@ -288,7 +289,6 @@ "Dec." : "Dez.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros estão encriptados. Se não ativou a chave de recuperação, não terá nenhum modo para voltar obter os seus dados depois de reiniciar a sua senha. <br />Se não tem a certeza do que fazer, por favor, contacte o seu administrador antes de continuar.<br /> Tem a certeza que quer continuar?", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A configuração dos headers do proxy reverso está incorreta, ou então está a aceder ao ownCloud através de um proxy de confiança. Se não está a aceder ao ownCloud através de um proxy de confiança, isto é um problema de segurança e poderá permitir a um invasor falsificar um endereço IP como visível para o ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.", - "Allow editing" : "Permitir edição", "Sending ..." : "A enviar...", "Email sent" : "Mensagem enviada", "Send link via email" : "Enviar hiperligação por mensagem", diff --git a/core/l10n/ru.js b/core/l10n/ru.js index ee9b5d8a270..9487a79c578 100644 --- a/core/l10n/ru.js +++ b/core/l10n/ru.js @@ -122,6 +122,7 @@ OC.L10N.register( "Link" : "Ссылка", "Password protect" : "Защитить паролем", "Allow upload and editing" : "Разрешить загрузку и редактирование", + "Allow editing" : "Разрешить редактирование", "File drop (upload only)" : "Хранилище (только для приема файлов)", "Email link to person" : "Отправить ссылку по электронной почте", "Send" : "Отправить", @@ -240,8 +241,8 @@ OC.L10N.register( "Need help?" : "Нужна помощь?", "See the documentation" : "Посмотреть документацию", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Для корректной работы приложения требуется JavaScript. Пожалуйста, {linkstart}включите JavaScript{linkend} и обновите страницу.", - "Log out" : "Выйти", "Search" : "Найти", + "Log out" : "Выйти", "This action requires you to confirm your password:" : "Это действие требует подтверждения вашего пароля:", "Confirm your password" : "Подтвердите свой пароль", "Server side authentication failed!" : "Ошибка аутентификации на стороне сервера!", @@ -342,7 +343,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не включили ключ восстановления, то ваши данные будут недоступны после сброса пароля.<br />Если вы не уверены что делать дальше - обратитесь к вашему администратору.<br />Вы действительно хотите продолжить?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Этот сервер не имеет подключения к Интернету. Это означает, что некоторые из функций, таких как внешнее хранилище, уведомления об обновлениях и установка сторонних приложений не будут работать. Доступ к файлам удаленно и отправки уведомлений по почте могут не работать. Рекомендуется разрешить данному серверу доступ в Интернет если хотите, чтобы все функции работали.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Конфигурация заголовков обратного прокси не верна, либо доступ к nextCloud осуществлён через доверенный прокси. Если nextCloud открыт не через доверенный прокси то это проблема безопасности, которая может позволить атакующему подделать IP адрес, который видит nextCloud. Дополнительная информация доступна в нашей <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документации</a>.", - "Allow editing" : "Разрешить редактирование", "Hide file listing" : "Скрыть список файлов", "Sending ..." : "Отправляется ...", "Email sent" : "Письмо отправлено", diff --git a/core/l10n/ru.json b/core/l10n/ru.json index f55f0e0cca2..0644b0af787 100644 --- a/core/l10n/ru.json +++ b/core/l10n/ru.json @@ -120,6 +120,7 @@ "Link" : "Ссылка", "Password protect" : "Защитить паролем", "Allow upload and editing" : "Разрешить загрузку и редактирование", + "Allow editing" : "Разрешить редактирование", "File drop (upload only)" : "Хранилище (только для приема файлов)", "Email link to person" : "Отправить ссылку по электронной почте", "Send" : "Отправить", @@ -238,8 +239,8 @@ "Need help?" : "Нужна помощь?", "See the documentation" : "Посмотреть документацию", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Для корректной работы приложения требуется JavaScript. Пожалуйста, {linkstart}включите JavaScript{linkend} и обновите страницу.", - "Log out" : "Выйти", "Search" : "Найти", + "Log out" : "Выйти", "This action requires you to confirm your password:" : "Это действие требует подтверждения вашего пароля:", "Confirm your password" : "Подтвердите свой пароль", "Server side authentication failed!" : "Ошибка аутентификации на стороне сервера!", @@ -340,7 +341,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не включили ключ восстановления, то ваши данные будут недоступны после сброса пароля.<br />Если вы не уверены что делать дальше - обратитесь к вашему администратору.<br />Вы действительно хотите продолжить?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Этот сервер не имеет подключения к Интернету. Это означает, что некоторые из функций, таких как внешнее хранилище, уведомления об обновлениях и установка сторонних приложений не будут работать. Доступ к файлам удаленно и отправки уведомлений по почте могут не работать. Рекомендуется разрешить данному серверу доступ в Интернет если хотите, чтобы все функции работали.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Конфигурация заголовков обратного прокси не верна, либо доступ к nextCloud осуществлён через доверенный прокси. Если nextCloud открыт не через доверенный прокси то это проблема безопасности, которая может позволить атакующему подделать IP адрес, который видит nextCloud. Дополнительная информация доступна в нашей <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документации</a>.", - "Allow editing" : "Разрешить редактирование", "Hide file listing" : "Скрыть список файлов", "Sending ..." : "Отправляется ...", "Email sent" : "Письмо отправлено", diff --git a/core/l10n/sk_SK.js b/core/l10n/sk_SK.js index f09fefc1343..0b1e2d05f07 100644 --- a/core/l10n/sk_SK.js +++ b/core/l10n/sk_SK.js @@ -111,6 +111,7 @@ OC.L10N.register( "Link" : "Odkaz", "Password protect" : "Chrániť heslom", "Allow upload and editing" : "Povoliť nahratie a úpravy", + "Allow editing" : "Povoliť úpravy", "Email link to person" : "Odoslať odkaz emailom", "Send" : "Odoslať", "Shared with you and the group {group} by {owner}" : "Sprístupnené vám a skupine {group} používateľom {owner}", @@ -207,8 +208,8 @@ OC.L10N.register( "Need help?" : "Potrebujete pomoc?", "See the documentation" : "Pozri dokumentáciu", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Táto aplikácia vyžaduje JavaScript, aby správne fungovala. Prosím, {linkstart}zapnite si JavaScript{linkend} a obnovte stránku", - "Log out" : "Odhlásiť", "Search" : "Hľadať", + "Log out" : "Odhlásiť", "Server side authentication failed!" : "Autentifikácia na serveri zlyhala!", "Please contact your administrator." : "Kontaktujte prosím vášho administrátora.", "An internal error occurred." : "Došlo k vnútornej chybe.", @@ -298,7 +299,6 @@ OC.L10N.register( "Dec." : "Dec.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Súbory sú zašifrované. Ak ste nepovolili kľúč pre obnovenie, neexistuje žiadny spôsob, ako obnoviť vaše dáta po obnovení vášho hesla. <br /> Ak si nie ste istí čo urobiť, prosím skôr než budete pokračovať, obráťte sa na administrátora. <br /> Naozaj chcete pokračovať?", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurácia hlavičiek reverse proxy nie je správna alebo pristupujete k ownCloud z dôveryhodného proxy servera. Ak k ownCloud nepristupujete z dôveryhodného proxy servera, vzniká bezpečnostné riziko - IP adresa potenciálneho útočníka, ktorú vidí ownCloud, môže byť falošná. Viac informácií nájdete v našej <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentácii</a>.", - "Allow editing" : "Povoliť úpravy", "Sending ..." : "Odosielam ...", "Email sent" : "Email odoslaný", "notify by email" : "informovať emailom", diff --git a/core/l10n/sk_SK.json b/core/l10n/sk_SK.json index 52cd2b135d4..ae464c73869 100644 --- a/core/l10n/sk_SK.json +++ b/core/l10n/sk_SK.json @@ -109,6 +109,7 @@ "Link" : "Odkaz", "Password protect" : "Chrániť heslom", "Allow upload and editing" : "Povoliť nahratie a úpravy", + "Allow editing" : "Povoliť úpravy", "Email link to person" : "Odoslať odkaz emailom", "Send" : "Odoslať", "Shared with you and the group {group} by {owner}" : "Sprístupnené vám a skupine {group} používateľom {owner}", @@ -205,8 +206,8 @@ "Need help?" : "Potrebujete pomoc?", "See the documentation" : "Pozri dokumentáciu", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Táto aplikácia vyžaduje JavaScript, aby správne fungovala. Prosím, {linkstart}zapnite si JavaScript{linkend} a obnovte stránku", - "Log out" : "Odhlásiť", "Search" : "Hľadať", + "Log out" : "Odhlásiť", "Server side authentication failed!" : "Autentifikácia na serveri zlyhala!", "Please contact your administrator." : "Kontaktujte prosím vášho administrátora.", "An internal error occurred." : "Došlo k vnútornej chybe.", @@ -296,7 +297,6 @@ "Dec." : "Dec.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Súbory sú zašifrované. Ak ste nepovolili kľúč pre obnovenie, neexistuje žiadny spôsob, ako obnoviť vaše dáta po obnovení vášho hesla. <br /> Ak si nie ste istí čo urobiť, prosím skôr než budete pokračovať, obráťte sa na administrátora. <br /> Naozaj chcete pokračovať?", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurácia hlavičiek reverse proxy nie je správna alebo pristupujete k ownCloud z dôveryhodného proxy servera. Ak k ownCloud nepristupujete z dôveryhodného proxy servera, vzniká bezpečnostné riziko - IP adresa potenciálneho útočníka, ktorú vidí ownCloud, môže byť falošná. Viac informácií nájdete v našej <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentácii</a>.", - "Allow editing" : "Povoliť úpravy", "Sending ..." : "Odosielam ...", "Email sent" : "Email odoslaný", "notify by email" : "informovať emailom", diff --git a/core/l10n/sl.js b/core/l10n/sl.js index 17f6185aa0d..0ddea48e946 100644 --- a/core/l10n/sl.js +++ b/core/l10n/sl.js @@ -107,6 +107,7 @@ OC.L10N.register( "Link" : "Povezava", "Password protect" : "Zaščiti z geslom", "Allow upload and editing" : "Dovoli nalaganje in urejanje", + "Allow editing" : "Dovoli urejanje", "Email link to person" : "Posreduj povezavo po elektronski pošti", "Send" : "Pošlji", "Shared with you and the group {group} by {owner}" : "V souporabi z vami in skupino {group}. Lastnik je {owner}.", @@ -205,8 +206,8 @@ OC.L10N.register( "Need help?" : "Ali potrebujete pomoč?", "See the documentation" : "Preverite dokumentacijo", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Program zahteva podporo JavaScript za pravilno delovanje. Med nastavitvami omogočite {linkstart}JavaScript{linkend} in osvežite spletno stran.", - "Log out" : "Odjava", "Search" : "Poišči", + "Log out" : "Odjava", "Server side authentication failed!" : "Overitev s strežnika je spodletela!", "Please contact your administrator." : "Stopite v stik s skrbnikom sistema.", "An internal error occurred." : "Prišlo je do notranje napake.", @@ -302,7 +303,6 @@ OC.L10N.register( "Nov." : "nov", "Dec." : "dec", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?", - "Allow editing" : "Dovoli urejanje", "Hide file listing" : "Skrij spisek datotek", "Sending ..." : "Pošiljanje ...", "Email sent" : "Elektronska pošta je poslana", diff --git a/core/l10n/sl.json b/core/l10n/sl.json index a9c6cd78d1a..6e9c3892efe 100644 --- a/core/l10n/sl.json +++ b/core/l10n/sl.json @@ -105,6 +105,7 @@ "Link" : "Povezava", "Password protect" : "Zaščiti z geslom", "Allow upload and editing" : "Dovoli nalaganje in urejanje", + "Allow editing" : "Dovoli urejanje", "Email link to person" : "Posreduj povezavo po elektronski pošti", "Send" : "Pošlji", "Shared with you and the group {group} by {owner}" : "V souporabi z vami in skupino {group}. Lastnik je {owner}.", @@ -203,8 +204,8 @@ "Need help?" : "Ali potrebujete pomoč?", "See the documentation" : "Preverite dokumentacijo", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Program zahteva podporo JavaScript za pravilno delovanje. Med nastavitvami omogočite {linkstart}JavaScript{linkend} in osvežite spletno stran.", - "Log out" : "Odjava", "Search" : "Poišči", + "Log out" : "Odjava", "Server side authentication failed!" : "Overitev s strežnika je spodletela!", "Please contact your administrator." : "Stopite v stik s skrbnikom sistema.", "An internal error occurred." : "Prišlo je do notranje napake.", @@ -300,7 +301,6 @@ "Nov." : "nov", "Dec." : "dec", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?", - "Allow editing" : "Dovoli urejanje", "Hide file listing" : "Skrij spisek datotek", "Sending ..." : "Pošiljanje ...", "Email sent" : "Elektronska pošta je poslana", diff --git a/core/l10n/sq.js b/core/l10n/sq.js index 729ce181d33..29a0ee5ff97 100644 --- a/core/l10n/sq.js +++ b/core/l10n/sq.js @@ -60,6 +60,7 @@ OC.L10N.register( "seconds ago" : "sekonda më parë", "Logging in …" : "Duke u loguar ...", "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Lidhja për ricaktimin e fjalëkalimi tuaj u dërgua tek email-i juaj. Nëse nuk e merrni brenda një kohe të arsyeshme, kontrolloni dosjet e postës së padëshirueshme/postës së pavlerë.<br>Nëse s’është as aty, pyetni përgjegjësin tuaj lokal.", + "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Skedarët tuaj janë të enkriptuar. Nuk do ketë asnjë mënyrë për ti rimarrë të dhënat pasi fjalëkalimi juaj të rivendoset. <br>Nëse nuk jeni të sigurt se çfarë duhet të bëni, ju lutemi flisni me administratorin tuaj para se të vazhdoni. <br /> Doni vërtet të vazhdoni?", "I know what I'm doing" : "E di se ç’bëj", "Password can not be changed. Please contact your administrator." : "Fjalëkalimi nuk mund të ndryshohet. Ju lutemi, lidhuni me përgjegjësin tuaj.", "No" : "Jo", @@ -121,6 +122,7 @@ OC.L10N.register( "Link" : "Lidhje", "Password protect" : "Mbroje me fjalëkalim", "Allow upload and editing" : "Lejo ngarkim dhe editim", + "Allow editing" : "Lejo përpunim", "File drop (upload only)" : "Lësho skedar (vetëm ngarkim)", "Email link to person" : "Dërgoja personit lidhjen me email", "Send" : "Dërgoje", @@ -239,8 +241,8 @@ OC.L10N.register( "Need help?" : "Ju duhet ndihmë?", "See the documentation" : "Shihni dokumentimin", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ky aplikacion lyp JavaScript për punim të saktë. Ju lutemi, {linkstart}aktivizoni JavaScript-in{linkend} dhe ringarkoni faqen.", - "Log out" : "Dilni", "Search" : "Kërko", + "Log out" : "Dilni", "This action requires you to confirm your password:" : "Ky veprim kërkon të konfirmoni fjalëkalimin tuaj:", "Confirm your password" : "Konfrimoni fjalëkalimin tuaj", "Server side authentication failed!" : "Mirëfilltësimi më anë të shërbyesit dështoi!", @@ -341,7 +343,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Kartelat tuaja janë të fshehtëzuara. Nëse s’keni aktivizuar kyçin e rimarrjeve, nuk do të ketë ndonjë rrugë për të marrë sërish të dhënat tuaja pasi të jetë ricaktuar fjalëkalimi juaj.<br />Nëse s’jeni i sigurt se ç’duhet bërë, ju lutemi, përpara se të vazhdoni, lidhuni me përgjegjësin tuaj. <br />Doni vërtet të vazhdoni?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ky shërbyes nuk ka lidhje Internet funksionale. Kjo do të thotë që disa nga karakteristikat e lidhjes së ngarkesës së jashtme, njoftimet rreth përditësimit ose instalimit të aplikacioneve të palës së tretë nuk do të punojnë. Duke aksesuar skedarët në distancë dhe duke dërguar njoftimin me postë elektronike mund të mos punojë. Ne sygjerojmë të aktivizoni lidhjen e Internet për këtë shërbyes nëse doni të keni të gjitha karakteristikat.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Formësimi për krye ndërmjetësi prapësor është i pasaktë, ose jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar. Nëse s’jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar, ky është një problem sigurie dhe mund t’i lejojë një agresori të maskojë adresën e vet IP si një të pranueshme nga ownCloud-i. Të dhëna të mëtejshme mund të gjeni te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë.", - "Allow editing" : "Lejo përpunim", "Hide file listing" : "Fshih skedarin e listimit", "Sending ..." : "Po dërgohet …", "Email sent" : "Email-i u dërgua", diff --git a/core/l10n/sq.json b/core/l10n/sq.json index 5e15937e5b4..b61584cc5f3 100644 --- a/core/l10n/sq.json +++ b/core/l10n/sq.json @@ -58,6 +58,7 @@ "seconds ago" : "sekonda më parë", "Logging in …" : "Duke u loguar ...", "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Lidhja për ricaktimin e fjalëkalimi tuaj u dërgua tek email-i juaj. Nëse nuk e merrni brenda një kohe të arsyeshme, kontrolloni dosjet e postës së padëshirueshme/postës së pavlerë.<br>Nëse s’është as aty, pyetni përgjegjësin tuaj lokal.", + "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Skedarët tuaj janë të enkriptuar. Nuk do ketë asnjë mënyrë për ti rimarrë të dhënat pasi fjalëkalimi juaj të rivendoset. <br>Nëse nuk jeni të sigurt se çfarë duhet të bëni, ju lutemi flisni me administratorin tuaj para se të vazhdoni. <br /> Doni vërtet të vazhdoni?", "I know what I'm doing" : "E di se ç’bëj", "Password can not be changed. Please contact your administrator." : "Fjalëkalimi nuk mund të ndryshohet. Ju lutemi, lidhuni me përgjegjësin tuaj.", "No" : "Jo", @@ -119,6 +120,7 @@ "Link" : "Lidhje", "Password protect" : "Mbroje me fjalëkalim", "Allow upload and editing" : "Lejo ngarkim dhe editim", + "Allow editing" : "Lejo përpunim", "File drop (upload only)" : "Lësho skedar (vetëm ngarkim)", "Email link to person" : "Dërgoja personit lidhjen me email", "Send" : "Dërgoje", @@ -237,8 +239,8 @@ "Need help?" : "Ju duhet ndihmë?", "See the documentation" : "Shihni dokumentimin", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ky aplikacion lyp JavaScript për punim të saktë. Ju lutemi, {linkstart}aktivizoni JavaScript-in{linkend} dhe ringarkoni faqen.", - "Log out" : "Dilni", "Search" : "Kërko", + "Log out" : "Dilni", "This action requires you to confirm your password:" : "Ky veprim kërkon të konfirmoni fjalëkalimin tuaj:", "Confirm your password" : "Konfrimoni fjalëkalimin tuaj", "Server side authentication failed!" : "Mirëfilltësimi më anë të shërbyesit dështoi!", @@ -339,7 +341,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Kartelat tuaja janë të fshehtëzuara. Nëse s’keni aktivizuar kyçin e rimarrjeve, nuk do të ketë ndonjë rrugë për të marrë sërish të dhënat tuaja pasi të jetë ricaktuar fjalëkalimi juaj.<br />Nëse s’jeni i sigurt se ç’duhet bërë, ju lutemi, përpara se të vazhdoni, lidhuni me përgjegjësin tuaj. <br />Doni vërtet të vazhdoni?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ky shërbyes nuk ka lidhje Internet funksionale. Kjo do të thotë që disa nga karakteristikat e lidhjes së ngarkesës së jashtme, njoftimet rreth përditësimit ose instalimit të aplikacioneve të palës së tretë nuk do të punojnë. Duke aksesuar skedarët në distancë dhe duke dërguar njoftimin me postë elektronike mund të mos punojë. Ne sygjerojmë të aktivizoni lidhjen e Internet për këtë shërbyes nëse doni të keni të gjitha karakteristikat.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Formësimi për krye ndërmjetësi prapësor është i pasaktë, ose jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar. Nëse s’jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar, ky është një problem sigurie dhe mund t’i lejojë një agresori të maskojë adresën e vet IP si një të pranueshme nga ownCloud-i. Të dhëna të mëtejshme mund të gjeni te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë.", - "Allow editing" : "Lejo përpunim", "Hide file listing" : "Fshih skedarin e listimit", "Sending ..." : "Po dërgohet …", "Email sent" : "Email-i u dërgua", diff --git a/core/l10n/sv.js b/core/l10n/sv.js index 9baad587919..f5cad1205bd 100644 --- a/core/l10n/sv.js +++ b/core/l10n/sv.js @@ -122,6 +122,7 @@ OC.L10N.register( "Link" : "Länk", "Password protect" : "Lösenordsskydda", "Allow upload and editing" : "Tillåt uppladdning och redigering", + "Allow editing" : "Tillåt redigering", "File drop (upload only)" : "Göm fillista (endast uppladdning)", "Email link to person" : "Skicka länken som e-postmeddelande", "Send" : "Skicka", @@ -240,8 +241,8 @@ OC.L10N.register( "Need help?" : "Behöver du hjälp?", "See the documentation" : "Läs dokumentationen", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denna applikationen kräver JavaScript för att fungera korrekt. Var god {linkstart}aktivera JavaScript{linkend} och ladda om sidan.", - "Log out" : "Logga ut", "Search" : "Sök", + "Log out" : "Logga ut", "This action requires you to confirm your password:" : "Denna åtgärd kräver att du bekräftar ditt lösenord:", "Confirm your password" : "Bekräfta ditt lösenord", "Server side authentication failed!" : "Servern misslyckades med autentisering!", @@ -342,7 +343,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Servern har ingen fungerande internetuppkoppling. Detta betyder att vissa funktioner så som extern lagring, notifikationer om uppdateringar eller installationer utav tredjepartsapplikationer inte kommer fungera. Åtkomst av filer utifrån och att skicka notifieringar via epost kanske inte fungerar heller. Vi föreslår att internetanslutningen aktiveras för denna server om man vill använda samtliga funktioner.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfiguration för \"reverse proxy headers\" är felaktig eller så försöker du nå Nextcloud från en betrodd proxy. Om du inte försöker nå Nextcloud från en betrodd proxy, detta är en säkerhetsrisk och kan möjliggöra att en hacker att förfalska sin IP adress som är synlig för Nextcloud. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.", - "Allow editing" : "Tillåt redigering", "Hide file listing" : "Dölj filer i mappen", "Sending ..." : "Skickar ...", "Email sent" : "E-post skickat", diff --git a/core/l10n/sv.json b/core/l10n/sv.json index 5b4221885f0..642187b356c 100644 --- a/core/l10n/sv.json +++ b/core/l10n/sv.json @@ -120,6 +120,7 @@ "Link" : "Länk", "Password protect" : "Lösenordsskydda", "Allow upload and editing" : "Tillåt uppladdning och redigering", + "Allow editing" : "Tillåt redigering", "File drop (upload only)" : "Göm fillista (endast uppladdning)", "Email link to person" : "Skicka länken som e-postmeddelande", "Send" : "Skicka", @@ -238,8 +239,8 @@ "Need help?" : "Behöver du hjälp?", "See the documentation" : "Läs dokumentationen", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denna applikationen kräver JavaScript för att fungera korrekt. Var god {linkstart}aktivera JavaScript{linkend} och ladda om sidan.", - "Log out" : "Logga ut", "Search" : "Sök", + "Log out" : "Logga ut", "This action requires you to confirm your password:" : "Denna åtgärd kräver att du bekräftar ditt lösenord:", "Confirm your password" : "Bekräfta ditt lösenord", "Server side authentication failed!" : "Servern misslyckades med autentisering!", @@ -340,7 +341,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Servern har ingen fungerande internetuppkoppling. Detta betyder att vissa funktioner så som extern lagring, notifikationer om uppdateringar eller installationer utav tredjepartsapplikationer inte kommer fungera. Åtkomst av filer utifrån och att skicka notifieringar via epost kanske inte fungerar heller. Vi föreslår att internetanslutningen aktiveras för denna server om man vill använda samtliga funktioner.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfiguration för \"reverse proxy headers\" är felaktig eller så försöker du nå Nextcloud från en betrodd proxy. Om du inte försöker nå Nextcloud från en betrodd proxy, detta är en säkerhetsrisk och kan möjliggöra att en hacker att förfalska sin IP adress som är synlig för Nextcloud. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.", - "Allow editing" : "Tillåt redigering", "Hide file listing" : "Dölj filer i mappen", "Sending ..." : "Skickar ...", "Email sent" : "E-post skickat", diff --git a/core/l10n/th_TH.js b/core/l10n/th_TH.js index beb7f903de8..09129861c82 100644 --- a/core/l10n/th_TH.js +++ b/core/l10n/th_TH.js @@ -97,6 +97,7 @@ OC.L10N.register( "Share link" : "แชร์ลิงค์", "Link" : "ลิงค์", "Password protect" : "ป้องกันด้วยรหัสผ่าน", + "Allow editing" : "อนุญาตให้แก้ไข", "Email link to person" : "ส่งลิงก์ให้ทางอีเมล", "Send" : "ส่ง", "Shared with you and the group {group} by {owner}" : "ได้แชร์ให้กับคุณ และกลุ่ม {group} โดย {owner}", @@ -181,8 +182,8 @@ OC.L10N.register( "Need help?" : "ต้องการความช่วยเหลือ?", "See the documentation" : "ดูได้จากเอกสาร", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "โปรแกรมนี้ต้องการ JavaScript สำหรับการดำเนินงานที่ถูกต้อง กรุณา {linkstart}เปิดใช้งาน JavaScript{linkend} และโหลดหน้าเว็บ", - "Log out" : "ออกจากระบบ", "Search" : "ค้นหา", + "Log out" : "ออกจากระบบ", "Server side authentication failed!" : "การรับรองความถูกต้องจากเซิร์ฟเวอร์ล้มเหลว!", "Please contact your administrator." : "กรุณาติดต่อผู้ดูแลระบบ", "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", @@ -268,7 +269,6 @@ OC.L10N.register( "Nov." : "พ.ย.", "Dec." : "ธ.ค.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ไฟล์ของคุณจะถูกเข้ารหัส หากคุณยังไม่ได้เปิดใช้งานรหัสการกู้คืน คุณจะได้รับข้อมูลของคุณกลับมาหลังจากที่รหัสผ่านของคุณถูกรีเซ็ต<br /> หากคุณไม่แน่ใจว่าควรทำอย่างไรโปรดติดต่อผู้ดูแลระบบของคุณก่อนที่คุณจะดำเนินการต่อไป <br /> คุณต้องการดำเนินการต่อ?", - "Allow editing" : "อนุญาตให้แก้ไข", "Sending ..." : "กำลังส่ง...", "Email sent" : "ส่งอีเมล์แล้ว", "notify by email" : "แจ้งเตือนทางอีเมล", diff --git a/core/l10n/th_TH.json b/core/l10n/th_TH.json index 745b520128a..589a776139f 100644 --- a/core/l10n/th_TH.json +++ b/core/l10n/th_TH.json @@ -95,6 +95,7 @@ "Share link" : "แชร์ลิงค์", "Link" : "ลิงค์", "Password protect" : "ป้องกันด้วยรหัสผ่าน", + "Allow editing" : "อนุญาตให้แก้ไข", "Email link to person" : "ส่งลิงก์ให้ทางอีเมล", "Send" : "ส่ง", "Shared with you and the group {group} by {owner}" : "ได้แชร์ให้กับคุณ และกลุ่ม {group} โดย {owner}", @@ -179,8 +180,8 @@ "Need help?" : "ต้องการความช่วยเหลือ?", "See the documentation" : "ดูได้จากเอกสาร", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "โปรแกรมนี้ต้องการ JavaScript สำหรับการดำเนินงานที่ถูกต้อง กรุณา {linkstart}เปิดใช้งาน JavaScript{linkend} และโหลดหน้าเว็บ", - "Log out" : "ออกจากระบบ", "Search" : "ค้นหา", + "Log out" : "ออกจากระบบ", "Server side authentication failed!" : "การรับรองความถูกต้องจากเซิร์ฟเวอร์ล้มเหลว!", "Please contact your administrator." : "กรุณาติดต่อผู้ดูแลระบบ", "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", @@ -266,7 +267,6 @@ "Nov." : "พ.ย.", "Dec." : "ธ.ค.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ไฟล์ของคุณจะถูกเข้ารหัส หากคุณยังไม่ได้เปิดใช้งานรหัสการกู้คืน คุณจะได้รับข้อมูลของคุณกลับมาหลังจากที่รหัสผ่านของคุณถูกรีเซ็ต<br /> หากคุณไม่แน่ใจว่าควรทำอย่างไรโปรดติดต่อผู้ดูแลระบบของคุณก่อนที่คุณจะดำเนินการต่อไป <br /> คุณต้องการดำเนินการต่อ?", - "Allow editing" : "อนุญาตให้แก้ไข", "Sending ..." : "กำลังส่ง...", "Email sent" : "ส่งอีเมล์แล้ว", "notify by email" : "แจ้งเตือนทางอีเมล", diff --git a/core/l10n/tr.js b/core/l10n/tr.js index 92e3ce5ba70..f938e97716a 100644 --- a/core/l10n/tr.js +++ b/core/l10n/tr.js @@ -108,6 +108,7 @@ OC.L10N.register( "Share link" : "Paylaşma bağlantısı", "Link" : "Bağlantı", "Password protect" : "Parola koruması", + "Allow editing" : "Düzenlemeye izin ver", "Email link to person" : "Bağlantıyı e-posta ile gönder", "Send" : "Gönder", "Shared with you and the group {group} by {owner}" : "{owner} tarafından sizinle ve {group} ile paylaştırılmış", @@ -203,8 +204,8 @@ OC.L10N.register( "Need help?" : "Yardım mı lazım?", "See the documentation" : "Belgelendirmeye bak", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Bu uygulama düzgün çalışabilmesi için JavaScript gerektirir. Lütfen {linkstart}JavaScript'i etkinleştirin{linkend} ve sayfayı yeniden yükleyin.", - "Log out" : "Çıkış yap", "Search" : "Ara", + "Log out" : "Çıkış yap", "Server side authentication failed!" : "Sunucu taraflı yetkilendirme başarısız!", "Please contact your administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.", "An internal error occurred." : "Dahili bir hata oluştu.", @@ -297,7 +298,6 @@ OC.L10N.register( "Dec." : "Ara.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmemişseniz, parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak.<br />Ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin.<br />Gerçekten devam etmek istiyor musunuz?", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ters vekil sunucu başlık yapılandırmanız hatalı veya ownCloud'a güvenilen bir vekil sunucudan erişiyorsunuz. Eğer erişiminiz güvenilen bir vekil sunucu aracılığıyla gerçekleşmiyorsa bu bir güvenlik sorunudur ve bir saldırganın IP adresini farklıymış gibi göstermesine neden olabilir. Daha fazla bilgiyi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.", - "Allow editing" : "Düzenlemeye izin ver", "Hide file listing" : "Dosya listelemesini gizle", "Sending ..." : "Gönderiliyor...", "Email sent" : "E-posta gönderildi", diff --git a/core/l10n/tr.json b/core/l10n/tr.json index 764d16e978a..79c15a5ecee 100644 --- a/core/l10n/tr.json +++ b/core/l10n/tr.json @@ -106,6 +106,7 @@ "Share link" : "Paylaşma bağlantısı", "Link" : "Bağlantı", "Password protect" : "Parola koruması", + "Allow editing" : "Düzenlemeye izin ver", "Email link to person" : "Bağlantıyı e-posta ile gönder", "Send" : "Gönder", "Shared with you and the group {group} by {owner}" : "{owner} tarafından sizinle ve {group} ile paylaştırılmış", @@ -201,8 +202,8 @@ "Need help?" : "Yardım mı lazım?", "See the documentation" : "Belgelendirmeye bak", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Bu uygulama düzgün çalışabilmesi için JavaScript gerektirir. Lütfen {linkstart}JavaScript'i etkinleştirin{linkend} ve sayfayı yeniden yükleyin.", - "Log out" : "Çıkış yap", "Search" : "Ara", + "Log out" : "Çıkış yap", "Server side authentication failed!" : "Sunucu taraflı yetkilendirme başarısız!", "Please contact your administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.", "An internal error occurred." : "Dahili bir hata oluştu.", @@ -295,7 +296,6 @@ "Dec." : "Ara.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmemişseniz, parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak.<br />Ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin.<br />Gerçekten devam etmek istiyor musunuz?", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ters vekil sunucu başlık yapılandırmanız hatalı veya ownCloud'a güvenilen bir vekil sunucudan erişiyorsunuz. Eğer erişiminiz güvenilen bir vekil sunucu aracılığıyla gerçekleşmiyorsa bu bir güvenlik sorunudur ve bir saldırganın IP adresini farklıymış gibi göstermesine neden olabilir. Daha fazla bilgiyi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.", - "Allow editing" : "Düzenlemeye izin ver", "Hide file listing" : "Dosya listelemesini gizle", "Sending ..." : "Gönderiliyor...", "Email sent" : "E-posta gönderildi", diff --git a/core/l10n/uk.js b/core/l10n/uk.js index 45b8810cd50..aef131f69fe 100644 --- a/core/l10n/uk.js +++ b/core/l10n/uk.js @@ -95,6 +95,7 @@ OC.L10N.register( "Share link" : "Поділитись посиланням", "Link" : "Посилання", "Password protect" : "Захистити паролем", + "Allow editing" : "Дозволити редагування", "Email link to person" : "Надіслати посилання електронною поштою", "Send" : "Надіслати", "Shared with you and the group {group} by {owner}" : " {owner} опублікував для Вас та для групи {group}", @@ -186,8 +187,8 @@ OC.L10N.register( "Need help?" : "Потрібна допомога?", "See the documentation" : "Дивіться документацію", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ця програма вимагає увімкнений JavaScript для коректної роботи. Будь ласка, {linkstart} Увімкніть JavaScript {linkend} та перезавантажте сторінку.", - "Log out" : "Вихід", "Search" : "Пошук", + "Log out" : "Вихід", "Server side authentication failed!" : "Невдала аутентифікація з сервером!", "Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.", "An internal error occurred." : "Виникла внутрішня помилка.", @@ -278,7 +279,6 @@ OC.L10N.register( "Nov." : "Лис.", "Dec." : "Гру.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?", - "Allow editing" : "Дозволити редагування", "Sending ..." : "Надсилання...", "Email sent" : "Лист надіслано", "Send link via email" : "Надіслати посилання електронною поштою", diff --git a/core/l10n/uk.json b/core/l10n/uk.json index d93853483d5..da69ffaea29 100644 --- a/core/l10n/uk.json +++ b/core/l10n/uk.json @@ -93,6 +93,7 @@ "Share link" : "Поділитись посиланням", "Link" : "Посилання", "Password protect" : "Захистити паролем", + "Allow editing" : "Дозволити редагування", "Email link to person" : "Надіслати посилання електронною поштою", "Send" : "Надіслати", "Shared with you and the group {group} by {owner}" : " {owner} опублікував для Вас та для групи {group}", @@ -184,8 +185,8 @@ "Need help?" : "Потрібна допомога?", "See the documentation" : "Дивіться документацію", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ця програма вимагає увімкнений JavaScript для коректної роботи. Будь ласка, {linkstart} Увімкніть JavaScript {linkend} та перезавантажте сторінку.", - "Log out" : "Вихід", "Search" : "Пошук", + "Log out" : "Вихід", "Server side authentication failed!" : "Невдала аутентифікація з сервером!", "Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.", "An internal error occurred." : "Виникла внутрішня помилка.", @@ -276,7 +277,6 @@ "Nov." : "Лис.", "Dec." : "Гру.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?", - "Allow editing" : "Дозволити редагування", "Sending ..." : "Надсилання...", "Email sent" : "Лист надіслано", "Send link via email" : "Надіслати посилання електронною поштою", diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js index 9018b26d645..47101cfe384 100644 --- a/core/l10n/zh_CN.js +++ b/core/l10n/zh_CN.js @@ -122,6 +122,7 @@ OC.L10N.register( "Link" : "链接", "Password protect" : "密码保护", "Allow upload and editing" : "允许上传和编辑", + "Allow editing" : "允许编辑", "File drop (upload only)" : "文件拖拽 (仅上传)", "Email link to person" : "发送链接到个人", "Send" : "发送", @@ -240,8 +241,8 @@ OC.L10N.register( "Need help?" : "需要帮助?", "See the documentation" : "查看文档", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "对于正确的操作, 该应用需要使用 JavaScript. 请 {linkstart}启用 JavaScript{linkend}, 并重新加载页面.", - "Log out" : "注销", "Search" : "搜索", + "Log out" : "注销", "This action requires you to confirm your password:" : "此操作需要确认您的密码:", "Confirm your password" : "确认您的密码", "Server side authentication failed!" : "服务端认证失败!", @@ -342,7 +343,6 @@ OC.L10N.register( "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的文件已经加密. 如果您没有启用恢复密钥, 当您的密码重置后没有任何方式能恢复您的数据. <br />如果您不确定, 请在继续前联系您的管理员.<br/>您是否真的要继续?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "此服务器没有可用的互联网连接. 这意味着某些功能比如挂载外部存储, 更新通知以及安装第三方应用将无法工作. 远程访问文件和发送通知邮件可能也不工作. 如果您想使用所有的功能, 我们建议启用互联网连接.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "反向代理配置错误, 或者您正在通过可信的代理访问 ownCloud. 如果您不是通过可信代理访问 ownCloud, 这将是一个安全问题, 并允许攻击者通过伪装 IP 地址访问 ownCloud. 更多信息请查看我们的<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">文档</a>.", - "Allow editing" : "允许编辑", "Hide file listing" : "隐藏列出的文件", "Sending ..." : "正在发送...", "Email sent" : "邮件已发送", diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json index c6efd72710f..23134b325d7 100644 --- a/core/l10n/zh_CN.json +++ b/core/l10n/zh_CN.json @@ -120,6 +120,7 @@ "Link" : "链接", "Password protect" : "密码保护", "Allow upload and editing" : "允许上传和编辑", + "Allow editing" : "允许编辑", "File drop (upload only)" : "文件拖拽 (仅上传)", "Email link to person" : "发送链接到个人", "Send" : "发送", @@ -238,8 +239,8 @@ "Need help?" : "需要帮助?", "See the documentation" : "查看文档", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "对于正确的操作, 该应用需要使用 JavaScript. 请 {linkstart}启用 JavaScript{linkend}, 并重新加载页面.", - "Log out" : "注销", "Search" : "搜索", + "Log out" : "注销", "This action requires you to confirm your password:" : "此操作需要确认您的密码:", "Confirm your password" : "确认您的密码", "Server side authentication failed!" : "服务端认证失败!", @@ -340,7 +341,6 @@ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的文件已经加密. 如果您没有启用恢复密钥, 当您的密码重置后没有任何方式能恢复您的数据. <br />如果您不确定, 请在继续前联系您的管理员.<br/>您是否真的要继续?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "此服务器没有可用的互联网连接. 这意味着某些功能比如挂载外部存储, 更新通知以及安装第三方应用将无法工作. 远程访问文件和发送通知邮件可能也不工作. 如果您想使用所有的功能, 我们建议启用互联网连接.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "反向代理配置错误, 或者您正在通过可信的代理访问 ownCloud. 如果您不是通过可信代理访问 ownCloud, 这将是一个安全问题, 并允许攻击者通过伪装 IP 地址访问 ownCloud. 更多信息请查看我们的<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">文档</a>.", - "Allow editing" : "允许编辑", "Hide file listing" : "隐藏列出的文件", "Sending ..." : "正在发送...", "Email sent" : "邮件已发送", diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js index 45fa22b72a8..a3fc8f21d5c 100644 --- a/core/l10n/zh_TW.js +++ b/core/l10n/zh_TW.js @@ -103,6 +103,7 @@ OC.L10N.register( "Link" : "連結", "Password protect" : "密碼保護", "Allow upload and editing" : "允許上傳及編輯", + "Allow editing" : "允許編輯", "Email link to person" : "將連結 email 給別人", "Send" : "寄出", "Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}", @@ -201,8 +202,8 @@ OC.L10N.register( "Need help?" : "需要幫助?", "See the documentation" : "閱讀說明文件", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "這個應用程式需要啟用 Javascript 才能正常運作,請{linkstart}啟用Javascript{linkend}然後重新整理頁面。", - "Log out" : "登出", "Search" : "搜尋", + "Log out" : "登出", "Server side authentication failed!" : "伺服器端認證失敗!", "Please contact your administrator." : "請聯絡系統管理員", "An internal error occurred." : "發生內部錯誤", @@ -297,7 +298,6 @@ OC.L10N.register( "Nov." : "十一月", "Dec." : "十二月", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的檔案是加密的,如果您沒有啟用救援金鑰,當您重設密碼之後將無法存取您的資料。<br/>如果不確定該怎麼做,請聯絡您的系統管理員。<br/>您確定要繼續嗎?", - "Allow editing" : "允許編輯", "Hide file listing" : "隱藏檔案列表", "Sending ..." : "正在傳送…", "Email sent" : "Email 已寄出", diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json index e3a8544d9db..f14939e854e 100644 --- a/core/l10n/zh_TW.json +++ b/core/l10n/zh_TW.json @@ -101,6 +101,7 @@ "Link" : "連結", "Password protect" : "密碼保護", "Allow upload and editing" : "允許上傳及編輯", + "Allow editing" : "允許編輯", "Email link to person" : "將連結 email 給別人", "Send" : "寄出", "Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}", @@ -199,8 +200,8 @@ "Need help?" : "需要幫助?", "See the documentation" : "閱讀說明文件", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "這個應用程式需要啟用 Javascript 才能正常運作,請{linkstart}啟用Javascript{linkend}然後重新整理頁面。", - "Log out" : "登出", "Search" : "搜尋", + "Log out" : "登出", "Server side authentication failed!" : "伺服器端認證失敗!", "Please contact your administrator." : "請聯絡系統管理員", "An internal error occurred." : "發生內部錯誤", @@ -295,7 +296,6 @@ "Nov." : "十一月", "Dec." : "十二月", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的檔案是加密的,如果您沒有啟用救援金鑰,當您重設密碼之後將無法存取您的資料。<br/>如果不確定該怎麼做,請聯絡您的系統管理員。<br/>您確定要繼續嗎?", - "Allow editing" : "允許編輯", "Hide file listing" : "隱藏檔案列表", "Sending ..." : "正在傳送…", "Email sent" : "Email 已寄出", diff --git a/core/routes.php b/core/routes.php index 6f1892d19ac..5d61d58e037 100644 --- a/core/routes.php +++ b/core/routes.php @@ -59,7 +59,6 @@ $application->registerRoutes($this, [ ], 'ocs' => [ ['root' => '/cloud', 'name' => 'OCS#getCapabilities', 'url' => '/capabilities', 'verb' => 'GET'], - ['root' => '/cloud', 'name' => 'OCS#getCurrentUser', 'url' => '/user', 'verb' => 'GET'], ['root' => '', 'name' => 'OCS#getConfig', 'url' => '/config', 'verb' => 'GET'], ['root' => '/person', 'name' => 'OCS#personCheck', 'url' => '/check', 'verb' => 'POST'], ['root' => '/identityproof', 'name' => 'OCS#getIdentityProof', 'url' => '/key/{cloudId}', 'verb' => 'GET'], diff --git a/core/search/js/search.js b/core/search/js/search.js index 4dd29ef917f..44a69842374 100644 --- a/core/search/js/search.js +++ b/core/search/js/search.js @@ -405,6 +405,10 @@ $(document).ready(function() { OC.Search = new OCA.Search($('#searchbox'), $('#searchresults')); }); } + $('#searchbox + .icon-close-white').click(function() { + OC.Search.clear(); + $('#searchbox').focus(); + }); }); /** diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index c53e016c1c2..4842a94897d 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -42,67 +42,71 @@ <div id="notification"></div> </div> <header role="banner"><div id="header"> - <a href="<?php print_unescaped(link_to('', 'index.php')); ?>" - id="nextcloud" tabindex="1"> - <div class="logo-icon"> - <h1 class="hidden-visually"> - <?php p($theme->getName()); ?> - </h1> - </div> - </a> + <div id="header-left"> + <a href="<?php print_unescaped(link_to('', 'index.php')); ?>" + id="nextcloud" tabindex="1"> + <div class="logo-icon"> + <h1 class="hidden-visually"> + <?php p($theme->getName()); ?> + </h1> + </div> + </a> - <a href="#" class="header-appname-container menutoggle" tabindex="2"> - <h1 class="header-appname"> - <?php p(!empty($_['application'])?$_['application']: $l->t('Apps')); ?> - </h1> - <div class="icon-caret"></div> - </a> + <a href="#" class="header-appname-container menutoggle" tabindex="2"> + <h1 class="header-appname"> + <?php p(!empty($_['application'])?$_['application']: $l->t('Apps')); ?> + </h1> + <div class="icon-caret"></div> + </a> + </div> <div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div> - <div id="settings"> - <div id="expand" tabindex="6" role="link" class="menutoggle"> - <?php if ($_['enableAvatars']): ?> - <div class="avatardiv<?php if ($_['userAvatarSet']) { print_unescaped(' avatardiv-shown'); } else { print_unescaped('" style="display: none'); } ?>"> - <?php if ($_['userAvatarSet']): ?> - <img alt="" width="32" height="32" - src="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 32, 'v' => $_['userAvatarVersion']]));?>" - srcset="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 64, 'v' => $_['userAvatarVersion']]));?> 2x, <?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 128, 'v' => $_['userAvatarVersion']]));?> 4x" - > + <div id="header-right"> + <form class="searchbox" action="#" method="post" role="search" novalidate> + <label for="searchbox" class="hidden-visually"> + <?php p($l->t('Search'));?> + </label> + <input id="searchbox" type="search" name="query" + value="" required + autocomplete="off" tabindex="5"> + <button class="icon-close-white" type="reset"></button> + </form> + <div id="settings"> + <div id="expand" tabindex="6" role="link" class="menutoggle"> + <?php if ($_['enableAvatars']): ?> + <div class="avatardiv<?php if ($_['userAvatarSet']) { print_unescaped(' avatardiv-shown'); } else { print_unescaped('" style="display: none'); } ?>"> + <?php if ($_['userAvatarSet']): ?> + <img alt="" width="32" height="32" + src="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 32, 'v' => $_['userAvatarVersion']]));?>" + srcset="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 64, 'v' => $_['userAvatarVersion']]));?> 2x, <?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 128, 'v' => $_['userAvatarVersion']]));?> 4x" + > + <?php endif; ?> + </div> <?php endif; ?> + <span id="expandDisplayName"><?php p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span> + <div class="icon-caret"></div> + </div> + <div id="expanddiv"> + <ul> + <?php foreach($_['settingsnavigation'] as $entry):?> + <li> + <a href="<?php print_unescaped($entry['href']); ?>" + <?php if( $entry["active"] ): ?> class="active"<?php endif; ?>> + <img alt="" src="<?php print_unescaped($entry['icon'] . '?v=' . $_['versionHash']); ?>"> + <?php p($entry['name']) ?> + </a> + </li> + <?php endforeach; ?> + <li> + <a id="logout" <?php print_unescaped(OC_User::getLogoutAttribute()); ?>> + <img alt="" src="<?php print_unescaped(image_path('', 'actions/logout.svg') . '?v=' . $_['versionHash']); ?>"> + <?php p($l->t('Log out'));?> + </a> + </li> + </ul> </div> - <?php endif; ?> - <span id="expandDisplayName"><?php p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span> - <div class="icon-caret"></div> - </div> - <div id="expanddiv"> - <ul> - <?php foreach($_['settingsnavigation'] as $entry):?> - <li> - <a href="<?php print_unescaped($entry['href']); ?>" - <?php if( $entry["active"] ): ?> class="active"<?php endif; ?>> - <img alt="" src="<?php print_unescaped($entry['icon'] . '?v=' . $_['versionHash']); ?>"> - <?php p($entry['name']) ?> - </a> - </li> - <?php endforeach; ?> - <li> - <a id="logout" <?php print_unescaped(OC_User::getLogoutAttribute()); ?>> - <img alt="" src="<?php print_unescaped(image_path('', 'actions/logout.svg') . '?v=' . $_['versionHash']); ?>"> - <?php p($l->t('Log out'));?> - </a> - </li> - </ul> </div> </div> - - <form class="searchbox" action="#" method="post" role="search" novalidate> - <label for="searchbox" class="hidden-visually"> - <?php p($l->t('Search'));?> - </label> - <input id="searchbox" type="search" name="query" - value="" required - autocomplete="off" tabindex="5"> - </form> </div></header> <nav role="navigation"><div id="navigation"> diff --git a/lib/base.php b/lib/base.php index 23eda212f03..3ba0755eaab 100644 --- a/lib/base.php +++ b/lib/base.php @@ -281,7 +281,7 @@ class OC { // render error page $template = new OC_Template('', 'update.user', 'guest'); OC_Util::addScript('maintenance-check'); - OC_Util::addStyle('update'); + OC_Util::addStyle('guest'); $template->printPage(); die(); } @@ -355,7 +355,7 @@ class OC { header('Status: 503 Service Temporarily Unavailable'); header('Retry-After: 120'); - \OCP\Util::addStyle('update'); + OC_Util::addStyle('guest'); // render error page $template = new OC_Template('', 'update.use-cli', 'guest'); @@ -376,9 +376,9 @@ class OC { $oldTheme = $systemConfig->getValue('theme'); $systemConfig->setValue('theme', ''); - \OCP\Util::addScript('config'); // needed for web root - \OCP\Util::addScript('update'); - \OCP\Util::addStyle('update'); + OC_Util::addScript('config'); // needed for web root + OC_Util::addScript('update'); + OC_Util::addStyle('guest'); /** @var \OC\App\AppManager $appManager */ $appManager = \OC::$server->getAppManager(); @@ -708,6 +708,7 @@ class OC { exit(1); } else { OC_Response::setStatus(OC_Response::STATUS_SERVICE_UNAVAILABLE); + OC_Util::addStyle('guest'); OC_Template::printGuestPage('', 'error', array('errors' => $errors)); exit; } diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index d0ca4646e52..5e00b31ae41 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -225,6 +225,7 @@ return array( 'OCP\\Security\\ISecureRandom' => $baseDir . '/lib/public/Security/ISecureRandom.php', 'OCP\\Security\\StringUtils' => $baseDir . '/lib/public/Security/StringUtils.php', 'OCP\\Session\\Exceptions\\SessionNotAvailableException' => $baseDir . '/lib/public/Session/Exceptions/SessionNotAvailableException.php', + 'OCP\\Settings\\IIconSection' => $baseDir . '/lib/public/Settings/IIconSection.php', 'OCP\\Settings\\IManager' => $baseDir . '/lib/public/Settings/IManager.php', 'OCP\\Settings\\ISection' => $baseDir . '/lib/public/Settings/ISection.php', 'OCP\\Settings\\ISettings' => $baseDir . '/lib/public/Settings/ISettings.php', @@ -665,7 +666,6 @@ return array( 'OC\\Repair' => $baseDir . '/lib/private/Repair.php', 'OC\\RepairException' => $baseDir . '/lib/private/RepairException.php', 'OC\\Repair\\AssetCache' => $baseDir . '/lib/private/Repair/AssetCache.php', - 'OC\\Repair\\AvatarPermissions' => $baseDir . '/lib/private/Repair/AvatarPermissions.php', 'OC\\Repair\\CleanTags' => $baseDir . '/lib/private/Repair/CleanTags.php', 'OC\\Repair\\Collation' => $baseDir . '/lib/private/Repair/Collation.php', 'OC\\Repair\\DropOldJobs' => $baseDir . '/lib/private/Repair/DropOldJobs.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 6fe9a95c249..040a1e0d2d3 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -255,6 +255,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\Security\\ISecureRandom' => __DIR__ . '/../../..' . '/lib/public/Security/ISecureRandom.php', 'OCP\\Security\\StringUtils' => __DIR__ . '/../../..' . '/lib/public/Security/StringUtils.php', 'OCP\\Session\\Exceptions\\SessionNotAvailableException' => __DIR__ . '/../../..' . '/lib/public/Session/Exceptions/SessionNotAvailableException.php', + 'OCP\\Settings\\IIconSection' => __DIR__ . '/../../..' . '/lib/public/Settings/IIconSection.php', 'OCP\\Settings\\IManager' => __DIR__ . '/../../..' . '/lib/public/Settings/IManager.php', 'OCP\\Settings\\ISection' => __DIR__ . '/../../..' . '/lib/public/Settings/ISection.php', 'OCP\\Settings\\ISettings' => __DIR__ . '/../../..' . '/lib/public/Settings/ISettings.php', @@ -695,7 +696,6 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Repair' => __DIR__ . '/../../..' . '/lib/private/Repair.php', 'OC\\RepairException' => __DIR__ . '/../../..' . '/lib/private/RepairException.php', 'OC\\Repair\\AssetCache' => __DIR__ . '/../../..' . '/lib/private/Repair/AssetCache.php', - 'OC\\Repair\\AvatarPermissions' => __DIR__ . '/../../..' . '/lib/private/Repair/AvatarPermissions.php', 'OC\\Repair\\CleanTags' => __DIR__ . '/../../..' . '/lib/private/Repair/CleanTags.php', 'OC\\Repair\\Collation' => __DIR__ . '/../../..' . '/lib/private/Repair/Collation.php', 'OC\\Repair\\DropOldJobs' => __DIR__ . '/../../..' . '/lib/private/Repair/DropOldJobs.php', diff --git a/lib/l10n/sk_SK.js b/lib/l10n/sk_SK.js index 91bfe834f95..0e4854cdef0 100644 --- a/lib/l10n/sk_SK.js +++ b/lib/l10n/sk_SK.js @@ -36,6 +36,8 @@ OC.L10N.register( "File name is too long" : "Meno súboru je veľmi dlhé.", "Dot files are not allowed" : "Názov súboru začínajúci bodkou nie je povolený.", "Empty filename is not allowed" : "Prázdny názov súboru nie je povolený", + "APCu" : "APCu", + "Redis" : "Redis", "Server settings" : "Nastavenia servera", "Sharing" : "Sprístupnenie", "Encryption" : "Šifrovanie", @@ -64,6 +66,7 @@ OC.L10N.register( "Sharing %s failed, because the backend does not allow shares from type %i" : "Sprístupnenie %s zlyhalo, backend nepodporuje typ sprístupnenia %i", "Sharing %s failed, because the file does not exist" : "Nie je možné sprístupniť %s, súbor neexistuje", "You are not allowed to share %s" : "Nemôžete sprístupniť %s", + "Sharing %s failed, because you can not share with yourself" : "Sprístupnenie %s zlyhalo, nieje možné sprístupniť obsah so sebou samým", "Sharing %s failed, because the user %s does not exist" : "Sprístupnenie %s zlyhalo, používateľ %s neexistuje", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Sprístupnenie %s zlyhalo, používateľ %s nie je členom žiadnej skupiny spoločnej s používateľom %s", "Sharing %s failed, because this item is already shared with %s" : "Sprístupnenie %s zlyhalo, pretože táto položka už je prístupná pre %s", @@ -72,6 +75,7 @@ OC.L10N.register( "Sharing %s failed, because %s is not a member of the group %s" : "Sprístupnenie %s zlyhalo, %s nie je členom skupiny %s", "You need to provide a password to create a public link, only protected links are allowed" : "Musíte zadať heslo ak chcete vytvoriť verejný odkaz, lebo iba odkazy chránené heslom sú povolené", "Sharing %s failed, because sharing with links is not allowed" : "%s nie je možné sprístupniť, sprístupnenie prostredníctvom odkazu nie je povolené", + "Not allowed to create a federated share with the same user" : "Nie je možné vytvoriť združené sprístupnenie so sebou samým", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sprístupňovanie %s zlyhalo, nepodarilo sa nájsť %s, možno je server dočasne nedostupný.", "Share type %s is not valid for %s" : "Typ sprístupnenia %s nie je možný pre %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Nastavenie povolení pre %s zlyhalo, pretože povolenia prekračujú povolenia udelené %s", @@ -136,6 +140,7 @@ OC.L10N.register( "Nov." : "Nov.", "Dec." : "Dec.", "Apps" : "Aplikácie", + "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "V mene používateľa je možné použiť iba nasledovné znaky: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"", "A valid username must be provided" : "Musíte zadať platné používateľské meno", "Username contains whitespace at the beginning or at the end" : "Meno používateľa obsahuje na začiatku, alebo na konci medzeru", "A valid password must be provided" : "Musíte zadať platné heslo", @@ -146,6 +151,8 @@ OC.L10N.register( "Personal" : "Osobné", "Users" : "Používatelia", "Admin" : "Administrátor", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikáciu \"%s\" nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.", + "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikácia \"%s\" nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná.", "No app name specified" : "Nešpecifikované meno aplikácie", "App '%s' could not be installed!" : "Aplikáciu '%s' nebolo možné nainštalovať!", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Aplikáciu \"%s\" nie je možné inštalovať, pretože nie sú splnené nasledovné závislosti: %s", @@ -161,14 +168,18 @@ OC.L10N.register( "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", "Please install one of these locales on your system and restart your webserver." : "Prosím, nainštalujte si aspoň jeden z týchto jazykov so svojho systému a reštartujte webserver.", "Please ask your server administrator to install the module." : "Prosím, požiadajte administrátora vášho servera o inštaláciu modulu.", "PHP module %s not installed." : "PHP modul %s nie je nainštalovaný.", "PHP setting \"%s\" is not set to \"%s\"." : "Voľba PHP „%s“ nie je nastavená na „%s“.", + "Adjusting this setting in php.ini will make Nextcloud run again" : "Použitím týchto nastavení v php.ini dovolí Nextcloudu sa znova spustiť", "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload je nastavený na \"%s\", namiesto predpokladanej hodnoty \"0\"", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Oprava problému spočíva v nastavení <code>mbstring.func_overload</code> na <code>0</code> vo vašom php.ini", + "libxml2 2.7.0 is at least required. Currently %s is installed." : "Vyžadovaná verzia libxml2 je 2.7.0 a vyššia. Momentálne je nainštalovaná verzia %s.", + "To fix this issue update your libxml2 version and restart your web server." : "Pre vyriešenie tohto problému aktualizujte prosím verziu libxml2 a reštartujte webový server.", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je zjavne nastavené, aby odstraňovalo bloky vloženej dokumentácie. To zneprístupní niekoľko základných aplikácií.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "To je pravdepodobne spôsobené cache/akcelerátorom ako napr. Zend OPcache alebo eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "PHP moduly boli nainštalované, ale stále sa tvária, že chýbajú?", @@ -192,6 +203,8 @@ OC.L10N.register( "Archives of type %s are not supported" : "Tento typ archívu %s nie je podporovaný", "Failed to open archive when installing app" : "Zlyhanie pri otváraní archívu počas inštalácie aplikácie", "App does not provide an info.xml file" : "Aplikácia neposkytuje súbor info.xml", + "App cannot be installed because appinfo file cannot be read." : "Aplikáciu nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.", + "Signature could not get checked. Please contact the app developer and check your admin screen." : "Nebolo možné skontrolovať podpis aplikácie. Kontaktujte prosím vývojára aplikácie a skontrolujte administrátorské nastavenia.", "App can't be installed because of not allowed code in the App" : "Aplikácia nemôže byť nainštalovaná pre nepovolený kód v aplikácii", "App can't be installed because it is not compatible with this version of the server" : "Aplikácia nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná", "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikácia nemôže byť nainštalovaná pretože obsahuje značku<shipped>true</shipped>, ktorá nie je povolená pre nedodávané aplikácie", diff --git a/lib/l10n/sk_SK.json b/lib/l10n/sk_SK.json index f67c99dd28c..ddd42d62b8e 100644 --- a/lib/l10n/sk_SK.json +++ b/lib/l10n/sk_SK.json @@ -34,6 +34,8 @@ "File name is too long" : "Meno súboru je veľmi dlhé.", "Dot files are not allowed" : "Názov súboru začínajúci bodkou nie je povolený.", "Empty filename is not allowed" : "Prázdny názov súboru nie je povolený", + "APCu" : "APCu", + "Redis" : "Redis", "Server settings" : "Nastavenia servera", "Sharing" : "Sprístupnenie", "Encryption" : "Šifrovanie", @@ -62,6 +64,7 @@ "Sharing %s failed, because the backend does not allow shares from type %i" : "Sprístupnenie %s zlyhalo, backend nepodporuje typ sprístupnenia %i", "Sharing %s failed, because the file does not exist" : "Nie je možné sprístupniť %s, súbor neexistuje", "You are not allowed to share %s" : "Nemôžete sprístupniť %s", + "Sharing %s failed, because you can not share with yourself" : "Sprístupnenie %s zlyhalo, nieje možné sprístupniť obsah so sebou samým", "Sharing %s failed, because the user %s does not exist" : "Sprístupnenie %s zlyhalo, používateľ %s neexistuje", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Sprístupnenie %s zlyhalo, používateľ %s nie je členom žiadnej skupiny spoločnej s používateľom %s", "Sharing %s failed, because this item is already shared with %s" : "Sprístupnenie %s zlyhalo, pretože táto položka už je prístupná pre %s", @@ -70,6 +73,7 @@ "Sharing %s failed, because %s is not a member of the group %s" : "Sprístupnenie %s zlyhalo, %s nie je členom skupiny %s", "You need to provide a password to create a public link, only protected links are allowed" : "Musíte zadať heslo ak chcete vytvoriť verejný odkaz, lebo iba odkazy chránené heslom sú povolené", "Sharing %s failed, because sharing with links is not allowed" : "%s nie je možné sprístupniť, sprístupnenie prostredníctvom odkazu nie je povolené", + "Not allowed to create a federated share with the same user" : "Nie je možné vytvoriť združené sprístupnenie so sebou samým", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sprístupňovanie %s zlyhalo, nepodarilo sa nájsť %s, možno je server dočasne nedostupný.", "Share type %s is not valid for %s" : "Typ sprístupnenia %s nie je možný pre %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Nastavenie povolení pre %s zlyhalo, pretože povolenia prekračujú povolenia udelené %s", @@ -134,6 +138,7 @@ "Nov." : "Nov.", "Dec." : "Dec.", "Apps" : "Aplikácie", + "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "V mene používateľa je možné použiť iba nasledovné znaky: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"", "A valid username must be provided" : "Musíte zadať platné používateľské meno", "Username contains whitespace at the beginning or at the end" : "Meno používateľa obsahuje na začiatku, alebo na konci medzeru", "A valid password must be provided" : "Musíte zadať platné heslo", @@ -144,6 +149,8 @@ "Personal" : "Osobné", "Users" : "Používatelia", "Admin" : "Administrátor", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikáciu \"%s\" nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.", + "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikácia \"%s\" nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná.", "No app name specified" : "Nešpecifikované meno aplikácie", "App '%s' could not be installed!" : "Aplikáciu '%s' nebolo možné nainštalovať!", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Aplikáciu \"%s\" nie je možné inštalovať, pretože nie sú splnené nasledovné závislosti: %s", @@ -159,14 +166,18 @@ "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", "Please install one of these locales on your system and restart your webserver." : "Prosím, nainštalujte si aspoň jeden z týchto jazykov so svojho systému a reštartujte webserver.", "Please ask your server administrator to install the module." : "Prosím, požiadajte administrátora vášho servera o inštaláciu modulu.", "PHP module %s not installed." : "PHP modul %s nie je nainštalovaný.", "PHP setting \"%s\" is not set to \"%s\"." : "Voľba PHP „%s“ nie je nastavená na „%s“.", + "Adjusting this setting in php.ini will make Nextcloud run again" : "Použitím týchto nastavení v php.ini dovolí Nextcloudu sa znova spustiť", "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload je nastavený na \"%s\", namiesto predpokladanej hodnoty \"0\"", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Oprava problému spočíva v nastavení <code>mbstring.func_overload</code> na <code>0</code> vo vašom php.ini", + "libxml2 2.7.0 is at least required. Currently %s is installed." : "Vyžadovaná verzia libxml2 je 2.7.0 a vyššia. Momentálne je nainštalovaná verzia %s.", + "To fix this issue update your libxml2 version and restart your web server." : "Pre vyriešenie tohto problému aktualizujte prosím verziu libxml2 a reštartujte webový server.", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je zjavne nastavené, aby odstraňovalo bloky vloženej dokumentácie. To zneprístupní niekoľko základných aplikácií.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "To je pravdepodobne spôsobené cache/akcelerátorom ako napr. Zend OPcache alebo eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "PHP moduly boli nainštalované, ale stále sa tvária, že chýbajú?", @@ -190,6 +201,8 @@ "Archives of type %s are not supported" : "Tento typ archívu %s nie je podporovaný", "Failed to open archive when installing app" : "Zlyhanie pri otváraní archívu počas inštalácie aplikácie", "App does not provide an info.xml file" : "Aplikácia neposkytuje súbor info.xml", + "App cannot be installed because appinfo file cannot be read." : "Aplikáciu nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.", + "Signature could not get checked. Please contact the app developer and check your admin screen." : "Nebolo možné skontrolovať podpis aplikácie. Kontaktujte prosím vývojára aplikácie a skontrolujte administrátorské nastavenia.", "App can't be installed because of not allowed code in the App" : "Aplikácia nemôže byť nainštalovaná pre nepovolený kód v aplikácii", "App can't be installed because it is not compatible with this version of the server" : "Aplikácia nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná", "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikácia nemôže byť nainštalovaná pretože obsahuje značku<shipped>true</shipped>, ktorá nie je povolená pre nedodávané aplikácie", diff --git a/lib/private/Files/Node/File.php b/lib/private/Files/Node/File.php index c4430b9181d..4bfa5d583f7 100644 --- a/lib/private/Files/Node/File.php +++ b/lib/private/Files/Node/File.php @@ -30,6 +30,16 @@ use OCP\Files\NotPermittedException; class File extends Node implements \OCP\Files\File { /** + * Creates a Folder that represents a non-existing path + * + * @param string $path path + * @return string non-existing node class + */ + protected function createNonExistingNode($path) { + return new NonExistingFile($this->root, $this->view, $path); + } + + /** * @return string * @throws \OCP\Files\NotPermittedException */ @@ -114,52 +124,6 @@ class File extends Node implements \OCP\Files\File { } /** - * @param string $targetPath - * @throws \OCP\Files\NotPermittedException - * @return \OC\Files\Node\Node - */ - public function copy($targetPath) { - $targetPath = $this->normalizePath($targetPath); - $parent = $this->root->get(dirname($targetPath)); - if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) { - $nonExisting = new NonExistingFile($this->root, $this->view, $targetPath); - $this->root->emit('\OC\Files', 'preCopy', array($this, $nonExisting)); - $this->root->emit('\OC\Files', 'preWrite', array($nonExisting)); - $this->view->copy($this->path, $targetPath); - $targetNode = $this->root->get($targetPath); - $this->root->emit('\OC\Files', 'postCopy', array($this, $targetNode)); - $this->root->emit('\OC\Files', 'postWrite', array($targetNode)); - return $targetNode; - } else { - throw new NotPermittedException(); - } - } - - /** - * @param string $targetPath - * @throws \OCP\Files\NotPermittedException - * @return \OC\Files\Node\Node - */ - public function move($targetPath) { - $targetPath = $this->normalizePath($targetPath); - $parent = $this->root->get(dirname($targetPath)); - if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) { - $nonExisting = new NonExistingFile($this->root, $this->view, $targetPath); - $this->root->emit('\OC\Files', 'preRename', array($this, $nonExisting)); - $this->root->emit('\OC\Files', 'preWrite', array($nonExisting)); - $this->view->rename($this->path, $targetPath); - $targetNode = $this->root->get($targetPath); - $this->root->emit('\OC\Files', 'postRename', array($this, $targetNode)); - $this->root->emit('\OC\Files', 'postWrite', array($targetNode)); - $this->path = $targetPath; - $this->fileInfo = null; - return $targetNode; - } else { - throw new NotPermittedException(); - } - } - - /** * @param string $type * @param bool $raw * @return string diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php index 288a02ef207..fd907f708f3 100644 --- a/lib/private/Files/Node/Folder.php +++ b/lib/private/Files/Node/Folder.php @@ -36,6 +36,16 @@ use OCP\Files\NotPermittedException; class Folder extends Node implements \OCP\Files\Folder { /** + * Creates a Folder that represents a non-existing path + * + * @param string $path path + * @return string non-existing node class + */ + protected function createNonExistingNode($path) { + return new NonExistingFolder($this->root, $this->view, $path); + } + + /** * @param string $path path relative to the folder * @return string * @throws \OCP\Files\NotPermittedException @@ -326,51 +336,6 @@ class Folder extends Node implements \OCP\Files\Folder { } /** - * @param string $targetPath - * @throws \OCP\Files\NotPermittedException - * @return \OC\Files\Node\Node - */ - public function copy($targetPath) { - $targetPath = $this->normalizePath($targetPath); - $parent = $this->root->get(dirname($targetPath)); - if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) { - $nonExisting = new NonExistingFolder($this->root, $this->view, $targetPath); - $this->root->emit('\OC\Files', 'preCopy', array($this, $nonExisting)); - $this->root->emit('\OC\Files', 'preWrite', array($nonExisting)); - $this->view->copy($this->path, $targetPath); - $targetNode = $this->root->get($targetPath); - $this->root->emit('\OC\Files', 'postCopy', array($this, $targetNode)); - $this->root->emit('\OC\Files', 'postWrite', array($targetNode)); - return $targetNode; - } else { - throw new NotPermittedException('No permission to copy to path'); - } - } - - /** - * @param string $targetPath - * @throws \OCP\Files\NotPermittedException - * @return \OC\Files\Node\Node - */ - public function move($targetPath) { - $targetPath = $this->normalizePath($targetPath); - $parent = $this->root->get(dirname($targetPath)); - if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) { - $nonExisting = new NonExistingFolder($this->root, $this->view, $targetPath); - $this->root->emit('\OC\Files', 'preRename', array($this, $nonExisting)); - $this->root->emit('\OC\Files', 'preWrite', array($nonExisting)); - $this->view->rename($this->path, $targetPath); - $targetNode = $this->root->get($targetPath); - $this->root->emit('\OC\Files', 'postRename', array($this, $targetNode)); - $this->root->emit('\OC\Files', 'postWrite', array($targetNode)); - $this->path = $targetPath; - return $targetNode; - } else { - throw new NotPermittedException('No permission to move to path'); - } - } - - /** * Add a suffix to the name in case the file exists * * @param string $name diff --git a/lib/private/Files/Node/Node.php b/lib/private/Files/Node/Node.php index 226c182622f..e00debe6903 100644 --- a/lib/private/Files/Node/Node.php +++ b/lib/private/Files/Node/Node.php @@ -33,6 +33,7 @@ use OCP\Files\InvalidPathException; use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; +// FIXME: this class really should be abstract class Node implements \OCP\Files\Node { /** * @var \OC\Files\View $view @@ -56,7 +57,7 @@ class Node implements \OCP\Files\Node { /** * @param \OC\Files\View $view - * @param \OC\Files\Node\Root $root + * @param \OCP\Files\IRootFolder $root * @param string $path * @param FileInfo $fileInfo */ @@ -68,6 +69,16 @@ class Node implements \OCP\Files\Node { } /** + * Creates a Node of the same type that represents a non-existing path + * + * @param string $path path + * @return string non-existing node class + */ + protected function createNonExistingNode($path) { + throw new \Exception('Must be implemented by subclasses'); + } + + /** * Returns the matching file info * * @return FileInfo @@ -106,28 +117,11 @@ class Node implements \OCP\Files\Node { return ($this->getPermissions() & $permissions) === $permissions; } - /** - * @param string $targetPath - * @throws \OCP\Files\NotPermittedException - * @return \OC\Files\Node\Node - */ - public function move($targetPath) { - return; - } - public function delete() { return; } /** - * @param string $targetPath - * @return \OC\Files\Node\Node - */ - public function copy($targetPath) { - return; - } - - /** * @param int $mtime * @throws \OCP\Files\NotPermittedException */ @@ -381,4 +375,54 @@ class Node implements \OCP\Files\Node { public function unlock($type) { $this->view->unlockFile($this->path, $type); } + + /** + * @param string $targetPath + * @throws \OCP\Files\NotPermittedException if copy not allowed or failed + * @return \OC\Files\Node\Node + */ + public function copy($targetPath) { + $targetPath = $this->normalizePath($targetPath); + $parent = $this->root->get(dirname($targetPath)); + if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) { + $nonExisting = $this->createNonExistingNode($targetPath); + $this->root->emit('\OC\Files', 'preCopy', [$this, $nonExisting]); + $this->root->emit('\OC\Files', 'preWrite', [$nonExisting]); + if (!$this->view->copy($this->path, $targetPath)) { + throw new NotPermittedException('Could not copy ' . $this->path . ' to ' . $targetPath); + } + $targetNode = $this->root->get($targetPath); + $this->root->emit('\OC\Files', 'postCopy', [$this, $targetNode]); + $this->root->emit('\OC\Files', 'postWrite', [$targetNode]); + return $targetNode; + } else { + throw new NotPermittedException('No permission to copy to path ' . $targetPath); + } + } + + /** + * @param string $targetPath + * @throws \OCP\Files\NotPermittedException if move not allowed or failed + * @return \OC\Files\Node\Node + */ + public function move($targetPath) { + $targetPath = $this->normalizePath($targetPath); + $parent = $this->root->get(dirname($targetPath)); + if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) { + $nonExisting = $this->createNonExistingNode($targetPath); + $this->root->emit('\OC\Files', 'preRename', [$this, $nonExisting]); + $this->root->emit('\OC\Files', 'preWrite', [$nonExisting]); + if (!$this->view->rename($this->path, $targetPath)) { + throw new NotPermittedException('Could not move ' . $this->path . ' to ' . $targetPath); + } + $targetNode = $this->root->get($targetPath); + $this->root->emit('\OC\Files', 'postRename', [$this, $targetNode]); + $this->root->emit('\OC\Files', 'postWrite', [$targetNode]); + $this->path = $targetPath; + return $targetNode; + } else { + throw new NotPermittedException('No permission to move to path ' . $targetPath); + } + } + } diff --git a/lib/private/Files/Storage/Common.php b/lib/private/Files/Storage/Common.php index 5561f6a889b..f3e3cb9e58c 100644 --- a/lib/private/Files/Storage/Common.php +++ b/lib/private/Files/Storage/Common.php @@ -436,10 +436,14 @@ abstract class Common implements Storage, ILockingStorage { * @return bool */ public function test() { - if ($this->stat('')) { - return true; + try { + if ($this->stat('')) { + return true; + } + return false; + } catch (\Exception $e) { + return false; } - return false; } /** diff --git a/lib/private/Files/Storage/DAV.php b/lib/private/Files/Storage/DAV.php index abe219f99f2..3b89a66d6a2 100644 --- a/lib/private/Files/Storage/DAV.php +++ b/lib/private/Files/Storage/DAV.php @@ -569,8 +569,8 @@ class DAV extends Common { public function stat($path) { try { $response = $this->propfind($path); - if ($response === false) { - return []; + if (!$response) { + return false; } return [ 'mtime' => strtotime($response['{DAV:}getlastmodified']), diff --git a/lib/private/Files/Type/Detection.php b/lib/private/Files/Type/Detection.php index 84d727ebb0e..cd4ddc2f067 100644 --- a/lib/private/Files/Type/Detection.php +++ b/lib/private/Files/Type/Detection.php @@ -167,6 +167,10 @@ class Detection implements IMimeTypeDetector { $this->loadMappings(); $fileName = basename($path); + + // remove leading dot on hidden files with a file extension + $fileName = ltrim($fileName, '.'); + // note: leading dot doesn't qualify as extension if (strpos($fileName, '.') > 0) { //try to guess the type by the file extension diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php index 909c49197b8..db21d400b39 100644 --- a/lib/private/Files/View.php +++ b/lib/private/Files/View.php @@ -1146,6 +1146,8 @@ class View { $unlockLater = false; if ($this->lockingEnabled && $operation === 'fopen' && is_resource($result)) { $unlockLater = true; + // make sure our unlocking callback will still be called if connection is aborted + ignore_user_abort(true); $result = CallbackWrapper::wrap($result, null, null, function () use ($hooks, $path) { if (in_array('write', $hooks)) { $this->unlockFile($path, ILockingProvider::LOCK_EXCLUSIVE); diff --git a/lib/private/Mail/Mailer.php b/lib/private/Mail/Mailer.php index df8fa80f2c2..e704e8e3490 100644 --- a/lib/private/Mail/Mailer.php +++ b/lib/private/Mail/Mailer.php @@ -200,7 +200,7 @@ class Mailer implements IMailer { * @return \Swift_SendmailTransport */ protected function getSendMailInstance() { - switch ($this->config->getSystemValue('mail_smtpmode', 'sendmail')) { + switch ($this->config->getSystemValue('mail_smtpmode', 'php')) { case 'qmail': $binaryPath = '/var/qmail/bin/sendmail'; break; diff --git a/lib/private/Repair.php b/lib/private/Repair.php index f1bf586b49d..e8d466cd844 100644 --- a/lib/private/Repair.php +++ b/lib/private/Repair.php @@ -31,7 +31,6 @@ namespace OC; use OC\Repair\AssetCache; -use OC\Repair\AvatarPermissions; use OC\Repair\CleanTags; use OC\Repair\Collation; use OC\Repair\DropOldJobs; @@ -142,7 +141,6 @@ class Repair implements IOutput{ new RepairInvalidShares(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()), new SharePropagation(\OC::$server->getConfig()), new RemoveOldShares(\OC::$server->getDatabaseConnection()), - new AvatarPermissions(\OC::$server->getDatabaseConnection()), new RemoveRootShares(\OC::$server->getDatabaseConnection(), \OC::$server->getUserManager(), \OC::$server->getLazyRootFolder()), new RepairUnmergedShares( \OC::$server->getConfig(), diff --git a/lib/private/Repair/AvatarPermissions.php b/lib/private/Repair/AvatarPermissions.php deleted file mode 100644 index 9d75062358c..00000000000 --- a/lib/private/Repair/AvatarPermissions.php +++ /dev/null @@ -1,116 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Roeland Jago Douma <roeland@famdouma.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 OC\Repair; - -use Doctrine\DBAL\Platforms\OraclePlatform; -use OCP\IDBConnection; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -/** - * Class AvatarPermissions - * - * @package OC\Repair - */ -class AvatarPermissions implements IRepairStep { - /** @var IDBConnection */ - private $connection; - - /** - * AvatarPermissions constructor. - * - * @param IDBConnection $connection - */ - public function __construct(IDBConnection $connection) { - $this->connection = $connection; - } - - /** - * @return string - */ - public function getName() { - return 'Fix permissions so avatars can be stored again'; - } - - /** - * @param IOutput $output - */ - public function run(IOutput $output) { - $output->startProgress(2); - $this->fixUserRootPermissions(); - $output->advance(); - $this->fixAvatarPermissions(); - $output->finishProgress(); - } - - /** - * Make sure all user roots have permissions 23 (all but share) - */ - protected function fixUserRootPermissions() { - $qb = $this->connection->getQueryBuilder(); - $qb2 = $this->connection->getQueryBuilder(); - - $qb->select('numeric_id') - ->from('storages') - ->where($qb->expr()->like('id', $qb2->createParameter('like'))); - - if ($this->connection->getDatabasePlatform() instanceof OraclePlatform) { - // '' is null on oracle - $path = $qb2->expr()->isNull('path'); - } else { - $path = $qb2->expr()->eq('path', $qb2->createNamedParameter('')); - } - - $qb2->update('filecache') - ->set('permissions', $qb2->createNamedParameter(23)) - ->where($path) - ->andWhere($qb2->expr()->in('storage', $qb2->createFunction($qb->getSQL()))) - ->andWhere($qb2->expr()->neq('permissions', $qb2->createNamedParameter(23))) - ->setParameter('like', 'home::%'); - - - $qb2->execute(); - } - - /** - * Make sure all avatar files in the user roots have permission 27 - */ - protected function fixAvatarPermissions() { - $qb = $this->connection->getQueryBuilder(); - $qb2 = $this->connection->getQueryBuilder(); - - $qb->select('numeric_id') - ->from('storages') - ->where($qb->expr()->like('id', $qb2->createParameter('like'))); - - $qb2->update('filecache') - ->set('permissions', $qb2->createNamedParameter(27)) - ->where($qb2->expr()->like('path', $qb2->createNamedParameter('avatar.%'))) - ->andWhere($qb2->expr()->in('storage', $qb2->createFunction($qb->getSQL()))) - ->andWhere($qb2->expr()->neq('permissions', $qb2->createNamedParameter(27))) - ->setParameter('like', 'home::%'); - - $qb2->execute(); - } - -} - diff --git a/lib/private/Server.php b/lib/private/Server.php index d88a687bbc4..a514534049d 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -377,7 +377,7 @@ class Server extends ServerContainer implements IServerContainer { $version = implode(',', $v); $instanceId = \OC_Util::getInstanceId(); $path = \OC::$SERVERROOT; - $prefix = md5($instanceId . '-' . $version . '-' . $path); + $prefix = md5($instanceId . '-' . $version . '-' . $path . '-' . \OC::$WEBROOT); return new \OC\Memcache\Factory($prefix, $c->getLogger(), $config->getSystemValue('memcache.local', null), $config->getSystemValue('memcache.distributed', null), @@ -792,7 +792,8 @@ class Server extends ServerContainer implements IServerContainer { $c->getEncryptionManager(), $c->getUserManager(), $c->getLockingProvider(), - new \OC\Settings\Mapper($c->getDatabaseConnection()) + new \OC\Settings\Mapper($c->getDatabaseConnection()), + $c->getURLGenerator() ); return $manager; }); diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php index 949826aa246..7a339b94199 100644 --- a/lib/private/Settings/Manager.php +++ b/lib/private/Settings/Manager.php @@ -29,6 +29,7 @@ use OCP\IConfig; use OCP\IDBConnection; use OCP\IL10N; use OCP\ILogger; +use OCP\IURLGenerator; use OCP\IUserManager; use OCP\Lock\ILockingProvider; use OCP\Settings\ISettings; @@ -55,6 +56,8 @@ class Manager implements IManager { private $userManager; /** @var ILockingProvider */ private $lockingProvider; + /** @var IURLGenerator */ + private $url; /** * @param ILogger $log @@ -65,7 +68,7 @@ class Manager implements IManager { * @param IUserManager $userManager * @param ILockingProvider $lockingProvider * @param Mapper $mapper - * @internal param IDBConnection $dbc + * @param IURLGenerator $url */ public function __construct( ILogger $log, @@ -75,7 +78,8 @@ class Manager implements IManager { EncryptionManager $encryptionManager, IUserManager $userManager, ILockingProvider $lockingProvider, - Mapper $mapper + Mapper $mapper, + IURLGenerator $url ) { $this->log = $log; $this->dbc = $dbc; @@ -85,6 +89,7 @@ class Manager implements IManager { $this->encryptionManager = $encryptionManager; $this->userManager = $userManager; $this->lockingProvider = $lockingProvider; + $this->url = $url; } /** @@ -260,11 +265,11 @@ class Manager implements IManager { public function getAdminSections() { // built-in sections $sections = [ - 0 => [new Section('server', $this->l->t('Server settings'), 0)], - 5 => [new Section('sharing', $this->l->t('Sharing'), 0)], - 45 => [new Section('encryption', $this->l->t('Encryption'), 0)], - 98 => [new Section('additional', $this->l->t('Additional settings'), 0)], - 99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0)], + 0 => [new Section('server', $this->l->t('Server settings'), 0, $this->url->imagePath('settings', 'admin.svg'))], + 5 => [new Section('sharing', $this->l->t('Sharing'), 0, $this->url->imagePath('core', 'actions/share.svg'))], + 45 => [new Section('encryption', $this->l->t('Encryption'), 0, $this->url->imagePath('core', 'actions/password.svg'))], + 98 => [new Section('additional', $this->l->t('Additional settings'), 0, $this->url->imagePath('core', 'actions/settings-dark.svg'))], + 99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0, $this->url->imagePath('settings', 'help.svg'))], ]; $rows = $this->mapper->getAdminSectionsFromDB(); diff --git a/lib/private/Settings/Section.php b/lib/private/Settings/Section.php index b3cf242279f..c89a3999c4e 100644 --- a/lib/private/Settings/Section.php +++ b/lib/private/Settings/Section.php @@ -23,25 +23,29 @@ namespace OC\Settings; -use OCP\Settings\ISection; +use OCP\Settings\IIconSection; -class Section implements ISection { +class Section implements IIconSection { /** @var string */ private $id; /** @var string */ private $name; /** @var int */ private $priority; + /** @var string */ + private $icon; /** * @param string $id * @param string $name * @param int $priority + * @param string $icon */ - public function __construct($id, $name, $priority) { + public function __construct($id, $name, $priority, $icon = '') { $this->id = $id; $this->name = $name; $this->priority = $priority; + $this->icon = $icon; } /** @@ -74,4 +78,15 @@ class Section implements ISection { public function getPriority() { return $this->priority; } + + /** + * returns the relative path to an 16*16 icon describing the section. + * e.g. '/core/img/places/files.svg' + * + * @returns string + * @since 12 + */ + public function getIcon() { + return $this->icon; + } } diff --git a/lib/private/Setup.php b/lib/private/Setup.php index 81a5343fe21..d9997767684 100644 --- a/lib/private/Setup.php +++ b/lib/private/Setup.php @@ -125,8 +125,8 @@ class Setup { public function getSupportedDatabases($allowAllDatabases = false) { $availableDatabases = array( 'sqlite' => array( - 'type' => 'class', - 'call' => 'SQLite3', + 'type' => 'pdo', + 'call' => 'sqlite', 'name' => 'SQLite' ), 'mysql' => array( @@ -163,9 +163,7 @@ class Setup { $type = $availableDatabases[$database]['type']; $call = $availableDatabases[$database]['call']; - if($type === 'class') { - $working = $this->class_exists($call); - } elseif ($type === 'function') { + if ($type === 'function') { $working = $this->is_callable($call); } elseif($type === 'pdo') { $working = in_array($call, $this->getAvailableDbDriversForPdo(), TRUE); diff --git a/lib/private/SubAdmin.php b/lib/private/SubAdmin.php index 9a2beed09fe..0650c7c6c01 100644 --- a/lib/private/SubAdmin.php +++ b/lib/private/SubAdmin.php @@ -188,7 +188,7 @@ class SubAdmin extends PublicEmitter { * @param IGroup $group * @return bool */ - public function isSubAdminofGroup(IUser $user, IGroup $group) { + public function isSubAdminOfGroup(IUser $user, IGroup $group) { $qb = $this->dbConn->getQueryBuilder(); /* diff --git a/lib/private/Template/CSSResourceLocator.php b/lib/private/Template/CSSResourceLocator.php index 351e6d1366f..b306e078cd2 100644 --- a/lib/private/Template/CSSResourceLocator.php +++ b/lib/private/Template/CSSResourceLocator.php @@ -39,7 +39,7 @@ class CSSResourceLocator extends ResourceLocator { * @param array $party_map * @param SCSSCacher $scssCacher */ - public function __construct(ILogger $logger, $theme, $core_map, $party_map, SCSSCacher $scssCacher) { + public function __construct(ILogger $logger, $theme, $core_map, $party_map, $scssCacher) { $this->scssCacher = $scssCacher; parent::__construct($logger, $theme, $core_map, $party_map); @@ -49,20 +49,22 @@ class CSSResourceLocator extends ResourceLocator { * @param string $style */ public function doFind($style) { + $app = substr($style, 0, strpos($style, '/')); if (strpos($style, '3rdparty') === 0 && $this->appendIfExist($this->thirdpartyroot, $style.'.css') - || $this->cacheAndAppendScssIfExist($this->serverroot, $style.'.scss') + || $this->cacheAndAppendScssIfExist($this->serverroot, $style.'.scss', $app) || $this->cacheAndAppendScssIfExist($this->serverroot, 'core/'.$style.'.scss') || $this->appendIfExist($this->serverroot, $style.'.css') || $this->appendIfExist($this->serverroot, 'core/'.$style.'.css') ) { return; } - $app = substr($style, 0, strpos($style, '/')); $style = substr($style, strpos($style, '/')+1); $app_path = \OC_App::getAppPath($app); $app_url = \OC_App::getAppWebPath($app); - $this->append($app_path, $style.'.css', $app_url); + if(!$this->cacheAndAppendScssIfExist($app_path, $style.'.scss', $app)) { + $this->append($app_path, $style.'.css', $app_url); + } } /** @@ -80,17 +82,21 @@ class CSSResourceLocator extends ResourceLocator { * * @param string $root path to check * @param string $file the filename - * @param string|null $webRoot base for path, default map $root to $webRoot * @return bool True if the resource was found and cached, false otherwise */ - protected function cacheAndAppendScssIfExist($root, $file, $webRoot = null) { + protected function cacheAndAppendScssIfExist($root, $file, $app = 'core') { if (is_file($root.'/'.$file)) { - if($this->scssCacher->process($root, $file)) { - $this->append($root, $this->scssCacher->getCachedSCSS('core', $file), $webRoot, false); - return true; + if($this->scssCacher !== null) { + if($this->scssCacher->process($root, $file, $app)) { + $this->append($root, $this->scssCacher->getCachedSCSS($app, $file), false); + return true; + } else { + $this->logger->error('Failed to compile and/or save '.$root.'/'.$file, ['app' => 'core']); + return false; + } } else { - $this->logger->error('Failed to compile and/or save '.$root.'/'.$file, ['app' => 'core']); - return false; + $this->logger->error('Scss is disabled for '.$root.'/'.$file.', ignoring', ['app' => 'core']); + return true; } } return false; diff --git a/lib/private/Template/SCSSCacher.php b/lib/private/Template/SCSSCacher.php index 0c1711b9fb7..d6f5a2c6fd3 100644 --- a/lib/private/Template/SCSSCacher.php +++ b/lib/private/Template/SCSSCacher.php @@ -63,9 +63,10 @@ class SCSSCacher { * Process the caching process if needed * @param string $root Root path to the nextcloud installation * @param string $file + * @param string $app The app name * @return boolean */ - public function process($root, $file) { + public function process($root, $file, $app) { $path = explode('/', $root . '/' . $file); $fileNameSCSS = array_pop($path); @@ -78,10 +79,10 @@ class SCSSCacher { $webDir = implode('/', $webDir); try { - $folder = $this->appData->getFolder('core'); + $folder = $this->appData->getFolder($app); } catch(NotFoundException $e) { // creating css appdata folder - $folder = $this->appData->newFolder('core'); + $folder = $this->appData->newFolder($app); } if($this->isCached($fileNameCSS, $fileNameSCSS, $folder, $path)) { diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php index 2551f8417a5..7ded109f76b 100644 --- a/lib/private/TemplateLayout.php +++ b/lib/private/TemplateLayout.php @@ -160,16 +160,14 @@ class TemplateLayout extends \OC_Template { $this->append( 'jsfiles', $web.'/'.$file . $this->getVersionHashSuffix() ); } - // Add the css files and check if server is already installed to prevent - // appdata initialisation before database configuration - if(\OC::$server->getSystemConfig()->getValue('installed', false)) { + // Do not initialise scss appdata until we have a fully installed instance + // Do not load scss for update, errors, installation or login page + if(\OC::$server->getSystemConfig()->getValue('installed', false) + && !\OCP\Util::needUpgrade() + && strpos(\OC::$server->getRequest()->getRequestUri(), \OC::$server->getURLGenerator()->linkToRoute('core.login.tryLogin')) !== 0) { $cssFiles = self::findStylesheetFiles(\OC_Util::$styles); } else { - $cssFiles = array( - [\OC::$SERVERROOT, \OC::$WEBROOT, 'core/css/global.css'], - [\OC::$SERVERROOT, \OC::$WEBROOT, 'core/css/fonts.css'], - [\OC::$SERVERROOT, \OC::$WEBROOT, 'core/css/installation.css'] - ); + $cssFiles = self::findStylesheetFiles(\OC_Util::$styles, false); } $this->assign('cssfiles', array()); $this->assign('printcssfiles', []); @@ -199,16 +197,20 @@ class TemplateLayout extends \OC_Template { * @param array $styles * @return array */ - static public function findStylesheetFiles($styles) { + static public function findStylesheetFiles($styles, $compileScss = true) { // Read the selected theme from the config file $theme = \OC_Util::getTheme(); - $SCSSCacher = new SCSSCacher( - \OC::$server->getLogger(), - \OC::$server->getAppDataDir('css'), - \OC::$server->getURLGenerator(), - \OC::$server->getSystemConfig() - ); + if($compileScss) { + $SCSSCacher = new SCSSCacher( + \OC::$server->getLogger(), + \OC::$server->getAppDataDir('css'), + \OC::$server->getURLGenerator(), + \OC::$server->getSystemConfig() + ); + } else { + $SCSSCacher = null; + } $locator = new \OC\Template\CSSResourceLocator( \OC::$server->getLogger(), diff --git a/lib/private/legacy/files.php b/lib/private/legacy/files.php index b6c6857a1bf..8c9adad0d49 100644 --- a/lib/private/legacy/files.php +++ b/lib/private/legacy/files.php @@ -148,6 +148,7 @@ class OC_Files { $streamer->sendHeaders($name); $executionTime = intval(OC::$server->getIniWrapper()->getNumeric('max_execution_time')); set_time_limit(0); + ignore_user_abort(true); if ($getType === self::ZIP_FILES) { foreach ($files as $file) { $file = $dir . '/' . $file; diff --git a/lib/private/legacy/helper.php b/lib/private/legacy/helper.php index 9c4bc895fb9..dfe2e09afff 100644 --- a/lib/private/legacy/helper.php +++ b/lib/private/legacy/helper.php @@ -52,6 +52,7 @@ class OC_Helper { /** * Creates an absolute url for public use + * * @param string $service id * @param bool $add_slash * @return string the url @@ -62,13 +63,14 @@ class OC_Helper { if ($service === 'files') { $url = OC::$server->getURLGenerator()->getAbsoluteURL('/s'); } else { - $url = OC::$server->getURLGenerator()->getAbsoluteURL(OC::$server->getURLGenerator()->linkTo('', 'public.php').'?service='.$service); + $url = OC::$server->getURLGenerator()->getAbsoluteURL(OC::$server->getURLGenerator()->linkTo('', 'public.php') . '?service=' . $service); } return $url . (($add_slash && $service[strlen($service) - 1] != '/') ? '/' : ''); } /** * Make a human file size + * * @param int $bytes file size in bytes * @return string a human readable file size * @@ -104,6 +106,7 @@ class OC_Helper { /** * Make a php file size + * * @param int $bytes file size in bytes * @return string a php parseable file size * @@ -130,6 +133,7 @@ class OC_Helper { /** * Make a computer file size + * * @param string $str file size in human readable format * @return float a file size in bytes * @@ -172,6 +176,7 @@ class OC_Helper { /** * Recursive copying of folders + * * @param string $src source folder * @param string $dest target folder * @@ -194,6 +199,7 @@ class OC_Helper { /** * Recursive deletion of folders + * * @param string $dir path to the folder * @param bool $deleteSelf if set to false only the content of the folder will be deleted * @return bool @@ -393,6 +399,7 @@ class OC_Helper { /** * performs a search in a nested array + * * @param array $haystack the array to be searched * @param string $needle the search string * @param string $index optional, only search this key name @@ -425,7 +432,7 @@ class OC_Helper { * @return int number of bytes representing */ public static function maxUploadFilesize($dir, $freeSpace = null) { - if (is_null($freeSpace) || $freeSpace < 0){ + if (is_null($freeSpace) || $freeSpace < 0) { $freeSpace = self::freeSpace($dir); } return min($freeSpace, self::uploadLimit()); @@ -443,7 +450,7 @@ class OC_Helper { $freeSpace = max($freeSpace, 0); return $freeSpace; } else { - return (INF > 0)? INF: PHP_INT_MAX; // work around https://bugs.php.net/bug.php?id=69188 + return (INF > 0) ? INF : PHP_INT_MAX; // work around https://bugs.php.net/bug.php?id=69188 } } @@ -510,7 +517,7 @@ class OC_Helper { if (empty($paths)) { $paths = '/usr/local/bin /usr/bin /opt/bin /bin'; } else { - $paths = str_replace(':',' ',getenv('PATH')); + $paths = str_replace(':', ' ', getenv('PATH')); } $command = 'find ' . $paths . ' -name ' . escapeshellarg($program) . ' 2> /dev/null'; exec($command, $output, $returnCode); @@ -533,6 +540,12 @@ class OC_Helper { * @throws \OCP\Files\NotFoundException */ public static function getStorageInfo($path, $rootInfo = null) { + $memcache = \OC::$server->getMemCacheFactory()->create('storageInfo'); + $cacheKey = $rootInfo ? '__root__' . md5($path) : md5($path); + $cached = $memcache->get($cacheKey); + if (is_array($cached)) { + return $cached; + } // return storage info without adding mount points $includeExtStorage = \OC::$server->getSystemConfig()->getValue('quota_include_external_storage', false); @@ -597,10 +610,20 @@ class OC_Helper { $ownerId = $storage->getOwner($path); $ownerDisplayName = ''; $owner = \OC::$server->getUserManager()->get($ownerId); - if($owner) { + if ($owner) { $ownerDisplayName = $owner->getDisplayName(); } + $memcache->set($cacheKey, [ + 'free' => $free, + 'used' => $used, + 'quota' => $quota, + 'total' => $total, + 'relative' => $relative, + 'owner' => $ownerId, + 'ownerDisplayName' => $ownerDisplayName, + ], 5 * 60); + return [ 'free' => $free, 'used' => $used, @@ -645,6 +668,7 @@ class OC_Helper { /** * Returns whether the config file is set manually to read-only + * * @return bool */ public static function isReadOnlyConfigEnabled() { diff --git a/lib/public/Files/Cache/IScanner.php b/lib/public/Files/Cache/IScanner.php index 60282996232..8aa4dc04aa9 100644 --- a/lib/public/Files/Cache/IScanner.php +++ b/lib/public/Files/Cache/IScanner.php @@ -32,6 +32,7 @@ interface IScanner { const SCAN_RECURSIVE = true; const SCAN_SHALLOW = false; + const REUSE_NONE = 0; const REUSE_ETAG = 1; const REUSE_SIZE = 2; diff --git a/lib/public/Files/Storage/IStorage.php b/lib/public/Files/Storage/IStorage.php index b806dc3b7d1..27b8f1d0697 100644 --- a/lib/public/Files/Storage/IStorage.php +++ b/lib/public/Files/Storage/IStorage.php @@ -383,7 +383,7 @@ interface IStorage { public function verifyPath($path, $fileName); /** - * @param \OCP\Files\Storage $sourceStorage + * @param \OCP\Files\Storage|\OCP\Files\Storage\IStorage $sourceStorage * @param string $sourceInternalPath * @param string $targetInternalPath * @return bool @@ -392,7 +392,7 @@ interface IStorage { public function copyFromStorage(\OCP\Files\Storage $sourceStorage, $sourceInternalPath, $targetInternalPath); /** - * @param \OCP\Files\Storage $sourceStorage + * @param \OCP\Files\Storage|\OCP\Files\Storage\IStorage $sourceStorage * @param string $sourceInternalPath * @param string $targetInternalPath * @return bool diff --git a/lib/public/Settings/IIconSection.php b/lib/public/Settings/IIconSection.php new file mode 100644 index 00000000000..089b9b094e9 --- /dev/null +++ b/lib/public/Settings/IIconSection.php @@ -0,0 +1,38 @@ +<?php +/** + * @copyright Copyright (c) 2017, Joas Schilling <coding@schilljs.com> + * + * @author Joas Schilling <coding@schilljs.com> + * + * @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\Settings; + +/** + * @since 12 + */ +interface IIconSection extends ISection { + /** + * returns the relative path to an 16*16 icon describing the section. + * e.g. '/core/img/places/files.svg' + * + * @returns string + * @since 12 + */ + public function getIcon(); +} diff --git a/lib/public/Settings/ISection.php b/lib/public/Settings/ISection.php index 5edf5de0ca4..3c08b74bdc9 100644 --- a/lib/public/Settings/ISection.php +++ b/lib/public/Settings/ISection.php @@ -24,6 +24,7 @@ namespace OCP\Settings; /** + * @deprecated 12 Use IIconSection instead * @since 9.1 */ interface ISection { diff --git a/settings/Controller/AdminSettingsController.php b/settings/Controller/AdminSettingsController.php index ef70caf5690..4bc986e708e 100644 --- a/settings/Controller/AdminSettingsController.php +++ b/settings/Controller/AdminSettingsController.php @@ -28,7 +28,9 @@ use OCP\AppFramework\Controller; use OCP\AppFramework\Http\TemplateResponse; use OCP\INavigationManager; use OCP\IRequest; +use OCP\Settings\IIconSection; use OCP\Settings\IManager as ISettingsManager; +use OCP\Settings\ISection; use OCP\Template; /** @@ -133,10 +135,16 @@ class AdminSettingsController extends Controller { /** @var \OC\Settings\Section[] $prioritizedSections */ foreach($sections as $prioritizedSections) { foreach ($prioritizedSections as $section) { + $icon = ''; + if ($section instanceof IIconSection) { + $icon = $section->getIcon(); + } + $templateParameters[] = [ 'anchor' => $section->getID(), 'section-name' => $section->getName(), 'active' => $section->getID() === $currentSection, + 'icon' => $icon, ]; } } diff --git a/settings/Controller/UsersController.php b/settings/Controller/UsersController.php index 28b8d2648d9..43a38432499 100644 --- a/settings/Controller/UsersController.php +++ b/settings/Controller/UsersController.php @@ -346,13 +346,12 @@ class UsersController extends Controller { } if (empty($groups)) { - $groups = $this->groupManager->getSubAdmin()->getSubAdminsGroups($currentUser); - // New class returns IGroup[] so convert back - $gids = []; - foreach ($groups as $group) { - $gids[] = $group->getGID(); - } - $groups = $gids; + return new DataResponse( + array( + 'message' => $this->l10n->t('No valid group selected'), + ), + Http::STATUS_FORBIDDEN + ); } } @@ -380,7 +379,7 @@ class UsersController extends Controller { ); } - if($user instanceof User) { + if($user instanceof IUser) { if($groups !== null) { foreach($groups as $groupName) { $group = $this->groupManager->get($groupName); diff --git a/settings/ajax/togglegroups.php b/settings/ajax/togglegroups.php deleted file mode 100644 index b9958bef0c9..00000000000 --- a/settings/ajax/togglegroups.php +++ /dev/null @@ -1,92 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bart Visscher <bartv@thisnet.nl> - * @author Christopher Schäpers <kondou@ts.unde.re> - * @author Georg Ehrke <georg@owncloud.com> - * @author Jakob Sack <mail@jakobsack.de> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Robin Appelman <robin@icewind.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @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/> - * - */ -OC_JSON::checkSubAdminUser(); -OCP\JSON::callCheck(); - -$lastConfirm = (int) \OC::$server->getSession()->get('last-password-confirm'); -if ($lastConfirm < (time() - 30 * 60 + 15)) { // allow 15 seconds delay - $l = \OC::$server->getL10N('core'); - OC_JSON::error(array( 'data' => array( 'message' => $l->t('Password confirmation is required')))); - exit(); -} - -$success = true; -$username = (string)$_POST['username']; -$group = (string)$_POST['group']; - -if($username === OC_User::getUser() && $group === "admin" && OC_User::isAdminUser($username)) { - $l = \OC::$server->getL10N('core'); - OC_JSON::error(array( 'data' => array( 'message' => $l->t('Admins can\'t remove themself from the admin group')))); - exit(); -} - -$isUserAccessible = false; -$isGroupAccessible = false; -$currentUserObject = \OC::$server->getUserSession()->getUser(); -$targetUserObject = \OC::$server->getUserManager()->get($username); -$targetGroupObject = \OC::$server->getGroupManager()->get($group); -if($targetUserObject !== null && $currentUserObject !== null && $targetGroupObject !== null) { - $isUserAccessible = \OC::$server->getGroupManager()->getSubAdmin()->isUserAccessible($currentUserObject, $targetUserObject); - $isGroupAccessible = \OC::$server->getGroupManager()->getSubAdmin()->isSubAdminofGroup($currentUserObject, $targetGroupObject); -} - -if(!OC_User::isAdminUser(OC_User::getUser()) - && (!$isUserAccessible - || !$isGroupAccessible)) { - $l = \OC::$server->getL10N('core'); - OC_JSON::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); - exit(); -} - -if(!OC_Group::groupExists($group)) { - OC_Group::createGroup($group); -} - -$l = \OC::$server->getL10N('settings'); - -$error = $l->t("Unable to add user to group %s", $group); -$action = "add"; - -// Toggle group -if( OC_Group::inGroup( $username, $group )) { - $action = "remove"; - $error = $l->t("Unable to remove user from group %s", $group); - $success = OC_Group::removeFromGroup( $username, $group ); - $usersInGroup=OC_Group::usersInGroup($group); -} -else{ - $success = OC_Group::addToGroup( $username, $group ); -} - -// Return Success story -if( $success ) { - OC_JSON::success(array("data" => array( "username" => $username, "action" => $action, "groupname" => $group ))); -} -else{ - OC_JSON::error(array("data" => array( "message" => $error ))); -} diff --git a/settings/css/settings.css b/settings/css/settings.css index 557395c5717..c0c79ca65ef 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -7,6 +7,26 @@ input#openid, input#webdav { width:20em; } /* PERSONAL */ +/* icons for sidebar */ +.nav-icon-personal-settings { + background-image: url('../img/personal.svg?v=1'); +} +.nav-icon-sessions { + background-image: url('../img/toggle-filelist.svg?v=1'); +} +.nav-icon-apppasswords { + background-image: url('../img/password.svg?v=1'); +} +.nav-icon-clientsbox { + background-image: url('../img/change.svg?v=1'); +} +.nav-icon-federated-cloud { + background-image: url('../img/share.svg?v=1'); +} +.nav-icon-second-factor-backup-codes { + background-image: url('../img/password.svg?v=1'); +} + #avatarform { width: 160px; padding-right: 0; @@ -104,7 +124,7 @@ input#openid, input#webdav { width:20em; } } #personal-settings-container > div > form span[class^="icon-checkmark"] { position: absolute; - left: 239px; + left: 228px; top: 82px; pointer-events: none; } @@ -399,7 +419,7 @@ table.grid th, table.grid td { font-weight: normal; } td.name, td.password { padding-left:.8em; } -td.password>img,td.displayName>img, td.remove>a, td.quota>img { visibility:hidden; } +td.password>img,td.displayName>img, td.remove>a, td.quota>img { visibility:hidden; vertical-align: middle;} td.password, td.quota, td.displayName { width:12em; cursor:pointer; } td.password>span, td.quota>span, rd.displayName>span { margin-right: 1.2em; color: #C7C7C7; } span.usersLastLoginTooltip { white-space: nowrap; } @@ -492,6 +512,12 @@ input.userFilter {width: 200px;} /* APPS */ +#app-content > svg.app-filter { + float: left; + height: 0; + width: 0; +} + .appinfo { margin: 1em 40px; } #app-navigation .appwarning { background: #fcc; @@ -542,6 +568,10 @@ span.version { flex-wrap: wrap; align-content: flex-start; } +#apps-list.hidden { + display: none; +} + #apps-list .section { position: relative; flex: 0 0 auto; @@ -703,6 +733,17 @@ table.grid td.date{ } /* ADMIN */ + +/* Navigation icons */ +#app-navigation img { + margin-bottom: -3px; + margin-right: 6px; + width: 16px; +} +#app-navigation li span.no-icon { + padding-left: 32px; +} + #security-warning li { list-style: initial; margin: 10px 0; @@ -804,9 +845,9 @@ span.indeterminate { /* PASSWORD */ #passwordform .strengthify-wrapper { position: absolute; - left: 186px; - width: 131px; - margin-top: -7px; + left: 0; + width: 130px; + margin-top: -6px; } /* OPERA hack for strengthify*/ diff --git a/settings/img/change.svg b/settings/img/change.svg new file mode 100644 index 00000000000..cbc5d982b30 --- /dev/null +++ b/settings/img/change.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1"> + <path d="m7.9375 0c-3.1175 0.023214-6.0756 1.876-7.3438 4.9375l2.7812 1.1563c1.0568-2.5513 3.98-3.7756 6.5312-2.7188 0.8628 0.3573 1.5738 0.9274 2.0938 1.625l-2 2h6v-6l-1.875 1.875c-0.802-0.9616-1.825-1.7688-3.063-2.2812-1.02-0.4227-2.0853-0.60149-3.1245-0.59375z"/> + <path d="m0 9.5v6l2.0938-2.094c0.7676 0.843 1.7205 1.535 2.8437 2 4.082 1.691 8.7775-0.262 10.468-4.344l-2.781-1.1558c-1.057 2.5508-3.98 3.7758-6.5312 2.7188-0.7435-0.308-1.3509-0.805-1.8438-1.375l1.75-1.75h-6z"/> +</svg> diff --git a/settings/img/password.svg b/settings/img/password.svg new file mode 100644 index 00000000000..3d161917f6e --- /dev/null +++ b/settings/img/password.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 71 100"><path d="M35.5 6.25c-13.807 0-25 11.193-25 25v12.5H4.25V87.5h62.5V43.75H60.5v-12.5c0-13.807-11.194-25-25-25zm0 12.5c6.904 0 12.5 5.596 12.5 12.5v12.5H23v-12.5c0-6.904 5.596-12.5 12.5-12.5z"/></svg>
\ No newline at end of file diff --git a/settings/img/share.svg b/settings/img/share.svg new file mode 100644 index 00000000000..68f2100e490 --- /dev/null +++ b/settings/img/share.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 16 16"><path d="M12.228 1a2.457 2.457 0 0 0-2.46 2.454c0 .075.01.15.016.224L5.05 6.092a2.445 2.445 0 0 0-1.596-.586A2.453 2.453 0 0 0 1 7.96a2.453 2.453 0 0 0 2.454 2.455 2.45 2.45 0 0 0 1.46-.477l4.865 2.474c-.004.044-.01.09-.01.134a2.457 2.457 0 1 0 .804-1.818l-4.696-2.4c.02-.123.035-.25.035-.378 0-.072-.01-.144-.015-.214l4.74-2.414A2.457 2.457 0 1 0 12.228.99z"/></svg>
\ No newline at end of file diff --git a/settings/img/toggle-filelist.svg b/settings/img/toggle-filelist.svg new file mode 100644 index 00000000000..47f019057ea --- /dev/null +++ b/settings/img/toggle-filelist.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 16 16" version="1"><rect rx=".5" ry=".5" height="4" width="4" y="1" x="1"/><rect rx=".5" ry=".5" height="1" width="9" y="2" x="6"/><rect rx=".5" ry=".5" height="4" width="4" y="6" x="1"/><rect rx=".5" ry=".5" height="1" width="9" y="7" x="6"/><rect rx=".5" ry=".5" height="4" width="4" y="11" x="1"/><rect rx=".5" ry=".5" height="1" width="9" y="12" x="6"/></svg>
\ No newline at end of file diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js index cfe01c17530..aac1609bce7 100644 --- a/settings/js/users/groups.js +++ b/settings/js/users/groups.js @@ -225,7 +225,9 @@ GroupList = { toggleAddGroup: function (event) { if (GroupList.isAddGroupButtonVisible()) { - event.stopPropagation(); + if (event) { + event.stopPropagation(); + } $('#newgroup-form').show(); $('#newgroup-init').hide(); $('#newgroupname').focus(); diff --git a/settings/js/users/users.js b/settings/js/users/users.js index a2ccc059f15..3cf7b5e810a 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -420,42 +420,63 @@ var UserList = { var $element = $(element); - var checkHandler = null; + var addUserToGroup = null, + removeUserFromGroup = null; if(user) { // Only if in a user row, and not the #newusergroups select - checkHandler = function (group) { - if (user === OC.currentUser && group === 'admin') { + var handleUserGroupMembership = function (group, add) { + if (user === OC.getCurrentUser().uid && group === 'admin') { return false; } if (!OC.isUserAdmin() && checked.length === 1 && checked[0] === group) { return false; } - $.post( - OC.filePath('settings', 'ajax', 'togglegroups.php'), - { - username: user, - group: group + + if (add && OC.isUserAdmin() && UserList.availableGroups.indexOf(group) === -1) { + GroupList.createGroup(group); + if (UserList.availableGroups.indexOf(group) === -1) { + UserList.availableGroups.push(group); + } + } + + $.ajax({ + url: OC.linkToOCS('cloud/users/' + user , 2) + 'groups', + data: { + groupid: group }, - function (response) { - if (response.status === 'success') { - GroupList.update(); - var groupName = response.data.groupname; - if (UserList.availableGroups.indexOf(groupName) === -1 && - response.data.action === 'add' - ) { - UserList.availableGroups.push(groupName); - } + type: add ? 'POST' : 'DELETE', + beforeSend: function (request) { + request.setRequestHeader('Accept', 'application/json'); + }, + success: function() { + GroupList.update(); + if (add && UserList.availableGroups.indexOf(group) === -1) { + UserList.availableGroups.push(group); + } - if (response.data.action === 'add') { - GroupList.incGroupCount(groupName); - } else { - GroupList.decGroupCount(groupName); - } + if (add) { + GroupList.incGroupCount(group); + } else { + GroupList.decGroupCount(group); } - if (response.data.message) { - OC.Notification.show(response.data.message); + }, + error: function() { + if (add) { + OC.Notification.show(t('settings', 'Unable to add user to group {group}', { + group: group + })); + } else { + OC.Notification.show(t('settings', 'Unable to remove user from group {group}', { + group: group + })); } } - ); + }); + }; + addUserToGroup = function (group) { + return handleUserGroupMembership(group, true); + }; + removeUserFromGroup = function (group) { + return handleUserGroupMembership(group, false); }; } var addGroup = function (select, group) { @@ -473,8 +494,8 @@ var UserList = { createText: label, selectedFirst: true, checked: checked, - oncheck: checkHandler, - onuncheck: checkHandler, + oncheck: addUserToGroup, + onuncheck: removeUserFromGroup, minWidth: 100 }); }, diff --git a/settings/l10n/ar.js b/settings/l10n/ar.js index f23e16c9091..7567276456c 100644 --- a/settings/l10n/ar.js +++ b/settings/l10n/ar.js @@ -15,9 +15,6 @@ OC.L10N.register( "Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل", "Your full name has been changed." : "اسمك الكامل تم تغييره.", "Email saved" : "تم حفظ البريد الإلكتروني", - "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين", - "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s", - "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s", "Couldn't update app." : "تعذر تحديث التطبيق.", "Sending..." : "جاري الارسال ...", "All" : "الكل", @@ -95,6 +92,9 @@ OC.L10N.register( "set new password" : "اعداد كلمة مرور جديدة", "Default" : "افتراضي", "Language changed" : "تم تغيير اللغة", + "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين", + "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s", + "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.", "Please wait...." : "الرجاء الانتظار ...", "Everything (fatal issues, errors, warnings, info, debug)" : "كل شيء (مشاكل فادحة, اخطاء , تحذيرات , معلومات , تصحيح الاخطاء)", diff --git a/settings/l10n/ar.json b/settings/l10n/ar.json index 7f9fbff55d3..a44eebfbfa8 100644 --- a/settings/l10n/ar.json +++ b/settings/l10n/ar.json @@ -13,9 +13,6 @@ "Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل", "Your full name has been changed." : "اسمك الكامل تم تغييره.", "Email saved" : "تم حفظ البريد الإلكتروني", - "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين", - "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s", - "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s", "Couldn't update app." : "تعذر تحديث التطبيق.", "Sending..." : "جاري الارسال ...", "All" : "الكل", @@ -93,6 +90,9 @@ "set new password" : "اعداد كلمة مرور جديدة", "Default" : "افتراضي", "Language changed" : "تم تغيير اللغة", + "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين", + "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s", + "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.", "Please wait...." : "الرجاء الانتظار ...", "Everything (fatal issues, errors, warnings, info, debug)" : "كل شيء (مشاكل فادحة, اخطاء , تحذيرات , معلومات , تصحيح الاخطاء)", diff --git a/settings/l10n/ast.js b/settings/l10n/ast.js index 743e0a2f967..5c0a54c4083 100644 --- a/settings/l10n/ast.js +++ b/settings/l10n/ast.js @@ -18,9 +18,6 @@ OC.L10N.register( "Your full name has been changed." : "Camudóse'l nome completu.", "Email saved" : "Corréu-e guardáu", "Couldn't remove app." : "Nun pudo desaniciase l'aplicación.", - "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador", - "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s", - "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s", "Couldn't update app." : "Nun pudo anovase l'aplicación.", "Add trusted domain" : "Amestar dominiu de confianza", "Sending..." : "Unviando...", @@ -131,6 +128,9 @@ OC.L10N.register( "set new password" : "afitar nueva contraseña", "Default" : "Predetermináu", "Language changed" : "Camudóse la llingua", + "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador", + "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s", + "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "¿De xuru que quies amestar \"{domain}\" como dominiu de confianza?", "Please wait...." : "Espera, por favor....", "Everything (fatal issues, errors, warnings, info, debug)" : "Too (Información, Avisos, Fallos, debug y problemes fatales)", diff --git a/settings/l10n/ast.json b/settings/l10n/ast.json index 25ec57af772..847b3822dc3 100644 --- a/settings/l10n/ast.json +++ b/settings/l10n/ast.json @@ -16,9 +16,6 @@ "Your full name has been changed." : "Camudóse'l nome completu.", "Email saved" : "Corréu-e guardáu", "Couldn't remove app." : "Nun pudo desaniciase l'aplicación.", - "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador", - "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s", - "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s", "Couldn't update app." : "Nun pudo anovase l'aplicación.", "Add trusted domain" : "Amestar dominiu de confianza", "Sending..." : "Unviando...", @@ -129,6 +126,9 @@ "set new password" : "afitar nueva contraseña", "Default" : "Predetermináu", "Language changed" : "Camudóse la llingua", + "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador", + "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s", + "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "¿De xuru que quies amestar \"{domain}\" como dominiu de confianza?", "Please wait...." : "Espera, por favor....", "Everything (fatal issues, errors, warnings, info, debug)" : "Too (Información, Avisos, Fallos, debug y problemes fatales)", diff --git a/settings/l10n/az.js b/settings/l10n/az.js index baa771e4def..a48f28672bc 100644 --- a/settings/l10n/az.js +++ b/settings/l10n/az.js @@ -32,9 +32,6 @@ OC.L10N.register( "Unable to change mail address" : "Mail ünvanını dəyişmək olmur", "Email saved" : "Məktub yadda saxlanıldı", "Couldn't remove app." : "Proqram təminatını silmək mümkün olmadı.", - "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz", - "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı", - "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı", "Couldn't update app." : "Proqram təminatını yeniləmək mümkün deyil.", "Add trusted domain" : "İnamlı domainlərə əlavə et", "Sending..." : "Göndərilir...", @@ -184,6 +181,9 @@ OC.L10N.register( "Default" : "Susmaya görə", "log-level out of allowed range" : "jurnal-səviyyəsi izin verilən aralıqdan kənardır", "Language changed" : "Dil dəyişdirildi", + "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz", + "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı", + "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı", "Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" adını inamlı domainlər siyahısına əlavə etməyinizdən əminsinizmi?", "Please wait...." : "Xahiş olunur gözləyəsiniz.", "Everything (fatal issues, errors, warnings, info, debug)" : "Hər şey(ən pis hadisələr, səhvlər, xəbərdarlıqlar, məlmat, araşdırma səhvləri)", diff --git a/settings/l10n/az.json b/settings/l10n/az.json index 203c526ba55..c1c57e15a07 100644 --- a/settings/l10n/az.json +++ b/settings/l10n/az.json @@ -30,9 +30,6 @@ "Unable to change mail address" : "Mail ünvanını dəyişmək olmur", "Email saved" : "Məktub yadda saxlanıldı", "Couldn't remove app." : "Proqram təminatını silmək mümkün olmadı.", - "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz", - "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı", - "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı", "Couldn't update app." : "Proqram təminatını yeniləmək mümkün deyil.", "Add trusted domain" : "İnamlı domainlərə əlavə et", "Sending..." : "Göndərilir...", @@ -182,6 +179,9 @@ "Default" : "Susmaya görə", "log-level out of allowed range" : "jurnal-səviyyəsi izin verilən aralıqdan kənardır", "Language changed" : "Dil dəyişdirildi", + "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz", + "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı", + "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı", "Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" adını inamlı domainlər siyahısına əlavə etməyinizdən əminsinizmi?", "Please wait...." : "Xahiş olunur gözləyəsiniz.", "Everything (fatal issues, errors, warnings, info, debug)" : "Hər şey(ən pis hadisələr, səhvlər, xəbərdarlıqlar, məlmat, araşdırma səhvləri)", diff --git a/settings/l10n/bg_BG.js b/settings/l10n/bg_BG.js index 02f75415856..51edd407da4 100644 --- a/settings/l10n/bg_BG.js +++ b/settings/l10n/bg_BG.js @@ -32,9 +32,6 @@ OC.L10N.register( "Unable to change mail address" : "Неуспешна промяна на адрес на електронна поща", "Email saved" : "Имейлът е запазен", "Couldn't remove app." : "Приложението не бе премахнато.", - "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".", - "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.", - "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.", "Couldn't update app." : "Приложението не бе обновено.", "Add trusted domain" : "Добавяне на сигурен домейн", "Sending..." : "Изпращане...", @@ -228,6 +225,9 @@ OC.L10N.register( "Default" : "Стандарт", "log-level out of allowed range" : "Ниво на проследяване \\(log-level\\) e извън допустимия обхват", "Language changed" : "Езикът е променен", + "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".", + "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.", + "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Сигурен/на ли сте, че искате \"{domain}\" да бъде добавен като сигурен домейн?", "Please wait...." : "Моля, изчакайте....", "iPhone" : "iPhone", diff --git a/settings/l10n/bg_BG.json b/settings/l10n/bg_BG.json index 054f5cdfda0..0443f8489af 100644 --- a/settings/l10n/bg_BG.json +++ b/settings/l10n/bg_BG.json @@ -30,9 +30,6 @@ "Unable to change mail address" : "Неуспешна промяна на адрес на електронна поща", "Email saved" : "Имейлът е запазен", "Couldn't remove app." : "Приложението не бе премахнато.", - "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".", - "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.", - "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.", "Couldn't update app." : "Приложението не бе обновено.", "Add trusted domain" : "Добавяне на сигурен домейн", "Sending..." : "Изпращане...", @@ -226,6 +223,9 @@ "Default" : "Стандарт", "log-level out of allowed range" : "Ниво на проследяване \\(log-level\\) e извън допустимия обхват", "Language changed" : "Езикът е променен", + "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".", + "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.", + "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Сигурен/на ли сте, че искате \"{domain}\" да бъде добавен като сигурен домейн?", "Please wait...." : "Моля, изчакайте....", "iPhone" : "iPhone", diff --git a/settings/l10n/bn_BD.js b/settings/l10n/bn_BD.js index 8b47f30f20d..195745a1b8e 100644 --- a/settings/l10n/bn_BD.js +++ b/settings/l10n/bn_BD.js @@ -12,9 +12,6 @@ OC.L10N.register( "Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।", "Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে", "Couldn't remove app." : "অ্যাপ অপসারণ করা গেলনা", - "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না", - "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ", - "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না", "Couldn't update app." : "অ্যাপ নবায়ন করা গেলনা।", "All" : "সবাই", "Error while disabling app" : "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ", @@ -72,6 +69,9 @@ OC.L10N.register( "set new password" : "নতুন কূটশব্দ নির্ধারণ করুন", "Default" : "পূর্বনির্ধারিত", "Language changed" : "ভাষা পরিবর্তন করা হয়েছে", + "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না", + "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ", + "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না", "More" : "বেশী", "Less" : "কম", "Group" : "গোষ্ঠীসমূহ" diff --git a/settings/l10n/bn_BD.json b/settings/l10n/bn_BD.json index 716f5e23e75..6c6794cbe26 100644 --- a/settings/l10n/bn_BD.json +++ b/settings/l10n/bn_BD.json @@ -10,9 +10,6 @@ "Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।", "Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে", "Couldn't remove app." : "অ্যাপ অপসারণ করা গেলনা", - "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না", - "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ", - "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না", "Couldn't update app." : "অ্যাপ নবায়ন করা গেলনা।", "All" : "সবাই", "Error while disabling app" : "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ", @@ -70,6 +67,9 @@ "set new password" : "নতুন কূটশব্দ নির্ধারণ করুন", "Default" : "পূর্বনির্ধারিত", "Language changed" : "ভাষা পরিবর্তন করা হয়েছে", + "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না", + "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ", + "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না", "More" : "বেশী", "Less" : "কম", "Group" : "গোষ্ঠীসমূহ" diff --git a/settings/l10n/bs.js b/settings/l10n/bs.js index ec346198073..f1d6d4a48e7 100644 --- a/settings/l10n/bs.js +++ b/settings/l10n/bs.js @@ -28,9 +28,6 @@ OC.L10N.register( "Unable to change mail address" : "Nemoguće je izmjeniti adresu e-pošte", "Email saved" : "E-pošta je spremljena", "Couldn't remove app." : "Nije moguće ukloniti aplikaciju.", - "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe", - "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće", - "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće", "Couldn't update app." : "Ažuriranje aplikacije nije moguće.", "Add trusted domain" : "Dodaj pouzdanu domenu", "Sending..." : "Slanje...", @@ -158,6 +155,9 @@ OC.L10N.register( "change email address" : "promjeni adresu e-pošte", "Default" : "Zadano", "Language changed" : "Jezik je promijenjen", + "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe", + "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće", + "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li zaista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?", "Please wait...." : "Molim pričekajte...", "Everything (fatal issues, errors, warnings, info, debug)" : "Sve (fatalni problemi, greške, upozorenja, info, ispravljanje pogrešaka)", diff --git a/settings/l10n/bs.json b/settings/l10n/bs.json index 364c0bab5a6..b45efaeea0c 100644 --- a/settings/l10n/bs.json +++ b/settings/l10n/bs.json @@ -26,9 +26,6 @@ "Unable to change mail address" : "Nemoguće je izmjeniti adresu e-pošte", "Email saved" : "E-pošta je spremljena", "Couldn't remove app." : "Nije moguće ukloniti aplikaciju.", - "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe", - "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće", - "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće", "Couldn't update app." : "Ažuriranje aplikacije nije moguće.", "Add trusted domain" : "Dodaj pouzdanu domenu", "Sending..." : "Slanje...", @@ -156,6 +153,9 @@ "change email address" : "promjeni adresu e-pošte", "Default" : "Zadano", "Language changed" : "Jezik je promijenjen", + "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe", + "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće", + "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li zaista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?", "Please wait...." : "Molim pričekajte...", "Everything (fatal issues, errors, warnings, info, debug)" : "Sve (fatalni problemi, greške, upozorenja, info, ispravljanje pogrešaka)", diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js index b7c54a09206..917f5d41e4e 100644 --- a/settings/l10n/ca.js +++ b/settings/l10n/ca.js @@ -34,9 +34,6 @@ OC.L10N.register( "Unable to change mail address" : "No es pot canviar l'adreça de correu electrònic", "Email saved" : "S'ha desat el correu electrònic", "Couldn't remove app." : "No s'ha pogut eliminar l'aplicació", - "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin", - "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s", - "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s", "Couldn't update app." : "No s'ha pogut actualitzar l'aplicació.", "Add trusted domain" : "Afegir domini de confiança", "Migration in progress. Please wait until the migration is finished" : "Migració en progrés. Si us plau, espereu fins que finalitzi la migració", @@ -204,6 +201,9 @@ OC.L10N.register( "Default" : "Per defecte", "log-level out of allowed range" : "Nivell d'autenticació fora del rang permès", "Language changed" : "S'ha canviat l'idioma", + "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin", + "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s", + "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?", "Please wait...." : "Espereu...", "Everything (fatal issues, errors, warnings, info, debug)" : "Tot (problemes fatals, errors, avisos, informació, depuració)", diff --git a/settings/l10n/ca.json b/settings/l10n/ca.json index 62a7867f23a..67b310b196e 100644 --- a/settings/l10n/ca.json +++ b/settings/l10n/ca.json @@ -32,9 +32,6 @@ "Unable to change mail address" : "No es pot canviar l'adreça de correu electrònic", "Email saved" : "S'ha desat el correu electrònic", "Couldn't remove app." : "No s'ha pogut eliminar l'aplicació", - "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin", - "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s", - "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s", "Couldn't update app." : "No s'ha pogut actualitzar l'aplicació.", "Add trusted domain" : "Afegir domini de confiança", "Migration in progress. Please wait until the migration is finished" : "Migració en progrés. Si us plau, espereu fins que finalitzi la migració", @@ -202,6 +199,9 @@ "Default" : "Per defecte", "log-level out of allowed range" : "Nivell d'autenticació fora del rang permès", "Language changed" : "S'ha canviat l'idioma", + "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin", + "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s", + "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?", "Please wait...." : "Espereu...", "Everything (fatal issues, errors, warnings, info, debug)" : "Tot (problemes fatals, errors, avisos, informació, depuració)", diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js index 0d06d1a6042..0ce52997e1c 100644 --- a/settings/l10n/cs_CZ.js +++ b/settings/l10n/cs_CZ.js @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "Email uložen", "Password confirmation is required" : "Je vyžadováno potvrzení hesla", "Couldn't remove app." : "Nepodařilo se odebrat aplikaci.", - "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců", - "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s", - "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s", "Couldn't update app." : "Nelze aktualizovat aplikaci.", "Are you really sure you want add {domain} as trusted domain?" : "Jste si jisti, že chcete přidat {domain} mezi důvěryhodné domény?", "Add trusted domain" : "Přidat důvěryhodnou doménu", @@ -125,6 +122,8 @@ OC.L10N.register( "undo" : "vrátit zpět", "never" : "nikdy", "deleted {userName}" : "smazán {userName}", + "Unable to add user to group {group}" : "Nelze přidat uživatele do skupiny {group}", + "Unable to remove user from group {group}" : "Nelze odebrat uživatele ze skupiny {group}", "Add group" : "Přidat skupinu", "Invalid quota value \"{val}\"" : "Neplatná hodnota kvóty \"{val}\"", "no group" : "není ve skupině", @@ -341,6 +340,9 @@ OC.L10N.register( "Default" : "Výchozí", "log-level out of allowed range" : "úroveň logování z povoleného rozpětí", "Language changed" : "Jazyk byl změněn", + "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců", + "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s", + "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jste si jisti, že chcete přidat \"{domain}\" mezi důvěryhodné domény?", "Please wait...." : "Čekejte prosím...", "iPhone" : "iPhone", diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json index 30ce1f499e0..78f17d4f827 100644 --- a/settings/l10n/cs_CZ.json +++ b/settings/l10n/cs_CZ.json @@ -37,9 +37,6 @@ "Email saved" : "Email uložen", "Password confirmation is required" : "Je vyžadováno potvrzení hesla", "Couldn't remove app." : "Nepodařilo se odebrat aplikaci.", - "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců", - "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s", - "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s", "Couldn't update app." : "Nelze aktualizovat aplikaci.", "Are you really sure you want add {domain} as trusted domain?" : "Jste si jisti, že chcete přidat {domain} mezi důvěryhodné domény?", "Add trusted domain" : "Přidat důvěryhodnou doménu", @@ -123,6 +120,8 @@ "undo" : "vrátit zpět", "never" : "nikdy", "deleted {userName}" : "smazán {userName}", + "Unable to add user to group {group}" : "Nelze přidat uživatele do skupiny {group}", + "Unable to remove user from group {group}" : "Nelze odebrat uživatele ze skupiny {group}", "Add group" : "Přidat skupinu", "Invalid quota value \"{val}\"" : "Neplatná hodnota kvóty \"{val}\"", "no group" : "není ve skupině", @@ -339,6 +338,9 @@ "Default" : "Výchozí", "log-level out of allowed range" : "úroveň logování z povoleného rozpětí", "Language changed" : "Jazyk byl změněn", + "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců", + "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s", + "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jste si jisti, že chcete přidat \"{domain}\" mezi důvěryhodné domény?", "Please wait...." : "Čekejte prosím...", "iPhone" : "iPhone", diff --git a/settings/l10n/da.js b/settings/l10n/da.js index b715757bb98..474007513ce 100644 --- a/settings/l10n/da.js +++ b/settings/l10n/da.js @@ -36,9 +36,6 @@ OC.L10N.register( "Unable to change mail address" : "Kan ikke ændre mailadresse", "Email saved" : "E-mailadressen er gemt", "Couldn't remove app." : "Kunne ikke fjerne app'en.", - "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen", - "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s", - "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s", "Couldn't update app." : "Kunne ikke opdatere app'en.", "Add trusted domain" : "Tilføj et domæne som du har tillid til", "Migration in progress. Please wait until the migration is finished" : "Immigration er i gang. Vent venligst indtil overflytningen er afsluttet", @@ -224,6 +221,9 @@ OC.L10N.register( "Default" : "Standard", "log-level out of allowed range" : "niveau for logregistrering går ud over tilladte interval", "Language changed" : "Sprog ændret", + "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen", + "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s", + "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sikker på at du vil tilføje \"{domain}\" som et domæne du har tiilid til?", "Please wait...." : "Vent venligst...", "Everything (fatal issues, errors, warnings, info, debug)" : "Alt (alvorlige fejl, fejl, advarsler, info, debug)", diff --git a/settings/l10n/da.json b/settings/l10n/da.json index 3bfbca279de..70af6ed51a0 100644 --- a/settings/l10n/da.json +++ b/settings/l10n/da.json @@ -34,9 +34,6 @@ "Unable to change mail address" : "Kan ikke ændre mailadresse", "Email saved" : "E-mailadressen er gemt", "Couldn't remove app." : "Kunne ikke fjerne app'en.", - "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen", - "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s", - "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s", "Couldn't update app." : "Kunne ikke opdatere app'en.", "Add trusted domain" : "Tilføj et domæne som du har tillid til", "Migration in progress. Please wait until the migration is finished" : "Immigration er i gang. Vent venligst indtil overflytningen er afsluttet", @@ -222,6 +219,9 @@ "Default" : "Standard", "log-level out of allowed range" : "niveau for logregistrering går ud over tilladte interval", "Language changed" : "Sprog ændret", + "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen", + "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s", + "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sikker på at du vil tilføje \"{domain}\" som et domæne du har tiilid til?", "Please wait...." : "Vent venligst...", "Everything (fatal issues, errors, warnings, info, debug)" : "Alt (alvorlige fejl, fejl, advarsler, info, debug)", diff --git a/settings/l10n/de.js b/settings/l10n/de.js index 4baf07cb9a9..291c98e06c2 100644 --- a/settings/l10n/de.js +++ b/settings/l10n/de.js @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "E-Mail-Adresse gespeichert", "Password confirmation is required" : "Passwortbestätigung ist erforderlich", "Couldn't remove app." : "Die App konnte nicht entfernt werden.", - "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.", - "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden", - "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden", "Couldn't update app." : "Die App konnte nicht aktualisiert werden.", "Are you really sure you want add {domain} as trusted domain?" : "Bist du sicher, dass du {domain} als vertrauenswürdige Domain hinzufügen möchtest?", "Add trusted domain" : "Vertrauenswürdige Domain hinzufügen", @@ -125,6 +122,8 @@ OC.L10N.register( "undo" : "rückgängig machen", "never" : "niemals", "deleted {userName}" : "{userName} gelöscht", + "Unable to add user to group {group}" : "Benutzer kann nicht zur Gruppe {group} hinzugefügt werden ", + "Unable to remove user from group {group}" : "Benutzer kann nicht aus der Gruppe {group} entfernt werden ", "Add group" : "Gruppe hinzufügen", "Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"", "no group" : "Keine Gruppe", @@ -139,7 +138,7 @@ OC.L10N.register( "Unlimited" : "Unbegrenzt", "Personal info" : "Persönliche Informationen", "Sessions" : "Sitzungen", - "App passwords" : "App-Passwörter", + "App passwords" : "App-PINs", "Sync clients" : "Sync-Clients", "None" : "Nichts", "Login" : "Anmelden", @@ -276,7 +275,7 @@ OC.L10N.register( "Email" : "E-Mail", "Your email address" : "Deine E-Mail-Adresse", "No email address set" : "Keine E-Mail-Adresse angegeben", - "For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen", + "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", "Phone number" : "Telefonnummer", "Your phone number" : "Deine Telefonnummer", "Address" : "Adresse", @@ -341,6 +340,9 @@ OC.L10N.register( "Default" : "Standard", "log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs", "Language changed" : "Sprache geändert", + "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.", + "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden", + "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist du sicher, dass du „{domain}“ als vertrauenswürdige Domain hinzufügen möchtest?", "Please wait...." : "Bitte warten…", "iPhone" : "iPhone", diff --git a/settings/l10n/de.json b/settings/l10n/de.json index 2b69afd9886..f881ef48004 100644 --- a/settings/l10n/de.json +++ b/settings/l10n/de.json @@ -37,9 +37,6 @@ "Email saved" : "E-Mail-Adresse gespeichert", "Password confirmation is required" : "Passwortbestätigung ist erforderlich", "Couldn't remove app." : "Die App konnte nicht entfernt werden.", - "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.", - "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden", - "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden", "Couldn't update app." : "Die App konnte nicht aktualisiert werden.", "Are you really sure you want add {domain} as trusted domain?" : "Bist du sicher, dass du {domain} als vertrauenswürdige Domain hinzufügen möchtest?", "Add trusted domain" : "Vertrauenswürdige Domain hinzufügen", @@ -123,6 +120,8 @@ "undo" : "rückgängig machen", "never" : "niemals", "deleted {userName}" : "{userName} gelöscht", + "Unable to add user to group {group}" : "Benutzer kann nicht zur Gruppe {group} hinzugefügt werden ", + "Unable to remove user from group {group}" : "Benutzer kann nicht aus der Gruppe {group} entfernt werden ", "Add group" : "Gruppe hinzufügen", "Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"", "no group" : "Keine Gruppe", @@ -137,7 +136,7 @@ "Unlimited" : "Unbegrenzt", "Personal info" : "Persönliche Informationen", "Sessions" : "Sitzungen", - "App passwords" : "App-Passwörter", + "App passwords" : "App-PINs", "Sync clients" : "Sync-Clients", "None" : "Nichts", "Login" : "Anmelden", @@ -274,7 +273,7 @@ "Email" : "E-Mail", "Your email address" : "Deine E-Mail-Adresse", "No email address set" : "Keine E-Mail-Adresse angegeben", - "For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen", + "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", "Phone number" : "Telefonnummer", "Your phone number" : "Deine Telefonnummer", "Address" : "Adresse", @@ -339,6 +338,9 @@ "Default" : "Standard", "log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs", "Language changed" : "Sprache geändert", + "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.", + "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden", + "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist du sicher, dass du „{domain}“ als vertrauenswürdige Domain hinzufügen möchtest?", "Please wait...." : "Bitte warten…", "iPhone" : "iPhone", diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js index 2463552498f..4e55788e56c 100644 --- a/settings/l10n/de_DE.js +++ b/settings/l10n/de_DE.js @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "E-Mail-Adresse gespeichert", "Password confirmation is required" : "Passwortbestätigung ist erforderlich", "Couldn't remove app." : "Die App konnte nicht entfernt werden.", - "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen", - "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden", - "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden", "Couldn't update app." : "Die App konnte nicht aktualisiert werden.", "Are you really sure you want add {domain} as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie {domain} als vertrauenswürdige Domain hinzufügen möchten?", "Add trusted domain" : "Vertrauenswürdige Domain hinzufügen", @@ -125,6 +122,8 @@ OC.L10N.register( "undo" : "rückgängig machen", "never" : "niemals", "deleted {userName}" : "{userName} gelöscht", + "Unable to add user to group {group}" : "Benutzer kann nicht zur Gruppe {group} hinzugefügt werden ", + "Unable to remove user from group {group}" : "Benutzer kann nicht aus der Gruppe {group} entfernt werden ", "Add group" : "Gruppe hinzufügen", "Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"", "no group" : "Keine Gruppe", @@ -139,7 +138,7 @@ OC.L10N.register( "Unlimited" : "Unbegrenzt", "Personal info" : "Persönliche Informationen", "Sessions" : "Sitzungen", - "App passwords" : "App-Passwörter", + "App passwords" : "App-PINs", "Sync clients" : "Sync-Clients", "None" : "Keine", "Login" : "Anmelden", @@ -276,7 +275,7 @@ OC.L10N.register( "Email" : "E-Mail", "Your email address" : "Ihre E-Mail-Adresse", "No email address set" : "Keine E-Mail-Adresse angegeben", - "For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen", + "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", "Phone number" : "Telefonnummer", "Your phone number" : "Ihre Telefonnummer", "Address" : "Adresse", @@ -341,6 +340,9 @@ OC.L10N.register( "Default" : "Standard", "log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs", "Language changed" : "Sprache geändert", + "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen", + "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden", + "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie »{domain}« als vertrauenswürdige Domain hinzufügen möchten?", "Please wait...." : "Bitte warten…", "iPhone" : "iPhone", diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json index 01c0883803d..8d4674d04eb 100644 --- a/settings/l10n/de_DE.json +++ b/settings/l10n/de_DE.json @@ -37,9 +37,6 @@ "Email saved" : "E-Mail-Adresse gespeichert", "Password confirmation is required" : "Passwortbestätigung ist erforderlich", "Couldn't remove app." : "Die App konnte nicht entfernt werden.", - "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen", - "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden", - "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden", "Couldn't update app." : "Die App konnte nicht aktualisiert werden.", "Are you really sure you want add {domain} as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie {domain} als vertrauenswürdige Domain hinzufügen möchten?", "Add trusted domain" : "Vertrauenswürdige Domain hinzufügen", @@ -123,6 +120,8 @@ "undo" : "rückgängig machen", "never" : "niemals", "deleted {userName}" : "{userName} gelöscht", + "Unable to add user to group {group}" : "Benutzer kann nicht zur Gruppe {group} hinzugefügt werden ", + "Unable to remove user from group {group}" : "Benutzer kann nicht aus der Gruppe {group} entfernt werden ", "Add group" : "Gruppe hinzufügen", "Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"", "no group" : "Keine Gruppe", @@ -137,7 +136,7 @@ "Unlimited" : "Unbegrenzt", "Personal info" : "Persönliche Informationen", "Sessions" : "Sitzungen", - "App passwords" : "App-Passwörter", + "App passwords" : "App-PINs", "Sync clients" : "Sync-Clients", "None" : "Keine", "Login" : "Anmelden", @@ -274,7 +273,7 @@ "Email" : "E-Mail", "Your email address" : "Ihre E-Mail-Adresse", "No email address set" : "Keine E-Mail-Adresse angegeben", - "For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen", + "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", "Phone number" : "Telefonnummer", "Your phone number" : "Ihre Telefonnummer", "Address" : "Adresse", @@ -339,6 +338,9 @@ "Default" : "Standard", "log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs", "Language changed" : "Sprache geändert", + "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen", + "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden", + "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie »{domain}« als vertrauenswürdige Domain hinzufügen möchten?", "Please wait...." : "Bitte warten…", "iPhone" : "iPhone", diff --git a/settings/l10n/el.js b/settings/l10n/el.js index 2918b6d753c..3d64829cea6 100644 --- a/settings/l10n/el.js +++ b/settings/l10n/el.js @@ -36,9 +36,6 @@ OC.L10N.register( "Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας", "Email saved" : "Το email αποθηκεύτηκε ", "Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.", - "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών", - "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s", - "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s", "Couldn't update app." : "Αδυναμία ενημέρωσης εφαρμογής", "Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή", "Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση", @@ -279,6 +276,9 @@ OC.L10N.register( "Default" : "Προκαθορισμένο", "log-level out of allowed range" : "Το επίπεδο καταγραφής είναι εκτός του επιτρεπόμενου πεδίου", "Language changed" : "Η γλώσσα άλλαξε", + "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών", + "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s", + "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;", "Please wait...." : "Παρακαλώ περιμένετε...", "iPhone" : "iPhone", diff --git a/settings/l10n/el.json b/settings/l10n/el.json index 0a5630b7ac1..e0be5bf283b 100644 --- a/settings/l10n/el.json +++ b/settings/l10n/el.json @@ -34,9 +34,6 @@ "Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας", "Email saved" : "Το email αποθηκεύτηκε ", "Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.", - "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών", - "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s", - "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s", "Couldn't update app." : "Αδυναμία ενημέρωσης εφαρμογής", "Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή", "Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση", @@ -277,6 +274,9 @@ "Default" : "Προκαθορισμένο", "log-level out of allowed range" : "Το επίπεδο καταγραφής είναι εκτός του επιτρεπόμενου πεδίου", "Language changed" : "Η γλώσσα άλλαξε", + "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών", + "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s", + "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;", "Please wait...." : "Παρακαλώ περιμένετε...", "iPhone" : "iPhone", diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js index 34acd971716..930205ba494 100644 --- a/settings/l10n/en_GB.js +++ b/settings/l10n/en_GB.js @@ -36,9 +36,6 @@ OC.L10N.register( "Unable to change mail address" : "Unable to change mail address", "Email saved" : "Email saved", "Couldn't remove app." : "Couldn't remove app.", - "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group", - "Unable to add user to group %s" : "Unable to add user to group %s", - "Unable to remove user from group %s" : "Unable to remove user from group %s", "Couldn't update app." : "Couldn't update app.", "Add trusted domain" : "Add trusted domain", "Migration in progress. Please wait until the migration is finished" : "Migration in progress. Please wait until the migration is finished", @@ -264,6 +261,9 @@ OC.L10N.register( "Default" : "Default", "log-level out of allowed range" : "log-level out of allowed range", "Language changed" : "Language changed", + "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group", + "Unable to add user to group %s" : "Unable to add user to group %s", + "Unable to remove user from group %s" : "Unable to remove user from group %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?", "Please wait...." : "Please wait....", "Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)", diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json index 6fe3e756980..0584f6a5bb1 100644 --- a/settings/l10n/en_GB.json +++ b/settings/l10n/en_GB.json @@ -34,9 +34,6 @@ "Unable to change mail address" : "Unable to change mail address", "Email saved" : "Email saved", "Couldn't remove app." : "Couldn't remove app.", - "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group", - "Unable to add user to group %s" : "Unable to add user to group %s", - "Unable to remove user from group %s" : "Unable to remove user from group %s", "Couldn't update app." : "Couldn't update app.", "Add trusted domain" : "Add trusted domain", "Migration in progress. Please wait until the migration is finished" : "Migration in progress. Please wait until the migration is finished", @@ -262,6 +259,9 @@ "Default" : "Default", "log-level out of allowed range" : "log-level out of allowed range", "Language changed" : "Language changed", + "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group", + "Unable to add user to group %s" : "Unable to add user to group %s", + "Unable to remove user from group %s" : "Unable to remove user from group %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?", "Please wait...." : "Please wait....", "Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)", diff --git a/settings/l10n/eo.js b/settings/l10n/eo.js index 4406664c16d..57bacd60c50 100644 --- a/settings/l10n/eo.js +++ b/settings/l10n/eo.js @@ -14,9 +14,6 @@ OC.L10N.register( "Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon", "Your full name has been changed." : "Via plena nomo ŝanĝitas.", "Email saved" : "La retpoŝtadreso konserviĝis", - "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.", - "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s", - "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s", "Couldn't update app." : "Ne eblis ĝisdatigi la aplikaĵon.", "Sending..." : "Sendante...", "All" : "Ĉio", @@ -124,6 +121,9 @@ OC.L10N.register( "change email address" : "ŝanĝi retpoŝtadreson", "Default" : "Defaŭlta", "Language changed" : "La lingvo estas ŝanĝita", + "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.", + "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s", + "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s", "Please wait...." : "Bonvolu atendi...", "Everything (fatal issues, errors, warnings, info, debug)" : "Ĉio (fatalaĵoj, eraroj, avertoj, informoj, sencimigaj mesaĝoj)", "Info, warnings, errors and fatal issues" : "Informoj, avertoj, eraroj kaj fatalaĵoj", diff --git a/settings/l10n/eo.json b/settings/l10n/eo.json index 977c235a952..adb48f15be5 100644 --- a/settings/l10n/eo.json +++ b/settings/l10n/eo.json @@ -12,9 +12,6 @@ "Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon", "Your full name has been changed." : "Via plena nomo ŝanĝitas.", "Email saved" : "La retpoŝtadreso konserviĝis", - "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.", - "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s", - "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s", "Couldn't update app." : "Ne eblis ĝisdatigi la aplikaĵon.", "Sending..." : "Sendante...", "All" : "Ĉio", @@ -122,6 +119,9 @@ "change email address" : "ŝanĝi retpoŝtadreson", "Default" : "Defaŭlta", "Language changed" : "La lingvo estas ŝanĝita", + "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.", + "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s", + "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s", "Please wait...." : "Bonvolu atendi...", "Everything (fatal issues, errors, warnings, info, debug)" : "Ĉio (fatalaĵoj, eraroj, avertoj, informoj, sencimigaj mesaĝoj)", "Info, warnings, errors and fatal issues" : "Informoj, avertoj, eraroj kaj fatalaĵoj", diff --git a/settings/l10n/es.js b/settings/l10n/es.js index 251015180a1..cd2b201dc37 100644 --- a/settings/l10n/es.js +++ b/settings/l10n/es.js @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "Correo electrónico guardado", "Password confirmation is required" : "Se requiere confirmar la contraseña", "Couldn't remove app." : "No se pudo eliminar la aplicación.", - "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador", - "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s", - "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s", "Couldn't update app." : "No se pudo actualizar la aplicación.", "Are you really sure you want add {domain} as trusted domain?" : "¿Está realmente seguro de que quiere añadir {domain} como dominio de confianza?", "Add trusted domain" : "Agregar dominio de confianza", @@ -341,6 +338,9 @@ OC.L10N.register( "Default" : "Predeterminado", "log-level out of allowed range" : "Nivel de autenticación fuera del rango permitido", "Language changed" : "Idioma cambiado", + "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador", + "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s", + "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?", "Please wait...." : "Espere, por favor....", "iPhone" : "iPhone", diff --git a/settings/l10n/es.json b/settings/l10n/es.json index 04f9f551f20..1bd74a37d12 100644 --- a/settings/l10n/es.json +++ b/settings/l10n/es.json @@ -37,9 +37,6 @@ "Email saved" : "Correo electrónico guardado", "Password confirmation is required" : "Se requiere confirmar la contraseña", "Couldn't remove app." : "No se pudo eliminar la aplicación.", - "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador", - "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s", - "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s", "Couldn't update app." : "No se pudo actualizar la aplicación.", "Are you really sure you want add {domain} as trusted domain?" : "¿Está realmente seguro de que quiere añadir {domain} como dominio de confianza?", "Add trusted domain" : "Agregar dominio de confianza", @@ -339,6 +336,9 @@ "Default" : "Predeterminado", "log-level out of allowed range" : "Nivel de autenticación fuera del rango permitido", "Language changed" : "Idioma cambiado", + "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador", + "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s", + "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?", "Please wait...." : "Espere, por favor....", "iPhone" : "iPhone", diff --git a/settings/l10n/es_AR.js b/settings/l10n/es_AR.js index 6822b46a57a..a557cec74b1 100644 --- a/settings/l10n/es_AR.js +++ b/settings/l10n/es_AR.js @@ -16,9 +16,6 @@ OC.L10N.register( "Unable to change full name" : "Imposible cambiar el nombre completo", "Your full name has been changed." : "Su nombre completo ha sido cambiado.", "Email saved" : "e-mail guardado", - "Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ", - "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s", - "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s", "Couldn't update app." : "No se pudo actualizar la App.", "Sending..." : "Enviando...", "All" : "Todos", @@ -103,6 +100,9 @@ OC.L10N.register( "set new password" : "Configurar nueva contraseña", "Default" : "Predeterminado", "Language changed" : "Idioma cambiado", + "Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ", + "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s", + "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s", "Please wait...." : "Por favor, esperá....", "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (notificaciones fatales, errores, advertencias, info, debug)", "Info, warnings, errors and fatal issues" : "Info, advertencias, errores y notificaciones fatales", diff --git a/settings/l10n/es_AR.json b/settings/l10n/es_AR.json index 9ec6ee099c5..2d6ed9b8c32 100644 --- a/settings/l10n/es_AR.json +++ b/settings/l10n/es_AR.json @@ -14,9 +14,6 @@ "Unable to change full name" : "Imposible cambiar el nombre completo", "Your full name has been changed." : "Su nombre completo ha sido cambiado.", "Email saved" : "e-mail guardado", - "Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ", - "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s", - "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s", "Couldn't update app." : "No se pudo actualizar la App.", "Sending..." : "Enviando...", "All" : "Todos", @@ -101,6 +98,9 @@ "set new password" : "Configurar nueva contraseña", "Default" : "Predeterminado", "Language changed" : "Idioma cambiado", + "Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ", + "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s", + "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s", "Please wait...." : "Por favor, esperá....", "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (notificaciones fatales, errores, advertencias, info, debug)", "Info, warnings, errors and fatal issues" : "Info, advertencias, errores y notificaciones fatales", diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js index 09c843f9fa6..c07e9a94267 100644 --- a/settings/l10n/es_MX.js +++ b/settings/l10n/es_MX.js @@ -14,9 +14,6 @@ OC.L10N.register( "Unable to change full name" : "No se puede cambiar el nombre completo", "Your full name has been changed." : "Se ha cambiado su nombre completo.", "Email saved" : "Correo electrónico guardado", - "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador", - "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s", - "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s", "Couldn't update app." : "No se pudo actualizar la aplicación.", "All" : "Todos", "Error while disabling app" : "Error mientras se desactivaba la aplicación", @@ -79,6 +76,9 @@ OC.L10N.register( "set new password" : "establecer nueva contraseña", "Default" : "Predeterminado", "Language changed" : "Idioma cambiado", + "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador", + "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s", + "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s", "Please wait...." : "Espere, por favor....", "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)", "Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales", diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json index e2a78820f11..0eca2bb49ae 100644 --- a/settings/l10n/es_MX.json +++ b/settings/l10n/es_MX.json @@ -12,9 +12,6 @@ "Unable to change full name" : "No se puede cambiar el nombre completo", "Your full name has been changed." : "Se ha cambiado su nombre completo.", "Email saved" : "Correo electrónico guardado", - "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador", - "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s", - "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s", "Couldn't update app." : "No se pudo actualizar la aplicación.", "All" : "Todos", "Error while disabling app" : "Error mientras se desactivaba la aplicación", @@ -77,6 +74,9 @@ "set new password" : "establecer nueva contraseña", "Default" : "Predeterminado", "Language changed" : "Idioma cambiado", + "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador", + "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s", + "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s", "Please wait...." : "Espere, por favor....", "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)", "Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales", diff --git a/settings/l10n/et_EE.js b/settings/l10n/et_EE.js index 76b2854ff70..58ebcc50cd3 100644 --- a/settings/l10n/et_EE.js +++ b/settings/l10n/et_EE.js @@ -30,9 +30,6 @@ OC.L10N.register( "Unable to change mail address" : "E-posti aadressi muutmine ebaõnnestus", "Email saved" : "Kiri on salvestatud", "Couldn't remove app." : "Ei suutnud rakendit eemaldada.", - "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada", - "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s", - "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s", "Couldn't update app." : "Rakenduse uuendamine ebaõnnestus.", "Add trusted domain" : "Lis ausaldusväärne domeen", "Migration in progress. Please wait until the migration is finished" : "Kolimine on käimas. Palun oota, kuni see on lõpetatud", @@ -197,6 +194,9 @@ OC.L10N.register( "change email address" : "muuda e-posti aadressi", "Default" : "Vaikeväärtus", "Language changed" : "Keel on muudetud", + "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada", + "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s", + "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Oled sa kindel, et soovid lisada domeeni \"{domain}\" usaldusväärseks domeeniks?", "Please wait...." : "Palun oota...", "Everything (fatal issues, errors, warnings, info, debug)" : "Kõik (tõsised probleemid, veateated, hoiatused, info, veatuvastus)", diff --git a/settings/l10n/et_EE.json b/settings/l10n/et_EE.json index 678d1072bb6..d8732c4e338 100644 --- a/settings/l10n/et_EE.json +++ b/settings/l10n/et_EE.json @@ -28,9 +28,6 @@ "Unable to change mail address" : "E-posti aadressi muutmine ebaõnnestus", "Email saved" : "Kiri on salvestatud", "Couldn't remove app." : "Ei suutnud rakendit eemaldada.", - "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada", - "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s", - "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s", "Couldn't update app." : "Rakenduse uuendamine ebaõnnestus.", "Add trusted domain" : "Lis ausaldusväärne domeen", "Migration in progress. Please wait until the migration is finished" : "Kolimine on käimas. Palun oota, kuni see on lõpetatud", @@ -195,6 +192,9 @@ "change email address" : "muuda e-posti aadressi", "Default" : "Vaikeväärtus", "Language changed" : "Keel on muudetud", + "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada", + "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s", + "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Oled sa kindel, et soovid lisada domeeni \"{domain}\" usaldusväärseks domeeniks?", "Please wait...." : "Palun oota...", "Everything (fatal issues, errors, warnings, info, debug)" : "Kõik (tõsised probleemid, veateated, hoiatused, info, veatuvastus)", diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js index 996ea37e205..ac332f20a21 100644 --- a/settings/l10n/eu.js +++ b/settings/l10n/eu.js @@ -29,9 +29,6 @@ OC.L10N.register( "Unable to change mail address" : "Ezin izan da posta helbidea aldatu", "Email saved" : "Eposta gorde da", "Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..", - "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik", - "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu", - "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu", "Couldn't update app." : "Ezin izan da aplikazioa eguneratu.", "Add trusted domain" : "Gehitu domeinu fidagarria", "Sending..." : "Bidaltzen...", @@ -165,6 +162,9 @@ OC.L10N.register( "Default" : "Lehenetsia", "log-level out of allowed range" : "erregistro-maila baimendutako tartetik at", "Language changed" : "Hizkuntza aldatuta", + "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik", + "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu", + "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ziur zaude gehitu nahi duzula \"{domain}\" domeinu fidagarri gisa?", "Please wait...." : "Itxoin mesedez...", "Everything (fatal issues, errors, warnings, info, debug)" : "Dena (arazo larriak, erroreak, abisuak, informazioa, arazketa)", diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json index 0643dd34ab5..a7d45148ef3 100644 --- a/settings/l10n/eu.json +++ b/settings/l10n/eu.json @@ -27,9 +27,6 @@ "Unable to change mail address" : "Ezin izan da posta helbidea aldatu", "Email saved" : "Eposta gorde da", "Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..", - "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik", - "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu", - "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu", "Couldn't update app." : "Ezin izan da aplikazioa eguneratu.", "Add trusted domain" : "Gehitu domeinu fidagarria", "Sending..." : "Bidaltzen...", @@ -163,6 +160,9 @@ "Default" : "Lehenetsia", "log-level out of allowed range" : "erregistro-maila baimendutako tartetik at", "Language changed" : "Hizkuntza aldatuta", + "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik", + "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu", + "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ziur zaude gehitu nahi duzula \"{domain}\" domeinu fidagarri gisa?", "Please wait...." : "Itxoin mesedez...", "Everything (fatal issues, errors, warnings, info, debug)" : "Dena (arazo larriak, erroreak, abisuak, informazioa, arazketa)", diff --git a/settings/l10n/fa.js b/settings/l10n/fa.js index 350c9e24b21..712d52864e2 100644 --- a/settings/l10n/fa.js +++ b/settings/l10n/fa.js @@ -28,9 +28,6 @@ OC.L10N.register( "Unable to change mail address" : "تغییر آدرس ایمیل امکانپذیر نیست", "Email saved" : "ایمیل ذخیره شد", "Couldn't remove app." : "امکان حذف برنامه وجود ندارد.", - "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند", - "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست", - "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست", "Couldn't update app." : "برنامه را نمی توان به هنگام ساخت.", "Add trusted domain" : "افزودن دامنه مورد اعتماد", "Migration in progress. Please wait until the migration is finished" : "مهاجرت در حال اجراست. لطفا تا اتمام مهاجرت صبر کنید", @@ -189,6 +186,9 @@ OC.L10N.register( "change email address" : "تغییر آدرس ایمیل ", "Default" : "پیش فرض", "Language changed" : "زبان تغییر کرد", + "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند", + "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست", + "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست", "Please wait...." : "لطفا صبر کنید ...", "Everything (fatal issues, errors, warnings, info, debug)" : "همه موارد (مشکلات مهلک، خطاها، اخطارها، اطلاعات، خطایابی)", "Info, warnings, errors and fatal issues" : "اطلاعات، اخطارها، خطاها، مشکلات اساسی", diff --git a/settings/l10n/fa.json b/settings/l10n/fa.json index 1b75b935e24..33fcfe51a99 100644 --- a/settings/l10n/fa.json +++ b/settings/l10n/fa.json @@ -26,9 +26,6 @@ "Unable to change mail address" : "تغییر آدرس ایمیل امکانپذیر نیست", "Email saved" : "ایمیل ذخیره شد", "Couldn't remove app." : "امکان حذف برنامه وجود ندارد.", - "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند", - "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست", - "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست", "Couldn't update app." : "برنامه را نمی توان به هنگام ساخت.", "Add trusted domain" : "افزودن دامنه مورد اعتماد", "Migration in progress. Please wait until the migration is finished" : "مهاجرت در حال اجراست. لطفا تا اتمام مهاجرت صبر کنید", @@ -187,6 +184,9 @@ "change email address" : "تغییر آدرس ایمیل ", "Default" : "پیش فرض", "Language changed" : "زبان تغییر کرد", + "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند", + "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست", + "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست", "Please wait...." : "لطفا صبر کنید ...", "Everything (fatal issues, errors, warnings, info, debug)" : "همه موارد (مشکلات مهلک، خطاها، اخطارها، اطلاعات، خطایابی)", "Info, warnings, errors and fatal issues" : "اطلاعات، اخطارها، خطاها، مشکلات اساسی", diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js index 22170fe0e9b..dc9a7672601 100644 --- a/settings/l10n/fi_FI.js +++ b/settings/l10n/fi_FI.js @@ -35,9 +35,6 @@ OC.L10N.register( "Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut", "Email saved" : "Sähköposti tallennettu", "Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.", - "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä", - "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu", - "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu", "Couldn't update app." : "Sovelluksen päivitys epäonnistui.", "Add trusted domain" : "Lisää luotettu toimialue", "Migration in progress. Please wait until the migration is finished" : "Migraatio on kesken. Odota kunnes migraatio valmistuu", @@ -245,6 +242,9 @@ OC.L10N.register( "Default" : "Oletus", "log-level out of allowed range" : "lokitaso ei sallittujen rajojen sisäpuolella", "Language changed" : "Kieli on vaihdettu", + "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä", + "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu", + "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Haluatko varmasti liittää kohteen \"{domain}\" luotetuksi toimialueeksi?", "Please wait...." : "Odota hetki...", "Everything (fatal issues, errors, warnings, info, debug)" : "Kaikki (vakavat ongelmat, virheet, varoitukset, tiedot, vianjäljitys)", diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json index 93730c125ff..c241717a604 100644 --- a/settings/l10n/fi_FI.json +++ b/settings/l10n/fi_FI.json @@ -33,9 +33,6 @@ "Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut", "Email saved" : "Sähköposti tallennettu", "Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.", - "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä", - "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu", - "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu", "Couldn't update app." : "Sovelluksen päivitys epäonnistui.", "Add trusted domain" : "Lisää luotettu toimialue", "Migration in progress. Please wait until the migration is finished" : "Migraatio on kesken. Odota kunnes migraatio valmistuu", @@ -243,6 +240,9 @@ "Default" : "Oletus", "log-level out of allowed range" : "lokitaso ei sallittujen rajojen sisäpuolella", "Language changed" : "Kieli on vaihdettu", + "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä", + "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu", + "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Haluatko varmasti liittää kohteen \"{domain}\" luotetuksi toimialueeksi?", "Please wait...." : "Odota hetki...", "Everything (fatal issues, errors, warnings, info, debug)" : "Kaikki (vakavat ongelmat, virheet, varoitukset, tiedot, vianjäljitys)", diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js index da1108667eb..994250c4fae 100644 --- a/settings/l10n/fr.js +++ b/settings/l10n/fr.js @@ -30,7 +30,7 @@ OC.L10N.register( "Your %s account was created" : "Votre compte %s a été créé", "Unable to delete user." : "Impossible de supprimer l'utilisateur.", "Settings saved" : "Paramètres sauvegardés", - "Unable to change full name" : "Impossible de changer le nom complet", + "Unable to change full name" : "Impossible de modifier le nom complet", "Unable to change email address" : "Impossible de modifier l'adresse e-mail", "Your full name has been changed." : "Votre nom complet a été modifié.", "Forbidden" : "Interdit", @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "E-mail sauvegardé", "Password confirmation is required" : "Confirmation par mot de passe est requise", "Couldn't remove app." : "Impossible de supprimer l'application.", - "Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin", - "Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s", - "Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s", "Couldn't update app." : "Impossible de mettre à jour l'application", "Are you really sure you want add {domain} as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter {domain} comme domaine de confiance ?", "Add trusted domain" : "Ajouter un domaine de confiance", @@ -125,6 +122,8 @@ OC.L10N.register( "undo" : "annuler", "never" : "jamais", "deleted {userName}" : "{userName} supprimé", + "Unable to add user to group {group}" : "Impossible d'ajouter l'utilisateur au groupe {group}", + "Unable to remove user from group {group}" : "Impossible de supprimer l'utilisateur du groupe {group}", "Add group" : "Ajouter un groupe", "Invalid quota value \"{val}\"" : "Valeur de quota invalide \"{val}\"", "no group" : "aucun groupe", @@ -220,8 +219,8 @@ OC.L10N.register( "Exclude groups from sharing" : "Empêcher certains groupes de partager", "These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets doivent être indiqués.", - "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement. (Visible seulement quand la liste des fichiers est masquée.)", - "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera visible sur la page publique de téléversement quand la liste des fichiers est masquée.", + "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement (seulement lorsque la liste des fichiers est masquée).", + "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera affiché sur la page publique de téléversement lorsque la liste des fichiers est masquée.", "Tips & tricks" : "Trucs et astuces", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite est actuellement utilisé comme système de gestion de base de données. Pour des installations plus volumineuses, nous vous recommandons de migrer vers un autre système de gestion de base de données.", "This is particularly recommended when using the desktop client for file synchronisation." : "C'est particulièrement recommandé lorsque l'on utilise un client bureau pour la synchronisation des fichiers.", @@ -299,9 +298,9 @@ OC.L10N.register( "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Si vous voulez apporter votre appui au projet {contributeopen}joignez-vous à son développement{linkclose} ou {contributeopen}passez le mot{linkclose}!", "Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion", "Web, desktop and mobile clients currently logged in to your account." : "Clients web, desktop et mobiles actuellement connectés sur votre compte.", - "Device" : "Périphérique", + "Device" : "Appareil", "Last activity" : "Dernière activité", - "Passcodes that give an app or device permissions to access your account." : "Un mot de passe d'application est un mot de passe qui autorise une application ou un périphérique d'accéder à votre compte.", + "Passcodes that give an app or device permissions to access your account." : "Codes de sécurité autorisant une application ou un appareil à accéder à votre compte.", "Name" : "Nom", "App name" : "Nom de l'application", "Create new app password" : "Créer un nouveau mot de passe d'application", @@ -341,6 +340,9 @@ OC.L10N.register( "Default" : "Défaut", "log-level out of allowed range" : "niveau de journalisation hors borne", "Language changed" : "Langue changée", + "Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin", + "Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s", + "Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter \"{domain}\" comme domaine de confiance ?", "Please wait...." : "Veuillez patienter…", "iPhone" : "iPhone", diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json index bfeab18cf7d..351a9d4f8c4 100644 --- a/settings/l10n/fr.json +++ b/settings/l10n/fr.json @@ -28,7 +28,7 @@ "Your %s account was created" : "Votre compte %s a été créé", "Unable to delete user." : "Impossible de supprimer l'utilisateur.", "Settings saved" : "Paramètres sauvegardés", - "Unable to change full name" : "Impossible de changer le nom complet", + "Unable to change full name" : "Impossible de modifier le nom complet", "Unable to change email address" : "Impossible de modifier l'adresse e-mail", "Your full name has been changed." : "Votre nom complet a été modifié.", "Forbidden" : "Interdit", @@ -37,9 +37,6 @@ "Email saved" : "E-mail sauvegardé", "Password confirmation is required" : "Confirmation par mot de passe est requise", "Couldn't remove app." : "Impossible de supprimer l'application.", - "Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin", - "Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s", - "Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s", "Couldn't update app." : "Impossible de mettre à jour l'application", "Are you really sure you want add {domain} as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter {domain} comme domaine de confiance ?", "Add trusted domain" : "Ajouter un domaine de confiance", @@ -123,6 +120,8 @@ "undo" : "annuler", "never" : "jamais", "deleted {userName}" : "{userName} supprimé", + "Unable to add user to group {group}" : "Impossible d'ajouter l'utilisateur au groupe {group}", + "Unable to remove user from group {group}" : "Impossible de supprimer l'utilisateur du groupe {group}", "Add group" : "Ajouter un groupe", "Invalid quota value \"{val}\"" : "Valeur de quota invalide \"{val}\"", "no group" : "aucun groupe", @@ -218,8 +217,8 @@ "Exclude groups from sharing" : "Empêcher certains groupes de partager", "These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets doivent être indiqués.", - "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement. (Visible seulement quand la liste des fichiers est masquée.)", - "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera visible sur la page publique de téléversement quand la liste des fichiers est masquée.", + "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement (seulement lorsque la liste des fichiers est masquée).", + "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera affiché sur la page publique de téléversement lorsque la liste des fichiers est masquée.", "Tips & tricks" : "Trucs et astuces", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite est actuellement utilisé comme système de gestion de base de données. Pour des installations plus volumineuses, nous vous recommandons de migrer vers un autre système de gestion de base de données.", "This is particularly recommended when using the desktop client for file synchronisation." : "C'est particulièrement recommandé lorsque l'on utilise un client bureau pour la synchronisation des fichiers.", @@ -297,9 +296,9 @@ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Si vous voulez apporter votre appui au projet {contributeopen}joignez-vous à son développement{linkclose} ou {contributeopen}passez le mot{linkclose}!", "Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion", "Web, desktop and mobile clients currently logged in to your account." : "Clients web, desktop et mobiles actuellement connectés sur votre compte.", - "Device" : "Périphérique", + "Device" : "Appareil", "Last activity" : "Dernière activité", - "Passcodes that give an app or device permissions to access your account." : "Un mot de passe d'application est un mot de passe qui autorise une application ou un périphérique d'accéder à votre compte.", + "Passcodes that give an app or device permissions to access your account." : "Codes de sécurité autorisant une application ou un appareil à accéder à votre compte.", "Name" : "Nom", "App name" : "Nom de l'application", "Create new app password" : "Créer un nouveau mot de passe d'application", @@ -339,6 +338,9 @@ "Default" : "Défaut", "log-level out of allowed range" : "niveau de journalisation hors borne", "Language changed" : "Langue changée", + "Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin", + "Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s", + "Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter \"{domain}\" comme domaine de confiance ?", "Please wait...." : "Veuillez patienter…", "iPhone" : "iPhone", diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js index 8f1ea962f1a..609782e501f 100644 --- a/settings/l10n/gl.js +++ b/settings/l10n/gl.js @@ -36,9 +36,6 @@ OC.L10N.register( "Unable to change mail address" : "Non é posíbel cambiar o enderezo de correo.", "Email saved" : "Correo gardado", "Couldn't remove app." : "Non foi posíbel retirar a aplicación.", - "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin", - "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s", - "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s", "Couldn't update app." : "Non foi posíbel actualizar a aplicación.", "Add trusted domain" : "Engadir dominio de confianza", "Migration in progress. Please wait until the migration is finished" : "A migración está en proceso. Agarde a que remate.", @@ -216,6 +213,9 @@ OC.L10N.register( "Default" : "Predeterminado", "log-level out of allowed range" : "o nivel do rexistro está fora do intervalo admitido", "Language changed" : "O idioma cambiou", + "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin", + "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s", + "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Confirma que quere engadir «{domain}» como dominio de confianza?", "Please wait...." : "Agarde...", "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (incidencias críticas, erros, avisos, información, depuración)", diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json index 2b4ec949579..4d81d6bfab1 100644 --- a/settings/l10n/gl.json +++ b/settings/l10n/gl.json @@ -34,9 +34,6 @@ "Unable to change mail address" : "Non é posíbel cambiar o enderezo de correo.", "Email saved" : "Correo gardado", "Couldn't remove app." : "Non foi posíbel retirar a aplicación.", - "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin", - "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s", - "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s", "Couldn't update app." : "Non foi posíbel actualizar a aplicación.", "Add trusted domain" : "Engadir dominio de confianza", "Migration in progress. Please wait until the migration is finished" : "A migración está en proceso. Agarde a que remate.", @@ -214,6 +211,9 @@ "Default" : "Predeterminado", "log-level out of allowed range" : "o nivel do rexistro está fora do intervalo admitido", "Language changed" : "O idioma cambiou", + "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin", + "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s", + "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Confirma que quere engadir «{domain}» como dominio de confianza?", "Please wait...." : "Agarde...", "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (incidencias críticas, erros, avisos, información, depuración)", diff --git a/settings/l10n/he.js b/settings/l10n/he.js index 37eaf589d01..8e9e2538327 100644 --- a/settings/l10n/he.js +++ b/settings/l10n/he.js @@ -36,9 +36,6 @@ OC.L10N.register( "Unable to change mail address" : "לא ניתן לשנות כתובת דואר אלקטרוני", "Email saved" : "הדואר האלקטרוני נשמר", "Couldn't remove app." : "לא ניתן להסיר את היישום.", - "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים", - "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s", - "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s", "Couldn't update app." : "לא ניתן לעדכן את היישום.", "Add trusted domain" : "הוספת שם מתחם מהימן", "Migration in progress. Please wait until the migration is finished" : "המרה בביצוע. יש להמתין עד סיום ההמרה", @@ -258,6 +255,9 @@ OC.L10N.register( "Default" : "ברירת מחדל", "log-level out of allowed range" : "גודל הלוג מעבר לרמה המותרת", "Language changed" : "שפה השתנתה", + "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים", + "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s", + "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "האם באמת להוסיף \"{domain}\" כשם מתחם מהימן?", "Please wait...." : "נא להמתין…", "Everything (fatal issues, errors, warnings, info, debug)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)", diff --git a/settings/l10n/he.json b/settings/l10n/he.json index fed31aaa2a1..3eace55b4b8 100644 --- a/settings/l10n/he.json +++ b/settings/l10n/he.json @@ -34,9 +34,6 @@ "Unable to change mail address" : "לא ניתן לשנות כתובת דואר אלקטרוני", "Email saved" : "הדואר האלקטרוני נשמר", "Couldn't remove app." : "לא ניתן להסיר את היישום.", - "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים", - "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s", - "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s", "Couldn't update app." : "לא ניתן לעדכן את היישום.", "Add trusted domain" : "הוספת שם מתחם מהימן", "Migration in progress. Please wait until the migration is finished" : "המרה בביצוע. יש להמתין עד סיום ההמרה", @@ -256,6 +253,9 @@ "Default" : "ברירת מחדל", "log-level out of allowed range" : "גודל הלוג מעבר לרמה המותרת", "Language changed" : "שפה השתנתה", + "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים", + "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s", + "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "האם באמת להוסיף \"{domain}\" כשם מתחם מהימן?", "Please wait...." : "נא להמתין…", "Everything (fatal issues, errors, warnings, info, debug)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)", diff --git a/settings/l10n/hr.js b/settings/l10n/hr.js index 744ed9b410f..267befb6645 100644 --- a/settings/l10n/hr.js +++ b/settings/l10n/hr.js @@ -17,9 +17,6 @@ OC.L10N.register( "Your full name has been changed." : "Vaše puno ime je promijenjeno.", "Email saved" : "E-pošta spremljena", "Couldn't remove app." : "Nije moguće ukloniti app.", - "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe", - "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće", - "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće", "Couldn't update app." : "Ažuriranje aplikacija nije moguće", "Add trusted domain" : "Dodajte pouzdanu domenu", "Sending..." : "Slanje...", @@ -133,6 +130,9 @@ OC.L10N.register( "set new password" : "postavite novu lozinku", "Default" : "Zadano", "Language changed" : "Promjena jezika", + "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe", + "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće", + "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li doista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?", "Please wait...." : "Molimo pričekajte...", "Everything (fatal issues, errors, warnings, info, debug)" : "Sve (kobni problemi, pogreške, upozorenja, ispravljanje pogrešaka)", diff --git a/settings/l10n/hr.json b/settings/l10n/hr.json index 1b2c51c42ef..22f56cf81f4 100644 --- a/settings/l10n/hr.json +++ b/settings/l10n/hr.json @@ -15,9 +15,6 @@ "Your full name has been changed." : "Vaše puno ime je promijenjeno.", "Email saved" : "E-pošta spremljena", "Couldn't remove app." : "Nije moguće ukloniti app.", - "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe", - "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće", - "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće", "Couldn't update app." : "Ažuriranje aplikacija nije moguće", "Add trusted domain" : "Dodajte pouzdanu domenu", "Sending..." : "Slanje...", @@ -131,6 +128,9 @@ "set new password" : "postavite novu lozinku", "Default" : "Zadano", "Language changed" : "Promjena jezika", + "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe", + "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće", + "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li doista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?", "Please wait...." : "Molimo pričekajte...", "Everything (fatal issues, errors, warnings, info, debug)" : "Sve (kobni problemi, pogreške, upozorenja, ispravljanje pogrešaka)", diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js index d10f05504c1..73883a1107d 100644 --- a/settings/l10n/hu_HU.js +++ b/settings/l10n/hu_HU.js @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "E-mail elmentve!", "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.", - "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.", - "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s", - "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s", "Couldn't update app." : "Az alkalmazás frissítése nem sikerült.", "Are you really sure you want add {domain} as trusted domain?" : "Biztos, hogy hozzá akarod adni ezt a megbízható domainekhez: {domain} ?", "Add trusted domain" : "Megbízható tartomány hozzáadása", @@ -341,6 +338,9 @@ OC.L10N.register( "Default" : "Alapértelmezett", "log-level out of allowed range" : "A naplózási szint a megengedett terjedelmen kívül van.", "Language changed" : "A nyelv megváltozott", + "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.", + "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s", + "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?", "Please wait...." : "Kérlek várj...", "iPhone" : "iPhone", diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json index ee97655631f..aad4e32d971 100644 --- a/settings/l10n/hu_HU.json +++ b/settings/l10n/hu_HU.json @@ -37,9 +37,6 @@ "Email saved" : "E-mail elmentve!", "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.", - "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.", - "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s", - "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s", "Couldn't update app." : "Az alkalmazás frissítése nem sikerült.", "Are you really sure you want add {domain} as trusted domain?" : "Biztos, hogy hozzá akarod adni ezt a megbízható domainekhez: {domain} ?", "Add trusted domain" : "Megbízható tartomány hozzáadása", @@ -339,6 +336,9 @@ "Default" : "Alapértelmezett", "log-level out of allowed range" : "A naplózási szint a megengedett terjedelmen kívül van.", "Language changed" : "A nyelv megváltozott", + "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.", + "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s", + "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?", "Please wait...." : "Kérlek várj...", "iPhone" : "iPhone", diff --git a/settings/l10n/id.js b/settings/l10n/id.js index 192fcee5e67..42829f7a679 100644 --- a/settings/l10n/id.js +++ b/settings/l10n/id.js @@ -36,9 +36,6 @@ OC.L10N.register( "Unable to change mail address" : "Tidak dapat mengubah alamat email", "Email saved" : "Email disimpan", "Couldn't remove app." : "Tidak dapat menghapus aplikasi.", - "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin", - "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s", - "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s", "Couldn't update app." : "Tidak dapat memperbarui aplikasi.", "Add trusted domain" : "Tambah domain terpercaya", "Migration in progress. Please wait until the migration is finished" : "Migrasi sedang dalam proses. Mohon tunggu sampai migrasi selesai.", @@ -292,6 +289,9 @@ OC.L10N.register( "Default" : "Default", "log-level out of allowed range" : "level-log melebihi batas yang diizinkan", "Language changed" : "Bahasa telah diubah", + "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin", + "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s", + "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah Anda yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?", "Please wait...." : "Mohon tunggu....", "iPhone" : "iPhone", diff --git a/settings/l10n/id.json b/settings/l10n/id.json index 63d53f1ba14..4b9ed65bd57 100644 --- a/settings/l10n/id.json +++ b/settings/l10n/id.json @@ -34,9 +34,6 @@ "Unable to change mail address" : "Tidak dapat mengubah alamat email", "Email saved" : "Email disimpan", "Couldn't remove app." : "Tidak dapat menghapus aplikasi.", - "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin", - "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s", - "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s", "Couldn't update app." : "Tidak dapat memperbarui aplikasi.", "Add trusted domain" : "Tambah domain terpercaya", "Migration in progress. Please wait until the migration is finished" : "Migrasi sedang dalam proses. Mohon tunggu sampai migrasi selesai.", @@ -290,6 +287,9 @@ "Default" : "Default", "log-level out of allowed range" : "level-log melebihi batas yang diizinkan", "Language changed" : "Bahasa telah diubah", + "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin", + "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s", + "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah Anda yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?", "Please wait...." : "Mohon tunggu....", "iPhone" : "iPhone", diff --git a/settings/l10n/is.js b/settings/l10n/is.js index 5718ce727d5..dd390673589 100644 --- a/settings/l10n/is.js +++ b/settings/l10n/is.js @@ -36,9 +36,6 @@ OC.L10N.register( "Unable to change mail address" : "Get ekki breytt tölvupóstfangi", "Email saved" : "Tölvupóstfang vistað", "Couldn't remove app." : "Gat ekki fjarlægt forrit.", - "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp", - "Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s", - "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s", "Couldn't update app." : "Gat ekki uppfært forrit.", "Add trusted domain" : "Bæta við treystu léni", "Migration in progress. Please wait until the migration is finished" : "Yfirfærsla er í gangi. Dokaðu við þar til henni er lokið", @@ -296,6 +293,9 @@ OC.L10N.register( "Default" : "Sjálfgefið", "log-level out of allowed range" : "annálsstig utan leyfðra marka", "Language changed" : "Tungumáli breytt", + "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp", + "Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s", + "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ertu viss um að þú viljir bæta \"{domain}\" við sem treystu léni?", "Please wait...." : "Andartak....", "iPhone" : "iPhone", diff --git a/settings/l10n/is.json b/settings/l10n/is.json index 2629549dbc6..f5bf0bee0b9 100644 --- a/settings/l10n/is.json +++ b/settings/l10n/is.json @@ -34,9 +34,6 @@ "Unable to change mail address" : "Get ekki breytt tölvupóstfangi", "Email saved" : "Tölvupóstfang vistað", "Couldn't remove app." : "Gat ekki fjarlægt forrit.", - "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp", - "Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s", - "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s", "Couldn't update app." : "Gat ekki uppfært forrit.", "Add trusted domain" : "Bæta við treystu léni", "Migration in progress. Please wait until the migration is finished" : "Yfirfærsla er í gangi. Dokaðu við þar til henni er lokið", @@ -294,6 +291,9 @@ "Default" : "Sjálfgefið", "log-level out of allowed range" : "annálsstig utan leyfðra marka", "Language changed" : "Tungumáli breytt", + "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp", + "Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s", + "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ertu viss um að þú viljir bæta \"{domain}\" við sem treystu léni?", "Please wait...." : "Andartak....", "iPhone" : "iPhone", diff --git a/settings/l10n/it.js b/settings/l10n/it.js index 59b7a06f2a2..6aa08ac59e7 100644 --- a/settings/l10n/it.js +++ b/settings/l10n/it.js @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "Email salvata", "Password confirmation is required" : "La conferma della password è richiesta", "Couldn't remove app." : "Impossibile rimuovere l'applicazione.", - "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione", - "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s", - "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s", "Couldn't update app." : "Impossibile aggiornate l'applicazione.", "Are you really sure you want add {domain} as trusted domain?" : "Sei davvero sicuro di voler aggiungere {domain} come dominio attendibile?", "Add trusted domain" : "Aggiungi dominio attendibile", @@ -341,6 +338,9 @@ OC.L10N.register( "Default" : "Predefinito", "log-level out of allowed range" : "livello di log fuori dall'intervallo consentito", "Language changed" : "Lingua modificata", + "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione", + "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s", + "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?", "Please wait...." : "Attendere...", "iPhone" : "iPhone", diff --git a/settings/l10n/it.json b/settings/l10n/it.json index 6edd1efd647..08163eef564 100644 --- a/settings/l10n/it.json +++ b/settings/l10n/it.json @@ -37,9 +37,6 @@ "Email saved" : "Email salvata", "Password confirmation is required" : "La conferma della password è richiesta", "Couldn't remove app." : "Impossibile rimuovere l'applicazione.", - "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione", - "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s", - "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s", "Couldn't update app." : "Impossibile aggiornate l'applicazione.", "Are you really sure you want add {domain} as trusted domain?" : "Sei davvero sicuro di voler aggiungere {domain} come dominio attendibile?", "Add trusted domain" : "Aggiungi dominio attendibile", @@ -339,6 +336,9 @@ "Default" : "Predefinito", "log-level out of allowed range" : "livello di log fuori dall'intervallo consentito", "Language changed" : "Lingua modificata", + "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione", + "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s", + "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?", "Please wait...." : "Attendere...", "iPhone" : "iPhone", diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js index e64915ef5c2..3eac52bbfd5 100644 --- a/settings/l10n/ja.js +++ b/settings/l10n/ja.js @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "メールアドレスを保存しました", "Password confirmation is required" : "パスワードの確認が必要です", "Couldn't remove app." : "アプリが削除できませんでした。", - "Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。", - "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません", - "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません", "Couldn't update app." : "アプリをアップデートできませんでした。", "Are you really sure you want add {domain} as trusted domain?" : "{domain} を信頼できるドメインとして追加してもよろしいですか?", "Add trusted domain" : "信頼するドメイン名に追加", @@ -125,6 +122,8 @@ OC.L10N.register( "undo" : "元に戻す", "never" : "なし", "deleted {userName}" : "{userName} を削除しました", + "Unable to add user to group {group}" : "ユーザーを {group} グループに追加できません", + "Unable to remove user from group {group}" : "ユーザーを {group} グループから削除できません", "Add group" : "グループを追加する", "Invalid quota value \"{val}\"" : "クオータ値 \"{val}\" は不正な値です。", "no group" : "グループなし", @@ -341,6 +340,9 @@ OC.L10N.register( "Default" : "デフォルト", "log-level out of allowed range" : "ログレベルが許可された範囲を超えています", "Language changed" : "言語が変更されました", + "Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。", + "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません", + "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません", "Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" を信頼するドメインに追加してもよろしいでしょうか?", "Please wait...." : "しばらくお待ちください...", "iPhone" : "iPhone", diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json index c998cccc687..2aad81aeaf6 100644 --- a/settings/l10n/ja.json +++ b/settings/l10n/ja.json @@ -37,9 +37,6 @@ "Email saved" : "メールアドレスを保存しました", "Password confirmation is required" : "パスワードの確認が必要です", "Couldn't remove app." : "アプリが削除できませんでした。", - "Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。", - "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません", - "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません", "Couldn't update app." : "アプリをアップデートできませんでした。", "Are you really sure you want add {domain} as trusted domain?" : "{domain} を信頼できるドメインとして追加してもよろしいですか?", "Add trusted domain" : "信頼するドメイン名に追加", @@ -123,6 +120,8 @@ "undo" : "元に戻す", "never" : "なし", "deleted {userName}" : "{userName} を削除しました", + "Unable to add user to group {group}" : "ユーザーを {group} グループに追加できません", + "Unable to remove user from group {group}" : "ユーザーを {group} グループから削除できません", "Add group" : "グループを追加する", "Invalid quota value \"{val}\"" : "クオータ値 \"{val}\" は不正な値です。", "no group" : "グループなし", @@ -339,6 +338,9 @@ "Default" : "デフォルト", "log-level out of allowed range" : "ログレベルが許可された範囲を超えています", "Language changed" : "言語が変更されました", + "Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。", + "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません", + "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません", "Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" を信頼するドメインに追加してもよろしいでしょうか?", "Please wait...." : "しばらくお待ちください...", "iPhone" : "iPhone", diff --git a/settings/l10n/ka_GE.js b/settings/l10n/ka_GE.js index 6371621de15..131f1beb0f3 100644 --- a/settings/l10n/ka_GE.js +++ b/settings/l10n/ka_GE.js @@ -5,9 +5,6 @@ OC.L10N.register( "Email sent" : "იმეილი გაიგზავნა", "Invalid request" : "არასწორი მოთხოვნა", "Email saved" : "იმეილი შენახულია", - "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან", - "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s", - "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s", "Couldn't update app." : "ვერ მოხერხდა აპლიკაციის განახლება.", "All" : "ყველა", "Disable" : "გამორთვა", @@ -56,6 +53,9 @@ OC.L10N.register( "set new password" : "დააყენეთ ახალი პაროლი", "Default" : "საწყისი პარამეტრები", "Language changed" : "ენა შეცვლილია", + "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან", + "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s", + "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s", "Please wait...." : "დაიცადეთ....", "Log" : "ლოგი", "More" : "უფრო მეტი", diff --git a/settings/l10n/ka_GE.json b/settings/l10n/ka_GE.json index bd1c1b4dd8c..d2953e86a98 100644 --- a/settings/l10n/ka_GE.json +++ b/settings/l10n/ka_GE.json @@ -3,9 +3,6 @@ "Email sent" : "იმეილი გაიგზავნა", "Invalid request" : "არასწორი მოთხოვნა", "Email saved" : "იმეილი შენახულია", - "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან", - "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s", - "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s", "Couldn't update app." : "ვერ მოხერხდა აპლიკაციის განახლება.", "All" : "ყველა", "Disable" : "გამორთვა", @@ -54,6 +51,9 @@ "set new password" : "დააყენეთ ახალი პაროლი", "Default" : "საწყისი პარამეტრები", "Language changed" : "ენა შეცვლილია", + "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან", + "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s", + "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s", "Please wait...." : "დაიცადეთ....", "Log" : "ლოგი", "More" : "უფრო მეტი", diff --git a/settings/l10n/km.js b/settings/l10n/km.js index 5632b01a146..5c604f03c49 100644 --- a/settings/l10n/km.js +++ b/settings/l10n/km.js @@ -10,9 +10,6 @@ OC.L10N.register( "You need to set your user email before being able to send test emails." : "អ្នកត្រូវតែកំណត់អ៊ីមែលរបស់អ្នកមុននឹងអាចផ្ញើអ៊ីមែលសាកល្បងបាន។", "Invalid request" : "សំណើមិនត្រឹមត្រូវ", "Email saved" : "បានរក្សាទុកអ៊ីមែល", - "Admins can't remove themself from the admin group" : "អ្នកគ្រប់គ្រងមិនអាចលុបខ្លួនឯងចេញពីក្រុមអ្នកគ្រប់គ្រងឡើយ", - "Unable to add user to group %s" : "មិនអាចបន្ថែមអ្នកប្រើទៅក្រុម %s", - "Unable to remove user from group %s" : "មិនអាចដកអ្នកប្រើចេញពីក្រុម %s", "Couldn't update app." : "មិនអាចធ្វើបច្ចុប្បន្នភាពកម្មវិធី។", "Sending..." : "កំពុងផ្ញើ...", "All" : "ទាំងអស់", @@ -73,6 +70,9 @@ OC.L10N.register( "set new password" : "កំណត់ពាក្យសម្ងាត់ថ្មី", "Default" : "លំនាំដើម", "Language changed" : "បានប្ដូរភាសា", + "Admins can't remove themself from the admin group" : "អ្នកគ្រប់គ្រងមិនអាចលុបខ្លួនឯងចេញពីក្រុមអ្នកគ្រប់គ្រងឡើយ", + "Unable to add user to group %s" : "មិនអាចបន្ថែមអ្នកប្រើទៅក្រុម %s", + "Unable to remove user from group %s" : "មិនអាចដកអ្នកប្រើចេញពីក្រុម %s", "Please wait...." : "សូមរង់ចាំ....", "Log" : "Log", "More" : "ច្រើនទៀត", diff --git a/settings/l10n/km.json b/settings/l10n/km.json index a08b32a609b..00f212fc436 100644 --- a/settings/l10n/km.json +++ b/settings/l10n/km.json @@ -8,9 +8,6 @@ "You need to set your user email before being able to send test emails." : "អ្នកត្រូវតែកំណត់អ៊ីមែលរបស់អ្នកមុននឹងអាចផ្ញើអ៊ីមែលសាកល្បងបាន។", "Invalid request" : "សំណើមិនត្រឹមត្រូវ", "Email saved" : "បានរក្សាទុកអ៊ីមែល", - "Admins can't remove themself from the admin group" : "អ្នកគ្រប់គ្រងមិនអាចលុបខ្លួនឯងចេញពីក្រុមអ្នកគ្រប់គ្រងឡើយ", - "Unable to add user to group %s" : "មិនអាចបន្ថែមអ្នកប្រើទៅក្រុម %s", - "Unable to remove user from group %s" : "មិនអាចដកអ្នកប្រើចេញពីក្រុម %s", "Couldn't update app." : "មិនអាចធ្វើបច្ចុប្បន្នភាពកម្មវិធី។", "Sending..." : "កំពុងផ្ញើ...", "All" : "ទាំងអស់", @@ -71,6 +68,9 @@ "set new password" : "កំណត់ពាក្យសម្ងាត់ថ្មី", "Default" : "លំនាំដើម", "Language changed" : "បានប្ដូរភាសា", + "Admins can't remove themself from the admin group" : "អ្នកគ្រប់គ្រងមិនអាចលុបខ្លួនឯងចេញពីក្រុមអ្នកគ្រប់គ្រងឡើយ", + "Unable to add user to group %s" : "មិនអាចបន្ថែមអ្នកប្រើទៅក្រុម %s", + "Unable to remove user from group %s" : "មិនអាចដកអ្នកប្រើចេញពីក្រុម %s", "Please wait...." : "សូមរង់ចាំ....", "Log" : "Log", "More" : "ច្រើនទៀត", diff --git a/settings/l10n/kn.js b/settings/l10n/kn.js index 00942e0680e..441cc3e1ee6 100644 --- a/settings/l10n/kn.js +++ b/settings/l10n/kn.js @@ -26,9 +26,6 @@ OC.L10N.register( "Unable to change mail address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", "Email saved" : "ಇ-ಅಂಚೆಯನ್ನು ಉಳಿಸಿದೆ", "Couldn't remove app." : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ", - "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ", - "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", - "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", "Couldn't update app." : " ಕಾಯಕ್ರಮವನ್ನು ನವೀಕರಿಸಲ ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.", "Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...", "All" : "ಎಲ್ಲಾ", @@ -107,6 +104,9 @@ OC.L10N.register( "change email address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಿ", "Default" : "ಆರಂಭದ ಪ್ರತಿ", "Language changed" : "ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ", + "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ", + "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", + "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", "Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....", "Everything (fatal issues, errors, warnings, info, debug)" : "ಎಲ್ಲ ರೀತಿಗಳು (ವಿನಾಶಕ ಸಮಸ್ಯೆಗಳು, ದೋಷಗಳು, ಎಚ್ಚರಿಕೆಗಳನ್ನು, ಮಾಹಿತಿ, ಇತರೆ )", "Info, warnings, errors and fatal issues" : "ಮಾಹಿತಿ, ಎಚ್ಚರಿಕೆ, ದೋಷಗಳು ಮತ್ತು ಮಾರಕ ಸಮಸ್ಯೆಗಳು", diff --git a/settings/l10n/kn.json b/settings/l10n/kn.json index 766de4c9410..76d068bfb5a 100644 --- a/settings/l10n/kn.json +++ b/settings/l10n/kn.json @@ -24,9 +24,6 @@ "Unable to change mail address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", "Email saved" : "ಇ-ಅಂಚೆಯನ್ನು ಉಳಿಸಿದೆ", "Couldn't remove app." : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ", - "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ", - "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", - "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", "Couldn't update app." : " ಕಾಯಕ್ರಮವನ್ನು ನವೀಕರಿಸಲ ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.", "Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...", "All" : "ಎಲ್ಲಾ", @@ -105,6 +102,9 @@ "change email address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಿ", "Default" : "ಆರಂಭದ ಪ್ರತಿ", "Language changed" : "ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ", + "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ", + "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", + "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", "Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....", "Everything (fatal issues, errors, warnings, info, debug)" : "ಎಲ್ಲ ರೀತಿಗಳು (ವಿನಾಶಕ ಸಮಸ್ಯೆಗಳು, ದೋಷಗಳು, ಎಚ್ಚರಿಕೆಗಳನ್ನು, ಮಾಹಿತಿ, ಇತರೆ )", "Info, warnings, errors and fatal issues" : "ಮಾಹಿತಿ, ಎಚ್ಚರಿಕೆ, ದೋಷಗಳು ಮತ್ತು ಮಾರಕ ಸಮಸ್ಯೆಗಳು", diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js index e665803a971..adaff000a69 100644 --- a/settings/l10n/ko.js +++ b/settings/l10n/ko.js @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "이메일 저장됨", "Password confirmation is required" : "암호 확인이 필요합니다", "Couldn't remove app." : "앱을 삭제할 수 없습니다.", - "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음", - "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음", - "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음", "Couldn't update app." : "앱을 업데이트할 수 없습니다.", "Are you really sure you want add {domain} as trusted domain?" : "신뢰할 수 있는 도메인 목록에 {domain}을(를) 추가하시겠습니까?", "Add trusted domain" : "신뢰할 수 있는 도메인 추가", @@ -337,6 +334,9 @@ OC.L10N.register( "Default" : "기본값", "log-level out of allowed range" : "로그 단계가 허용 범위를 벗어남", "Language changed" : "언어가 변경됨", + "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음", + "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음", + "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음", "Are you really sure you want add \"{domain}\" as trusted domain?" : "신뢰할 수 있는 도메인 목록에 \"{domain}\"을(를) 추가하시겠습니까?", "Please wait...." : "기다려 주십시오....", "iPhone" : "아이폰", diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json index 451b7b17b26..08934a74bd5 100644 --- a/settings/l10n/ko.json +++ b/settings/l10n/ko.json @@ -37,9 +37,6 @@ "Email saved" : "이메일 저장됨", "Password confirmation is required" : "암호 확인이 필요합니다", "Couldn't remove app." : "앱을 삭제할 수 없습니다.", - "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음", - "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음", - "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음", "Couldn't update app." : "앱을 업데이트할 수 없습니다.", "Are you really sure you want add {domain} as trusted domain?" : "신뢰할 수 있는 도메인 목록에 {domain}을(를) 추가하시겠습니까?", "Add trusted domain" : "신뢰할 수 있는 도메인 추가", @@ -335,6 +332,9 @@ "Default" : "기본값", "log-level out of allowed range" : "로그 단계가 허용 범위를 벗어남", "Language changed" : "언어가 변경됨", + "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음", + "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음", + "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음", "Are you really sure you want add \"{domain}\" as trusted domain?" : "신뢰할 수 있는 도메인 목록에 \"{domain}\"을(를) 추가하시겠습니까?", "Please wait...." : "기다려 주십시오....", "iPhone" : "아이폰", diff --git a/settings/l10n/lb.js b/settings/l10n/lb.js index 33960d9b9ae..9a1d28e770f 100644 --- a/settings/l10n/lb.js +++ b/settings/l10n/lb.js @@ -8,8 +8,6 @@ OC.L10N.register( "Email sent" : "Email geschéckt", "Invalid request" : "Ongülteg Requête", "Email saved" : "E-mail gespäichert", - "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.", - "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s", "All" : "All", "Disable" : "Ofschalten", "Enable" : "Aschalten", @@ -49,6 +47,8 @@ OC.L10N.register( "Other" : "Aner", "Quota" : "Quota", "Language changed" : "Sprooch huet geännert", + "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.", + "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s", "Log" : "Log", "More" : "Méi", "Less" : "Manner", diff --git a/settings/l10n/lb.json b/settings/l10n/lb.json index 20f255a6be9..cd241c5539a 100644 --- a/settings/l10n/lb.json +++ b/settings/l10n/lb.json @@ -6,8 +6,6 @@ "Email sent" : "Email geschéckt", "Invalid request" : "Ongülteg Requête", "Email saved" : "E-mail gespäichert", - "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.", - "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s", "All" : "All", "Disable" : "Ofschalten", "Enable" : "Aschalten", @@ -47,6 +45,8 @@ "Other" : "Aner", "Quota" : "Quota", "Language changed" : "Sprooch huet geännert", + "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.", + "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s", "Log" : "Log", "More" : "Méi", "Less" : "Manner", diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js index 60645a30070..6d564652550 100644 --- a/settings/l10n/lt_LT.js +++ b/settings/l10n/lt_LT.js @@ -29,9 +29,6 @@ OC.L10N.register( "Email saved" : "El. paštas įrašytas", "Password confirmation is required" : "Reikalingas slaptažodžio patvirtinimas", "Couldn't remove app." : "Nepavyko pašalinti programėlės.", - "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės", - "Unable to add user to group %s" : "Nepavyko pridėti naudotojo į grupę %s", - "Unable to remove user from group %s" : "Nepavyko pašalinti naudotojo iš grupės %s", "Couldn't update app." : "Nepavyko atnaujinti programėlės.", "Add trusted domain" : "Pridėti patikimą domeną", "Not saved" : "Neįrašyta", @@ -166,6 +163,9 @@ OC.L10N.register( "set new password" : "nustatyti naują slaptažodį", "Default" : "Numatytasis", "Language changed" : "Kalba pakeista", + "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės", + "Unable to add user to group %s" : "Nepavyko pridėti naudotojo į grupę %s", + "Unable to remove user from group %s" : "Nepavyko pašalinti naudotojo iš grupės %s", "Please wait...." : "Prašome palaukti...", "iPhone" : "iPhone", "Fatal issues only" : "Tik lemtingosios klaidos", diff --git a/settings/l10n/lt_LT.json b/settings/l10n/lt_LT.json index cd359354248..85d13b49170 100644 --- a/settings/l10n/lt_LT.json +++ b/settings/l10n/lt_LT.json @@ -27,9 +27,6 @@ "Email saved" : "El. paštas įrašytas", "Password confirmation is required" : "Reikalingas slaptažodžio patvirtinimas", "Couldn't remove app." : "Nepavyko pašalinti programėlės.", - "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės", - "Unable to add user to group %s" : "Nepavyko pridėti naudotojo į grupę %s", - "Unable to remove user from group %s" : "Nepavyko pašalinti naudotojo iš grupės %s", "Couldn't update app." : "Nepavyko atnaujinti programėlės.", "Add trusted domain" : "Pridėti patikimą domeną", "Not saved" : "Neįrašyta", @@ -164,6 +161,9 @@ "set new password" : "nustatyti naują slaptažodį", "Default" : "Numatytasis", "Language changed" : "Kalba pakeista", + "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės", + "Unable to add user to group %s" : "Nepavyko pridėti naudotojo į grupę %s", + "Unable to remove user from group %s" : "Nepavyko pašalinti naudotojo iš grupės %s", "Please wait...." : "Prašome palaukti...", "iPhone" : "iPhone", "Fatal issues only" : "Tik lemtingosios klaidos", diff --git a/settings/l10n/lv.js b/settings/l10n/lv.js index 13ea3628329..80fe836fe22 100644 --- a/settings/l10n/lv.js +++ b/settings/l10n/lv.js @@ -1,7 +1,7 @@ OC.L10N.register( "settings", { - "Enabled" : "Pievienots", + "Enabled" : "Iespējots", "Not enabled" : "Nav pievienots", "Wrong password" : "Nepareiza parole", "Saved" : "Saglabāts", @@ -10,11 +10,17 @@ OC.L10N.register( "Authentication error" : "Autentifikācijas kļūda", "Please provide an admin recovery password, otherwise all user data will be lost" : "Lūdzu ievadiet administratora atjaunošanas paroli, citādi visi lietotāja dati tiks zaudēti", "Wrong admin recovery password. Please check the password and try again." : "Nepareiza administratora atjaunošanas parole. Lūdzu pārbaudiet paroli un mēģiniet vēlreiz.", + "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Aizmugursistēmas neatbalsta paroles maiņu, bet lietotāja šifrēšanas atslēga ir veiksmīgi atjaunināta.", + "installing and updating apps via the app store or Federated Cloud Sharing" : "programmu instalēšana un atjaunināšana, izmantojot programmu veikalu vai Federatīvajām Cloud koplietošanu", "Federated Cloud Sharing" : "Federatīva mākoņkoplietošana", + "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL izmanto novecojušu %s versiju (%s). Lūdzu, atjauniniet operētājsistēmu vai funkcijām, piem., %s nedarbosies pareizi.", + "A problem occurred, please check your log files (Error: %s)" : "Radusies problēma, lūdzu, pārbaudiet žurnāla failus (Kļūda: %s)", + "Migration Completed" : "Migrācija ir pabeigta", "Group already exists." : "Grupa jau eksistē.", "Unable to add group." : "Nevar pievienot grupu.", "Unable to delete group." : "Nevar izdzēst grupu.", "test email settings" : "testēt e-pasta iestatījumus", + "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Radās kļūda, nosūtot e-pastu. Lūdzu, pārskatiet savus iestatījumus. (Kļūda: %s)", "Email sent" : "Vēstule nosūtīta", "You need to set your user email before being able to send test emails." : "Nepieciešams norādīt sava lietotāja e-pasta adresi, lai nosūtīta testa e-pastus.", "Invalid request" : "Nederīgs vaicājums", @@ -23,20 +29,25 @@ OC.L10N.register( "Unable to create user." : "Nevar izveidot lietotāju.", "Your %s account was created" : "Konts %s ir izveidots", "Unable to delete user." : "Nevar izdzēst lietotāju.", + "Settings saved" : "Iestatījumi saglabāti", "Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu", + "Unable to change email address" : "Nevar mainīt e-pasta adresi", "Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.", "Forbidden" : "Pieeja liegta", "Invalid user" : "Nepareizs lietotājs", "Unable to change mail address" : "Nevar nomainīt e-pasta adresi", "Email saved" : "E-pasts tika saglabāts", + "Password confirmation is required" : "Nepieciešams paroles apstiprinājums", "Couldn't remove app." : "Nebija iespējams atslēgt lietoni.", - "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas", - "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s", - "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s", "Couldn't update app." : "Nevarēja atjaunināt lietotni.", + "Are you really sure you want add {domain} as trusted domain?" : "Tu tiešām esi pārliecināta, ka vēlies pievienot {domain} kā uzticamu domēnu?", "Add trusted domain" : "Pievienot uzticamu domēnu", + "Migration in progress. Please wait until the migration is finished" : "Notiek migrācija. Lūdzu, pagaidiet, līdz migrēšana ir pabeigta", + "Migration started …" : "Uzsākta migrācija...", + "Not saved" : "Nav saglabāts", "Sending..." : "Sūta...", "All" : "Visi", + "Update to %s" : "Atjaunināts uz %s", "No apps found for your version" : "Neatrada aplikāciju jūsu versijai", "Error while disabling app" : "Kļūda, atvienojot lietotni", "Disable" : "Deaktivēt", @@ -48,8 +59,38 @@ OC.L10N.register( "Uninstalling ...." : "Atinstalē ....", "Error while uninstalling app" : "Kļūda, atinstalējot lietotni", "Uninstall" : "Atinstalēt", + "App update" : "Programmu atjaunināšana", + "Approved" : "Apstiprināts", + "Experimental" : "Eksperimentāls", + "Disconnect" : "Atvienot", + "Revoke" : "Atsaukt", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome for Android", + "iPhone iOS" : "iPhone iOS", + "iPad iOS" : "iPad iOS", + "iOS Client" : "iOS Klients", + "Android Client" : "Android Klients", + "Sync client - {os}" : "Sync klients - {os}", + "This session" : "Šajā sesijā", + "Copy" : "Kopēt", + "Copied!" : "Nokopēts!", + "Not supported!" : "Nav atbalstīts!", + "Press ⌘-C to copy." : "Spied ⌘-C lai kopētu.", + "Press Ctrl-C to copy." : "Spied Ctrl-C lai kopētu.", "Valid until {date}" : "Valīds līdz {date}", "Delete" : "Dzēst", + "Local" : "Lokāls", + "Private" : "Privāts", + "Only visible to local users" : "Redzami tikai lokālajiem lietotājiem", + "Only visible to you" : "Redzams tikai jums", + "Contacts" : "Kontakti", + "Visible to local users and to trusted servers" : "Redzama uz vietējiem lietotājiem un uzticamiem serveriem", + "Public" : "Publisks", + "Will be synced to a global and public address book" : "Tiks sinhronizēts ar globālu un publisku adrešu grāmatu", "Select a profile picture" : "Izvēlieties profila attēlu", "Very weak password" : "Ļoti vāja parole", "Weak password" : "Vāja parole", @@ -58,33 +99,64 @@ OC.L10N.register( "Strong password" : "Lieliska parole", "Groups" : "Grupas", "Unable to delete {objName}" : "Nevar izdzēst {objName}", + "Error creating group: {message}" : "Kļūda, veidojot grupu: {message}", "A valid group name must be provided" : "Jānorāda derīgs grupas nosaukums", "deleted {groupName}" : "grupa {groupName} dzēsta", "undo" : "atsaukt", "never" : "nekad", "deleted {userName}" : "lietotājs {userName} dzēsts", + "Unable to add user to group {group}" : "Nevar pievienot lietotāju grupai {group}", + "Unable to remove user from group {group}" : "Nevar noņemt lietotāju no grupas {group}", + "Add group" : "Pievienot grupu", + "Invalid quota value \"{val}\"" : "Nederīga kvotas vērtība \"{val}\"", + "no group" : "neviena grupa", + "Password successfully changed" : "Parole veiksmīgi nomainīta", + "Could not change the users email" : "Nevarēja mainīt lietotāja e-pasta adrese", "A valid username must be provided" : "Jānorāda derīgs lietotājvārds", + "Error creating user: {message}" : "Kļūda, veidojot lietotāju: {message}", "A valid password must be provided" : "Jānorāda derīga parole", "A valid email must be provided" : "Jānorāda derīga e-pasta adrese", "__language_name__" : "Latviešu", "Unlimited" : "Neierobežota", + "Personal info" : "Personiskā informācija", + "Sessions" : "Sesijas", + "App passwords" : "Lietotņu paroles", "Sync clients" : "Sinhronizācijas lietotnes", "None" : "Nav", "Login" : "Ierakstīties", "Plain" : "vienkāršs teksts", "NT LAN Manager" : "NT LAN Pārvaldnieks", + "SSL/TLS" : "SSL/TLS", + "STARTTLS" : "STARTTLS", + "Email server" : "E-pasta serveris", "Open documentation" : "Atvērt dokumentāciju", + "This is used for sending out notifications." : "Tas tiek izmantots, izsūtot paziņojumus.", + "Send mode" : "Sūtīšanas metode", "Encryption" : "Šifrēšana", "From address" : "No adreses", + "mail" : "e-pasts", + "Authentication method" : "Autentifikācijas metode", + "Authentication required" : "Nepieciešama autentifikācija", "Server address" : "Servera adrese", "Port" : "Ports", "Credentials" : "Akreditācijas dati", "SMTP Username" : "SMTP lietotājvārds", "SMTP Password" : "SMTP parole", + "Store credentials" : "Saglabāt akreditācijas datus", "Test email settings" : "Izmēģināt e-pasta iestatījumus", "Send email" : "Sūtīt e-pastu", + "Please read carefully before activating server-side encryption: " : "Lūdzu, izlasiet uzmanīgi pirms aktivējiet servera šifrēšanu:", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Šifrēšana vien negarantē sistēmas drošību. Skatiet dokumentāciju, lai iegūtu papildinformāciju par šifrēšanas programmu izmantošana, kā arī citu darbību gadījumos.", + "Be aware that encryption always increases the file size." : "Jāapzinās, ka šifrēšanas vienmēr palielina faila lielumu.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Vienmēr ir ieteicams regulāri veidot dublējumkopijas datu šifrēšanas gadījumam, pārliecinieties, lai dublētu, šifrēšanas atslēgas ir kopā ar jūsu datiem.", + "This is the final warning: Do you really want to enable encryption?" : "Šis ir pēdējais brīdinājums: vai tiešām vēlaties iespējot šifrēšanu?", "Enable encryption" : "Ieslēgt šifrēšanu", + "No encryption module loaded, please enable an encryption module in the app menu." : "Nav ielādēts šifrēšanas moduļis, lūdzu, aktivizējiet šifrēšanas moduli programmu izvēlnē.", + "Select default encryption module:" : "Atlasiet noklusēto šifrēšanas moduli:", + "Start migration" : "Sākt migrāciju", + "Security & setup warnings" : "Drošības un iestatījumu brīdinājumi", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūkst PHP modulis “fileinfo”. Mēs iesakām to aktivēt, lai pēc iespējas labāk noteiktu mime tipus.", + "All checks passed." : "Visas pārbaudes veiksmīgas.", "Cron" : "Cron", "Execute one task with each page loaded" : "Izpildīt vienu uzdevumu ar katru ielādēto lapu", "Version" : "Versija", @@ -92,24 +164,57 @@ OC.L10N.register( "Allow apps to use the Share API" : "Ļaut lietotnēm izmantot koplietošanas API", "Allow users to share via link" : "Ļaut lietotājiem koplietot caur saitēm", "Allow public uploads" : "Atļaut publisko augšupielādi", + "Enforce password protection" : "Ieviest paroles aizsardzību", + "Set default expiration date" : "Iestatīt noklusējuma beigu datumu", "Expire after " : "Nederīga pēc", "days" : "dienas", "Allow resharing" : "Atļaut atkārtotu koplietošanu", + "Allow sharing with groups" : "Atļaut koplietošanu ar grupu", + "Restrict users to only share with users in their groups" : "Ierobežot lietotājiem koplietot tikai ar lietotājiem savās grupās", + "Exclude groups from sharing" : "Izslēgt grupu no koplietošanas", + "How to do backups" : "Kā veikt dublēšanu", + "Advanced monitoring" : "Papildu uzraudzība", + "Performance tuning" : "Veiktspējas uzstādīšana", + "Improving the config.php" : "Uzlabot config.php", + "Theming" : "Dizains", + "Hardening and security guidance" : "Aizsardzības un drošības norādījumi", + "Developer documentation" : "Izstrādātāja dokumentācija", "Documentation:" : "Dokumentācija:", "User documentation" : "Lietotāja dokumentācija", "Admin documentation" : "Administratora dokumentācija", + "Visit website" : "Apmeklējiet vietni", + "Report a bug" : "Ziņot par kļūdu", "Show description …" : "Rādīt aprakstu …", "Hide description …" : "Slēpt aprakstu …", + "Uninstall app" : "Atinstalēt aplikāciju", + "SSL Root Certificates" : "SSL Root Sertifikāti", + "Valid until" : "Derīgs līdz", + "Valid until %s" : "Derīgs līdz %s", + "Cheers!" : "Priekā!", + "Administrator documentation" : "Administratora dokumentācija", "Online documentation" : "Tiešsaistes dokumentācija", "Forum" : "Forums", + "Getting help" : "Saņemt palīdzību", "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs izmantojiet <strong>%s</strong> no <strong>%s</strong>", "Profile picture" : "Profila attēls", "Upload new" : "Ielādēt jaunu", + "Select from Files" : "Izvēlēties no faila", "Remove image" : "Novākt attēlu", + "png or jpg, max. 20 MB" : "png vai jpg, max. 20 MB", "Cancel" : "Atcelt", + "Choose as profile picture" : "Izvēlēties kā profila attēlu", "Full name" : "Pilns vārds", "Email" : "E-pasts", "Your email address" : "Jūsu e-pasta adrese", + "No email address set" : "Nav norādīts e-pasts", + "For password recovery and notifications" : "Paroles atjaunošanai un paziņojumiem", + "Phone number" : "Tālruņa numurs", + "Your phone number" : "Jūsu tālruņa numurs", + "Address" : "Adrese", + "Your postal address" : "Jūsu pasta adrese", + "Website" : "Mājaslapa", + "Your website" : "Jūsu mājaslapa", + "Twitter" : "Twitter", "You are member of the following groups:" : "Jūs esat šādu grupu biedrs:", "Password" : "Parole", "Current password" : "Pašreizējā parole", @@ -122,30 +227,67 @@ OC.L10N.register( "Android app" : "Android lietotne", "iOS app" : "iOS lietotne", "Show First Run Wizard again" : "Vēlreiz rādīt pirmās palaišanas vedni", + "Device" : "Ierīce", + "Last activity" : "Pēdējā aktivitāte", "Name" : "Nosaukums", + "App name" : "Lietotnes nosaukums", + "Create new app password" : "Izveidot jaunu lietotnes paroli", "Username" : "Lietotājvārds", "Done" : "Pabeigts", + "Follow us on Google Plus!" : "Seko mums Google Plus!", + "Subscribe to our newsletter!" : "Abonēt mūsu jaunumus!", + "Show storage location" : "Rādīt krātuves atrašanās vietu", + "Show last log in" : "Rādīt pēdējo autorizāciju", "Send email to new user" : "Sūtīt e-pastu jaunajam lietotājam", "Show email address" : "Rādīt e-pasta adreses", "E-Mail" : "E-pasts", "Create" : "Izveidot", "Admin Recovery Password" : "Administratora atgūšanas parole", "Enter the recovery password in order to recover the users files during password change" : "Ievadiet atgūšanas paroli, lai varētu atgūt lietotāja failus paroles maiņas laikā.", + "Group name" : "Grupas nosaukums", + "Everyone" : "Visi", + "Admins" : "Admins", + "Default quota" : "Apjoms pēc noklusējuma", + "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Lūdzu, ievadiet krātuves kvotu (piem: \"512 MB\" vai \"12 GB\")", "Other" : "Cits", + "Group admin for" : "Admin grupa", "Quota" : "Apjoms", + "Storage location" : "Krātuves atrašanās vieta", + "Last login" : "Pēdējā pieteikšanās", + "change full name" : "mainīt vārdu", "set new password" : "iestatīt jaunu paroli", + "change email address" : "mainīt e-pasta adresi", "Default" : "Noklusējuma", + "log-level out of allowed range" : "žurnāla-līmenis ārpus atļautā diapazona", "Language changed" : "Valoda tika nomainīta", + "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas", + "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s", + "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Vai esat pārliecināts, ka vēlaties pievienot \"{domain}\" kā uzticamu domēnu?", "Please wait...." : "Lūdzu, uzgaidiet....", + "iPhone" : "iPhone", + "add group" : "pievienot grupu", "Everything (fatal issues, errors, warnings, info, debug)" : "Viss (letālas problēmas, kļūdas, brīdinājumi, informatīvas ziņas, atkļūdošanas paziņojumi)", "Info, warnings, errors and fatal issues" : "Informatīvas ziņas, brīdinājumi, kļūdas un letālas problēmas", "Warnings, errors and fatal issues" : "Brīdinājumi, kļūdas un letālas problēmas", "Errors and fatal issues" : "Kļūdas un letālas problēmas", "Fatal issues only" : "Tikai letālas problēmas", "Log" : "Žurnāls", + "What to log" : "Ko pierakstīt", + "Download logfile" : "Lejupielādēt žurnālfailu", "More" : "Vairāk", "Less" : "Mazāk", - "Group" : "Grupa" + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Šis žurnālfails ir lielāks par 100 MB. Lejupielāde var aizņemt kādu laiku.", + "Allow users to send mail notification for shared files" : "Atļaut lietotājiem nosūtīt e-pasta paziņojumu par koplietojamiem failiem", + "Allow users to send mail notification for shared files to other users" : "Atļaut lietotājiem nosūtīt e-pasta paziņojumu par koplietojamiem failiem citiem lietotājiem", + "Uninstall App" : "Atinstalēt aplikāciju", + "Enable experimental apps" : "Atļaut eksperimentālās lietotnes", + "Add Group" : "Pievienot grupu", + "Group" : "Grupa", + "Default Quota" : "Apjoms pēc noklusējuma", + "Full Name" : "Pilns vārds", + "Group Admin for" : "Admin grupa", + "Storage Location" : "Krātuves atrašanās vieta", + "Last Login" : "Pēdējā pieteikšanās" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/settings/l10n/lv.json b/settings/l10n/lv.json index 2633c64ed15..eea74761e44 100644 --- a/settings/l10n/lv.json +++ b/settings/l10n/lv.json @@ -1,5 +1,5 @@ { "translations": { - "Enabled" : "Pievienots", + "Enabled" : "Iespējots", "Not enabled" : "Nav pievienots", "Wrong password" : "Nepareiza parole", "Saved" : "Saglabāts", @@ -8,11 +8,17 @@ "Authentication error" : "Autentifikācijas kļūda", "Please provide an admin recovery password, otherwise all user data will be lost" : "Lūdzu ievadiet administratora atjaunošanas paroli, citādi visi lietotāja dati tiks zaudēti", "Wrong admin recovery password. Please check the password and try again." : "Nepareiza administratora atjaunošanas parole. Lūdzu pārbaudiet paroli un mēģiniet vēlreiz.", + "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Aizmugursistēmas neatbalsta paroles maiņu, bet lietotāja šifrēšanas atslēga ir veiksmīgi atjaunināta.", + "installing and updating apps via the app store or Federated Cloud Sharing" : "programmu instalēšana un atjaunināšana, izmantojot programmu veikalu vai Federatīvajām Cloud koplietošanu", "Federated Cloud Sharing" : "Federatīva mākoņkoplietošana", + "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL izmanto novecojušu %s versiju (%s). Lūdzu, atjauniniet operētājsistēmu vai funkcijām, piem., %s nedarbosies pareizi.", + "A problem occurred, please check your log files (Error: %s)" : "Radusies problēma, lūdzu, pārbaudiet žurnāla failus (Kļūda: %s)", + "Migration Completed" : "Migrācija ir pabeigta", "Group already exists." : "Grupa jau eksistē.", "Unable to add group." : "Nevar pievienot grupu.", "Unable to delete group." : "Nevar izdzēst grupu.", "test email settings" : "testēt e-pasta iestatījumus", + "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Radās kļūda, nosūtot e-pastu. Lūdzu, pārskatiet savus iestatījumus. (Kļūda: %s)", "Email sent" : "Vēstule nosūtīta", "You need to set your user email before being able to send test emails." : "Nepieciešams norādīt sava lietotāja e-pasta adresi, lai nosūtīta testa e-pastus.", "Invalid request" : "Nederīgs vaicājums", @@ -21,20 +27,25 @@ "Unable to create user." : "Nevar izveidot lietotāju.", "Your %s account was created" : "Konts %s ir izveidots", "Unable to delete user." : "Nevar izdzēst lietotāju.", + "Settings saved" : "Iestatījumi saglabāti", "Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu", + "Unable to change email address" : "Nevar mainīt e-pasta adresi", "Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.", "Forbidden" : "Pieeja liegta", "Invalid user" : "Nepareizs lietotājs", "Unable to change mail address" : "Nevar nomainīt e-pasta adresi", "Email saved" : "E-pasts tika saglabāts", + "Password confirmation is required" : "Nepieciešams paroles apstiprinājums", "Couldn't remove app." : "Nebija iespējams atslēgt lietoni.", - "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas", - "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s", - "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s", "Couldn't update app." : "Nevarēja atjaunināt lietotni.", + "Are you really sure you want add {domain} as trusted domain?" : "Tu tiešām esi pārliecināta, ka vēlies pievienot {domain} kā uzticamu domēnu?", "Add trusted domain" : "Pievienot uzticamu domēnu", + "Migration in progress. Please wait until the migration is finished" : "Notiek migrācija. Lūdzu, pagaidiet, līdz migrēšana ir pabeigta", + "Migration started …" : "Uzsākta migrācija...", + "Not saved" : "Nav saglabāts", "Sending..." : "Sūta...", "All" : "Visi", + "Update to %s" : "Atjaunināts uz %s", "No apps found for your version" : "Neatrada aplikāciju jūsu versijai", "Error while disabling app" : "Kļūda, atvienojot lietotni", "Disable" : "Deaktivēt", @@ -46,8 +57,38 @@ "Uninstalling ...." : "Atinstalē ....", "Error while uninstalling app" : "Kļūda, atinstalējot lietotni", "Uninstall" : "Atinstalēt", + "App update" : "Programmu atjaunināšana", + "Approved" : "Apstiprināts", + "Experimental" : "Eksperimentāls", + "Disconnect" : "Atvienot", + "Revoke" : "Atsaukt", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome for Android", + "iPhone iOS" : "iPhone iOS", + "iPad iOS" : "iPad iOS", + "iOS Client" : "iOS Klients", + "Android Client" : "Android Klients", + "Sync client - {os}" : "Sync klients - {os}", + "This session" : "Šajā sesijā", + "Copy" : "Kopēt", + "Copied!" : "Nokopēts!", + "Not supported!" : "Nav atbalstīts!", + "Press ⌘-C to copy." : "Spied ⌘-C lai kopētu.", + "Press Ctrl-C to copy." : "Spied Ctrl-C lai kopētu.", "Valid until {date}" : "Valīds līdz {date}", "Delete" : "Dzēst", + "Local" : "Lokāls", + "Private" : "Privāts", + "Only visible to local users" : "Redzami tikai lokālajiem lietotājiem", + "Only visible to you" : "Redzams tikai jums", + "Contacts" : "Kontakti", + "Visible to local users and to trusted servers" : "Redzama uz vietējiem lietotājiem un uzticamiem serveriem", + "Public" : "Publisks", + "Will be synced to a global and public address book" : "Tiks sinhronizēts ar globālu un publisku adrešu grāmatu", "Select a profile picture" : "Izvēlieties profila attēlu", "Very weak password" : "Ļoti vāja parole", "Weak password" : "Vāja parole", @@ -56,33 +97,64 @@ "Strong password" : "Lieliska parole", "Groups" : "Grupas", "Unable to delete {objName}" : "Nevar izdzēst {objName}", + "Error creating group: {message}" : "Kļūda, veidojot grupu: {message}", "A valid group name must be provided" : "Jānorāda derīgs grupas nosaukums", "deleted {groupName}" : "grupa {groupName} dzēsta", "undo" : "atsaukt", "never" : "nekad", "deleted {userName}" : "lietotājs {userName} dzēsts", + "Unable to add user to group {group}" : "Nevar pievienot lietotāju grupai {group}", + "Unable to remove user from group {group}" : "Nevar noņemt lietotāju no grupas {group}", + "Add group" : "Pievienot grupu", + "Invalid quota value \"{val}\"" : "Nederīga kvotas vērtība \"{val}\"", + "no group" : "neviena grupa", + "Password successfully changed" : "Parole veiksmīgi nomainīta", + "Could not change the users email" : "Nevarēja mainīt lietotāja e-pasta adrese", "A valid username must be provided" : "Jānorāda derīgs lietotājvārds", + "Error creating user: {message}" : "Kļūda, veidojot lietotāju: {message}", "A valid password must be provided" : "Jānorāda derīga parole", "A valid email must be provided" : "Jānorāda derīga e-pasta adrese", "__language_name__" : "Latviešu", "Unlimited" : "Neierobežota", + "Personal info" : "Personiskā informācija", + "Sessions" : "Sesijas", + "App passwords" : "Lietotņu paroles", "Sync clients" : "Sinhronizācijas lietotnes", "None" : "Nav", "Login" : "Ierakstīties", "Plain" : "vienkāršs teksts", "NT LAN Manager" : "NT LAN Pārvaldnieks", + "SSL/TLS" : "SSL/TLS", + "STARTTLS" : "STARTTLS", + "Email server" : "E-pasta serveris", "Open documentation" : "Atvērt dokumentāciju", + "This is used for sending out notifications." : "Tas tiek izmantots, izsūtot paziņojumus.", + "Send mode" : "Sūtīšanas metode", "Encryption" : "Šifrēšana", "From address" : "No adreses", + "mail" : "e-pasts", + "Authentication method" : "Autentifikācijas metode", + "Authentication required" : "Nepieciešama autentifikācija", "Server address" : "Servera adrese", "Port" : "Ports", "Credentials" : "Akreditācijas dati", "SMTP Username" : "SMTP lietotājvārds", "SMTP Password" : "SMTP parole", + "Store credentials" : "Saglabāt akreditācijas datus", "Test email settings" : "Izmēģināt e-pasta iestatījumus", "Send email" : "Sūtīt e-pastu", + "Please read carefully before activating server-side encryption: " : "Lūdzu, izlasiet uzmanīgi pirms aktivējiet servera šifrēšanu:", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Šifrēšana vien negarantē sistēmas drošību. Skatiet dokumentāciju, lai iegūtu papildinformāciju par šifrēšanas programmu izmantošana, kā arī citu darbību gadījumos.", + "Be aware that encryption always increases the file size." : "Jāapzinās, ka šifrēšanas vienmēr palielina faila lielumu.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Vienmēr ir ieteicams regulāri veidot dublējumkopijas datu šifrēšanas gadījumam, pārliecinieties, lai dublētu, šifrēšanas atslēgas ir kopā ar jūsu datiem.", + "This is the final warning: Do you really want to enable encryption?" : "Šis ir pēdējais brīdinājums: vai tiešām vēlaties iespējot šifrēšanu?", "Enable encryption" : "Ieslēgt šifrēšanu", + "No encryption module loaded, please enable an encryption module in the app menu." : "Nav ielādēts šifrēšanas moduļis, lūdzu, aktivizējiet šifrēšanas moduli programmu izvēlnē.", + "Select default encryption module:" : "Atlasiet noklusēto šifrēšanas moduli:", + "Start migration" : "Sākt migrāciju", + "Security & setup warnings" : "Drošības un iestatījumu brīdinājumi", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūkst PHP modulis “fileinfo”. Mēs iesakām to aktivēt, lai pēc iespējas labāk noteiktu mime tipus.", + "All checks passed." : "Visas pārbaudes veiksmīgas.", "Cron" : "Cron", "Execute one task with each page loaded" : "Izpildīt vienu uzdevumu ar katru ielādēto lapu", "Version" : "Versija", @@ -90,24 +162,57 @@ "Allow apps to use the Share API" : "Ļaut lietotnēm izmantot koplietošanas API", "Allow users to share via link" : "Ļaut lietotājiem koplietot caur saitēm", "Allow public uploads" : "Atļaut publisko augšupielādi", + "Enforce password protection" : "Ieviest paroles aizsardzību", + "Set default expiration date" : "Iestatīt noklusējuma beigu datumu", "Expire after " : "Nederīga pēc", "days" : "dienas", "Allow resharing" : "Atļaut atkārtotu koplietošanu", + "Allow sharing with groups" : "Atļaut koplietošanu ar grupu", + "Restrict users to only share with users in their groups" : "Ierobežot lietotājiem koplietot tikai ar lietotājiem savās grupās", + "Exclude groups from sharing" : "Izslēgt grupu no koplietošanas", + "How to do backups" : "Kā veikt dublēšanu", + "Advanced monitoring" : "Papildu uzraudzība", + "Performance tuning" : "Veiktspējas uzstādīšana", + "Improving the config.php" : "Uzlabot config.php", + "Theming" : "Dizains", + "Hardening and security guidance" : "Aizsardzības un drošības norādījumi", + "Developer documentation" : "Izstrādātāja dokumentācija", "Documentation:" : "Dokumentācija:", "User documentation" : "Lietotāja dokumentācija", "Admin documentation" : "Administratora dokumentācija", + "Visit website" : "Apmeklējiet vietni", + "Report a bug" : "Ziņot par kļūdu", "Show description …" : "Rādīt aprakstu …", "Hide description …" : "Slēpt aprakstu …", + "Uninstall app" : "Atinstalēt aplikāciju", + "SSL Root Certificates" : "SSL Root Sertifikāti", + "Valid until" : "Derīgs līdz", + "Valid until %s" : "Derīgs līdz %s", + "Cheers!" : "Priekā!", + "Administrator documentation" : "Administratora dokumentācija", "Online documentation" : "Tiešsaistes dokumentācija", "Forum" : "Forums", + "Getting help" : "Saņemt palīdzību", "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs izmantojiet <strong>%s</strong> no <strong>%s</strong>", "Profile picture" : "Profila attēls", "Upload new" : "Ielādēt jaunu", + "Select from Files" : "Izvēlēties no faila", "Remove image" : "Novākt attēlu", + "png or jpg, max. 20 MB" : "png vai jpg, max. 20 MB", "Cancel" : "Atcelt", + "Choose as profile picture" : "Izvēlēties kā profila attēlu", "Full name" : "Pilns vārds", "Email" : "E-pasts", "Your email address" : "Jūsu e-pasta adrese", + "No email address set" : "Nav norādīts e-pasts", + "For password recovery and notifications" : "Paroles atjaunošanai un paziņojumiem", + "Phone number" : "Tālruņa numurs", + "Your phone number" : "Jūsu tālruņa numurs", + "Address" : "Adrese", + "Your postal address" : "Jūsu pasta adrese", + "Website" : "Mājaslapa", + "Your website" : "Jūsu mājaslapa", + "Twitter" : "Twitter", "You are member of the following groups:" : "Jūs esat šādu grupu biedrs:", "Password" : "Parole", "Current password" : "Pašreizējā parole", @@ -120,30 +225,67 @@ "Android app" : "Android lietotne", "iOS app" : "iOS lietotne", "Show First Run Wizard again" : "Vēlreiz rādīt pirmās palaišanas vedni", + "Device" : "Ierīce", + "Last activity" : "Pēdējā aktivitāte", "Name" : "Nosaukums", + "App name" : "Lietotnes nosaukums", + "Create new app password" : "Izveidot jaunu lietotnes paroli", "Username" : "Lietotājvārds", "Done" : "Pabeigts", + "Follow us on Google Plus!" : "Seko mums Google Plus!", + "Subscribe to our newsletter!" : "Abonēt mūsu jaunumus!", + "Show storage location" : "Rādīt krātuves atrašanās vietu", + "Show last log in" : "Rādīt pēdējo autorizāciju", "Send email to new user" : "Sūtīt e-pastu jaunajam lietotājam", "Show email address" : "Rādīt e-pasta adreses", "E-Mail" : "E-pasts", "Create" : "Izveidot", "Admin Recovery Password" : "Administratora atgūšanas parole", "Enter the recovery password in order to recover the users files during password change" : "Ievadiet atgūšanas paroli, lai varētu atgūt lietotāja failus paroles maiņas laikā.", + "Group name" : "Grupas nosaukums", + "Everyone" : "Visi", + "Admins" : "Admins", + "Default quota" : "Apjoms pēc noklusējuma", + "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Lūdzu, ievadiet krātuves kvotu (piem: \"512 MB\" vai \"12 GB\")", "Other" : "Cits", + "Group admin for" : "Admin grupa", "Quota" : "Apjoms", + "Storage location" : "Krātuves atrašanās vieta", + "Last login" : "Pēdējā pieteikšanās", + "change full name" : "mainīt vārdu", "set new password" : "iestatīt jaunu paroli", + "change email address" : "mainīt e-pasta adresi", "Default" : "Noklusējuma", + "log-level out of allowed range" : "žurnāla-līmenis ārpus atļautā diapazona", "Language changed" : "Valoda tika nomainīta", + "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas", + "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s", + "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Vai esat pārliecināts, ka vēlaties pievienot \"{domain}\" kā uzticamu domēnu?", "Please wait...." : "Lūdzu, uzgaidiet....", + "iPhone" : "iPhone", + "add group" : "pievienot grupu", "Everything (fatal issues, errors, warnings, info, debug)" : "Viss (letālas problēmas, kļūdas, brīdinājumi, informatīvas ziņas, atkļūdošanas paziņojumi)", "Info, warnings, errors and fatal issues" : "Informatīvas ziņas, brīdinājumi, kļūdas un letālas problēmas", "Warnings, errors and fatal issues" : "Brīdinājumi, kļūdas un letālas problēmas", "Errors and fatal issues" : "Kļūdas un letālas problēmas", "Fatal issues only" : "Tikai letālas problēmas", "Log" : "Žurnāls", + "What to log" : "Ko pierakstīt", + "Download logfile" : "Lejupielādēt žurnālfailu", "More" : "Vairāk", "Less" : "Mazāk", - "Group" : "Grupa" + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Šis žurnālfails ir lielāks par 100 MB. Lejupielāde var aizņemt kādu laiku.", + "Allow users to send mail notification for shared files" : "Atļaut lietotājiem nosūtīt e-pasta paziņojumu par koplietojamiem failiem", + "Allow users to send mail notification for shared files to other users" : "Atļaut lietotājiem nosūtīt e-pasta paziņojumu par koplietojamiem failiem citiem lietotājiem", + "Uninstall App" : "Atinstalēt aplikāciju", + "Enable experimental apps" : "Atļaut eksperimentālās lietotnes", + "Add Group" : "Pievienot grupu", + "Group" : "Grupa", + "Default Quota" : "Apjoms pēc noklusējuma", + "Full Name" : "Pilns vārds", + "Group Admin for" : "Admin grupa", + "Storage Location" : "Krātuves atrašanās vieta", + "Last Login" : "Pēdējā pieteikšanās" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" }
\ No newline at end of file diff --git a/settings/l10n/mk.js b/settings/l10n/mk.js index ed5cde4f7d0..b4ddc955102 100644 --- a/settings/l10n/mk.js +++ b/settings/l10n/mk.js @@ -33,9 +33,6 @@ OC.L10N.register( "Unable to change mail address" : "Не можам да ја променам електронската адреса/пошта", "Email saved" : "Електронската пошта е снимена", "Couldn't remove app." : "Не можам да ја отстранам апликацијата.", - "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата", - "Unable to add user to group %s" : "Неможе да додадам корисник во група %s", - "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s", "Couldn't update app." : "Не можам да ја надградам апликацијата.", "Add trusted domain" : "Додади доверлив домејн", "Migration started …" : "Миграцијата е започнаа ...", @@ -163,6 +160,9 @@ OC.L10N.register( "Default" : "Предефиниран", "log-level out of allowed range" : "нивото на логирање е надвор од дозволениот опсег", "Language changed" : "Јазикот е сменет", + "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата", + "Unable to add user to group %s" : "Неможе да додадам корисник во група %s", + "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s", "Please wait...." : "Ве молам почекајте ...", "Info, warnings, errors and fatal issues" : "Информации, предупредувања, грешки и фатални работи", "Warnings, errors and fatal issues" : "Предупредувања, грешки и фатални работи", diff --git a/settings/l10n/mk.json b/settings/l10n/mk.json index 65d7b25933f..cbb05bbd380 100644 --- a/settings/l10n/mk.json +++ b/settings/l10n/mk.json @@ -31,9 +31,6 @@ "Unable to change mail address" : "Не можам да ја променам електронската адреса/пошта", "Email saved" : "Електронската пошта е снимена", "Couldn't remove app." : "Не можам да ја отстранам апликацијата.", - "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата", - "Unable to add user to group %s" : "Неможе да додадам корисник во група %s", - "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s", "Couldn't update app." : "Не можам да ја надградам апликацијата.", "Add trusted domain" : "Додади доверлив домејн", "Migration started …" : "Миграцијата е започнаа ...", @@ -161,6 +158,9 @@ "Default" : "Предефиниран", "log-level out of allowed range" : "нивото на логирање е надвор од дозволениот опсег", "Language changed" : "Јазикот е сменет", + "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата", + "Unable to add user to group %s" : "Неможе да додадам корисник во група %s", + "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s", "Please wait...." : "Ве молам почекајте ...", "Info, warnings, errors and fatal issues" : "Информации, предупредувања, грешки и фатални работи", "Warnings, errors and fatal issues" : "Предупредувања, грешки и фатални работи", diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js index 9dd8ab0ac72..32cc38f7759 100644 --- a/settings/l10n/nb_NO.js +++ b/settings/l10n/nb_NO.js @@ -36,9 +36,6 @@ OC.L10N.register( "Unable to change mail address" : "Kan ikke endre epost-adresse", "Email saved" : "Epost lagret", "Couldn't remove app." : "Klarte ikke å fjerne app.", - "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen", - "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s", - "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s", "Couldn't update app." : "Kunne ikke oppdatere app.", "Add trusted domain" : "Legg til et klarert domene", "Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til migreringen er ferdig.", @@ -309,6 +306,9 @@ OC.L10N.register( "Default" : "Standard", "log-level out of allowed range" : "Loggnivå utenfor tillatt område", "Language changed" : "Språk endret", + "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen", + "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s", + "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som klarert domene?", "Please wait...." : "Vennligst vent...", "iPhone" : "iPhone", diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json index 96f6a5b8be4..dc153fc66f6 100644 --- a/settings/l10n/nb_NO.json +++ b/settings/l10n/nb_NO.json @@ -34,9 +34,6 @@ "Unable to change mail address" : "Kan ikke endre epost-adresse", "Email saved" : "Epost lagret", "Couldn't remove app." : "Klarte ikke å fjerne app.", - "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen", - "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s", - "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s", "Couldn't update app." : "Kunne ikke oppdatere app.", "Add trusted domain" : "Legg til et klarert domene", "Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til migreringen er ferdig.", @@ -307,6 +304,9 @@ "Default" : "Standard", "log-level out of allowed range" : "Loggnivå utenfor tillatt område", "Language changed" : "Språk endret", + "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen", + "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s", + "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som klarert domene?", "Please wait...." : "Vennligst vent...", "iPhone" : "iPhone", diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js index ad50ed8781e..913c94e04cb 100644 --- a/settings/l10n/nl.js +++ b/settings/l10n/nl.js @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "E-mail opgeslagen", "Password confirmation is required" : "Wachtwoordbevestiging vereist", "Couldn't remove app." : "Kon app niet verwijderen.", - "Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen", - "Unable to add user to group %s" : "Niet in staat om gebruiker toe te voegen aan groep %s", - "Unable to remove user from group %s" : "Niet in staat om gebruiker te verwijderen uit groep %s", "Couldn't update app." : "Kon de app niet bijwerken.", "Are you really sure you want add {domain} as trusted domain?" : "Bent u er zeker van om {domain} als vertrouwd domein toe te voegen?", "Add trusted domain" : "Vertrouwd domein toevoegen", @@ -125,6 +122,8 @@ OC.L10N.register( "undo" : "ongedaan maken", "never" : "geen", "deleted {userName}" : "verwijderd {userName}", + "Unable to add user to group {group}" : "Kan niet worden toegevoegd aan gebruikersgroep {group}", + "Unable to remove user from group {group}" : "Gebruiker kan niet worden verwijderd van groep {group}", "Add group" : "Groep toevoegen", "Invalid quota value \"{val}\"" : "Ongeldige quota waarde \"{val}\"", "no group" : "geen groep", @@ -341,6 +340,9 @@ OC.L10N.register( "Default" : "Standaard", "log-level out of allowed range" : "loggingniveau buiten toegestane bereik", "Language changed" : "Taal aangepast", + "Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen", + "Unable to add user to group %s" : "Niet in staat om gebruiker toe te voegen aan groep %s", + "Unable to remove user from group %s" : "Niet in staat om gebruiker te verwijderen uit groep %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Weet je zeker dat je \"{domain}\" als een vertrouwd domein wilt toevoegen?", "Please wait...." : "Even geduld a.u.b.", "iPhone" : "iPhone", diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json index bb09350a18d..c21b9b0c9c1 100644 --- a/settings/l10n/nl.json +++ b/settings/l10n/nl.json @@ -37,9 +37,6 @@ "Email saved" : "E-mail opgeslagen", "Password confirmation is required" : "Wachtwoordbevestiging vereist", "Couldn't remove app." : "Kon app niet verwijderen.", - "Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen", - "Unable to add user to group %s" : "Niet in staat om gebruiker toe te voegen aan groep %s", - "Unable to remove user from group %s" : "Niet in staat om gebruiker te verwijderen uit groep %s", "Couldn't update app." : "Kon de app niet bijwerken.", "Are you really sure you want add {domain} as trusted domain?" : "Bent u er zeker van om {domain} als vertrouwd domein toe te voegen?", "Add trusted domain" : "Vertrouwd domein toevoegen", @@ -123,6 +120,8 @@ "undo" : "ongedaan maken", "never" : "geen", "deleted {userName}" : "verwijderd {userName}", + "Unable to add user to group {group}" : "Kan niet worden toegevoegd aan gebruikersgroep {group}", + "Unable to remove user from group {group}" : "Gebruiker kan niet worden verwijderd van groep {group}", "Add group" : "Groep toevoegen", "Invalid quota value \"{val}\"" : "Ongeldige quota waarde \"{val}\"", "no group" : "geen groep", @@ -339,6 +338,9 @@ "Default" : "Standaard", "log-level out of allowed range" : "loggingniveau buiten toegestane bereik", "Language changed" : "Taal aangepast", + "Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen", + "Unable to add user to group %s" : "Niet in staat om gebruiker toe te voegen aan groep %s", + "Unable to remove user from group %s" : "Niet in staat om gebruiker te verwijderen uit groep %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Weet je zeker dat je \"{domain}\" als een vertrouwd domein wilt toevoegen?", "Please wait...." : "Even geduld a.u.b.", "iPhone" : "iPhone", diff --git a/settings/l10n/nn_NO.js b/settings/l10n/nn_NO.js index 8e55154fd83..a3715eaf4d8 100644 --- a/settings/l10n/nn_NO.js +++ b/settings/l10n/nn_NO.js @@ -10,9 +10,6 @@ OC.L10N.register( "Email sent" : "E-post sendt", "Invalid request" : "Ugyldig førespurnad", "Email saved" : "E-postadresse lagra", - "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa", - "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s", - "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s", "Couldn't update app." : "Klarte ikkje oppdatera programmet.", "All" : "Alle", "Error while disabling app" : "Klarte ikkje å skru av programmet", @@ -72,6 +69,9 @@ OC.L10N.register( "set new password" : "lag nytt passord", "Default" : "Standard", "Language changed" : "Språk endra", + "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa", + "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s", + "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s", "Please wait...." : "Ver venleg og vent …", "Log" : "Logg", "More" : "Meir", diff --git a/settings/l10n/nn_NO.json b/settings/l10n/nn_NO.json index 2fdd74a5424..940aa42c3b1 100644 --- a/settings/l10n/nn_NO.json +++ b/settings/l10n/nn_NO.json @@ -8,9 +8,6 @@ "Email sent" : "E-post sendt", "Invalid request" : "Ugyldig førespurnad", "Email saved" : "E-postadresse lagra", - "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa", - "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s", - "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s", "Couldn't update app." : "Klarte ikkje oppdatera programmet.", "All" : "Alle", "Error while disabling app" : "Klarte ikkje å skru av programmet", @@ -70,6 +67,9 @@ "set new password" : "lag nytt passord", "Default" : "Standard", "Language changed" : "Språk endra", + "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa", + "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s", + "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s", "Please wait...." : "Ver venleg og vent …", "Log" : "Logg", "More" : "Meir", diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js index 44444e737dc..84b81f181a1 100644 --- a/settings/l10n/pl.js +++ b/settings/l10n/pl.js @@ -38,9 +38,6 @@ OC.L10N.register( "Email saved" : "E-mail zapisany", "Password confirmation is required" : "Wymagane jest potwierdzenie hasła", "Couldn't remove app." : "Nie można usunąć aplikacji.", - "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów", - "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s", - "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s", "Couldn't update app." : "Nie można uaktualnić aplikacji.", "Are you really sure you want add {domain} as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?", "Add trusted domain" : "Dodaj zaufaną domenę", @@ -310,6 +307,9 @@ OC.L10N.register( "Default" : "Domyślny", "log-level out of allowed range" : "wartość log-level spoza dozwolonego zakresu", "Language changed" : "Zmieniono język", + "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów", + "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s", + "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?", "Please wait...." : "Proszę czekać...", "iPhone" : "iPhone", diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json index 87b0f8f1d57..01e92aeef88 100644 --- a/settings/l10n/pl.json +++ b/settings/l10n/pl.json @@ -36,9 +36,6 @@ "Email saved" : "E-mail zapisany", "Password confirmation is required" : "Wymagane jest potwierdzenie hasła", "Couldn't remove app." : "Nie można usunąć aplikacji.", - "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów", - "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s", - "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s", "Couldn't update app." : "Nie można uaktualnić aplikacji.", "Are you really sure you want add {domain} as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?", "Add trusted domain" : "Dodaj zaufaną domenę", @@ -308,6 +305,9 @@ "Default" : "Domyślny", "log-level out of allowed range" : "wartość log-level spoza dozwolonego zakresu", "Language changed" : "Zmieniono język", + "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów", + "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s", + "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?", "Please wait...." : "Proszę czekać...", "iPhone" : "iPhone", diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js index 807f63c7618..b43a307e705 100644 --- a/settings/l10n/pt_BR.js +++ b/settings/l10n/pt_BR.js @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "E-mail salvo", "Password confirmation is required" : "A confirmação da senha é necessária", "Couldn't remove app." : "Não foi possível remover aplicativos.", - "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração", - "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s", - "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s", "Couldn't update app." : "Não foi possível atualizar a app.", "Are you really sure you want add {domain} as trusted domain?" : "Tem certeza que deseja adicionar {domain} como um domínio confiável", "Add trusted domain" : "Adicionar domínio confiável", @@ -125,6 +122,8 @@ OC.L10N.register( "undo" : "desfazer", "never" : "nunca", "deleted {userName}" : "eliminado {userName}", + "Unable to add user to group {group}" : "Não é possível adicionar usuário ao grupo {group}", + "Unable to remove user from group {group}" : "Não é possível remover usuário do grupo {group}", "Add group" : "Adicionar grupo", "Invalid quota value \"{val}\"" : "Valor da quota inválido \"{val}\"", "no group" : "nenhum grupo", @@ -341,6 +340,9 @@ OC.L10N.register( "Default" : "Padrão", "log-level out of allowed range" : "log-nível acima do permitido", "Language changed" : "Idioma alterado", + "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração", + "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s", + "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Deseja realemente adicionar \"{domain}\" como domínio confiável?", "Please wait...." : "Por favor, aguarde...", "iPhone" : "iPhone", diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json index 29fef7a6721..093fb8cd92a 100644 --- a/settings/l10n/pt_BR.json +++ b/settings/l10n/pt_BR.json @@ -37,9 +37,6 @@ "Email saved" : "E-mail salvo", "Password confirmation is required" : "A confirmação da senha é necessária", "Couldn't remove app." : "Não foi possível remover aplicativos.", - "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração", - "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s", - "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s", "Couldn't update app." : "Não foi possível atualizar a app.", "Are you really sure you want add {domain} as trusted domain?" : "Tem certeza que deseja adicionar {domain} como um domínio confiável", "Add trusted domain" : "Adicionar domínio confiável", @@ -123,6 +120,8 @@ "undo" : "desfazer", "never" : "nunca", "deleted {userName}" : "eliminado {userName}", + "Unable to add user to group {group}" : "Não é possível adicionar usuário ao grupo {group}", + "Unable to remove user from group {group}" : "Não é possível remover usuário do grupo {group}", "Add group" : "Adicionar grupo", "Invalid quota value \"{val}\"" : "Valor da quota inválido \"{val}\"", "no group" : "nenhum grupo", @@ -339,6 +338,9 @@ "Default" : "Padrão", "log-level out of allowed range" : "log-nível acima do permitido", "Language changed" : "Idioma alterado", + "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração", + "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s", + "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Deseja realemente adicionar \"{domain}\" como domínio confiável?", "Please wait...." : "Por favor, aguarde...", "iPhone" : "iPhone", diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js index 91f8d3570ca..3662b709bc9 100644 --- a/settings/l10n/pt_PT.js +++ b/settings/l10n/pt_PT.js @@ -36,9 +36,6 @@ OC.L10N.register( "Unable to change mail address" : "Não foi possível alterar o teu endereço de email", "Email saved" : "E-mail guardado", "Couldn't remove app." : "Não foi possível remover a aplicação.", - "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.", - "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s", - "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s", "Couldn't update app." : "Não foi possível atualizar a app.", "Add trusted domain" : "Adicionar domínio confiável ", "Migration in progress. Please wait until the migration is finished" : "Migração em progresso. Por favor, aguarde até que a mesma esteja concluída..", @@ -254,6 +251,9 @@ OC.L10N.register( "Default" : "Padrão", "log-level out of allowed range" : "log-level fora do alcance permitido", "Language changed" : "Idioma alterado", + "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.", + "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s", + "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?", "Please wait...." : "Por favor, aguarde...", "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)", diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json index 9b2e2b49c24..28f83d064dd 100644 --- a/settings/l10n/pt_PT.json +++ b/settings/l10n/pt_PT.json @@ -34,9 +34,6 @@ "Unable to change mail address" : "Não foi possível alterar o teu endereço de email", "Email saved" : "E-mail guardado", "Couldn't remove app." : "Não foi possível remover a aplicação.", - "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.", - "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s", - "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s", "Couldn't update app." : "Não foi possível atualizar a app.", "Add trusted domain" : "Adicionar domínio confiável ", "Migration in progress. Please wait until the migration is finished" : "Migração em progresso. Por favor, aguarde até que a mesma esteja concluída..", @@ -252,6 +249,9 @@ "Default" : "Padrão", "log-level out of allowed range" : "log-level fora do alcance permitido", "Language changed" : "Idioma alterado", + "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.", + "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s", + "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?", "Please wait...." : "Por favor, aguarde...", "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)", diff --git a/settings/l10n/ro.js b/settings/l10n/ro.js index 8d21c64415b..d6a2d997686 100644 --- a/settings/l10n/ro.js +++ b/settings/l10n/ro.js @@ -32,9 +32,6 @@ OC.L10N.register( "Unable to change mail address" : "Nu s-a putut schimba adresa email", "Email saved" : "E-mail salvat", "Couldn't remove app." : "Nu s-a putut înlătura aplicația.", - "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul adminnistrativ", - "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul în grupul %s", - "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s", "Couldn't update app." : "Aplicaţia nu s-a putut actualiza.", "Add trusted domain" : "Adaugă domeniu de încredere", "Migration in progress. Please wait until the migration is finished" : "Migrare în progres. Așteaptă până când migrarea este finalizată", @@ -188,6 +185,9 @@ OC.L10N.register( "Default" : "Implicită", "log-level out of allowed range" : "NIvelul de logare este în afara plajei admise", "Language changed" : "Limba a fost schimbată", + "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul adminnistrativ", + "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul în grupul %s", + "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s", "Please wait...." : "Aşteptaţi vă rog....", "Everything (fatal issues, errors, warnings, info, debug)" : "Tot (erori fatale, erori, avertizări, informări, depanare)", "Info, warnings, errors and fatal issues" : "Informări, avertizări, erori și erori fatale", diff --git a/settings/l10n/ro.json b/settings/l10n/ro.json index bf931ed386d..3edcf42290f 100644 --- a/settings/l10n/ro.json +++ b/settings/l10n/ro.json @@ -30,9 +30,6 @@ "Unable to change mail address" : "Nu s-a putut schimba adresa email", "Email saved" : "E-mail salvat", "Couldn't remove app." : "Nu s-a putut înlătura aplicația.", - "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul adminnistrativ", - "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul în grupul %s", - "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s", "Couldn't update app." : "Aplicaţia nu s-a putut actualiza.", "Add trusted domain" : "Adaugă domeniu de încredere", "Migration in progress. Please wait until the migration is finished" : "Migrare în progres. Așteaptă până când migrarea este finalizată", @@ -186,6 +183,9 @@ "Default" : "Implicită", "log-level out of allowed range" : "NIvelul de logare este în afara plajei admise", "Language changed" : "Limba a fost schimbată", + "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul adminnistrativ", + "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul în grupul %s", + "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s", "Please wait...." : "Aşteptaţi vă rog....", "Everything (fatal issues, errors, warnings, info, debug)" : "Tot (erori fatale, erori, avertizări, informări, depanare)", "Info, warnings, errors and fatal issues" : "Informări, avertizări, erori și erori fatale", diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js index 906bf2e7b53..08134d27f05 100644 --- a/settings/l10n/ru.js +++ b/settings/l10n/ru.js @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "Адрес сохранен", "Password confirmation is required" : "Требуется подтверждение пароля", "Couldn't remove app." : "Не удалось удалить приложение.", - "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов", - "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s", - "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s", "Couldn't update app." : "Невозможно обновить приложение", "Are you really sure you want add {domain} as trusted domain?" : "Вы действительно хотите добавить домен {domain} как доверенный?", "Add trusted domain" : "Добавить доверенный домен", @@ -125,6 +122,8 @@ OC.L10N.register( "undo" : "отмена", "never" : "никогда", "deleted {userName}" : "удалён {userName}", + "Unable to add user to group {group}" : "Невозможно добавить пользователя в группу {group}", + "Unable to remove user from group {group}" : "Невозможно удалить пользователя из группы {group}", "Add group" : "Добавить группу", "Invalid quota value \"{val}\"" : "Недопустимая величина квоты \"{val}\"", "no group" : "Без группы", @@ -341,6 +340,9 @@ OC.L10N.register( "Default" : "По умолчанию", "log-level out of allowed range" : "уровень журнала вышел за разрешенный диапазон", "Language changed" : "Язык изменён", + "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов", + "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s", + "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?", "Please wait...." : "Пожалуйста подождите...", "iPhone" : "iPhone", diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json index acc42b2cb49..06e76ea1651 100644 --- a/settings/l10n/ru.json +++ b/settings/l10n/ru.json @@ -37,9 +37,6 @@ "Email saved" : "Адрес сохранен", "Password confirmation is required" : "Требуется подтверждение пароля", "Couldn't remove app." : "Не удалось удалить приложение.", - "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов", - "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s", - "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s", "Couldn't update app." : "Невозможно обновить приложение", "Are you really sure you want add {domain} as trusted domain?" : "Вы действительно хотите добавить домен {domain} как доверенный?", "Add trusted domain" : "Добавить доверенный домен", @@ -123,6 +120,8 @@ "undo" : "отмена", "never" : "никогда", "deleted {userName}" : "удалён {userName}", + "Unable to add user to group {group}" : "Невозможно добавить пользователя в группу {group}", + "Unable to remove user from group {group}" : "Невозможно удалить пользователя из группы {group}", "Add group" : "Добавить группу", "Invalid quota value \"{val}\"" : "Недопустимая величина квоты \"{val}\"", "no group" : "Без группы", @@ -339,6 +338,9 @@ "Default" : "По умолчанию", "log-level out of allowed range" : "уровень журнала вышел за разрешенный диапазон", "Language changed" : "Язык изменён", + "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов", + "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s", + "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?", "Please wait...." : "Пожалуйста подождите...", "iPhone" : "iPhone", diff --git a/settings/l10n/si_LK.js b/settings/l10n/si_LK.js index fb8754b18cc..4ea33986970 100644 --- a/settings/l10n/si_LK.js +++ b/settings/l10n/si_LK.js @@ -4,8 +4,6 @@ OC.L10N.register( "Authentication error" : "සත්යාපන දෝෂයක්", "Invalid request" : "අවලංගු අයැදුමක්", "Email saved" : "වි-තැපෑල සුරකින ලදී", - "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක", - "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක", "All" : "සියල්ල", "Disable" : "අක්රිය කරන්න", "Enable" : "සක්රිය කරන්න", @@ -36,6 +34,8 @@ OC.L10N.register( "Other" : "වෙනත්", "Quota" : "සලාකය", "Language changed" : "භාෂාව ාවනස් කිරීම", + "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක", + "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක", "Log" : "ලඝුව", "More" : "වැඩි", "Less" : "අඩු" diff --git a/settings/l10n/si_LK.json b/settings/l10n/si_LK.json index 93559d04eb8..0f9ebafcd6e 100644 --- a/settings/l10n/si_LK.json +++ b/settings/l10n/si_LK.json @@ -2,8 +2,6 @@ "Authentication error" : "සත්යාපන දෝෂයක්", "Invalid request" : "අවලංගු අයැදුමක්", "Email saved" : "වි-තැපෑල සුරකින ලදී", - "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක", - "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක", "All" : "සියල්ල", "Disable" : "අක්රිය කරන්න", "Enable" : "සක්රිය කරන්න", @@ -34,6 +32,8 @@ "Other" : "වෙනත්", "Quota" : "සලාකය", "Language changed" : "භාෂාව ාවනස් කිරීම", + "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක", + "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක", "Log" : "ලඝුව", "More" : "වැඩි", "Less" : "අඩු" diff --git a/settings/l10n/sk_SK.js b/settings/l10n/sk_SK.js index 6af204caaa9..2d3e4a35609 100644 --- a/settings/l10n/sk_SK.js +++ b/settings/l10n/sk_SK.js @@ -37,9 +37,6 @@ OC.L10N.register( "Email saved" : "Email uložený", "Password confirmation is required" : "Vyžaduje sa overenie heslom", "Couldn't remove app." : "Nemožno odstrániť aplikáciu.", - "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin", - "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s", - "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s", "Couldn't update app." : "Nemožno aktualizovať aplikáciu.", "Are you really sure you want add {domain} as trusted domain?" : "Ste si istí, že chcete pridať {domain} medzi dôveryhodné domény?", "Add trusted domain" : "Pridať dôveryhodnú doménu", @@ -225,6 +222,7 @@ OC.L10N.register( "Import root certificate" : "Importovať koreňový certifikát", "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Dobrý deň,<br><br>toto je oznámenie o novo vytvorenom účte %s.<br><br>Vaše používateľské meno: <strong>%s</strong><br>Prihlásiť sa môžete tu: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Pekný deň!", + "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Dobrý deň,\n\ntoto je oznámenie o novo vytvorenom účte %s.\n\nVaše používateľské meno: %s\nPrihlásiť sa môžete tu: %s\n\n", "Administrator documentation" : "Príručka administrátora", "Online documentation" : "Online príručka", "Forum" : "Fórum", @@ -303,6 +301,9 @@ OC.L10N.register( "Default" : "Predvolené", "log-level out of allowed range" : "úroveň logovania z povoleného rozpätia", "Language changed" : "Jazyk zmenený", + "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin", + "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s", + "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ste si istí, že chcete pridať \"{domain}\" medzi dôveryhodné domény?", "Please wait...." : "Čakajte prosím...", "iPhone" : "iPhone", diff --git a/settings/l10n/sk_SK.json b/settings/l10n/sk_SK.json index faf66bbaca6..227e9b1b061 100644 --- a/settings/l10n/sk_SK.json +++ b/settings/l10n/sk_SK.json @@ -35,9 +35,6 @@ "Email saved" : "Email uložený", "Password confirmation is required" : "Vyžaduje sa overenie heslom", "Couldn't remove app." : "Nemožno odstrániť aplikáciu.", - "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin", - "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s", - "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s", "Couldn't update app." : "Nemožno aktualizovať aplikáciu.", "Are you really sure you want add {domain} as trusted domain?" : "Ste si istí, že chcete pridať {domain} medzi dôveryhodné domény?", "Add trusted domain" : "Pridať dôveryhodnú doménu", @@ -223,6 +220,7 @@ "Import root certificate" : "Importovať koreňový certifikát", "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Dobrý deň,<br><br>toto je oznámenie o novo vytvorenom účte %s.<br><br>Vaše používateľské meno: <strong>%s</strong><br>Prihlásiť sa môžete tu: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Pekný deň!", + "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Dobrý deň,\n\ntoto je oznámenie o novo vytvorenom účte %s.\n\nVaše používateľské meno: %s\nPrihlásiť sa môžete tu: %s\n\n", "Administrator documentation" : "Príručka administrátora", "Online documentation" : "Online príručka", "Forum" : "Fórum", @@ -301,6 +299,9 @@ "Default" : "Predvolené", "log-level out of allowed range" : "úroveň logovania z povoleného rozpätia", "Language changed" : "Jazyk zmenený", + "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin", + "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s", + "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ste si istí, že chcete pridať \"{domain}\" medzi dôveryhodné domény?", "Please wait...." : "Čakajte prosím...", "iPhone" : "iPhone", diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js index 2192820e220..35b1758f16b 100644 --- a/settings/l10n/sl.js +++ b/settings/l10n/sl.js @@ -35,9 +35,6 @@ OC.L10N.register( "Unable to change mail address" : "Ni mogoče spremeniti naslova elektronske pošte.", "Email saved" : "Elektronski naslov je shranjen", "Couldn't remove app." : "Ni mogoče odstraniti programa.", - "Admins can't remove themself from the admin group" : "Skrbnikov ni mogoče odstraniti iz skupine skrbnikov (admin)", - "Unable to add user to group %s" : "Uporabnika ni mogoče dodati k skupini %s", - "Unable to remove user from group %s" : "Uporabnika ni mogoče odstraniti iz skupine %s", "Couldn't update app." : "Programa ni mogoče posodobiti.", "Add trusted domain" : "Dodaj varno domeno", "Migration in progress. Please wait until the migration is finished" : "V teku je selitev. Počakajte, da se zaključi.", @@ -242,6 +239,9 @@ OC.L10N.register( "Default" : "Privzeto", "log-level out of allowed range" : "stopnja zapisovanja je izven dovoljenega območja", "Language changed" : "Jezik je spremenjen", + "Admins can't remove themself from the admin group" : "Skrbnikov ni mogoče odstraniti iz skupine skrbnikov (admin)", + "Unable to add user to group %s" : "Uporabnika ni mogoče dodati k skupini %s", + "Unable to remove user from group %s" : "Uporabnika ni mogoče odstraniti iz skupine %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ali ste prepričani, da želite dodati \"{domain}\" kot varno domeno?", "Please wait...." : "Počakajte ...", "Everything (fatal issues, errors, warnings, info, debug)" : "Vse (podrobnosti, opozorila, hrošče, napake in usodne dogodke)", diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json index 860b93c4415..e4a83311a03 100644 --- a/settings/l10n/sl.json +++ b/settings/l10n/sl.json @@ -33,9 +33,6 @@ "Unable to change mail address" : "Ni mogoče spremeniti naslova elektronske pošte.", "Email saved" : "Elektronski naslov je shranjen", "Couldn't remove app." : "Ni mogoče odstraniti programa.", - "Admins can't remove themself from the admin group" : "Skrbnikov ni mogoče odstraniti iz skupine skrbnikov (admin)", - "Unable to add user to group %s" : "Uporabnika ni mogoče dodati k skupini %s", - "Unable to remove user from group %s" : "Uporabnika ni mogoče odstraniti iz skupine %s", "Couldn't update app." : "Programa ni mogoče posodobiti.", "Add trusted domain" : "Dodaj varno domeno", "Migration in progress. Please wait until the migration is finished" : "V teku je selitev. Počakajte, da se zaključi.", @@ -240,6 +237,9 @@ "Default" : "Privzeto", "log-level out of allowed range" : "stopnja zapisovanja je izven dovoljenega območja", "Language changed" : "Jezik je spremenjen", + "Admins can't remove themself from the admin group" : "Skrbnikov ni mogoče odstraniti iz skupine skrbnikov (admin)", + "Unable to add user to group %s" : "Uporabnika ni mogoče dodati k skupini %s", + "Unable to remove user from group %s" : "Uporabnika ni mogoče odstraniti iz skupine %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ali ste prepričani, da želite dodati \"{domain}\" kot varno domeno?", "Please wait...." : "Počakajte ...", "Everything (fatal issues, errors, warnings, info, debug)" : "Vse (podrobnosti, opozorila, hrošče, napake in usodne dogodke)", diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js index 6e9217c7ad9..0f55b61956e 100644 --- a/settings/l10n/sq.js +++ b/settings/l10n/sq.js @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "Email-i u ruajt", "Password confirmation is required" : "Kërkohet konfirmimi i fjalëkalimit", "Couldn't remove app." : "S’hoqi dot aplikacionin.", - "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin", - "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s", - "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s", "Couldn't update app." : "S’përditësoi dot aplikacionin.", "Are you really sure you want add {domain} as trusted domain?" : "Jeni i sigurt se doni ta shtoni {domain} si një domain të besuar?", "Add trusted domain" : "Shtoni përkatësi të besuar", @@ -341,6 +338,9 @@ OC.L10N.register( "Default" : "Parazgjedhje", "log-level out of allowed range" : "nivel regjistrimi jashtë intervalit të lejuar", "Language changed" : "Gjuha u ndryshua", + "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin", + "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s", + "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeni vërtet i sigurt se doni të shtoni \"{domain}\" si përkatësi të besuar?", "Please wait...." : "Ju lutemi, prisni…", "iPhone" : "iPhone", diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json index c2d345f3ad2..62d72bb52dc 100644 --- a/settings/l10n/sq.json +++ b/settings/l10n/sq.json @@ -37,9 +37,6 @@ "Email saved" : "Email-i u ruajt", "Password confirmation is required" : "Kërkohet konfirmimi i fjalëkalimit", "Couldn't remove app." : "S’hoqi dot aplikacionin.", - "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin", - "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s", - "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s", "Couldn't update app." : "S’përditësoi dot aplikacionin.", "Are you really sure you want add {domain} as trusted domain?" : "Jeni i sigurt se doni ta shtoni {domain} si një domain të besuar?", "Add trusted domain" : "Shtoni përkatësi të besuar", @@ -339,6 +336,9 @@ "Default" : "Parazgjedhje", "log-level out of allowed range" : "nivel regjistrimi jashtë intervalit të lejuar", "Language changed" : "Gjuha u ndryshua", + "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin", + "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s", + "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeni vërtet i sigurt se doni të shtoni \"{domain}\" si përkatësi të besuar?", "Please wait...." : "Ju lutemi, prisni…", "iPhone" : "iPhone", diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js index c548718a801..2ee6f9f0ce6 100644 --- a/settings/l10n/sr.js +++ b/settings/l10n/sr.js @@ -34,9 +34,6 @@ OC.L10N.register( "Unable to change mail address" : "Не могу да изменим е-адресу", "Email saved" : "Е-порука сачувана", "Couldn't remove app." : "Не могу да уклоним апликацију.", - "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе", - "Unable to add user to group %s" : "Не могу да додам корисника у групу %s", - "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s", "Couldn't update app." : "Не могу да ажурирам апликацију.", "Add trusted domain" : "Додај поуздан домен", "Migration in progress. Please wait until the migration is finished" : "Пресељење је у току. Сачекајте док се не заврши", @@ -214,6 +211,9 @@ OC.L10N.register( "Default" : "Подразумевано", "log-level out of allowed range" : "ниво бележења је ван дозвољеног опсега", "Language changed" : "Језик је промењен", + "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе", + "Unable to add user to group %s" : "Не могу да додам корисника у групу %s", + "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Да ли заиста желите да додате „{domain}“ као поуздан домен?", "Please wait...." : "Сачекајте…", "Everything (fatal issues, errors, warnings, info, debug)" : "Све (фаталне проблеме, грешке, упозорења, информације, отклањање грешака)", diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json index 87e1a5094bd..399d1df09a3 100644 --- a/settings/l10n/sr.json +++ b/settings/l10n/sr.json @@ -32,9 +32,6 @@ "Unable to change mail address" : "Не могу да изменим е-адресу", "Email saved" : "Е-порука сачувана", "Couldn't remove app." : "Не могу да уклоним апликацију.", - "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе", - "Unable to add user to group %s" : "Не могу да додам корисника у групу %s", - "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s", "Couldn't update app." : "Не могу да ажурирам апликацију.", "Add trusted domain" : "Додај поуздан домен", "Migration in progress. Please wait until the migration is finished" : "Пресељење је у току. Сачекајте док се не заврши", @@ -212,6 +209,9 @@ "Default" : "Подразумевано", "log-level out of allowed range" : "ниво бележења је ван дозвољеног опсега", "Language changed" : "Језик је промењен", + "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе", + "Unable to add user to group %s" : "Не могу да додам корисника у групу %s", + "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Да ли заиста желите да додате „{domain}“ као поуздан домен?", "Please wait...." : "Сачекајте…", "Everything (fatal issues, errors, warnings, info, debug)" : "Све (фаталне проблеме, грешке, упозорења, информације, отклањање грешака)", diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js index cc738f841ed..803021a8d31 100644 --- a/settings/l10n/sv.js +++ b/settings/l10n/sv.js @@ -39,9 +39,6 @@ OC.L10N.register( "Email saved" : "E-post sparad", "Password confirmation is required" : "Lösenordsbekräftelse krävs", "Couldn't remove app." : "Kunde inte ta bort applikationen.", - "Admins can't remove themself from the admin group" : "Administratörer kan inte ta bort sig själva från admingruppen", - "Unable to add user to group %s" : "Kan inte lägga till användare i gruppen %s", - "Unable to remove user from group %s" : "Kan inte radera användare från gruppen %s", "Couldn't update app." : "Kunde inte uppdatera appen.", "Are you really sure you want add {domain} as trusted domain?" : "Är du verkligen säker att du vill lägga till (domain) som tillförlitlig domän?", "Add trusted domain" : "Lägg till betrodd domän", @@ -174,7 +171,7 @@ OC.L10N.register( "This is the final warning: Do you really want to enable encryption?" : "Detta är en slutgiltig varning: Vill du verkligen aktivera kryptering?", "Enable encryption" : "Aktivera kryptering", "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul laddad, var god aktivera krypteringsmodulen i applikationsmenyn.", - "Select default encryption module:" : "Välj standard krypteringsmodul:", + "Select default encryption module:" : "Välj krypteringsmodul:", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya. Var god aktivera \"Default encryption module\" och kör 'occ encryption:migrate'.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya.", "Start migration" : "Starta migrering", @@ -341,6 +338,9 @@ OC.L10N.register( "Default" : "Förvald", "log-level out of allowed range" : "logg-nivå utanför tillåtet område", "Language changed" : "Språk ändrades", + "Admins can't remove themself from the admin group" : "Administratörer kan inte ta bort sig själva från admingruppen", + "Unable to add user to group %s" : "Kan inte lägga till användare i gruppen %s", + "Unable to remove user from group %s" : "Kan inte radera användare från gruppen %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Är du verkligen säker på att du vill lägga till \"{domain}\" som en trusted domian?", "Please wait...." : "Var god vänta ...", "iPhone" : "iPhone", diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json index 55a40b7173a..4024d1b622a 100644 --- a/settings/l10n/sv.json +++ b/settings/l10n/sv.json @@ -37,9 +37,6 @@ "Email saved" : "E-post sparad", "Password confirmation is required" : "Lösenordsbekräftelse krävs", "Couldn't remove app." : "Kunde inte ta bort applikationen.", - "Admins can't remove themself from the admin group" : "Administratörer kan inte ta bort sig själva från admingruppen", - "Unable to add user to group %s" : "Kan inte lägga till användare i gruppen %s", - "Unable to remove user from group %s" : "Kan inte radera användare från gruppen %s", "Couldn't update app." : "Kunde inte uppdatera appen.", "Are you really sure you want add {domain} as trusted domain?" : "Är du verkligen säker att du vill lägga till (domain) som tillförlitlig domän?", "Add trusted domain" : "Lägg till betrodd domän", @@ -172,7 +169,7 @@ "This is the final warning: Do you really want to enable encryption?" : "Detta är en slutgiltig varning: Vill du verkligen aktivera kryptering?", "Enable encryption" : "Aktivera kryptering", "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul laddad, var god aktivera krypteringsmodulen i applikationsmenyn.", - "Select default encryption module:" : "Välj standard krypteringsmodul:", + "Select default encryption module:" : "Välj krypteringsmodul:", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya. Var god aktivera \"Default encryption module\" och kör 'occ encryption:migrate'.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya.", "Start migration" : "Starta migrering", @@ -339,6 +336,9 @@ "Default" : "Förvald", "log-level out of allowed range" : "logg-nivå utanför tillåtet område", "Language changed" : "Språk ändrades", + "Admins can't remove themself from the admin group" : "Administratörer kan inte ta bort sig själva från admingruppen", + "Unable to add user to group %s" : "Kan inte lägga till användare i gruppen %s", + "Unable to remove user from group %s" : "Kan inte radera användare från gruppen %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Är du verkligen säker på att du vill lägga till \"{domain}\" som en trusted domian?", "Please wait...." : "Var god vänta ...", "iPhone" : "iPhone", diff --git a/settings/l10n/ta_LK.js b/settings/l10n/ta_LK.js index d16ebf306e3..ff63cae0124 100644 --- a/settings/l10n/ta_LK.js +++ b/settings/l10n/ta_LK.js @@ -4,8 +4,6 @@ OC.L10N.register( "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு", "Invalid request" : "செல்லுபடியற்ற வேண்டுகோள்", "Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது", - "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது", - "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது", "All" : "எல்லாம்", "Disable" : "இயலுமைப்ப", "Enable" : "இயலுமைப்படுத்துக", @@ -35,6 +33,8 @@ OC.L10N.register( "Other" : "மற்றவை", "Quota" : "பங்கு", "Language changed" : "மொழி மாற்றப்பட்டது", + "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது", + "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது", "More" : "மேலதிக", "Less" : "குறைவான" }, diff --git a/settings/l10n/ta_LK.json b/settings/l10n/ta_LK.json index ac3f00ca2e0..7a862136b81 100644 --- a/settings/l10n/ta_LK.json +++ b/settings/l10n/ta_LK.json @@ -2,8 +2,6 @@ "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு", "Invalid request" : "செல்லுபடியற்ற வேண்டுகோள்", "Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது", - "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது", - "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது", "All" : "எல்லாம்", "Disable" : "இயலுமைப்ப", "Enable" : "இயலுமைப்படுத்துக", @@ -33,6 +31,8 @@ "Other" : "மற்றவை", "Quota" : "பங்கு", "Language changed" : "மொழி மாற்றப்பட்டது", + "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது", + "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது", "More" : "மேலதிக", "Less" : "குறைவான" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/settings/l10n/th_TH.js b/settings/l10n/th_TH.js index 7c493b11a53..f2a1d599c1d 100644 --- a/settings/l10n/th_TH.js +++ b/settings/l10n/th_TH.js @@ -36,9 +36,6 @@ OC.L10N.register( "Unable to change mail address" : "ไม่สามารถที่จะเปลี่ยนที่อยู่อีเมล", "Email saved" : "อีเมลถูกบันทึกแล้ว", "Couldn't remove app." : "ไม่สามารถลบแอพฯ", - "Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้", - "Unable to add user to group %s" : "ไม่สามารถเพิ่มผู้ใช้งานเข้าไปที่กลุ่ม %s ได้", - "Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้", "Couldn't update app." : "ไม่สามารถอัพเดทแอปฯ", "Add trusted domain" : "เพิ่มโดเมนที่เชื่อถือได้", "Migration in progress. Please wait until the migration is finished" : "ในระหว่างดำเนินการโยกย้าย กรุณารอสักครู่จนกว่าการโยกย้ายจะเสร็จสิ้น", @@ -244,6 +241,9 @@ OC.L10N.register( "Default" : "ค่าเริ่มต้น", "log-level out of allowed range" : "ระดับ-บันทึก ไม่ได้อยู่ในช่วงที่ได้รับอนุญาต", "Language changed" : "เปลี่ยนภาษาเรียบร้อยแล้ว", + "Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้", + "Unable to add user to group %s" : "ไม่สามารถเพิ่มผู้ใช้งานเข้าไปที่กลุ่ม %s ได้", + "Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้", "Are you really sure you want add \"{domain}\" as trusted domain?" : "คุณแน่ใจจริงๆ ว่าคุณต้องการเพิ่ม \"{domain}\" เป็นโดเมนที่เชื่อถือได้?", "Please wait...." : "กรุณารอสักครู่...", "Everything (fatal issues, errors, warnings, info, debug)" : "ทุกอย่าง (ปัญหาร้ายแรง ข้อผิดพลาด คำเตือน ข้อมูล การแก้ปัญหา)", diff --git a/settings/l10n/th_TH.json b/settings/l10n/th_TH.json index 19e9b941834..e3cc8835b53 100644 --- a/settings/l10n/th_TH.json +++ b/settings/l10n/th_TH.json @@ -34,9 +34,6 @@ "Unable to change mail address" : "ไม่สามารถที่จะเปลี่ยนที่อยู่อีเมล", "Email saved" : "อีเมลถูกบันทึกแล้ว", "Couldn't remove app." : "ไม่สามารถลบแอพฯ", - "Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้", - "Unable to add user to group %s" : "ไม่สามารถเพิ่มผู้ใช้งานเข้าไปที่กลุ่ม %s ได้", - "Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้", "Couldn't update app." : "ไม่สามารถอัพเดทแอปฯ", "Add trusted domain" : "เพิ่มโดเมนที่เชื่อถือได้", "Migration in progress. Please wait until the migration is finished" : "ในระหว่างดำเนินการโยกย้าย กรุณารอสักครู่จนกว่าการโยกย้ายจะเสร็จสิ้น", @@ -242,6 +239,9 @@ "Default" : "ค่าเริ่มต้น", "log-level out of allowed range" : "ระดับ-บันทึก ไม่ได้อยู่ในช่วงที่ได้รับอนุญาต", "Language changed" : "เปลี่ยนภาษาเรียบร้อยแล้ว", + "Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้", + "Unable to add user to group %s" : "ไม่สามารถเพิ่มผู้ใช้งานเข้าไปที่กลุ่ม %s ได้", + "Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้", "Are you really sure you want add \"{domain}\" as trusted domain?" : "คุณแน่ใจจริงๆ ว่าคุณต้องการเพิ่ม \"{domain}\" เป็นโดเมนที่เชื่อถือได้?", "Please wait...." : "กรุณารอสักครู่...", "Everything (fatal issues, errors, warnings, info, debug)" : "ทุกอย่าง (ปัญหาร้ายแรง ข้อผิดพลาด คำเตือน ข้อมูล การแก้ปัญหา)", diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js index e37b8dfa955..418854fb4dc 100644 --- a/settings/l10n/tr.js +++ b/settings/l10n/tr.js @@ -36,9 +36,6 @@ OC.L10N.register( "Unable to change mail address" : "Posta adresini değiştirme başarısız", "Email saved" : "E-posta kaydedildi", "Couldn't remove app." : "Uygulama kaldırılamadı.", - "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz", - "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor", - "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor", "Couldn't update app." : "Uygulama güncellenemedi.", "Add trusted domain" : "Güvenilir alan adı ekle", "Migration in progress. Please wait until the migration is finished" : "Taşınma sürüyor. Lütfen taşınma tamamlanana kadar bekleyin", @@ -285,6 +282,9 @@ OC.L10N.register( "Default" : "Öntanımlı", "log-level out of allowed range" : "günlük seviyesi izin verilen aralık dışında", "Language changed" : "Dil değiştirildi", + "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz", + "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor", + "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor", "Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" alan adını güvenilir alan adı olarak eklemek istediğinizden emin misiniz?", "Please wait...." : "Lütfen bekleyin....", "iPhone" : "iPhone", diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json index 95fbac30ff9..4472e7f8242 100644 --- a/settings/l10n/tr.json +++ b/settings/l10n/tr.json @@ -34,9 +34,6 @@ "Unable to change mail address" : "Posta adresini değiştirme başarısız", "Email saved" : "E-posta kaydedildi", "Couldn't remove app." : "Uygulama kaldırılamadı.", - "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz", - "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor", - "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor", "Couldn't update app." : "Uygulama güncellenemedi.", "Add trusted domain" : "Güvenilir alan adı ekle", "Migration in progress. Please wait until the migration is finished" : "Taşınma sürüyor. Lütfen taşınma tamamlanana kadar bekleyin", @@ -283,6 +280,9 @@ "Default" : "Öntanımlı", "log-level out of allowed range" : "günlük seviyesi izin verilen aralık dışında", "Language changed" : "Dil değiştirildi", + "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz", + "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor", + "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor", "Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" alan adını güvenilir alan adı olarak eklemek istediğinizden emin misiniz?", "Please wait...." : "Lütfen bekleyin....", "iPhone" : "iPhone", diff --git a/settings/l10n/ug.js b/settings/l10n/ug.js index bf4b16b3027..c93f085439d 100644 --- a/settings/l10n/ug.js +++ b/settings/l10n/ug.js @@ -4,9 +4,6 @@ OC.L10N.register( "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى", "Invalid request" : "ئىناۋەتسىز ئىلتىماس", "Email saved" : "تورخەت ساقلاندى", - "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ", - "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ", - "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ", "Couldn't update app." : "ئەپنى يېڭىلىيالمايدۇ.", "All" : "ھەممىسى", "Disable" : "چەكلە", @@ -46,6 +43,9 @@ OC.L10N.register( "set new password" : "يېڭى ئىم تەڭشە", "Default" : "كۆڭۈلدىكى", "Language changed" : "تىل ئۆزگەردى", + "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ", + "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ", + "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ", "Please wait...." : "سەل كۈتۈڭ…", "Log" : "خاتىرە", "More" : "تېخىمۇ كۆپ", diff --git a/settings/l10n/ug.json b/settings/l10n/ug.json index b99ed2b034b..70a46e94da0 100644 --- a/settings/l10n/ug.json +++ b/settings/l10n/ug.json @@ -2,9 +2,6 @@ "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى", "Invalid request" : "ئىناۋەتسىز ئىلتىماس", "Email saved" : "تورخەت ساقلاندى", - "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ", - "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ", - "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ", "Couldn't update app." : "ئەپنى يېڭىلىيالمايدۇ.", "All" : "ھەممىسى", "Disable" : "چەكلە", @@ -44,6 +41,9 @@ "set new password" : "يېڭى ئىم تەڭشە", "Default" : "كۆڭۈلدىكى", "Language changed" : "تىل ئۆزگەردى", + "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ", + "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ", + "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ", "Please wait...." : "سەل كۈتۈڭ…", "Log" : "خاتىرە", "More" : "تېخىمۇ كۆپ", diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js index af6a3735ec5..0ba5efbf720 100644 --- a/settings/l10n/uk.js +++ b/settings/l10n/uk.js @@ -36,9 +36,6 @@ OC.L10N.register( "Unable to change mail address" : "Неможливо поміняти email адресу", "Email saved" : "Адресу збережено", "Couldn't remove app." : "Неможливо видалити додаток.", - "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів", - "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s", - "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s", "Couldn't update app." : "Не вдалося оновити додаток. ", "Add trusted domain" : "Додати довірений домен", "Migration in progress. Please wait until the migration is finished" : "Міграція триває. Будь ласка, зачекайте доки процес міграції завершиться", @@ -218,6 +215,9 @@ OC.L10N.register( "Default" : "За замовчуванням", "log-level out of allowed range" : "рівень протоколювання перевищує дозволені межі", "Language changed" : "Мову змінено", + "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів", + "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s", + "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ви дійсно бажаєте додати \"{domain}\" як довірений домен?", "Please wait...." : "Зачекайте, будь ласка...", "Everything (fatal issues, errors, warnings, info, debug)" : "Усі (критичні проблеми, помилки, попередження, інформаційні, налагодження)", diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json index 13159cb589f..948dc4de7ee 100644 --- a/settings/l10n/uk.json +++ b/settings/l10n/uk.json @@ -34,9 +34,6 @@ "Unable to change mail address" : "Неможливо поміняти email адресу", "Email saved" : "Адресу збережено", "Couldn't remove app." : "Неможливо видалити додаток.", - "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів", - "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s", - "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s", "Couldn't update app." : "Не вдалося оновити додаток. ", "Add trusted domain" : "Додати довірений домен", "Migration in progress. Please wait until the migration is finished" : "Міграція триває. Будь ласка, зачекайте доки процес міграції завершиться", @@ -216,6 +213,9 @@ "Default" : "За замовчуванням", "log-level out of allowed range" : "рівень протоколювання перевищує дозволені межі", "Language changed" : "Мову змінено", + "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів", + "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s", + "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ви дійсно бажаєте додати \"{domain}\" як довірений домен?", "Please wait...." : "Зачекайте, будь ласка...", "Everything (fatal issues, errors, warnings, info, debug)" : "Усі (критичні проблеми, помилки, попередження, інформаційні, налагодження)", diff --git a/settings/l10n/vi.js b/settings/l10n/vi.js index c989c037a72..cd73020bddb 100644 --- a/settings/l10n/vi.js +++ b/settings/l10n/vi.js @@ -9,9 +9,6 @@ OC.L10N.register( "Unable to change full name" : "Họ và tên không thể đổi ", "Your full name has been changed." : "Họ và tên đã được thay đổi.", "Email saved" : "Lưu email", - "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý", - "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s", - "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s", "Couldn't update app." : "Không thể cập nhật ứng dụng", "All" : "Tất cả", "Disable" : "Tắt", @@ -62,6 +59,9 @@ OC.L10N.register( "set new password" : "đặt mật khẩu mới", "Default" : "Mặc định", "Language changed" : "Ngôn ngữ đã được thay đổi", + "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý", + "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s", + "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s", "Please wait...." : "Xin hãy đợi...", "Log" : "Log", "More" : "hơn", diff --git a/settings/l10n/vi.json b/settings/l10n/vi.json index a6f1e0427d6..cd1a4245ca0 100644 --- a/settings/l10n/vi.json +++ b/settings/l10n/vi.json @@ -7,9 +7,6 @@ "Unable to change full name" : "Họ và tên không thể đổi ", "Your full name has been changed." : "Họ và tên đã được thay đổi.", "Email saved" : "Lưu email", - "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý", - "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s", - "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s", "Couldn't update app." : "Không thể cập nhật ứng dụng", "All" : "Tất cả", "Disable" : "Tắt", @@ -60,6 +57,9 @@ "set new password" : "đặt mật khẩu mới", "Default" : "Mặc định", "Language changed" : "Ngôn ngữ đã được thay đổi", + "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý", + "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s", + "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s", "Please wait...." : "Xin hãy đợi...", "Log" : "Log", "More" : "hơn", diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js index 5c7fd8feb8d..ec0cf50dbd1 100644 --- a/settings/l10n/zh_CN.js +++ b/settings/l10n/zh_CN.js @@ -29,28 +29,32 @@ OC.L10N.register( "Unable to create user." : "无法创建用户。", "Your %s account was created" : "你的帐户 %s 已创建", "Unable to delete user." : "不能删除用户", + "Settings saved" : "设置已保存", "Unable to change full name" : "无法修改全名", + "Unable to change email address" : "无法更改邮箱地址", "Your full name has been changed." : "您的全名已修改。", "Forbidden" : "被禁止", "Invalid user" : "用户无效", "Unable to change mail address" : "无法更改邮箱地址", "Email saved" : "电子邮件已保存", + "Password confirmation is required" : "需要密码确认", "Couldn't remove app." : "无法删除应用。", - "Admins can't remove themself from the admin group" : "管理员不能将自己移出管理组。", - "Unable to add user to group %s" : "无法把用户增加到组 %s", - "Unable to remove user from group %s" : "无法从组%s中移除用户", "Couldn't update app." : "无法更新应用。", + "Are you really sure you want add {domain} as trusted domain?" : "您确定要将 {domain} 添加为受信任的域吗?", "Add trusted domain" : "添加信任域", "Migration in progress. Please wait until the migration is finished" : "迁移正在进行中。请等待,直到完成迁移", "Migration started …" : "迁移开始...", + "Not saved" : "未保存", "Sending..." : "正在发送...", "Official" : "官方", "All" : "全部", "Update to %s" : "更新为 %s", "_You have %n app update pending_::_You have %n app updates pending_" : ["%n 个应用正在等待升级"], "No apps found for your version" : "未找到适合当前版本的应用", + "The app will be downloaded from the app store" : "该应用程序将从应用商店下载", "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." : "已认可的应用是由值得信赖的开发商开发,并已通过了一个粗略的安全检查。他们放在一个开放的代码库并且维护人员认为他们是稳定的差不多可以正常使用。", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "此应用未检查安全问题,它是新的或已知是不稳定的。安装风险自担。", + "Enabling app …" : "启用应用程序", "Error while disabling app" : "禁用应用时出错", "Disable" : "禁用", "Enable" : "开启", @@ -68,6 +72,27 @@ OC.L10N.register( "App update" : "应用更新", "Approved" : "已认可", "Experimental" : "实验", + "No apps found for {query}" : "找不到符合 {query} 的应用程序", + "Allow filesystem access" : "允许文件系统访问", + "Disconnect" : "断开连接", + "Revoke" : "撤销", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome for Android", + "iPhone iOS" : "iPhone iOS", + "iPad iOS" : "iPad iOS", + "iOS Client" : "iOS Client", + "Android Client" : "Android Client", + "Sync client - {os}" : "Sync client - {os}", + "This session" : "这个会话", + "Copy" : "复制", + "Copied!" : "已复制!", + "Not supported!" : "不支持!", + "Press ⌘-C to copy." : "按 ⌘-C 键复制.", + "Press Ctrl-C to copy." : "按 Ctrl-C 进行复制.", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "出现了一个错误。请上传 ASCII 编码的 PEM 证书。", "Valid until {date}" : "有效期至 {date}", "Delete" : "删除", @@ -239,6 +264,9 @@ OC.L10N.register( "Default" : "默认", "log-level out of allowed range" : "日志级别超出允许的范围", "Language changed" : "语言已修改", + "Admins can't remove themself from the admin group" : "管理员不能将自己移出管理组。", + "Unable to add user to group %s" : "无法把用户增加到组 %s", + "Unable to remove user from group %s" : "无法从组%s中移除用户", "Are you really sure you want add \"{domain}\" as trusted domain?" : "你真的希望添加 \"{domain}\" 为信任域?", "Please wait...." : "请稍等....", "Everything (fatal issues, errors, warnings, info, debug)" : "所有(灾难性问题,错误,警告,信息,调试)", diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json index 10e7ca844a8..32060840470 100644 --- a/settings/l10n/zh_CN.json +++ b/settings/l10n/zh_CN.json @@ -27,28 +27,32 @@ "Unable to create user." : "无法创建用户。", "Your %s account was created" : "你的帐户 %s 已创建", "Unable to delete user." : "不能删除用户", + "Settings saved" : "设置已保存", "Unable to change full name" : "无法修改全名", + "Unable to change email address" : "无法更改邮箱地址", "Your full name has been changed." : "您的全名已修改。", "Forbidden" : "被禁止", "Invalid user" : "用户无效", "Unable to change mail address" : "无法更改邮箱地址", "Email saved" : "电子邮件已保存", + "Password confirmation is required" : "需要密码确认", "Couldn't remove app." : "无法删除应用。", - "Admins can't remove themself from the admin group" : "管理员不能将自己移出管理组。", - "Unable to add user to group %s" : "无法把用户增加到组 %s", - "Unable to remove user from group %s" : "无法从组%s中移除用户", "Couldn't update app." : "无法更新应用。", + "Are you really sure you want add {domain} as trusted domain?" : "您确定要将 {domain} 添加为受信任的域吗?", "Add trusted domain" : "添加信任域", "Migration in progress. Please wait until the migration is finished" : "迁移正在进行中。请等待,直到完成迁移", "Migration started …" : "迁移开始...", + "Not saved" : "未保存", "Sending..." : "正在发送...", "Official" : "官方", "All" : "全部", "Update to %s" : "更新为 %s", "_You have %n app update pending_::_You have %n app updates pending_" : ["%n 个应用正在等待升级"], "No apps found for your version" : "未找到适合当前版本的应用", + "The app will be downloaded from the app store" : "该应用程序将从应用商店下载", "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." : "已认可的应用是由值得信赖的开发商开发,并已通过了一个粗略的安全检查。他们放在一个开放的代码库并且维护人员认为他们是稳定的差不多可以正常使用。", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "此应用未检查安全问题,它是新的或已知是不稳定的。安装风险自担。", + "Enabling app …" : "启用应用程序", "Error while disabling app" : "禁用应用时出错", "Disable" : "禁用", "Enable" : "开启", @@ -66,6 +70,27 @@ "App update" : "应用更新", "Approved" : "已认可", "Experimental" : "实验", + "No apps found for {query}" : "找不到符合 {query} 的应用程序", + "Allow filesystem access" : "允许文件系统访问", + "Disconnect" : "断开连接", + "Revoke" : "撤销", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome for Android", + "iPhone iOS" : "iPhone iOS", + "iPad iOS" : "iPad iOS", + "iOS Client" : "iOS Client", + "Android Client" : "Android Client", + "Sync client - {os}" : "Sync client - {os}", + "This session" : "这个会话", + "Copy" : "复制", + "Copied!" : "已复制!", + "Not supported!" : "不支持!", + "Press ⌘-C to copy." : "按 ⌘-C 键复制.", + "Press Ctrl-C to copy." : "按 Ctrl-C 进行复制.", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "出现了一个错误。请上传 ASCII 编码的 PEM 证书。", "Valid until {date}" : "有效期至 {date}", "Delete" : "删除", @@ -237,6 +262,9 @@ "Default" : "默认", "log-level out of allowed range" : "日志级别超出允许的范围", "Language changed" : "语言已修改", + "Admins can't remove themself from the admin group" : "管理员不能将自己移出管理组。", + "Unable to add user to group %s" : "无法把用户增加到组 %s", + "Unable to remove user from group %s" : "无法从组%s中移除用户", "Are you really sure you want add \"{domain}\" as trusted domain?" : "你真的希望添加 \"{domain}\" 为信任域?", "Please wait...." : "请稍等....", "Everything (fatal issues, errors, warnings, info, debug)" : "所有(灾难性问题,错误,警告,信息,调试)", diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js index f19a6e825d0..942c29a2157 100644 --- a/settings/l10n/zh_TW.js +++ b/settings/l10n/zh_TW.js @@ -36,9 +36,6 @@ OC.L10N.register( "Unable to change mail address" : "無法更改 email 地址", "Email saved" : "Email 已儲存", "Couldn't remove app." : "無法移除應用程式", - "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除", - "Unable to add user to group %s" : "無法將使用者加入群組 %s", - "Unable to remove user from group %s" : "無法將使用者移出群組 %s", "Couldn't update app." : "無法更新應用程式", "Add trusted domain" : "新增信任的網域", "Migration in progress. Please wait until the migration is finished" : "資料搬移中,請耐心等候直到資料搬移結束", @@ -253,6 +250,9 @@ OC.L10N.register( "Default" : "預設", "log-level out of allowed range" : "log-level 超過允許範圍", "Language changed" : "語言已變更", + "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除", + "Unable to add user to group %s" : "無法將使用者加入群組 %s", + "Unable to remove user from group %s" : "無法將使用者移出群組 %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "您確定要新增 \"{domain}' 為信任的網域?", "Please wait...." : "請稍候…", "iPhone" : "iPhone", diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json index 595b47eb9be..21af65d762b 100644 --- a/settings/l10n/zh_TW.json +++ b/settings/l10n/zh_TW.json @@ -34,9 +34,6 @@ "Unable to change mail address" : "無法更改 email 地址", "Email saved" : "Email 已儲存", "Couldn't remove app." : "無法移除應用程式", - "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除", - "Unable to add user to group %s" : "無法將使用者加入群組 %s", - "Unable to remove user from group %s" : "無法將使用者移出群組 %s", "Couldn't update app." : "無法更新應用程式", "Add trusted domain" : "新增信任的網域", "Migration in progress. Please wait until the migration is finished" : "資料搬移中,請耐心等候直到資料搬移結束", @@ -251,6 +248,9 @@ "Default" : "預設", "log-level out of allowed range" : "log-level 超過允許範圍", "Language changed" : "語言已變更", + "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除", + "Unable to add user to group %s" : "無法將使用者加入群組 %s", + "Unable to remove user from group %s" : "無法將使用者移出群組 %s", "Are you really sure you want add \"{domain}\" as trusted domain?" : "您確定要新增 \"{domain}' 為信任的網域?", "Please wait...." : "請稍候…", "iPhone" : "iPhone", diff --git a/settings/templates/admin/frame.php b/settings/templates/admin/frame.php index 761d76c4434..2b234f4cd9b 100644 --- a/settings/templates/admin/frame.php +++ b/settings/templates/admin/frame.php @@ -30,14 +30,28 @@ script('files', 'jquery.fileupload'); <div id="app-navigation"> <ul> - <?php foreach($_['forms'] as $form) { + <?php + foreach($_['forms'] as $form) { if (isset($form['anchor'])) { $anchor = \OC::$server->getURLGenerator()->linkToRoute('settings.AdminSettings.index', ['section' => $form['anchor']]); + $class = 'nav-icon-' . $form['anchor']; $sectionName = $form['section-name']; $active = $form['active'] ? ' class="active"' : ''; - print_unescaped(sprintf("<li%s><a href='%s'>%s</a></li>", $active, \OCP\Util::sanitizeHTML($anchor), \OCP\Util::sanitizeHTML($sectionName))); + ?> + <li <?php print_unescaped($form['active'] ? ' class="active"' : ''); ?>> + <a href="<?php p($anchor); ?>"> + <?php if (!empty($form['icon'])) { ?> + <img alt="" src="<?php print_unescaped($form['icon']); ?>"> + <span><?php p($form['section-name']); ?></span> + <?php } else { ?> + <span class="no-icon"><?php p($form['section-name']); ?></span> + <?php } ?> + </a> + </li> + <?php } - }?> + } + ?> </ul> </div> diff --git a/settings/templates/apps.php b/settings/templates/apps.php index a4b08f11693..80689237e60 100644 --- a/settings/templates/apps.php +++ b/settings/templates/apps.php @@ -150,7 +150,7 @@ script( </ul> </div> <div id="app-content"> - <svg height="0"> + <svg class="app-filter"> <defs><filter id="invertIcon"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"></feColorMatrix></filter></defs> </svg> <div id="apps-list" class="icon-loading"></div> diff --git a/settings/templates/personal.php b/settings/templates/personal.php index a14982b9b74..65ce3751b98 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -9,12 +9,14 @@ ?> <div id="app-navigation"> - <ul> + <ul class="with-icon"> <?php foreach($_['forms'] as $form) { if (isset($form['anchor'])) { $anchor = '#' . $form['anchor']; + $class = 'nav-icon-' . $form['anchor']; $sectionName = $form['section-name']; - print_unescaped(sprintf("<li><a href='%s'>%s</a></li>", \OCP\Util::sanitizeHTML($anchor), \OCP\Util::sanitizeHTML($sectionName))); + print_unescaped(sprintf("<li><a href='%s' class='%s'>%s</a></li>", \OCP\Util::sanitizeHTML($anchor), + \OCP\Util::sanitizeHTML($class), \OCP\Util::sanitizeHTML($sectionName))); } }?> </ul> @@ -184,12 +186,14 @@ if($_['passwordChangeSupported']) { <input type="password" id="pass1" name="oldpassword" placeholder="<?php p($l->t('Current password'));?>" autocomplete="off" autocapitalize="off" autocorrect="off" /> - <label for="pass2" class="hidden-visually"><?php p($l->t('New password'));?>: </label> - <input type="password" id="pass2" name="newpassword" - placeholder="<?php p($l->t('New password')); ?>" - data-typetoggle="#personal-show" - autocomplete="off" autocapitalize="off" autocorrect="off" /> - <input type="checkbox" id="personal-show" name="show" /><label for="personal-show" class="personal-show-label"></label> + <div class="personal-show-container"> + <label for="pass2" class="hidden-visually"><?php p($l->t('New password'));?>: </label> + <input type="password" id="pass2" name="newpassword" + placeholder="<?php p($l->t('New password')); ?>" + data-typetoggle="#personal-show" + autocomplete="off" autocapitalize="off" autocorrect="off" /> + <input type="checkbox" id="personal-show" name="show" /><label for="personal-show" class="personal-show-label"></label> + </div> <input id="passwordbutton" type="submit" value="<?php p($l->t('Change password')); ?>" /> <br/> </form> diff --git a/tests/Core/Controller/OCSControllerTest.php b/tests/Core/Controller/OCSControllerTest.php index 6c47521786f..7241df9317c 100644 --- a/tests/Core/Controller/OCSControllerTest.php +++ b/tests/Core/Controller/OCSControllerTest.php @@ -116,24 +116,6 @@ class OCSControllerTest extends TestCase { $this->assertEquals($expected, $this->controller->getCapabilities()); } - public function testGetCurrentUser() { - $user = $this->createMock(IUser::class); - $user->method('getUID')->willReturn('uid'); - $user->method('getDisplayName')->willReturn('displayName'); - $user->method('getEMailAddress')->willReturn('e@mail.com'); - - - $this->userSession->method('getUser') - ->willReturn($user); - - $expected = new DataResponse([ - 'id' => 'uid', - 'display-name' => 'displayName', - 'email' => 'e@mail.com', - ]); - $this->assertEquals($expected, $this->controller->getCurrentUser()); - } - public function testPersonCheckValid() { $this->request->method('getRemoteAddress') ->willReturn('1.2.3.4'); diff --git a/tests/Settings/Controller/UsersControllerTest.php b/tests/Settings/Controller/UsersControllerTest.php index b85667740f7..36ca0917524 100644 --- a/tests/Settings/Controller/UsersControllerTest.php +++ b/tests/Settings/Controller/UsersControllerTest.php @@ -19,6 +19,7 @@ use OCP\AppFramework\Http\DataResponse; use OCP\IAvatar; use OCP\IAvatarManager; use OCP\IConfig; +use OCP\IGroup; use OCP\IGroupManager; use OCP\IL10N; use OCP\ILogger; @@ -852,95 +853,6 @@ class UsersControllerTest extends \Test\TestCase { $this->assertEquals($expectedResponse, $response); } - public function testCreateSuccessfulWithoutGroupSubAdmin() { - $controller = $this->getController(false); - $user = $this->getMockBuilder('\OC\User\User') - ->disableOriginalConstructor()->getMock(); - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($user)); - - $newUser = $this->getMockBuilder('\OC\User\User') - ->disableOriginalConstructor()->getMock(); - $newUser - ->method('getUID') - ->will($this->returnValue('foo')); - $newUser - ->method('getHome') - ->will($this->returnValue('/home/user')); - $newUser - ->method('getHome') - ->will($this->returnValue('/home/user')); - $newUser - ->expects($this->once()) - ->method('getBackendClassName') - ->will($this->returnValue('bar')); - $user = $this->getMockBuilder('\OC\User\User') - ->disableOriginalConstructor()->getMock(); - $subGroup1 = $this->getMockBuilder('\OCP\IGroup') - ->disableOriginalConstructor()->getMock(); - $subGroup1 - ->expects($this->once()) - ->method('addUser') - ->with($newUser); - $subGroup2 = $this->getMockBuilder('\OCP\IGroup') - ->disableOriginalConstructor()->getMock(); - $subGroup2 - ->expects($this->once()) - ->method('addUser') - ->with($newUser); - - $this->userManager - ->expects($this->once()) - ->method('createUser') - ->will($this->returnValue($newUser)); - $this->groupManager - ->expects($this->exactly(2)) - ->method('get') - ->will($this->onConsecutiveCalls($subGroup1, $subGroup2)); - $this->groupManager - ->expects($this->once()) - ->method('getUserGroupIds') - ->with($user) - ->will($this->onConsecutiveCalls(['SubGroup1', 'SubGroup2'])); - - $subadmin = $this->getMockBuilder('\OC\SubAdmin') - ->disableOriginalConstructor() - ->getMock(); - $subadmin - ->expects($this->at(0)) - ->method('getSubAdminsGroups') - ->will($this->returnValue([$subGroup1, $subGroup2])); - $subadmin - ->expects($this->at(1)) - ->method('getSubAdminsGroups') - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $expectedResponse = new DataResponse( - array( - 'name' => 'foo', - 'groups' => ['SubGroup1', 'SubGroup2'], - 'storageLocation' => '/home/user', - 'backend' => 'bar', - 'lastLogin' => 0, - 'displayname' => null, - 'quota' => null, - 'subadmin' => [], - 'email' => null, - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => true, - ), - Http::STATUS_CREATED - ); - $response = $controller->create('foo', 'password'); - $this->assertEquals($expectedResponse, $response); - } - public function testCreateSuccessfulWithGroupAdmin() { $controller = $this->getController(true); @@ -1026,16 +938,12 @@ class UsersControllerTest extends \Test\TestCase { public function testCreateSuccessfulWithGroupSubAdmin() { $controller = $this->getController(false); - $user = $this->getMockBuilder('\OC\User\User') - ->disableOriginalConstructor()->getMock(); + $user = $this->createMock(IUser::class); $this->userSession ->expects($this->once()) ->method('getUser') ->will($this->returnValue($user)); - $user = $this->getMockBuilder('\OC\User\User') - ->disableOriginalConstructor()->getMock(); - $newUser = $this->getMockBuilder('\OC\User\User') - ->disableOriginalConstructor()->getMock(); + $newUser = $this->createMock(IUser::class); $newUser ->method('getHome') ->will($this->returnValue('/home/user')); @@ -1049,8 +957,7 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->will($this->returnValue('bar')); - $subGroup1 = $this->getMockBuilder('\OCP\IGroup') - ->disableOriginalConstructor()->getMock(); + $subGroup1 = $this->createMock(IGroup::class); $subGroup1 ->expects($this->any()) ->method('getGID') @@ -1064,16 +971,6 @@ class UsersControllerTest extends \Test\TestCase { ->method('createUser') ->will($this->returnValue($newUser)); $this->groupManager - ->expects($this->at(0)) - ->method('get') - ->with('SubGroup1') - ->will($this->returnValue($subGroup1)); - $this->groupManager - ->expects($this->at(4)) - ->method('get') - ->with('SubGroup1') - ->will($this->returnValue($subGroup1)); - $this->groupManager ->expects($this->once()) ->method('getUserGroupIds') ->with($user) @@ -1084,21 +981,28 @@ class UsersControllerTest extends \Test\TestCase { ->with($newUser) ->will($this->onConsecutiveCalls(['SubGroup1'])); - $subadmin = $this->getMockBuilder('\OC\SubAdmin') - ->disableOriginalConstructor() - ->getMock(); - $subadmin->expects($this->at(1)) + $subadmin = $this->createMock(\OC\SubAdmin::class); + $subadmin->expects($this->atLeastOnce()) ->method('getSubAdminsGroups') ->with($user) - ->will($this->returnValue([$subGroup1])); - $subadmin->expects($this->at(2)) - ->method('getSubAdminsGroups') - ->with($newUser) - ->will($this->returnValue([])); + ->willReturnMap([ + [$user, [$subGroup1]], + [$newUser, []], + ]); + $subadmin->expects($this->atLeastOnce()) + ->method('isSubAdminofGroup') + ->willReturnMap([ + [$user, $subGroup1, true], + ]); $this->groupManager ->expects($this->any()) ->method('getSubAdmin') ->will($this->returnValue($subadmin)); + $this->groupManager->expects($this->atLeastOnce()) + ->method('get') + ->willReturnMap([ + ['SubGroup1', $subGroup1], + ]); $expectedResponse = new DataResponse( array( @@ -1137,16 +1041,36 @@ class UsersControllerTest extends \Test\TestCase { $this->assertEquals($expectedResponse, $response); } + public function testCreateUnsuccessfulSubAdminNoGroup() { + $controller = $this->getController(false); + $user = $this->createMock(IUser::class); + $user->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('username')); + $this->userSession->expects($this->once()) + ->method('getUser') + ->will($this->returnValue($user)); + + $this->userManager->expects($this->never()) + ->method('createUser'); + + $expectedResponse = new DataResponse( + [ + 'message' => 'No valid group selected' + ], + Http::STATUS_FORBIDDEN + ); + $response = $controller->create('foo', 'password', []); + $this->assertEquals($expectedResponse, $response); + } + public function testCreateUnsuccessfulSubAdmin() { $controller = $this->getController(false); - $user = $this->getMockBuilder('\OC\User\User') - ->disableOriginalConstructor()->getMock(); - $user - ->expects($this->any()) + $user = $this->createMock(IUser::class); + $user->expects($this->any()) ->method('getUID') ->will($this->returnValue('username')); - $this->userSession - ->expects($this->once()) + $this->userSession->expects($this->once()) ->method('getUser') ->will($this->returnValue($user)); @@ -1154,29 +1078,24 @@ class UsersControllerTest extends \Test\TestCase { ->method('createUser') ->will($this->throwException(new \Exception())); - $subgroup1 = $this->getMockBuilder('\OCP\IGroup') - ->disableOriginalConstructor() - ->getMock(); - $subgroup1->expects($this->once()) - ->method('getGID') - ->will($this->returnValue('SubGroup1')); - $subgroup2 = $this->getMockBuilder('\OCP\IGroup') - ->disableOriginalConstructor() - ->getMock(); - $subgroup2->expects($this->once()) - ->method('getGID') - ->will($this->returnValue('SubGroup2')); - $subadmin = $this->getMockBuilder('\OC\SubAdmin') - ->disableOriginalConstructor() - ->getMock(); - $subadmin->expects($this->once()) - ->method('getSubAdminsGroups') - ->with($user) - ->will($this->returnValue([$subgroup1, $subgroup2])); - $this->groupManager - ->expects($this->any()) + $subgroup1 = $this->createMock(IGroup::class); + $subgroup2 = $this->createMock(IGroup::class); + $subadmin = $this->createMock(\OC\SubAdmin::class); + $subadmin->expects($this->atLeastOnce()) + ->method('isSubAdminofGroup') + ->willReturnMap([ + [$user, $subgroup1, true], + [$user, $subgroup2, true], + ]); + $this->groupManager->expects($this->any()) ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); + ->willReturn($subadmin); + $this->groupManager->expects($this->atLeastOnce()) + ->method('get') + ->willReturnMap([ + ['SubGroup1', $subgroup1], + ['SubGroup2', $subgroup2], + ]); $expectedResponse = new DataResponse( [ @@ -1184,7 +1103,7 @@ class UsersControllerTest extends \Test\TestCase { ], Http::STATUS_FORBIDDEN ); - $response = $controller->create('foo', 'password', array()); + $response = $controller->create('foo', 'password', array('SubGroup1', 'SubGroup2')); $this->assertEquals($expectedResponse, $response); } diff --git a/tests/lib/Files/Node/FileTest.php b/tests/lib/Files/Node/FileTest.php index 823e3b50249..a17cc1d1a3a 100644 --- a/tests/lib/Files/Node/FileTest.php +++ b/tests/lib/Files/Node/FileTest.php @@ -8,161 +8,28 @@ namespace Test\Files\Node; -use OC\Files\FileInfo; -use OCP\Files\NotFoundException; -use OCP\ILogger; -use OCP\IUserManager; - -class FileTest extends \Test\TestCase { - /** @var \OC\User\User */ - private $user; - /** @var \OC\Files\Mount\Manager */ - private $manager; - /** @var \OC\Files\View|\PHPUnit_Framework_MockObject_MockObject */ - private $view; - /** @var \OCP\Files\Config\IUserMountCache|\PHPUnit_Framework_MockObject_MockObject */ - private $userMountCache; - /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */ - private $logger; - /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ - private $userManager; - - protected function setUp() { - parent::setUp(); - $config = $this->getMockBuilder('\OCP\IConfig') - ->disableOriginalConstructor() - ->getMock(); - $this->user = new \OC\User\User('', new \Test\Util\User\Dummy, null, $config); - $this->manager = $this->getMockBuilder('\OC\Files\Mount\Manager') - ->disableOriginalConstructor() - ->getMock(); - $this->view = $this->getMockBuilder('\OC\Files\View') - ->disableOriginalConstructor() - ->getMock(); - $this->userMountCache = $this->getMockBuilder('\OCP\Files\Config\IUserMountCache') - ->disableOriginalConstructor() - ->getMock(); - $this->logger = $this->createMock(ILogger::class); - $this->userManager = $this->createMock(IUserManager::class); - } - - protected function getMockStorage() { - $storage = $this->getMockBuilder('\OCP\Files\Storage') - ->getMock(); - $storage->expects($this->any()) - ->method('getId') - ->will($this->returnValue('home::someuser')); - return $storage; +/** + * Class FileTest + * + * @group DB + * + * @package Test\Files\Node + */ +class FileTest extends NodeTest { + protected function createTestNode($root, $view, $path) { + return new \OC\Files\Node\File($root, $view, $path); } - protected function getFileInfo($data) { - return new FileInfo('', $this->getMockStorage(), '', $data, null); + protected function getNodeClass() { + return '\OC\Files\Node\File'; } - public function testDelete() { - /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */ - $root = $this->getMockBuilder('\OC\Files\Node\Root') - ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager]) - ->getMock(); - - $root->expects($this->exactly(2)) - ->method('emit') - ->will($this->returnValue(true)); - $root->expects($this->any()) - ->method('getUser') - ->will($this->returnValue($this->user)); - - $this->view->expects($this->once()) - ->method('getFileInfo') - ->with('/bar/foo') - ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); - - $this->view->expects($this->once()) - ->method('unlink') - ->with('/bar/foo') - ->will($this->returnValue(true)); - - $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo'); - $node->delete(); - } - - public function testDeleteHooks() { - $test = $this; - $hooksRun = 0; - /** - * @param \OC\Files\Node\File $node - */ - $preListener = function ($node) use (&$test, &$hooksRun) { - $test->assertInstanceOf('\OC\Files\Node\File', $node); - $test->assertEquals('foo', $node->getInternalPath()); - $test->assertEquals('/bar/foo', $node->getPath()); - $test->assertEquals(1, $node->getId()); - $hooksRun++; - }; - - /** - * @param \OC\Files\Node\File $node - */ - $postListener = function ($node) use (&$test, &$hooksRun) { - $test->assertInstanceOf('\OC\Files\Node\NonExistingFile', $node); - $test->assertEquals('foo', $node->getInternalPath()); - $test->assertEquals('/bar/foo', $node->getPath()); - $test->assertEquals(1, $node->getId()); - $test->assertEquals('text/plain', $node->getMimeType()); - $hooksRun++; - }; - - $root = new \OC\Files\Node\Root( - $this->manager, - $this->view, - $this->user, - $this->userMountCache, - $this->logger, - $this->userManager - ); - $root->listen('\OC\Files', 'preDelete', $preListener); - $root->listen('\OC\Files', 'postDelete', $postListener); - - $this->view->expects($this->any()) - ->method('getFileInfo') - ->with('/bar/foo') - ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1, 'mimetype' => 'text/plain')))); - - $this->view->expects($this->once()) - ->method('unlink') - ->with('/bar/foo') - ->will($this->returnValue(true)); - - $this->view->expects($this->any()) - ->method('resolvePath') - ->with('/bar/foo') - ->will($this->returnValue(array(null, 'foo'))); - - $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo'); - $node->delete(); - $this->assertEquals(2, $hooksRun); + protected function getNonExistingNodeClass() { + return '\OC\Files\Node\NonExistingFile'; } - /** - * @expectedException \OCP\Files\NotPermittedException - */ - public function testDeleteNotPermitted() { - /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */ - $root = $this->getMockBuilder('\OC\Files\Node\Root') - ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager]) - ->getMock(); - - $root->expects($this->any()) - ->method('getUser') - ->will($this->returnValue($this->user)); - - $this->view->expects($this->once()) - ->method('getFileInfo') - ->with('/bar/foo') - ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); - - $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo'); - $node->delete(); + protected function getViewDeleteMethod() { + return 'unlink'; } public function testGetContent() { @@ -421,224 +288,5 @@ class FileTest extends \Test\TestCase { $node->fopen('w'); } - public function testCopySameStorage() { - /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */ - $root = $this->getMockBuilder('\OC\Files\Node\Root') - ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager]) - ->getMock(); - - $this->view->expects($this->any()) - ->method('copy') - ->with('/bar/foo', '/bar/asd'); - - $this->view->expects($this->any()) - ->method('getFileInfo') - ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 3)))); - - $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo'); - $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar'); - $newNode = new \OC\Files\Node\File($root, $this->view, '/bar/asd'); - - $root->expects($this->exactly(2)) - ->method('get') - ->will($this->returnValueMap(array( - array('/bar/asd', $newNode), - array('/bar', $parentNode) - ))); - - $target = $node->copy('/bar/asd'); - $this->assertInstanceOf('\OC\Files\Node\File', $target); - $this->assertEquals(3, $target->getId()); - } - - /** - * @expectedException \OCP\Files\NotPermittedException - */ - public function testCopyNotPermitted() { - /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */ - $root = $this->getMockBuilder('\OC\Files\Node\Root') - ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager]) - ->getMock(); - - /** - * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage - */ - $storage = $this->getMockBuilder('\OC\Files\Storage\Storage') - ->disableOriginalConstructor() - ->getMock(); - - $root->expects($this->never()) - ->method('getMount'); - - $storage->expects($this->never()) - ->method('copy'); - $this->view->expects($this->any()) - ->method('getFileInfo') - ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ, 'fileid' => 3)))); - - $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo'); - $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar'); - - $root->expects($this->once()) - ->method('get') - ->will($this->returnValueMap(array( - array('/bar', $parentNode) - ))); - - $node->copy('/bar/asd'); - } - - /** - * @expectedException \OCP\Files\NotFoundException - */ - public function testCopyNoParent() { - /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */ - $root = $this->getMockBuilder('\OC\Files\Node\Root') - ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager]) - ->getMock(); - - $this->view->expects($this->never()) - ->method('copy'); - - $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo'); - - $root->expects($this->once()) - ->method('get') - ->with('/bar/asd') - ->will($this->throwException(new NotFoundException())); - - $node->copy('/bar/asd/foo'); - } - - /** - * @expectedException \OCP\Files\NotPermittedException - */ - public function testCopyParentIsFile() { - /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */ - $root = $this->getMockBuilder('\OC\Files\Node\Root') - ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager]) - ->getMock(); - - $this->view->expects($this->never()) - ->method('copy'); - - $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo'); - $parentNode = new \OC\Files\Node\File($root, $this->view, '/bar'); - - $root->expects($this->once()) - ->method('get') - ->will($this->returnValueMap(array( - array('/bar', $parentNode) - ))); - - $node->copy('/bar/asd'); - } - - public function testMoveSameStorage() { - /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */ - $root = $this->getMockBuilder('\OC\Files\Node\Root') - ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager]) - ->getMock(); - - $this->view->expects($this->any()) - ->method('rename') - ->with('/bar/foo', '/bar/asd'); - - $this->view->expects($this->any()) - ->method('getFileInfo') - ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1)))); - - $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo'); - $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar'); - - $root->expects($this->any()) - ->method('get') - ->will($this->returnValueMap(array(array('/bar', $parentNode), array('/bar/asd', $node)))); - - $target = $node->move('/bar/asd'); - $this->assertInstanceOf('\OC\Files\Node\File', $target); - $this->assertEquals(1, $target->getId()); - $this->assertEquals('/bar/asd', $node->getPath()); - } - - /** - * @expectedException \OCP\Files\NotPermittedException - */ - public function testMoveNotPermitted() { - /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */ - $root = $this->getMockBuilder('\OC\Files\Node\Root') - ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager]) - ->getMock(); - - $this->view->expects($this->any()) - ->method('getFileInfo') - ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); - - $this->view->expects($this->never()) - ->method('rename'); - - $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo'); - $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar'); - - $root->expects($this->once()) - ->method('get') - ->with('/bar') - ->will($this->returnValue($parentNode)); - - $node->move('/bar/asd'); - } - - /** - * @expectedException \OCP\Files\NotFoundException - */ - public function testMoveNoParent() { - /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */ - $root = $this->getMockBuilder('\OC\Files\Node\Root') - ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager]) - ->getMock(); - - /** - * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage - */ - $storage = $this->getMockBuilder('\OC\Files\Storage\Storage') - ->disableOriginalConstructor() - ->getMock(); - - $storage->expects($this->never()) - ->method('rename'); - - $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo'); - $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar'); - - $root->expects($this->once()) - ->method('get') - ->with('/bar') - ->will($this->throwException(new NotFoundException())); - - $node->move('/bar/asd'); - } - - /** - * @expectedException \OCP\Files\NotPermittedException - */ - public function testMoveParentIsFile() { - /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */ - $root = $this->getMockBuilder('\OC\Files\Node\Root') - ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager]) - ->getMock(); - - $this->view->expects($this->never()) - ->method('rename'); - - $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo'); - $parentNode = new \OC\Files\Node\File($root, $this->view, '/bar'); - - $root->expects($this->once()) - ->method('get') - ->with('/bar') - ->will($this->returnValue($parentNode)); - - $node->move('/bar/asd'); - } } diff --git a/tests/lib/Files/Node/FolderTest.php b/tests/lib/Files/Node/FolderTest.php index dcfe6a1768c..ec043c7b81e 100644 --- a/tests/lib/Files/Node/FolderTest.php +++ b/tests/lib/Files/Node/FolderTest.php @@ -18,13 +18,11 @@ use OC\Files\Node\Node; use OC\Files\Node\Root; use OC\Files\Storage\Temporary; use OC\Files\Storage\Wrapper\Jail; +use OC\Files\View; use OC\User\User; use OCP\Files\Mount\IMountPoint; use OCP\Files\NotFoundException; -use OC\Files\View; use OCP\Files\Storage; -use OCP\ILogger; -use OCP\IUserManager; /** * Class FolderTest @@ -33,152 +31,21 @@ use OCP\IUserManager; * * @package Test\Files\Node */ -class FolderTest extends \Test\TestCase { - /** @var User */ - private $user; - /** @var \OCP\Files\Config\IUserMountCache|\PHPUnit_Framework_MockObject_MockObject */ - private $userMountCache; - /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */ - private $logger; - /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ - private $userManager; - - protected function setUp() { - parent::setUp(); - $this->user = new \OC\User\User('', new \Test\Util\User\Dummy); - $this->userMountCache = $this->getMockBuilder('\OCP\Files\Config\IUserMountCache') - ->disableOriginalConstructor() - ->getMock(); - $this->logger = $this->createMock(ILogger::class); - $this->userManager = $this->createMock(IUserManager::class); +class FolderTest extends NodeTest { + protected function createTestNode($root, $view, $path) { + return new \OC\Files\Node\Folder($root, $view, $path); } - protected function getMockStorage() { - $storage = $this->createMock(Storage::class); - $storage->expects($this->any()) - ->method('getId') - ->will($this->returnValue('home::someuser')); - return $storage; + protected function getNodeClass() { + return '\OC\Files\Node\Folder'; } - protected function getFileInfo($data) { - return new FileInfo('', $this->getMockStorage(), '', $data, null); + protected function getNonExistingNodeClass() { + return '\OC\Files\Node\NonExistingFolder'; } - public function testDelete() { - $manager = $this->createMock(Manager::class); - /** - * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view - */ - $view = $this->createMock(View::class); - $root = $this->getMockBuilder(Root::class) - ->setConstructorArgs([$manager, $view, $this->user, $this->userMountCache, $this->logger, $this->userManager]) - ->getMock(); - $root->expects($this->any()) - ->method('getUser') - ->will($this->returnValue($this->user)); - $root->expects($this->exactly(2)) - ->method('emit') - ->will($this->returnValue(true)); - - $view->expects($this->any()) - ->method('getFileInfo') - ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); - - $view->expects($this->once()) - ->method('rmdir') - ->with('/bar/foo') - ->will($this->returnValue(true)); - - $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo'); - $node->delete(); - } - - public function testDeleteHooks() { - $test = $this; - $hooksRun = 0; - /** - * @param \OC\Files\Node\File $node - */ - $preListener = function ($node) use (&$test, &$hooksRun) { - $test->assertInstanceOf('\OC\Files\Node\Folder', $node); - $test->assertEquals('foo', $node->getInternalPath()); - $test->assertEquals('/bar/foo', $node->getPath()); - $hooksRun++; - }; - - /** - * @param \OC\Files\Node\File $node - */ - $postListener = function ($node) use (&$test, &$hooksRun) { - $test->assertInstanceOf('\OC\Files\Node\NonExistingFolder', $node); - $test->assertEquals('foo', $node->getInternalPath()); - $test->assertEquals('/bar/foo', $node->getPath()); - $test->assertEquals(1, $node->getId()); - $hooksRun++; - }; - - /** - * @var \OC\Files\Mount\Manager $manager - */ - $manager = $this->createMock(Manager::class); - /** - * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view - */ - $view = $this->createMock(View::class); - $root = new \OC\Files\Node\Root( - $manager, - $view, - $this->user, - $this->userMountCache, - $this->logger, - $this->userManager - ); - $root->listen('\OC\Files', 'preDelete', $preListener); - $root->listen('\OC\Files', 'postDelete', $postListener); - - $view->expects($this->any()) - ->method('getFileInfo') - ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1)))); - - $view->expects($this->once()) - ->method('rmdir') - ->with('/bar/foo') - ->will($this->returnValue(true)); - - $view->expects($this->any()) - ->method('resolvePath') - ->with('/bar/foo') - ->will($this->returnValue(array(null, 'foo'))); - - $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo'); - $node->delete(); - $this->assertEquals(2, $hooksRun); - } - - /** - * @expectedException \OCP\Files\NotPermittedException - */ - public function testDeleteNotPermitted() { - $manager = $this->createMock(Manager::class); - /** - * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view - */ - $view = $this->createMock(View::class); - $root = $this->getMockBuilder(Root::class) - ->setConstructorArgs([$manager, $view, $this->user, $this->userMountCache, $this->logger, $this->userManager]) - ->getMock(); - $root->expects($this->any()) - ->method('getUser') - ->will($this->returnValue($this->user)); - - $view->expects($this->once()) - ->method('getFileInfo') - ->with('/bar/foo') - ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); - - $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo'); - $node->delete(); + protected function getViewDeleteMethod() { + return 'rmdir'; } public function testGetDirectoryContent() { diff --git a/tests/lib/Files/Node/NodeTest.php b/tests/lib/Files/Node/NodeTest.php index 1a3a0472e97..5e18caa2014 100644 --- a/tests/lib/Files/Node/NodeTest.php +++ b/tests/lib/Files/Node/NodeTest.php @@ -9,24 +9,34 @@ namespace Test\Files\Node; use OC\Files\FileInfo; +use OC\Files\View; +use OCP\Files\Config\IUserMountCache; +use OCP\Files\IRootFolder; +use OCP\Files\Node; use OCP\ILogger; use OCP\IUserManager; +use OCP\Files\NotFoundException; -class NodeTest extends \Test\TestCase { +/** + * Class NodeTest + * + * @package Test\Files\Node + */ +abstract class NodeTest extends \Test\TestCase { /** @var \OC\User\User */ - private $user; + protected $user; /** @var \OC\Files\Mount\Manager */ - private $manager; + protected $manager; /** @var \OC\Files\View|\PHPUnit_Framework_MockObject_MockObject */ - private $view; + protected $view; /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject */ - private $root; + protected $root; /** @var \OCP\Files\Config\IUserMountCache|\PHPUnit_Framework_MockObject_MockObject */ - private $userMountCache; + protected $userMountCache; /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */ - private $logger; + protected $logger; /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ - private $userManager; + protected $userManager; protected function setUp() { parent::setUp(); @@ -54,6 +64,29 @@ class NodeTest extends \Test\TestCase { ->getMock(); } + /** + * @param IRootFolder $root + * @param View $view + * @param string $path + * @return Node + */ + protected abstract function createTestNode($root, $view, $path); + + /** + * @return string + */ + protected abstract function getNodeClass(); + + /** + * @return string + */ + protected abstract function getNonExistingNodeClass(); + + /** + * @return string + */ + protected abstract function getViewDeleteMethod(); + protected function getMockStorage() { $storage = $this->getMockBuilder('\OCP\Files\Storage') ->disableOriginalConstructor() @@ -68,6 +101,104 @@ class NodeTest extends \Test\TestCase { return new FileInfo('', $this->getMockStorage(), '', $data, null); } + public function testDelete() { + $this->root->expects($this->exactly(2)) + ->method('emit') + ->will($this->returnValue(true)); + $this->root->expects($this->any()) + ->method('getUser') + ->will($this->returnValue($this->user)); + + $this->view->expects($this->once()) + ->method('getFileInfo') + ->with('/bar/foo') + ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL]))); + + $this->view->expects($this->once()) + ->method($this->getViewDeleteMethod()) + ->with('/bar/foo') + ->will($this->returnValue(true)); + + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); + $node->delete(); + } + + public function testDeleteHooks() { + $test = $this; + $hooksRun = 0; + /** + * @param \OC\Files\Node\File $node + */ + $preListener = function ($node) use (&$test, &$hooksRun) { + $test->assertInstanceOf($this->getNodeClass(), $node); + $test->assertEquals('foo', $node->getInternalPath()); + $test->assertEquals('/bar/foo', $node->getPath()); + $test->assertEquals(1, $node->getId()); + $hooksRun++; + }; + + /** + * @param \OC\Files\Node\File $node + */ + $postListener = function ($node) use (&$test, &$hooksRun) { + $test->assertInstanceOf($this->getNonExistingNodeClass(), $node); + $test->assertEquals('foo', $node->getInternalPath()); + $test->assertEquals('/bar/foo', $node->getPath()); + $test->assertEquals(1, $node->getId()); + $test->assertEquals('text/plain', $node->getMimeType()); + $hooksRun++; + }; + + $root = new \OC\Files\Node\Root( + $this->manager, + $this->view, + $this->user, + $this->userMountCache, + $this->logger, + $this->userManager + ); + + $root->listen('\OC\Files', 'preDelete', $preListener); + $root->listen('\OC\Files', 'postDelete', $postListener); + + $this->view->expects($this->any()) + ->method('getFileInfo') + ->with('/bar/foo') + ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1, 'mimetype' => 'text/plain']))); + + $this->view->expects($this->once()) + ->method($this->getViewDeleteMethod()) + ->with('/bar/foo') + ->will($this->returnValue(true)); + + $this->view->expects($this->any()) + ->method('resolvePath') + ->with('/bar/foo') + ->will($this->returnValue([null, 'foo'])); + + $node = $this->createTestNode($root, $this->view, '/bar/foo'); + $node->delete(); + $this->assertEquals(2, $hooksRun); + } + + /** + * @expectedException \OCP\Files\NotPermittedException + */ + public function testDeleteNotPermitted() { + $this->root->expects($this->any()) + ->method('getUser') + ->will($this->returnValue($this->user)); + + $this->view->expects($this->once()) + ->method('getFileInfo') + ->with('/bar/foo') + ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_READ]))); + + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); + $node->delete(); + } + + public function testStat() { $this->root->expects($this->any()) ->method('getUser') @@ -86,7 +217,7 @@ class NodeTest extends \Test\TestCase { ->with('/bar/foo') ->will($this->returnValue($stat)); - $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); $this->assertEquals($stat, $node->stat()); } @@ -107,7 +238,7 @@ class NodeTest extends \Test\TestCase { ->with('/bar/foo') ->will($this->returnValue($stat)); - $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); $this->assertEquals(1, $node->getId()); } @@ -129,7 +260,7 @@ class NodeTest extends \Test\TestCase { ->with('/bar/foo') ->will($this->returnValue($stat)); - $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); $this->assertEquals(100, $node->getSize()); } @@ -150,7 +281,7 @@ class NodeTest extends \Test\TestCase { ->with('/bar/foo') ->will($this->returnValue($stat)); - $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); $this->assertEquals('qwerty', $node->getEtag()); } @@ -171,7 +302,7 @@ class NodeTest extends \Test\TestCase { ->with('/bar/foo') ->will($this->returnValue($stat)); - $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); $this->assertEquals(50, $node->getMTime()); } @@ -192,7 +323,7 @@ class NodeTest extends \Test\TestCase { ->will($this->returnValue(array($storage, 'foo'))); - $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); $this->assertEquals($storage, $node->getStorage()); } @@ -201,7 +332,7 @@ class NodeTest extends \Test\TestCase { ->method('getUser') ->will($this->returnValue($this->user)); - $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); $this->assertEquals('/bar/foo', $node->getPath()); } @@ -222,7 +353,7 @@ class NodeTest extends \Test\TestCase { ->will($this->returnValue(array($storage, 'foo'))); - $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); $this->assertEquals('foo', $node->getInternalPath()); } @@ -231,7 +362,7 @@ class NodeTest extends \Test\TestCase { ->method('getUser') ->will($this->returnValue($this->user)); - $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); $this->assertEquals('foo', $node->getName()); } @@ -250,7 +381,7 @@ class NodeTest extends \Test\TestCase { ->with('/bar/foo') ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); - $node = new \OC\Files\Node\Node($this->root, $this->view, '/bar/foo'); + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); $node->touch(100); $this->assertEquals(100, $node->getMTime()); } @@ -302,7 +433,7 @@ class NodeTest extends \Test\TestCase { ->with('/bar/foo') ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); - $node = new \OC\Files\Node\Node($root, $this->view, '/bar/foo'); + $node = $this->createTestNode($root, $this->view, '/bar/foo'); $node->touch(100); $this->assertEquals(2, $hooksRun); } @@ -320,7 +451,7 @@ class NodeTest extends \Test\TestCase { ->with('/bar/foo') ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); - $node = new \OC\Files\Node\Node($this->root, $this->view, '/bar/foo'); + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); $node->touch(100); } @@ -328,7 +459,312 @@ class NodeTest extends \Test\TestCase { * @expectedException \OCP\Files\InvalidPathException */ public function testInvalidPath() { - $node = new \OC\Files\Node\Node($this->root, $this->view, '/../foo'); + $node = $this->createTestNode($this->root, $this->view, '/../foo'); $node->getFileInfo(); } + + public function testCopySameStorage() { + $this->view->expects($this->any()) + ->method('copy') + ->with('/bar/foo', '/bar/asd') + ->will($this->returnValue(true)); + + $this->view->expects($this->any()) + ->method('getFileInfo') + ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 3]))); + + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); + $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar'); + $newNode = $this->createTestNode($this->root, $this->view, '/bar/asd'); + + $this->root->expects($this->exactly(2)) + ->method('get') + ->will($this->returnValueMap([ + ['/bar/asd', $newNode], + ['/bar', $parentNode] + ])); + + $target = $node->copy('/bar/asd'); + $this->assertInstanceOf($this->getNodeClass(), $target); + $this->assertEquals(3, $target->getId()); + } + + /** + * @expectedException \OCP\Files\NotPermittedException + */ + public function testCopyNotPermitted() { + /** + * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage + */ + $storage = $this->createMock('\OC\Files\Storage\Storage'); + + $this->root->expects($this->never()) + ->method('getMount'); + + $storage->expects($this->never()) + ->method('copy'); + + $this->view->expects($this->any()) + ->method('getFileInfo') + ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_READ, 'fileid' => 3]))); + + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); + $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar'); + + $this->root->expects($this->once()) + ->method('get') + ->will($this->returnValueMap([ + ['/bar', $parentNode] + ])); + + $node->copy('/bar/asd'); + } + + /** + * @expectedException \OCP\Files\NotFoundException + */ + public function testCopyNoParent() { + $this->view->expects($this->never()) + ->method('copy'); + + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); + + $this->root->expects($this->once()) + ->method('get') + ->with('/bar/asd') + ->will($this->throwException(new NotFoundException())); + + $node->copy('/bar/asd/foo'); + } + + /** + * @expectedException \OCP\Files\NotPermittedException + */ + public function testCopyParentIsFile() { + $this->view->expects($this->never()) + ->method('copy'); + + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); + $parentNode = new \OC\Files\Node\File($this->root, $this->view, '/bar'); + + $this->root->expects($this->once()) + ->method('get') + ->will($this->returnValueMap([ + ['/bar', $parentNode] + ])); + + $node->copy('/bar/asd'); + } + + public function testMoveSameStorage() { + $this->view->expects($this->any()) + ->method('rename') + ->with('/bar/foo', '/bar/asd') + ->will($this->returnValue(true)); + + $this->view->expects($this->any()) + ->method('getFileInfo') + ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1]))); + + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); + $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar'); + + $this->root->expects($this->any()) + ->method('get') + ->will($this->returnValueMap([['/bar', $parentNode], ['/bar/asd', $node]])); + + $target = $node->move('/bar/asd'); + $this->assertInstanceOf($this->getNodeClass(), $target); + $this->assertEquals(1, $target->getId()); + $this->assertEquals('/bar/asd', $node->getPath()); + } + + public function moveOrCopyProvider() { + return [ + ['move', 'rename', 'preRename', 'postRename'], + ['copy', 'copy', 'preCopy', 'postCopy'], + ]; + } + + /** + * @dataProvider moveOrCopyProvider + * @param string $operationMethod + * @param string $viewMethod + * @param string $preHookName + * @param string $postHookName + */ + public function testMoveCopyHooks($operationMethod, $viewMethod, $preHookName, $postHookName) { + /** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject $root */ + $root = $this->getMockBuilder('\OC\Files\Node\Root') + ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager]) + ->setMethods(['get']) + ->getMock(); + + $this->view->expects($this->any()) + ->method($viewMethod) + ->with('/bar/foo', '/bar/asd') + ->will($this->returnValue(true)); + + $this->view->expects($this->any()) + ->method('getFileInfo') + ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1]))); + + /** + * @var \OC\Files\Node\File|\PHPUnit_Framework_MockObject_MockObject $node + */ + $node = $this->createTestNode($root, $this->view, '/bar/foo'); + $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar'); + $targetTestNode = $this->createTestNode($root, $this->view, '/bar/asd'); + + $root->expects($this->any()) + ->method('get') + ->will($this->returnValueMap([['/bar', $parentNode], ['/bar/asd', $targetTestNode]])); + + $hooksRun = 0; + + $preListener = function (Node $sourceNode, Node $targetNode) use (&$hooksRun, $node) { + $this->assertSame($node, $sourceNode); + $this->assertInstanceOf($this->getNodeClass(), $sourceNode); + $this->assertInstanceOf($this->getNonExistingNodeClass(), $targetNode); + $this->assertEquals('/bar/asd', $targetNode->getPath()); + $hooksRun++; + }; + + $postListener = function (Node $sourceNode, Node $targetNode) use (&$hooksRun, $node, $targetTestNode) { + $this->assertSame($node, $sourceNode); + $this->assertNotSame($node, $targetNode); + $this->assertSame($targetTestNode, $targetNode); + $this->assertInstanceOf($this->getNodeClass(), $sourceNode); + $this->assertInstanceOf($this->getNodeClass(), $targetNode); + $hooksRun++; + }; + + $preWriteListener = function (Node $targetNode) use (&$hooksRun) { + $this->assertInstanceOf($this->getNonExistingNodeClass(), $targetNode); + $this->assertEquals('/bar/asd', $targetNode->getPath()); + $hooksRun++; + }; + + $postWriteListener = function (Node $targetNode) use (&$hooksRun, $targetTestNode) { + $this->assertSame($targetTestNode, $targetNode); + $hooksRun++; + }; + + $root->listen('\OC\Files', $preHookName, $preListener); + $root->listen('\OC\Files', 'preWrite', $preWriteListener); + $root->listen('\OC\Files', $postHookName, $postListener); + $root->listen('\OC\Files', 'postWrite', $postWriteListener); + + $node->$operationMethod('/bar/asd'); + + $this->assertEquals(4, $hooksRun); + } + + /** + * @expectedException \OCP\Files\NotPermittedException + */ + public function testMoveNotPermitted() { + $this->view->expects($this->any()) + ->method('getFileInfo') + ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_READ]))); + + $this->view->expects($this->never()) + ->method('rename'); + + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); + $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar'); + + $this->root->expects($this->once()) + ->method('get') + ->with('/bar') + ->will($this->returnValue($parentNode)); + + $node->move('/bar/asd'); + } + + /** + * @expectedException \OCP\Files\NotFoundException + */ + public function testMoveNoParent() { + /** + * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage + */ + $storage = $this->createMock('\OC\Files\Storage\Storage'); + + $storage->expects($this->never()) + ->method('rename'); + + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); + + $this->root->expects($this->once()) + ->method('get') + ->with('/bar') + ->will($this->throwException(new NotFoundException())); + + $node->move('/bar/asd'); + } + + /** + * @expectedException \OCP\Files\NotPermittedException + */ + public function testMoveParentIsFile() { + $this->view->expects($this->never()) + ->method('rename'); + + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); + $parentNode = new \OC\Files\Node\File($this->root, $this->view, '/bar'); + + $this->root->expects($this->once()) + ->method('get') + ->with('/bar') + ->will($this->returnValue($parentNode)); + + $node->move('/bar/asd'); + } + + /** + * @expectedException \OCP\Files\NotPermittedException + */ + public function testMoveFailed() { + $this->view->expects($this->any()) + ->method('rename') + ->with('/bar/foo', '/bar/asd') + ->will($this->returnValue(false)); + + $this->view->expects($this->any()) + ->method('getFileInfo') + ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1]))); + + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); + $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar'); + + $this->root->expects($this->any()) + ->method('get') + ->will($this->returnValueMap([['/bar', $parentNode], ['/bar/asd', $node]])); + + $node->move('/bar/asd'); + } + + /** + * @expectedException \OCP\Files\NotPermittedException + */ + public function testCopyFailed() { + $this->view->expects($this->any()) + ->method('copy') + ->with('/bar/foo', '/bar/asd') + ->will($this->returnValue(false)); + + $this->view->expects($this->any()) + ->method('getFileInfo') + ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1]))); + + $node = $this->createTestNode($this->root, $this->view, '/bar/foo'); + $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar'); + + $this->root->expects($this->any()) + ->method('get') + ->will($this->returnValueMap([['/bar', $parentNode], ['/bar/asd', $node]])); + + $node->copy('/bar/asd'); + } } diff --git a/tests/lib/Files/Type/DetectionTest.php b/tests/lib/Files/Type/DetectionTest.php index 87e0f94e3e2..5c1f48a806e 100644 --- a/tests/lib/Files/Type/DetectionTest.php +++ b/tests/lib/Files/Type/DetectionTest.php @@ -74,9 +74,13 @@ class DetectionTest extends \Test\TestCase { $this->assertEquals('text/plain', $this->detection->detectPath('foo.txt')); $this->assertEquals('image/png', $this->detection->detectPath('foo.png')); $this->assertEquals('image/png', $this->detection->detectPath('foo.bar.png')); + $this->assertEquals('image/png', $this->detection->detectPath('.hidden.png')); + $this->assertEquals('image/png', $this->detection->detectPath('.hidden.foo.png')); $this->assertEquals('image/png', $this->detection->detectPath('.hidden/foo.png')); + $this->assertEquals('image/png', $this->detection->detectPath('.hidden/.hidden.png')); $this->assertEquals('image/png', $this->detection->detectPath('test.jpg/foo.png')); $this->assertEquals('application/octet-stream', $this->detection->detectPath('.png')); + $this->assertEquals('application/octet-stream', $this->detection->detectPath('..hidden')); $this->assertEquals('application/octet-stream', $this->detection->detectPath('foo')); $this->assertEquals('application/octet-stream', $this->detection->detectPath('')); } diff --git a/tests/lib/Mail/MailerTest.php b/tests/lib/Mail/MailerTest.php index c63ceb5982a..7a7ce0392e9 100644 --- a/tests/lib/Mail/MailerTest.php +++ b/tests/lib/Mail/MailerTest.php @@ -44,7 +44,7 @@ class MailerTest extends TestCase { $this->config ->expects($this->once()) ->method('getSystemValue') - ->with('mail_smtpmode', 'sendmail') + ->with('mail_smtpmode', 'php') ->will($this->returnValue('sendmail')); $this->assertEquals(\Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs'), self::invokePrivate($this->mailer, 'getSendMailInstance')); @@ -54,7 +54,7 @@ class MailerTest extends TestCase { $this->config ->expects($this->once()) ->method('getSystemValue') - ->with('mail_smtpmode', 'sendmail') + ->with('mail_smtpmode', 'php') ->will($this->returnValue('qmail')); $this->assertEquals(\Swift_SendmailTransport::newInstance('/var/qmail/bin/sendmail -bs'), self::invokePrivate($this->mailer, 'getSendMailInstance')); diff --git a/tests/lib/Repair/AvatarPermissionsTest.php b/tests/lib/Repair/AvatarPermissionsTest.php deleted file mode 100644 index e3f582dc512..00000000000 --- a/tests/lib/Repair/AvatarPermissionsTest.php +++ /dev/null @@ -1,189 +0,0 @@ -<?php -/** - * @author Roeland Jago Douma <rullzer@owncloud.com> - * - * @copyright Copyright (c) 2016, ownCloud, Inc. - * @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 Test\Repair; - -/** - * Test for fixing the userRoot and avatar permissions - * - * @group DB - * - * @see \OC\Repair\AvatarPermissionsTest - */ -class AvatarPermissionsTest extends \Test\TestCase { - - /** @var \OC\Repair\AvatarPermissions */ - protected $repair; - - /** @var \OCP\IDBConnection */ - protected $connection; - - protected function setUp() { - parent::setUp(); - - $this->connection = \OC::$server->getDatabaseConnection(); - $this->repair = new \OC\Repair\AvatarPermissions($this->connection); - $this->cleanUpTables(); - } - - protected function tearDown() { - $this->cleanUpTables(); - - parent::tearDown(); - } - - protected function cleanUpTables() { - $qb = $this->connection->getQueryBuilder(); - $qb->delete('filecache')->execute(); - $qb->delete('storages')->execute(); - } - - public function dataFixUserRootPermissions() { - return [ - ['home::user', '', 0, 23], - ['home::user', 'foo', 0, 0], - ['home::user', 'avatar.jpg', 0, 0], - ['ABC::user', '', 0, 0], - ['ABC::user', 'foo', 0, 0], - ]; - } - - /** - * @dataProvider dataFixUserRootPermissions - * - * @param string $storageId - * @param string $path - * @param int $permissionsBefore - * @param int $permissionsAfter - */ - public function testFixUserRootPermissions($storageId, $path, $permissionsBefore, $permissionsAfter) { - $userStorage = $this->addStorage($storageId); - $userHome = $this->addFileCacheEntry($userStorage, $path, $permissionsBefore); - - $this->invokePrivate($this->repair, 'fixUserRootPermissions', []); - - $this->verifyPermissions($userHome, $permissionsAfter); - } - - public function dataFixAvatarPermissions() { - return [ - ['home::user', '', 0, 0], - ['home::user', 'avatar.jpg', 0, 27], - ['home::user', 'avatar.png', 0, 27], - ['home::user', 'avatar.32.png', 0, 27], - ['home::user', 'mine.txt', 0, 0], - ['ABC::user', '', 0, 0], - ['ABC::user', 'avatar.jpg', 0, 0], - ['ABC::user', 'avatar.png', 0, 0], - ['ABC::user', 'avatar.32.png', 0, 0], - ['ABC::user', 'mine.txt', 0, 0], - ]; - } - - /** - * @dataProvider dataFixAvatarPermissions - * - * @param string $storageId - * @param string $path - * @param int $permissionsBefore - * @param int $permissionsAfter - */ - public function testFixAvatarPermissions($storageId, $path, $permissionsBefore, $permissionsAfter) { - $userStorage = $this->addStorage($storageId); - $userHome = $this->addFileCacheEntry($userStorage, $path, $permissionsBefore); - - $this->invokePrivate($this->repair, 'fixAvatarPermissions', []); - - $this->verifyPermissions($userHome, $permissionsAfter); - } - - /** - * Add a new storage - * - * @param string $id - * @return int The numeric id - */ - protected function addStorage($id) { - $qb = $this->connection->getQueryBuilder(); - - $qb->insert('storages') - ->values([ - 'id' => $qb->createNamedParameter($id) - ]); - - $qb->execute(); - - return $qb->getLastInsertId(); - } - - /** - * Add a filecache entry - * - * @param int $storage - * @param string $path - * @param int $permissions - * - * @return int The fileid - */ - protected function addFileCacheEntry($storage, $path, $permissions) { - $qb = $this->connection->getQueryBuilder(); - - $qb->insert('filecache') - ->values([ - 'path' => $qb->createNamedParameter($path), - 'path_hash' => $qb->createNamedParameter(md5($path)), - 'parent' => $qb->createNamedParameter(42), - 'mimetype' => $qb->createNamedParameter(23), - 'mimepart' => $qb->createNamedParameter(32), - 'size' => $qb->createNamedParameter(16), - 'mtime' => $qb->createNamedParameter(1), - 'storage_mtime' => $qb->createNamedParameter(2), - 'encrypted' => $qb->createNamedParameter(0), - 'unencrypted_size' => $qb->createNamedParameter(0), - 'storage' => $qb->createNamedParameter($storage), - 'permissions' => $qb->createNamedParameter($permissions), - ]); - - $qb->execute(); - - return $qb->getLastInsertId(); - } - - /** - * @param int $fileId - * @param int $permissions - */ - protected function verifyPermissions($fileId, $permissions) { - $qb = $this->connection->getQueryBuilder(); - - $qb->select('permissions') - ->from('filecache') - ->where($qb->expr()->eq('fileid', $qb->createNamedParameter($fileId))); - - $cursor = $qb->execute(); - - $data = $cursor->fetch(); - $cursor->closeCursor(); - - $this->assertSame($permissions, (int)$data['permissions']); - } - - -} diff --git a/tests/lib/Settings/ManagerTest.php b/tests/lib/Settings/ManagerTest.php index b91331a1d30..70401abb652 100644 --- a/tests/lib/Settings/ManagerTest.php +++ b/tests/lib/Settings/ManagerTest.php @@ -32,6 +32,7 @@ use OCP\IConfig; use OCP\IDBConnection; use OCP\IL10N; use OCP\ILogger; +use OCP\IURLGenerator; use OCP\IUserManager; use OCP\Lock\ILockingProvider; use Test\TestCase; @@ -55,18 +56,21 @@ class ManagerTest extends TestCase { private $lockingProvider; /** @var Mapper|\PHPUnit_Framework_MockObject_MockObject */ private $mapper; + /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ + private $url; public function setUp() { parent::setUp(); - $this->logger = $this->getMockBuilder('\OCP\ILogger')->getMock(); - $this->dbConnection = $this->getMockBuilder('\OCP\IDBConnection')->getMock(); - $this->l10n = $this->getMockBuilder('\OCP\IL10N')->getMock(); - $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock(); - $this->encryptionManager = $this->getMockBuilder('\OCP\Encryption\IManager')->getMock(); - $this->userManager = $this->getMockBuilder('\OCP\IUserManager')->getMock(); - $this->lockingProvider = $this->getMockBuilder('\OCP\Lock\ILockingProvider')->getMock(); - $this->mapper = $this->getMockBuilder(Mapper::class)->disableOriginalConstructor()->getMock(); + $this->logger = $this->createMock(ILogger::class); + $this->dbConnection = $this->createMock(IDBConnection::class); + $this->l10n = $this->createMock(IL10N::class); + $this->config = $this->createMock(IConfig::class); + $this->encryptionManager = $this->createMock(IManager::class); + $this->userManager = $this->createMock(IUserManager::class); + $this->lockingProvider = $this->createMock(ILockingProvider::class); + $this->mapper = $this->createMock(Mapper::class); + $this->url = $this->createMock(IURLGenerator::class); $this->manager = new Manager( $this->logger, @@ -76,7 +80,8 @@ class ManagerTest extends TestCase { $this->encryptionManager, $this->userManager, $this->lockingProvider, - $this->mapper + $this->mapper, + $this->url ); } @@ -133,22 +138,26 @@ class ManagerTest extends TestCase { $this->mapper->expects($this->once()) ->method('getAdminSectionsFromDB') ->will($this->returnValue([ - ['class' => '\OCA\LogReader\Settings\Section', 'priority' => 90] + ['class' => \OCA\WorkflowEngine\Settings\Section::class, 'priority' => 90] ])); - $this->mapper->expects($this->once()) - ->method('getAdminSettingsCountFromDB') - ->will($this->returnValue([ - 'logging' => 1 - ])); + $this->url->expects($this->exactly(5)) + ->method('imagePath') + ->willReturnMap([ + ['settings', 'admin.svg', '1'], + ['core', 'actions/share.svg', '2'], + ['core', 'actions/password.svg', '3'], + ['core', 'actions/settings-dark.svg', '4'], + ['settings', 'help.svg', '5'], + ]); $this->assertEquals([ - 0 => [new Section('server', 'Server settings', 0)], - 5 => [new Section('sharing', 'Sharing', 0)], - 45 => [new Section('encryption', 'Encryption', 0)], - 90 => [new \OCA\LogReader\Settings\Section(\OC::$server->getL10N('logreader'))], - 98 => [new Section('additional', 'Additional settings', 0)], - 99 => [new Section('tips-tricks', 'Tips & tricks', 0)], + 0 => [new Section('server', 'Server settings', 0, '1')], + 5 => [new Section('sharing', 'Sharing', 0, '2')], + 45 => [new Section('encryption', 'Encryption', 0, '3')], + 90 => [\OC::$server->query(\OCA\WorkflowEngine\Settings\Section::class)], + 98 => [new Section('additional', 'Additional settings', 0, '4')], + 99 => [new Section('tips-tricks', 'Tips & tricks', 0, '5')], ], $this->manager->getAdminSections()); } @@ -161,19 +170,24 @@ class ManagerTest extends TestCase { $this->mapper->expects($this->once()) ->method('getAdminSectionsFromDB') ->will($this->returnValue([ - ['class' => '\OCA\LogReader\Settings\Section', 'priority' => 90] ])); - $this->mapper->expects($this->once()) - ->method('getAdminSettingsCountFromDB') - ->will($this->returnValue([])); + $this->url->expects($this->exactly(5)) + ->method('imagePath') + ->willReturnMap([ + ['settings', 'admin.svg', '1'], + ['core', 'actions/share.svg', '2'], + ['core', 'actions/password.svg', '3'], + ['core', 'actions/settings-dark.svg', '4'], + ['settings', 'help.svg', '5'], + ]); $this->assertEquals([ - 0 => [new Section('server', 'Server settings', 0)], - 5 => [new Section('sharing', 'Sharing', 0)], - 45 => [new Section('encryption', 'Encryption', 0)], - 98 => [new Section('additional', 'Additional settings', 0)], - 99 => [new Section('tips-tricks', 'Tips & tricks', 0)], + 0 => [new Section('server', 'Server settings', 0, '1')], + 5 => [new Section('sharing', 'Sharing', 0, '2')], + 45 => [new Section('encryption', 'Encryption', 0, '3')], + 98 => [new Section('additional', 'Additional settings', 0, '4')], + 99 => [new Section('tips-tricks', 'Tips & tricks', 0, '5')], ], $this->manager->getAdminSections()); } diff --git a/tests/lib/SetupTest.php b/tests/lib/SetupTest.php index a8389eaaf56..acbce938a25 100644 --- a/tests/lib/SetupTest.php +++ b/tests/lib/SetupTest.php @@ -55,16 +55,12 @@ class SetupTest extends \Test\TestCase { )); $this->setupClass ->expects($this->once()) - ->method('class_exists') - ->will($this->returnValue(true)); - $this->setupClass - ->expects($this->once()) ->method('is_callable') ->will($this->returnValue(false)); $this->setupClass ->expects($this->any()) ->method('getAvailableDbDriversForPdo') - ->will($this->returnValue([])); + ->will($this->returnValue(['sqlite'])); $result = $this->setupClass->getSupportedDatabases(); $expectedResult = array( 'sqlite' => 'SQLite' @@ -82,10 +78,6 @@ class SetupTest extends \Test\TestCase { )); $this->setupClass ->expects($this->any()) - ->method('class_exists') - ->will($this->returnValue(false)); - $this->setupClass - ->expects($this->any()) ->method('is_callable') ->will($this->returnValue(false)); $this->setupClass @@ -106,16 +98,12 @@ class SetupTest extends \Test\TestCase { )); $this->setupClass ->expects($this->any()) - ->method('class_exists') - ->will($this->returnValue(true)); - $this->setupClass - ->expects($this->any()) ->method('is_callable') ->will($this->returnValue(true)); $this->setupClass ->expects($this->any()) ->method('getAvailableDbDriversForPdo') - ->will($this->returnValue(['mysql', 'pgsql'])); + ->will($this->returnValue(['sqlite', 'mysql', 'pgsql'])); $result = $this->setupClass->getSupportedDatabases(); $expectedResult = array( 'sqlite' => 'SQLite', |