summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--CONTRIBUTING.md2
-rw-r--r--apps/admin_audit/appinfo/info.xml4
-rw-r--r--apps/comments/appinfo/info.xml4
-rw-r--r--apps/comments/l10n/bg_BG.js33
-rw-r--r--apps/comments/l10n/bg_BG.json33
-rw-r--r--apps/comments/l10n/cs_CZ.js8
-rw-r--r--apps/comments/l10n/cs_CZ.json8
-rw-r--r--apps/comments/l10n/sq.js2
-rw-r--r--apps/comments/l10n/sq.json2
-rw-r--r--apps/comments/lib/Activity/Provider.php2
-rw-r--r--apps/dav/appinfo/info.xml4
-rw-r--r--apps/dav/lib/CalDAV/Activity/Filter/Todo.php2
-rw-r--r--apps/dav/lib/CalDAV/CalendarHome.php7
-rw-r--r--apps/dav/lib/CalDAV/Schedule/Plugin.php59
-rw-r--r--apps/dav/lib/Connector/Sabre/FilesPlugin.php6
-rw-r--r--apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php6
-rw-r--r--apps/encryption/appinfo/info.xml4
-rw-r--r--apps/federatedfilesharing/appinfo/info.xml4
-rw-r--r--apps/federatedfilesharing/l10n/nb_NO.js1
-rw-r--r--apps/federatedfilesharing/l10n/nb_NO.json1
-rw-r--r--apps/federatedfilesharing/templates/settings-admin.php2
-rw-r--r--apps/federation/appinfo/info.xml4
-rw-r--r--apps/files/appinfo/info.xml4
-rw-r--r--apps/files/css/files.css8
-rw-r--r--apps/files/js/file-upload.js2
-rw-r--r--apps/files/l10n/bg_BG.js43
-rw-r--r--apps/files/l10n/bg_BG.json43
-rw-r--r--apps/files/l10n/de.js5
-rw-r--r--apps/files/l10n/de.json5
-rw-r--r--apps/files/l10n/de_DE.js5
-rw-r--r--apps/files/l10n/de_DE.json5
-rw-r--r--apps/files/l10n/fr.js5
-rw-r--r--apps/files/l10n/fr.json5
-rw-r--r--apps/files/l10n/hu_HU.js5
-rw-r--r--apps/files/l10n/hu_HU.json5
-rw-r--r--apps/files/l10n/it.js5
-rw-r--r--apps/files/l10n/it.json5
-rw-r--r--apps/files/l10n/nl.js5
-rw-r--r--apps/files/l10n/nl.json5
-rw-r--r--apps/files/l10n/pt_BR.js5
-rw-r--r--apps/files/l10n/pt_BR.json5
-rw-r--r--apps/files/l10n/ru.js5
-rw-r--r--apps/files/l10n/ru.json5
-rw-r--r--apps/files/lib/Activity/FavoriteProvider.php5
-rw-r--r--apps/files/lib/Activity/Provider.php5
-rw-r--r--apps/files_external/appinfo/info.xml4
-rw-r--r--apps/files_external/js/statusmanager.js6
-rw-r--r--apps/files_external/lib/Lib/Storage/SMB.php46
-rw-r--r--apps/files_sharing/appinfo/info.xml4
-rw-r--r--apps/files_sharing/l10n/es.js151
-rw-r--r--apps/files_sharing/l10n/es.json151
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Downloads.php2
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Groups.php2
-rw-r--r--apps/files_sharing/lib/Activity/Providers/PublicLinks.php2
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Users.php2
-rw-r--r--apps/files_sharing/lib/Controller/ShareController.php7
-rw-r--r--apps/files_sharing/lib/Scanner.php9
-rw-r--r--apps/files_sharing/lib/SharedMount.php40
-rw-r--r--apps/files_sharing/lib/SharedStorage.php3
-rw-r--r--apps/files_sharing/tests/SharedStorageTest.php28
-rw-r--r--apps/files_trashbin/appinfo/info.xml4
-rw-r--r--apps/files_versions/appinfo/info.xml4
-rw-r--r--apps/files_versions/l10n/bg_BG.js1
-rw-r--r--apps/files_versions/l10n/bg_BG.json1
-rw-r--r--apps/files_versions/l10n/lt_LT.js5
-rw-r--r--apps/files_versions/l10n/lt_LT.json5
-rw-r--r--apps/files_versions/l10n/ru.js1
-rw-r--r--apps/files_versions/l10n/ru.json1
-rw-r--r--apps/lookup_server_connector/appinfo/info.xml2
-rw-r--r--apps/provisioning_api/appinfo/info.xml4
-rw-r--r--apps/sharebymail/appinfo/info.xml4
-rw-r--r--apps/sharebymail/lib/Activity.php2
-rw-r--r--apps/systemtags/appinfo/info.xml4
-rw-r--r--apps/testing/appinfo/info.xml4
-rw-r--r--apps/theming/appinfo/info.xml4
-rw-r--r--apps/theming/lib/Controller/IconController.php3
-rw-r--r--apps/theming/lib/IconBuilder.php9
-rw-r--r--apps/twofactor_backupcodes/appinfo/info.xml4
-rw-r--r--apps/twofactor_backupcodes/l10n/fr.js2
-rw-r--r--apps/twofactor_backupcodes/l10n/fr.json2
-rw-r--r--apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php4
-rw-r--r--apps/updatenotification/appinfo/info.xml4
-rw-r--r--apps/updatenotification/l10n/de.js1
-rw-r--r--apps/updatenotification/l10n/de.json1
-rw-r--r--apps/updatenotification/l10n/de_DE.js1
-rw-r--r--apps/updatenotification/l10n/de_DE.json1
-rw-r--r--apps/updatenotification/l10n/es.js1
-rw-r--r--apps/updatenotification/l10n/es.json1
-rw-r--r--apps/updatenotification/l10n/fr.js1
-rw-r--r--apps/updatenotification/l10n/fr.json1
-rw-r--r--apps/updatenotification/l10n/hu_HU.js1
-rw-r--r--apps/updatenotification/l10n/hu_HU.json1
-rw-r--r--apps/updatenotification/l10n/it.js1
-rw-r--r--apps/updatenotification/l10n/it.json1
-rw-r--r--apps/updatenotification/l10n/nl.js1
-rw-r--r--apps/updatenotification/l10n/nl.json1
-rw-r--r--apps/updatenotification/l10n/pt_BR.js1
-rw-r--r--apps/updatenotification/l10n/pt_BR.json1
-rw-r--r--apps/user_ldap/appinfo/info.xml4
-rw-r--r--apps/user_ldap/l10n/es.js7
-rw-r--r--apps/user_ldap/l10n/es.json7
-rw-r--r--apps/user_ldap/l10n/fr.js2
-rw-r--r--apps/user_ldap/l10n/fr.json2
-rw-r--r--apps/workflowengine/appinfo/info.xml4
-rw-r--r--apps/workflowengine/l10n/bg_BG.js71
-rw-r--r--apps/workflowengine/l10n/bg_BG.json69
-rw-r--r--build/autoloaderchecker.sh1
-rw-r--r--build/integration/data/bjoern.vcf51
-rw-r--r--build/integration/features/bootstrap/CardDavContext.php111
-rw-r--r--build/integration/features/carddav.feature30
-rw-r--r--build/integration/features/webdav-related.feature20
-rw-r--r--config/config.sample.php2
-rw-r--r--core/Controller/LoginController.php9
-rw-r--r--core/css/apps.css4
-rw-r--r--core/css/systemtags.css12
-rw-r--r--core/css/tooltip.css2
-rw-r--r--core/js/oc-dialogs.js16
-rw-r--r--core/js/sharedialogshareelistview.js199
-rw-r--r--core/js/shareitemmodel.js26
-rw-r--r--core/js/visitortimezone.js2
-rw-r--r--core/l10n/bg_BG.js332
-rw-r--r--core/l10n/bg_BG.json330
-rw-r--r--core/l10n/en_GB.js13
-rw-r--r--core/l10n/en_GB.json13
-rw-r--r--core/l10n/ru.js2
-rw-r--r--core/l10n/ru.json2
-rw-r--r--core/templates/login.php2
-rw-r--r--lib/composer/autoload.php2
-rw-r--r--lib/composer/composer/autoload_classmap.php30
-rw-r--r--lib/composer/composer/autoload_real.php2
-rw-r--r--lib/composer/composer/autoload_static.php30
-rw-r--r--lib/private/App/AppStore/Fetcher/AppFetcher.php2
-rw-r--r--lib/private/AppFramework/Db/Db.php314
-rw-r--r--lib/private/AppFramework/DependencyInjection/DIContainer.php4
-rw-r--r--lib/private/AppFramework/Middleware/Security/Exceptions/NotAdminException.php4
-rw-r--r--lib/private/Files/Cache/Cache.php7
-rw-r--r--lib/private/Files/Config/UserMountCache.php7
-rw-r--r--lib/private/Installer.php2
-rw-r--r--lib/private/Repair.php2
-rw-r--r--lib/private/Repair/NC11/FixMountStorages.php78
-rw-r--r--lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php (renamed from lib/private/Repair/NC11/MoveAvatarBackgroundJob.php)0
-rw-r--r--lib/private/Security/CSP/ContentSecurityPolicyNonceManager.php2
-rw-r--r--lib/private/Server.php14
-rw-r--r--lib/private/Setup/MySQL.php4
-rw-r--r--lib/private/Setup/PostgreSQL.php2
-rw-r--r--lib/private/Share20/DefaultShareProvider.php1
-rw-r--r--lib/private/Share20/Manager.php22
-rw-r--r--lib/private/URLGenerator.php2
-rw-r--r--lib/private/Updater.php6
-rw-r--r--lib/private/legacy/app.php11
-rw-r--r--lib/private/legacy/defaults.php2
-rw-r--r--lib/public/AppFramework/Db/Mapper.php16
-rw-r--r--lib/public/IDb.php54
-rw-r--r--lib/public/IServerContainer.php8
-rw-r--r--lib/public/RichObjectStrings/Definitions.php2
-rw-r--r--settings/Controller/AppSettingsController.php9
-rw-r--r--settings/Controller/PersonalController.php1
-rw-r--r--settings/css/settings.css6
-rw-r--r--settings/js/apps.js2
-rw-r--r--settings/js/authtoken_view.js10
-rw-r--r--settings/js/personal.js37
-rw-r--r--settings/l10n/bg_BG.js9
-rw-r--r--settings/l10n/bg_BG.json9
-rw-r--r--settings/l10n/fr.js4
-rw-r--r--settings/l10n/fr.json4
-rw-r--r--settings/l10n/hu_HU.js2
-rw-r--r--settings/l10n/hu_HU.json2
-rw-r--r--settings/l10n/lt_LT.js70
-rw-r--r--settings/l10n/lt_LT.json70
-rw-r--r--settings/l10n/ru.js1
-rw-r--r--settings/l10n/ru.json1
-rw-r--r--settings/personal.php2
-rw-r--r--settings/templates/apps.php4
-rw-r--r--tests/Core/Controller/LoginControllerTest.php15
-rw-r--r--tests/lib/App/AppStore/Fetcher/AppFetcherTest.php11
-rw-r--r--tests/lib/InstallerTest.php4
-rw-r--r--tests/lib/Repair/NC11/FixMountStoragesTest.php132
-rw-r--r--tests/lib/ServerTest.php2
-rw-r--r--themes/example/defaults.php2
-rw-r--r--version.php6
181 files changed, 2520 insertions, 807 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3228b2bcbfa..3f61c17c268 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,7 @@
ChangeLog
=========
-NC 11 (????-??-??)
+NC 11 (2016-12-13)
------------------
* PHP 5.4 and 5.5 no longer supported
* PHP 7.1 support
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 7bdd79b7097..2ed7920a830 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -58,7 +58,7 @@ like `git config --global alias.ci 'commit -s'`. Now you can commit with
In case you are not sure how to add or update the license header correctly please have a look at [contribute/HowToApplyALicense.md][applyalicense]
-[devmanual]: https://docs.nextcloud.org/server/10/developer_manual/
+[devmanual]: https://docs.nextcloud.org/server/11/developer_manual/
[dcofile]: https://github.com/nextcloud/server/blob/master/contribute/developer-certificate-of-origin
[applyalicense]: https://github.com/nextcloud/server/blob/master/contribute/HowToApplyALicense.md
diff --git a/apps/admin_audit/appinfo/info.xml b/apps/admin_audit/appinfo/info.xml
index 14bce64aabc..98862554090 100644
--- a/apps/admin_audit/appinfo/info.xml
+++ b/apps/admin_audit/appinfo/info.xml
@@ -7,9 +7,9 @@
</description>
<licence>AGPL</licence>
<author>Nextcloud</author>
- <version>1.1.0</version>
+ <version>1.2.0</version>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<types>
<logging/>
diff --git a/apps/comments/appinfo/info.xml b/apps/comments/appinfo/info.xml
index 9d5409a2d62..eb711c4b569 100644
--- a/apps/comments/appinfo/info.xml
+++ b/apps/comments/appinfo/info.xml
@@ -6,9 +6,9 @@
<licence>AGPL</licence>
<author>Arthur Schiwon, Vincent Petry</author>
<default_enable/>
- <version>1.1.0</version>
+ <version>1.2.0</version>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<types>
<logging/>
diff --git a/apps/comments/l10n/bg_BG.js b/apps/comments/l10n/bg_BG.js
index ca60bb48bf6..6aa5a63fa28 100644
--- a/apps/comments/l10n/bg_BG.js
+++ b/apps/comments/l10n/bg_BG.js
@@ -1,20 +1,39 @@
OC.L10N.register(
"comments",
{
- "Type in a new comment..." : "Напиши нов коментар...",
+ "Comments" : "Коментари",
+ "Unknown user" : "Непознат потребител",
+ "New comment …" : "Нов коментар...",
"Delete comment" : "Изтрий коментар",
"Post" : "Публикация",
"Cancel" : "Отказ",
"Edit comment" : "Редактирай коментра",
"[Deleted user]" : "[Изтрит потребител]",
- "Comments" : "Коментари",
- "No other comments available" : "Няма други коментари",
- "More comments..." : "Още коментари...",
+ "No comments yet, start the conversation!" : "Все-още няма коментари, започни разговор!",
+ "More comments …" : "Още коментари...",
"Save" : "Запазване",
"Allowed characters {count} of {max}" : "Позволени символи {count} от {max}",
- "{count} unread comments" : "{count} нечетени коментари",
+ "Error occurred while retrieving comment with id {id}" : "Възникна грешка по време на извличане на коментар с код {id}",
+ "Error occurred while updating comment with id {id}" : "Възникна грешка по време на обновяване на коментар с код {id}",
+ "Error occurred while posting comment" : "Възникна грешка по време на изпращане на коментар",
+ "_%n unread comment_::_%n unread comments_" : ["%n непрочетен коментар","%n непрочетени коментари"],
"Comment" : "Коментар",
- "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Коментари</strong> на файлове <em>(винаги изписвани в stream-а)</em>",
- "You commented" : "Вие коментирахте"
+ "You commented" : "Вие коментирахте",
+ "%1$s commented" : "%1$s коментира",
+ "{author} commented" : "{author} коментира",
+ "You commented on %1$s" : "Ти коментира за %1$s",
+ "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}”",
+ "Type in a new comment..." : "Напиши нов коментар...",
+ "No other comments available" : "Няма други коментари",
+ "More comments..." : "Още коментари...",
+ "{count} unread comments" : "{count} непрочетени коментари",
+ "You commented on %2$s" : "Ти коментира за %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/comments/l10n/bg_BG.json b/apps/comments/l10n/bg_BG.json
index 2b79857f6bb..dc3ed5416a9 100644
--- a/apps/comments/l10n/bg_BG.json
+++ b/apps/comments/l10n/bg_BG.json
@@ -1,18 +1,37 @@
{ "translations": {
- "Type in a new comment..." : "Напиши нов коментар...",
+ "Comments" : "Коментари",
+ "Unknown user" : "Непознат потребител",
+ "New comment …" : "Нов коментар...",
"Delete comment" : "Изтрий коментар",
"Post" : "Публикация",
"Cancel" : "Отказ",
"Edit comment" : "Редактирай коментра",
"[Deleted user]" : "[Изтрит потребител]",
- "Comments" : "Коментари",
- "No other comments available" : "Няма други коментари",
- "More comments..." : "Още коментари...",
+ "No comments yet, start the conversation!" : "Все-още няма коментари, започни разговор!",
+ "More comments …" : "Още коментари...",
"Save" : "Запазване",
"Allowed characters {count} of {max}" : "Позволени символи {count} от {max}",
- "{count} unread comments" : "{count} нечетени коментари",
+ "Error occurred while retrieving comment with id {id}" : "Възникна грешка по време на извличане на коментар с код {id}",
+ "Error occurred while updating comment with id {id}" : "Възникна грешка по време на обновяване на коментар с код {id}",
+ "Error occurred while posting comment" : "Възникна грешка по време на изпращане на коментар",
+ "_%n unread comment_::_%n unread comments_" : ["%n непрочетен коментар","%n непрочетени коментари"],
"Comment" : "Коментар",
- "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Коментари</strong> на файлове <em>(винаги изписвани в stream-а)</em>",
- "You commented" : "Вие коментирахте"
+ "You commented" : "Вие коментирахте",
+ "%1$s commented" : "%1$s коментира",
+ "{author} commented" : "{author} коментира",
+ "You commented on %1$s" : "Ти коментира за %1$s",
+ "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}”",
+ "Type in a new comment..." : "Напиши нов коментар...",
+ "No other comments available" : "Няма други коментари",
+ "More comments..." : "Още коментари...",
+ "{count} unread comments" : "{count} непрочетени коментари",
+ "You commented on %2$s" : "Ти коментира за %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/comments/l10n/cs_CZ.js b/apps/comments/l10n/cs_CZ.js
index 17231a3fa45..da14fcf91b8 100644
--- a/apps/comments/l10n/cs_CZ.js
+++ b/apps/comments/l10n/cs_CZ.js
@@ -20,8 +20,16 @@ OC.L10N.register(
"Comment" : "Komentář",
"You commented" : "Okomentoval(a) jsi",
"%1$s commented" : "%1$s okomentován",
+ "{author} commented" : "{author} okomentoval(a)",
+ "You commented on %1$s" : "Okomentoval(a) jste %1$s",
+ "You commented on {file}" : "Okomentoval(a) jste {file}",
"%1$s commented on %2$s" : "%1$s okomentoval %2$s",
+ "{author} commented on {file}" : "{author} okomentoval(a) {file}",
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "A (now) deleted user mentioned you in a comment on “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Nyní již smazaný uživatel vás zmínil v komentáři u \"{file}\"",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s vás zmínil(a) v komentáři u %2$s",
+ "{user} mentioned you in a comment on “{file}”" : "{user} vás zmínil v komentáři u “{file}”",
"Type in a new comment..." : "Zadat nový komentář...",
"No other comments available" : "Nejsou dostupné žádné další komentáře",
"More comments..." : "Více komentářů...",
diff --git a/apps/comments/l10n/cs_CZ.json b/apps/comments/l10n/cs_CZ.json
index a1435f9b3bf..1f1a84b6c09 100644
--- a/apps/comments/l10n/cs_CZ.json
+++ b/apps/comments/l10n/cs_CZ.json
@@ -18,8 +18,16 @@
"Comment" : "Komentář",
"You commented" : "Okomentoval(a) jsi",
"%1$s commented" : "%1$s okomentován",
+ "{author} commented" : "{author} okomentoval(a)",
+ "You commented on %1$s" : "Okomentoval(a) jste %1$s",
+ "You commented on {file}" : "Okomentoval(a) jste {file}",
"%1$s commented on %2$s" : "%1$s okomentoval %2$s",
+ "{author} commented on {file}" : "{author} okomentoval(a) {file}",
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "A (now) deleted user mentioned you in a comment on “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Nyní již smazaný uživatel vás zmínil v komentáři u \"{file}\"",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s vás zmínil(a) v komentáři u %2$s",
+ "{user} mentioned you in a comment on “{file}”" : "{user} vás zmínil v komentáři u “{file}”",
"Type in a new comment..." : "Zadat nový komentář...",
"No other comments available" : "Nejsou dostupné žádné další komentáře",
"More comments..." : "Více komentářů...",
diff --git a/apps/comments/l10n/sq.js b/apps/comments/l10n/sq.js
index 2297b7dd768..9691305f096 100644
--- a/apps/comments/l10n/sq.js
+++ b/apps/comments/l10n/sq.js
@@ -24,7 +24,7 @@ OC.L10N.register(
"You commented on {file}" : "Ju komentuat në {file}",
"%1$s commented on %2$s" : "%1$s komentoi te %2$s",
"{author} commented on {file}" : "{autori} komentoj në {file}",
- "<strong>Comments</strong> for files" : "<strong>Komente</strong> për file-et",
+ "<strong>Comments</strong> for files" : "<strong>Komente</strong> për skedarët",
"Type in a new comment..." : "Shtypni një koment të ri…",
"No other comments available" : "S’ka komente të tjera",
"More comments..." : "Më tepër komente…",
diff --git a/apps/comments/l10n/sq.json b/apps/comments/l10n/sq.json
index 98d68f922a1..2d7c900680e 100644
--- a/apps/comments/l10n/sq.json
+++ b/apps/comments/l10n/sq.json
@@ -22,7 +22,7 @@
"You commented on {file}" : "Ju komentuat në {file}",
"%1$s commented on %2$s" : "%1$s komentoi te %2$s",
"{author} commented on {file}" : "{autori} komentoj në {file}",
- "<strong>Comments</strong> for files" : "<strong>Komente</strong> për file-et",
+ "<strong>Comments</strong> for files" : "<strong>Komente</strong> për skedarët",
"Type in a new comment..." : "Shtypni një koment të ri…",
"No other comments available" : "S’ka komente të tjera",
"More comments..." : "Më tepër komente…",
diff --git a/apps/comments/lib/Activity/Provider.php b/apps/comments/lib/Activity/Provider.php
index 170b20d7c27..c55982827b3 100644
--- a/apps/comments/lib/Activity/Provider.php
+++ b/apps/comments/lib/Activity/Provider.php
@@ -206,7 +206,7 @@ class Provider implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/dav/appinfo/info.xml b/apps/dav/appinfo/info.xml
index f362c882f97..31341a80a0b 100644
--- a/apps/dav/appinfo/info.xml
+++ b/apps/dav/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>WebDAV endpoint</description>
<licence>AGPL</licence>
<author>owncloud.org</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<default_enable/>
<types>
<filesystem/>
@@ -15,7 +15,7 @@
<webdav>appinfo/v1/publicwebdav.php</webdav>
</public>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<background-jobs>
<job>OCA\DAV\CardDAV\SyncJob</job>
diff --git a/apps/dav/lib/CalDAV/Activity/Filter/Todo.php b/apps/dav/lib/CalDAV/Activity/Filter/Todo.php
index 42ee0740851..312bb6c472d 100644
--- a/apps/dav/lib/CalDAV/Activity/Filter/Todo.php
+++ b/apps/dav/lib/CalDAV/Activity/Filter/Todo.php
@@ -79,7 +79,7 @@ class Todo implements IFilter {
* @since 11.0.0
*/
public function filterTypes(array $types) {
- return array_intersect(['calendar_todo'], $types);
+ return array_intersect(['calendar_todos'], $types);
}
/**
diff --git a/apps/dav/lib/CalDAV/CalendarHome.php b/apps/dav/lib/CalDAV/CalendarHome.php
index f84b0c863c6..7320754e6df 100644
--- a/apps/dav/lib/CalDAV/CalendarHome.php
+++ b/apps/dav/lib/CalDAV/CalendarHome.php
@@ -42,6 +42,13 @@ class CalendarHome extends \Sabre\CalDAV\CalendarHome {
}
/**
+ * @return BackendInterface
+ */
+ public function getCalDAVBackend() {
+ return $this->caldavBackend;
+ }
+
+ /**
* @inheritdoc
*/
function getChildren() {
diff --git a/apps/dav/lib/CalDAV/Schedule/Plugin.php b/apps/dav/lib/CalDAV/Schedule/Plugin.php
index ad55a2756b0..34df666637c 100644
--- a/apps/dav/lib/CalDAV/Schedule/Plugin.php
+++ b/apps/dav/lib/CalDAV/Schedule/Plugin.php
@@ -1,7 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
@@ -22,9 +24,28 @@
*/
namespace OCA\DAV\CalDAV\Schedule;
+use OCA\DAV\CalDAV\CalDavBackend;
+use OCA\DAV\CalDAV\CalendarHome;
+use Sabre\DAV\INode;
+use Sabre\DAV\PropFind;
+use Sabre\DAV\Server;
+use Sabre\DAV\Xml\Property\LocalHref;
+use Sabre\DAVACL\IPrincipal;
+
class Plugin extends \Sabre\CalDAV\Schedule\Plugin {
/**
+ * Initializes the plugin
+ *
+ * @param Server $server
+ * @return void
+ */
+ function initialize(Server $server) {
+ parent::initialize($server);
+ $server->on('propFind', [$this, 'propFindDefaultCalendarUrl'], 90);
+ }
+
+ /**
* Returns a list of addresses that are associated with a principal.
*
* @param string $principal
@@ -39,4 +60,42 @@ class Plugin extends \Sabre\CalDAV\Schedule\Plugin {
return $result;
}
+
+ /**
+ * Always use the personal calendar as target for scheduled events
+ *
+ * @param PropFind $propFind
+ * @param INode $node
+ * @return void
+ */
+ function propFindDefaultCalendarUrl(PropFind $propFind, INode $node) {
+ if ($node instanceof IPrincipal) {
+ $propFind->handle('{' . self::NS_CALDAV . '}schedule-default-calendar-URL', function() use ($node) {
+ /** @var \OCA\DAV\CalDAV\Plugin $caldavPlugin */
+ $caldavPlugin = $this->server->getPlugin('caldav');
+ $principalUrl = $node->getPrincipalUrl();
+
+ $calendarHomePath = $caldavPlugin->getCalendarHomeForPrincipal($principalUrl);
+
+ if (!$calendarHomePath) {
+ return null;
+ }
+
+ /** @var CalendarHome $calendarHome */
+ $calendarHome = $this->server->tree->getNodeForPath($calendarHomePath);
+ if (!$calendarHome->childExists(CalDavBackend::PERSONAL_CALENDAR_URI)) {
+ $calendarHome->getCalDAVBackend()->createCalendar($principalUrl, CalDavBackend::PERSONAL_CALENDAR_URI, [
+ '{DAV:}displayname' => CalDavBackend::PERSONAL_CALENDAR_NAME,
+ ]);
+ }
+
+ $result = $this->server->getPropertiesForPath($calendarHomePath . '/' . CalDavBackend::PERSONAL_CALENDAR_URI, [], 1);
+ if (empty($result)) {
+ return null;
+ }
+
+ return new LocalHref($result[0]['href']);
+ });
+ }
+ }
}
diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php
index 59b326243ee..54d91db5c06 100644
--- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php
@@ -247,8 +247,10 @@ class FilesPlugin extends ServerPlugin {
$node = $this->tree->getNodeForPath($request->getPath());
if (!($node instanceof IFile)) return;
- // adds a 'Content-Disposition: attachment' header
- if ($this->downloadAttachment) {
+ // adds a 'Content-Disposition: attachment' header in case no disposition
+ // header has been set before
+ if ($this->downloadAttachment &&
+ $response->getHeader('Content-Disposition') === null) {
$filename = $node->getName();
if ($this->request->isUserAgent(
[
diff --git a/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php b/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php
index 54a5a6f5f9d..3c6ac2a5c55 100644
--- a/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php
+++ b/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php
@@ -67,9 +67,9 @@ class TodoTest extends TestCase {
public function dataFilterTypes() {
return [
[[], []],
- [['calendar_todo'], ['calendar_todo']],
- [['calendar', 'calendar_event', 'calendar_todo'], ['calendar_todo']],
- [['calendar', 'calendar_todo', 'files'], ['calendar_todo']],
+ [['calendar_todos'], ['calendar_todos']],
+ [['calendar', 'calendar_event', 'calendar_todos'], ['calendar_todos']],
+ [['calendar', 'calendar_todos', 'files'], ['calendar_todos']],
];
}
diff --git a/apps/encryption/appinfo/info.xml b/apps/encryption/appinfo/info.xml
index 0bb3efebf5f..1e63ca5c471 100644
--- a/apps/encryption/appinfo/info.xml
+++ b/apps/encryption/appinfo/info.xml
@@ -19,13 +19,13 @@
<admin>admin-encryption</admin>
</documentation>
<rememberlogin>false</rememberlogin>
- <version>1.4.1</version>
+ <version>1.5.0</version>
<types>
<filesystem/>
</types>
<dependencies>
<lib>openssl</lib>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<settings>
<admin>OCA\Encryption\Settings\Admin</admin>
diff --git a/apps/federatedfilesharing/appinfo/info.xml b/apps/federatedfilesharing/appinfo/info.xml
index 6a414496f37..dc5cbffaa8d 100644
--- a/apps/federatedfilesharing/appinfo/info.xml
+++ b/apps/federatedfilesharing/appinfo/info.xml
@@ -5,11 +5,11 @@
<description>Provide federated file sharing across servers</description>
<licence>AGPL</licence>
<author>Bjoern Schiessle, Roeland Jago Douma</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<namespace>FederatedFileSharing</namespace>
<category>other</category>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<settings>
<admin>OCA\FederatedFileSharing\Settings\Admin</admin>
diff --git a/apps/federatedfilesharing/l10n/nb_NO.js b/apps/federatedfilesharing/l10n/nb_NO.js
index 92885f7e842..a2a0bcbdc0c 100644
--- a/apps/federatedfilesharing/l10n/nb_NO.js
+++ b/apps/federatedfilesharing/l10n/nb_NO.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Remote share password" : "Passord for ekstern ressurs",
"Cancel" : "Avbryt",
"Add remote share" : "Legg til ekstern ressurs",
+ "Copy" : "Kopier",
"Copied!" : "Kopiert!",
"Not supported!" : "Ikke støttet!",
"Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere",
diff --git a/apps/federatedfilesharing/l10n/nb_NO.json b/apps/federatedfilesharing/l10n/nb_NO.json
index 4b6d5d9222e..ab5cfe57fbf 100644
--- a/apps/federatedfilesharing/l10n/nb_NO.json
+++ b/apps/federatedfilesharing/l10n/nb_NO.json
@@ -5,6 +5,7 @@
"Remote share password" : "Passord for ekstern ressurs",
"Cancel" : "Avbryt",
"Add remote share" : "Legg til ekstern ressurs",
+ "Copy" : "Kopier",
"Copied!" : "Kopiert!",
"Not supported!" : "Ikke støttet!",
"Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere",
diff --git a/apps/federatedfilesharing/templates/settings-admin.php b/apps/federatedfilesharing/templates/settings-admin.php
index 0670553e061..d71ce20d13c 100644
--- a/apps/federatedfilesharing/templates/settings-admin.php
+++ b/apps/federatedfilesharing/templates/settings-admin.php
@@ -29,7 +29,7 @@ script('federatedfilesharing', 'settings-admin');
<input type="checkbox" name="lookupServerEnabled" id="lookupServerEnabled" class="checkbox"
value="1" <?php if ($_['lookupServerEnabled']) print_unescaped('checked="checked"'); ?> />
<label for="lookupServerEnabled">
- <?php p($l->t('Enable lookups on lookup server'));?>
+ <?php p($l->t('Search global and public address book for users'));?>
</label><br/>
</p>
</div>
diff --git a/apps/federation/appinfo/info.xml b/apps/federation/appinfo/info.xml
index a5eeb133d9e..2d15f20485a 100644
--- a/apps/federation/appinfo/info.xml
+++ b/apps/federation/appinfo/info.xml
@@ -5,11 +5,11 @@
<description>Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing.</description>
<licence>AGPL</licence>
<author>Bjoern Schiessle</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<namespace>Federation</namespace>
<category>other</category>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<default_enable/>
<types>
diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml
index 35e58b7202e..a25c043f332 100644
--- a/apps/files/appinfo/info.xml
+++ b/apps/files/appinfo/info.xml
@@ -6,12 +6,12 @@
<licence>AGPL</licence>
<author>Robin Appelman, Vincent Petry</author>
<default_enable/>
- <version>1.6.1</version>
+ <version>1.7.0</version>
<types>
<filesystem/>
</types>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<documentation>
<user>user-files</user>
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 52ae4aaa6ad..7956ef5c6ae 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -549,14 +549,6 @@ html.ie8 #fileList tr.selected td.filename>.selectCheckBox {
border-top-right-radius: 3px;
min-width: 100px;
}
-.bubble:after,
-#app-navigation .app-navigation-entry-menu:after {
- right: 12px;
-}
-.bubble:before,
-#app-navigation .app-navigation-entry-menu:before {
- right: 6px;
-}
/* force show the loading icon, not only on hover */
#fileList .icon-loading-small {
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 8bcaa2e24aa..b3a59b54241 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -151,7 +151,7 @@ OC.FileUpload.prototype = {
/**
* Returns whether the upload is in progress
*
- * @return {bool}
+ * @return {boolean}
*/
isPending: function() {
return this.data.state() === 'pending';
diff --git a/apps/files/l10n/bg_BG.js b/apps/files/l10n/bg_BG.js
index 2e49223c297..e46244321a9 100644
--- a/apps/files/l10n/bg_BG.js
+++ b/apps/files/l10n/bg_BG.js
@@ -6,6 +6,8 @@ OC.L10N.register(
"Unknown error" : "Неизвестна грешка",
"Files" : "Файлове",
"All files" : "Всички файлове",
+ "Recent" : "Скорошен",
+ "File could not be found" : "Файлът не може да бъде открит",
"Home" : "Домашен",
"Close" : "Затвори",
"Favorites" : "Любими",
@@ -13,16 +15,25 @@ OC.L10N.register(
"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}",
+ "Target folder \"{dir}\" does not exist any more" : "Целева папка \"{dir}\" не съществува вече",
"Not enough free space" : "Няма достатъчно свободно място",
"Uploading..." : "Качване...",
"..." : "...",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} час{plural_s} остават",
+ "{hours}:{minutes}h" : "{hours}:{minutes}ч",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} минут{plural_s} остават",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}м",
+ "{seconds} second{plural_s} left" : "{seconds} секунд{plural_s} остават",
+ "{seconds}s" : "{seconds}и",
"Any moment now..." : "Всеки момент...",
"Soon..." : "Скоро...",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} от {totalSize} ({bitrate})",
"File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването.",
"Actions" : "Действия",
"Download" : "Изтегли",
"Rename" : "Преименуване",
"Move" : "Преместване",
+ "Target folder" : "Целева папка",
"Delete" : "Изтриване",
"Disconnect storage" : "Извади хранилището",
"Unshare" : "Прекратяване на споделяне",
@@ -42,6 +53,7 @@ OC.L10N.register(
"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" : "Променен на",
@@ -59,23 +71,53 @@ OC.L10N.register(
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Хранилището на {owner} е почти запълнено ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Вашето хранилище е почти запълнено ({usedSpacePercent}%).",
"_matches '{filter}'_::_match '{filter}'_" : ["пасва на '{filter}'","пасват на '{filter}'\n "],
+ "View in folder" : "Преглед в папка",
"Path" : "Път",
"_%n byte_::_%n bytes_" : ["%n байт","%n байта"],
"Favorited" : "Отбелязано в любими",
"Favorite" : "Любими",
+ "Copy local link" : "Копиране на локална връзка",
"Folder" : "Папка",
"New folder" : "Нова папка",
"Upload" : "Качване",
"An error occurred while trying to update the tags" : "Възникна грешка при опита за промяна на етикети",
+ "Added to favorites" : "Добавено към предпочитани",
+ "Removed from favorites" : "Премахнато от предпочитани",
+ "You added {file} to your favorites" : "Добавихте {file} към предпочитани",
+ "You removed {file} from your favorites" : "Махнахте {file} от вашите предпочитания",
+ "File changes" : "Файлови промени",
+ "Created by {user}" : "Създаден от {user}",
+ "Changed by {user}" : "Променен от {user}",
+ "Deleted by {user}" : "Изтрит от {user}",
+ "Restored by {user}" : "Възстановен от {user}",
+ "Renamed by {user}" : "Преименуван от {user}",
+ "Moved by {user}" : "Преместен от {user}",
+ "You created {file}" : "Вие създадохте {file}",
+ "{user} created {file}" : "{user} създаде {file}",
+ "{file} was created in a public folder" : "{file} беше създаден в публична папка",
+ "You changed {file}" : "Променихте {file}",
+ "{user} changed {file}" : "{user} промени {file}",
+ "You deleted {file}" : "Вие изтрихте {file}",
+ "{user} deleted {file}" : "{user} изтри {file}",
+ "You restored {file}" : "Възстановихте {file}",
+ "{user} restored {file}" : "{user} възстанови {file}",
+ "You renamed {oldfile} to {newfile}" : "Преименувахте {oldfile} на {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} преименува {oldfile} на {newfile}",
+ "You moved {oldfile} to {newfile}" : "Преместихте {oldfile} в {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} премести {oldfile} в {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Файл беше добавен или премахнат от <strong>предпочитанията</strong> ви",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "<strong>Промяна</strong> или <strong>преименуване</strong> на файл / папка",
"A new file or folder has been <strong>created</strong>" : "<strong>Създаване</strong> на нов файл / папка",
+ "A new file or folder has been <strong>deleted</strong>" : "Нов файл или папка беше <strong>изтрит/а</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Изпращай известия само при създаване / промяна на <strong>любими файлове</strong> <em>(Само за потока)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "Нов файл или папка беше <strong>възстановен/а</strong>",
"Upload (max. %s)" : "Качи (макс. %s)",
"File handling" : "Операция с файла",
"Maximum upload size" : "Максимален размер",
"max. possible: " : "максимално:",
"Save" : "Запис",
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Ако ползвате PHP-FPM прилагането на една промяна може да отнеме 5 минути.",
+ "Missing permissions to edit from here." : "Липсва разрешение за редакция от тук.",
"Settings" : "Настройки",
"Show hidden files" : "Показвай и скрити файлове",
"WebDAV" : "WebDAV",
@@ -115,6 +157,7 @@ OC.L10N.register(
"Error uploading file \"{fileName}\": {message}" : "Грешка при качването на файла \"{fileName}\": {message}",
"Could not get result from server." : "Не се получи резултат от сървърът.",
"No entries in this folder match '{filter}'" : "Нищо в тази папка не пасва на '{filter}'",
+ "Local link" : "Локална връзка",
"{newname} already exists" : "{newname} вече съществува",
"A file or folder has been <strong>changed</strong>" : "<strong>Промяна</strong> на файл / папка",
"A file or folder has been <strong>deleted</strong>" : "<strong>Изтриване</strong> на файл / папка",
diff --git a/apps/files/l10n/bg_BG.json b/apps/files/l10n/bg_BG.json
index 953a095ec08..89837eeedc5 100644
--- a/apps/files/l10n/bg_BG.json
+++ b/apps/files/l10n/bg_BG.json
@@ -4,6 +4,8 @@
"Unknown error" : "Неизвестна грешка",
"Files" : "Файлове",
"All files" : "Всички файлове",
+ "Recent" : "Скорошен",
+ "File could not be found" : "Файлът не може да бъде открит",
"Home" : "Домашен",
"Close" : "Затвори",
"Favorites" : "Любими",
@@ -11,16 +13,25 @@
"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}",
+ "Target folder \"{dir}\" does not exist any more" : "Целева папка \"{dir}\" не съществува вече",
"Not enough free space" : "Няма достатъчно свободно място",
"Uploading..." : "Качване...",
"..." : "...",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} час{plural_s} остават",
+ "{hours}:{minutes}h" : "{hours}:{minutes}ч",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} минут{plural_s} остават",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}м",
+ "{seconds} second{plural_s} left" : "{seconds} секунд{plural_s} остават",
+ "{seconds}s" : "{seconds}и",
"Any moment now..." : "Всеки момент...",
"Soon..." : "Скоро...",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} от {totalSize} ({bitrate})",
"File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването.",
"Actions" : "Действия",
"Download" : "Изтегли",
"Rename" : "Преименуване",
"Move" : "Преместване",
+ "Target folder" : "Целева папка",
"Delete" : "Изтриване",
"Disconnect storage" : "Извади хранилището",
"Unshare" : "Прекратяване на споделяне",
@@ -40,6 +51,7 @@
"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" : "Променен на",
@@ -57,23 +69,53 @@
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Хранилището на {owner} е почти запълнено ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Вашето хранилище е почти запълнено ({usedSpacePercent}%).",
"_matches '{filter}'_::_match '{filter}'_" : ["пасва на '{filter}'","пасват на '{filter}'\n "],
+ "View in folder" : "Преглед в папка",
"Path" : "Път",
"_%n byte_::_%n bytes_" : ["%n байт","%n байта"],
"Favorited" : "Отбелязано в любими",
"Favorite" : "Любими",
+ "Copy local link" : "Копиране на локална връзка",
"Folder" : "Папка",
"New folder" : "Нова папка",
"Upload" : "Качване",
"An error occurred while trying to update the tags" : "Възникна грешка при опита за промяна на етикети",
+ "Added to favorites" : "Добавено към предпочитани",
+ "Removed from favorites" : "Премахнато от предпочитани",
+ "You added {file} to your favorites" : "Добавихте {file} към предпочитани",
+ "You removed {file} from your favorites" : "Махнахте {file} от вашите предпочитания",
+ "File changes" : "Файлови промени",
+ "Created by {user}" : "Създаден от {user}",
+ "Changed by {user}" : "Променен от {user}",
+ "Deleted by {user}" : "Изтрит от {user}",
+ "Restored by {user}" : "Възстановен от {user}",
+ "Renamed by {user}" : "Преименуван от {user}",
+ "Moved by {user}" : "Преместен от {user}",
+ "You created {file}" : "Вие създадохте {file}",
+ "{user} created {file}" : "{user} създаде {file}",
+ "{file} was created in a public folder" : "{file} беше създаден в публична папка",
+ "You changed {file}" : "Променихте {file}",
+ "{user} changed {file}" : "{user} промени {file}",
+ "You deleted {file}" : "Вие изтрихте {file}",
+ "{user} deleted {file}" : "{user} изтри {file}",
+ "You restored {file}" : "Възстановихте {file}",
+ "{user} restored {file}" : "{user} възстанови {file}",
+ "You renamed {oldfile} to {newfile}" : "Преименувахте {oldfile} на {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} преименува {oldfile} на {newfile}",
+ "You moved {oldfile} to {newfile}" : "Преместихте {oldfile} в {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} премести {oldfile} в {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Файл беше добавен или премахнат от <strong>предпочитанията</strong> ви",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "<strong>Промяна</strong> или <strong>преименуване</strong> на файл / папка",
"A new file or folder has been <strong>created</strong>" : "<strong>Създаване</strong> на нов файл / папка",
+ "A new file or folder has been <strong>deleted</strong>" : "Нов файл или папка беше <strong>изтрит/а</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Изпращай известия само при създаване / промяна на <strong>любими файлове</strong> <em>(Само за потока)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "Нов файл или папка беше <strong>възстановен/а</strong>",
"Upload (max. %s)" : "Качи (макс. %s)",
"File handling" : "Операция с файла",
"Maximum upload size" : "Максимален размер",
"max. possible: " : "максимално:",
"Save" : "Запис",
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Ако ползвате PHP-FPM прилагането на една промяна може да отнеме 5 минути.",
+ "Missing permissions to edit from here." : "Липсва разрешение за редакция от тук.",
"Settings" : "Настройки",
"Show hidden files" : "Показвай и скрити файлове",
"WebDAV" : "WebDAV",
@@ -113,6 +155,7 @@
"Error uploading file \"{fileName}\": {message}" : "Грешка при качването на файла \"{fileName}\": {message}",
"Could not get result from server." : "Не се получи резултат от сървърът.",
"No entries in this folder match '{filter}'" : "Нищо в тази папка не пасва на '{filter}'",
+ "Local link" : "Локална връзка",
"{newname} already exists" : "{newname} вече съществува",
"A file or folder has been <strong>changed</strong>" : "<strong>Промяна</strong> на файл / папка",
"A file or folder has been <strong>deleted</strong>" : "<strong>Изтриване</strong> на файл / папка",
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index 5c3570bc6d1..d2bffead321 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -81,6 +81,10 @@ OC.L10N.register(
"New folder" : "Neuer Ordner",
"Upload" : "Hochladen",
"An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten",
+ "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",
"File changes" : "Dateiänderungen",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
@@ -101,6 +105,7 @@ OC.L10N.register(
"{user} renamed {oldfile} to {newfile}" : "{user} hat {oldfile} in {newfile} umbenannt",
"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 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>",
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index 8bc5b85c1e8..d012d33f352 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -79,6 +79,10 @@
"New folder" : "Neuer Ordner",
"Upload" : "Hochladen",
"An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten",
+ "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",
"File changes" : "Dateiänderungen",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
@@ -99,6 +103,7 @@
"{user} renamed {oldfile} to {newfile}" : "{user} hat {oldfile} in {newfile} umbenannt",
"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 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>",
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index e605400dc9f..42eaeb46600 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -81,6 +81,10 @@ OC.L10N.register(
"New folder" : "Neuer Ordner",
"Upload" : "Hochladen",
"An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten",
+ "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",
"File changes" : "Datei geändert",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
@@ -101,6 +105,7 @@ OC.L10N.register(
"{user} renamed {oldfile} to {newfile}" : "{user} hat {oldfile} in {newfile} umbenannt",
"You moved {oldfile} to {newfile}" : "Sie haben {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 Ihren <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 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>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>gelöscht</strong>",
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index 4815f3bee47..10ecffbb1aa 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -79,6 +79,10 @@
"New folder" : "Neuer Ordner",
"Upload" : "Hochladen",
"An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten",
+ "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",
"File changes" : "Datei geändert",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
@@ -99,6 +103,7 @@
"{user} renamed {oldfile} to {newfile}" : "{user} hat {oldfile} in {newfile} umbenannt",
"You moved {oldfile} to {newfile}" : "Sie haben {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 Ihren <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 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>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>gelöscht</strong>",
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index f9af3d3ba36..b3ba81c1896 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -81,6 +81,10 @@ OC.L10N.register(
"New folder" : "Nouveau dossier",
"Upload" : "Chargement",
"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",
"Created by {user}" : "Créé par {user}",
"Changed by {user}" : "Modifié par {user}",
@@ -101,6 +105,7 @@ OC.L10N.register(
"{user} renamed {oldfile} to {newfile}" : "{user} a renommé {oldfile} en {newfile}",
"You moved {oldfile} to {newfile}" : "Vous avez déplacé {oldfile} dans {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} a déplacé {oldfile} dans {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Un fichier a été ajouté ou retiré de vos <strong>favoris</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un fichier ou dossier a été <strong>modifié</strong> ou <strong>renommé</strong>",
"A new file or folder has been <strong>created</strong>" : "Un nouveau fichier ou répertoire a été <strong>créé</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Un nouveau fichier ou répertoire a été <strong>supprimé</strong>",
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index 9fe5ad96519..84bd72be643 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -79,6 +79,10 @@
"New folder" : "Nouveau dossier",
"Upload" : "Chargement",
"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",
"Created by {user}" : "Créé par {user}",
"Changed by {user}" : "Modifié par {user}",
@@ -99,6 +103,7 @@
"{user} renamed {oldfile} to {newfile}" : "{user} a renommé {oldfile} en {newfile}",
"You moved {oldfile} to {newfile}" : "Vous avez déplacé {oldfile} dans {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} a déplacé {oldfile} dans {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Un fichier a été ajouté ou retiré de vos <strong>favoris</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un fichier ou dossier a été <strong>modifié</strong> ou <strong>renommé</strong>",
"A new file or folder has been <strong>created</strong>" : "Un nouveau fichier ou répertoire a été <strong>créé</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Un nouveau fichier ou répertoire a été <strong>supprimé</strong>",
diff --git a/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js
index 5d45ec1ba46..a4df0cf66c2 100644
--- a/apps/files/l10n/hu_HU.js
+++ b/apps/files/l10n/hu_HU.js
@@ -81,6 +81,10 @@ OC.L10N.register(
"New folder" : "Új mappa",
"Upload" : "Feltöltés",
"An error occurred while trying to update the tags" : "Hiba történt, miközben megpróbálta frissíteni a címkéket",
+ "Added to favorites" : "Hozzáadva a kedvencekhez",
+ "Removed from favorites" : "Eltávolítva a kedvencekből",
+ "You added {file} to your favorites" : "Hozzáadtad a kedvenceidhez: {file}",
+ "You removed {file} from your favorites" : "Eltávolítottad a kedvenceidből: {file}",
"File changes" : "Fájl változások",
"Created by {user}" : "Létrehozta: {user}",
"Changed by {user}" : "Módosította: {user}",
@@ -101,6 +105,7 @@ OC.L10N.register(
"{user} renamed {oldfile} to {newfile}" : "{user} átnevezte ezt: {oldfile} erre: {newfile}",
"You moved {oldfile} to {newfile}" : "Áthelyezted ezt: {oldfile} ide: {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} áthelyezte ezt: {oldfile} ide: {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Egy fájl eltávolítva vagy hozzáadva a <strong>kedvenceidhez</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "A fájl vagy mappa <strong>megváltozott</strong> vagy <strong>át lett nevezve</strong>",
"A new file or folder has been <strong>created</strong>" : "Új fájl vagy mappa <strong>létrehozva</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Egy új fájl vagy mappa <strong>törölve</strong>",
diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json
index 2765a16dcc1..2a615dfeb9f 100644
--- a/apps/files/l10n/hu_HU.json
+++ b/apps/files/l10n/hu_HU.json
@@ -79,6 +79,10 @@
"New folder" : "Új mappa",
"Upload" : "Feltöltés",
"An error occurred while trying to update the tags" : "Hiba történt, miközben megpróbálta frissíteni a címkéket",
+ "Added to favorites" : "Hozzáadva a kedvencekhez",
+ "Removed from favorites" : "Eltávolítva a kedvencekből",
+ "You added {file} to your favorites" : "Hozzáadtad a kedvenceidhez: {file}",
+ "You removed {file} from your favorites" : "Eltávolítottad a kedvenceidből: {file}",
"File changes" : "Fájl változások",
"Created by {user}" : "Létrehozta: {user}",
"Changed by {user}" : "Módosította: {user}",
@@ -99,6 +103,7 @@
"{user} renamed {oldfile} to {newfile}" : "{user} átnevezte ezt: {oldfile} erre: {newfile}",
"You moved {oldfile} to {newfile}" : "Áthelyezted ezt: {oldfile} ide: {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} áthelyezte ezt: {oldfile} ide: {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Egy fájl eltávolítva vagy hozzáadva a <strong>kedvenceidhez</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "A fájl vagy mappa <strong>megváltozott</strong> vagy <strong>át lett nevezve</strong>",
"A new file or folder has been <strong>created</strong>" : "Új fájl vagy mappa <strong>létrehozva</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Egy új fájl vagy mappa <strong>törölve</strong>",
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js
index 40f7bb76b6a..a7d84102ea0 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -81,6 +81,10 @@ OC.L10N.register(
"New folder" : "Nuova cartella",
"Upload" : "Carica",
"An error occurred while trying to update the tags" : "Si è verificato un errore durante il tentativo di aggiornare le etichette",
+ "Added to favorites" : "Aggiunto ai preferiti",
+ "Removed from favorites" : "Rimosso dai preferiti",
+ "You added {file} to your favorites" : "Hai aggiunto {file} ai tuoi preferiti",
+ "You removed {file} from your favorites" : "Hai rimosso {file} dai tuoi preferiti",
"File changes" : "Modiche dei file",
"Created by {user}" : "Creata da {user}",
"Changed by {user}" : "Modificata da {user}",
@@ -101,6 +105,7 @@ OC.L10N.register(
"{user} renamed {oldfile} to {newfile}" : "{user} ha rinominato {oldfile} in {newfile}",
"You moved {oldfile} to {newfile}" : "Hai spostato {oldfile} in {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} ha spostato {oldfile} in {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Un file stato aggiunto o rimosso dai tuoi <strong>preferiti</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un file o una cartella sono stati <strong>modificato</strong> o<strong>rinominati</strong> ",
"A new file or folder has been <strong>created</strong>" : "Un nuovo file o cartella è stato <strong>creato</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Un nuovo file o cartella è stato <strong>eliminato</strong>",
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index 86ce3d16be2..d3df120e90a 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -79,6 +79,10 @@
"New folder" : "Nuova cartella",
"Upload" : "Carica",
"An error occurred while trying to update the tags" : "Si è verificato un errore durante il tentativo di aggiornare le etichette",
+ "Added to favorites" : "Aggiunto ai preferiti",
+ "Removed from favorites" : "Rimosso dai preferiti",
+ "You added {file} to your favorites" : "Hai aggiunto {file} ai tuoi preferiti",
+ "You removed {file} from your favorites" : "Hai rimosso {file} dai tuoi preferiti",
"File changes" : "Modiche dei file",
"Created by {user}" : "Creata da {user}",
"Changed by {user}" : "Modificata da {user}",
@@ -99,6 +103,7 @@
"{user} renamed {oldfile} to {newfile}" : "{user} ha rinominato {oldfile} in {newfile}",
"You moved {oldfile} to {newfile}" : "Hai spostato {oldfile} in {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} ha spostato {oldfile} in {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Un file stato aggiunto o rimosso dai tuoi <strong>preferiti</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un file o una cartella sono stati <strong>modificato</strong> o<strong>rinominati</strong> ",
"A new file or folder has been <strong>created</strong>" : "Un nuovo file o cartella è stato <strong>creato</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Un nuovo file o cartella è stato <strong>eliminato</strong>",
diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js
index add29dec382..db2af9cf43b 100644
--- a/apps/files/l10n/nl.js
+++ b/apps/files/l10n/nl.js
@@ -81,6 +81,10 @@ OC.L10N.register(
"New folder" : "Nieuwe map",
"Upload" : "Uploaden",
"An error occurred while trying to update the tags" : "Er trad een fout op bij uw poging de markeringen bij te werken",
+ "Added to favorites" : "Toevoegen aan favorieten",
+ "Removed from favorites" : "Verwijderen uit favorieten",
+ "You added {file} to your favorites" : "Je voegde {file} toe aan favorieten",
+ "You removed {file} from your favorites" : "Je verwijderde {file} van favorieten",
"File changes" : "Bestandswijzigingen",
"Created by {user}" : "Gecreëerd door {user}",
"Changed by {user}" : "Gewijzigd door {user}",
@@ -101,6 +105,7 @@ OC.L10N.register(
"{user} renamed {oldfile} to {newfile}" : "{user} hernoemde {oldfile} naar {newfile}",
"You moved {oldfile} to {newfile}" : "Je verplaatste {oldfile} naar {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} verplaatste {oldfile} naar {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Een bestand werd toegevoegd of verwijderd van je <strong>favorieten</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Een bestand of map is <strong>gewijzigd</strong> of <strong>hernoemd</strong>",
"A new file or folder has been <strong>created</strong>" : "Een nieuw bestand of map is <strong>aangemaakt</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Een nieuw bestand of nieuwe map is <strong>verwijderd</strong>",
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index 4bede5304cc..12349fb41ca 100644
--- a/apps/files/l10n/nl.json
+++ b/apps/files/l10n/nl.json
@@ -79,6 +79,10 @@
"New folder" : "Nieuwe map",
"Upload" : "Uploaden",
"An error occurred while trying to update the tags" : "Er trad een fout op bij uw poging de markeringen bij te werken",
+ "Added to favorites" : "Toevoegen aan favorieten",
+ "Removed from favorites" : "Verwijderen uit favorieten",
+ "You added {file} to your favorites" : "Je voegde {file} toe aan favorieten",
+ "You removed {file} from your favorites" : "Je verwijderde {file} van favorieten",
"File changes" : "Bestandswijzigingen",
"Created by {user}" : "Gecreëerd door {user}",
"Changed by {user}" : "Gewijzigd door {user}",
@@ -99,6 +103,7 @@
"{user} renamed {oldfile} to {newfile}" : "{user} hernoemde {oldfile} naar {newfile}",
"You moved {oldfile} to {newfile}" : "Je verplaatste {oldfile} naar {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} verplaatste {oldfile} naar {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Een bestand werd toegevoegd of verwijderd van je <strong>favorieten</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Een bestand of map is <strong>gewijzigd</strong> of <strong>hernoemd</strong>",
"A new file or folder has been <strong>created</strong>" : "Een nieuw bestand of map is <strong>aangemaakt</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Een nieuw bestand of nieuwe map is <strong>verwijderd</strong>",
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index 55a9cdc34d0..a6c93bd5b8a 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -81,6 +81,10 @@ OC.L10N.register(
"New folder" : "Nova pasta",
"Upload" : "Enviar",
"An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas",
+ "Added to favorites" : "Adicionado aos favoritos",
+ "Removed from favorites" : "Removido dos favoritos",
+ "You added {file} to your favorites" : "Você adicionou {file} aos seus favoritos",
+ "You removed {file} from your favorites" : "Você removeu {file} dos seus favoritos",
"File changes" : "Alterações do arquivo",
"Created by {user}" : "Criado por {user}",
"Changed by {user}" : "Modificado por {user}",
@@ -101,6 +105,7 @@ OC.L10N.register(
"{user} renamed {oldfile} to {newfile}" : "O usuário {user} renomeou o arquivo antigo {oldfile} para {newfile}",
"You moved {oldfile} to {newfile}" : "Você moveu o arquivo antigo {oldfile} para {newfile}",
"{user} moved {oldfile} to {newfile}" : "O usuário {user} moveu o arquivo antigo {oldfile} para {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Um arquivo foi adicionado ou removido de seus <strong>favoritos</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Um arquivo ou pasta foi <strong>alterado</strong> ou <strong>renomeado</strong>",
"A new file or folder has been <strong>created</strong>" : "Um novo arquivo ou pasta foi <strong>criado</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Um novo arquivo ou pasta foi <strong> deletado </strong>",
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index 36ea0ded320..0e6b7050fc2 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -79,6 +79,10 @@
"New folder" : "Nova pasta",
"Upload" : "Enviar",
"An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas",
+ "Added to favorites" : "Adicionado aos favoritos",
+ "Removed from favorites" : "Removido dos favoritos",
+ "You added {file} to your favorites" : "Você adicionou {file} aos seus favoritos",
+ "You removed {file} from your favorites" : "Você removeu {file} dos seus favoritos",
"File changes" : "Alterações do arquivo",
"Created by {user}" : "Criado por {user}",
"Changed by {user}" : "Modificado por {user}",
@@ -99,6 +103,7 @@
"{user} renamed {oldfile} to {newfile}" : "O usuário {user} renomeou o arquivo antigo {oldfile} para {newfile}",
"You moved {oldfile} to {newfile}" : "Você moveu o arquivo antigo {oldfile} para {newfile}",
"{user} moved {oldfile} to {newfile}" : "O usuário {user} moveu o arquivo antigo {oldfile} para {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Um arquivo foi adicionado ou removido de seus <strong>favoritos</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Um arquivo ou pasta foi <strong>alterado</strong> ou <strong>renomeado</strong>",
"A new file or folder has been <strong>created</strong>" : "Um novo arquivo ou pasta foi <strong>criado</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Um novo arquivo ou pasta foi <strong> deletado </strong>",
diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js
index d9fb7b477ae..9c04ebf2740 100644
--- a/apps/files/l10n/ru.js
+++ b/apps/files/l10n/ru.js
@@ -81,7 +81,12 @@ OC.L10N.register(
"New folder" : "Новый каталог",
"Upload" : "Загрузить",
"An error occurred while trying to update the tags" : "Во время обновления тегов возникла ошибка",
+ "Added to favorites" : "Добавлено в избранное",
+ "Removed from favorites" : "Удалено из избранного",
+ "You added {file} to your favorites" : "Вы добавили {file} в избранное",
+ "You removed {file} from your favorites" : "Вы удалили {file} из избранного",
"File changes" : "Файлы изменены",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Файл был добавлен или удален из вашего <strong>избранного</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Фаил или каталог <strong>изменён</strong> или <strong>переименован</strong>",
"A new file or folder has been <strong>created</strong>" : "<strong>Создан</strong> новый файл или каталог",
"A new file or folder has been <strong>deleted</strong>" : "Новый файл или каталог был <strong>удален</strong>",
diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json
index d77a0f7e6cb..8101188d7aa 100644
--- a/apps/files/l10n/ru.json
+++ b/apps/files/l10n/ru.json
@@ -79,7 +79,12 @@
"New folder" : "Новый каталог",
"Upload" : "Загрузить",
"An error occurred while trying to update the tags" : "Во время обновления тегов возникла ошибка",
+ "Added to favorites" : "Добавлено в избранное",
+ "Removed from favorites" : "Удалено из избранного",
+ "You added {file} to your favorites" : "Вы добавили {file} в избранное",
+ "You removed {file} from your favorites" : "Вы удалили {file} из избранного",
"File changes" : "Файлы изменены",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Файл был добавлен или удален из вашего <strong>избранного</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Фаил или каталог <strong>изменён</strong> или <strong>переименован</strong>",
"A new file or folder has been <strong>created</strong>" : "<strong>Создан</strong> новый файл или каталог",
"A new file or folder has been <strong>deleted</strong>" : "Новый файл или каталог был <strong>удален</strong>",
diff --git a/apps/files/lib/Activity/FavoriteProvider.php b/apps/files/lib/Activity/FavoriteProvider.php
index 8047eb1319e..ed00d50f221 100644
--- a/apps/files/lib/Activity/FavoriteProvider.php
+++ b/apps/files/lib/Activity/FavoriteProvider.php
@@ -142,10 +142,11 @@ class FavoriteProvider implements IProvider {
'type' => 'file',
'id' => $event->getObjectId(),
'name' => basename($event->getObjectName()),
- 'path' => $event->getObjectName(),
+ 'path' => trim($event->getObjectName(), '/'),
+ 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $event->getObjectId()]),
];
- $event->setParsedSubject(str_replace('{file}', trim($parameter['path'], '/'), $subject))
+ $event->setParsedSubject(str_replace('{file}', $parameter['path'], $subject))
->setRichSubject($subject, ['file' => $parameter]);
}
}
diff --git a/apps/files/lib/Activity/Provider.php b/apps/files/lib/Activity/Provider.php
index 92686ec0c36..ae303034610 100644
--- a/apps/files/lib/Activity/Provider.php
+++ b/apps/files/lib/Activity/Provider.php
@@ -201,7 +201,7 @@ class Provider implements IProvider {
foreach ($parameters as $placeholder => $parameter) {
$placeholders[] = '{' . $placeholder . '}';
if ($parameter['type'] === 'file') {
- $replacements[] = trim($parameter['path'], '/');
+ $replacements[] = $parameter['path'];
} else {
$replacements[] = $parameter['name'];
}
@@ -253,7 +253,8 @@ class Provider implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
+ 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml
index c221ba4145f..b2f73dce621 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -13,7 +13,7 @@
<admin>admin-external-storage</admin>
</documentation>
<rememberlogin>false</rememberlogin>
- <version>1.1.2</version>
+ <version>1.2.0</version>
<types>
<filesystem/>
</types>
@@ -22,7 +22,7 @@
<namespace>Files_External</namespace>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<settings>
diff --git a/apps/files_external/js/statusmanager.js b/apps/files_external/js/statusmanager.js
index 4869e663a0a..782b0b08288 100644
--- a/apps/files_external/js/statusmanager.js
+++ b/apps/files_external/js/statusmanager.js
@@ -539,7 +539,11 @@ OCA.External.StatusManager.Utils = {
* of the tr matching the folder name
*/
getIconRoute: function (tr) {
- var icon = OC.imagePath('core', 'filetypes/folder-external');
+ if (OCA.Theming) {
+ var icon = OC.generateUrl('/apps/theming/img/core/filetypes/folder-external.svg?v=' + OCA.Theming.cacheBuster);
+ } else {
+ var icon = OC.imagePath('core', 'filetypes/folder-external');
+ }
var backend = null;
if (tr instanceof $) {
diff --git a/apps/files_external/lib/Lib/Storage/SMB.php b/apps/files_external/lib/Lib/Storage/SMB.php
index 85128c56229..4773afcb75f 100644
--- a/apps/files_external/lib/Lib/Storage/SMB.php
+++ b/apps/files_external/lib/Lib/Storage/SMB.php
@@ -35,6 +35,7 @@ use Icewind\SMB\Exception\ConnectException;
use Icewind\SMB\Exception\Exception;
use Icewind\SMB\Exception\ForbiddenException;
use Icewind\SMB\Exception\NotFoundException;
+use Icewind\SMB\IFileInfo;
use Icewind\SMB\IShare;
use Icewind\SMB\NativeServer;
use Icewind\SMB\Server;
@@ -146,7 +147,9 @@ class SMB extends Common implements INotifyStorage {
foreach ($files as $file) {
$this->statCache[$path . '/' . $file->getName()] = $file;
}
- return $files;
+ return array_filter($files, function(IFileInfo $file) {
+ return !$file->isHidden();
+ });
} catch (ConnectException $e) {
throw new StorageNotAvailableException($e->getMessage(), $e->getCode(), $e);
}
@@ -168,7 +171,46 @@ class SMB extends Common implements INotifyStorage {
* @return array
*/
public function stat($path) {
- return $this->formatInfo($this->getFileInfo($path));
+ $result = $this->formatInfo($this->getFileInfo($path));
+ if ($this->remoteIsShare() && $this->isRootDir($path)) {
+ $result['mtime'] = $this->shareMTime();
+ }
+ return $result;
+ }
+
+ /**
+ * get the best guess for the modification time of the share
+ *
+ * @return int
+ */
+ private function shareMTime() {
+ $highestMTime = 0;
+ $files = $this->share->dir($this->root);
+ foreach ($files as $fileInfo) {
+ if ($fileInfo->getMTime() > $highestMTime) {
+ $highestMTime = $fileInfo->getMTime();
+ }
+ }
+ return $highestMTime;
+ }
+
+ /**
+ * Check if the path is our root dir (not the smb one)
+ *
+ * @param string $path the path
+ * @return bool
+ */
+ private function isRootDir($path) {
+ return $path === '' || $path === '/' || $path === '.';
+ }
+
+ /**
+ * Check if our root points to a smb share
+ *
+ * @return bool true if our root points to a share false otherwise
+ */
+ private function remoteIsShare() {
+ return $this->share->getName() && (!$this->root || $this->root === '/');
}
/**
diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml
index cff424d223a..322efdb6c00 100644
--- a/apps/files_sharing/appinfo/info.xml
+++ b/apps/files_sharing/appinfo/info.xml
@@ -10,12 +10,12 @@ Turning the feature off removes shared files and folders on the server for all s
<licence>AGPL</licence>
<author>Michael Gapczynski, Bjoern Schiessle</author>
<default_enable/>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<types>
<filesystem/>
</types>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<public>
<files>public.php</files>
diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js
index d3f1542ad33..b4309c05685 100644
--- a/apps/files_sharing/l10n/es.js
+++ b/apps/files_sharing/l10n/es.js
@@ -18,48 +18,82 @@ OC.L10N.register(
"No expiration date set" : "No se ha establecido fecha de caducidad",
"Shared by" : "Compartido por",
"Sharing" : "Compartiendo",
- "A file or folder has been <strong>shared</strong>" : "Se ha <strong>compartido</strong> un archivo o carpeta",
- "A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>",
- "You received a new remote share %2$s from %1$s" : "Recibió un nuevo recurso compartido remoto %2$s de %1$s",
- "You received a new remote share from %s" : "Ha recibido un nuevo recurso compartido remoto de %s",
- "%1$s accepted remote share %2$s" : "%1$s aceptó el recurso compartido remoto %2$s",
- "%1$s declined remote share %2$s" : "%1$s ha rechazado el recurso compartido remoto %2$s",
- "%1$s unshared %2$s from you" : "%1$s dejó de compartirse %2$s por ti",
- "Public shared folder %1$s was downloaded" : "Se descargó la carpeta pública compartida %1$s",
- "Public shared file %1$s was downloaded" : "Se descargó el archivo público compartido %1$s",
- "You shared %1$s with %2$s" : "Usted compartió %1$s con %2$s",
- "%2$s shared %1$s with %3$s" : "%2$s compartó %1$s con %3$s",
- "You removed the share of %2$s for %1$s" : "Ha cambiado el compartido %2$s por %1$s",
- "%2$s removed the share of %3$s for %1$s" : "%2$s eliminó la compartición de %3$s con %1$s",
- "You shared %1$s with group %2$s" : "Usted ha compartido %1$s con el grupo %2$s",
- "%2$s shared %1$s with group %3$s" : "%2$s compartió %1$s con el grupo %3$s",
- "You removed the share of group %2$s for %1$s" : "Ha cambiado el compartido del grupo %2$s por %1$s",
- "%2$s removed the share of group %3$s for %1$s" : "%2$s ha cambiado el compartido del grupo %3$s por %1$s",
- "%2$s shared %1$s via link" : "%2$s compartió %1$s vía enlace",
- "You shared %1$s via link" : "Ha compartido %1$s vía enlace",
- "You removed the public link for %1$s" : "Ha borrado el enlace público de %1$s",
- "%2$s removed the public link for %1$s" : "%2$s ha eliminado el enlace público de %1$s",
- "Your public link for %1$s expired" : "Su enlace público %1$s ha expirado",
- "The public link of %2$s for %1$s expired" : "El enlace público de %2$s para %1$s ha expirado",
- "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con usted",
- "%2$s removed the share for %1$s" : "%2$s ha borrado el compartido %1$s",
+ "File shares" : "Archivos compartidos",
"Downloaded via public link" : "Descargado vía enlace público",
- "Shared with %2$s" : "Compartido con %2$s",
- "Shared with %3$s by %2$s" : "Compartido con %3$s por %2$s",
- "Removed share for %2$s" : "Borrado el compartido %2$s",
- "%2$s removed share for %3$s" : "%2$s ha borrado el compartido %3$s",
- "Shared with group %2$s" : "Compartido con el grupo %2$s",
- "Shared with group %3$s by %2$s" : "Compartido con el grupo %3$s por %2$s",
- "Removed share of group %2$s" : "Borrado el compartido del grupo %2$s",
- "%2$s removed share of group %3$s" : "%2$s ha borrado el compartido del grupo %3$s",
- "Shared via link by %2$s" : "Compartido vía enlace por %2$s",
- "Shared via public link" : "Compartido vía enlace público",
+ "Downloaded by %1$s" : "Descargado por %1$s",
+ "Downloaded by {email}" : "Descargado por {email}",
+ "%1$s downloaded via public link" : "%1$s descargado por vía enlace público",
+ "{file} downloaded via public link" : "{file} descargado vía enlace público",
+ "%1$s downloaded %2$s" : "%1$s descargó %2$s",
+ "{email} downloaded {file}" : "{email} descargó {file}",
+ "Shared with group %1$s" : "Compartido con el grupo %1$s",
+ "Shared with group {group}" : "Compartido con el grupo {grupo}",
+ "Removed share for group %1$s" : "Eliminado el compartido para el grupo %1$s",
+ "Removed share for group {group}" : "Eliminado el compartido para el grupo {group}",
+ "%2$s shared with group %1$s" : "%2$s compartido con el grupo %1$s",
+ "{actor} shared with group {group}" : "{actor} compartió con el grupo {group}",
+ "%2$s removed share for group %1$s" : "%2$s removió archivo del grupo %1$s",
+ "{actor} removed share for group {group}" : "{actor} eliminó el compartido para el grupo {group}",
+ "You shared %1$s with group %2$s" : "Usted ha compartido %1$s con el grupo %2$s",
+ "You shared {file} with group {group}" : "Ha compartido {file} con el grupo {group}",
+ "You removed group %2$s from %1$s" : "Ha eliminado el grupo %2$s de %1$s",
+ "You removed group {group} from {file}" : "Ha eliminado el grupo {group} del {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s compartió %1$s con el grupo %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} compartió {file} con el grupo {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s eliminó el grupo %2$s de %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} eliminó grupo {group} de {file}",
+ "Shared as public link" : "Compartido como enlace público",
"Removed public link" : "Eliminado enlace público",
- "%2$s removed public link" : "%2$s ha borrado el enlace público",
- "Public link expired" : "El enlace público ha expirado",
- "Public link of %2$s expired" : "El enlace público %2$s ha expirado",
- "Shared by %2$s" : "Compartido por %2$s",
- "Downloaded by %2$s" : "Descargado por %2$s",
+ "%1$s shared as public link" : "%1$s compartido como enlace público",
+ "{actor} shared as public link" : "{actor} compartió como enlace público",
+ "%1$s removed public link" : "%1$s eliminó el enlace público",
+ "{actor} removed public link" : "{actor} eliminó el enlace público",
+ "You shared %1$s as public link" : "Compartió %1$s como un enlace público",
+ "You shared {file} as public link" : "Compartió {file} como un enlace público",
+ "You removed public link for %1$s" : "Eliminó el enlace público para %1$s",
+ "You removed public link for {file}" : "Eliminó el enlace público para {file}",
+ "%2$s shared %1$s as public link" : "%2$s compartió %1$s como un enlace público",
+ "{actor} shared {file} as public link" : "{actor} compartió {file} como enlace público",
+ "%2$s removed public link for %1$s" : "%2$s eliminó el enlace público para %1$s",
+ "{actor} removed public link for {file}" : "{actor} eliminó el enlace público para {file}",
+ "%1$s accepted the remote share" : "%1$s aceptó el recurso compartido remotamente",
+ "{user} accepted the remote share" : "{user} aceptó el recurso compartido remotamente",
+ "%1$s declined the remote share" : "%1$s rechazó el recurso compartido",
+ "{user} declined the remote share" : "{user} rechazó el recurso compartido",
+ "You received a new remote share %1$s from %2$s" : "Ha recibido un nuevo recurso compartido remoto %1$s de %2$s",
+ "You received a new remote share {file} from {user}" : "Ha recibido un nuevo recurso compartido remoto {file} de {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s aceptó el recurso compartido de %1$s",
+ "{user} accepted the remote share of {file}" : "{user} aceptó la compartición remota de {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s rechazó el recurso compartido de %1$s",
+ "{user} declined the remote share of {file}" : "{user} rechazó el recurso compartido de {file}",
+ "%2$s unshared %1$s from you" : "%2$s dejó de compartir %1$s contigo",
+ "{user} unshared {file} from you" : "{user} dejó de compartir {file} contigo",
+ "Shared with %1$s" : "Compartido con %1$s",
+ "Shared with {user}" : "Compartido con {user}",
+ "Removed share for %1$s" : "Eliminó el recurso compartido a %1$s",
+ "Removed share for {user}" : "Eliminó el recurso compartido a {user}",
+ "%2$s shared with %1$s" : "%2$s compartió con %1$s",
+ "{actor} shared with {user}" : "{actor} compartió con {user}",
+ "%2$s removed share for %1$s" : "%2$s eliminó recurso compartido para %1$s",
+ "{actor} removed share for {user}" : "{actor} eliminó recurso compartido para {user}",
+ "Shared by %1$s" : "Compartido por %1$s",
+ "Shared by {actor}" : "Compartido por {actor}",
+ "%1$s removed share" : "%1$s eliminó el recurso compartido",
+ "{actor} removed share" : "{actor} eliminó el recurso compartido",
+ "You shared %1$s with %2$s" : "Usted compartió %1$s con %2$s",
+ "You shared {file} with {user}" : "Ha compartido {file} con {user}",
+ "You removed %2$s from %1$s" : "Ha eliminado %2$s de %1$s",
+ "You removed {user} from {file}" : "Ha eliminado {user} de {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s compartió %1$s con %2$s",
+ "{actor} removed {user} from {file}" : "{actor} eliminó a {user} de {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s eliminó a %2$s de %1$s",
+ "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con usted",
+ "{actor} shared {file} with you" : "{actor} compartió {file} contigo",
+ "%2$s removed you from %1$s" : "%2$s lo ha eliminado de %1$s",
+ "{actor} removed you from {file}" : "{actor} lo ha eliminado de {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un archivo o carpeta compartida por correo o enlace público fue <strong>descargado</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Se ha <strong>compartido</strong> un archivo o carpeta",
"Wrong share ID, share doesn't exist" : "El ID del recurso compartido no es correcto, el recurso compartido no existe",
"could not delete share" : "No se ha podido eliminar el recurso compartido",
"Could not delete share" : "No se ha podido eliminar el recurso compartido",
@@ -81,6 +115,7 @@ OC.L10N.register(
"Wrong or no update parameter given" : "No se ha suministrado un parametro correcto",
"Can't change permissions for public share links" : "No se pueden cambiar los permisos para los enlaces de recursos compartidos públicos",
"Cannot increase permissions" : "No es posible aumentar permisos",
+ "%s is publicly shared" : "%s ha sido compartido",
"Share API is disabled" : "El API de compartir está deshabilitado",
"This share is password-protected" : "Este elemento compartido está protegido por contraseña",
"The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.",
@@ -104,6 +139,40 @@ OC.L10N.register(
"Uploading files…" : "Subiendo archivos...",
"Uploaded files:" : "Archivos subidos:",
"A public shared file or folder was <strong>downloaded</strong>" : "Se ha <strong>descargado</strong> un archivo o carpeta compartido públicamente",
+ "You received a new remote share %2$s from %1$s" : "Recibió un nuevo recurso compartido remoto %2$s de %1$s",
+ "You received a new remote share from %s" : "Ha recibido un nuevo recurso compartido remoto de %s",
+ "%1$s accepted remote share %2$s" : "%1$s aceptó el recurso compartido remoto %2$s",
+ "%1$s declined remote share %2$s" : "%1$s ha rechazado el recurso compartido remoto %2$s",
+ "%1$s unshared %2$s from you" : "%1$s dejó de compartirse %2$s por ti",
+ "Public shared folder %1$s was downloaded" : "Se descargó la carpeta pública compartida %1$s",
+ "Public shared file %1$s was downloaded" : "Se descargó el archivo público compartido %1$s",
+ "%2$s shared %1$s with %3$s" : "%2$s compartó %1$s con %3$s",
+ "You removed the share of %2$s for %1$s" : "Ha cambiado el compartido %2$s por %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s eliminó la compartición de %3$s con %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s compartió %1$s con el grupo %3$s",
+ "You removed the share of group %2$s for %1$s" : "Ha cambiado el compartido del grupo %2$s por %1$s",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s ha cambiado el compartido del grupo %3$s por %1$s",
+ "%2$s shared %1$s via link" : "%2$s compartió %1$s vía enlace",
+ "You shared %1$s via link" : "Ha compartido %1$s vía enlace",
+ "You removed the public link for %1$s" : "Ha borrado el enlace público de %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s ha eliminado el enlace público de %1$s",
+ "Your public link for %1$s expired" : "Su enlace público %1$s ha expirado",
+ "The public link of %2$s for %1$s expired" : "El enlace público de %2$s para %1$s ha expirado",
+ "%2$s removed the share for %1$s" : "%2$s ha borrado el compartido %1$s",
+ "Shared with %2$s" : "Compartido con %2$s",
+ "Shared with %3$s by %2$s" : "Compartido con %3$s por %2$s",
+ "Removed share for %2$s" : "Borrado el compartido %2$s",
+ "%2$s removed share for %3$s" : "%2$s ha borrado el compartido %3$s",
+ "Shared with group %2$s" : "Compartido con el grupo %2$s",
+ "Shared with group %3$s by %2$s" : "Compartido con el grupo %3$s por %2$s",
+ "Removed share of group %2$s" : "Borrado el compartido del grupo %2$s",
+ "%2$s removed share of group %3$s" : "%2$s ha borrado el compartido del grupo %3$s",
+ "Shared via link by %2$s" : "Compartido vía enlace por %2$s",
+ "Shared via public link" : "Compartido vía enlace público",
+ "%2$s removed public link" : "%2$s ha borrado el enlace público",
+ "Public link expired" : "El enlace público ha expirado",
+ "Public link of %2$s expired" : "El enlace público %2$s ha expirado",
+ "Shared by %2$s" : "Compartido por %2$s",
"Shares" : "Compartidos",
"Server to server sharing is not enabled on this server" : "Compartir entre servidores no está habilitado en este servidor",
"The mountpoint name contains invalid characters." : "El punto de montaje contiene caracteres inválidos.",
@@ -123,6 +192,8 @@ OC.L10N.register(
"You received \"/%2$s\" as a remote share from %1$s" : "Has recibido \"/%2$s\" como recurso compartido remoto de %1$s",
"Accept" : "Aceptar",
"Decline" : "Rechazar",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Comparta conmigo a través de mi ID Nube Federada #Nextcloud, ver %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Comparta conmigo a través de mi ID Nube Federada #Nextcloud",
"Federated Cloud Sharing" : "Compartido en Cloud Federado",
"Open documentation" : "Documentación abierta",
"Allow users on this server to send shares to other servers" : "Permitir a usuarios de este servidor compartir con usuarios de otros servidores",
diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json
index e03957a8eaf..8b3481df8ec 100644
--- a/apps/files_sharing/l10n/es.json
+++ b/apps/files_sharing/l10n/es.json
@@ -16,48 +16,82 @@
"No expiration date set" : "No se ha establecido fecha de caducidad",
"Shared by" : "Compartido por",
"Sharing" : "Compartiendo",
- "A file or folder has been <strong>shared</strong>" : "Se ha <strong>compartido</strong> un archivo o carpeta",
- "A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>",
- "You received a new remote share %2$s from %1$s" : "Recibió un nuevo recurso compartido remoto %2$s de %1$s",
- "You received a new remote share from %s" : "Ha recibido un nuevo recurso compartido remoto de %s",
- "%1$s accepted remote share %2$s" : "%1$s aceptó el recurso compartido remoto %2$s",
- "%1$s declined remote share %2$s" : "%1$s ha rechazado el recurso compartido remoto %2$s",
- "%1$s unshared %2$s from you" : "%1$s dejó de compartirse %2$s por ti",
- "Public shared folder %1$s was downloaded" : "Se descargó la carpeta pública compartida %1$s",
- "Public shared file %1$s was downloaded" : "Se descargó el archivo público compartido %1$s",
- "You shared %1$s with %2$s" : "Usted compartió %1$s con %2$s",
- "%2$s shared %1$s with %3$s" : "%2$s compartó %1$s con %3$s",
- "You removed the share of %2$s for %1$s" : "Ha cambiado el compartido %2$s por %1$s",
- "%2$s removed the share of %3$s for %1$s" : "%2$s eliminó la compartición de %3$s con %1$s",
- "You shared %1$s with group %2$s" : "Usted ha compartido %1$s con el grupo %2$s",
- "%2$s shared %1$s with group %3$s" : "%2$s compartió %1$s con el grupo %3$s",
- "You removed the share of group %2$s for %1$s" : "Ha cambiado el compartido del grupo %2$s por %1$s",
- "%2$s removed the share of group %3$s for %1$s" : "%2$s ha cambiado el compartido del grupo %3$s por %1$s",
- "%2$s shared %1$s via link" : "%2$s compartió %1$s vía enlace",
- "You shared %1$s via link" : "Ha compartido %1$s vía enlace",
- "You removed the public link for %1$s" : "Ha borrado el enlace público de %1$s",
- "%2$s removed the public link for %1$s" : "%2$s ha eliminado el enlace público de %1$s",
- "Your public link for %1$s expired" : "Su enlace público %1$s ha expirado",
- "The public link of %2$s for %1$s expired" : "El enlace público de %2$s para %1$s ha expirado",
- "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con usted",
- "%2$s removed the share for %1$s" : "%2$s ha borrado el compartido %1$s",
+ "File shares" : "Archivos compartidos",
"Downloaded via public link" : "Descargado vía enlace público",
- "Shared with %2$s" : "Compartido con %2$s",
- "Shared with %3$s by %2$s" : "Compartido con %3$s por %2$s",
- "Removed share for %2$s" : "Borrado el compartido %2$s",
- "%2$s removed share for %3$s" : "%2$s ha borrado el compartido %3$s",
- "Shared with group %2$s" : "Compartido con el grupo %2$s",
- "Shared with group %3$s by %2$s" : "Compartido con el grupo %3$s por %2$s",
- "Removed share of group %2$s" : "Borrado el compartido del grupo %2$s",
- "%2$s removed share of group %3$s" : "%2$s ha borrado el compartido del grupo %3$s",
- "Shared via link by %2$s" : "Compartido vía enlace por %2$s",
- "Shared via public link" : "Compartido vía enlace público",
+ "Downloaded by %1$s" : "Descargado por %1$s",
+ "Downloaded by {email}" : "Descargado por {email}",
+ "%1$s downloaded via public link" : "%1$s descargado por vía enlace público",
+ "{file} downloaded via public link" : "{file} descargado vía enlace público",
+ "%1$s downloaded %2$s" : "%1$s descargó %2$s",
+ "{email} downloaded {file}" : "{email} descargó {file}",
+ "Shared with group %1$s" : "Compartido con el grupo %1$s",
+ "Shared with group {group}" : "Compartido con el grupo {grupo}",
+ "Removed share for group %1$s" : "Eliminado el compartido para el grupo %1$s",
+ "Removed share for group {group}" : "Eliminado el compartido para el grupo {group}",
+ "%2$s shared with group %1$s" : "%2$s compartido con el grupo %1$s",
+ "{actor} shared with group {group}" : "{actor} compartió con el grupo {group}",
+ "%2$s removed share for group %1$s" : "%2$s removió archivo del grupo %1$s",
+ "{actor} removed share for group {group}" : "{actor} eliminó el compartido para el grupo {group}",
+ "You shared %1$s with group %2$s" : "Usted ha compartido %1$s con el grupo %2$s",
+ "You shared {file} with group {group}" : "Ha compartido {file} con el grupo {group}",
+ "You removed group %2$s from %1$s" : "Ha eliminado el grupo %2$s de %1$s",
+ "You removed group {group} from {file}" : "Ha eliminado el grupo {group} del {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s compartió %1$s con el grupo %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} compartió {file} con el grupo {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s eliminó el grupo %2$s de %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} eliminó grupo {group} de {file}",
+ "Shared as public link" : "Compartido como enlace público",
"Removed public link" : "Eliminado enlace público",
- "%2$s removed public link" : "%2$s ha borrado el enlace público",
- "Public link expired" : "El enlace público ha expirado",
- "Public link of %2$s expired" : "El enlace público %2$s ha expirado",
- "Shared by %2$s" : "Compartido por %2$s",
- "Downloaded by %2$s" : "Descargado por %2$s",
+ "%1$s shared as public link" : "%1$s compartido como enlace público",
+ "{actor} shared as public link" : "{actor} compartió como enlace público",
+ "%1$s removed public link" : "%1$s eliminó el enlace público",
+ "{actor} removed public link" : "{actor} eliminó el enlace público",
+ "You shared %1$s as public link" : "Compartió %1$s como un enlace público",
+ "You shared {file} as public link" : "Compartió {file} como un enlace público",
+ "You removed public link for %1$s" : "Eliminó el enlace público para %1$s",
+ "You removed public link for {file}" : "Eliminó el enlace público para {file}",
+ "%2$s shared %1$s as public link" : "%2$s compartió %1$s como un enlace público",
+ "{actor} shared {file} as public link" : "{actor} compartió {file} como enlace público",
+ "%2$s removed public link for %1$s" : "%2$s eliminó el enlace público para %1$s",
+ "{actor} removed public link for {file}" : "{actor} eliminó el enlace público para {file}",
+ "%1$s accepted the remote share" : "%1$s aceptó el recurso compartido remotamente",
+ "{user} accepted the remote share" : "{user} aceptó el recurso compartido remotamente",
+ "%1$s declined the remote share" : "%1$s rechazó el recurso compartido",
+ "{user} declined the remote share" : "{user} rechazó el recurso compartido",
+ "You received a new remote share %1$s from %2$s" : "Ha recibido un nuevo recurso compartido remoto %1$s de %2$s",
+ "You received a new remote share {file} from {user}" : "Ha recibido un nuevo recurso compartido remoto {file} de {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s aceptó el recurso compartido de %1$s",
+ "{user} accepted the remote share of {file}" : "{user} aceptó la compartición remota de {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s rechazó el recurso compartido de %1$s",
+ "{user} declined the remote share of {file}" : "{user} rechazó el recurso compartido de {file}",
+ "%2$s unshared %1$s from you" : "%2$s dejó de compartir %1$s contigo",
+ "{user} unshared {file} from you" : "{user} dejó de compartir {file} contigo",
+ "Shared with %1$s" : "Compartido con %1$s",
+ "Shared with {user}" : "Compartido con {user}",
+ "Removed share for %1$s" : "Eliminó el recurso compartido a %1$s",
+ "Removed share for {user}" : "Eliminó el recurso compartido a {user}",
+ "%2$s shared with %1$s" : "%2$s compartió con %1$s",
+ "{actor} shared with {user}" : "{actor} compartió con {user}",
+ "%2$s removed share for %1$s" : "%2$s eliminó recurso compartido para %1$s",
+ "{actor} removed share for {user}" : "{actor} eliminó recurso compartido para {user}",
+ "Shared by %1$s" : "Compartido por %1$s",
+ "Shared by {actor}" : "Compartido por {actor}",
+ "%1$s removed share" : "%1$s eliminó el recurso compartido",
+ "{actor} removed share" : "{actor} eliminó el recurso compartido",
+ "You shared %1$s with %2$s" : "Usted compartió %1$s con %2$s",
+ "You shared {file} with {user}" : "Ha compartido {file} con {user}",
+ "You removed %2$s from %1$s" : "Ha eliminado %2$s de %1$s",
+ "You removed {user} from {file}" : "Ha eliminado {user} de {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s compartió %1$s con %2$s",
+ "{actor} removed {user} from {file}" : "{actor} eliminó a {user} de {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s eliminó a %2$s de %1$s",
+ "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con usted",
+ "{actor} shared {file} with you" : "{actor} compartió {file} contigo",
+ "%2$s removed you from %1$s" : "%2$s lo ha eliminado de %1$s",
+ "{actor} removed you from {file}" : "{actor} lo ha eliminado de {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un archivo o carpeta compartida por correo o enlace público fue <strong>descargado</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Se ha <strong>compartido</strong> un archivo o carpeta",
"Wrong share ID, share doesn't exist" : "El ID del recurso compartido no es correcto, el recurso compartido no existe",
"could not delete share" : "No se ha podido eliminar el recurso compartido",
"Could not delete share" : "No se ha podido eliminar el recurso compartido",
@@ -79,6 +113,7 @@
"Wrong or no update parameter given" : "No se ha suministrado un parametro correcto",
"Can't change permissions for public share links" : "No se pueden cambiar los permisos para los enlaces de recursos compartidos públicos",
"Cannot increase permissions" : "No es posible aumentar permisos",
+ "%s is publicly shared" : "%s ha sido compartido",
"Share API is disabled" : "El API de compartir está deshabilitado",
"This share is password-protected" : "Este elemento compartido está protegido por contraseña",
"The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.",
@@ -102,6 +137,40 @@
"Uploading files…" : "Subiendo archivos...",
"Uploaded files:" : "Archivos subidos:",
"A public shared file or folder was <strong>downloaded</strong>" : "Se ha <strong>descargado</strong> un archivo o carpeta compartido públicamente",
+ "You received a new remote share %2$s from %1$s" : "Recibió un nuevo recurso compartido remoto %2$s de %1$s",
+ "You received a new remote share from %s" : "Ha recibido un nuevo recurso compartido remoto de %s",
+ "%1$s accepted remote share %2$s" : "%1$s aceptó el recurso compartido remoto %2$s",
+ "%1$s declined remote share %2$s" : "%1$s ha rechazado el recurso compartido remoto %2$s",
+ "%1$s unshared %2$s from you" : "%1$s dejó de compartirse %2$s por ti",
+ "Public shared folder %1$s was downloaded" : "Se descargó la carpeta pública compartida %1$s",
+ "Public shared file %1$s was downloaded" : "Se descargó el archivo público compartido %1$s",
+ "%2$s shared %1$s with %3$s" : "%2$s compartó %1$s con %3$s",
+ "You removed the share of %2$s for %1$s" : "Ha cambiado el compartido %2$s por %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s eliminó la compartición de %3$s con %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s compartió %1$s con el grupo %3$s",
+ "You removed the share of group %2$s for %1$s" : "Ha cambiado el compartido del grupo %2$s por %1$s",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s ha cambiado el compartido del grupo %3$s por %1$s",
+ "%2$s shared %1$s via link" : "%2$s compartió %1$s vía enlace",
+ "You shared %1$s via link" : "Ha compartido %1$s vía enlace",
+ "You removed the public link for %1$s" : "Ha borrado el enlace público de %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s ha eliminado el enlace público de %1$s",
+ "Your public link for %1$s expired" : "Su enlace público %1$s ha expirado",
+ "The public link of %2$s for %1$s expired" : "El enlace público de %2$s para %1$s ha expirado",
+ "%2$s removed the share for %1$s" : "%2$s ha borrado el compartido %1$s",
+ "Shared with %2$s" : "Compartido con %2$s",
+ "Shared with %3$s by %2$s" : "Compartido con %3$s por %2$s",
+ "Removed share for %2$s" : "Borrado el compartido %2$s",
+ "%2$s removed share for %3$s" : "%2$s ha borrado el compartido %3$s",
+ "Shared with group %2$s" : "Compartido con el grupo %2$s",
+ "Shared with group %3$s by %2$s" : "Compartido con el grupo %3$s por %2$s",
+ "Removed share of group %2$s" : "Borrado el compartido del grupo %2$s",
+ "%2$s removed share of group %3$s" : "%2$s ha borrado el compartido del grupo %3$s",
+ "Shared via link by %2$s" : "Compartido vía enlace por %2$s",
+ "Shared via public link" : "Compartido vía enlace público",
+ "%2$s removed public link" : "%2$s ha borrado el enlace público",
+ "Public link expired" : "El enlace público ha expirado",
+ "Public link of %2$s expired" : "El enlace público %2$s ha expirado",
+ "Shared by %2$s" : "Compartido por %2$s",
"Shares" : "Compartidos",
"Server to server sharing is not enabled on this server" : "Compartir entre servidores no está habilitado en este servidor",
"The mountpoint name contains invalid characters." : "El punto de montaje contiene caracteres inválidos.",
@@ -121,6 +190,8 @@
"You received \"/%2$s\" as a remote share from %1$s" : "Has recibido \"/%2$s\" como recurso compartido remoto de %1$s",
"Accept" : "Aceptar",
"Decline" : "Rechazar",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Comparta conmigo a través de mi ID Nube Federada #Nextcloud, ver %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Comparta conmigo a través de mi ID Nube Federada #Nextcloud",
"Federated Cloud Sharing" : "Compartido en Cloud Federado",
"Open documentation" : "Documentación abierta",
"Allow users on this server to send shares to other servers" : "Permitir a usuarios de este servidor compartir con usuarios de otros servidores",
diff --git a/apps/files_sharing/lib/Activity/Providers/Downloads.php b/apps/files_sharing/lib/Activity/Providers/Downloads.php
index e1a25156441..01012e4785b 100644
--- a/apps/files_sharing/lib/Activity/Providers/Downloads.php
+++ b/apps/files_sharing/lib/Activity/Providers/Downloads.php
@@ -187,7 +187,7 @@ class Downloads implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/files_sharing/lib/Activity/Providers/Groups.php b/apps/files_sharing/lib/Activity/Providers/Groups.php
index 326ebba9ef7..6c25572d0d4 100644
--- a/apps/files_sharing/lib/Activity/Providers/Groups.php
+++ b/apps/files_sharing/lib/Activity/Providers/Groups.php
@@ -232,7 +232,7 @@ class Groups implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/files_sharing/lib/Activity/Providers/PublicLinks.php b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
index ec8152c5a32..20070970bca 100644
--- a/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
+++ b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
@@ -239,7 +239,7 @@ class PublicLinks implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/files_sharing/lib/Activity/Providers/Users.php b/apps/files_sharing/lib/Activity/Providers/Users.php
index d85eeadc315..4db72136a85 100644
--- a/apps/files_sharing/lib/Activity/Providers/Users.php
+++ b/apps/files_sharing/lib/Activity/Providers/Users.php
@@ -260,7 +260,7 @@ class Users implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php
index 3b86f7dc23b..178c4265dd5 100644
--- a/apps/files_sharing/lib/Controller/ShareController.php
+++ b/apps/files_sharing/lib/Controller/ShareController.php
@@ -487,7 +487,7 @@ class ShareController extends Controller {
// Single file download
$this->singleFileDownloaded($share, $share->getNode());
} else if (!empty($files_list)) {
- $this->fileListDownloaded($share, $files_list);
+ $this->fileListDownloaded($share, $files_list, $node);
} else {
// The folder is downloaded
$this->singleFileDownloaded($share, $share->getNode());
@@ -541,10 +541,11 @@ class ShareController extends Controller {
*
* @param Share\IShare $share
* @param array $files_list
+ * @param \OCP\Files\Folder $node
*/
- protected function fileListDownloaded(Share\IShare $share, array $files_list) {
+ protected function fileListDownloaded(Share\IShare $share, array $files_list, \OCP\Files\Folder $node) {
foreach ($files_list as $file) {
- $subNode = $share->getNode()->get($file);
+ $subNode = $node->get($file);
$this->singleFileDownloaded($share, $subNode);
}
diff --git a/apps/files_sharing/lib/Scanner.php b/apps/files_sharing/lib/Scanner.php
index 86c6b58f439..cab04fa9309 100644
--- a/apps/files_sharing/lib/Scanner.php
+++ b/apps/files_sharing/lib/Scanner.php
@@ -31,6 +31,11 @@ use OC\Files\ObjectStore\NoopScanner;
* Scanner for SharedStorage
*/
class Scanner extends \OC\Files\Cache\Scanner {
+ /**
+ * @var \OCA\Files_Sharing\SharedStorage $storage
+ */
+ protected $storage;
+
private $sourceScanner;
/**
@@ -46,8 +51,8 @@ class Scanner extends \OC\Files\Cache\Scanner {
if ($data === null) {
return null;
}
- list($sourceStorage, $internalPath) = $this->storage->resolvePath($path);
- $data['permissions'] = $sourceStorage->getPermissions($internalPath);
+ $internalPath = $this->storage->getSourcePath($path);
+ $data['permissions'] = $this->storage->getSourceStorage()->getPermissions($internalPath);
return $data;
}
diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php
index 5436f476f1a..2ef5e15b778 100644
--- a/apps/files_sharing/lib/SharedMount.php
+++ b/apps/files_sharing/lib/SharedMount.php
@@ -115,9 +115,9 @@ class SharedMount extends MountPoint implements MoveableMount {
private function updateFileTarget($newPath, &$share) {
$share->setTarget($newPath);
- foreach ($this->groupedShares as $share) {
- $share->setTarget($newPath);
- \OC::$server->getShareManager()->moveShare($share, $this->user);
+ foreach ($this->groupedShares as $tmpShare) {
+ $tmpShare->setTarget($newPath);
+ \OC::$server->getShareManager()->moveShare($tmpShare, $this->user);
}
}
@@ -130,12 +130,12 @@ class SharedMount extends MountPoint implements MoveableMount {
*/
private function generateUniqueTarget($path, $view, array $mountpoints) {
$pathinfo = pathinfo($path);
- $ext = (isset($pathinfo['extension'])) ? '.'.$pathinfo['extension'] : '';
+ $ext = (isset($pathinfo['extension'])) ? '.' . $pathinfo['extension'] : '';
$name = $pathinfo['filename'];
$dir = $pathinfo['dirname'];
// Helper function to find existing mount points
- $mountpointExists = function($path) use ($mountpoints) {
+ $mountpointExists = function ($path) use ($mountpoints) {
foreach ($mountpoints as $mountpoint) {
if ($mountpoint->getShare()->getTarget() === $path) {
return true;
@@ -146,7 +146,7 @@ class SharedMount extends MountPoint implements MoveableMount {
$i = 2;
while ($view->file_exists($path) || $mountpointExists($path)) {
- $path = Filesystem::normalizePath($dir . '/' . $name . ' ('.$i.')' . $ext);
+ $path = Filesystem::normalizePath($dir . '/' . $name . ' (' . $i . ')' . $ext);
$i++;
}
@@ -240,18 +240,22 @@ class SharedMount extends MountPoint implements MoveableMount {
* @return int
*/
public function getNumericStorageId() {
- $builder = \OC::$server->getDatabaseConnection()->getQueryBuilder();
-
- $query = $builder->select('storage')
- ->from('filecache')
- ->where($builder->expr()->eq('fileid', $builder->createNamedParameter($this->getStorageRootId())));
-
- $result = $query->execute();
- $row = $result->fetch();
- $result->closeCursor();
- if ($row) {
- return $row['storage'];
+ if (!is_null($this->getShare()->getNodeCacheEntry())) {
+ return $this->getShare()->getNodeCacheEntry()->getStorageId();
+ } else {
+ $builder = \OC::$server->getDatabaseConnection()->getQueryBuilder();
+
+ $query = $builder->select('storage')
+ ->from('filecache')
+ ->where($builder->expr()->eq('fileid', $builder->createNamedParameter($this->getStorageRootId())));
+
+ $result = $query->execute();
+ $row = $result->fetch();
+ $result->closeCursor();
+ if ($row) {
+ return $row['storage'];
+ }
+ return -1;
}
- return -1;
}
}
diff --git a/apps/files_sharing/lib/SharedStorage.php b/apps/files_sharing/lib/SharedStorage.php
index ad250a790fa..888cbfda143 100644
--- a/apps/files_sharing/lib/SharedStorage.php
+++ b/apps/files_sharing/lib/SharedStorage.php
@@ -446,7 +446,8 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
}
public function getSourceStorage() {
- return $this->getWrapperStorage();
+ $this->init();
+ return $this->nonMaskedStorage;
}
public function getWrapperStorage() {
diff --git a/apps/files_sharing/tests/SharedStorageTest.php b/apps/files_sharing/tests/SharedStorageTest.php
index f1b0cbb8fbb..eaa138b0f70 100644
--- a/apps/files_sharing/tests/SharedStorageTest.php
+++ b/apps/files_sharing/tests/SharedStorageTest.php
@@ -531,4 +531,32 @@ class SharedStorageTest extends TestCase {
$this->shareManager->deleteShare($share1);
$this->shareManager->deleteShare($share2);
}
+
+ public function testOwnerPermissions() {
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+
+ $share = $this->share(
+ \OCP\Share::SHARE_TYPE_USER,
+ $this->folder,
+ self::TEST_FILES_SHARING_API_USER1,
+ self::TEST_FILES_SHARING_API_USER2,
+ \OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_DELETE
+ );
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ $view = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files');
+ $this->assertTrue($view->file_exists($this->folder));
+
+ $view->file_put_contents($this->folder . '/newfile.txt', 'asd');
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+
+ $this->assertTrue($this->view->file_exists($this->folder . '/newfile.txt'));
+ $this->assertEquals(\OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_CREATE,
+ $this->view->getFileInfo($this->folder . '/newfile.txt')->getPermissions());
+
+ $this->view->unlink($this->folder);
+ $this->shareManager->deleteShare($share);
+
+ }
}
diff --git a/apps/files_trashbin/appinfo/info.xml b/apps/files_trashbin/appinfo/info.xml
index 04b8a7293cb..a756013568d 100644
--- a/apps/files_trashbin/appinfo/info.xml
+++ b/apps/files_trashbin/appinfo/info.xml
@@ -10,13 +10,13 @@ To prevent a user from running out of disk space, the Deleted files app will not
<licence>AGPL</licence>
<author>Bjoern Schiessle</author>
<default_enable/>
- <version>1.1.0</version>
+ <version>1.2.0</version>
<types>
<filesystem/>
</types>
<namespace>Files_Trashbin</namespace>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<documentation>
<user>user-trashbin</user>
diff --git a/apps/files_versions/appinfo/info.xml b/apps/files_versions/appinfo/info.xml
index 5eb0df91d8d..5304051d751 100644
--- a/apps/files_versions/appinfo/info.xml
+++ b/apps/files_versions/appinfo/info.xml
@@ -8,13 +8,13 @@
This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user’s directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user doesn’t run out of Quota because of versions.
In addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user’s currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation.
</description>
- <version>1.4.0</version>
+ <version>1.5.0</version>
<types>
<filesystem/>
</types>
<namespace>Files_Versions</namespace>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<documentation>
<user>user-versions</user>
diff --git a/apps/files_versions/l10n/bg_BG.js b/apps/files_versions/l10n/bg_BG.js
index ea6d2fccec5..8a43466c7ea 100644
--- a/apps/files_versions/l10n/bg_BG.js
+++ b/apps/files_versions/l10n/bg_BG.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Грешка при връщане на {file} към версия {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n байт","%n байта"],
"Restore" : "Възтановяване",
+ "No versions available" : "Няма налични версии",
"More versions..." : "Още версии...",
"No other versions available" : "Няма други налични версии"
},
diff --git a/apps/files_versions/l10n/bg_BG.json b/apps/files_versions/l10n/bg_BG.json
index 02056b635e2..9ebd62d82cc 100644
--- a/apps/files_versions/l10n/bg_BG.json
+++ b/apps/files_versions/l10n/bg_BG.json
@@ -4,6 +4,7 @@
"Failed to revert {file} to revision {timestamp}." : "Грешка при връщане на {file} към версия {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n байт","%n байта"],
"Restore" : "Възтановяване",
+ "No versions available" : "Няма налични версии",
"More versions..." : "Още версии...",
"No other versions available" : "Няма други налични версии"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files_versions/l10n/lt_LT.js b/apps/files_versions/l10n/lt_LT.js
index 7d7cfa98e34..5e119064661 100644
--- a/apps/files_versions/l10n/lt_LT.js
+++ b/apps/files_versions/l10n/lt_LT.js
@@ -1,11 +1,12 @@
OC.L10N.register(
"files_versions",
{
- "Could not revert: %s" : "Nepavyko atstatyti: %s",
+ "Could not revert: %s" : "Nepavyko sugrąžinti: %s",
"Versions" : "Versijos",
- "Failed to revert {file} to revision {timestamp}." : "Nepavyko atstatyti {file} į būseną {timestamp}.",
+ "Failed to revert {file} to revision {timestamp}." : "Nepavyko sugrąžinti {file} į {timestamp} būseną.",
"_%n byte_::_%n bytes_" : ["%n baitas","%n baitai","%n baitų"],
"Restore" : "Atkurti",
+ "No versions available" : "Nėra prieinama jokių versijų",
"More versions..." : "Daugiau versijų...",
"No other versions available" : "Daugiau nėra prieinama kitų versijų"
},
diff --git a/apps/files_versions/l10n/lt_LT.json b/apps/files_versions/l10n/lt_LT.json
index 2f061ecc252..0d673d6ac19 100644
--- a/apps/files_versions/l10n/lt_LT.json
+++ b/apps/files_versions/l10n/lt_LT.json
@@ -1,9 +1,10 @@
{ "translations": {
- "Could not revert: %s" : "Nepavyko atstatyti: %s",
+ "Could not revert: %s" : "Nepavyko sugrąžinti: %s",
"Versions" : "Versijos",
- "Failed to revert {file} to revision {timestamp}." : "Nepavyko atstatyti {file} į būseną {timestamp}.",
+ "Failed to revert {file} to revision {timestamp}." : "Nepavyko sugrąžinti {file} į {timestamp} būseną.",
"_%n byte_::_%n bytes_" : ["%n baitas","%n baitai","%n baitų"],
"Restore" : "Atkurti",
+ "No versions available" : "Nėra prieinama jokių versijų",
"More versions..." : "Daugiau versijų...",
"No other versions available" : "Daugiau nėra prieinama kitų versijų"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"
diff --git a/apps/files_versions/l10n/ru.js b/apps/files_versions/l10n/ru.js
index d25e8c6a6d0..63fb321cd2a 100644
--- a/apps/files_versions/l10n/ru.js
+++ b/apps/files_versions/l10n/ru.js
@@ -5,6 +5,7 @@ OC.L10N.register(
"Versions" : "Версии",
"Failed to revert {file} to revision {timestamp}." : "Не удалось откатить {file} к ревизии {timestamp}.",
"Restore" : "Откатить",
+ "No versions available" : "Нет доступных версий",
"More versions..." : "Ещё версии...",
"No other versions available" : "Других версий не доступно"
},
diff --git a/apps/files_versions/l10n/ru.json b/apps/files_versions/l10n/ru.json
index 4a501ed2d1d..8f6c2b7d932 100644
--- a/apps/files_versions/l10n/ru.json
+++ b/apps/files_versions/l10n/ru.json
@@ -3,6 +3,7 @@
"Versions" : "Версии",
"Failed to revert {file} to revision {timestamp}." : "Не удалось откатить {file} к ревизии {timestamp}.",
"Restore" : "Откатить",
+ "No versions available" : "Нет доступных версий",
"More versions..." : "Ещё версии...",
"No other versions available" : "Других версий не доступно"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
diff --git a/apps/lookup_server_connector/appinfo/info.xml b/apps/lookup_server_connector/appinfo/info.xml
index 88898c0b71b..7bada73bbbb 100644
--- a/apps/lookup_server_connector/appinfo/info.xml
+++ b/apps/lookup_server_connector/appinfo/info.xml
@@ -9,7 +9,7 @@
<version>1.0.0</version>
<category>other</category>
<dependencies>
- <owncloud min-version="11.0" max-version="11.0" />
+ <nextcloud min-version="12.0" max-version="12.0" />
</dependencies>
<default_enable/>
<types>
diff --git a/apps/provisioning_api/appinfo/info.xml b/apps/provisioning_api/appinfo/info.xml
index 0ebcee9a7f7..e633df00bd9 100644
--- a/apps/provisioning_api/appinfo/info.xml
+++ b/apps/provisioning_api/appinfo/info.xml
@@ -17,12 +17,12 @@
<documentation>
<admin>admin-provisioning-api</admin>
</documentation>
- <version>1.1.0</version>
+ <version>1.2.0</version>
<namespace>Provisioning_API</namespace>
<types>
<prevent_group_restriction/>
</types>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
</info>
diff --git a/apps/sharebymail/appinfo/info.xml b/apps/sharebymail/appinfo/info.xml
index 56977fcf285..5528f6158d9 100644
--- a/apps/sharebymail/appinfo/info.xml
+++ b/apps/sharebymail/appinfo/info.xml
@@ -5,11 +5,11 @@
<description>Share provider which allows you to share files by mail</description>
<licence>AGPL</licence>
<author>Bjoern Schiessle</author>
- <version>1.0.1</version>
+ <version>1.1.0</version>
<namespace>ShareByMail</namespace>
<category>other</category>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<default_enable/>
diff --git a/apps/sharebymail/lib/Activity.php b/apps/sharebymail/lib/Activity.php
index 5342d013ade..1c2f37dc382 100644
--- a/apps/sharebymail/lib/Activity.php
+++ b/apps/sharebymail/lib/Activity.php
@@ -196,7 +196,7 @@ class Activity implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/systemtags/appinfo/info.xml b/apps/systemtags/appinfo/info.xml
index 1d5f33207a4..02cafdb4d26 100644
--- a/apps/systemtags/appinfo/info.xml
+++ b/apps/systemtags/appinfo/info.xml
@@ -7,9 +7,9 @@
<licence>AGPL</licence>
<author>Vincent Petry, Joas Schilling</author>
<default_enable/>
- <version>1.1.3</version>
+ <version>1.2.0</version>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<namespace>SystemTags</namespace>
<types>
diff --git a/apps/testing/appinfo/info.xml b/apps/testing/appinfo/info.xml
index 41b07447d55..35ee3715b5c 100644
--- a/apps/testing/appinfo/info.xml
+++ b/apps/testing/appinfo/info.xml
@@ -5,8 +5,8 @@
<description>This app is only for testing! It is dangerous to have it enabled in a live instance</description>
<licence>AGPL</licence>
<author>Joas Schilling</author>
- <version>1.1.0</version>
+ <version>1.2.0</version>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
</info>
diff --git a/apps/theming/appinfo/info.xml b/apps/theming/appinfo/info.xml
index 3a8867dc6f4..9ded5c89b87 100644
--- a/apps/theming/appinfo/info.xml
+++ b/apps/theming/appinfo/info.xml
@@ -5,12 +5,12 @@
<description>Adjust the Nextcloud theme</description>
<licence>AGPL</licence>
<author>Nextcloud</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<namespace>Theming</namespace>
<category>other</category>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<types>
diff --git a/apps/theming/lib/Controller/IconController.php b/apps/theming/lib/Controller/IconController.php
index 4c25d911e5e..7c4e209d0df 100644
--- a/apps/theming/lib/Controller/IconController.php
+++ b/apps/theming/lib/Controller/IconController.php
@@ -94,6 +94,9 @@ class IconController extends Controller {
$iconFile = $this->imageManager->getCachedImage("icon-" . $app . '-' . str_replace("/","_",$image));
} catch (NotFoundException $exception) {
$icon = $this->iconBuilder->colorSvg($app, $image);
+ if ($icon === false || $icon === "") {
+ return new NotFoundResponse();
+ }
$iconFile = $this->imageManager->setCachedImage("icon-" . $app . '-' . str_replace("/","_",$image), $icon);
}
if ($iconFile !== false) {
diff --git a/apps/theming/lib/IconBuilder.php b/apps/theming/lib/IconBuilder.php
index 9cf0d051304..39a7722f0a5 100644
--- a/apps/theming/lib/IconBuilder.php
+++ b/apps/theming/lib/IconBuilder.php
@@ -159,7 +159,12 @@ class IconBuilder {
$finalIconFile->setImageArtifact('compose:args', "1,0,-0.5,0.5");
$finalIconFile->compositeImage($appIconFile, Imagick::COMPOSITE_ATOP, $offset_w, $offset_h);
$finalIconFile->setImageFormat('png24');
- $finalIconFile->resizeImage($size, $size, Imagick::INTERPOLATE_BICUBIC, 1, false);
+ if (defined("Imagick::INTERPOLATE_BICUBIC") === true) {
+ $filter = Imagick::INTERPOLATE_BICUBIC;
+ } else {
+ $filter = Imagick::FILTER_LANCZOS;
+ }
+ $finalIconFile->resizeImage($size, $size, $filter, 1, false);
$appIconFile->destroy();
return $finalIconFile;
@@ -172,7 +177,7 @@ class IconBuilder {
return false;
}
$svg = file_get_contents($imageFile);
- if ($svg !== false) {
+ if ($svg !== false && $svg !== "") {
$color = $this->util->elementColor($this->themingDefaults->getMailHeaderColor());
$svg = $this->util->colorizeSvg($svg, $color);
return $svg;
diff --git a/apps/twofactor_backupcodes/appinfo/info.xml b/apps/twofactor_backupcodes/appinfo/info.xml
index d5dd3f4db9e..5f956c6a86d 100644
--- a/apps/twofactor_backupcodes/appinfo/info.xml
+++ b/apps/twofactor_backupcodes/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>A two-factor auth backup codes provider</description>
<licence>agpl</licence>
<author>Christoph Wurst</author>
- <version>1.0.0</version>
+ <version>1.1.0</version>
<namespace>TwoFactorBackupCodes</namespace>
<category>other</category>
@@ -14,6 +14,6 @@
</two-factor-providers>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
</info>
diff --git a/apps/twofactor_backupcodes/l10n/fr.js b/apps/twofactor_backupcodes/l10n/fr.js
index 56b14ae0f6a..26dd596d44d 100644
--- a/apps/twofactor_backupcodes/l10n/fr.js
+++ b/apps/twofactor_backupcodes/l10n/fr.js
@@ -3,7 +3,7 @@ OC.L10N.register(
{
"Generate backup codes" : "Générer des codes de récupération",
"Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Les codes de récupération ont été générés. {{used}} codes sur {{total}} ont été utilisés.",
- "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Voici vos codes de récupération. Veuillez les sauvegarder et/ou les imprimer car vous ne pouvez plus y avoir accès ultérieurement",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Voici vos codes de récupération. Veuillez les sauvegarder et/ou les imprimer car vous ne pourrez plus y avoir accès ultérieurement",
"Save backup codes" : "Sauvegarder les codes de récupération",
"Print backup codes" : "Imprimer les codes de récupération",
"Regenerate backup codes" : "Régénérer les codes de récupération",
diff --git a/apps/twofactor_backupcodes/l10n/fr.json b/apps/twofactor_backupcodes/l10n/fr.json
index 275fbb7e2f2..a7f2df0d377 100644
--- a/apps/twofactor_backupcodes/l10n/fr.json
+++ b/apps/twofactor_backupcodes/l10n/fr.json
@@ -1,7 +1,7 @@
{ "translations": {
"Generate backup codes" : "Générer des codes de récupération",
"Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Les codes de récupération ont été générés. {{used}} codes sur {{total}} ont été utilisés.",
- "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Voici vos codes de récupération. Veuillez les sauvegarder et/ou les imprimer car vous ne pouvez plus y avoir accès ultérieurement",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Voici vos codes de récupération. Veuillez les sauvegarder et/ou les imprimer car vous ne pourrez plus y avoir accès ultérieurement",
"Save backup codes" : "Sauvegarder les codes de récupération",
"Print backup codes" : "Imprimer les codes de récupération",
"Regenerate backup codes" : "Régénérer les codes de récupération",
diff --git a/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php b/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
index 8b56724fcec..f64e2e9e60b 100644
--- a/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
+++ b/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
@@ -23,12 +23,12 @@ namespace OCA\TwoFactorBackupCodes\Db;
use OCP\AppFramework\Db\Mapper;
use OCP\DB\QueryBuilder\IQueryBuilder;
-use OCP\IDb;
+use OCP\IDBConnection;
use OCP\IUser;
class BackupCodeMapper extends Mapper {
- public function __construct(IDb $db) {
+ public function __construct(IDBConnection $db) {
parent::__construct($db, 'twofactor_backup_codes');
}
diff --git a/apps/updatenotification/appinfo/info.xml b/apps/updatenotification/appinfo/info.xml
index 4cd84ac827b..d920e866f1c 100644
--- a/apps/updatenotification/appinfo/info.xml
+++ b/apps/updatenotification/appinfo/info.xml
@@ -5,11 +5,11 @@
<description>Displays update notifications for ownCloud and provides the SSO for the updater.</description>
<licence>AGPL</licence>
<author>Lukas Reschke</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<namespace>UpdateNotification</namespace>
<default_enable/>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<background-jobs>
diff --git a/apps/updatenotification/l10n/de.js b/apps/updatenotification/l10n/de.js
index c473915f853..a64b952e9a5 100644
--- a/apps/updatenotification/l10n/de.js
+++ b/apps/updatenotification/l10n/de.js
@@ -19,6 +19,7 @@ OC.L10N.register(
"Only notification for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.",
"The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Du benutzt PHP %s. Um die Aktualisierung auf Nextcloud 11 und höher zu ermöglichen ist wenigstens PHP 5.6 erforderlich. Nach Aktualisierung der PHP-Version wirst Du wieder Benachrichtigungen über neuere Nextcloud-Versionen erhalten.",
"Updater" : "Updater"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/de.json b/apps/updatenotification/l10n/de.json
index 2f8012fd3ad..45b59ec2344 100644
--- a/apps/updatenotification/l10n/de.json
+++ b/apps/updatenotification/l10n/de.json
@@ -17,6 +17,7 @@
"Only notification for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.",
"The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Du benutzt PHP %s. Um die Aktualisierung auf Nextcloud 11 und höher zu ermöglichen ist wenigstens PHP 5.6 erforderlich. Nach Aktualisierung der PHP-Version wirst Du wieder Benachrichtigungen über neuere Nextcloud-Versionen erhalten.",
"Updater" : "Updater"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/de_DE.js b/apps/updatenotification/l10n/de_DE.js
index fea2de004dd..b0fbbdebd22 100644
--- a/apps/updatenotification/l10n/de_DE.js
+++ b/apps/updatenotification/l10n/de_DE.js
@@ -19,6 +19,7 @@ OC.L10N.register(
"Only notification for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.",
"The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Sie benutzen PHP %s. Um die Aktualisierung auf Nextcloud 11 und höher zu ermöglichen ist wenigstens PHP 5.6 erforderlich. Nach Aktualisierung der PHP-Version werden Sie wieder Benachrichtigungen über neuere Nextcloud-Versionen erhalten.",
"Updater" : "Updater"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/de_DE.json b/apps/updatenotification/l10n/de_DE.json
index 430943425fd..89064c26eed 100644
--- a/apps/updatenotification/l10n/de_DE.json
+++ b/apps/updatenotification/l10n/de_DE.json
@@ -17,6 +17,7 @@
"Only notification for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.",
"The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Sie benutzen PHP %s. Um die Aktualisierung auf Nextcloud 11 und höher zu ermöglichen ist wenigstens PHP 5.6 erforderlich. Nach Aktualisierung der PHP-Version werden Sie wieder Benachrichtigungen über neuere Nextcloud-Versionen erhalten.",
"Updater" : "Updater"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/es.js b/apps/updatenotification/l10n/es.js
index c0d1300412a..00ffa0e9290 100644
--- a/apps/updatenotification/l10n/es.js
+++ b/apps/updatenotification/l10n/es.js
@@ -19,6 +19,7 @@ OC.L10N.register(
"Only notification for app updates are available." : "Solo están disponibles las notificaciones para actualizaciones de apps",
"The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace obsoletas las notificaciones dedicadas para el servidor.",
"The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Esta usando PHP %s. Para permitir actualizar a Nextcloud 11 y superior necesita usar al menos PHP 5.6. Una vez que haya actualizado su versión de PHP será capaz de recibir las notificaciones de actualización para estas nuevas versiones.",
"Updater" : "Actualizador"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/es.json b/apps/updatenotification/l10n/es.json
index 4a916a9786c..2c05dc19830 100644
--- a/apps/updatenotification/l10n/es.json
+++ b/apps/updatenotification/l10n/es.json
@@ -17,6 +17,7 @@
"Only notification for app updates are available." : "Solo están disponibles las notificaciones para actualizaciones de apps",
"The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace obsoletas las notificaciones dedicadas para el servidor.",
"The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Esta usando PHP %s. Para permitir actualizar a Nextcloud 11 y superior necesita usar al menos PHP 5.6. Una vez que haya actualizado su versión de PHP será capaz de recibir las notificaciones de actualización para estas nuevas versiones.",
"Updater" : "Actualizador"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/fr.js b/apps/updatenotification/l10n/fr.js
index 090f25fe12a..6b035827049 100644
--- a/apps/updatenotification/l10n/fr.js
+++ b/apps/updatenotification/l10n/fr.js
@@ -19,6 +19,7 @@ OC.L10N.register(
"Only notification for app updates are available." : "Seules les notifications pour les mises à jour d'applications sont diponibles.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Le canal de mise à jour sélectionné rend obsolètes les notifications dédiées au serveur.",
"The selected update channel does not support updates of the server." : "Le canal de mises à jour sélectionné ne supporte pas les mises à jour du serveur.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Vous utilisé PHP %s. Pour pouvoir mettre à jour vers Nextcloud 11 et supérieur, vous devez utiliser au minimum PHP 5.6. Une fois votre version PHP mis à jour, vous pourrez recevoir des notifications de mise à jour pour ces nouvelles versions. ",
"Updater" : "Mises à jour"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/updatenotification/l10n/fr.json b/apps/updatenotification/l10n/fr.json
index d2c2bbf9b0f..63341f10185 100644
--- a/apps/updatenotification/l10n/fr.json
+++ b/apps/updatenotification/l10n/fr.json
@@ -17,6 +17,7 @@
"Only notification for app updates are available." : "Seules les notifications pour les mises à jour d'applications sont diponibles.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Le canal de mise à jour sélectionné rend obsolètes les notifications dédiées au serveur.",
"The selected update channel does not support updates of the server." : "Le canal de mises à jour sélectionné ne supporte pas les mises à jour du serveur.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Vous utilisé PHP %s. Pour pouvoir mettre à jour vers Nextcloud 11 et supérieur, vous devez utiliser au minimum PHP 5.6. Une fois votre version PHP mis à jour, vous pourrez recevoir des notifications de mise à jour pour ces nouvelles versions. ",
"Updater" : "Mises à jour"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/hu_HU.js b/apps/updatenotification/l10n/hu_HU.js
index f5b6182799c..31711425204 100644
--- a/apps/updatenotification/l10n/hu_HU.js
+++ b/apps/updatenotification/l10n/hu_HU.js
@@ -19,6 +19,7 @@ OC.L10N.register(
"Only notification for app updates are available." : "Csak az értesítő alkalmazás frissítései érhetők el.",
"The selected update channel makes dedicated notifications for the server obsolete." : "A kiválasztott frissítési csatorna dedikált értesítéseket jelenít meg a szerver elavulásakor.",
"The selected update channel does not support updates of the server." : "A kiválasztott frissítése csatorna nem támogatja a szerver frissítéseit.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "PHP %s verziót futtatod. A Nextcloud 11-re vagy újabbra frissítéshez legalább PHP 5.6-ra van szükség. Miután frissítetted a PHP-t értesítéseket fogsz kapni az újabb verziók frissítési lehetőségeiről.",
"Updater" : "Frissítéskezelő"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/hu_HU.json b/apps/updatenotification/l10n/hu_HU.json
index e69e8e8aaa4..82dad2335a8 100644
--- a/apps/updatenotification/l10n/hu_HU.json
+++ b/apps/updatenotification/l10n/hu_HU.json
@@ -17,6 +17,7 @@
"Only notification for app updates are available." : "Csak az értesítő alkalmazás frissítései érhetők el.",
"The selected update channel makes dedicated notifications for the server obsolete." : "A kiválasztott frissítési csatorna dedikált értesítéseket jelenít meg a szerver elavulásakor.",
"The selected update channel does not support updates of the server." : "A kiválasztott frissítése csatorna nem támogatja a szerver frissítéseit.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "PHP %s verziót futtatod. A Nextcloud 11-re vagy újabbra frissítéshez legalább PHP 5.6-ra van szükség. Miután frissítetted a PHP-t értesítéseket fogsz kapni az újabb verziók frissítési lehetőségeiről.",
"Updater" : "Frissítéskezelő"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/it.js b/apps/updatenotification/l10n/it.js
index ed4e253e3aa..ecb27999b46 100644
--- a/apps/updatenotification/l10n/it.js
+++ b/apps/updatenotification/l10n/it.js
@@ -19,6 +19,7 @@ OC.L10N.register(
"Only notification for app updates are available." : "Sono disponibili solo le notifiche per gli aggiornamenti delle applicazioni.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Il canale di aggiornamento selezionato rende obsolete le notifiche dedicate al server.",
"The selected update channel does not support updates of the server." : "Il canale di aggiornamento selezionato non supporta gli aggiornamenti del server.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Stai eseguendo PHP %s. Per consentirti di aggiornare a Nextcloud 11 e successivi, devi eseguire almeno PHP 5.6. Una volta aggiornata la tua versione di PHP, sarai in grado di ricevere notifiche di aggiornamento per questo versioni più recenti.",
"Updater" : "Strumento di aggiornamento"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/it.json b/apps/updatenotification/l10n/it.json
index 5415f3ed40d..7f05112bda0 100644
--- a/apps/updatenotification/l10n/it.json
+++ b/apps/updatenotification/l10n/it.json
@@ -17,6 +17,7 @@
"Only notification for app updates are available." : "Sono disponibili solo le notifiche per gli aggiornamenti delle applicazioni.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Il canale di aggiornamento selezionato rende obsolete le notifiche dedicate al server.",
"The selected update channel does not support updates of the server." : "Il canale di aggiornamento selezionato non supporta gli aggiornamenti del server.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Stai eseguendo PHP %s. Per consentirti di aggiornare a Nextcloud 11 e successivi, devi eseguire almeno PHP 5.6. Una volta aggiornata la tua versione di PHP, sarai in grado di ricevere notifiche di aggiornamento per questo versioni più recenti.",
"Updater" : "Strumento di aggiornamento"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/nl.js b/apps/updatenotification/l10n/nl.js
index 1002fa7e266..884565391ab 100644
--- a/apps/updatenotification/l10n/nl.js
+++ b/apps/updatenotification/l10n/nl.js
@@ -19,6 +19,7 @@ OC.L10N.register(
"Only notification for app updates are available." : "Er zijn alleen meldingen voor apps beschikbaar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Het geselecteerde updatekanaal maakt overbodig om serverspecifieke meldingen apart te genereren.",
"The selected update channel does not support updates of the server." : "Het geselecteerde updatekanaal ondersteunt geen updates voor de server.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Je draait PHP %s. Om te kunnen upgraden naar Nextcloud 11 of hoger, moet je minimaal PHP 5.6 draaien. Pas nadat je de PHP versie hebt bijgewerkt, zul je notificaties voor update naar de nieuwe versies ontvangen.",
"Updater" : "Updater"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/nl.json b/apps/updatenotification/l10n/nl.json
index a6793d2f740..8e3f0caadcc 100644
--- a/apps/updatenotification/l10n/nl.json
+++ b/apps/updatenotification/l10n/nl.json
@@ -17,6 +17,7 @@
"Only notification for app updates are available." : "Er zijn alleen meldingen voor apps beschikbaar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Het geselecteerde updatekanaal maakt overbodig om serverspecifieke meldingen apart te genereren.",
"The selected update channel does not support updates of the server." : "Het geselecteerde updatekanaal ondersteunt geen updates voor de server.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Je draait PHP %s. Om te kunnen upgraden naar Nextcloud 11 of hoger, moet je minimaal PHP 5.6 draaien. Pas nadat je de PHP versie hebt bijgewerkt, zul je notificaties voor update naar de nieuwe versies ontvangen.",
"Updater" : "Updater"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/pt_BR.js b/apps/updatenotification/l10n/pt_BR.js
index f55dec6b790..f8288635fbd 100644
--- a/apps/updatenotification/l10n/pt_BR.js
+++ b/apps/updatenotification/l10n/pt_BR.js
@@ -19,6 +19,7 @@ OC.L10N.register(
"Only notification for app updates are available." : "Só está disponível notificação para atualizações de aplicativos.",
"The selected update channel makes dedicated notifications for the server obsolete." : "O canal de atualização selecionado fornece notificações dedicadas para o servidor desatualizado.",
"The selected update channel does not support updates of the server." : "O canal de atualização selecionado não fornece suporte a atualizações do servidor.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Você está rodando o PHP %s. Para poder atualizar para Nextcloud11 ou maior é necessário a utilização a partir do PHP 5.6. Assim que você atualizar seu PHP será possível receber avisos de atualização para novas versões.",
"Updater" : "Atualizador"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/updatenotification/l10n/pt_BR.json b/apps/updatenotification/l10n/pt_BR.json
index 72768436c62..37cb75e43b4 100644
--- a/apps/updatenotification/l10n/pt_BR.json
+++ b/apps/updatenotification/l10n/pt_BR.json
@@ -17,6 +17,7 @@
"Only notification for app updates are available." : "Só está disponível notificação para atualizações de aplicativos.",
"The selected update channel makes dedicated notifications for the server obsolete." : "O canal de atualização selecionado fornece notificações dedicadas para o servidor desatualizado.",
"The selected update channel does not support updates of the server." : "O canal de atualização selecionado não fornece suporte a atualizações do servidor.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Você está rodando o PHP %s. Para poder atualizar para Nextcloud11 ou maior é necessário a utilização a partir do PHP 5.6. Assim que você atualizar seu PHP será possível receber avisos de atualização para novas versões.",
"Updater" : "Atualizador"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml
index 87eb61a0fba..7535790fa57 100644
--- a/apps/user_ldap/appinfo/info.xml
+++ b/apps/user_ldap/appinfo/info.xml
@@ -9,7 +9,7 @@ A user logs into ownCloud with their LDAP or AD credentials, and is granted acce
</description>
<licence>AGPL</licence>
<author>Dominik Schmidt and Arthur Schiwon</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<types>
<authentication/>
</types>
@@ -18,7 +18,7 @@ A user logs into ownCloud with their LDAP or AD credentials, and is granted acce
</documentation>
<dependencies>
<lib>ldap</lib>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<namespace>User_LDAP</namespace>
diff --git a/apps/user_ldap/l10n/es.js b/apps/user_ldap/l10n/es.js
index 87352f2bd5d..8394ca780cc 100644
--- a/apps/user_ldap/l10n/es.js
+++ b/apps/user_ldap/l10n/es.js
@@ -47,6 +47,7 @@ OC.L10N.register(
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "El marcador de posición %uid no está presente. Será reemplazado con el nombre de inicio de sesión cuando se consulte LDAP / AD.",
"Please provide a login name to test against" : "Por favor suministre un nombre de inicio de sesión para probar",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo fue deshabilitado, porque el servidor LDAP / AD no admite memberOf.",
+ "Password change rejected. Hint: " : "Contraseña rechazada. Pista:",
"LDAP / AD integration" : "Integración LDAP / AD",
"_%s group found_::_%s groups found_" : ["Grupo %s encontrado","Grupos %s encontrados"],
"_%s user found_::_%s users found_" : ["Usuario %s encontrado","Usuarios %s encontrados"],
@@ -142,6 +143,9 @@ OC.L10N.register(
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando se active, se permitirán grupos que contengan otros grupos (solo funciona si el atributo de miembro de grupo contiene DNs).",
"Paging chunksize" : "Tamaño de los fragmentos de paginación",
"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.)" : "Tamaño de los fragmentos usado para búsquedas LDAP paginadas que pueden devolver resultados voluminosos, como enumeración de usuarios o de grupos. (Si se establece en 0, se deshabilitan las búsquedas LDAP paginadas en esas situaciones.)",
+ "Enable LDAP password changes per user" : "Permitir cambios de contraseñas LDAP por usuario",
+ "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." : "Permite a usuarios LDAP cambiar su contraseña y permite administradores y administradores de grupos, cambiar la contraseña de sus usuarios LDAP. SOlo funciona cuando las políticas de control de acceso están configuradas de acuerdo a las del servidor LDAP. Como las contraseñas se mandan en texto plano al servidor, LDAP, encripción del transporte debe ser usado y cifrado de las contraseñas debe ser configurado en el servidor LDAP.",
+ "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)",
"Special Attributes" : "Atributos especiales",
"Quota Field" : "Cuota",
"Quota Default" : "Cuota por defecto",
@@ -160,6 +164,7 @@ OC.L10N.register(
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios son usados para almacenar y asignar (meta) datos. Con el fin de identificar de forma precisa y reconocer usuarios, cada usuario de LDAP tendrá un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es cacheado para reducir la interacción entre el LDAP, pero no es usado para identificar. Si el DN cambia, los cambios serán aplicados. El nombre de usuario interno es usado por encima de todo. Limpiar los mapeos dejará restos por todas partes, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, únicamente en una fase de desarrollo o experimental.",
"Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP",
"Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP",
- "Limit %s access to users meeting these criteria:" : "Limitado %s acceso a los usuarios del encuentro con este criterio."
+ "Limit %s access to users meeting these criteria:" : "Limitado %s acceso a los usuarios del encuentro con este criterio.",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "De manera predeterminada el nombre de usuario interno será creado desde el atributo UUID. Eso asegura que el nombre de usuario es único y los caracteres no necesitan ser convertidos. El nombre de usuario interno tiene la única restricción de que solo estos caracteres son válidos: [ a-zA-Z0-9_.@- ]. Otros caracteres son reemplazados con su ASCII correspondiente o simplemente omitidos. De existir colisiones un numero será agregado. El nombre de usuario interno es usado para identificar a un usuario internamente. También es el nombre por defecto para la carpeta de inicio. También es parte de los URLs remotos, por ejemplo para todos los servicios *DAV. Con esta configuración el comportamiento predeterminado puede ser sobrescrito. Para lograr un comportamiento como antes de ownCloud 5 ingrese el nombre del atributo del usuario en el siguiente campo. Déjelo vacío para el comportamiento predefinido. Los cambios solo tendrán efecto en usuarios LDAP recientemente agregados (mapeados)."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/es.json b/apps/user_ldap/l10n/es.json
index c7113d2591a..cf2d433965b 100644
--- a/apps/user_ldap/l10n/es.json
+++ b/apps/user_ldap/l10n/es.json
@@ -45,6 +45,7 @@
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "El marcador de posición %uid no está presente. Será reemplazado con el nombre de inicio de sesión cuando se consulte LDAP / AD.",
"Please provide a login name to test against" : "Por favor suministre un nombre de inicio de sesión para probar",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo fue deshabilitado, porque el servidor LDAP / AD no admite memberOf.",
+ "Password change rejected. Hint: " : "Contraseña rechazada. Pista:",
"LDAP / AD integration" : "Integración LDAP / AD",
"_%s group found_::_%s groups found_" : ["Grupo %s encontrado","Grupos %s encontrados"],
"_%s user found_::_%s users found_" : ["Usuario %s encontrado","Usuarios %s encontrados"],
@@ -140,6 +141,9 @@
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando se active, se permitirán grupos que contengan otros grupos (solo funciona si el atributo de miembro de grupo contiene DNs).",
"Paging chunksize" : "Tamaño de los fragmentos de paginación",
"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.)" : "Tamaño de los fragmentos usado para búsquedas LDAP paginadas que pueden devolver resultados voluminosos, como enumeración de usuarios o de grupos. (Si se establece en 0, se deshabilitan las búsquedas LDAP paginadas en esas situaciones.)",
+ "Enable LDAP password changes per user" : "Permitir cambios de contraseñas LDAP por usuario",
+ "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." : "Permite a usuarios LDAP cambiar su contraseña y permite administradores y administradores de grupos, cambiar la contraseña de sus usuarios LDAP. SOlo funciona cuando las políticas de control de acceso están configuradas de acuerdo a las del servidor LDAP. Como las contraseñas se mandan en texto plano al servidor, LDAP, encripción del transporte debe ser usado y cifrado de las contraseñas debe ser configurado en el servidor LDAP.",
+ "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)",
"Special Attributes" : "Atributos especiales",
"Quota Field" : "Cuota",
"Quota Default" : "Cuota por defecto",
@@ -158,6 +162,7 @@
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios son usados para almacenar y asignar (meta) datos. Con el fin de identificar de forma precisa y reconocer usuarios, cada usuario de LDAP tendrá un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es cacheado para reducir la interacción entre el LDAP, pero no es usado para identificar. Si el DN cambia, los cambios serán aplicados. El nombre de usuario interno es usado por encima de todo. Limpiar los mapeos dejará restos por todas partes, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, únicamente en una fase de desarrollo o experimental.",
"Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP",
"Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP",
- "Limit %s access to users meeting these criteria:" : "Limitado %s acceso a los usuarios del encuentro con este criterio."
+ "Limit %s access to users meeting these criteria:" : "Limitado %s acceso a los usuarios del encuentro con este criterio.",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "De manera predeterminada el nombre de usuario interno será creado desde el atributo UUID. Eso asegura que el nombre de usuario es único y los caracteres no necesitan ser convertidos. El nombre de usuario interno tiene la única restricción de que solo estos caracteres son válidos: [ a-zA-Z0-9_.@- ]. Otros caracteres son reemplazados con su ASCII correspondiente o simplemente omitidos. De existir colisiones un numero será agregado. El nombre de usuario interno es usado para identificar a un usuario internamente. También es el nombre por defecto para la carpeta de inicio. También es parte de los URLs remotos, por ejemplo para todos los servicios *DAV. Con esta configuración el comportamiento predeterminado puede ser sobrescrito. Para lograr un comportamiento como antes de ownCloud 5 ingrese el nombre del atributo del usuario en el siguiente campo. Déjelo vacío para el comportamiento predefinido. Los cambios solo tendrán efecto en usuarios LDAP recientemente agregados (mapeados)."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js
index 037adac7ac3..7ede968376b 100644
--- a/apps/user_ldap/l10n/fr.js
+++ b/apps/user_ldap/l10n/fr.js
@@ -5,7 +5,7 @@ OC.L10N.register(
"Failed to delete the server configuration" : "Échec de la suppression de la configuration du serveur",
"The configuration is invalid: anonymous bind is not allowed." : "La configuration n'est pas valide : le lien anonyme n'est pas autorisé.",
"The configuration is valid and the connection could be established!" : "La configuration est valide et la connexion peut être établie !",
- "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuration est valable, mais le bind a échoué. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.",
+ "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuration est valable, mais le Bind a échoué. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.",
"The configuration is invalid. Please have a look at the logs for further details." : "La configuration n'est pas valable. Veuillez consulter les logs pour plus de détails.",
"No action specified" : "Aucune action spécifiée",
"No configuration specified" : "Aucune configuration spécifiée",
diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json
index 89d9190fa32..8a85822fbf7 100644
--- a/apps/user_ldap/l10n/fr.json
+++ b/apps/user_ldap/l10n/fr.json
@@ -3,7 +3,7 @@
"Failed to delete the server configuration" : "Échec de la suppression de la configuration du serveur",
"The configuration is invalid: anonymous bind is not allowed." : "La configuration n'est pas valide : le lien anonyme n'est pas autorisé.",
"The configuration is valid and the connection could be established!" : "La configuration est valide et la connexion peut être établie !",
- "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuration est valable, mais le bind a échoué. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.",
+ "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuration est valable, mais le Bind a échoué. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.",
"The configuration is invalid. Please have a look at the logs for further details." : "La configuration n'est pas valable. Veuillez consulter les logs pour plus de détails.",
"No action specified" : "Aucune action spécifiée",
"No configuration specified" : "Aucune configuration spécifiée",
diff --git a/apps/workflowengine/appinfo/info.xml b/apps/workflowengine/appinfo/info.xml
index 83f4be9e398..b037174d348 100644
--- a/apps/workflowengine/appinfo/info.xml
+++ b/apps/workflowengine/appinfo/info.xml
@@ -5,7 +5,7 @@
<description></description>
<licence>AGPL</licence>
<author>Morris Jobke</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<namespace>WorkflowEngine</namespace>
<category>other</category>
@@ -18,7 +18,7 @@
</types>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<settings>
diff --git a/apps/workflowengine/l10n/bg_BG.js b/apps/workflowengine/l10n/bg_BG.js
new file mode 100644
index 00000000000..d0392051f60
--- /dev/null
+++ b/apps/workflowengine/l10n/bg_BG.js
@@ -0,0 +1,71 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "Successfully saved" : "Успешно запазен",
+ "Saving failed:" : "Запазването се провали:",
+ "File mime type" : "Разширения",
+ "is" : "е",
+ "is not" : "не е",
+ "matches" : "съвпадения",
+ "does not match" : "не съвпада",
+ "Example: {placeholder}" : "Пример: {placeholder}",
+ "File size (upload)" : "Големина на файл (качване)",
+ "less" : "по-малко",
+ "less or equals" : "по-малко или равно",
+ "greater or equals" : "по-голямо или равно",
+ "greater" : "равно",
+ "File system tag" : "Таг на файлова система",
+ "is tagged with" : "е тагнат с",
+ "is not tagged with" : "не е тагнат с",
+ "Select tag…" : "Избери таг...",
+ "Request remote address" : "Искане на отдалечен адрес",
+ "matches IPv4" : "съвпада IPv4",
+ "does not match IPv4" : "не съвпада IPv4",
+ "matches IPv6" : "съвпада IPv6",
+ "does not match IPv6" : "не съвпада IPv6",
+ "Request time" : "Врене ба заявка",
+ "between" : "между",
+ "not between" : "не между",
+ "Start" : "Начало",
+ "End" : "Край",
+ "Select timezone…" : "Изберете часови пояс...",
+ "Request URL" : "URL на заявка",
+ "Predefined URLs" : "Предефинирани URL-и",
+ "Files WebDAV" : "Файлове WebDAV",
+ "Request user agent" : "Потребителски агент на заявка",
+ "Sync clients" : "Синхронизиране на клиенти",
+ "Android client" : "Android клиент",
+ "iOS client" : "iOS клиент",
+ "Desktop client" : "Клиент за настолен компютър",
+ "User group membership" : "Членство към потребителска група",
+ "is member of" : "е член на",
+ "is not member of" : "не е член на",
+ "The given operator is invalid" : "Даденият оператор е невалиден",
+ "The given regular expression is invalid" : "Даденият израз е невалиден",
+ "The given file size is invalid" : "Даденият размер на файла не е валиден",
+ "The given tag id is invalid" : "Даденият таг код не е валиден",
+ "The given IP range is invalid" : "Даденият IP диапазон е невалиден",
+ "The given IP range is not valid for IPv4" : "Даденият IP диапазон не е валиден за IPv4",
+ "The given IP range is not valid for IPv6" : "Даденият IP диапазон не е валиден за IPv6",
+ "The given time span is invalid" : "Даденият период е невалиден",
+ "The given start time is invalid" : "Даденият начален час е невалиден",
+ "The given end time is invalid" : "Даденият краен час е невалиден",
+ "The given group does not exist" : "Дадената група не съществува",
+ "Check %s is invalid or does not exist" : "Проверка %s не е валидна или несъществува",
+ "Operation #%s does not exist" : "Операция #%s не съществува",
+ "Operation %s does not exist" : "Операция %s не съществува",
+ "Operation %s is invalid" : "Операция %s е невалидна",
+ "Check %s does not exist" : "Проверка %s не съществува",
+ "Check %s is invalid" : "Проверка %s е невалидна",
+ "Check #%s does not exist" : "Проверка #%s не съществува",
+ "Workflow" : "Работен процес",
+ "Open documentation" : "Отвори документация",
+ "Add rule group" : "Добави група правила",
+ "Short rule description" : "Кратко описание на правило",
+ "Add rule" : "Добави правило",
+ "Reset" : "Възстанови",
+ "Save" : "Запази",
+ "Saving…" : "Запазване...",
+ "Loading…" : "Зареждане..."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/bg_BG.json b/apps/workflowengine/l10n/bg_BG.json
new file mode 100644
index 00000000000..e4c15879e0f
--- /dev/null
+++ b/apps/workflowengine/l10n/bg_BG.json
@@ -0,0 +1,69 @@
+{ "translations": {
+ "Successfully saved" : "Успешно запазен",
+ "Saving failed:" : "Запазването се провали:",
+ "File mime type" : "Разширения",
+ "is" : "е",
+ "is not" : "не е",
+ "matches" : "съвпадения",
+ "does not match" : "не съвпада",
+ "Example: {placeholder}" : "Пример: {placeholder}",
+ "File size (upload)" : "Големина на файл (качване)",
+ "less" : "по-малко",
+ "less or equals" : "по-малко или равно",
+ "greater or equals" : "по-голямо или равно",
+ "greater" : "равно",
+ "File system tag" : "Таг на файлова система",
+ "is tagged with" : "е тагнат с",
+ "is not tagged with" : "не е тагнат с",
+ "Select tag…" : "Избери таг...",
+ "Request remote address" : "Искане на отдалечен адрес",
+ "matches IPv4" : "съвпада IPv4",
+ "does not match IPv4" : "не съвпада IPv4",
+ "matches IPv6" : "съвпада IPv6",
+ "does not match IPv6" : "не съвпада IPv6",
+ "Request time" : "Врене ба заявка",
+ "between" : "между",
+ "not between" : "не между",
+ "Start" : "Начало",
+ "End" : "Край",
+ "Select timezone…" : "Изберете часови пояс...",
+ "Request URL" : "URL на заявка",
+ "Predefined URLs" : "Предефинирани URL-и",
+ "Files WebDAV" : "Файлове WebDAV",
+ "Request user agent" : "Потребителски агент на заявка",
+ "Sync clients" : "Синхронизиране на клиенти",
+ "Android client" : "Android клиент",
+ "iOS client" : "iOS клиент",
+ "Desktop client" : "Клиент за настолен компютър",
+ "User group membership" : "Членство към потребителска група",
+ "is member of" : "е член на",
+ "is not member of" : "не е член на",
+ "The given operator is invalid" : "Даденият оператор е невалиден",
+ "The given regular expression is invalid" : "Даденият израз е невалиден",
+ "The given file size is invalid" : "Даденият размер на файла не е валиден",
+ "The given tag id is invalid" : "Даденият таг код не е валиден",
+ "The given IP range is invalid" : "Даденият IP диапазон е невалиден",
+ "The given IP range is not valid for IPv4" : "Даденият IP диапазон не е валиден за IPv4",
+ "The given IP range is not valid for IPv6" : "Даденият IP диапазон не е валиден за IPv6",
+ "The given time span is invalid" : "Даденият период е невалиден",
+ "The given start time is invalid" : "Даденият начален час е невалиден",
+ "The given end time is invalid" : "Даденият краен час е невалиден",
+ "The given group does not exist" : "Дадената група не съществува",
+ "Check %s is invalid or does not exist" : "Проверка %s не е валидна или несъществува",
+ "Operation #%s does not exist" : "Операция #%s не съществува",
+ "Operation %s does not exist" : "Операция %s не съществува",
+ "Operation %s is invalid" : "Операция %s е невалидна",
+ "Check %s does not exist" : "Проверка %s не съществува",
+ "Check %s is invalid" : "Проверка %s е невалидна",
+ "Check #%s does not exist" : "Проверка #%s не съществува",
+ "Workflow" : "Работен процес",
+ "Open documentation" : "Отвори документация",
+ "Add rule group" : "Добави група правила",
+ "Short rule description" : "Кратко описание на правило",
+ "Add rule" : "Добави правило",
+ "Reset" : "Възстанови",
+ "Save" : "Запази",
+ "Saving…" : "Запазване...",
+ "Loading…" : "Зареждане..."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/build/autoloaderchecker.sh b/build/autoloaderchecker.sh
index a1f52da2d87..0a1fb8ac351 100644
--- a/build/autoloaderchecker.sh
+++ b/build/autoloaderchecker.sh
@@ -8,7 +8,6 @@ then
else
echo "Composer not found: fetching"
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
- php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
fi
diff --git a/build/integration/data/bjoern.vcf b/build/integration/data/bjoern.vcf
new file mode 100644
index 00000000000..03decaf997e
--- /dev/null
+++ b/build/integration/data/bjoern.vcf
@@ -0,0 +1,51 @@
+BEGIN:VCARD
+VERSION:3.0
+FN:Björn Schießle
+ORG:Nextcloud
+PHOTO;ENCODING=b;TYPE=jpeg:/9j/4AAQSkZJRgABAQEAbABrAAD//gA7Q1JFQVRPUjogZ2Qt
+ anBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2ODApLCBxdWFsaXR5ID0gOTAK/9sAQwAIBgYHBg
+ UIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04Mjwu
+ MzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
+ IyMjIyMjIyMjIyMjIyMjIy/8AAEQgAUABQAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAA
+ AAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZ
+ GhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVm
+ Z2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIyc
+ rS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME
+ BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQ
+ kjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpz
+ dHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1N
+ XW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A8/zqMcG0GTZKh3R/wouMYxVG
+ SFVtyqoDjocVMuovJZym3kYLtLAlumB1Ofc1FYmR9KaWVtzAYH8q54bmEE7mLHay3d2IYUyzcV
+ 1Vn4VsLaITX8hkkI4j3YFaHg7QJryaOGKNRLcfM0h6ovrXsVh8MNKkt1893Y+vrWt9bHVGGl2e
+ KyW+mBW8i3iVV43beW9ce1YrJapcPKW2xzfLIGbqM9iORX0PcfC3Qw27Yx+hrkvEvwjs5LR5tJ
+ kMdzHllRuje1JtbMv2V1dHjmpwzXMKTRxRsOg29UwOme4rFwVToG9T6V0c9pLFC58tYbmBsMnf
+ IrBlG+X5djscE+WtEVbQwaa3IBnAwcc1u27wuq2lum8qCWlZtoJ9cVSj0+ZnQNBMwI3EIOn1Pa
+ rOoyvCyJFxEy8MowGHTj24pNpuxMlc2g+m6fNPC6b125V22jCk9PSpAy3NmzIyvu4BQcYrK1Zb
+ VdPhFrIZJFXdKWGDtbp296v28BstIRN2WTk4P51mtNTOLtqenfCVIpdNldV+dcKSa9bjkk2gYA
+ ArxHwHqb6F4dvLxVX/AI+NoON38I7D6102geM9R1XX47KRColbCkxFMVfU9SCvFI9MMjkc1VmA
+ IJrlfE2saro8gW3JbJ+XZHvNLoXiWbVFWK4EvmMM4kh8v8qTdy1C2x494/EcOpXoVdpaQ4I9a8
+ /tof8ASTK0yxgYbAOD+Ar0v4laVcSeMXjgT91JGJF+vQiuDisL8k3MaFio2xnPaqv7pxVtGW7i
+ Vp7JpfswRWK5meQrnn+L1rLvHWSaEqMKiBflk3g/T0+lat3cTajpZtQYC4PGRtYgdK52EORsQE
+ sfQVFNdzCJ1Uq239non2iMXDgONoyce/pRbxj7BLHtJYkgDOcc+tVLyw8iczB1NqZNm9Dyvvj0
+ rqLJbb7Kl2nmBA3BK5ZuOv1qG7IzvY9H+HdlGdGmgvraOFcqNobOdqKu78cZrp7CLRbXV1EDIj
+ Rn5nd8nntzXm3hCS8fSLoeYU3P8meDnHzVetorW5ZtPmW4kvifNGyIk46ZBqou562HalSWp6Pq
+ TaezkXRR4nfAbPQ/0qeG0tIYA0JDAdOc4rlkitLDSJBd210Q6hWk8g5bPTjrT/Dy3duZre4ZzE
+ rfu9/3sehps6ElbczfFNgYrPVNflCsba2Kwp1y5yF/8eINeKQMywmGKaIAg7kL7Sp716l8S9Vv
+ oymnW0mIZIxI6kcMdxx+RFeUanpUemQvPcJMwuBw6YI3deopK2zPMxc1KfKZhuy9wpVAQrDCgd
+ arqnkuNodXHO4fw0y3DB96KxwwIxV2PzpZd8xMaE46YBrbYx2NGeB70CVLkOjbVwF2/UfhWzp8
+ E8drAv2pZEjYou3GV+ase2uRaW8un3EyoCWfenU/7OfwrR0W+e4gSKOIEoeitkjPc/rWEk7GT2
+ N3S/EEtrqjwSTKsAYsBj7zEev4GvR7e+kl06LU9NgiutoKlD94fSvHP7NZ5BqN1EY4I5funjzD
+ /dH9a63R5NSl8OC+sLnZMsrJOjfdkOchvyIFbRouMed9TrwlTlbS2PTdHvL3UoRcX0EdtHH91e
+ mKFvIp2LW5DBjwR/OvPbO61zVP9Gnm2wE/MIyfmH17Vs3F0bRfscLD5Y8yFeijstVTpOrUUFuz
+ rqV7RcuiJfFmnwan5j2xL3MNt5UZzwfm3Ej+VeZvI8ZWO6QvFjLAmvQIrtnkCocv3PpVPU9Btd
+ ZhdXlkhlUYDof6V6uKynmjH2W6/E8GVZzk3I4O5tUtwxWKNV6fKB8wxu4H0qq6w+YeVKgDb2PT
+ of8APatnWdGvdI08W8lsJ7QNv89QcD6+lZMhIsx5ezGMFum7HTFeLKnOk7SVmaRfUu+E/C9rqs
+ 0816kjBMc545rvLLS9O0yEpZ2kajplhktVfQrcWOiQ245cqGc+rMcmtnyfujHAr6TB4CnCKlNX
+ b/AwqVHJnK3epfbPPh1e3W1to5/IinBzuOT2/rXTeCrWw/sK7h+2wuPNaUgcFUwMHB+lU9UsIb
+ tkMwysfIUetUrfw9uguYrW6MCgbwjZO4/3R6VeJwvtY2ZpRr+zd0Xr3xB4d061doLx55scKqEf
+ zxWRBqTatp4ZImg85zuJbJK9v60xPCyNLvmG7HQHnPua2rbTkhCqFGarDYKNGXMh1sTKorMW2i
+ SCERxjFWIl2scd6kWLHT86MDn+6K7zmLUL/uyjqHVht2tzn2rmfEHw8stShMmmsLGflti58pj9
+ P4fqPyrbhkLkv0UcCr8MxZCDXNXoRqL3kOM3F6H/2Q==
+UID:6454bec7-6f5b-46f2-ba22-15537ab215d9
+CATEGORIES:Engineering
+END:VCARD \ No newline at end of file
diff --git a/build/integration/features/bootstrap/CardDavContext.php b/build/integration/features/bootstrap/CardDavContext.php
index bfdd51bfdb0..4ee882cc2e6 100644
--- a/build/integration/features/bootstrap/CardDavContext.php
+++ b/build/integration/features/bootstrap/CardDavContext.php
@@ -202,4 +202,115 @@ class CardDavContext implements \Behat\Behat\Context\Context {
}
}
+ /**
+ * @Given :user uploads the contact :fileName to the addressbook :addressbook
+ */
+ public function uploadsTheContactToTheAddressbook($user, $fileName, $addressBook) {
+ $davUrl = $this->baseUrl . '/remote.php/dav/addressbooks/users/'.$user.'/'.$addressBook . '/' . $fileName;
+ $password = ($user === 'admin') ? 'admin' : '123456';
+
+ $request = $this->client->createRequest(
+ 'PUT',
+ $davUrl,
+ [
+ 'body' => file_get_contents(__DIR__ . '/../../data/' . $fileName),
+ 'auth' => [
+ $user,
+ $password,
+ ],
+ 'headers' => [
+ 'Content-Type' => 'application/xml;charset=UTF-8',
+ ],
+ ]
+ );
+
+ $this->response = $this->client->send($request);
+
+ if($this->response->getStatusCode() !== 201) {
+ throw new \Exception(
+ sprintf(
+ 'Expected %s got %s',
+ 201,
+ $this->response->getStatusCode()
+ )
+ );
+ }
+ }
+
+ /**
+ * @When Exporting the picture of contact :fileName from addressbook :addressBook as user :user
+ */
+ public function whenExportingThePictureOfContactFromAddressbookAsUser($fileName, $addressBook, $user) {
+ $davUrl = $this->baseUrl . '/remote.php/dav/addressbooks/users/'.$user.'/'.$addressBook . '/' . $fileName . '?photo=true';
+ $password = ($user === 'admin') ? 'admin' : '123456';
+
+ try {
+ $request = $this->client->createRequest(
+ 'GET',
+ $davUrl,
+ [
+ 'auth' => [
+ $user,
+ $password,
+ ],
+ 'headers' => [
+ 'Content-Type' => 'application/xml;charset=UTF-8',
+ ],
+ ]
+ );
+ $this->response = $this->client->send($request);
+ } catch (\GuzzleHttp\Exception\ClientException $e) {
+ $this->response = $e->getResponse();
+ }
+ }
+
+ /**
+ * @When Downloading the contact :fileName from addressbook :addressBook as user :user
+ */
+ public function whenDownloadingTheContactFromAddressbookAsUser($fileName, $addressBook, $user) {
+ $davUrl = $this->baseUrl . '/remote.php/dav/addressbooks/users/'.$user.'/'.$addressBook . '/' . $fileName;
+ $password = ($user === 'admin') ? 'admin' : '123456';
+
+ try {
+ $request = $this->client->createRequest(
+ 'GET',
+ $davUrl,
+ [
+ 'auth' => [
+ $user,
+ $password,
+ ],
+ 'headers' => [
+ 'Content-Type' => 'application/xml;charset=UTF-8',
+ ],
+ ]
+ );
+ $this->response = $this->client->send($request);
+ } catch (\GuzzleHttp\Exception\ClientException $e) {
+ $this->response = $e->getResponse();
+ }
+ }
+
+ /**
+ * @Then The following HTTP headers should be set
+ * @param \Behat\Gherkin\Node\TableNode $table
+ * @throws \Exception
+ */
+ public function theFollowingHttpHeadersShouldBeSet(\Behat\Gherkin\Node\TableNode $table) {
+ foreach($table->getTable() as $header) {
+ $headerName = $header[0];
+ $expectedHeaderValue = $header[1];
+ $returnedHeader = $this->response->getHeader($headerName);
+ if($returnedHeader !== $expectedHeaderValue) {
+ throw new \Exception(
+ sprintf(
+ "Expected value '%s' for header '%s', got '%s'",
+ $expectedHeaderValue,
+ $headerName,
+ $returnedHeader
+ )
+ );
+ }
+ }
+ }
}
diff --git a/build/integration/features/carddav.feature b/build/integration/features/carddav.feature
index ee9d877085d..4fbe403c7db 100644
--- a/build/integration/features/carddav.feature
+++ b/build/integration/features/carddav.feature
@@ -21,3 +21,33 @@ Feature: carddav
Scenario: Creating a new addressbook
When "admin" creates an addressbook named "MyAddressbook" with statuscode "201"
Then "admin" requests addressbook "admin/MyAddressbook" with statuscode "200"
+
+ Scenario: Accessing ones own contact
+ Given "admin" creates an addressbook named "MyAddressbook" with statuscode "201"
+ Given "admin" uploads the contact "bjoern.vcf" to the addressbook "MyAddressbook"
+ When Downloading the contact "bjoern.vcf" from addressbook "MyAddressbook" as user "admin"
+ Then The following HTTP headers should be set
+ |Content-Disposition|attachment; filename*=UTF-8''bjoern.vcf; filename="bjoern.vcf"|
+ |Content-Type|text/vcard; charset=utf-8|
+ |Content-Security-Policy|default-src 'none';|
+ |X-Content-Type-Options |nosniff|
+ |X-Download-Options|noopen|
+ |X-Frame-Options|Sameorigin|
+ |X-Permitted-Cross-Domain-Policies|none|
+ |X-Robots-Tag|none|
+ |X-XSS-Protection|1; mode=block|
+
+ Scenario: Exporting the picture of ones own contact
+ Given "admin" creates an addressbook named "MyAddressbook" with statuscode "201"
+ Given "admin" uploads the contact "bjoern.vcf" to the addressbook "MyAddressbook"
+ When Exporting the picture of contact "bjoern.vcf" from addressbook "MyAddressbook" as user "admin"
+ Then The following HTTP headers should be set
+ |Content-Disposition|attachment|
+ |Content-Type|image/jpeg|
+ |Content-Security-Policy|default-src 'none';|
+ |X-Content-Type-Options |nosniff|
+ |X-Download-Options|noopen|
+ |X-Frame-Options|Sameorigin|
+ |X-Permitted-Cross-Domain-Policies|none|
+ |X-Robots-Tag|none|
+ |X-XSS-Protection|1; mode=block|
diff --git a/build/integration/features/webdav-related.feature b/build/integration/features/webdav-related.feature
index d90eb038e0b..658e689f54e 100644
--- a/build/integration/features/webdav-related.feature
+++ b/build/integration/features/webdav-related.feature
@@ -427,3 +427,23 @@ Feature: webdav-related
And User "user0" uploads file with content "copytest" to "/copytest.txt"
When User "user0" copies file "/copytest.txt" to "/testcopypermissionsNotAllowed/copytest.txt"
Then the HTTP status code should be "403"
+
+ Scenario: Uploading a file as recipient with limited permissions
+ Given using new dav path
+ And As an "admin"
+ And user "user0" exists
+ And user "user1" exists
+ And user "user0" has a quota of "10 MB"
+ And user "user1" has a quota of "10 MB"
+ And As an "user1"
+ And user "user1" created a folder "/testfolder"
+ And as "user1" creating a share with
+ | path | testfolder |
+ | shareType | 0 |
+ | permissions | 23 |
+ | shareWith | user0 |
+ And As an "user0"
+ And User "user0" uploads file "data/textfile.txt" to "/testfolder/asdf.txt"
+ And As an "user1"
+ When User "user1" deletes file "/testfolder/asdf.txt"
+ Then the HTTP status code should be "204"
diff --git a/config/config.sample.php b/config/config.sample.php
index 2722865c8e5..8b714a1763c 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -678,7 +678,7 @@ $CONFIG = array(
* seen in the first-run wizard and on Personal pages.
*/
'customclient_desktop' =>
- 'https://nextcloud.com/install/',
+ 'https://nextcloud.com/install/#install-clients',
'customclient_android' =>
'https://play.google.com/store/apps/details?id=com.nextcloud.client',
'customclient_ios' =>
diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php
index c3ccac37f78..b6add48ef61 100644
--- a/core/Controller/LoginController.php
+++ b/core/Controller/LoginController.php
@@ -200,9 +200,11 @@ class LoginController extends Controller {
* @param string $password
* @param string $redirect_url
* @param boolean $remember_login
+ * @param string $timezone
+ * @param string $timezone_offset
* @return RedirectResponse
*/
- public function tryLogin($user, $password, $redirect_url, $remember_login = false) {
+ public function tryLogin($user, $password, $redirect_url, $remember_login = false, $timezone = '', $timezone_offset = '') {
$currentDelay = $this->throttler->getDelay($this->request->getRemoteAddress());
$this->throttler->sleepDelay($this->request->getRemoteAddress());
@@ -247,6 +249,11 @@ class LoginController extends Controller {
$this->session->set('last-password-confirm', $loginResult->getLastLogin());
+ if ($timezone_offset !== '') {
+ $this->config->setUserValue($loginResult->getUID(), 'core', 'timezone', $timezone);
+ $this->session->set('timezone', $timezone_offset);
+ }
+
if ($this->twoFactorManager->isTwoFactorAuthenticated($loginResult)) {
$this->twoFactorManager->prepareTwoFactorLogin($loginResult, $remember_login);
diff --git a/core/css/apps.css b/core/css/apps.css
index 432c40026ac..e709f9d901f 100644
--- a/core/css/apps.css
+++ b/core/css/apps.css
@@ -293,6 +293,7 @@
border-radius: 3px;
border-top-right-radius: 0;
z-index: 110;
+ margin: 5px;
margin-top: -5px;
right: 0;
-webkit-filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
@@ -316,7 +317,7 @@
.bubble:after,
#app-navigation .app-navigation-entry-menu:after {
bottom: 100%;
- right: 0; /* change this to adjust the arrow position */
+ right: 6px; /* change this to adjust the arrow position */
border: solid transparent;
content: " ";
height: 0;
@@ -329,7 +330,6 @@
border-color: rgba(238, 238, 238, 0);
border-bottom-color: #fff;
border-width: 10px;
- margin-left: -10px;
}
.bubble .action {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)" !important;
diff --git a/core/css/systemtags.css b/core/css/systemtags.css
index 30c3808b51c..d11dc741065 100644
--- a/core/css/systemtags.css
+++ b/core/css/systemtags.css
@@ -37,8 +37,15 @@
}
.systemtags-select2-dropdown .systemtags-rename-form {
- display: inline;
- margin-left: 10px;
+ display: inline-block;
+ width: calc(100% - 20px);
+ top: -6px;
+ position: relative;
+}
+
+.systemtags-select2-dropdown .systemtags-rename-form input {
+ display: inline-block;
+ width: calc(100% - 40px);
}
.systemtags-select2-container {
@@ -56,6 +63,7 @@
.systemtags-select2-dropdown .systemtags-item {
display: inline-block;
height: 25px;
+ width: 100%;
}
.systemtags-select2-dropdown .select2-result-label {
diff --git a/core/css/tooltip.css b/core/css/tooltip.css
index af25fd5533d..e5a2f7b2145 100644
--- a/core/css/tooltip.css
+++ b/core/css/tooltip.css
@@ -5,7 +5,6 @@
*/
.tooltip {
position: absolute;
- z-index: 1070;
display: block;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-style: normal;
@@ -24,6 +23,7 @@
word-wrap: normal;
font-size: 12px;
opacity: 0;
+ z-index: 100000;
filter: alpha(opacity=0);
}
.tooltip.in {
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index 7476c93ba45..7e059b4bbc0 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -124,6 +124,14 @@ var OCdialogs = {
modal = false;
}
$('body').append($dlg);
+
+ // wrap callback in _.once():
+ // only call callback once and not twice (button handler and close
+ // event) but call it for the close event, if ESC or the x is hit
+ if (callback !== undefined) {
+ callback = _.once(callback);
+ }
+
var buttonlist = [{
text : t('core', 'No'),
click: function () {
@@ -147,7 +155,13 @@ var OCdialogs = {
$(dialogId).ocdialog({
closeOnEscape: true,
modal : modal,
- buttons : buttonlist
+ buttons : buttonlist,
+ close : function() {
+ // callback is already fired if Yes/No is clicked directly
+ if (callback !== undefined) {
+ callback(false, input.val());
+ }
+ }
});
input.focus();
OCdialogs.dialogsCounter++;
diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js
index 7fcda92d5fd..0fe0747dd59 100644
--- a/core/js/sharedialogshareelistview.js
+++ b/core/js/sharedialogshareelistview.js
@@ -35,47 +35,7 @@
'{{/unless}}' +
'{{/if}}' +
'<a href="#"><span class="icon icon-more"></span></a>' +
- '<div class="popovermenu bubble hidden menu">' +
- '<ul>' +
- '{{#if isResharingAllowed}} {{#if sharePermissionPossible}} {{#unless isMailShare}}' +
- '<li>' +
- '<span class="shareOption">' +
- '<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>' +
- '</li>' +
- '{{/unless}} {{/if}} {{/if}}' +
- '{{#if isFolder}}' +
- '{{#if createPermissionPossible}}{{#unless isMailShare}}' +
- '<li>' +
- '<span class="shareOption">' +
- '<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>' +
- '</li>' +
- '{{/unless}}{{/if}}' +
- '{{#if updatePermissionPossible}}{{#unless isMailShare}}' +
- '<li>' +
- '<span class="shareOption">' +
- '<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>' +
- '</li>' +
- '{{/unless}}{{/if}}' +
- '{{#if deletePermissionPossible}}{{#unless isMailShare}}' +
- '<li>' +
- '<span class="shareOption">' +
- '<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>' +
- '</li>' +
- '{{/unless}}{{/if}}' +
- '{{/if}}' +
- '<li>' +
- '<a href="#" class="unshare"><span class="icon-loading-small hidden"></span><span class="icon icon-delete"></span><span>{{unshareLabel}}</span></a>' +
- '</li>' +
- '</ul>' +
- '</div>' +
+ '{{{popoverMenu}}}' +
'</span>' +
'</li>' +
'{{/each}}' +
@@ -94,6 +54,49 @@
'</ul>'
;
+ var TEMPLATE_POPOVER_MENU =
+ '<div class="popovermenu bubble hidden menu">' +
+ '<ul>' +
+ '{{#if isResharingAllowed}} {{#if sharePermissionPossible}} {{#unless isMailShare}}' +
+ '<li>' +
+ '<span class="shareOption">' +
+ '<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>' +
+ '</li>' +
+ '{{/unless}} {{/if}} {{/if}}' +
+ '{{#if isFolder}}' +
+ '{{#if createPermissionPossible}}{{#unless isMailShare}}' +
+ '<li>' +
+ '<span class="shareOption">' +
+ '<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>' +
+ '</li>' +
+ '{{/unless}}{{/if}}' +
+ '{{#if updatePermissionPossible}}{{#unless isMailShare}}' +
+ '<li>' +
+ '<span class="shareOption">' +
+ '<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>' +
+ '</li>' +
+ '{{/unless}}{{/if}}' +
+ '{{#if deletePermissionPossible}}{{#unless isMailShare}}' +
+ '<li>' +
+ '<span class="shareOption">' +
+ '<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>' +
+ '</li>' +
+ '{{/unless}}{{/if}}' +
+ '{{/if}}' +
+ '<li>' +
+ '<a href="#" class="unshare"><span class="icon-loading-small hidden"></span><span class="icon icon-delete"></span><span>{{unshareLabel}}</span></a>' +
+ '</li>' +
+ '</ul>' +
+ '</div>';
+
/**
* @class OCA.Share.ShareDialogShareeListView
* @member {OC.Share.ShareItemModel} model
@@ -114,8 +117,14 @@
/** @type {Function} **/
_template: undefined,
+ /** @type {Function} **/
+ _popoverMenuTemplate: undefined,
+
_menuOpen: false,
+ /** @type {boolean|number} **/
+ _renderPermissionChange: false,
+
events: {
'click .unshare': 'onUnshare',
'click .icon-more': 'onToggleMenu',
@@ -182,8 +191,8 @@
});
},
- getShareeList: function() {
- var universal = {
+ getShareProperties: function() {
+ return {
avatarEnabled: this.configModel.areAvatarsEnabled(),
unshareLabel: t('core', 'Unshare'),
canShareLabel: t('core', 'can reshare'),
@@ -205,6 +214,15 @@
deletePermission: OC.PERMISSION_DELETE,
isFolder: this.model.isFolder()
};
+ },
+
+ /**
+ * get an array of sharees' share properties
+ *
+ * @returns {Array}
+ */
+ getShareeList: function() {
+ var universal = this.getShareProperties();
if(!this.model.hasUserShares()) {
return [];
@@ -256,29 +274,45 @@
},
render: function() {
- this.$el.html(this.template({
- cid: this.cid,
- sharees: this.getShareeList(),
- linkReshares: this.getLinkReshares()
- }));
-
- if(this.configModel.areAvatarsEnabled()) {
- this.$('.avatar').each(function() {
- var $this = $(this);
- if ($this.hasClass('imageplaceholderseed')) {
- $this.css({width: 32, height: 32});
- $this.imageplaceholder($this.data('seed'));
- } else {
- // user, size, ie8fix, hidedefault, callback, displayname
- $this.avatar($this.data('username'), 32, undefined, undefined, undefined, $this.data('displayname'));
- }
+ if(!this._renderPermissionChange) {
+ this.$el.html(this.template({
+ cid: this.cid,
+ sharees: this.getShareeList(),
+ linkReshares: this.getLinkReshares()
+ }));
+
+ if (this.configModel.areAvatarsEnabled()) {
+ this.$('.avatar').each(function () {
+ var $this = $(this);
+ if ($this.hasClass('imageplaceholderseed')) {
+ $this.css({width: 32, height: 32});
+ $this.imageplaceholder($this.data('seed'));
+ } else {
+ // user, size, ie8fix, hidedefault, callback, displayname
+ $this.avatar($this.data('username'), 32, undefined, undefined, undefined, $this.data('displayname'));
+ }
+ });
+ }
+
+ this.$('.has-tooltip').tooltip({
+ placement: 'bottom'
});
+ } else {
+ var permissionChangeShareId = parseInt(this._renderPermissionChange, 10);
+ var shareWithIndex = this.model.findShareWithIndex(permissionChangeShareId);
+ var sharee = this.getShareeObject(shareWithIndex);
+ $.extend(sharee, this.getShareProperties());
+ var $li = this.$('li[data-share-id=' + permissionChangeShareId + ']');
+ $li.find('.popovermenu').replaceWith(this.popoverMenuTemplate(sharee));
+
+ var checkBoxId = 'canEdit-' + this.cid + '-' + sharee.shareWith;
+ checkBoxId = '#' + checkBoxId.replace( /(:|\.|\[|\]|,|=|@)/g, "\\$1");
+ var $edit = $li.parent().find(checkBoxId);
+ if($edit.length === 1) {
+ $edit.prop('checked', sharee.hasEditPermission);
+ }
}
- this.$('.has-tooltip').tooltip({
- placement: 'bottom'
- });
-
var _this = this;
this.$('.popovermenu').on('afterHide', function() {
_this._menuOpen = false;
@@ -292,6 +326,8 @@
}
}
+ this._renderPermissionChange = false;
+
this.delegateEvents();
return this;
@@ -305,9 +341,28 @@
if (!this._template) {
this._template = Handlebars.compile(TEMPLATE);
}
+ var sharees = data.sharees;
+ if(_.isArray(sharees)) {
+ for (var i = 0; i < sharees.length; i++) {
+ data.sharees[i].popoverMenu = this.popoverMenuTemplate(sharees[i]);
+ }
+ }
return this._template(data);
},
+ /**
+ * renders the popover template and returns the resulting HTML
+ *
+ * @param {Object} data
+ * @returns {string}
+ */
+ popoverMenuTemplate: function(data) {
+ if(!this._popoverMenuTemplate) {
+ this._popoverMenuTemplate = Handlebars.compile(TEMPLATE_POPOVER_MENU);
+ }
+ return this._popoverMenuTemplate(data);
+ },
+
onUnshare: function(event) {
event.preventDefault();
event.stopPropagation();
@@ -367,6 +422,9 @@
checked = $element.is(':checked');
// Check/uncheck Create, Update, and Delete checkboxes if Edit is checked/unck
$($checkboxes).prop('checked', checked);
+ if (checked) {
+ permissions |= OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_DELETE;
+ }
} else {
var numberChecked = $checkboxes.filter(':checked').length;
checked = numberChecked > 0;
@@ -382,7 +440,20 @@
permissions |= $(checkbox).data('permissions');
});
- this.model.updateShare(shareId, {permissions: permissions});
+
+ /** disable checkboxes during save operation to avoid race conditions **/
+ $li.find('input[type=checkbox]').prop('disabled', true);
+ var enableCb = function() {
+ $li.find('input[type=checkbox]').prop('disabled', false);
+ };
+ var errorCb = function(elem, msg) {
+ OC.dialogs.alert(msg, t('core', 'Error while sharing'));
+ enableCb();
+ };
+
+ this.model.updateShare(shareId, {permissions: permissions}, {error: errorCb, success: enableCb});
+
+ this._renderPermissionChange = shareId;
},
});
diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js
index a784f59f67f..b01f0f790ac 100644
--- a/core/js/shareitemmodel.js
+++ b/core/js/shareitemmodel.js
@@ -391,6 +391,26 @@
return share.share_with_displayname;
},
+ /**
+ * returns the array index of a sharee for a provided shareId
+ *
+ * @param shareId
+ * @returns {number}
+ */
+ findShareWithIndex: function(shareId) {
+ var shares = this.get('shares');
+ if(!_.isArray(shares)) {
+ throw "Unknown Share";
+ }
+ for(var i = 0; i < shares.length; i++) {
+ var shareWith = shares[i];
+ if(shareWith.id === shareId) {
+ return i;
+ }
+ }
+ throw "Unknown Sharee";
+ },
+
getShareType: function(shareIndex) {
/** @type OC.Share.Types.ShareInfo **/
var share = this.get('shares')[shareIndex];
@@ -553,7 +573,7 @@
return superShare;
},
- fetch: function() {
+ fetch: function(options) {
var model = this;
this.trigger('request', this);
@@ -577,6 +597,10 @@
shares: sharesMap,
reshare: reshare
}));
+
+ if(!_.isUndefined(options) && _.isFunction(options.success)) {
+ options.success();
+ }
});
return deferred;
diff --git a/core/js/visitortimezone.js b/core/js/visitortimezone.js
index e6e99ee7e20..e984c90a894 100644
--- a/core/js/visitortimezone.js
+++ b/core/js/visitortimezone.js
@@ -1,6 +1,6 @@
/* global jstz */
$(document).ready(function () {
- $('#timezone-offset').val((-new Date().getTimezoneOffset() / 60));
+ $('#timezone_offset').val((-new Date().getTimezoneOffset() / 60));
$('#timezone').val(jstz.determine().name());
// only enable the submit button once we are sure that the timezone is set
diff --git a/core/l10n/bg_BG.js b/core/l10n/bg_BG.js
new file mode 100644
index 00000000000..74aeefeedf8
--- /dev/null
+++ b/core/l10n/bg_BG.js
@@ -0,0 +1,332 @@
+OC.L10N.register(
+ "core",
+ {
+ "Please select a file." : "Моля изберете файл.",
+ "File is too big" : "Файлът е твърде голям",
+ "The selected file is not an image." : "Избраният файл не е изображение.",
+ "The selected file cannot be read." : "Избраният файл не може да бъде отворен.",
+ "Invalid file provided" : "Предоставен е невалиден файл",
+ "No image or file provided" : "Не бяха доставени картинка или файл",
+ "Unknown filetype" : "Непознат тип файл",
+ "Invalid image" : "Невалидно изображение",
+ "An error occurred. Please contact your admin." : "Възникна неизвестна грешка. Свържете с администратора.",
+ "No temporary profile picture available, try again" : "Не е налична временна профилна снимка, опитайте отново",
+ "No crop data provided" : "Липсват данни за изрязването",
+ "No valid crop data provided" : "Липсват данни за изрязването",
+ "Crop is not square" : "Областта не е квадратна",
+ "Couldn't reset password because the token is invalid" : "Нулирането на паролата е невъзможно, защото връзката за удостоверение е невалидна",
+ "Couldn't reset password because the token is expired" : "Нулирането на паролата е невъзможно, защото връзката за удостоверение е изтекла",
+ "Couldn't send reset email. Please make sure your username is correct." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, уверете се, че потребителското име е правилно.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Имейлът за възстановяване на паролата не може да бъде изпратен защо потребителят няма имейл адрес. Свържете се с администратора.",
+ "%s password reset" : "Паролата на %s е променена",
+ "Couldn't send reset email. Please contact your administrator." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, свържете се с вашия администратор.",
+ "Preparing update" : "Подготовка за актуализиране",
+ "[%d / %d]: %s" : "[%d / %d]: %s",
+ "Repair warning: " : "Предупреждение при поправка:",
+ "Repair error: " : "Грешка при поправка:",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Моля използвайте съветникът за обновяване в команден ред, защото автоматичният е забранен в config.php.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Проверка на таблица %s",
+ "Turned on maintenance mode" : "Режимът за поддръжка е включен",
+ "Turned off maintenance mode" : "Режимът за поддръжка е изключен",
+ "Updating database schema" : "Актуализиране на схемата на базата данни",
+ "Updated database" : "Базата данни е обоновена",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Проверка дали схемата на базата данни може да се актуализира (възможно е да отнеме повече време в зависимост от големината на базата данни)",
+ "Checked database schema update" : "Обновяването на схемата на базата данни е проверено",
+ "Checking updates of apps" : "Проверка на актуализациите за добавките",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Проверка дали схемата на базата данни %s може да бъде актуализирана (това може да отнеме повече време в зависимост от големината на базата данни)",
+ "Checked database schema update for apps" : "Обновяването на схемата на базата данни за приложения е проверено",
+ "Updated \"%s\" to %s" : "Обновен \"%s\" до %s",
+ "%s (incompatible)" : "%s (несъвместим)",
+ "Following apps have been disabled: %s" : "Следната добавка беше изключена: %s",
+ "Settings" : "Настройки",
+ "Connection to server lost" : "Връзката със сървъра е загубена",
+ "Problem loading page, reloading in 5 seconds" : "Проблем при зареждане на страницата, презареждане след 5 секунди",
+ "Saving..." : "Запазване...",
+ "Dismiss" : "Отхвърляне",
+ "This action requires you to confirm your password" : "Това действие изисква да потвърдите паролата си",
+ "Password" : "Парола",
+ "Cancel" : "Отказ",
+ "Confirm" : "Потвърди",
+ "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." : "Връзката за възстановяване на паролата беше изпратена до вашия имейл. Ако не я получите в разумен период от време, проверете спам и junk папките.<br>Ако не я откривате и там, се свържете с местния администратор.",
+ "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/>Наистина ли желаете да продължите?",
+ "I know what I'm doing" : "Знам какво правя",
+ "Password can not be changed. Please contact your administrator." : "Паролата не може да бъде промена. Моля, свържете се с администратора.",
+ "No" : "Не",
+ "Yes" : "Да",
+ "No files in here" : "Тук няма файлове",
+ "Choose" : "Избиране",
+ "Error loading file picker template: {error}" : "Грешка при зареждането на шаблон за избор на файл: {error}",
+ "Ok" : "Добре",
+ "Error loading message template: {error}" : "Грешка при зареждането на шаблон за съобщения: {error}",
+ "read-only" : "Само за четене",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} файлов конфликт","{count} файлови кофликта"],
+ "One file conflict" : "Един файлов конфликт",
+ "New Files" : "Нови файлове",
+ "Already existing files" : "Вече съществуващи файлове",
+ "Which files do you want to keep?" : "Кои файлове желете да запазите?",
+ "If you select both versions, the copied file will have a number added to its name." : "Ако изберете и двете версии, към името на копирания файл ще бъде добавено число.",
+ "Continue" : "Продължаване",
+ "(all selected)" : "(всички избрани)",
+ "({count} selected)" : "({count} избрани)",
+ "Error loading file exists template" : "Грешка при зареждането на шаблон за вече съществуващ файл",
+ "Pending" : "Чакащо",
+ "Very weak password" : "Много слаба парола",
+ "Weak password" : "Слаба парола",
+ "So-so password" : "Не особено добра парола",
+ "Good password" : "Добра парола",
+ "Strong password" : "Сигурна парола",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Вашият уеб сървър все още не е удачно настроен да позволява синхронизация на файлове, защото WebDAV интерфейсът не работи.",
+ "This server has no working Internet connection: Multiple endpoints could not be reached. 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." : "Сървърът няма работеща интернет връзка. Това означава, че някои функции като прикачването на външни дискови устройства, уведомления за обновяване или инсталиране на външни приложения няма да работят. Достъпът на файлове отвън или изпращане на имейли за уведомление вероятно също няма да работят. Препоръчваме да включиш интернет връзката за този сървър ако искаш да използваш всички тези функции.",
+ "Error occurred while checking server setup" : "Възникна грешка при проверката на настройките на сървъра.",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Най-вероятно вашите данни и файлове са достъпни от интернет. .htaccess файлът не функционира. Силно препоръчваме да настроите уеб сървъра по такъв начин, че директорията за данни да не бъде достъпна или я преместете извън директорията на уеб сървъра.",
+ "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Достъпвате сайта чрез HTTP. Препоръчително е да настроите сървъра да изисква употребата на HTTPS, както е описано в <a href=\"{docUrl}\">съветите за сигурност</a>.",
+ "Shared" : "Споделено",
+ "Shared with {recipients}" : "Споделено с {recipients}",
+ "Error" : "Грешка",
+ "Error while sharing" : "Грешка при споделяне",
+ "Error while unsharing" : "Грешка при премахване на споделянето",
+ "Error setting expiration date" : "Грешка при настройване на датата за изтичане",
+ "The public link will expire no later than {days} days after it is created" : "Общодостъпната връзка ще изтече не по-късно от {days} дни след създаването ѝ.",
+ "Set expiration date" : "Задаване на дата на изтичане",
+ "Expiration" : "Изтичане",
+ "Expiration date" : "Дата на изтичане",
+ "Choose a password for the public link" : "Изберете парола за общодостъпната връзка",
+ "Copied!" : "Копирано!",
+ "Copy" : "Копиране",
+ "Not supported!" : "Не се поддържа!",
+ "Press ⌘-C to copy." : "За копиране натиснете ⌘-C.",
+ "Press Ctrl-C to copy." : "За копиране натиснете Ctrl-C.",
+ "Resharing is not allowed" : "Повторно споделяне не е разрешено.",
+ "Share link" : "Връзка за споделяне",
+ "Link" : "Връзка",
+ "Password protect" : "Защитено с парола",
+ "Allow upload and editing" : "Позволи обновяване и редактиране",
+ "Email link to person" : "Имейл връзка към човек",
+ "Send" : "Изпращане",
+ "Shared with you and the group {group} by {owner}" : "Споделено от {owner} с вас и групата {group}",
+ "Shared with you by {owner}" : "Споделено с вас от {owner}",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} споделен с връзка",
+ "group" : "група",
+ "remote" : "отдалечен",
+ "email" : "имейл",
+ "Unshare" : "Прекратяване на споделяне",
+ "can reshare" : "може да споделя",
+ "can edit" : "може да променя",
+ "can create" : "може да създава",
+ "can change" : "може да ",
+ "can delete" : "може да изтрива",
+ "access control" : "контрол на достъпа",
+ "Could not unshare" : "Споделянето не е прекратено",
+ "Share details could not be loaded for this item." : "Данните за споделяне не могат да бъдат заредени",
+ "No users or groups found for {search}" : "Няма потребители или групи за {search}",
+ "No users found for {search}" : "Няма потребители за {search}",
+ "An error occurred. Please try again" : "Възникна грешка. Моля, опитайте отново.",
+ "{sharee} (group)" : "{sharee} (група)",
+ "{sharee} (remote)" : "{sharee} (отдалечен)",
+ "{sharee} (email)" : "{sharee} (email)",
+ "Share" : "Споделяне",
+ "Share with users or by mail..." : "Споделяне с потребители или чрез имейл...",
+ "Share with users or remote users..." : "Споделяне с потребители или с отдалечени потребители...",
+ "Share with users, remote users or by mail..." : "Споделяне с потребители, отдалечени потребители или с имейл...",
+ "Share with users or groups..." : "Споделяне с потребители или групи...",
+ "Share with users, groups or by mail..." : "Споделяне с потребители, групи или чрез имейл...",
+ "Share with users, groups or remote users..." : "Споделяне с потребители, групи или отдалечени потребители...",
+ "Share with users, groups, remote users or by mail..." : "Споделяне с потребители, групи, отдалечени потребители или чрез имейл...",
+ "Share with users..." : "Споделяне с потребители...",
+ "Error removing share" : "Грешка при махане на споделяне",
+ "Non-existing tag #{tag}" : "Не-съществуващ етикет #{tag}",
+ "restricted" : "ограничен",
+ "invisible" : "невидим",
+ "({scope})" : "({scope})",
+ "Delete" : "Изтриване",
+ "Rename" : "Преименуване",
+ "No tags found" : "Няма открити етикети",
+ "The object type is not specified." : "Типът на обекта не е избран.",
+ "Enter new" : "Въвеждане на нов",
+ "Add" : "Добавяне",
+ "Edit tags" : "Промяна на етикетите",
+ "Error loading dialog template: {error}" : "Грешка при зареждането на шаблон за диалог: {error}.",
+ "No tags selected for deletion." : "Не са избрани етикети за изтриване.",
+ "unknown text" : "непознат текст",
+ "Hello world!" : "Здравей Свят!",
+ "sunny" : "слънчево",
+ "Hello {name}, the weather is {weather}" : "Здравей {name}, времето е {weather}",
+ "Hello {name}" : "Здравейте, {name}",
+ "new" : "нов",
+ "_download %n file_::_download %n files_" : ["изтегли %n файл","изтегли %n файла"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "Актуализирането е в процес, в някой среди - напускането на тази страница може да прекъсне процеса.",
+ "Update to {version}" : "Обнови до {version}",
+ "An error occurred." : "Възникна грешка.",
+ "Please reload the page." : "Моля, презаредете страницата.",
+ "Continue to Nextcloud" : "Продължете към Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "Обновяването беше успешно. Сега те пренасочваме към Nextcloud.",
+ "Searching other places" : "Търсене на друго място",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Няма резултати от търсенето в други папки за '{tag}{filter}{endtag}'",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} търсен резултат в друга папка","{count} търсени резултати в други папки"],
+ "Personal" : "Лични",
+ "Users" : "Потребители",
+ "Apps" : "Приложения",
+ "Admin" : "Админ",
+ "Help" : "Помощ",
+ "Access forbidden" : "Достъпът е забранен",
+ "File not found" : "Файлът не е открит",
+ "The specified document has not been found on the server." : "Избраният документ не е намерен на сървъра.",
+ "You can click here to return to %s." : "Можете да натиснете тук, за да се върнете на %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Здравейте,\n\nсамо да ви уведомяваме, че %s сподели %s с вас.\nРазгледай го: %s\n\n",
+ "The share will expire on %s." : "Споделянето ще изтече на %s.",
+ "Cheers!" : "Поздрави!",
+ "Internal Server Error" : "Вътрешна системна грешка",
+ "The server encountered an internal error and was unable to complete your request." : "Сървърът се натъкна на вътрешна грешка и неуспя да завърши заявката.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Моля, свържете се със сървърния администратор, ако тази грешка се появи отново. Също така Ви Молим да включите техническите данни, показани в доклада по-долу.",
+ "More details can be found in the server log." : "Повече детайли могат да бъдат намерени в сървърния журнал.",
+ "Technical details" : "Технически детайли",
+ "Remote Address: %s" : "Отдалечен адрес: %s",
+ "Request ID: %s" : "ID на заявка: %s",
+ "Type: %s" : "Тип: %s",
+ "Code: %s" : "Код: %s",
+ "Message: %s" : "Съобщение: %s",
+ "File: %s" : "Файл: %s",
+ "Line: %s" : "Линия: %s",
+ "Trace" : "Проследяване на грешките",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Вашата директория за данни и файлове Ви вероятно са достъпни от интернет, поради това, че файлът \".htaccess\" не функционира.",
+ "Create an <strong>admin account</strong>" : "Създаване на <strong>администраторски профил</strong>.",
+ "Username" : "Потребител",
+ "Storage & database" : "Хранилища и бази данни",
+ "Data folder" : "Директория за данни",
+ "Configure the database" : "Конфигуриране на базата данни",
+ "Only %s is available." : "Само %s е наличен.",
+ "For more details check out the documentation." : "За повече детайли проверете документацията.",
+ "Database user" : "Потребител за базата данни",
+ "Database password" : "Парола за базата данни",
+ "Database name" : "Име на базата данни",
+ "Database host" : "Хост за базата данни",
+ "Performance warning" : "Предупреждение за производителност",
+ "SQLite will be used as database." : "Ще бъде използвана SQLite за база данни.",
+ "For larger installations we recommend to choose a different database backend." : "За по- големи инсталации Ви препоръчваме да изберете друг сървър за бази данни.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Използването на SQLite не се препоръчва, особено ако ползвате клиента за настолен компютър.",
+ "Finish setup" : "Завършване на настройките",
+ "Finishing …" : "Завършване...",
+ "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" : "Търсене",
+ "This action requires you to confirm your password:" : "Това действие изисква да потвърдите паролата си:",
+ "Confirm your password" : "Потвърдете паролата си",
+ "Server side authentication failed!" : "Удостоверяването от страна на сървъра е неуспешно!",
+ "Please contact your administrator." : "Моля, свържете се с администратора.",
+ "An internal error occurred." : "Възникна вътрешна грешка.",
+ "Please try again or contact your administrator." : "Опитайте отново или се свържете с администраотра.",
+ "Username or email" : "Потребител или имейл",
+ "Wrong password. Reset it?" : "Грешна парола. Желаете ли нова парола?",
+ "Wrong password." : "Грешна парола",
+ "Log in" : "Вписване",
+ "Stay logged in" : "Остани вписан",
+ "Alternative Logins" : "Алтернативни методи на вписване",
+ "Use the following link to reset your password: {link}" : "Използвайте следната връзка, за да възстановите паролата си: {link}",
+ "New password" : "Нова парола",
+ "New Password" : "Нова парола",
+ "Reset password" : "Възстановяване на паролата",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Здравейте,<br><br>само ви уведомяваме, че %s сподели <strong>%s</strong> с вас.\n<br><a href=\"%s\">Разгледай го!</a><br><br>.",
+ "This Nextcloud instance is currently in single user mode." : "В момента този Nextcloud е в режим допускащ само един потребител.",
+ "This means only administrators can use the instance." : "Това означава, че само администраторът може да го използва.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Свържете се със системния администратор ако това съобщение се задържи твърде дълго или се е появило неочаквано.",
+ "Thank you for your patience." : "Благодарим за търпението.",
+ "Cancel log in" : "Откажи вписване",
+ "Use backup code" : "Използвай код за възстановяване",
+ "You are accessing the server from an untrusted domain." : "Свръзвате се със сървъра от домейн, който не е отбелязан като сигурен.",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "В зависимост от конфигурацията, като администратор натискайки долния бутон можете да маркирате домейна като сигурен.",
+ "Add \"%s\" as trusted domain" : "Добави \"%s\" като сигурен домейн",
+ "%s will be updated to version %s" : "%s ще бъде обновен до версия %s",
+ "These apps will be updated:" : "Следните добавки ще бъдат обновени:",
+ "These incompatible apps will be disabled:" : "Следните несъвместими добавки ще бъдат деактивирани:",
+ "The theme %s has been disabled." : "Темата %s е изключена.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Моля, уверете се, че сте направили копия на базата данни, папките с настройки и данните, преди да продължите.",
+ "Start update" : "Начало на обновяването",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "За да избегнеш таймаутове при по-големи инсталации, можеш да изпълниш следните команди в инсталанционната директория:",
+ "Update needed" : "Нужно е обновяване",
+ "This %s instance is currently in maintenance mode, which may take a while." : "В момента този %s се обновява, а това може да отнеме време.",
+ "This page will refresh itself when the %s instance is available again." : "Страницата ще се зареди автоматично, когато %s е отново на линия.",
+ "Error loading tags" : "Грешка при зареждане на етикети",
+ "Tag already exists" : "Етикетът вече съществува",
+ "Error deleting tag(s)" : "Грешка при изтриване на етикет(и)",
+ "Error tagging" : "Грешка при задаване на етикета",
+ "Error untagging" : "Грешка при премахване на етикета",
+ "Error favoriting" : "Грешка при добавяне в любими",
+ "Error unfavoriting" : "Грешка при премахване от любими",
+ "Couldn't send mail to following users: %s " : "Изпращането на имейл до следните потребители не е възможно: %s",
+ "Sunday" : "неделя",
+ "Monday" : "понеделник",
+ "Tuesday" : "вторник",
+ "Wednesday" : "сряда",
+ "Thursday" : "четвъртък",
+ "Friday" : "петък",
+ "Saturday" : "събота",
+ "Sun." : "нед",
+ "Mon." : "пон",
+ "Tue." : "вт",
+ "Wed." : "ср",
+ "Thu." : "чет",
+ "Fri." : "пет",
+ "Sat." : "съб",
+ "Su" : "нд",
+ "Mo" : "пн",
+ "Tu" : "вт",
+ "We" : "ср",
+ "Th" : "чт",
+ "Fr" : "пт",
+ "Sa" : "сб",
+ "January" : "януари",
+ "February" : "февруару",
+ "March" : "март",
+ "April" : "април",
+ "May" : "май",
+ "June" : "юни",
+ "July" : "юли",
+ "August" : "август",
+ "September" : "септември",
+ "October" : "октомври",
+ "November" : "ноември",
+ "December" : "декември",
+ "Jan." : "яну",
+ "Feb." : "фев",
+ "Mar." : "мар",
+ "Apr." : "апр",
+ "May." : "май",
+ "Jun." : "юни",
+ "Jul." : "юли",
+ "Aug." : "авг",
+ "Sep." : "сеп",
+ "Oct." : "окт",
+ "Nov." : "ное",
+ "Dec." : "дек",
+ "Allow editing" : "Позволяване на редактиране",
+ "Hide file listing" : "Скрий показването на файлове",
+ "Sending ..." : "Изпращане ...",
+ "Email sent" : "Имейла е изпратен",
+ "Send link via email" : "Сподели връзка с имейл",
+ "notify by email" : "уведомяване по електронна поща",
+ "can share" : "може да споделя",
+ "create" : "създаване",
+ "change" : "промяна",
+ "delete" : "изтриване",
+ "{sharee} (at {server})" : "{sharee} (в {server})",
+ "Share with users…" : "Споделяне с потребители...",
+ "Share with users, groups or remote users…" : "Споделяне с потребители, групи и отдалечени потребители...",
+ "Share with users or groups…" : "Споделяне с потребители или групи...",
+ "Share with users or remote users…" : "Споделяне с потребители или с отдалечени потребители...",
+ "Warning" : "Предупреждение",
+ "Error while sending notification" : "Грешка при изпращане на уведомление",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Актуализирането е в процес, в някой среди - напускането на тази страница може да прекъсне процеса.",
+ "Updating to {version}" : "Обновяване до {version}",
+ "The update was successful. There were warnings." : "Обновяването мина успешно. Има предупреждения.",
+ "No search results in other folders" : "Няма търсени резултати в други папки",
+ "Cancel login" : "Откажи вписване",
+ "An error occured. Please try again" : "Възникна грешка. Опитайте отново.",
+ "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Споделяй с хора от друг ownCloud-ове като използвате синтаксис username@example.com/owncloud",
+ "Updating {productName} to version {version}, this may take a while." : "Обновяване на {productName} до версия {version}, това може да отнеме известно време.",
+ "An internal error occured." : "Възникна вътрешна грешка."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/bg_BG.json b/core/l10n/bg_BG.json
new file mode 100644
index 00000000000..1a0a219b550
--- /dev/null
+++ b/core/l10n/bg_BG.json
@@ -0,0 +1,330 @@
+{ "translations": {
+ "Please select a file." : "Моля изберете файл.",
+ "File is too big" : "Файлът е твърде голям",
+ "The selected file is not an image." : "Избраният файл не е изображение.",
+ "The selected file cannot be read." : "Избраният файл не може да бъде отворен.",
+ "Invalid file provided" : "Предоставен е невалиден файл",
+ "No image or file provided" : "Не бяха доставени картинка или файл",
+ "Unknown filetype" : "Непознат тип файл",
+ "Invalid image" : "Невалидно изображение",
+ "An error occurred. Please contact your admin." : "Възникна неизвестна грешка. Свържете с администратора.",
+ "No temporary profile picture available, try again" : "Не е налична временна профилна снимка, опитайте отново",
+ "No crop data provided" : "Липсват данни за изрязването",
+ "No valid crop data provided" : "Липсват данни за изрязването",
+ "Crop is not square" : "Областта не е квадратна",
+ "Couldn't reset password because the token is invalid" : "Нулирането на паролата е невъзможно, защото връзката за удостоверение е невалидна",
+ "Couldn't reset password because the token is expired" : "Нулирането на паролата е невъзможно, защото връзката за удостоверение е изтекла",
+ "Couldn't send reset email. Please make sure your username is correct." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, уверете се, че потребителското име е правилно.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Имейлът за възстановяване на паролата не може да бъде изпратен защо потребителят няма имейл адрес. Свържете се с администратора.",
+ "%s password reset" : "Паролата на %s е променена",
+ "Couldn't send reset email. Please contact your administrator." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, свържете се с вашия администратор.",
+ "Preparing update" : "Подготовка за актуализиране",
+ "[%d / %d]: %s" : "[%d / %d]: %s",
+ "Repair warning: " : "Предупреждение при поправка:",
+ "Repair error: " : "Грешка при поправка:",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Моля използвайте съветникът за обновяване в команден ред, защото автоматичният е забранен в config.php.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Проверка на таблица %s",
+ "Turned on maintenance mode" : "Режимът за поддръжка е включен",
+ "Turned off maintenance mode" : "Режимът за поддръжка е изключен",
+ "Updating database schema" : "Актуализиране на схемата на базата данни",
+ "Updated database" : "Базата данни е обоновена",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Проверка дали схемата на базата данни може да се актуализира (възможно е да отнеме повече време в зависимост от големината на базата данни)",
+ "Checked database schema update" : "Обновяването на схемата на базата данни е проверено",
+ "Checking updates of apps" : "Проверка на актуализациите за добавките",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Проверка дали схемата на базата данни %s може да бъде актуализирана (това може да отнеме повече време в зависимост от големината на базата данни)",
+ "Checked database schema update for apps" : "Обновяването на схемата на базата данни за приложения е проверено",
+ "Updated \"%s\" to %s" : "Обновен \"%s\" до %s",
+ "%s (incompatible)" : "%s (несъвместим)",
+ "Following apps have been disabled: %s" : "Следната добавка беше изключена: %s",
+ "Settings" : "Настройки",
+ "Connection to server lost" : "Връзката със сървъра е загубена",
+ "Problem loading page, reloading in 5 seconds" : "Проблем при зареждане на страницата, презареждане след 5 секунди",
+ "Saving..." : "Запазване...",
+ "Dismiss" : "Отхвърляне",
+ "This action requires you to confirm your password" : "Това действие изисква да потвърдите паролата си",
+ "Password" : "Парола",
+ "Cancel" : "Отказ",
+ "Confirm" : "Потвърди",
+ "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." : "Връзката за възстановяване на паролата беше изпратена до вашия имейл. Ако не я получите в разумен период от време, проверете спам и junk папките.<br>Ако не я откривате и там, се свържете с местния администратор.",
+ "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/>Наистина ли желаете да продължите?",
+ "I know what I'm doing" : "Знам какво правя",
+ "Password can not be changed. Please contact your administrator." : "Паролата не може да бъде промена. Моля, свържете се с администратора.",
+ "No" : "Не",
+ "Yes" : "Да",
+ "No files in here" : "Тук няма файлове",
+ "Choose" : "Избиране",
+ "Error loading file picker template: {error}" : "Грешка при зареждането на шаблон за избор на файл: {error}",
+ "Ok" : "Добре",
+ "Error loading message template: {error}" : "Грешка при зареждането на шаблон за съобщения: {error}",
+ "read-only" : "Само за четене",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} файлов конфликт","{count} файлови кофликта"],
+ "One file conflict" : "Един файлов конфликт",
+ "New Files" : "Нови файлове",
+ "Already existing files" : "Вече съществуващи файлове",
+ "Which files do you want to keep?" : "Кои файлове желете да запазите?",
+ "If you select both versions, the copied file will have a number added to its name." : "Ако изберете и двете версии, към името на копирания файл ще бъде добавено число.",
+ "Continue" : "Продължаване",
+ "(all selected)" : "(всички избрани)",
+ "({count} selected)" : "({count} избрани)",
+ "Error loading file exists template" : "Грешка при зареждането на шаблон за вече съществуващ файл",
+ "Pending" : "Чакащо",
+ "Very weak password" : "Много слаба парола",
+ "Weak password" : "Слаба парола",
+ "So-so password" : "Не особено добра парола",
+ "Good password" : "Добра парола",
+ "Strong password" : "Сигурна парола",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Вашият уеб сървър все още не е удачно настроен да позволява синхронизация на файлове, защото WebDAV интерфейсът не работи.",
+ "This server has no working Internet connection: Multiple endpoints could not be reached. 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." : "Сървърът няма работеща интернет връзка. Това означава, че някои функции като прикачването на външни дискови устройства, уведомления за обновяване или инсталиране на външни приложения няма да работят. Достъпът на файлове отвън или изпращане на имейли за уведомление вероятно също няма да работят. Препоръчваме да включиш интернет връзката за този сървър ако искаш да използваш всички тези функции.",
+ "Error occurred while checking server setup" : "Възникна грешка при проверката на настройките на сървъра.",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Най-вероятно вашите данни и файлове са достъпни от интернет. .htaccess файлът не функционира. Силно препоръчваме да настроите уеб сървъра по такъв начин, че директорията за данни да не бъде достъпна или я преместете извън директорията на уеб сървъра.",
+ "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Достъпвате сайта чрез HTTP. Препоръчително е да настроите сървъра да изисква употребата на HTTPS, както е описано в <a href=\"{docUrl}\">съветите за сигурност</a>.",
+ "Shared" : "Споделено",
+ "Shared with {recipients}" : "Споделено с {recipients}",
+ "Error" : "Грешка",
+ "Error while sharing" : "Грешка при споделяне",
+ "Error while unsharing" : "Грешка при премахване на споделянето",
+ "Error setting expiration date" : "Грешка при настройване на датата за изтичане",
+ "The public link will expire no later than {days} days after it is created" : "Общодостъпната връзка ще изтече не по-късно от {days} дни след създаването ѝ.",
+ "Set expiration date" : "Задаване на дата на изтичане",
+ "Expiration" : "Изтичане",
+ "Expiration date" : "Дата на изтичане",
+ "Choose a password for the public link" : "Изберете парола за общодостъпната връзка",
+ "Copied!" : "Копирано!",
+ "Copy" : "Копиране",
+ "Not supported!" : "Не се поддържа!",
+ "Press ⌘-C to copy." : "За копиране натиснете ⌘-C.",
+ "Press Ctrl-C to copy." : "За копиране натиснете Ctrl-C.",
+ "Resharing is not allowed" : "Повторно споделяне не е разрешено.",
+ "Share link" : "Връзка за споделяне",
+ "Link" : "Връзка",
+ "Password protect" : "Защитено с парола",
+ "Allow upload and editing" : "Позволи обновяване и редактиране",
+ "Email link to person" : "Имейл връзка към човек",
+ "Send" : "Изпращане",
+ "Shared with you and the group {group} by {owner}" : "Споделено от {owner} с вас и групата {group}",
+ "Shared with you by {owner}" : "Споделено с вас от {owner}",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} споделен с връзка",
+ "group" : "група",
+ "remote" : "отдалечен",
+ "email" : "имейл",
+ "Unshare" : "Прекратяване на споделяне",
+ "can reshare" : "може да споделя",
+ "can edit" : "може да променя",
+ "can create" : "може да създава",
+ "can change" : "може да ",
+ "can delete" : "може да изтрива",
+ "access control" : "контрол на достъпа",
+ "Could not unshare" : "Споделянето не е прекратено",
+ "Share details could not be loaded for this item." : "Данните за споделяне не могат да бъдат заредени",
+ "No users or groups found for {search}" : "Няма потребители или групи за {search}",
+ "No users found for {search}" : "Няма потребители за {search}",
+ "An error occurred. Please try again" : "Възникна грешка. Моля, опитайте отново.",
+ "{sharee} (group)" : "{sharee} (група)",
+ "{sharee} (remote)" : "{sharee} (отдалечен)",
+ "{sharee} (email)" : "{sharee} (email)",
+ "Share" : "Споделяне",
+ "Share with users or by mail..." : "Споделяне с потребители или чрез имейл...",
+ "Share with users or remote users..." : "Споделяне с потребители или с отдалечени потребители...",
+ "Share with users, remote users or by mail..." : "Споделяне с потребители, отдалечени потребители или с имейл...",
+ "Share with users or groups..." : "Споделяне с потребители или групи...",
+ "Share with users, groups or by mail..." : "Споделяне с потребители, групи или чрез имейл...",
+ "Share with users, groups or remote users..." : "Споделяне с потребители, групи или отдалечени потребители...",
+ "Share with users, groups, remote users or by mail..." : "Споделяне с потребители, групи, отдалечени потребители или чрез имейл...",
+ "Share with users..." : "Споделяне с потребители...",
+ "Error removing share" : "Грешка при махане на споделяне",
+ "Non-existing tag #{tag}" : "Не-съществуващ етикет #{tag}",
+ "restricted" : "ограничен",
+ "invisible" : "невидим",
+ "({scope})" : "({scope})",
+ "Delete" : "Изтриване",
+ "Rename" : "Преименуване",
+ "No tags found" : "Няма открити етикети",
+ "The object type is not specified." : "Типът на обекта не е избран.",
+ "Enter new" : "Въвеждане на нов",
+ "Add" : "Добавяне",
+ "Edit tags" : "Промяна на етикетите",
+ "Error loading dialog template: {error}" : "Грешка при зареждането на шаблон за диалог: {error}.",
+ "No tags selected for deletion." : "Не са избрани етикети за изтриване.",
+ "unknown text" : "непознат текст",
+ "Hello world!" : "Здравей Свят!",
+ "sunny" : "слънчево",
+ "Hello {name}, the weather is {weather}" : "Здравей {name}, времето е {weather}",
+ "Hello {name}" : "Здравейте, {name}",
+ "new" : "нов",
+ "_download %n file_::_download %n files_" : ["изтегли %n файл","изтегли %n файла"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "Актуализирането е в процес, в някой среди - напускането на тази страница може да прекъсне процеса.",
+ "Update to {version}" : "Обнови до {version}",
+ "An error occurred." : "Възникна грешка.",
+ "Please reload the page." : "Моля, презаредете страницата.",
+ "Continue to Nextcloud" : "Продължете към Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "Обновяването беше успешно. Сега те пренасочваме към Nextcloud.",
+ "Searching other places" : "Търсене на друго място",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Няма резултати от търсенето в други папки за '{tag}{filter}{endtag}'",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} търсен резултат в друга папка","{count} търсени резултати в други папки"],
+ "Personal" : "Лични",
+ "Users" : "Потребители",
+ "Apps" : "Приложения",
+ "Admin" : "Админ",
+ "Help" : "Помощ",
+ "Access forbidden" : "Достъпът е забранен",
+ "File not found" : "Файлът не е открит",
+ "The specified document has not been found on the server." : "Избраният документ не е намерен на сървъра.",
+ "You can click here to return to %s." : "Можете да натиснете тук, за да се върнете на %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Здравейте,\n\nсамо да ви уведомяваме, че %s сподели %s с вас.\nРазгледай го: %s\n\n",
+ "The share will expire on %s." : "Споделянето ще изтече на %s.",
+ "Cheers!" : "Поздрави!",
+ "Internal Server Error" : "Вътрешна системна грешка",
+ "The server encountered an internal error and was unable to complete your request." : "Сървърът се натъкна на вътрешна грешка и неуспя да завърши заявката.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Моля, свържете се със сървърния администратор, ако тази грешка се появи отново. Също така Ви Молим да включите техническите данни, показани в доклада по-долу.",
+ "More details can be found in the server log." : "Повече детайли могат да бъдат намерени в сървърния журнал.",
+ "Technical details" : "Технически детайли",
+ "Remote Address: %s" : "Отдалечен адрес: %s",
+ "Request ID: %s" : "ID на заявка: %s",
+ "Type: %s" : "Тип: %s",
+ "Code: %s" : "Код: %s",
+ "Message: %s" : "Съобщение: %s",
+ "File: %s" : "Файл: %s",
+ "Line: %s" : "Линия: %s",
+ "Trace" : "Проследяване на грешките",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Вашата директория за данни и файлове Ви вероятно са достъпни от интернет, поради това, че файлът \".htaccess\" не функционира.",
+ "Create an <strong>admin account</strong>" : "Създаване на <strong>администраторски профил</strong>.",
+ "Username" : "Потребител",
+ "Storage & database" : "Хранилища и бази данни",
+ "Data folder" : "Директория за данни",
+ "Configure the database" : "Конфигуриране на базата данни",
+ "Only %s is available." : "Само %s е наличен.",
+ "For more details check out the documentation." : "За повече детайли проверете документацията.",
+ "Database user" : "Потребител за базата данни",
+ "Database password" : "Парола за базата данни",
+ "Database name" : "Име на базата данни",
+ "Database host" : "Хост за базата данни",
+ "Performance warning" : "Предупреждение за производителност",
+ "SQLite will be used as database." : "Ще бъде използвана SQLite за база данни.",
+ "For larger installations we recommend to choose a different database backend." : "За по- големи инсталации Ви препоръчваме да изберете друг сървър за бази данни.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Използването на SQLite не се препоръчва, особено ако ползвате клиента за настолен компютър.",
+ "Finish setup" : "Завършване на настройките",
+ "Finishing …" : "Завършване...",
+ "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" : "Търсене",
+ "This action requires you to confirm your password:" : "Това действие изисква да потвърдите паролата си:",
+ "Confirm your password" : "Потвърдете паролата си",
+ "Server side authentication failed!" : "Удостоверяването от страна на сървъра е неуспешно!",
+ "Please contact your administrator." : "Моля, свържете се с администратора.",
+ "An internal error occurred." : "Възникна вътрешна грешка.",
+ "Please try again or contact your administrator." : "Опитайте отново или се свържете с администраотра.",
+ "Username or email" : "Потребител или имейл",
+ "Wrong password. Reset it?" : "Грешна парола. Желаете ли нова парола?",
+ "Wrong password." : "Грешна парола",
+ "Log in" : "Вписване",
+ "Stay logged in" : "Остани вписан",
+ "Alternative Logins" : "Алтернативни методи на вписване",
+ "Use the following link to reset your password: {link}" : "Използвайте следната връзка, за да възстановите паролата си: {link}",
+ "New password" : "Нова парола",
+ "New Password" : "Нова парола",
+ "Reset password" : "Възстановяване на паролата",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Здравейте,<br><br>само ви уведомяваме, че %s сподели <strong>%s</strong> с вас.\n<br><a href=\"%s\">Разгледай го!</a><br><br>.",
+ "This Nextcloud instance is currently in single user mode." : "В момента този Nextcloud е в режим допускащ само един потребител.",
+ "This means only administrators can use the instance." : "Това означава, че само администраторът може да го използва.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Свържете се със системния администратор ако това съобщение се задържи твърде дълго или се е появило неочаквано.",
+ "Thank you for your patience." : "Благодарим за търпението.",
+ "Cancel log in" : "Откажи вписване",
+ "Use backup code" : "Използвай код за възстановяване",
+ "You are accessing the server from an untrusted domain." : "Свръзвате се със сървъра от домейн, който не е отбелязан като сигурен.",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "В зависимост от конфигурацията, като администратор натискайки долния бутон можете да маркирате домейна като сигурен.",
+ "Add \"%s\" as trusted domain" : "Добави \"%s\" като сигурен домейн",
+ "%s will be updated to version %s" : "%s ще бъде обновен до версия %s",
+ "These apps will be updated:" : "Следните добавки ще бъдат обновени:",
+ "These incompatible apps will be disabled:" : "Следните несъвместими добавки ще бъдат деактивирани:",
+ "The theme %s has been disabled." : "Темата %s е изключена.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Моля, уверете се, че сте направили копия на базата данни, папките с настройки и данните, преди да продължите.",
+ "Start update" : "Начало на обновяването",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "За да избегнеш таймаутове при по-големи инсталации, можеш да изпълниш следните команди в инсталанционната директория:",
+ "Update needed" : "Нужно е обновяване",
+ "This %s instance is currently in maintenance mode, which may take a while." : "В момента този %s се обновява, а това може да отнеме време.",
+ "This page will refresh itself when the %s instance is available again." : "Страницата ще се зареди автоматично, когато %s е отново на линия.",
+ "Error loading tags" : "Грешка при зареждане на етикети",
+ "Tag already exists" : "Етикетът вече съществува",
+ "Error deleting tag(s)" : "Грешка при изтриване на етикет(и)",
+ "Error tagging" : "Грешка при задаване на етикета",
+ "Error untagging" : "Грешка при премахване на етикета",
+ "Error favoriting" : "Грешка при добавяне в любими",
+ "Error unfavoriting" : "Грешка при премахване от любими",
+ "Couldn't send mail to following users: %s " : "Изпращането на имейл до следните потребители не е възможно: %s",
+ "Sunday" : "неделя",
+ "Monday" : "понеделник",
+ "Tuesday" : "вторник",
+ "Wednesday" : "сряда",
+ "Thursday" : "четвъртък",
+ "Friday" : "петък",
+ "Saturday" : "събота",
+ "Sun." : "нед",
+ "Mon." : "пон",
+ "Tue." : "вт",
+ "Wed." : "ср",
+ "Thu." : "чет",
+ "Fri." : "пет",
+ "Sat." : "съб",
+ "Su" : "нд",
+ "Mo" : "пн",
+ "Tu" : "вт",
+ "We" : "ср",
+ "Th" : "чт",
+ "Fr" : "пт",
+ "Sa" : "сб",
+ "January" : "януари",
+ "February" : "февруару",
+ "March" : "март",
+ "April" : "април",
+ "May" : "май",
+ "June" : "юни",
+ "July" : "юли",
+ "August" : "август",
+ "September" : "септември",
+ "October" : "октомври",
+ "November" : "ноември",
+ "December" : "декември",
+ "Jan." : "яну",
+ "Feb." : "фев",
+ "Mar." : "мар",
+ "Apr." : "апр",
+ "May." : "май",
+ "Jun." : "юни",
+ "Jul." : "юли",
+ "Aug." : "авг",
+ "Sep." : "сеп",
+ "Oct." : "окт",
+ "Nov." : "ное",
+ "Dec." : "дек",
+ "Allow editing" : "Позволяване на редактиране",
+ "Hide file listing" : "Скрий показването на файлове",
+ "Sending ..." : "Изпращане ...",
+ "Email sent" : "Имейла е изпратен",
+ "Send link via email" : "Сподели връзка с имейл",
+ "notify by email" : "уведомяване по електронна поща",
+ "can share" : "може да споделя",
+ "create" : "създаване",
+ "change" : "промяна",
+ "delete" : "изтриване",
+ "{sharee} (at {server})" : "{sharee} (в {server})",
+ "Share with users…" : "Споделяне с потребители...",
+ "Share with users, groups or remote users…" : "Споделяне с потребители, групи и отдалечени потребители...",
+ "Share with users or groups…" : "Споделяне с потребители или групи...",
+ "Share with users or remote users…" : "Споделяне с потребители или с отдалечени потребители...",
+ "Warning" : "Предупреждение",
+ "Error while sending notification" : "Грешка при изпращане на уведомление",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Актуализирането е в процес, в някой среди - напускането на тази страница може да прекъсне процеса.",
+ "Updating to {version}" : "Обновяване до {version}",
+ "The update was successful. There were warnings." : "Обновяването мина успешно. Има предупреждения.",
+ "No search results in other folders" : "Няма търсени резултати в други папки",
+ "Cancel login" : "Откажи вписване",
+ "An error occured. Please try again" : "Възникна грешка. Опитайте отново.",
+ "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Споделяй с хора от друг ownCloud-ове като използвате синтаксис username@example.com/owncloud",
+ "Updating {productName} to version {version}, this may take a while." : "Обновяване на {productName} до версия {version}, това може да отнеме известно време.",
+ "An internal error occured." : "Възникна вътрешна грешка."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js
index ec47db08055..b0d6f1a3098 100644
--- a/core/l10n/en_GB.js
+++ b/core/l10n/en_GB.js
@@ -3,6 +3,8 @@ OC.L10N.register(
{
"Please select a file." : "Please select a file.",
"File is too big" : "File is too big",
+ "The selected file is not an image." : "The selected file is not an image.",
+ "The selected file cannot be read." : "The selected file cannot be read.",
"Invalid file provided" : "Invalid file provided",
"No image or file provided" : "No image or file provided",
"Unknown filetype" : "Unknown filetype",
@@ -45,18 +47,25 @@ OC.L10N.register(
"Already up to date" : "Already up to date",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>",
"Settings" : "Settings",
+ "Connection to server lost" : "Connection to server lost",
"Problem loading page, reloading in 5 seconds" : "Problem loading page, reloading in 5 seconds",
"Saving..." : "Saving...",
"Dismiss" : "Dismiss",
+ "This action requires you to confirm your password" : "This action requires you to confirm your password",
+ "Authentication required" : "Authentication required",
"Password" : "Password",
"Cancel" : "Cancel",
+ "Confirm" : "Confirm",
+ "Failed to authenticate, try again" : "Failed to authenticate, try again",
"seconds ago" : "seconds ago",
+ "Logging in …" : "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." : "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.",
"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?",
"I know what I'm doing" : "I know what I'm doing",
"Password can not be changed. Please contact your administrator." : "Password can not be changed. Please contact your administrator.",
"No" : "No",
"Yes" : "Yes",
+ "No files in here" : "No files in here",
"Choose" : "Choose",
"Error loading file picker template: {error}" : "Error loading file picker template: {error}",
"Ok" : "OK",
@@ -72,6 +81,7 @@ OC.L10N.register(
"(all selected)" : "(all selected)",
"({count} selected)" : "({count} selected)",
"Error loading file exists template" : "Error loading file exists template",
+ "Pending" : "Pending",
"Very weak password" : "Very weak password",
"Weak password" : "Weak password",
"So-so password" : "So-so password",
@@ -79,9 +89,11 @@ OC.L10N.register(
"Strong password" : "Strong password",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Your web server is not yet set up properly to allow file synchronisation because the WebDAV interface seems to be broken.",
"Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
+ "This server has no working Internet connection: Multiple endpoints could not be reached. 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." : "This server has no working Internet connection: Multiple endpoints could not be reached. 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.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
"You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it.",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. 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 Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)",
"Error occurred while checking server setup" : "Error occurred whilst checking server setup",
@@ -100,6 +112,7 @@ OC.L10N.register(
"Expiration" : "Expiration",
"Expiration date" : "Expiration date",
"Choose a password for the public link" : "Choose a password for the public link",
+ "Copied!" : "Copied!",
"Resharing is not allowed" : "Resharing is not allowed",
"Share link" : "Share link",
"Link" : "Link",
diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json
index 3742d7a46d7..19e3b8e50cd 100644
--- a/core/l10n/en_GB.json
+++ b/core/l10n/en_GB.json
@@ -1,6 +1,8 @@
{ "translations": {
"Please select a file." : "Please select a file.",
"File is too big" : "File is too big",
+ "The selected file is not an image." : "The selected file is not an image.",
+ "The selected file cannot be read." : "The selected file cannot be read.",
"Invalid file provided" : "Invalid file provided",
"No image or file provided" : "No image or file provided",
"Unknown filetype" : "Unknown filetype",
@@ -43,18 +45,25 @@
"Already up to date" : "Already up to date",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>",
"Settings" : "Settings",
+ "Connection to server lost" : "Connection to server lost",
"Problem loading page, reloading in 5 seconds" : "Problem loading page, reloading in 5 seconds",
"Saving..." : "Saving...",
"Dismiss" : "Dismiss",
+ "This action requires you to confirm your password" : "This action requires you to confirm your password",
+ "Authentication required" : "Authentication required",
"Password" : "Password",
"Cancel" : "Cancel",
+ "Confirm" : "Confirm",
+ "Failed to authenticate, try again" : "Failed to authenticate, try again",
"seconds ago" : "seconds ago",
+ "Logging in …" : "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." : "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.",
"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?",
"I know what I'm doing" : "I know what I'm doing",
"Password can not be changed. Please contact your administrator." : "Password can not be changed. Please contact your administrator.",
"No" : "No",
"Yes" : "Yes",
+ "No files in here" : "No files in here",
"Choose" : "Choose",
"Error loading file picker template: {error}" : "Error loading file picker template: {error}",
"Ok" : "OK",
@@ -70,6 +79,7 @@
"(all selected)" : "(all selected)",
"({count} selected)" : "({count} selected)",
"Error loading file exists template" : "Error loading file exists template",
+ "Pending" : "Pending",
"Very weak password" : "Very weak password",
"Weak password" : "Weak password",
"So-so password" : "So-so password",
@@ -77,9 +87,11 @@
"Strong password" : "Strong password",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Your web server is not yet set up properly to allow file synchronisation because the WebDAV interface seems to be broken.",
"Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
+ "This server has no working Internet connection: Multiple endpoints could not be reached. 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." : "This server has no working Internet connection: Multiple endpoints could not be reached. 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.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
"You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it.",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. 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 Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)",
"Error occurred while checking server setup" : "Error occurred whilst checking server setup",
@@ -98,6 +110,7 @@
"Expiration" : "Expiration",
"Expiration date" : "Expiration date",
"Choose a password for the public link" : "Choose a password for the public link",
+ "Copied!" : "Copied!",
"Resharing is not allowed" : "Resharing is not allowed",
"Share link" : "Share link",
"Link" : "Link",
diff --git a/core/l10n/ru.js b/core/l10n/ru.js
index 2ca9bdd2e71..6b277875762 100644
--- a/core/l10n/ru.js
+++ b/core/l10n/ru.js
@@ -54,6 +54,7 @@ OC.L10N.register(
"Authentication required" : "Требуется аутентификация ",
"Password" : "Пароль",
"Cancel" : "Отмена",
+ "Failed to authenticate, try again" : "Ошибка аутентификации. Попробуйте снова.",
"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." : "Ссылка для сброса пароля была отправлена на ваш email. Если вы не получили письмо в течении разумного промежутка времени, проверьте папку со спамом.<br>Если письма там нет, то обратитесь к вашему администратору.",
@@ -90,6 +91,7 @@ OC.L10N.register(
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробная информация в нашей <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документации</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "PHP не имеет доступа на чтение к /dev/urandom, что крайне нежелательно по соображениям безопасности. Дополнительную информацию можно найти в нашей <a target=\"_blank\" href=\"{docLink}\"> документации </a>.",
"You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Вы используете PHP {version}. Рекомендуется обновить версию PHP, чтобы воспользоваться <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">улучшениями производительности и безопасности, внедрёнными PHP Group</a> как только новая версия будет доступна в Вашем дистрибутиве. ",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. 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>.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached настроен на распределенный кеш, но установлен не поддерживаемый модуль PHP \"memcache\". \\OC\\Memcache\\Memcached поддерживает только модуль \"memcached\", но не \"memcache\". Больше информации на <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki странице memcached о обоих модулях</a>.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Некоторые файлы не прошли проверку целостности. Дополнительная информация о том, как устранить данную проблему доступна в нашей <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документации</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Список проблемных файлов…</a> / <a href=\"{rescanEndpoint}\">Сканировать ещё раз…</a>)",
"Error occurred while checking server setup" : "Произошла ошибка при проверке настроек сервера",
diff --git a/core/l10n/ru.json b/core/l10n/ru.json
index 8f94cd5e323..0c8d22fabaa 100644
--- a/core/l10n/ru.json
+++ b/core/l10n/ru.json
@@ -52,6 +52,7 @@
"Authentication required" : "Требуется аутентификация ",
"Password" : "Пароль",
"Cancel" : "Отмена",
+ "Failed to authenticate, try again" : "Ошибка аутентификации. Попробуйте снова.",
"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." : "Ссылка для сброса пароля была отправлена на ваш email. Если вы не получили письмо в течении разумного промежутка времени, проверьте папку со спамом.<br>Если письма там нет, то обратитесь к вашему администратору.",
@@ -88,6 +89,7 @@
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробная информация в нашей <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документации</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "PHP не имеет доступа на чтение к /dev/urandom, что крайне нежелательно по соображениям безопасности. Дополнительную информацию можно найти в нашей <a target=\"_blank\" href=\"{docLink}\"> документации </a>.",
"You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Вы используете PHP {version}. Рекомендуется обновить версию PHP, чтобы воспользоваться <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">улучшениями производительности и безопасности, внедрёнными PHP Group</a> как только новая версия будет доступна в Вашем дистрибутиве. ",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. 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>.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached настроен на распределенный кеш, но установлен не поддерживаемый модуль PHP \"memcache\". \\OC\\Memcache\\Memcached поддерживает только модуль \"memcached\", но не \"memcache\". Больше информации на <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki странице memcached о обоих модулях</a>.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Некоторые файлы не прошли проверку целостности. Дополнительная информация о том, как устранить данную проблему доступна в нашей <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документации</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Список проблемных файлов…</a> / <a href=\"{rescanEndpoint}\">Сканировать ещё раз…</a>)",
"Error occurred while checking server setup" : "Произошла ошибка при проверке настроек сервера",
diff --git a/core/templates/login.php b/core/templates/login.php
index 46045f86b50..c200dfe366b 100644
--- a/core/templates/login.php
+++ b/core/templates/login.php
@@ -80,7 +80,7 @@ script('core', [
<?php endif; ?>
</div>
- <input type="hidden" name="timezone-offset" id="timezone-offset"/>
+ <input type="hidden" name="timezone_offset" id="timezone_offset"/>
<input type="hidden" name="timezone" id="timezone"/>
<input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>">
</fieldset>
diff --git a/lib/composer/autoload.php b/lib/composer/autoload.php
index 610dbf34bca..6de0160c0b5 100644
--- a/lib/composer/autoload.php
+++ b/lib/composer/autoload.php
@@ -2,6 +2,6 @@
// autoload.php @generated by Composer
-require_once __DIR__ . '/composer' . '/autoload_real.php';
+require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c::getLoader();
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index dafa46bc996..272f7588d15 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -9,8 +9,12 @@ return array(
'OCP\\API' => $baseDir . '/lib/public/API.php',
'OCP\\Activity\\IConsumer' => $baseDir . '/lib/public/Activity/IConsumer.php',
'OCP\\Activity\\IEvent' => $baseDir . '/lib/public/Activity/IEvent.php',
+ 'OCP\\Activity\\IEventMerger' => $baseDir . '/lib/public/Activity/IEventMerger.php',
'OCP\\Activity\\IExtension' => $baseDir . '/lib/public/Activity/IExtension.php',
+ 'OCP\\Activity\\IFilter' => $baseDir . '/lib/public/Activity/IFilter.php',
'OCP\\Activity\\IManager' => $baseDir . '/lib/public/Activity/IManager.php',
+ 'OCP\\Activity\\IProvider' => $baseDir . '/lib/public/Activity/IProvider.php',
+ 'OCP\\Activity\\ISetting' => $baseDir . '/lib/public/Activity/ISetting.php',
'OCP\\App' => $baseDir . '/lib/public/App.php',
'OCP\\AppFramework\\ApiController' => $baseDir . '/lib/public/AppFramework/ApiController.php',
'OCP\\AppFramework\\App' => $baseDir . '/lib/public/AppFramework/App.php',
@@ -47,6 +51,7 @@ return array(
'OCP\\AppFramework\\QueryException' => $baseDir . '/lib/public/AppFramework/QueryException.php',
'OCP\\AppFramework\\Utility\\IControllerMethodReflector' => $baseDir . '/lib/public/AppFramework/Utility/IControllerMethodReflector.php',
'OCP\\AppFramework\\Utility\\ITimeFactory' => $baseDir . '/lib/public/AppFramework/Utility/ITimeFactory.php',
+ 'OCP\\App\\AppPathNotFoundException' => $baseDir . '/lib/public/App/AppPathNotFoundException.php',
'OCP\\App\\IAppManager' => $baseDir . '/lib/public/App/IAppManager.php',
'OCP\\App\\ManagerEvent' => $baseDir . '/lib/public/App/ManagerEvent.php',
'OCP\\Authentication\\IApacheBackend' => $baseDir . '/lib/public/Authentication/IApacheBackend.php',
@@ -102,6 +107,7 @@ return array(
'OCP\\Files\\Config\\IMountProvider' => $baseDir . '/lib/public/Files/Config/IMountProvider.php',
'OCP\\Files\\Config\\IMountProviderCollection' => $baseDir . '/lib/public/Files/Config/IMountProviderCollection.php',
'OCP\\Files\\Config\\IUserMountCache' => $baseDir . '/lib/public/Files/Config/IUserMountCache.php',
+ 'OCP\\Files\\EmptyFileNameException' => $baseDir . '/lib/public/Files/EmptyFileNameException.php',
'OCP\\Files\\EntityTooLargeException' => $baseDir . '/lib/public/Files/EntityTooLargeException.php',
'OCP\\Files\\File' => $baseDir . '/lib/public/Files/File.php',
'OCP\\Files\\FileInfo' => $baseDir . '/lib/public/Files/FileInfo.php',
@@ -115,6 +121,7 @@ return array(
'OCP\\Files\\IRootFolder' => $baseDir . '/lib/public/Files/IRootFolder.php',
'OCP\\Files\\InvalidCharacterInPathException' => $baseDir . '/lib/public/Files/InvalidCharacterInPathException.php',
'OCP\\Files\\InvalidContentException' => $baseDir . '/lib/public/Files/InvalidContentException.php',
+ 'OCP\\Files\\InvalidDirectoryException' => $baseDir . '/lib/public/Files/InvalidDirectoryException.php',
'OCP\\Files\\InvalidPathException' => $baseDir . '/lib/public/Files/InvalidPathException.php',
'OCP\\Files\\LockNotAcquiredException' => $baseDir . '/lib/public/Files/LockNotAcquiredException.php',
'OCP\\Files\\Mount\\IMountManager' => $baseDir . '/lib/public/Files/Mount/IMountManager.php',
@@ -157,7 +164,6 @@ return array(
'OCP\\IDBConnection' => $baseDir . '/lib/public/IDBConnection.php',
'OCP\\IDateTimeFormatter' => $baseDir . '/lib/public/IDateTimeFormatter.php',
'OCP\\IDateTimeZone' => $baseDir . '/lib/public/IDateTimeZone.php',
- 'OCP\\IDb' => $baseDir . '/lib/public/IDb.php',
'OCP\\IEventSource' => $baseDir . '/lib/public/IEventSource.php',
'OCP\\IGroup' => $baseDir . '/lib/public/IGroup.php',
'OCP\\IGroupManager' => $baseDir . '/lib/public/IGroupManager.php',
@@ -201,6 +207,7 @@ return array(
'OCP\\PreConditionNotMetException' => $baseDir . '/lib/public/PreConditionNotMetException.php',
'OCP\\Preview\\IProvider' => $baseDir . '/lib/public/Preview/IProvider.php',
'OCP\\Response' => $baseDir . '/lib/public/Response.php',
+ 'OCP\\RichObjectStrings\\Definitions' => $baseDir . '/lib/public/RichObjectStrings/Definitions.php',
'OCP\\RichObjectStrings\\IValidator' => $baseDir . '/lib/public/RichObjectStrings/IValidator.php',
'OCP\\RichObjectStrings\\InvalidObjectExeption' => $baseDir . '/lib/public/RichObjectStrings/InvalidObjectExeption.php',
'OCP\\Route\\IRoute' => $baseDir . '/lib/public/Route/IRoute.php',
@@ -247,13 +254,17 @@ return array(
'OCP\\WorkflowEngine\\ICheck' => $baseDir . '/lib/public/WorkflowEngine/ICheck.php',
'OCP\\WorkflowEngine\\IManager' => $baseDir . '/lib/public/WorkflowEngine/IManager.php',
'OCP\\WorkflowEngine\\IOperation' => $baseDir . '/lib/public/WorkflowEngine/IOperation.php',
+ 'OC\\Accounts\\AccountManager' => $baseDir . '/lib/private/Accounts/AccountManager.php',
+ 'OC\\Accounts\\Hooks' => $baseDir . '/lib/private/Accounts/Hooks.php',
'OC\\Activity\\Event' => $baseDir . '/lib/private/Activity/Event.php',
+ 'OC\\Activity\\EventMerger' => $baseDir . '/lib/private/Activity/EventMerger.php',
+ 'OC\\Activity\\LegacyFilter' => $baseDir . '/lib/private/Activity/LegacyFilter.php',
+ 'OC\\Activity\\LegacySetting' => $baseDir . '/lib/private/Activity/LegacySetting.php',
'OC\\Activity\\Manager' => $baseDir . '/lib/private/Activity/Manager.php',
'OC\\AllConfig' => $baseDir . '/lib/private/AllConfig.php',
'OC\\AppConfig' => $baseDir . '/lib/private/AppConfig.php',
'OC\\AppFramework\\App' => $baseDir . '/lib/private/AppFramework/App.php',
'OC\\AppFramework\\Core\\API' => $baseDir . '/lib/private/AppFramework/Core/API.php',
- 'OC\\AppFramework\\Db\\Db' => $baseDir . '/lib/private/AppFramework/Db/Db.php',
'OC\\AppFramework\\DependencyInjection\\DIContainer' => $baseDir . '/lib/private/AppFramework/DependencyInjection/DIContainer.php',
'OC\\AppFramework\\Http' => $baseDir . '/lib/private/AppFramework/Http.php',
'OC\\AppFramework\\Http\\Dispatcher' => $baseDir . '/lib/private/AppFramework/Http/Dispatcher.php',
@@ -517,6 +528,9 @@ return array(
'OC\\Files\\ObjectStore\\Mapper' => $baseDir . '/lib/private/Files/ObjectStore/Mapper.php',
'OC\\Files\\ObjectStore\\NoopScanner' => $baseDir . '/lib/private/Files/ObjectStore/NoopScanner.php',
'OC\\Files\\ObjectStore\\ObjectStoreStorage' => $baseDir . '/lib/private/Files/ObjectStore/ObjectStoreStorage.php',
+ 'OC\\Files\\ObjectStore\\S3' => $baseDir . '/lib/private/Files/ObjectStore/S3.php',
+ 'OC\\Files\\ObjectStore\\S3ConnectionTrait' => $baseDir . '/lib/private/Files/ObjectStore/S3ConnectionTrait.php',
+ 'OC\\Files\\ObjectStore\\StorageObjectStore' => $baseDir . '/lib/private/Files/ObjectStore/StorageObjectStore.php',
'OC\\Files\\ObjectStore\\Swift' => $baseDir . '/lib/private/Files/ObjectStore/Swift.php',
'OC\\Files\\SimpleFS\\SimpleFile' => $baseDir . '/lib/private/Files/SimpleFS/SimpleFile.php',
'OC\\Files\\SimpleFS\\SimpleFolder' => $baseDir . '/lib/private/Files/SimpleFS/SimpleFolder.php',
@@ -615,7 +629,6 @@ return array(
'OC\\Notification\\Notification' => $baseDir . '/lib/private/Notification/Notification.php',
'OC\\OCS\\CoreCapabilities' => $baseDir . '/lib/private/OCS/CoreCapabilities.php',
'OC\\OCS\\Exception' => $baseDir . '/lib/private/OCS/Exception.php',
- 'OC\\OCS\\Person' => $baseDir . '/lib/private/OCS/Person.php',
'OC\\OCS\\PrivateData' => $baseDir . '/lib/private/OCS/PrivateData.php',
'OC\\OCS\\Provider' => $baseDir . '/lib/private/OCS/Provider.php',
'OC\\OCS\\Result' => $baseDir . '/lib/private/OCS/Result.php',
@@ -663,8 +676,11 @@ return array(
'OC\\Repair\\FillETags' => $baseDir . '/lib/private/Repair/FillETags.php',
'OC\\Repair\\InnoDB' => $baseDir . '/lib/private/Repair/InnoDB.php',
'OC\\Repair\\MoveUpdaterStepFile' => $baseDir . '/lib/private/Repair/MoveUpdaterStepFile.php',
+ 'OC\\Repair\\NC11\\CleanPreviews' => $baseDir . '/lib/private/Repair/NC11/CleanPreviews.php',
+ 'OC\\Repair\\NC11\\CleanPreviewsBackgroundJob' => $baseDir . '/lib/private/Repair/NC11/CleanPreviewsBackgroundJob.php',
+ 'OC\\Repair\\NC11\\FixMountStorages' => $baseDir . '/lib/private/Repair/NC11/FixMountStorages.php',
'OC\\Repair\\NC11\\MoveAvatars' => $baseDir . '/lib/private/Repair/NC11/MoveAvatars.php',
- 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => $baseDir . '/lib/private/Repair/NC11/MoveAvatarBackgroundJob.php',
+ 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => $baseDir . '/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php',
'OC\\Repair\\OldGroupMembershipShares' => $baseDir . '/lib/private/Repair/OldGroupMembershipShares.php',
'OC\\Repair\\Preview' => $baseDir . '/lib/private/Repair/Preview.php',
'OC\\Repair\\RemoveGetETagEntries' => $baseDir . '/lib/private/Repair/RemoveGetETagEntries.php',
@@ -702,6 +718,9 @@ return array(
'OC\\Security\\CredentialsManager' => $baseDir . '/lib/private/Security/CredentialsManager.php',
'OC\\Security\\Crypto' => $baseDir . '/lib/private/Security/Crypto.php',
'OC\\Security\\Hasher' => $baseDir . '/lib/private/Security/Hasher.php',
+ 'OC\\Security\\IdentityProof\\Key' => $baseDir . '/lib/private/Security/IdentityProof/Key.php',
+ 'OC\\Security\\IdentityProof\\Manager' => $baseDir . '/lib/private/Security/IdentityProof/Manager.php',
+ 'OC\\Security\\IdentityProof\\Signer' => $baseDir . '/lib/private/Security/IdentityProof/Signer.php',
'OC\\Security\\SecureRandom' => $baseDir . '/lib/private/Security/SecureRandom.php',
'OC\\Security\\TrustedDomainHelper' => $baseDir . '/lib/private/Security/TrustedDomainHelper.php',
'OC\\Server' => $baseDir . '/lib/private/Server.php',
@@ -715,8 +734,8 @@ return array(
'OC\\Session\\Session' => $baseDir . '/lib/private/Session/Session.php',
'OC\\Settings\\Admin\\Additional' => $baseDir . '/lib/private/Settings/Admin/Additional.php',
'OC\\Settings\\Admin\\Encryption' => $baseDir . '/lib/private/Settings/Admin/Encryption.php',
- 'OC\\Settings\\Admin\\Logging' => $baseDir . '/lib/private/Settings/Admin/Logging.php',
'OC\\Settings\\Admin\\Server' => $baseDir . '/lib/private/Settings/Admin/Server.php',
+ 'OC\\Settings\\Admin\\ServerDevNotice' => $baseDir . '/lib/private/Settings/Admin/ServerDevNotice.php',
'OC\\Settings\\Admin\\Sharing' => $baseDir . '/lib/private/Settings/Admin/Sharing.php',
'OC\\Settings\\Admin\\TipsTricks' => $baseDir . '/lib/private/Settings/Admin/TipsTricks.php',
'OC\\Settings\\Application' => $baseDir . '/settings/Application.php',
@@ -730,6 +749,7 @@ return array(
'OC\\Settings\\Controller\\GroupsController' => $baseDir . '/settings/Controller/GroupsController.php',
'OC\\Settings\\Controller\\LogSettingsController' => $baseDir . '/settings/Controller/LogSettingsController.php',
'OC\\Settings\\Controller\\MailSettingsController' => $baseDir . '/settings/Controller/MailSettingsController.php',
+ 'OC\\Settings\\Controller\\PersonalController' => $baseDir . '/settings/Controller/PersonalController.php',
'OC\\Settings\\Controller\\SecuritySettingsController' => $baseDir . '/settings/Controller/SecuritySettingsController.php',
'OC\\Settings\\Controller\\UsersController' => $baseDir . '/settings/Controller/UsersController.php',
'OC\\Settings\\Manager' => $baseDir . '/lib/private/Settings/Manager.php',
diff --git a/lib/composer/composer/autoload_real.php b/lib/composer/composer/autoload_real.php
index 43d67606954..b9f89d16ad7 100644
--- a/lib/composer/composer/autoload_real.php
+++ b/lib/composer/composer/autoload_real.php
@@ -23,7 +23,7 @@ class ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c', 'loadClassLoader'));
- $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 5b8356785bc..98f97d5e511 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -39,8 +39,12 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\API' => __DIR__ . '/../../..' . '/lib/public/API.php',
'OCP\\Activity\\IConsumer' => __DIR__ . '/../../..' . '/lib/public/Activity/IConsumer.php',
'OCP\\Activity\\IEvent' => __DIR__ . '/../../..' . '/lib/public/Activity/IEvent.php',
+ 'OCP\\Activity\\IEventMerger' => __DIR__ . '/../../..' . '/lib/public/Activity/IEventMerger.php',
'OCP\\Activity\\IExtension' => __DIR__ . '/../../..' . '/lib/public/Activity/IExtension.php',
+ 'OCP\\Activity\\IFilter' => __DIR__ . '/../../..' . '/lib/public/Activity/IFilter.php',
'OCP\\Activity\\IManager' => __DIR__ . '/../../..' . '/lib/public/Activity/IManager.php',
+ 'OCP\\Activity\\IProvider' => __DIR__ . '/../../..' . '/lib/public/Activity/IProvider.php',
+ 'OCP\\Activity\\ISetting' => __DIR__ . '/../../..' . '/lib/public/Activity/ISetting.php',
'OCP\\App' => __DIR__ . '/../../..' . '/lib/public/App.php',
'OCP\\AppFramework\\ApiController' => __DIR__ . '/../../..' . '/lib/public/AppFramework/ApiController.php',
'OCP\\AppFramework\\App' => __DIR__ . '/../../..' . '/lib/public/AppFramework/App.php',
@@ -77,6 +81,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\AppFramework\\QueryException' => __DIR__ . '/../../..' . '/lib/public/AppFramework/QueryException.php',
'OCP\\AppFramework\\Utility\\IControllerMethodReflector' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Utility/IControllerMethodReflector.php',
'OCP\\AppFramework\\Utility\\ITimeFactory' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Utility/ITimeFactory.php',
+ 'OCP\\App\\AppPathNotFoundException' => __DIR__ . '/../../..' . '/lib/public/App/AppPathNotFoundException.php',
'OCP\\App\\IAppManager' => __DIR__ . '/../../..' . '/lib/public/App/IAppManager.php',
'OCP\\App\\ManagerEvent' => __DIR__ . '/../../..' . '/lib/public/App/ManagerEvent.php',
'OCP\\Authentication\\IApacheBackend' => __DIR__ . '/../../..' . '/lib/public/Authentication/IApacheBackend.php',
@@ -132,6 +137,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Files\\Config\\IMountProvider' => __DIR__ . '/../../..' . '/lib/public/Files/Config/IMountProvider.php',
'OCP\\Files\\Config\\IMountProviderCollection' => __DIR__ . '/../../..' . '/lib/public/Files/Config/IMountProviderCollection.php',
'OCP\\Files\\Config\\IUserMountCache' => __DIR__ . '/../../..' . '/lib/public/Files/Config/IUserMountCache.php',
+ 'OCP\\Files\\EmptyFileNameException' => __DIR__ . '/../../..' . '/lib/public/Files/EmptyFileNameException.php',
'OCP\\Files\\EntityTooLargeException' => __DIR__ . '/../../..' . '/lib/public/Files/EntityTooLargeException.php',
'OCP\\Files\\File' => __DIR__ . '/../../..' . '/lib/public/Files/File.php',
'OCP\\Files\\FileInfo' => __DIR__ . '/../../..' . '/lib/public/Files/FileInfo.php',
@@ -145,6 +151,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Files\\IRootFolder' => __DIR__ . '/../../..' . '/lib/public/Files/IRootFolder.php',
'OCP\\Files\\InvalidCharacterInPathException' => __DIR__ . '/../../..' . '/lib/public/Files/InvalidCharacterInPathException.php',
'OCP\\Files\\InvalidContentException' => __DIR__ . '/../../..' . '/lib/public/Files/InvalidContentException.php',
+ 'OCP\\Files\\InvalidDirectoryException' => __DIR__ . '/../../..' . '/lib/public/Files/InvalidDirectoryException.php',
'OCP\\Files\\InvalidPathException' => __DIR__ . '/../../..' . '/lib/public/Files/InvalidPathException.php',
'OCP\\Files\\LockNotAcquiredException' => __DIR__ . '/../../..' . '/lib/public/Files/LockNotAcquiredException.php',
'OCP\\Files\\Mount\\IMountManager' => __DIR__ . '/../../..' . '/lib/public/Files/Mount/IMountManager.php',
@@ -187,7 +194,6 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\IDBConnection' => __DIR__ . '/../../..' . '/lib/public/IDBConnection.php',
'OCP\\IDateTimeFormatter' => __DIR__ . '/../../..' . '/lib/public/IDateTimeFormatter.php',
'OCP\\IDateTimeZone' => __DIR__ . '/../../..' . '/lib/public/IDateTimeZone.php',
- 'OCP\\IDb' => __DIR__ . '/../../..' . '/lib/public/IDb.php',
'OCP\\IEventSource' => __DIR__ . '/../../..' . '/lib/public/IEventSource.php',
'OCP\\IGroup' => __DIR__ . '/../../..' . '/lib/public/IGroup.php',
'OCP\\IGroupManager' => __DIR__ . '/../../..' . '/lib/public/IGroupManager.php',
@@ -231,6 +237,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\PreConditionNotMetException' => __DIR__ . '/../../..' . '/lib/public/PreConditionNotMetException.php',
'OCP\\Preview\\IProvider' => __DIR__ . '/../../..' . '/lib/public/Preview/IProvider.php',
'OCP\\Response' => __DIR__ . '/../../..' . '/lib/public/Response.php',
+ 'OCP\\RichObjectStrings\\Definitions' => __DIR__ . '/../../..' . '/lib/public/RichObjectStrings/Definitions.php',
'OCP\\RichObjectStrings\\IValidator' => __DIR__ . '/../../..' . '/lib/public/RichObjectStrings/IValidator.php',
'OCP\\RichObjectStrings\\InvalidObjectExeption' => __DIR__ . '/../../..' . '/lib/public/RichObjectStrings/InvalidObjectExeption.php',
'OCP\\Route\\IRoute' => __DIR__ . '/../../..' . '/lib/public/Route/IRoute.php',
@@ -277,13 +284,17 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\WorkflowEngine\\ICheck' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/ICheck.php',
'OCP\\WorkflowEngine\\IManager' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IManager.php',
'OCP\\WorkflowEngine\\IOperation' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IOperation.php',
+ 'OC\\Accounts\\AccountManager' => __DIR__ . '/../../..' . '/lib/private/Accounts/AccountManager.php',
+ 'OC\\Accounts\\Hooks' => __DIR__ . '/../../..' . '/lib/private/Accounts/Hooks.php',
'OC\\Activity\\Event' => __DIR__ . '/../../..' . '/lib/private/Activity/Event.php',
+ 'OC\\Activity\\EventMerger' => __DIR__ . '/../../..' . '/lib/private/Activity/EventMerger.php',
+ 'OC\\Activity\\LegacyFilter' => __DIR__ . '/../../..' . '/lib/private/Activity/LegacyFilter.php',
+ 'OC\\Activity\\LegacySetting' => __DIR__ . '/../../..' . '/lib/private/Activity/LegacySetting.php',
'OC\\Activity\\Manager' => __DIR__ . '/../../..' . '/lib/private/Activity/Manager.php',
'OC\\AllConfig' => __DIR__ . '/../../..' . '/lib/private/AllConfig.php',
'OC\\AppConfig' => __DIR__ . '/../../..' . '/lib/private/AppConfig.php',
'OC\\AppFramework\\App' => __DIR__ . '/../../..' . '/lib/private/AppFramework/App.php',
'OC\\AppFramework\\Core\\API' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Core/API.php',
- 'OC\\AppFramework\\Db\\Db' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Db/Db.php',
'OC\\AppFramework\\DependencyInjection\\DIContainer' => __DIR__ . '/../../..' . '/lib/private/AppFramework/DependencyInjection/DIContainer.php',
'OC\\AppFramework\\Http' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Http.php',
'OC\\AppFramework\\Http\\Dispatcher' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Http/Dispatcher.php',
@@ -547,6 +558,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Files\\ObjectStore\\Mapper' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/Mapper.php',
'OC\\Files\\ObjectStore\\NoopScanner' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/NoopScanner.php',
'OC\\Files\\ObjectStore\\ObjectStoreStorage' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/ObjectStoreStorage.php',
+ 'OC\\Files\\ObjectStore\\S3' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/S3.php',
+ 'OC\\Files\\ObjectStore\\S3ConnectionTrait' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/S3ConnectionTrait.php',
+ 'OC\\Files\\ObjectStore\\StorageObjectStore' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/StorageObjectStore.php',
'OC\\Files\\ObjectStore\\Swift' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/Swift.php',
'OC\\Files\\SimpleFS\\SimpleFile' => __DIR__ . '/../../..' . '/lib/private/Files/SimpleFS/SimpleFile.php',
'OC\\Files\\SimpleFS\\SimpleFolder' => __DIR__ . '/../../..' . '/lib/private/Files/SimpleFS/SimpleFolder.php',
@@ -645,7 +659,6 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Notification\\Notification' => __DIR__ . '/../../..' . '/lib/private/Notification/Notification.php',
'OC\\OCS\\CoreCapabilities' => __DIR__ . '/../../..' . '/lib/private/OCS/CoreCapabilities.php',
'OC\\OCS\\Exception' => __DIR__ . '/../../..' . '/lib/private/OCS/Exception.php',
- 'OC\\OCS\\Person' => __DIR__ . '/../../..' . '/lib/private/OCS/Person.php',
'OC\\OCS\\PrivateData' => __DIR__ . '/../../..' . '/lib/private/OCS/PrivateData.php',
'OC\\OCS\\Provider' => __DIR__ . '/../../..' . '/lib/private/OCS/Provider.php',
'OC\\OCS\\Result' => __DIR__ . '/../../..' . '/lib/private/OCS/Result.php',
@@ -693,8 +706,11 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Repair\\FillETags' => __DIR__ . '/../../..' . '/lib/private/Repair/FillETags.php',
'OC\\Repair\\InnoDB' => __DIR__ . '/../../..' . '/lib/private/Repair/InnoDB.php',
'OC\\Repair\\MoveUpdaterStepFile' => __DIR__ . '/../../..' . '/lib/private/Repair/MoveUpdaterStepFile.php',
+ 'OC\\Repair\\NC11\\CleanPreviews' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/CleanPreviews.php',
+ 'OC\\Repair\\NC11\\CleanPreviewsBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/CleanPreviewsBackgroundJob.php',
+ 'OC\\Repair\\NC11\\FixMountStorages' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/FixMountStorages.php',
'OC\\Repair\\NC11\\MoveAvatars' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatars.php',
- 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatarBackgroundJob.php',
+ 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php',
'OC\\Repair\\OldGroupMembershipShares' => __DIR__ . '/../../..' . '/lib/private/Repair/OldGroupMembershipShares.php',
'OC\\Repair\\Preview' => __DIR__ . '/../../..' . '/lib/private/Repair/Preview.php',
'OC\\Repair\\RemoveGetETagEntries' => __DIR__ . '/../../..' . '/lib/private/Repair/RemoveGetETagEntries.php',
@@ -732,6 +748,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Security\\CredentialsManager' => __DIR__ . '/../../..' . '/lib/private/Security/CredentialsManager.php',
'OC\\Security\\Crypto' => __DIR__ . '/../../..' . '/lib/private/Security/Crypto.php',
'OC\\Security\\Hasher' => __DIR__ . '/../../..' . '/lib/private/Security/Hasher.php',
+ 'OC\\Security\\IdentityProof\\Key' => __DIR__ . '/../../..' . '/lib/private/Security/IdentityProof/Key.php',
+ 'OC\\Security\\IdentityProof\\Manager' => __DIR__ . '/../../..' . '/lib/private/Security/IdentityProof/Manager.php',
+ 'OC\\Security\\IdentityProof\\Signer' => __DIR__ . '/../../..' . '/lib/private/Security/IdentityProof/Signer.php',
'OC\\Security\\SecureRandom' => __DIR__ . '/../../..' . '/lib/private/Security/SecureRandom.php',
'OC\\Security\\TrustedDomainHelper' => __DIR__ . '/../../..' . '/lib/private/Security/TrustedDomainHelper.php',
'OC\\Server' => __DIR__ . '/../../..' . '/lib/private/Server.php',
@@ -745,8 +764,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Session\\Session' => __DIR__ . '/../../..' . '/lib/private/Session/Session.php',
'OC\\Settings\\Admin\\Additional' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Additional.php',
'OC\\Settings\\Admin\\Encryption' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Encryption.php',
- 'OC\\Settings\\Admin\\Logging' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Logging.php',
'OC\\Settings\\Admin\\Server' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Server.php',
+ 'OC\\Settings\\Admin\\ServerDevNotice' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/ServerDevNotice.php',
'OC\\Settings\\Admin\\Sharing' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Sharing.php',
'OC\\Settings\\Admin\\TipsTricks' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/TipsTricks.php',
'OC\\Settings\\Application' => __DIR__ . '/../../..' . '/settings/Application.php',
@@ -760,6 +779,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Settings\\Controller\\GroupsController' => __DIR__ . '/../../..' . '/settings/Controller/GroupsController.php',
'OC\\Settings\\Controller\\LogSettingsController' => __DIR__ . '/../../..' . '/settings/Controller/LogSettingsController.php',
'OC\\Settings\\Controller\\MailSettingsController' => __DIR__ . '/../../..' . '/settings/Controller/MailSettingsController.php',
+ 'OC\\Settings\\Controller\\PersonalController' => __DIR__ . '/../../..' . '/settings/Controller/PersonalController.php',
'OC\\Settings\\Controller\\SecuritySettingsController' => __DIR__ . '/../../..' . '/settings/Controller/SecuritySettingsController.php',
'OC\\Settings\\Controller\\UsersController' => __DIR__ . '/../../..' . '/settings/Controller/UsersController.php',
'OC\\Settings\\Manager' => __DIR__ . '/../../..' . '/lib/private/Settings/Manager.php',
diff --git a/lib/private/App/AppStore/Fetcher/AppFetcher.php b/lib/private/App/AppStore/Fetcher/AppFetcher.php
index bbe75c723d5..b8efdef4336 100644
--- a/lib/private/App/AppStore/Fetcher/AppFetcher.php
+++ b/lib/private/App/AppStore/Fetcher/AppFetcher.php
@@ -50,7 +50,7 @@ class AppFetcher extends Fetcher {
$this->fileName = 'apps.json';
$this->config = $config;
- $versionArray = \OC_Util::getVersion();
+ $versionArray = explode('.', $this->config->getSystemValue('version'));
$this->endpointUrl = sprintf(
'https://apps.nextcloud.com/api/v1/platform/%d.%d.%d/apps.json',
$versionArray[0],
diff --git a/lib/private/AppFramework/Db/Db.php b/lib/private/AppFramework/Db/Db.php
deleted file mode 100644
index 5aacdc517a2..00000000000
--- a/lib/private/AppFramework/Db/Db.php
+++ /dev/null
@@ -1,314 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Bernhard Posselt <dev@bernhard-posselt.com>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin Appelman <robin@icewind.nl>
- * @author Robin McCorkell <robin@mccorkell.me.uk>
- * @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/>
- *
- */
-
-namespace OC\AppFramework\Db;
-
-use OCP\DB\QueryBuilder\IQueryBuilder;
-use OCP\IDb;
-use OCP\IDBConnection;
-use OCP\PreConditionNotMetException;
-use Doctrine\DBAL\Platforms\MySqlPlatform;
-
-/**
- * @deprecated use IDBConnection directly, will be removed in ownCloud 10
- * Small Facade for being able to inject the database connection for tests
- */
-class Db implements IDb {
- /**
- * @var IDBConnection
- */
- protected $connection;
-
- /**
- * @param IDBConnection $connection
- */
- public function __construct(IDBConnection $connection) {
- $this->connection = $connection;
- }
-
- /**
- * Gets the ExpressionBuilder for the connection.
- *
- * @return \OCP\DB\QueryBuilder\IQueryBuilder
- */
- public function getQueryBuilder() {
- return $this->connection->getQueryBuilder();
- }
-
- /**
- * Used to abstract the ownCloud database access away
- *
- * @param string $sql the sql query with ? placeholder for params
- * @param int $limit the maximum number of rows
- * @param int $offset from which row we want to start
- * @deprecated use prepare instead, will be removed in ownCloud 10
- * @return \OC_DB_StatementWrapper prepared SQL query
- */
- public function prepareQuery($sql, $limit = null, $offset = null) {
- $isManipulation = \OC_DB::isManipulation($sql);
- $statement = $this->connection->prepare($sql, $limit, $offset);
- return new \OC_DB_StatementWrapper($statement, $isManipulation);
- }
-
-
- /**
- * Used to get the id of the just inserted element
- *
- * @deprecated use lastInsertId instead, will be removed in ownCloud 10
- * @param string $tableName the name of the table where we inserted the item
- * @return int the id of the inserted element
- */
- public function getInsertId($tableName) {
- return $this->connection->lastInsertId($tableName);
- }
-
- /**
- * Used to abstract the ownCloud database access away
- * @param string $sql the sql query with ? placeholder for params
- * @param int $limit the maximum number of rows
- * @param int $offset from which row we want to start
- * @return \Doctrine\DBAL\Driver\Statement The prepared statement.
- */
- public function prepare($sql, $limit=null, $offset=null) {
- return $this->connection->prepare($sql, $limit, $offset);
- }
-
- /**
- * Executes an, optionally parameterized, SQL query.
- *
- * If the query is parameterized, a prepared statement is used.
- * If an SQLLogger is configured, the execution is logged.
- *
- * @param string $query The SQL query to execute.
- * @param string[] $params The parameters to bind to the query, if any.
- * @param array $types The types the previous parameters are in.
- * @return \Doctrine\DBAL\Driver\Statement The executed statement.
- */
- public function executeQuery($query, array $params = array(), $types = array()) {
- return $this->connection->executeQuery($query, $params, $types);
- }
-
- /**
- * Executes an SQL INSERT/UPDATE/DELETE query with the given parameters
- * and returns the number of affected rows.
- *
- * This method supports PDO binding types as well as DBAL mapping types.
- *
- * @param string $query The SQL query.
- * @param array $params The query parameters.
- * @param array $types The parameter types.
- * @return integer The number of affected rows.
- */
- public function executeUpdate($query, array $params = array(), array $types = array()) {
- return $this->connection->executeUpdate($query, $params, $types);
- }
-
- /**
- * Used to get the id of the just inserted element
- * @param string $table the name of the table where we inserted the item
- * @return int the id of the inserted element
- */
- public function lastInsertId($table = null) {
- return $this->connection->lastInsertId($table);
- }
-
- /**
- * Insert a row if the matching row does not exists.
- *
- * @param string $table The table name (will replace *PREFIX* with the actual prefix)
- * @param array $input data that should be inserted into the table (column name => value)
- * @param array|null $compare List of values that should be checked for "if not exists"
- * If this is null or an empty array, all keys of $input will be compared
- * Please note: text fields (clob) must not be used in the compare array
- * @return int number of inserted rows
- * @throws \Doctrine\DBAL\DBALException
- */
- public function insertIfNotExist($table, $input, array $compare = null) {
- return $this->connection->insertIfNotExist($table, $input, $compare);
- }
-
- /**
- * Insert or update a row value
- *
- * @param string $table
- * @param array $keys (column name => value)
- * @param array $values (column name => value)
- * @param array $updatePreconditionValues ensure values match preconditions (column name => value)
- * @return int number of new rows
- * @throws \Doctrine\DBAL\DBALException
- * @throws PreConditionNotMetException
- */
- public function setValues($table, array $keys, array $values, array $updatePreconditionValues = []) {
- return $this->connection->setValues($table, $keys, $values, $updatePreconditionValues);
- }
-
- /**
- * @inheritdoc
- */
- public function lockTable($tableName) {
- $this->connection->lockTable($tableName);
- }
-
- /**
- * @inheritdoc
- */
- public function unlockTable() {
- $this->connection->unlockTable();
- }
-
- /**
- * Start a transaction
- */
- public function beginTransaction() {
- $this->connection->beginTransaction();
- }
-
- /**
- * Check if a transaction is active
- *
- * @return bool
- */
- public function inTransaction() {
- return $this->connection->inTransaction();
- }
-
- /**
- * Commit the database changes done during a transaction that is in progress
- */
- public function commit() {
- $this->connection->commit();
- }
-
- /**
- * Rollback the database changes done during a transaction that is in progress
- */
- public function rollBack() {
- $this->connection->rollBack();
- }
-
- /**
- * Gets the error code and message as a string for logging
- * @return string
- */
- public function getError() {
- return $this->connection->getError();
- }
-
- /**
- * Fetch the SQLSTATE associated with the last database operation.
- *
- * @return integer The last error code.
- */
- public function errorCode() {
- return $this->connection->errorCode();
- }
-
- /**
- * Fetch extended error information associated with the last database operation.
- *
- * @return array The last error information.
- */
- public function errorInfo() {
- return $this->connection->errorInfo();
- }
-
- /**
- * Establishes the connection with the database.
- *
- * @return bool
- */
- public function connect() {
- return $this->connection->connect();
- }
-
- /**
- * Close the database connection
- */
- public function close() {
- $this->connection->close();
- }
-
- /**
- * Quotes a given input parameter.
- *
- * @param mixed $input Parameter to be quoted.
- * @param int $type Type of the parameter.
- * @return string The quoted parameter.
- */
- public function quote($input, $type = IQueryBuilder::PARAM_STR) {
- return $this->connection->quote($input, $type);
- }
-
- /**
- * Gets the DatabasePlatform instance that provides all the metadata about
- * the platform this driver connects to.
- *
- * @return \Doctrine\DBAL\Platforms\AbstractPlatform The database platform.
- */
- public function getDatabasePlatform() {
- return $this->connection->getDatabasePlatform();
- }
-
- /**
- * Drop a table from the database if it exists
- *
- * @param string $table table name without the prefix
- */
- public function dropTable($table) {
- $this->connection->dropTable($table);
- }
-
- /**
- * Check if a table exists
- *
- * @param string $table table name without the prefix
- * @return bool
- */
- public function tableExists($table) {
- return $this->connection->tableExists($table);
- }
-
- /**
- * Espace a parameter to be used in a LIKE query
- *
- * @param string $param
- * @return string
- */
- public function escapeLikeParameter($param) {
- return $this->connection->escapeLikeParameter($param);
- }
-
- /**
- * Check whether or not the current database support 4byte wide unicode
- *
- * @return bool
- * @since 11.0.0
- */
- public function supports4ByteText() {
- return $this->connection->supports4ByteText();
- }
-}
diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php
index 148a15172ac..ac42960f54d 100644
--- a/lib/private/AppFramework/DependencyInjection/DIContainer.php
+++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php
@@ -134,10 +134,6 @@ class DIContainer extends SimpleContainer implements IAppContainer {
return $this->getServer()->getDateTimeFormatter();
});
- $this->registerService('OCP\\IDb', function($c) {
- return $this->getServer()->getDb();
- });
-
$this->registerService('OCP\\IDBConnection', function($c) {
return $this->getServer()->getDatabaseConnection();
});
diff --git a/lib/private/AppFramework/Middleware/Security/Exceptions/NotAdminException.php b/lib/private/AppFramework/Middleware/Security/Exceptions/NotAdminException.php
index 0c7da432afe..94191f7f5b5 100644
--- a/lib/private/AppFramework/Middleware/Security/Exceptions/NotAdminException.php
+++ b/lib/private/AppFramework/Middleware/Security/Exceptions/NotAdminException.php
@@ -34,7 +34,7 @@ use OCP\AppFramework\Http;
* @package OC\AppFramework\Middleware\Security\Exceptions
*/
class NotAdminException extends SecurityException {
- public function __construct() {
- parent::__construct('Logged in user must be an admin', Http::STATUS_FORBIDDEN);
+ public function __construct($message = 'Logged in user must be an admin') {
+ parent::__construct($message, Http::STATUS_FORBIDDEN);
}
}
diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php
index 3a3f51488e6..a966d621c58 100644
--- a/lib/private/Files/Cache/Cache.php
+++ b/lib/private/Files/Cache/Cache.php
@@ -142,7 +142,7 @@ class Cache implements ICache {
}
return $data;
} else {
- return self::cacheEntryFromData($data, $this->storageId, $this->mimetypeLoader);
+ return self::cacheEntryFromData($data, $this->mimetypeLoader);
}
}
@@ -150,11 +150,10 @@ class Cache implements ICache {
* Create a CacheEntry from database row
*
* @param array $data
- * @param string $storageId
* @param IMimeTypeLoader $mimetypeLoader
* @return CacheEntry
*/
- public static function cacheEntryFromData($data, $storageId, IMimeTypeLoader $mimetypeLoader) {
+ public static function cacheEntryFromData($data, IMimeTypeLoader $mimetypeLoader) {
//fix types
$data['fileid'] = (int)$data['fileid'];
$data['parent'] = (int)$data['parent'];
@@ -163,7 +162,7 @@ class Cache implements ICache {
$data['storage_mtime'] = (int)$data['storage_mtime'];
$data['encryptedVersion'] = (int)$data['encrypted'];
$data['encrypted'] = (bool)$data['encrypted'];
- $data['storage'] = $storageId;
+ $data['storage_id'] = $data['storage'];
$data['mimetype'] = $mimetypeLoader->getMimetypeById($data['mimetype']);
$data['mimepart'] = $mimetypeLoader->getMimetypeById($data['mimepart']);
if ($data['storage_mtime'] == 0) {
diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php
index c9a701d24b6..423eb5c423d 100644
--- a/lib/private/Files/Config/UserMountCache.php
+++ b/lib/private/Files/Config/UserMountCache.php
@@ -141,7 +141,11 @@ class UserMountCache implements IUserMountCache {
foreach ($cachedMounts as $cachedMount) {
if (
$newMount->getRootId() === $cachedMount->getRootId() &&
- ($newMount->getMountPoint() !== $cachedMount->getMountPoint() || $newMount->getMountId() !== $cachedMount->getMountId())
+ (
+ $newMount->getMountPoint() !== $cachedMount->getMountPoint() ||
+ $newMount->getStorageId() !== $cachedMount->getStorageId() ||
+ $newMount->getMountId() !== $cachedMount->getMountId()
+ )
) {
$changed[] = $newMount;
}
@@ -169,6 +173,7 @@ class UserMountCache implements IUserMountCache {
$builder = $this->connection->getQueryBuilder();
$query = $builder->update('mounts')
+ ->set('storage_id', $builder->createNamedParameter($mount->getStorageId()))
->set('mount_point', $builder->createNamedParameter($mount->getMountPoint()))
->set('mount_id', $builder->createNamedParameter($mount->getMountId(), IQueryBuilder::PARAM_INT))
->where($builder->expr()->eq('user_id', $builder->createNamedParameter($mount->getUser()->getUID())))
diff --git a/lib/private/Installer.php b/lib/private/Installer.php
index db71f7b1432..38d0ce13684 100644
--- a/lib/private/Installer.php
+++ b/lib/private/Installer.php
@@ -121,7 +121,7 @@ class Installer {
OC_App::executeRepairSteps($appId, $appData['repair-steps']['install']);
//set the installed version
- \OC::$server->getConfig()->setAppValue($info['id'], 'installed_version', OC_App::getAppVersion($info['id']));
+ \OC::$server->getConfig()->setAppValue($info['id'], 'installed_version', OC_App::getAppVersion($info['id'], false));
\OC::$server->getConfig()->setAppValue($info['id'], 'enabled', 'no');
//set remote/public handlers
diff --git a/lib/private/Repair.php b/lib/private/Repair.php
index c212ea90744..16236fd6bcc 100644
--- a/lib/private/Repair.php
+++ b/lib/private/Repair.php
@@ -37,6 +37,7 @@ use OC\Repair\Collation;
use OC\Repair\DropOldJobs;
use OC\Repair\MoveUpdaterStepFile;
use OC\Repair\NC11\CleanPreviews;
+use OC\Repair\NC11\FixMountStorages;
use OC\Repair\NC11\MoveAvatars;
use OC\Repair\OldGroupMembershipShares;
use OC\Repair\RemoveGetETagEntries;
@@ -161,6 +162,7 @@ class Repair implements IOutput{
\OC::$server->getUserManager(),
\OC::$server->getConfig()
),
+ new FixMountStorages(\OC::$server->getDatabaseConnection()),
];
}
diff --git a/lib/private/Repair/NC11/FixMountStorages.php b/lib/private/Repair/NC11/FixMountStorages.php
new file mode 100644
index 00000000000..d57a356dff9
--- /dev/null
+++ b/lib/private/Repair/NC11/FixMountStorages.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * @copyright 2016 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 OC\Repair\NC11;
+
+use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\IDBConnection;
+use OCP\Migration\IOutput;
+use OCP\Migration\IRepairStep;
+
+class FixMountStorages implements IRepairStep {
+
+ /** @var IDBConnection */
+ private $db;
+
+ /**
+ * @param IDBConnection $db
+ */
+ public function __construct(IDBConnection $db) {
+ $this->db = $db;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName() {
+ return 'Fix potential broken mount points';
+ }
+
+ public function run(IOutput $output) {
+ $query = $this->db->getQueryBuilder();
+ $query->select('m.id', 'f.storage')
+ ->from('mounts', 'm')
+ ->leftJoin('m', 'filecache', 'f', $query->expr()->eq('m.root_id', 'f.fileid'))
+ ->where($query->expr()->neq('m.storage_id', 'f.storage'));
+
+ $update = $this->db->getQueryBuilder();
+ $update->update('mounts')
+ ->set('storage_id', $update->createParameter('storage'))
+ ->where($query->expr()->eq('id', $update->createParameter('mount')));
+
+ $result = $query->execute();
+ $entriesUpdated = 0;
+ while ($row = $result->fetch()) {
+ $update->setParameter('storage', $row['storage'], IQueryBuilder::PARAM_INT)
+ ->setParameter('mount', $row['id'], IQueryBuilder::PARAM_INT);
+ $update->execute();
+ $entriesUpdated++;
+ }
+ $result->closeCursor();
+
+ if ($entriesUpdated > 0) {
+ $output->info($entriesUpdated . ' mounts updated');
+ return;
+ }
+
+ $output->info('No mounts updated');
+ }
+}
diff --git a/lib/private/Repair/NC11/MoveAvatarBackgroundJob.php b/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php
index f8c0d9b3abf..f8c0d9b3abf 100644
--- a/lib/private/Repair/NC11/MoveAvatarBackgroundJob.php
+++ b/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php
diff --git a/lib/private/Security/CSP/ContentSecurityPolicyNonceManager.php b/lib/private/Security/CSP/ContentSecurityPolicyNonceManager.php
index 284700566d6..85ae127f5f1 100644
--- a/lib/private/Security/CSP/ContentSecurityPolicyNonceManager.php
+++ b/lib/private/Security/CSP/ContentSecurityPolicyNonceManager.php
@@ -69,8 +69,6 @@ class ContentSecurityPolicyNonceManager {
Request::USER_AGENT_CHROME,
// Firefox 45+
'/^Mozilla\/5\.0 \([^)]+\) Gecko\/[0-9.]+ Firefox\/(4[5-9]|[5-9][0-9])\.[0-9.]+$/',
- // Safari 10+
- '/^Mozilla\/5\.0 \([^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Version\/1[0-9.]+ Safari\/[0-9.A-Z]+$/',
];
if($this->request->isUserAgent($browserWhitelist)) {
diff --git a/lib/private/Server.php b/lib/private/Server.php
index 2c0aac9b43c..b2fa9691b16 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -45,7 +45,6 @@ use bantu\IniGetWrapper\IniGetWrapper;
use OC\App\AppStore\Fetcher\AppFetcher;
use OC\App\AppStore\Fetcher\CategoryFetcher;
use OC\AppFramework\Http\Request;
-use OC\AppFramework\Db\Db;
use OC\AppFramework\Utility\TimeFactory;
use OC\Command\AsyncBus;
use OC\Diagnostics\EventLogger;
@@ -470,9 +469,6 @@ class Server extends ServerContainer implements IServerContainer {
$connection->getConfiguration()->setSQLLogger($c->getQueryLogger());
return $connection;
});
- $this->registerService('Db', function (Server $c) {
- return new Db($c->getDatabaseConnection());
- });
$this->registerService('HTTPHelper', function (Server $c) {
$config = $c->getConfig();
return new HTTPHelper(
@@ -1199,16 +1195,6 @@ class Server extends ServerContainer implements IServerContainer {
}
/**
- * Returns an instance of the db facade
- *
- * @deprecated use getDatabaseConnection, will be removed in ownCloud 10
- * @return \OCP\IDb
- */
- public function getDb() {
- return $this->query('Db');
- }
-
- /**
* Returns an instance of the HTTP helper class
*
* @deprecated Use getHTTPClientService()
diff --git a/lib/private/Setup/MySQL.php b/lib/private/Setup/MySQL.php
index d1399c8821c..bafb3866b76 100644
--- a/lib/private/Setup/MySQL.php
+++ b/lib/private/Setup/MySQL.php
@@ -35,7 +35,7 @@ class MySQL extends AbstractDatabase {
public function setupDatabase($username) {
//check if the database user has admin right
- $connection = $this->connect();
+ $connection = $this->connect(['dbname' => null]);
$this->createSpecificUser($username, $connection);
@@ -152,7 +152,7 @@ class MySQL extends AbstractDatabase {
};
}
} catch (\Exception $ex) {
- $this->logger->error('Specific user creation failed: {error}', [
+ $this->logger->info('Can not create a new MySQL user, will continue with the provided user: {error}', [
'app' => 'mysql.setup',
'error' => $ex->getMessage()
]);
diff --git a/lib/private/Setup/PostgreSQL.php b/lib/private/Setup/PostgreSQL.php
index 14325a18efe..085e8609ab2 100644
--- a/lib/private/Setup/PostgreSQL.php
+++ b/lib/private/Setup/PostgreSQL.php
@@ -60,7 +60,7 @@ class PostgreSQL extends AbstractDatabase {
//use the admin login data for the new database user
//add prefix to the postgresql user name to prevent collisions
- $this->dbUser = 'oc_' . $username;
+ $this->dbUser = 'oc_' . strtolower($username);
//create a new password so we don't need to store the admin config in the config file
$this->dbPassword = \OC::$server->getSecureRandom()->generate(30, \OCP\Security\ISecureRandom::CHAR_LOWER . \OCP\Security\ISecureRandom::CHAR_DIGITS);
diff --git a/lib/private/Share20/DefaultShareProvider.php b/lib/private/Share20/DefaultShareProvider.php
index 7a602950171..fded7442d20 100644
--- a/lib/private/Share20/DefaultShareProvider.php
+++ b/lib/private/Share20/DefaultShareProvider.php
@@ -853,7 +853,6 @@ class DefaultShareProvider implements IShareProvider {
$entryData['permissions'] = $entryData['f_permissions'];
$entryData['parent'] = $entryData['f_parent'];;
$share->setNodeCacheEntry(Cache::cacheEntryFromData($entryData,
- $entryData['storage_string_id'],
\OC::$server->getMimeTypeLoader()));
}
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index c719777ab96..cd1d52c3bbf 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -486,6 +486,7 @@ class Manager implements IManager {
if (method_exists($share, 'setParent')) {
$storage = $share->getNode()->getStorage();
if ($storage->instanceOfStorage('\OCA\Files_Sharing\ISharedStorage')) {
+ /** @var \OCA\Files_Sharing\SharedStorage $storage */
$share->setParent($storage->getShareId());
}
};
@@ -1040,6 +1041,7 @@ class Manager implements IManager {
* @return Share[]
*/
public function getSharesByPath(\OCP\Files\Node $path, $page=0, $perPage=50) {
+ return [];
}
/**
@@ -1051,27 +1053,22 @@ class Manager implements IManager {
* @throws ShareNotFound
*/
public function getShareByToken($token) {
+ $share = null;
try {
$provider = $this->factory->getProviderForType(\OCP\Share::SHARE_TYPE_LINK);
- } catch (ProviderException $e) {
- }
-
- try {
$share = $provider->getShareByToken($token);
+ } catch (ProviderException $e) {
} catch (ShareNotFound $e) {
- $share = null;
}
+
// If it is not a link share try to fetch a federated share by token
if ($share === null) {
try {
$provider = $this->factory->getProviderForType(\OCP\Share::SHARE_TYPE_REMOTE);
- } catch (ProviderException $e) {
- }
- try {
$share = $provider->getShareByToken($token);
+ } catch (ProviderException $e) {
} catch (ShareNotFound $e) {
- $share = null;
}
}
@@ -1079,9 +1076,14 @@ class Manager implements IManager {
if ($share === null && $this->shareProviderExists(\OCP\Share::SHARE_TYPE_EMAIL)) {
try {
$provider = $this->factory->getProviderForType(\OCP\Share::SHARE_TYPE_EMAIL);
+ $share = $provider->getShareByToken($token);
} catch (ProviderException $e) {
+ } catch (ShareNotFound $e) {
}
- $share = $provider->getShareByToken($token);
+ }
+
+ if ($share === null) {
+ throw new ShareNotFound();
}
if ($share->getExpirationDate() !== null &&
diff --git a/lib/private/URLGenerator.php b/lib/private/URLGenerator.php
index c6f1ebd4594..d954153ab88 100644
--- a/lib/private/URLGenerator.php
+++ b/lib/private/URLGenerator.php
@@ -158,7 +158,7 @@ class URLGenerator implements IURLGenerator {
// Check if the app is in the app folder
$path = '';
- $themingEnabled = $this->config->getSystemValue('installed', false) && \OCP\App::isEnabled('theming');
+ $themingEnabled = $this->config->getSystemValue('installed', false) && \OCP\App::isEnabled('theming') && \OC_App::isAppLoaded('theming');
if($themingEnabled && $image === "favicon.ico" && \OC::$server->getThemingDefaults()->shouldReplaceIcons()) {
$cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0');
if($app==="") { $app = "core"; }
diff --git a/lib/private/Updater.php b/lib/private/Updater.php
index e30777227cc..a66d49941cd 100644
--- a/lib/private/Updater.php
+++ b/lib/private/Updater.php
@@ -82,6 +82,12 @@ class Updater extends BasicEmitter {
$this->log = $log;
$this->config = $config;
$this->checker = $checker;
+
+ // If at least PHP 7.0.0 is used we don't need to disable apps as we catch
+ // fatal errors and exceptions and disable the app just instead.
+ if(version_compare(phpversion(), '7.0.0', '>=')) {
+ $this->skip3rdPartyAppsDisable = true;
+ }
}
/**
diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php
index 0d9adfa9d2b..adf29601ac6 100644
--- a/lib/private/legacy/app.php
+++ b/lib/private/legacy/app.php
@@ -653,13 +653,16 @@ class OC_App {
* get the last version of the app from appinfo/info.xml
*
* @param string $appId
+ * @param bool $useCache
* @return string
*/
- public static function getAppVersion($appId) {
- if (!isset(self::$appVersion[$appId])) {
- $file = self::getAppPath($appId);
- self::$appVersion[$appId] = ($file !== false) ? self::getAppVersionByPath($file) : '0';
+ public static function getAppVersion($appId, $useCache = true) {
+ if($useCache && isset(self::$appVersion[$appId])) {
+ return self::$appVersion[$appId];
}
+
+ $file = self::getAppPath($appId);
+ self::$appVersion[$appId] = ($file !== false) ? self::getAppVersionByPath($file) : '0';
return self::$appVersion[$appId];
}
diff --git a/lib/private/legacy/defaults.php b/lib/private/legacy/defaults.php
index 036617ba5f9..ea41d80076e 100644
--- a/lib/private/legacy/defaults.php
+++ b/lib/private/legacy/defaults.php
@@ -55,7 +55,7 @@ class OC_Defaults {
$this->defaultName = 'Nextcloud'; /* short name, used when referring to the software */
$this->defaultTitle = 'Nextcloud'; /* can be a longer name, for titles */
$this->defaultBaseUrl = 'https://nextcloud.com';
- $this->defaultSyncClientUrl = 'https://nextcloud.com/install';
+ $this->defaultSyncClientUrl = 'https://nextcloud.com/install/#install-clients';
$this->defaultiOSClientUrl = 'https://itunes.apple.com/us/app/nextcloud/id1125420102?mt=8';
$this->defaultiTunesAppId = '1125420102';
$this->defaultAndroidClientUrl = 'https://play.google.com/store/apps/details?id=com.nextcloud.client';
diff --git a/lib/public/AppFramework/Db/Mapper.php b/lib/public/AppFramework/Db/Mapper.php
index aa3d9cdde37..611791a4364 100644
--- a/lib/public/AppFramework/Db/Mapper.php
+++ b/lib/public/AppFramework/Db/Mapper.php
@@ -28,7 +28,6 @@
namespace OCP\AppFramework\Db;
use OCP\IDBConnection;
-use OCP\IDb;
/**
@@ -229,11 +228,7 @@ abstract class Mapper {
* @since 7.0.0
*/
protected function execute($sql, array $params=[], $limit=null, $offset=null){
- if ($this->db instanceof IDb) {
- $query = $this->db->prepareQuery($sql, $limit, $offset);
- } else {
- $query = $this->db->prepare($sql, $limit, $offset);
- }
+ $query = $this->db->prepare($sql, $limit, $offset);
if ($this->isAssocArray($params)) {
foreach ($params as $key => $param) {
@@ -251,15 +246,6 @@ abstract class Mapper {
$result = $query->execute();
- // this is only for backwards compatibility reasons and can be removed
- // in owncloud 10. IDb returns a StatementWrapper from execute, PDO,
- // Doctrine and IDbConnection don't so this needs to be done in order
- // to stay backwards compatible for the things that rely on the
- // StatementWrapper being returned
- if ($result instanceof \OC_DB_StatementWrapper) {
- return $result;
- }
-
return $query;
}
diff --git a/lib/public/IDb.php b/lib/public/IDb.php
deleted file mode 100644
index bb04cf540fa..00000000000
--- a/lib/public/IDb.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Bernhard Posselt <dev@bernhard-posselt.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-namespace OCP;
-
-
-/**
- * Small Facade for being able to inject the database connection for tests
- * @since 7.0.0 - extends IDBConnection was added in 8.1.0
- */
-interface IDb extends IDBConnection {
-
-
- /**
- * Used to abstract the owncloud database access away
- * @param string $sql the sql query with ? placeholder for params
- * @param int $limit the maximum number of rows
- * @param int $offset from which row we want to start
- * @return \OC_DB_StatementWrapper prepared SQL query
- * @since 7.0.0
- */
- public function prepareQuery($sql, $limit=null, $offset=null);
-
-
- /**
- * Used to get the id of the just inserted element
- * @param string $tableName the name of the table where we inserted the item
- * @return int the id of the inserted element
- * @since 7.0.0
- */
- public function getInsertId($tableName);
-
-
-}
diff --git a/lib/public/IServerContainer.php b/lib/public/IServerContainer.php
index 354e39bd8f9..87628be01f7 100644
--- a/lib/public/IServerContainer.php
+++ b/lib/public/IServerContainer.php
@@ -192,14 +192,6 @@ interface IServerContainer {
public function getCredentialsManager();
/**
- * Returns an instance of the db facade
- * @deprecated 8.1.0 use getDatabaseConnection, will be removed in ownCloud 10
- * @return \OCP\IDb
- * @since 7.0.0
- */
- public function getDb();
-
- /**
* Returns the app config manager
*
* @return \OCP\IAppConfig
diff --git a/lib/public/RichObjectStrings/Definitions.php b/lib/public/RichObjectStrings/Definitions.php
index fbde439c47a..4b5b0da978e 100644
--- a/lib/public/RichObjectStrings/Definitions.php
+++ b/lib/public/RichObjectStrings/Definitions.php
@@ -191,7 +191,7 @@ class Definitions {
'path' => [
'since' => '11.0.0',
'required' => true,
- 'description' => 'The full path of the file for the user',
+ 'description' => 'The full path of the file for the user, should not start with a slash',
'example' => 'path/to/file.txt',
],
'link' => [
diff --git a/settings/Controller/AppSettingsController.php b/settings/Controller/AppSettingsController.php
index fe050332fc8..6a5b5210c0f 100644
--- a/settings/Controller/AppSettingsController.php
+++ b/settings/Controller/AppSettingsController.php
@@ -296,6 +296,15 @@ class AppSettingsController extends Controller {
$apps = array_filter($apps, function ($app) {
return !$app['active'];
});
+
+ $apps = array_map(function ($app) {
+ $newVersion = \OC\Installer::isUpdateAvailable($app['id'], $this->appFetcher);
+ if ($newVersion !== false) {
+ $app['update'] = $newVersion;
+ }
+ return $app;
+ }, $apps);
+
usort($apps, function ($a, $b) {
$a = (string)$a['name'];
$b = (string)$b['name'];
diff --git a/settings/Controller/PersonalController.php b/settings/Controller/PersonalController.php
index f9c67575466..696c0a5c414 100644
--- a/settings/Controller/PersonalController.php
+++ b/settings/Controller/PersonalController.php
@@ -69,6 +69,7 @@ class PersonalController extends Controller {
/**
* @NoAdminRequired
+ * @NoSubadminRequired
* @param string $lang
* @return JSONResponse
*/
diff --git a/settings/css/settings.css b/settings/css/settings.css
index 3f23fb6680d..46394d3f03d 100644
--- a/settings/css/settings.css
+++ b/settings/css/settings.css
@@ -110,6 +110,7 @@ input#openid, input#webdav { width:20em; }
}
.federationScopeMenu {
top: 44px;
+ margin: -5px 0px 0;
}
.federationScopeMenu.bubble::after {
right: 50%;
@@ -263,6 +264,11 @@ table.nostyle td { padding: 0.2em 0; }
padding: 10px;
}
+#sessions .token-list div.configure:after,
+#apppasswords .token-list div.configure:after {
+ right: 13px;
+}
+
#sessions .token-list tr.active div.configure > *,
#apppasswords .token-list tr.active div.configure > *{
margin-top: 5px;
diff --git a/settings/js/apps.js b/settings/js/apps.js
index de35cd53672..61d817e43e4 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -271,7 +271,7 @@ OC.Settings.Apps = OC.Settings.Apps || {
OC.Settings.Apps.hideErrorMessage(appId);
groups = groups || [];
var appItem = $('div#app-'+appId+'');
- element.val(t('settings','Please wait....'));
+ element.val(t('settings','Enabling app …'));
if(active && !groups.length) {
$.post(OC.filePath('settings','ajax','disableapp.php'),{appid:appId},function(result) {
if(!result || result.status !== 'success') {
diff --git a/settings/js/authtoken_view.js b/settings/js/authtoken_view.js
index 0899b723b2a..a81e05cb3ed 100644
--- a/settings/js/authtoken_view.js
+++ b/settings/js/authtoken_view.js
@@ -217,6 +217,10 @@
}));
var $el = $(el);
+ $('body').on('click', _.bind(_this._hideConfigureToken, _this));
+ $el.on('click', '.popovermenu', function(event) {
+ event.stopPropagation();
+ });
$el.on('click', 'a.icon-delete', _.bind(_this._onDeleteToken, _this));
$el.on('click', '.icon-more', _.bind(_this._onConfigureToken, _this));
$el.on('change', 'input.filesystem', _.bind(_this._onSetTokenScope, _this));
@@ -355,12 +359,18 @@
},
_onConfigureToken: function (event) {
+ event.stopPropagation();
+ this._hideConfigureToken();
var $target = $(event.target);
var $row = $target.closest('tr');
$row.toggleClass('active');
var id = $row.data('id');
},
+ _hideConfigureToken: function() {
+ $('.token-list tr').removeClass('active');
+ },
+
_onDeleteToken: function (event) {
var $target = $(event.target);
var $row = $target.closest('tr');
diff --git a/settings/js/personal.js b/settings/js/personal.js
index d1dd8c09ec1..f9a4517633a 100644
--- a/settings/js/personal.js
+++ b/settings/js/personal.js
@@ -65,16 +65,9 @@ function updateAvatar (hidedefault) {
$displaydiv.avatar(OC.currentUser, 145, true, null, function() {
$displaydiv.removeClass('loading');
$('#displayavatar img').show();
- });
- $.get(OC.generateUrl(
- '/avatar/{user}/{size}',
- {
- user: OC.currentUser,
- size: 1
- }
- ), function (result) {
- if (typeof(result) === 'string') {
- // Show the delete button when the avatar is custom
+ if($('#displayavatar img').length === 0) {
+ $('#removeavatar').removeClass('inlineblock').addClass('hidden');
+ } else {
$('#removeavatar').removeClass('hidden').addClass('inlineblock');
}
});
@@ -314,7 +307,6 @@ $(document).ready(function () {
url: OC.generateUrl('/avatar/'),
success: function () {
updateAvatar(true);
- $('#removeavatar').addClass('hidden').removeClass('inlineblock');
}
});
});
@@ -341,24 +333,17 @@ $(document).ready(function () {
drawTitles: true,
});
- // does the user have a custom avatar? if he does show #removeavatar
- $.get(OC.generateUrl(
- '/avatar/{user}/{size}',
- {
- user: OC.currentUser,
- size: 1
- }
- ), function (result) {
- if (typeof(result) === 'string') {
- // Show the delete button when the avatar is custom
- $('#removeavatar').removeClass('hidden').addClass('inlineblock');
- }
- });
-
// Load the big avatar
if (oc_config.enable_avatars) {
- $('#avatarform .avatardiv').avatar(OC.currentUser, 145);
+ $('#avatarform .avatardiv').avatar(OC.currentUser, 145, true, null, function() {
+ if($('#displayavatar img').length === 0) {
+ $('#removeavatar').removeClass('inlineblock').addClass('hidden');
+ } else {
+ $('#removeavatar').removeClass('hidden').addClass('inlineblock');
+ }
+ });
}
+
// Show token views
var collection = new OC.Settings.AuthTokenCollection();
diff --git a/settings/l10n/bg_BG.js b/settings/l10n/bg_BG.js
index c2f219b0c48..3a97ceb0093 100644
--- a/settings/l10n/bg_BG.js
+++ b/settings/l10n/bg_BG.js
@@ -52,22 +52,29 @@ OC.L10N.register(
"Uninstalling ...." : "Премахване ...",
"Error while uninstalling app" : "Грешка при премахването на приложението",
"Uninstall" : "Премахване",
+ "Approved" : "Одобрен",
+ "Experimental" : "Ексериментален",
"Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
"Google Chrome" : "Google Chrome",
"Safari" : "Safari",
"Google Chrome for Android" : "Google Chrome за Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
"iOS Client" : "iOS клиент",
"Android Client" : "Android клиент",
"This session" : "Текуща сесия",
"Copy" : "Копиране",
+ "Copied!" : "Копирано!",
"Not supported!" : "Не се поддържа!",
"Press ⌘-C to copy." : "За копиране натиснете ⌘-C",
"Press Ctrl-C to copy." : "За копиране натиснете Ctrl-C",
"Valid until {date}" : "Далидна до {date}",
"Delete" : "Изтриване",
+ "Local" : "Локално",
"Contacts" : "Контакти",
+ "Public" : "Публичен",
"Select a profile picture" : "Избиране на профилна снимка",
"Very weak password" : "Много слаба парола",
"Weak password" : "Слаба парола",
@@ -213,6 +220,7 @@ OC.L10N.register(
"Default quota" : "Стандартна квота",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Моля, въведете квота за хранилището (напр. \"512 MB\" или \"12 GB\")",
"Other" : "Друга...",
+ "Group admin for" : "Групов администратор за",
"Quota" : "Квота",
"Storage location" : "Дисково пространство",
"Last login" : "Последно вписване",
@@ -242,6 +250,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Здрасти,\n\nСамо да ти кажа, че имаш %s профил.\n\nПотребителя ти е: %s\nДостъпи го: %s\n",
"Group" : "Група",
"Default Quota" : "Стандартна квота",
+ "Group Admin for" : "Групов Администратор за",
"Storage Location" : "Дисково пространство",
"Last Login" : "Последно вписване",
"Redis" : "Redis",
diff --git a/settings/l10n/bg_BG.json b/settings/l10n/bg_BG.json
index 80b654888f2..64d76926da1 100644
--- a/settings/l10n/bg_BG.json
+++ b/settings/l10n/bg_BG.json
@@ -50,22 +50,29 @@
"Uninstalling ...." : "Премахване ...",
"Error while uninstalling app" : "Грешка при премахването на приложението",
"Uninstall" : "Премахване",
+ "Approved" : "Одобрен",
+ "Experimental" : "Ексериментален",
"Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
"Google Chrome" : "Google Chrome",
"Safari" : "Safari",
"Google Chrome for Android" : "Google Chrome за Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
"iOS Client" : "iOS клиент",
"Android Client" : "Android клиент",
"This session" : "Текуща сесия",
"Copy" : "Копиране",
+ "Copied!" : "Копирано!",
"Not supported!" : "Не се поддържа!",
"Press ⌘-C to copy." : "За копиране натиснете ⌘-C",
"Press Ctrl-C to copy." : "За копиране натиснете Ctrl-C",
"Valid until {date}" : "Далидна до {date}",
"Delete" : "Изтриване",
+ "Local" : "Локално",
"Contacts" : "Контакти",
+ "Public" : "Публичен",
"Select a profile picture" : "Избиране на профилна снимка",
"Very weak password" : "Много слаба парола",
"Weak password" : "Слаба парола",
@@ -211,6 +218,7 @@
"Default quota" : "Стандартна квота",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Моля, въведете квота за хранилището (напр. \"512 MB\" или \"12 GB\")",
"Other" : "Друга...",
+ "Group admin for" : "Групов администратор за",
"Quota" : "Квота",
"Storage location" : "Дисково пространство",
"Last login" : "Последно вписване",
@@ -240,6 +248,7 @@
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Здрасти,\n\nСамо да ти кажа, че имаш %s профил.\n\nПотребителя ти е: %s\nДостъпи го: %s\n",
"Group" : "Група",
"Default Quota" : "Стандартна квота",
+ "Group Admin for" : "Групов Администратор за",
"Storage Location" : "Дисково пространство",
"Last Login" : "Последно вписване",
"Redis" : "Redis",
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index ec4c11ff7cc..e4c11119214 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -364,7 +364,7 @@ OC.L10N.register(
"Enable experimental apps" : "Activer les applications expérimentales",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : %s<br><br>\n",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez appuyer ce projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez appuyer ce projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
"Add Group" : "Ajouter groupe",
"Group" : "Groupe",
"Default Quota" : "Quota par défaut",
@@ -389,7 +389,7 @@ OC.L10N.register(
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Pour migrer vers une autre base de données utiliser la ligne de commande: 'occ db:convert-type', ou regardez la <a target=\"_blank\" href=\"%s\">documentation</a>",
"This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur dans Nextcloud 11 et supérieur.",
"This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur dans Nextcloud 11 et supérieur.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\nou\n<a href=\"https://help.nextcloud.com/\"\n<a href=\"https://help.nextcloud.com/\"\ntarget=\"_blank\" rel=\"noreferrer\">aider les autres utilisateurs</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\nou\n<a href=\"https://help.nextcloud.com/\"\n<a href=\"https://help.nextcloud.com/\"\ntarget=\"_blank\" rel=\"noreferrer\">aider les autres utilisateurs</a>!",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Développé par la {communityopen}communauté Nextcloud{linkclose}, le {githubopen}code source{linkclose} est sous licence {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
},
"nplurals=2; plural=(n > 1);");
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index 296a67524ff..2e54dd4cf57 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -362,7 +362,7 @@
"Enable experimental apps" : "Activer les applications expérimentales",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : %s<br><br>\n",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez appuyer ce projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez appuyer ce projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
"Add Group" : "Ajouter groupe",
"Group" : "Groupe",
"Default Quota" : "Quota par défaut",
@@ -387,7 +387,7 @@
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Pour migrer vers une autre base de données utiliser la ligne de commande: 'occ db:convert-type', ou regardez la <a target=\"_blank\" href=\"%s\">documentation</a>",
"This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur dans Nextcloud 11 et supérieur.",
"This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur dans Nextcloud 11 et supérieur.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\nou\n<a href=\"https://help.nextcloud.com/\"\n<a href=\"https://help.nextcloud.com/\"\ntarget=\"_blank\" rel=\"noreferrer\">aider les autres utilisateurs</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\nou\n<a href=\"https://help.nextcloud.com/\"\n<a href=\"https://help.nextcloud.com/\"\ntarget=\"_blank\" rel=\"noreferrer\">aider les autres utilisateurs</a>!",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Développé par la {communityopen}communauté Nextcloud{linkclose}, le {githubopen}code source{linkclose} est sous licence {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index 143f34dd99f..5dbce3a57d4 100644
--- a/settings/l10n/hu_HU.js
+++ b/settings/l10n/hu_HU.js
@@ -231,7 +231,7 @@ OC.L10N.register(
"Performance tuning" : "Teljesítmény hangolás",
"Improving the config.php" : "config.php javítása",
"Theming" : "Témázás",
- "Hardening and security guidance" : "Erősítési és biztonsági útmutató",
+ "Hardening and security guidance" : "Megerősítési és biztonsági útmutató",
"Developer documentation" : "Fejlesztői dokumentáció",
"by %s" : "készítő: %s",
"%s-licensed" : "%s-licencelt",
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index 4d7304f4f3a..518271f63ee 100644
--- a/settings/l10n/hu_HU.json
+++ b/settings/l10n/hu_HU.json
@@ -229,7 +229,7 @@
"Performance tuning" : "Teljesítmény hangolás",
"Improving the config.php" : "config.php javítása",
"Theming" : "Témázás",
- "Hardening and security guidance" : "Erősítési és biztonsági útmutató",
+ "Hardening and security guidance" : "Megerősítési és biztonsági útmutató",
"Developer documentation" : "Fejlesztői dokumentáció",
"by %s" : "készítő: %s",
"%s-licensed" : "%s-licencelt",
diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js
index 12b90bd2ac4..349e6a32051 100644
--- a/settings/l10n/lt_LT.js
+++ b/settings/l10n/lt_LT.js
@@ -19,38 +19,55 @@ OC.L10N.register(
"Invalid mail address" : "Neteisingas pašto adresas",
"A user with that name already exists." : "Toks naudotojas jau yra.",
"Unable to create user." : "Nepavyko sukurti naudotojo.",
- "Your %s account was created" : "Tavo paskyra %s sukurta",
+ "Your %s account was created" : "Jūsų paskyra %s sukurta",
"Unable to delete user." : "Nepavyko ištrinti naudotojo.",
+ "Settings saved" : "Nustatymai įrašyti",
"Unable to change full name" : "Nepavyko pakeisti pilno vardo",
"Your full name has been changed." : "Pilnas vardas pakeistas.",
"Invalid user" : "Neteisingas naudotojas",
"Unable to change mail address" : "Nepavyko pakeisti el. pašto adresą",
"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 programos.",
+ "Couldn't update app." : "Nepavyko atnaujinti programėlės.",
"Not saved" : "Neišsaugota",
"Sending..." : "Siunčiama...",
"Official" : "Oficiali",
"All" : "Viskas",
"Update to %s" : "Atnaujinti į %s",
"Please wait...." : "Prašome palaukti...",
- "Error while disabling app" : "Klaida išjungiant programą",
+ "Error while disabling app" : "Klaida, išjungiant programėlę",
"Disable" : "Išjungti",
"Enable" : "Įjungti",
- "Error while enabling app" : "Klaida įjungiant programą",
+ "Error while enabling app" : "Klaida, įjungiant programėlę",
"Updating...." : "Atnaujinama...",
"Error while updating app" : "Įvyko klaida atnaujinant programą",
"Updated" : "Atnaujinta",
"Approved" : "Patvirtinta",
"Experimental" : "Eksperimentinė",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome, skirta Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "iOS klientas",
+ "Android Client" : "Android klientas",
+ "This session" : "Šis seansas",
+ "Copy" : "Kopijuoti",
"Copied!" : "Nukopijuota!",
"Not supported!" : "Nepalaikoma!",
"Valid until {date}" : "Galioja iki {date}",
"Delete" : "Ištrinti",
- "Select a profile picture" : "Pažymėkite profilio paveikslą",
+ "Only visible to local users" : "Matoma tik vietiniams naudotojams",
+ "Only visible to you" : "Matoma tik jums",
+ "Visible to local users and to trusted servers" : "Matoma tik vietiniams naudotojams ir patikimiems serveriams",
+ "Select a profile picture" : "Pasirinkite profilio paveikslą",
"Very weak password" : "Labai silpnas slaptažodis",
"Weak password" : "Silpnas slaptažodis",
"So-so password" : "Neblogas slaptažodis",
@@ -59,19 +76,27 @@ OC.L10N.register(
"Groups" : "Grupės",
"undo" : "anuliuoti",
"never" : "niekada",
+ "Password successfully changed" : "Slaptažodis sėkmingai pakeistas",
+ "Changing the password will result in data loss, because data recovery is not available for this user" : "Slaptažodžio pakeitimas sąlygos duomenų praradimą, kadangi šiam naudotojui nėra prieinamas duomenų atkūrimas",
"A valid username must be provided" : "Privalo būti pateiktas tinkamas naudotojo vardas",
"A valid password must be provided" : "Slaptažodis turi būti tinkamas",
"__language_name__" : "Lietuvių",
"Unlimited" : "Neribotai",
+ "Personal info" : "Asmeninė informacija",
+ "Sessions" : "Seansai",
+ "App passwords" : "Programėlių slaptažodžiai",
"None" : "Nieko",
"Login" : "Prisijungti",
- "Email server" : "Pašto serveris",
- "Open documentation" : "Atverti dokumentą",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
+ "Email server" : "El. pašto serveris",
+ "Open documentation" : "Atverti dokumentaciją",
"Encryption" : "Šifravimas",
"Authentication required" : "Reikalinga autentikacija",
"Server address" : "Serverio adresas",
"Port" : "Prievadas",
"SMTP Username" : "SMTP naudotojo vardas",
+ "SMTP Password" : "SMTP slaptažodis",
"Server-side encryption" : "Šifravimas serveryje",
"Security & setup warnings" : "Saugos ir diegimo perspėjimai",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūksta PHP modulio „fileinfo“. Labai rekomenduojame įjungti šį modulį, kad gauti geriausius rezultatus nustatant mime-tipą.",
@@ -85,15 +110,27 @@ OC.L10N.register(
"days" : "dienos",
"Allow resharing" : "Leisti dalintis",
"Tips & tricks" : "Patarimai ir gudrybės",
+ "Show description …" : "Rodyti aprašą …",
+ "Hide description …" : "Slėpti aprašą …",
+ "This app has an update available." : "Šiai programėlei yra prieinamas atnaujinimas.",
"Cheers!" : "Sveikinimai!",
"Forum" : "Forumas",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs naudojate <strong>%s</strong> iš <strong>%s</strong>",
"Profile picture" : "Profilio paveikslas",
"Upload new" : "Įkelti naują",
- "Remove image" : "Pašalinti paveikslėlį",
+ "Remove image" : "Šalinti paveikslą",
+ "png or jpg, max. 20 MB" : "png arba jpg, daugiausiai 20 MB",
"Cancel" : "Atsisakyti",
"Email" : "El. Paštas",
"Your email address" : "Jūsų el. pašto adresas",
+ "For password recovery and notifications" : "Skirtas slaptažodžio atkūrimui ir pranešimams",
+ "Phone number" : "Telefono numeris",
+ "Your phone number" : "Jūsų telefono numeris",
+ "Address" : "Adresas",
+ "Website" : "Svetainė",
+ "Your website" : "Jūsų svetainė",
+ "Twitter" : "Twitter",
+ "You are member of the following groups:" : "Jūs esate šių grupių narys:",
"Password" : "Slaptažodis",
"Current password" : "Dabartinis slaptažodis",
"New password" : "Naujas slaptažodis",
@@ -104,9 +141,16 @@ OC.L10N.register(
"Desktop client" : "Darbastalio klientas",
"Android app" : "Android programa",
"iOS app" : "iOS programa",
- "Show First Run Wizard again" : "Rodyti pirmo karto vedlį dar kartą",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Jeigu norite palaikyti projektą, tuomet {contributeopen}prisijunkite prie kūrimo{linkclose} arba {contributeopen}skleiskite žinią kitiems{linkclose}!",
+ "Show First Run Wizard again" : "Dar kartą rodyti pirmojo paleidimo vediklį",
+ "Web, desktop and mobile clients currently logged in to your account." : "Saityno, darbalaukio ir mobilieji klientai, kurie šiuo metu yra prisijungę prie jūsų paskyros.",
+ "Device" : "Įrenginys",
+ "Last activity" : "Paskutinė veikla",
"Name" : "Pavadinimas",
+ "App name" : "Programėlės pavadinimas",
+ "Create new app password" : "Sukurti naują programėlės slaptažodį",
"Username" : "Naudotojo vardas",
+ "Done" : "Atlikta",
"Create" : "Sukurti",
"Admin Recovery Password" : "Administracinis atkūrimo slaptažodis",
"Enter the recovery password in order to recover the users files during password change" : "Įveskite atkūrimo slaptažodį, kad atkurtumėte naudotojo failus keičiant slaptažodį",
@@ -116,14 +160,18 @@ OC.L10N.register(
"set new password" : "nustatyti naują slaptažodį",
"Default" : "Numatytasis",
"Language changed" : "Kalba pakeista",
- "Fatal issues only" : "Tik kritinės problemos",
+ "iPhone" : "iPhone",
+ "Fatal issues only" : "Tik lemtingosios klaidos",
"Log" : "Žurnalas",
"More" : "Daugiau",
"Less" : "Mažiau",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Žurnalo failo dydis yra daugiau nei 100 MB. Jo atsiuntimas gali šiek tiek užtrukti!",
"Group" : "Grupė",
"APCu" : "APCu",
"Redis" : "Redis",
"External Storage" : "Išorinės saugyklos",
- "Updates" : "Atnaujinimai"
+ "Updates" : "Atnaujinimai",
+ "An error occurred: {message}" : "Įvyko klaida: {message}",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Jeigu norite palaikyti projektą, tuomet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">prisijunkite prie kūrimo</a>\n\t\tarba\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">padėkite kitiems naudotojams</a>!"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/settings/l10n/lt_LT.json b/settings/l10n/lt_LT.json
index fb9cb6240eb..98b3fc749b4 100644
--- a/settings/l10n/lt_LT.json
+++ b/settings/l10n/lt_LT.json
@@ -17,38 +17,55 @@
"Invalid mail address" : "Neteisingas pašto adresas",
"A user with that name already exists." : "Toks naudotojas jau yra.",
"Unable to create user." : "Nepavyko sukurti naudotojo.",
- "Your %s account was created" : "Tavo paskyra %s sukurta",
+ "Your %s account was created" : "Jūsų paskyra %s sukurta",
"Unable to delete user." : "Nepavyko ištrinti naudotojo.",
+ "Settings saved" : "Nustatymai įrašyti",
"Unable to change full name" : "Nepavyko pakeisti pilno vardo",
"Your full name has been changed." : "Pilnas vardas pakeistas.",
"Invalid user" : "Neteisingas naudotojas",
"Unable to change mail address" : "Nepavyko pakeisti el. pašto adresą",
"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 programos.",
+ "Couldn't update app." : "Nepavyko atnaujinti programėlės.",
"Not saved" : "Neišsaugota",
"Sending..." : "Siunčiama...",
"Official" : "Oficiali",
"All" : "Viskas",
"Update to %s" : "Atnaujinti į %s",
"Please wait...." : "Prašome palaukti...",
- "Error while disabling app" : "Klaida išjungiant programą",
+ "Error while disabling app" : "Klaida, išjungiant programėlę",
"Disable" : "Išjungti",
"Enable" : "Įjungti",
- "Error while enabling app" : "Klaida įjungiant programą",
+ "Error while enabling app" : "Klaida, įjungiant programėlę",
"Updating...." : "Atnaujinama...",
"Error while updating app" : "Įvyko klaida atnaujinant programą",
"Updated" : "Atnaujinta",
"Approved" : "Patvirtinta",
"Experimental" : "Eksperimentinė",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome, skirta Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "iOS klientas",
+ "Android Client" : "Android klientas",
+ "This session" : "Šis seansas",
+ "Copy" : "Kopijuoti",
"Copied!" : "Nukopijuota!",
"Not supported!" : "Nepalaikoma!",
"Valid until {date}" : "Galioja iki {date}",
"Delete" : "Ištrinti",
- "Select a profile picture" : "Pažymėkite profilio paveikslą",
+ "Only visible to local users" : "Matoma tik vietiniams naudotojams",
+ "Only visible to you" : "Matoma tik jums",
+ "Visible to local users and to trusted servers" : "Matoma tik vietiniams naudotojams ir patikimiems serveriams",
+ "Select a profile picture" : "Pasirinkite profilio paveikslą",
"Very weak password" : "Labai silpnas slaptažodis",
"Weak password" : "Silpnas slaptažodis",
"So-so password" : "Neblogas slaptažodis",
@@ -57,19 +74,27 @@
"Groups" : "Grupės",
"undo" : "anuliuoti",
"never" : "niekada",
+ "Password successfully changed" : "Slaptažodis sėkmingai pakeistas",
+ "Changing the password will result in data loss, because data recovery is not available for this user" : "Slaptažodžio pakeitimas sąlygos duomenų praradimą, kadangi šiam naudotojui nėra prieinamas duomenų atkūrimas",
"A valid username must be provided" : "Privalo būti pateiktas tinkamas naudotojo vardas",
"A valid password must be provided" : "Slaptažodis turi būti tinkamas",
"__language_name__" : "Lietuvių",
"Unlimited" : "Neribotai",
+ "Personal info" : "Asmeninė informacija",
+ "Sessions" : "Seansai",
+ "App passwords" : "Programėlių slaptažodžiai",
"None" : "Nieko",
"Login" : "Prisijungti",
- "Email server" : "Pašto serveris",
- "Open documentation" : "Atverti dokumentą",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
+ "Email server" : "El. pašto serveris",
+ "Open documentation" : "Atverti dokumentaciją",
"Encryption" : "Šifravimas",
"Authentication required" : "Reikalinga autentikacija",
"Server address" : "Serverio adresas",
"Port" : "Prievadas",
"SMTP Username" : "SMTP naudotojo vardas",
+ "SMTP Password" : "SMTP slaptažodis",
"Server-side encryption" : "Šifravimas serveryje",
"Security & setup warnings" : "Saugos ir diegimo perspėjimai",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūksta PHP modulio „fileinfo“. Labai rekomenduojame įjungti šį modulį, kad gauti geriausius rezultatus nustatant mime-tipą.",
@@ -83,15 +108,27 @@
"days" : "dienos",
"Allow resharing" : "Leisti dalintis",
"Tips & tricks" : "Patarimai ir gudrybės",
+ "Show description …" : "Rodyti aprašą …",
+ "Hide description …" : "Slėpti aprašą …",
+ "This app has an update available." : "Šiai programėlei yra prieinamas atnaujinimas.",
"Cheers!" : "Sveikinimai!",
"Forum" : "Forumas",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs naudojate <strong>%s</strong> iš <strong>%s</strong>",
"Profile picture" : "Profilio paveikslas",
"Upload new" : "Įkelti naują",
- "Remove image" : "Pašalinti paveikslėlį",
+ "Remove image" : "Šalinti paveikslą",
+ "png or jpg, max. 20 MB" : "png arba jpg, daugiausiai 20 MB",
"Cancel" : "Atsisakyti",
"Email" : "El. Paštas",
"Your email address" : "Jūsų el. pašto adresas",
+ "For password recovery and notifications" : "Skirtas slaptažodžio atkūrimui ir pranešimams",
+ "Phone number" : "Telefono numeris",
+ "Your phone number" : "Jūsų telefono numeris",
+ "Address" : "Adresas",
+ "Website" : "Svetainė",
+ "Your website" : "Jūsų svetainė",
+ "Twitter" : "Twitter",
+ "You are member of the following groups:" : "Jūs esate šių grupių narys:",
"Password" : "Slaptažodis",
"Current password" : "Dabartinis slaptažodis",
"New password" : "Naujas slaptažodis",
@@ -102,9 +139,16 @@
"Desktop client" : "Darbastalio klientas",
"Android app" : "Android programa",
"iOS app" : "iOS programa",
- "Show First Run Wizard again" : "Rodyti pirmo karto vedlį dar kartą",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Jeigu norite palaikyti projektą, tuomet {contributeopen}prisijunkite prie kūrimo{linkclose} arba {contributeopen}skleiskite žinią kitiems{linkclose}!",
+ "Show First Run Wizard again" : "Dar kartą rodyti pirmojo paleidimo vediklį",
+ "Web, desktop and mobile clients currently logged in to your account." : "Saityno, darbalaukio ir mobilieji klientai, kurie šiuo metu yra prisijungę prie jūsų paskyros.",
+ "Device" : "Įrenginys",
+ "Last activity" : "Paskutinė veikla",
"Name" : "Pavadinimas",
+ "App name" : "Programėlės pavadinimas",
+ "Create new app password" : "Sukurti naują programėlės slaptažodį",
"Username" : "Naudotojo vardas",
+ "Done" : "Atlikta",
"Create" : "Sukurti",
"Admin Recovery Password" : "Administracinis atkūrimo slaptažodis",
"Enter the recovery password in order to recover the users files during password change" : "Įveskite atkūrimo slaptažodį, kad atkurtumėte naudotojo failus keičiant slaptažodį",
@@ -114,14 +158,18 @@
"set new password" : "nustatyti naują slaptažodį",
"Default" : "Numatytasis",
"Language changed" : "Kalba pakeista",
- "Fatal issues only" : "Tik kritinės problemos",
+ "iPhone" : "iPhone",
+ "Fatal issues only" : "Tik lemtingosios klaidos",
"Log" : "Žurnalas",
"More" : "Daugiau",
"Less" : "Mažiau",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Žurnalo failo dydis yra daugiau nei 100 MB. Jo atsiuntimas gali šiek tiek užtrukti!",
"Group" : "Grupė",
"APCu" : "APCu",
"Redis" : "Redis",
"External Storage" : "Išorinės saugyklos",
- "Updates" : "Atnaujinimai"
+ "Updates" : "Atnaujinimai",
+ "An error occurred: {message}" : "Įvyko klaida: {message}",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Jeigu norite palaikyti projektą, tuomet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">prisijunkite prie kūrimo</a>\n\t\tarba\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">padėkite kitiems naudotojams</a>!"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js
index 5b7eabaafb8..fc6a289e9a2 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -74,7 +74,6 @@ OC.L10N.register(
"Experimental" : "Экспериментальное",
"No apps found for {query}" : "Приложения не найдены по {query}",
"Disconnect" : "Отключить",
- "Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
"Google Chrome" : "Google Chrome",
diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json
index 2cb3d187414..6dd34834297 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -72,7 +72,6 @@
"Experimental" : "Экспериментальное",
"No apps found for {query}" : "Приложения не найдены по {query}",
"Disconnect" : "Отключить",
- "Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
"Google Chrome" : "Google Chrome",
diff --git a/settings/personal.php b/settings/personal.php
index 27c1a25653d..a5cf88a781d 100644
--- a/settings/personal.php
+++ b/settings/personal.php
@@ -196,7 +196,7 @@ $tmpl->assign('groups', $groups2);
// add hardcoded forms from the template
$formsAndMore = [];
-$formsAndMore[]= ['anchor' => 'avatar', 'section-name' => $l->t('Personal info')];
+$formsAndMore[]= ['anchor' => 'personal-settings', 'section-name' => $l->t('Personal info')];
$formsAndMore[]= ['anchor' => 'sessions', 'section-name' => $l->t('Sessions')];
$formsAndMore[]= ['anchor' => 'apppasswords', 'section-name' => $l->t('App passwords')];
$formsAndMore[]= ['anchor' => 'clientsbox', 'section-name' => $l->t('Sync clients')];
diff --git a/settings/templates/apps.php b/settings/templates/apps.php
index 2f7d66cdf28..9f27b53e5e8 100644
--- a/settings/templates/apps.php
+++ b/settings/templates/apps.php
@@ -24,7 +24,7 @@ script(
<?php if($_['appstoreEnabled']): ?>
<li>
- <a class="app-external" target="_blank" rel="noreferrer" href="https://docs.nextcloud.org/server/10/developer_manual/"><?php p($l->t('Developer documentation'));?> ↗</a>
+ <a class="app-external" target="_blank" rel="noreferrer" href="https://docs.nextcloud.org/server/11/developer_manual/"><?php p($l->t('Developer documentation'));?> ↗</a>
</li>
<?php endif; ?>
</script>
@@ -134,7 +134,7 @@ script(
<input class="enable{{#if needsDownload}} needs-download{{/if}}" type="submit" data-appid="{{id}}" data-active="false" {{#unless canInstall}}disabled="disabled"{{/unless}} value="<?php p($l->t("Enable"));?>"/>
{{/if}}
{{#if canUnInstall}}
- <input class="uninstall" type="submit" value="<?php p($l->t('Uninstall App')); ?>" data-appid="{{id}}" />
+ <input class="uninstall" type="submit" value="<?php p($l->t('Uninstall app')); ?>" data-appid="{{id}}" />
{{/if}}
<div class="warning hidden"></div>
diff --git a/tests/Core/Controller/LoginControllerTest.php b/tests/Core/Controller/LoginControllerTest.php
index d16b9b114f3..600179a1dc5 100644
--- a/tests/Core/Controller/LoginControllerTest.php
+++ b/tests/Core/Controller/LoginControllerTest.php
@@ -337,6 +337,9 @@ class LoginControllerTest extends TestCase {
$user->expects($this->any())
->method('getUID')
->will($this->returnValue('uid'));
+ $user->expects($this->any())
+ ->method('getLastLogin')
+ ->willReturn(123456);
$password = 'secret';
$indexPageUrl = \OC_Util::getDefaultPageUrl();
@@ -373,11 +376,21 @@ class LoginControllerTest extends TestCase {
$this->config->expects($this->once())
->method('deleteUserValue')
->with('uid', 'core', 'lostpassword');
+ $this->config->expects($this->once())
+ ->method('setUserValue')
+ ->with('uid', 'core', 'timezone', 'Europe/Berlin');
$this->userSession->expects($this->never())
->method('createRememberMeToken');
+ $this->session->expects($this->exactly(2))
+ ->method('set')
+ ->withConsecutive(
+ ['last-password-confirm', 123456],
+ ['timezone', '1']
+ );
+
$expected = new \OCP\AppFramework\Http\RedirectResponse($indexPageUrl);
- $this->assertEquals($expected, $this->loginController->tryLogin($user, $password, null));
+ $this->assertEquals($expected, $this->loginController->tryLogin($user, $password, null, false, 'Europe/Berlin', '1'));
}
public function testLoginWithValidCredentialsAndRememberMe() {
diff --git a/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php b/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php
index aa0d50cac97..a9cd5a190d0 100644
--- a/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php
+++ b/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php
@@ -58,6 +58,12 @@ EOD;
$this->timeFactory = $this->createMock(ITimeFactory::class);
$this->config = $this->createMock(IConfig::class);
+ $this->config
+ ->expects($this->atLeastOnce())
+ ->method('getSystemValue')
+ ->with('version')
+ ->willReturn('11.0.0.2');
+
$this->fetcher = new AppFetcher(
$this->appData,
$this->clientService,
@@ -103,11 +109,6 @@ EOD;
->expects($this->once())
->method('getTime')
->willReturn(1234);
- $this->config
- ->expects($this->once())
- ->method('getSystemValue')
- ->with('version')
- ->willReturn('11.0.0.2');
$expected = array (
'data' =>
diff --git a/tests/lib/InstallerTest.php b/tests/lib/InstallerTest.php
index dadaffe1879..d1923970588 100644
--- a/tests/lib/InstallerTest.php
+++ b/tests/lib/InstallerTest.php
@@ -73,6 +73,9 @@ class InstallerTest extends TestCase {
}
public function testInstallApp() {
+ // Read the current version of the app to check for bug #2572
+ \OC_App::getAppVersion('testapp');
+
// Extract app
$pathOfTestApp = __DIR__ . '/../data/testapp.zip';
$tar = new ZIP($pathOfTestApp);
@@ -88,6 +91,7 @@ class InstallerTest extends TestCase {
$installer->installApp(self::$appid);
$isInstalled = Installer::isInstalled(self::$appid);
$this->assertTrue($isInstalled);
+ $this->assertSame('0.9', \OC::$server->getConfig()->getAppValue('testapp', 'installed_version'));
$installer->removeApp(self::$appid);
}
diff --git a/tests/lib/Repair/NC11/FixMountStoragesTest.php b/tests/lib/Repair/NC11/FixMountStoragesTest.php
new file mode 100644
index 00000000000..12e09105038
--- /dev/null
+++ b/tests/lib/Repair/NC11/FixMountStoragesTest.php
@@ -0,0 +1,132 @@
+<?php
+/**
+ * @copyright 2016 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 Test\Repair\NC11;
+
+use OC\Repair\NC11\FixMountStorages;
+use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\IDBConnection;
+use OCP\Migration\IOutput;
+use Test\TestCase;
+
+/**
+ * Class FixMountStoragesTest
+ *
+ * @package Test\Repair\NC11
+ * @group DB
+ */
+class FixMountStoragesTest extends TestCase {
+
+ /** @var IDBConnection */
+ private $db;
+
+ /** @var FixMountStorages */
+ private $repair;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->db = \OC::$server->getDatabaseConnection();
+
+ $this->repair = new FixMountStorages(
+ $this->db
+ );
+ }
+
+ public function testGetName() {
+ $this->assertSame('Fix potential broken mount points', $this->repair->getName());
+ }
+
+ public function testRun() {
+ // Valid mount
+ $file1 = $this->createFile(42);
+ $mount1 = $this->createMount($file1, 42);
+ $this->assertStorage($mount1, 42);
+
+ // Broken mount
+ $file2 = $this->createFile(23);
+ $mount2 = $this->createMount($file2, 1337);
+ $this->assertStorage($mount2, 1337);
+
+ /** @var IOutput|\PHPUnit_Framework_MockObject_MockObject $output */
+ $output = $this->createMock(IOutput::class);
+ $output->expects($this->at(0))
+ ->method('info')
+ ->with('1 mounts updated');
+
+ $this->repair->run($output);
+ $this->assertStorage($mount1, 42);
+ $this->assertStorage($mount2, 23);
+
+ $output->expects($this->at(0))
+ ->method('info')
+ ->with('No mounts updated');
+
+ $this->repair->run($output);
+ $this->assertStorage($mount1, 42);
+ $this->assertStorage($mount2, 23);
+ }
+
+
+ protected function createFile($storage) {
+ $query = $this->db->getQueryBuilder();
+
+ $query->insert('filecache')
+ ->values([
+ 'storage' => $query->createNamedParameter($storage, IQueryBuilder::PARAM_INT),
+ 'path_hash' => $query->createNamedParameter(static::getUniqueID(), IQueryBuilder::PARAM_STR),
+ 'encrypted' => $query->createNamedParameter(0, IQueryBuilder::PARAM_INT),
+ 'size' => $query->createNamedParameter(0, IQueryBuilder::PARAM_INT),
+ 'unencrypted_size' => $query->createNamedParameter(0, IQueryBuilder::PARAM_INT),
+ ]);
+ $query->execute();
+
+ return $query->getLastInsertId();
+ }
+
+ protected function createMount($fileId, $storage) {
+ $query = $this->db->getQueryBuilder();
+
+ $query->insert('mounts')
+ ->values([
+ 'storage_id' => $query->createNamedParameter($storage, IQueryBuilder::PARAM_INT),
+ 'root_id' => $query->createNamedParameter($fileId, IQueryBuilder::PARAM_INT),
+ 'user_id' => $query->createNamedParameter(static::getUniqueID(), IQueryBuilder::PARAM_STR),
+ 'mount_point' => $query->createNamedParameter(static::getUniqueID(), IQueryBuilder::PARAM_STR),
+ ]);
+ $query->execute();
+
+ return $query->getLastInsertId();
+ }
+
+ protected function assertStorage($mount, $storage) {
+ $query = $this->db->getQueryBuilder();
+ $query->select('storage_id')
+ ->from('mounts')
+ ->where($query->expr()->eq('id', $query->createNamedParameter($mount, IQueryBuilder::PARAM_INT)));
+ $result = $query->execute();
+ $row = $result->fetch();
+ $result->closeCursor();
+
+ $this->assertEquals($storage, $row['storage_id']);
+ }
+}
diff --git a/tests/lib/ServerTest.php b/tests/lib/ServerTest.php
index 02fccee628e..9c375dd654e 100644
--- a/tests/lib/ServerTest.php
+++ b/tests/lib/ServerTest.php
@@ -79,8 +79,6 @@ class ServerTest extends \Test\TestCase {
['DateTimeFormatter', '\OCP\IDateTimeFormatter'],
['DateTimeZone', '\OC\DateTimeZone'],
['DateTimeZone', '\OCP\IDateTimeZone'],
- ['Db', '\OC\AppFramework\Db\Db'],
- ['Db', '\OCP\IDb'],
['EncryptionFileHelper', '\OC\Encryption\File'],
['EncryptionFileHelper', '\OCP\Encryption\IFile'],
diff --git a/themes/example/defaults.php b/themes/example/defaults.php
index 346d510f622..25ec350ed1b 100644
--- a/themes/example/defaults.php
+++ b/themes/example/defaults.php
@@ -33,7 +33,7 @@ class OC_Theme {
* @return string URL
*/
public function getSyncClientUrl() {
- return 'https://nextcloud.com/install';
+ return 'https://nextcloud.com/install/#install-clients';
}
/**
diff --git a/version.php b/version.php
index ddc83aa095f..6db26c8c66c 100644
--- a/version.php
+++ b/version.php
@@ -26,12 +26,12 @@
// between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel
// when updating major/minor version number.
-$OC_Version = array(11, 0, 0, 5);
+$OC_Version = array(12, 0, 0, 11);
// The human readable string
-$OC_VersionString = '11.0 beta 2';
+$OC_VersionString = '12.0 alpha';
-$OC_VersionCanBeUpgradedFrom = array(9, 1);
+$OC_VersionCanBeUpgradedFrom = array(11);
// default Nextcloud channel
$OC_Channel = 'git';