summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--apps/admin_audit/appinfo/info.xml4
-rw-r--r--apps/comments/l10n/fr.js2
-rw-r--r--apps/comments/l10n/fr.json2
-rw-r--r--apps/comments/l10n/nb_NO.js2
-rw-r--r--apps/comments/l10n/nb_NO.json2
-rw-r--r--apps/comments/l10n/zh_CN.js18
-rw-r--r--apps/comments/l10n/zh_CN.json18
-rw-r--r--apps/dav/appinfo/v1/webdav.php1
-rw-r--r--apps/dav/appinfo/v2/remote.php1
-rw-r--r--apps/dav/l10n/sq.js40
-rw-r--r--apps/dav/l10n/sq.json38
-rw-r--r--apps/dav/l10n/sv.js26
-rw-r--r--apps/dav/l10n/sv.json26
-rw-r--r--apps/encryption/css/settings-personal.css5
-rw-r--r--apps/encryption/l10n/fr.js2
-rw-r--r--apps/encryption/l10n/fr.json2
-rw-r--r--apps/encryption/l10n/id.js1
-rw-r--r--apps/encryption/l10n/id.json1
-rw-r--r--apps/encryption/l10n/sv.js4
-rw-r--r--apps/encryption/l10n/sv.json4
-rw-r--r--apps/federatedfilesharing/l10n/fr.js2
-rw-r--r--apps/federatedfilesharing/l10n/fr.json2
-rw-r--r--apps/federatedfilesharing/l10n/sq.js26
-rw-r--r--apps/federatedfilesharing/l10n/sq.json26
-rw-r--r--apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php46
-rw-r--r--apps/files/css/files.css41
-rw-r--r--apps/files/js/filelist.js17
-rw-r--r--apps/files/js/newfilemenu.js10
-rw-r--r--apps/files/l10n/de.js4
-rw-r--r--apps/files/l10n/de.json4
-rw-r--r--apps/files/l10n/de_DE.js2
-rw-r--r--apps/files/l10n/de_DE.json2
-rw-r--r--apps/files/l10n/fr.js46
-rw-r--r--apps/files/l10n/fr.json46
-rw-r--r--apps/files/l10n/hu_HU.js1
-rw-r--r--apps/files/l10n/hu_HU.json1
-rw-r--r--apps/files/l10n/lv.js6
-rw-r--r--apps/files/l10n/lv.json6
-rw-r--r--apps/files/l10n/nb_NO.js1
-rw-r--r--apps/files/l10n/nb_NO.json1
-rw-r--r--apps/files/l10n/zh_CN.js16
-rw-r--r--apps/files/l10n/zh_CN.json16
-rw-r--r--apps/files_external/appinfo/info.xml6
-rw-r--r--apps/files_external/img/app-dark.svg1
-rw-r--r--apps/files_external/lib/Settings/Section.php21
-rw-r--r--apps/files_external/tests/Settings/SectionTest.php5
-rw-r--r--apps/files_sharing/css/authenticate.css8
-rw-r--r--apps/files_sharing/css/public.css64
-rw-r--r--apps/files_sharing/css/sharetabview.css16
-rw-r--r--apps/files_sharing/js/public.js2
-rw-r--r--apps/files_sharing/l10n/de.js6
-rw-r--r--apps/files_sharing/l10n/de.json6
-rw-r--r--apps/files_sharing/l10n/de_DE.js2
-rw-r--r--apps/files_sharing/l10n/de_DE.json2
-rw-r--r--apps/files_sharing/l10n/fr.js2
-rw-r--r--apps/files_sharing/l10n/fr.json2
-rw-r--r--apps/files_sharing/l10n/pl.js161
-rw-r--r--apps/files_sharing/l10n/pl.json161
-rw-r--r--apps/files_sharing/lib/Controller/ShareAPIController.php1
-rw-r--r--apps/files_sharing/templates/public.php59
-rw-r--r--apps/provisioning_api/appinfo/routes.php1
-rw-r--r--apps/provisioning_api/lib/Controller/UsersController.php91
-rw-r--r--apps/provisioning_api/tests/Controller/UsersControllerTest.php353
-rw-r--r--apps/systemtags/l10n/de.js2
-rw-r--r--apps/systemtags/l10n/de.json2
-rw-r--r--apps/systemtags/l10n/de_DE.js2
-rw-r--r--apps/systemtags/l10n/de_DE.json2
-rw-r--r--apps/systemtags/l10n/sq.js43
-rw-r--r--apps/systemtags/l10n/sq.json43
-rw-r--r--apps/theming/img/app-dark.svg1
-rw-r--r--apps/theming/lib/Controller/ThemingController.php4
-rw-r--r--apps/theming/lib/Settings/Section.php21
-rw-r--r--apps/theming/templates/settings-admin.php2
-rw-r--r--apps/theming/tests/Controller/ThemingControllerTest.php11
-rw-r--r--apps/theming/tests/Settings/SectionTest.php18
-rw-r--r--apps/twofactor_backupcodes/appinfo/app.php3
-rw-r--r--apps/twofactor_backupcodes/appinfo/routes.php2
-rw-r--r--apps/twofactor_backupcodes/l10n/de.js2
-rw-r--r--apps/twofactor_backupcodes/l10n/de.json2
-rw-r--r--apps/twofactor_backupcodes/lib/Activity/Provider.php5
-rw-r--r--apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php1
-rw-r--r--apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php11
-rw-r--r--apps/twofactor_backupcodes/settings/personal.php3
-rw-r--r--apps/twofactor_backupcodes/tests/Unit/Activity/GenericProviderTest.php132
-rw-r--r--apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php55
-rw-r--r--apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php37
-rw-r--r--apps/user_ldap/img/app-dark.svg4
-rw-r--r--apps/user_ldap/l10n/fr.js6
-rw-r--r--apps/user_ldap/l10n/fr.json6
-rw-r--r--apps/user_ldap/l10n/id.js6
-rw-r--r--apps/user_ldap/l10n/id.json6
-rw-r--r--apps/user_ldap/l10n/sq.js2
-rw-r--r--apps/user_ldap/l10n/sq.json2
-rw-r--r--apps/user_ldap/l10n/sv.js1
-rw-r--r--apps/user_ldap/l10n/sv.json1
-rw-r--r--apps/user_ldap/lib/Settings/Section.php21
-rw-r--r--apps/user_ldap/tests/Settings/SectionTest.php18
-rw-r--r--apps/workflowengine/lib/Settings/Section.php21
-rw-r--r--bower.json1
-rw-r--r--config/config.sample.php228
-rw-r--r--core/Controller/LoginController.php14
-rw-r--r--core/Controller/LostController.php1
-rw-r--r--core/Controller/OCSController.php16
-rw-r--r--core/Controller/SetupController.php1
-rw-r--r--core/css/apps.scss31
-rw-r--r--core/css/guest.css660
-rw-r--r--core/css/header.scss282
-rw-r--r--core/css/icons.scss9
-rw-r--r--core/css/inputs.scss882
-rw-r--r--core/css/installation.css802
-rw-r--r--core/css/jquery-ui-fixes.css (renamed from core/css/jquery-ui-fixes.scss)108
-rw-r--r--core/css/multiselect.scss13
-rw-r--r--core/css/share.scss21
-rw-r--r--core/css/styles.scss47
-rw-r--r--core/css/systemtags.scss7
-rw-r--r--core/css/tooltip.scss8
-rw-r--r--core/css/update.css449
-rw-r--r--core/img/actions/checkbox-checked-disabled.svg1
-rw-r--r--core/img/actions/checkbox-checked-white.svg1
-rw-r--r--core/img/actions/checkbox-checked.svg1
-rw-r--r--core/img/actions/checkbox-disabled-white.svg1
-rw-r--r--core/img/actions/checkbox-disabled.svg1
-rw-r--r--core/img/actions/checkbox-mark-white.svg1
-rw-r--r--core/img/actions/checkbox-mark.svg1
-rw-r--r--core/img/actions/checkbox-mixed-disabled.svg1
-rw-r--r--core/img/actions/checkbox-mixed-white.svg2
-rw-r--r--core/img/actions/checkbox-mixed.svg2
-rw-r--r--core/img/actions/checkbox-white.svg1
-rw-r--r--core/img/actions/checkbox.svg1
-rw-r--r--core/img/actions/radio-checked-disabled.svg1
-rw-r--r--core/img/actions/radio-checked-white.svg1
-rw-r--r--core/img/actions/radio-checked.svg1
-rw-r--r--core/img/actions/radio-disabled.svg1
-rw-r--r--core/img/actions/radio-white.svg1
-rw-r--r--core/img/actions/radio.svg1
-rw-r--r--core/img/actions/settings-dark.svg1
-rw-r--r--core/js/sharedialoglinkshareview.js39
-rw-r--r--core/js/sharedialogshareelistview.js8
-rw-r--r--core/js/shareitemmodel.js16
-rw-r--r--core/l10n/bg_BG.js4
-rw-r--r--core/l10n/bg_BG.json4
-rw-r--r--core/l10n/cs_CZ.js5
-rw-r--r--core/l10n/cs_CZ.json5
-rw-r--r--core/l10n/da.js4
-rw-r--r--core/l10n/da.json4
-rw-r--r--core/l10n/de.js4
-rw-r--r--core/l10n/de.json4
-rw-r--r--core/l10n/de_DE.js4
-rw-r--r--core/l10n/de_DE.json4
-rw-r--r--core/l10n/el.js4
-rw-r--r--core/l10n/el.json4
-rw-r--r--core/l10n/en_GB.js4
-rw-r--r--core/l10n/en_GB.json4
-rw-r--r--core/l10n/es.js4
-rw-r--r--core/l10n/es.json4
-rw-r--r--core/l10n/fi_FI.js4
-rw-r--r--core/l10n/fi_FI.json4
-rw-r--r--core/l10n/fr.js4
-rw-r--r--core/l10n/fr.json4
-rw-r--r--core/l10n/he.js4
-rw-r--r--core/l10n/he.json4
-rw-r--r--core/l10n/hu_HU.js4
-rw-r--r--core/l10n/hu_HU.json4
-rw-r--r--core/l10n/id.js4
-rw-r--r--core/l10n/id.json4
-rw-r--r--core/l10n/is.js4
-rw-r--r--core/l10n/is.json4
-rw-r--r--core/l10n/it.js4
-rw-r--r--core/l10n/it.json4
-rw-r--r--core/l10n/ja.js4
-rw-r--r--core/l10n/ja.json4
-rw-r--r--core/l10n/ko.js4
-rw-r--r--core/l10n/ko.json4
-rw-r--r--core/l10n/nb_NO.js4
-rw-r--r--core/l10n/nb_NO.json4
-rw-r--r--core/l10n/nl.js5
-rw-r--r--core/l10n/nl.json5
-rw-r--r--core/l10n/pl.js4
-rw-r--r--core/l10n/pl.json4
-rw-r--r--core/l10n/pt_BR.js5
-rw-r--r--core/l10n/pt_BR.json5
-rw-r--r--core/l10n/pt_PT.js4
-rw-r--r--core/l10n/pt_PT.json4
-rw-r--r--core/l10n/ru.js14
-rw-r--r--core/l10n/ru.json14
-rw-r--r--core/l10n/sk_SK.js4
-rw-r--r--core/l10n/sk_SK.json4
-rw-r--r--core/l10n/sl.js4
-rw-r--r--core/l10n/sl.json4
-rw-r--r--core/l10n/sq.js5
-rw-r--r--core/l10n/sq.json5
-rw-r--r--core/l10n/sv.js5
-rw-r--r--core/l10n/sv.json5
-rw-r--r--core/l10n/th_TH.js4
-rw-r--r--core/l10n/th_TH.json4
-rw-r--r--core/l10n/tr.js4
-rw-r--r--core/l10n/tr.json4
-rw-r--r--core/l10n/uk.js4
-rw-r--r--core/l10n/uk.json4
-rw-r--r--core/l10n/zh_CN.js4
-rw-r--r--core/l10n/zh_CN.json4
-rw-r--r--core/l10n/zh_TW.js4
-rw-r--r--core/l10n/zh_TW.json4
-rw-r--r--core/routes.php1
-rw-r--r--core/templates/layout.user.php111
-rw-r--r--core/vendor/.gitignore16
-rw-r--r--core/vendor/DOMPurify/.bower.json42
-rw-r--r--core/vendor/DOMPurify/LICENSE378
-rw-r--r--core/vendor/DOMPurify/dist/purify.min.js2
-rw-r--r--core/vendor/marked/.bower.json33
-rw-r--r--core/vendor/marked/LICENSE19
-rw-r--r--core/vendor/marked/marked.min.js6
-rw-r--r--lib/base.php11
-rw-r--r--lib/composer/composer/autoload_classmap.php1
-rw-r--r--lib/composer/composer/autoload_static.php1
-rw-r--r--lib/l10n/sk_SK.js13
-rw-r--r--lib/l10n/sk_SK.json13
-rw-r--r--lib/private/AppConfig.php4
-rw-r--r--lib/private/AppFramework/DependencyInjection/DIContainer.php21
-rw-r--r--lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php14
-rw-r--r--lib/private/AppFramework/Utility/ControllerMethodReflector.php23
-rw-r--r--lib/private/Files/Node/File.php56
-rw-r--r--lib/private/Files/Node/Folder.php55
-rw-r--r--lib/private/Files/Node/Node.php80
-rw-r--r--lib/private/Files/Type/Detection.php4
-rw-r--r--lib/private/Files/View.php2
-rw-r--r--lib/private/Mail/Mailer.php2
-rw-r--r--lib/private/Security/Bruteforce/Throttler.php13
-rw-r--r--lib/private/Server.php3
-rw-r--r--lib/private/Settings/Manager.php19
-rw-r--r--lib/private/Settings/Section.php21
-rw-r--r--lib/private/SubAdmin.php2
-rw-r--r--lib/private/Template/CSSResourceLocator.php17
-rw-r--r--lib/private/TemplateLayout.php47
-rw-r--r--lib/private/User/Session.php6
-rw-r--r--lib/private/legacy/app.php40
-rw-r--r--lib/private/legacy/files.php1
-rw-r--r--lib/private/legacy/helper.php34
-rw-r--r--lib/public/Files/Cache/IScanner.php1
-rw-r--r--lib/public/Files/Storage/IStorage.php4
-rw-r--r--lib/public/RichObjectStrings/Definitions.php25
-rw-r--r--lib/public/Settings/IIconSection.php38
-rw-r--r--lib/public/Settings/ISection.php1
-rw-r--r--settings/Controller/AdminSettingsController.php8
-rw-r--r--settings/Controller/UsersController.php15
-rw-r--r--settings/ajax/togglegroups.php92
-rw-r--r--settings/css/settings.css74
-rw-r--r--settings/img/change.svg5
-rw-r--r--settings/img/password.svg1
-rw-r--r--settings/img/share.svg1
-rw-r--r--settings/img/toggle-filelist.svg1
-rw-r--r--settings/js/apps.js65
-rw-r--r--settings/js/users/groups.js4
-rw-r--r--settings/js/users/users.js75
-rw-r--r--settings/l10n/ar.js6
-rw-r--r--settings/l10n/ar.json6
-rw-r--r--settings/l10n/ast.js6
-rw-r--r--settings/l10n/ast.json6
-rw-r--r--settings/l10n/az.js6
-rw-r--r--settings/l10n/az.json6
-rw-r--r--settings/l10n/bg_BG.js6
-rw-r--r--settings/l10n/bg_BG.json6
-rw-r--r--settings/l10n/bn_BD.js6
-rw-r--r--settings/l10n/bn_BD.json6
-rw-r--r--settings/l10n/bs.js6
-rw-r--r--settings/l10n/bs.json6
-rw-r--r--settings/l10n/ca.js6
-rw-r--r--settings/l10n/ca.json6
-rw-r--r--settings/l10n/cs_CZ.js8
-rw-r--r--settings/l10n/cs_CZ.json8
-rw-r--r--settings/l10n/da.js6
-rw-r--r--settings/l10n/da.json6
-rw-r--r--settings/l10n/de.js12
-rw-r--r--settings/l10n/de.json12
-rw-r--r--settings/l10n/de_DE.js12
-rw-r--r--settings/l10n/de_DE.json12
-rw-r--r--settings/l10n/el.js6
-rw-r--r--settings/l10n/el.json6
-rw-r--r--settings/l10n/en_GB.js6
-rw-r--r--settings/l10n/en_GB.json6
-rw-r--r--settings/l10n/eo.js6
-rw-r--r--settings/l10n/eo.json6
-rw-r--r--settings/l10n/es.js6
-rw-r--r--settings/l10n/es.json6
-rw-r--r--settings/l10n/es_AR.js6
-rw-r--r--settings/l10n/es_AR.json6
-rw-r--r--settings/l10n/es_MX.js6
-rw-r--r--settings/l10n/es_MX.json6
-rw-r--r--settings/l10n/et_EE.js6
-rw-r--r--settings/l10n/et_EE.json6
-rw-r--r--settings/l10n/eu.js6
-rw-r--r--settings/l10n/eu.json6
-rw-r--r--settings/l10n/fa.js6
-rw-r--r--settings/l10n/fa.json6
-rw-r--r--settings/l10n/fi_FI.js6
-rw-r--r--settings/l10n/fi_FI.json6
-rw-r--r--settings/l10n/fr.js18
-rw-r--r--settings/l10n/fr.json18
-rw-r--r--settings/l10n/gl.js6
-rw-r--r--settings/l10n/gl.json6
-rw-r--r--settings/l10n/he.js6
-rw-r--r--settings/l10n/he.json6
-rw-r--r--settings/l10n/hr.js6
-rw-r--r--settings/l10n/hr.json6
-rw-r--r--settings/l10n/hu_HU.js6
-rw-r--r--settings/l10n/hu_HU.json6
-rw-r--r--settings/l10n/id.js6
-rw-r--r--settings/l10n/id.json6
-rw-r--r--settings/l10n/is.js6
-rw-r--r--settings/l10n/is.json6
-rw-r--r--settings/l10n/it.js6
-rw-r--r--settings/l10n/it.json6
-rw-r--r--settings/l10n/ja.js6
-rw-r--r--settings/l10n/ja.json6
-rw-r--r--settings/l10n/ka_GE.js6
-rw-r--r--settings/l10n/ka_GE.json6
-rw-r--r--settings/l10n/km.js6
-rw-r--r--settings/l10n/km.json6
-rw-r--r--settings/l10n/kn.js6
-rw-r--r--settings/l10n/kn.json6
-rw-r--r--settings/l10n/ko.js6
-rw-r--r--settings/l10n/ko.json6
-rw-r--r--settings/l10n/lb.js4
-rw-r--r--settings/l10n/lb.json4
-rw-r--r--settings/l10n/lt_LT.js6
-rw-r--r--settings/l10n/lt_LT.json6
-rw-r--r--settings/l10n/lv.js28
-rw-r--r--settings/l10n/lv.json28
-rw-r--r--settings/l10n/mk.js6
-rw-r--r--settings/l10n/mk.json6
-rw-r--r--settings/l10n/nb_NO.js6
-rw-r--r--settings/l10n/nb_NO.json6
-rw-r--r--settings/l10n/nl.js8
-rw-r--r--settings/l10n/nl.json8
-rw-r--r--settings/l10n/nn_NO.js6
-rw-r--r--settings/l10n/nn_NO.json6
-rw-r--r--settings/l10n/pl.js6
-rw-r--r--settings/l10n/pl.json6
-rw-r--r--settings/l10n/pt_BR.js8
-rw-r--r--settings/l10n/pt_BR.json8
-rw-r--r--settings/l10n/pt_PT.js6
-rw-r--r--settings/l10n/pt_PT.json6
-rw-r--r--settings/l10n/ro.js6
-rw-r--r--settings/l10n/ro.json6
-rw-r--r--settings/l10n/ru.js10
-rw-r--r--settings/l10n/ru.json10
-rw-r--r--settings/l10n/si_LK.js4
-rw-r--r--settings/l10n/si_LK.json4
-rw-r--r--settings/l10n/sk_SK.js7
-rw-r--r--settings/l10n/sk_SK.json7
-rw-r--r--settings/l10n/sl.js6
-rw-r--r--settings/l10n/sl.json6
-rw-r--r--settings/l10n/sq.js6
-rw-r--r--settings/l10n/sq.json6
-rw-r--r--settings/l10n/sr.js6
-rw-r--r--settings/l10n/sr.json6
-rw-r--r--settings/l10n/sv.js8
-rw-r--r--settings/l10n/sv.json8
-rw-r--r--settings/l10n/ta_LK.js4
-rw-r--r--settings/l10n/ta_LK.json4
-rw-r--r--settings/l10n/th_TH.js6
-rw-r--r--settings/l10n/th_TH.json6
-rw-r--r--settings/l10n/tr.js6
-rw-r--r--settings/l10n/tr.json6
-rw-r--r--settings/l10n/ug.js6
-rw-r--r--settings/l10n/ug.json6
-rw-r--r--settings/l10n/uk.js6
-rw-r--r--settings/l10n/uk.json6
-rw-r--r--settings/l10n/vi.js6
-rw-r--r--settings/l10n/vi.json6
-rw-r--r--settings/l10n/zh_CN.js6
-rw-r--r--settings/l10n/zh_CN.json6
-rw-r--r--settings/l10n/zh_TW.js6
-rw-r--r--settings/l10n/zh_TW.json6
-rw-r--r--settings/templates/admin/frame.php20
-rw-r--r--settings/templates/apps.php8
-rw-r--r--settings/templates/personal.php20
-rw-r--r--settings/tests/js/appsSpec.js10
-rw-r--r--tests/Core/Controller/OCSControllerTest.php18
-rw-r--r--tests/Settings/Controller/UsersControllerTest.php209
-rw-r--r--tests/karma.config.js4
-rw-r--r--tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php73
-rw-r--r--tests/lib/AppFramework/Utility/ControllerMethodReflectorTest.php13
-rw-r--r--tests/lib/AppTest.php20
-rw-r--r--tests/lib/Files/Node/FileTest.php384
-rw-r--r--tests/lib/Files/Node/FolderTest.php153
-rw-r--r--tests/lib/Files/Node/NodeTest.php478
-rw-r--r--tests/lib/Files/Type/DetectionTest.php4
-rw-r--r--tests/lib/Mail/MailerTest.php4
-rw-r--r--tests/lib/Settings/ManagerTest.php74
391 files changed, 5508 insertions, 4271 deletions
diff --git a/.gitignore b/.gitignore
index fa49588fad4..d8669fed074 100644
--- a/.gitignore
+++ b/.gitignore
@@ -124,6 +124,7 @@ Vagrantfile
# Tests - auto-generated files
/data-autotest
/tests/coverage*
+/tests/css
/tests/karma-coverage
/tests/autoconfig*
/tests/autotest*
diff --git a/apps/admin_audit/appinfo/info.xml b/apps/admin_audit/appinfo/info.xml
index 98862554090..e5ec9db0689 100644
--- a/apps/admin_audit/appinfo/info.xml
+++ b/apps/admin_audit/appinfo/info.xml
@@ -2,9 +2,7 @@
<info>
<id>admin_audit</id>
<name>Auditing / Logging</name>
- <description>Provides logging abilities for Nextcloud such as logging file
- accesses or otherwise sensitive actions.
- </description>
+ <description>Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.</description>
<licence>AGPL</licence>
<author>Nextcloud</author>
<version>1.2.0</version>
diff --git a/apps/comments/l10n/fr.js b/apps/comments/l10n/fr.js
index 21641df269b..588f429babc 100644
--- a/apps/comments/l10n/fr.js
+++ b/apps/comments/l10n/fr.js
@@ -9,7 +9,7 @@ OC.L10N.register(
"Cancel" : "Annuler",
"Edit comment" : "Modifier le commentaire",
"[Deleted user]" : "[Utilisateur supprimé]",
- "No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrer la conversation!",
+ "No comments yet, start the conversation!" : "Aucun commentaire actuellement, débutez une conversation !",
"More comments …" : "Plus de commentaires ...",
"Save" : "Enregistrer",
"Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés",
diff --git a/apps/comments/l10n/fr.json b/apps/comments/l10n/fr.json
index c8aa168fc3c..71e3823b84a 100644
--- a/apps/comments/l10n/fr.json
+++ b/apps/comments/l10n/fr.json
@@ -7,7 +7,7 @@
"Cancel" : "Annuler",
"Edit comment" : "Modifier le commentaire",
"[Deleted user]" : "[Utilisateur supprimé]",
- "No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrer la conversation!",
+ "No comments yet, start the conversation!" : "Aucun commentaire actuellement, débutez une conversation !",
"More comments …" : "Plus de commentaires ...",
"Save" : "Enregistrer",
"Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés",
diff --git a/apps/comments/l10n/nb_NO.js b/apps/comments/l10n/nb_NO.js
index a73cdd768f4..d6ac9a2b7b6 100644
--- a/apps/comments/l10n/nb_NO.js
+++ b/apps/comments/l10n/nb_NO.js
@@ -26,6 +26,8 @@ OC.L10N.register(
"%1$s commented on %2$s" : "%1$s kommenterte %2$s",
"{author} commented on {file}" : "{author} kommenterte på {file}",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "En (now) slettet bruker nevnte deg i en kommentar til “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "A (now) slettet bruker nevnte deg i en kommentar til “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s nevnte deg i en kommentar på “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} nevnte deg i en kommentar på “{file}”",
"Type in a new comment..." : "Skriv inn en ny kommentar...",
diff --git a/apps/comments/l10n/nb_NO.json b/apps/comments/l10n/nb_NO.json
index 84f83315f25..293eca39e84 100644
--- a/apps/comments/l10n/nb_NO.json
+++ b/apps/comments/l10n/nb_NO.json
@@ -24,6 +24,8 @@
"%1$s commented on %2$s" : "%1$s kommenterte %2$s",
"{author} commented on {file}" : "{author} kommenterte på {file}",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "En (now) slettet bruker nevnte deg i en kommentar til “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "A (now) slettet bruker nevnte deg i en kommentar til “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s nevnte deg i en kommentar på “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} nevnte deg i en kommentar på “{file}”",
"Type in a new comment..." : "Skriv inn en ny kommentar...",
diff --git a/apps/comments/l10n/zh_CN.js b/apps/comments/l10n/zh_CN.js
index a2eb29f322f..9a459c92b6e 100644
--- a/apps/comments/l10n/zh_CN.js
+++ b/apps/comments/l10n/zh_CN.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Post" : "发布",
"Cancel" : "取消",
"Edit comment" : "编辑评论",
- "[Deleted user]" : "[Deleted user]",
+ "[Deleted user]" : "[已删除用户]",
"No comments yet, start the conversation!" : "还没有评论,开始对话吧!",
"More comments …" : "更多评论 ...",
"Save" : "保存",
@@ -22,18 +22,18 @@ OC.L10N.register(
"%1$s commented" : "%1$s 已评论",
"{author} commented" : "{author} 评论了",
"You commented on %1$s" : "您在 %1$s 的评论",
- "You commented on {file}" : "您对 {file} 的注释",
+ "You commented on {file}" : "您对 {file} 的评论",
"%1$s commented on %2$s" : "%1$s 评论了 %2$s",
- "{author} commented on {file}" : "{author} 对 {file} 的注释",
- "<strong>Comments</strong> for files" : "显示文件的<strong>注释</strong>",
- "A (now) deleted user mentioned you in a comment on “%s”" : "一个(正)被删除的用户提醒您注释 “%s”",
- "A (now) deleted user mentioned you in a comment on “{file}”" : "一个(正)被删除的用户提醒您注释 “{file}”",
- "%1$s mentioned you in a comment on “%2$s”" : "%1$s 提醒您注释 “%2$s”",
- "{user} mentioned you in a comment on “{file}”" : "{user} 提醒您注释 “{file}”",
+ "{author} commented on {file}" : "{author} 对 {file} 的评论",
+ "<strong>Comments</strong> for files" : "文件的<strong>评论</strong>",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "一个(已)被删除的用户在 “%s” 的评论中提到了您",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "一个(已)被删除的用户在 “{file}” 的评论中提到了您",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s 在 “%2$s” 的评论中提到了您",
+ "{user} mentioned you in a comment on “{file}”" : "{user} 在 “{file}” 的评论中提到了您",
"Type in a new comment..." : "添加新评论...",
"No other comments available" : "没有其他评论",
"More comments..." : "更多评论...",
"{count} unread comments" : "{count} 条未读评论",
- "You commented on %2$s" : "你评论了 %2$s"
+ "You commented on %2$s" : "您评论了 %2$s"
},
"nplurals=1; plural=0;");
diff --git a/apps/comments/l10n/zh_CN.json b/apps/comments/l10n/zh_CN.json
index cbc878d898c..be867c5b856 100644
--- a/apps/comments/l10n/zh_CN.json
+++ b/apps/comments/l10n/zh_CN.json
@@ -6,7 +6,7 @@
"Post" : "发布",
"Cancel" : "取消",
"Edit comment" : "编辑评论",
- "[Deleted user]" : "[Deleted user]",
+ "[Deleted user]" : "[已删除用户]",
"No comments yet, start the conversation!" : "还没有评论,开始对话吧!",
"More comments …" : "更多评论 ...",
"Save" : "保存",
@@ -20,18 +20,18 @@
"%1$s commented" : "%1$s 已评论",
"{author} commented" : "{author} 评论了",
"You commented on %1$s" : "您在 %1$s 的评论",
- "You commented on {file}" : "您对 {file} 的注释",
+ "You commented on {file}" : "您对 {file} 的评论",
"%1$s commented on %2$s" : "%1$s 评论了 %2$s",
- "{author} commented on {file}" : "{author} 对 {file} 的注释",
- "<strong>Comments</strong> for files" : "显示文件的<strong>注释</strong>",
- "A (now) deleted user mentioned you in a comment on “%s”" : "一个(正)被删除的用户提醒您注释 “%s”",
- "A (now) deleted user mentioned you in a comment on “{file}”" : "一个(正)被删除的用户提醒您注释 “{file}”",
- "%1$s mentioned you in a comment on “%2$s”" : "%1$s 提醒您注释 “%2$s”",
- "{user} mentioned you in a comment on “{file}”" : "{user} 提醒您注释 “{file}”",
+ "{author} commented on {file}" : "{author} 对 {file} 的评论",
+ "<strong>Comments</strong> for files" : "文件的<strong>评论</strong>",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "一个(已)被删除的用户在 “%s” 的评论中提到了您",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "一个(已)被删除的用户在 “{file}” 的评论中提到了您",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s 在 “%2$s” 的评论中提到了您",
+ "{user} mentioned you in a comment on “{file}”" : "{user} 在 “{file}” 的评论中提到了您",
"Type in a new comment..." : "添加新评论...",
"No other comments available" : "没有其他评论",
"More comments..." : "更多评论...",
"{count} unread comments" : "{count} 条未读评论",
- "You commented on %2$s" : "你评论了 %2$s"
+ "You commented on %2$s" : "您评论了 %2$s"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/dav/appinfo/v1/webdav.php b/apps/dav/appinfo/v1/webdav.php
index f04bf406334..5ad11ceada8 100644
--- a/apps/dav/appinfo/v1/webdav.php
+++ b/apps/dav/appinfo/v1/webdav.php
@@ -25,6 +25,7 @@
// no php execution timeout for webdav
set_time_limit(0);
+ignore_user_abort(true);
// Turn off output buffering to prevent memory problems
\OC_Util::obEnd();
diff --git a/apps/dav/appinfo/v2/remote.php b/apps/dav/appinfo/v2/remote.php
index ab05e376503..b4a6578a41a 100644
--- a/apps/dav/appinfo/v2/remote.php
+++ b/apps/dav/appinfo/v2/remote.php
@@ -21,6 +21,7 @@
*/
// no php execution timeout for webdav
set_time_limit(0);
+ignore_user_abort(true);
// Turn off output buffering to prevent memory problems
\OC_Util::obEnd();
diff --git a/apps/dav/l10n/sq.js b/apps/dav/l10n/sq.js
new file mode 100644
index 00000000000..e84a2e2354f
--- /dev/null
+++ b/apps/dav/l10n/sq.js
@@ -0,0 +1,40 @@
+OC.L10N.register(
+ "dav",
+ {
+ "Calendar" : "Kalendar",
+ "{actor} created calendar {calendar}" : "{actor} krijoj kalendarin {calendar}",
+ "You created calendar {calendar}" : "Ju krijuat kalendarin {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} fshiu kalendarin {calendar}",
+ "You deleted calendar {calendar}" : "Ju fshit kalendarin {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} përditësoi kalendarin {calendar}",
+ "You updated calendar {calendar}" : "Ju përditësuat kalendarin {calendar}",
+ "{actor} shared calendar {calendar} with you" : " {actor} ndau kalendarin {calendar} me ju",
+ "You shared calendar {calendar} with {user}" : "Ju ndat kalendarin {calendar} me {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} ndau kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ndaloj së ndari kalendarin {calendar} me ju",
+ "You unshared calendar {calendar} from {user}" : "Ju ndaluat së ndari kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} ndaloj së ndari kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} ndaloj së ndari kalendarin {calendar} me veten",
+ "You shared calendar {calendar} with group {group}" : "Ju ndat kalendarin {calendar} me grupin {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} ndau kalendarin {calendar} me grupin {group}",
+ "You unshared calendar {calendar} from group {group}" : "Ju ndaluat së ndari kalendarin {calendar} me grupin {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} ndaloj së ndari kalendarin {calendar} me grupin {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} krijoj eventin {event} në kalendarin {calendar}",
+ "You created event {event} in calendar {calendar}" : "Ju krijuat eventin {event} në kalendarin {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} fshiu eventin {event} nga kalendari {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Ju fshit eventin {event} nga kalndari {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} përditsoi eventin {event} në kalndarin {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Ju përditësuat eventin {event} në kalndarin {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} u krijua todo{todo} në listën {calendar}",
+ "You created todo {todo} in list {calendar}" : "Ju krijuat todo {todo} në listën {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} u fshi todo{ todo} nga lista{calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} u përditësua todo{todo} në listën{calendar}",
+ "A <strong>calendar</strong> was modified" : "Një <strong>kalendar</strong> u modifikua",
+ "A calendar <strong>event</strong> was modified" : "Një <strong>event</strong> në kalendar u modifikua",
+ "Personal" : "Personale",
+ "Contacts" : "Kontaktet",
+ "Technical details" : "Detaje teknike",
+ "Remote Address: %s" : "Adresa remote: %s",
+ "Request ID: %s" : "ID e kërkesës: %s"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/sq.json b/apps/dav/l10n/sq.json
new file mode 100644
index 00000000000..922e7122069
--- /dev/null
+++ b/apps/dav/l10n/sq.json
@@ -0,0 +1,38 @@
+{ "translations": {
+ "Calendar" : "Kalendar",
+ "{actor} created calendar {calendar}" : "{actor} krijoj kalendarin {calendar}",
+ "You created calendar {calendar}" : "Ju krijuat kalendarin {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} fshiu kalendarin {calendar}",
+ "You deleted calendar {calendar}" : "Ju fshit kalendarin {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} përditësoi kalendarin {calendar}",
+ "You updated calendar {calendar}" : "Ju përditësuat kalendarin {calendar}",
+ "{actor} shared calendar {calendar} with you" : " {actor} ndau kalendarin {calendar} me ju",
+ "You shared calendar {calendar} with {user}" : "Ju ndat kalendarin {calendar} me {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} ndau kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ndaloj së ndari kalendarin {calendar} me ju",
+ "You unshared calendar {calendar} from {user}" : "Ju ndaluat së ndari kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} ndaloj së ndari kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} ndaloj së ndari kalendarin {calendar} me veten",
+ "You shared calendar {calendar} with group {group}" : "Ju ndat kalendarin {calendar} me grupin {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} ndau kalendarin {calendar} me grupin {group}",
+ "You unshared calendar {calendar} from group {group}" : "Ju ndaluat së ndari kalendarin {calendar} me grupin {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} ndaloj së ndari kalendarin {calendar} me grupin {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} krijoj eventin {event} në kalendarin {calendar}",
+ "You created event {event} in calendar {calendar}" : "Ju krijuat eventin {event} në kalendarin {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} fshiu eventin {event} nga kalendari {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Ju fshit eventin {event} nga kalndari {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} përditsoi eventin {event} në kalndarin {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Ju përditësuat eventin {event} në kalndarin {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} u krijua todo{todo} në listën {calendar}",
+ "You created todo {todo} in list {calendar}" : "Ju krijuat todo {todo} në listën {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} u fshi todo{ todo} nga lista{calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} u përditësua todo{todo} në listën{calendar}",
+ "A <strong>calendar</strong> was modified" : "Një <strong>kalendar</strong> u modifikua",
+ "A calendar <strong>event</strong> was modified" : "Një <strong>event</strong> në kalendar u modifikua",
+ "Personal" : "Personale",
+ "Contacts" : "Kontaktet",
+ "Technical details" : "Detaje teknike",
+ "Remote Address: %s" : "Adresa remote: %s",
+ "Request ID: %s" : "ID e kërkesës: %s"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/dav/l10n/sv.js b/apps/dav/l10n/sv.js
index 28eea0c5867..25cd0d797c8 100644
--- a/apps/dav/l10n/sv.js
+++ b/apps/dav/l10n/sv.js
@@ -2,7 +2,7 @@ OC.L10N.register(
"dav",
{
"Calendar" : "Kalender",
- "Todos" : "Att göra",
+ "Todos" : "Uppgifter",
"{actor} created calendar {calendar}" : "{actor} skapade kalender {calendar}",
"You created calendar {calendar}" : "Du skapade kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} raderade kalender {calendar}",
@@ -26,20 +26,20 @@ OC.L10N.register(
"You deleted event {event} from calendar {calendar}" : "Du raderade händelse {event} från kalender {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} uppdaterade händelse {event} i kalender {calendar}",
"You updated event {event} in calendar {calendar}" : "Du uppdaterade händelse {event} i kalender {calendar}",
- "{actor} created todo {todo} in list {calendar}" : "{actor} skapade att-göra {todo} i listan {calendar}",
- "You created todo {todo} in list {calendar}" : "Du skapade att-göra {todo} i listan {calendar}",
- "{actor} deleted todo {todo} from list {calendar}" : "{actor} raderade att-göra {todo} från listan {calendar}",
- "You deleted todo {todo} from list {calendar}" : "Du raderade att-göra {todo} från listan {calendar}",
- "{actor} updated todo {todo} in list {calendar}" : "{actor} uppdaterade att-göra {todo} i listan {calendar}",
- "You updated todo {todo} in list {calendar}" : "Du uppdaterade att-göra {todo} i listan {calendar}",
- "{actor} solved todo {todo} in list {calendar}" : "{actor} löste att-göra {todo} i listan {calendar}",
- "You solved todo {todo} in list {calendar}" : "Du löste att-göra {todo} i listan {calendar}",
- "{actor} reopened todo {todo} in list {calendar}" : "{actor} återupptog att-göra {todo} i listan {calendar}",
- "You reopened todo {todo} in list {calendar}" : "Du återupptog att-göra {todo} i listan {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} skapade uppgift {todo} i listan {calendar}",
+ "You created todo {todo} in list {calendar}" : "Du skapade uppgift {todo} i listan {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} raderade uppgift {todo} från listan {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Du raderade uppgift {todo} från listan {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} uppdaterade uppgift {todo} i listan {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Du uppdaterade uppgift {todo} i listan {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} löste uppgift {todo} i listan {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Du löste uppgift {todo} i listan {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} återupptog uppgift {todo} i listan {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Du återupptog uppgift {todo} i listan {calendar}",
"A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> modifierades",
"A calendar <strong>event</strong> was modified" : "En kalender-<strong>händelse</strong> modifierades",
- "A calendar <strong>todo</strong> was modified" : "En kalender <strong>att-göra</strong> modifierades",
- "Contact birthdays" : "Kontakters födelsedagar",
+ "A calendar <strong>todo</strong> was modified" : "En kalender <strong>uppgift</strong> modifierades",
+ "Contact birthdays" : "Födelsedagar",
"Personal" : "Privat",
"Contacts" : "Kontakter",
"Technical details" : "Tekniska detaljer",
diff --git a/apps/dav/l10n/sv.json b/apps/dav/l10n/sv.json
index 8dfb9e4e6ba..ba76ca55329 100644
--- a/apps/dav/l10n/sv.json
+++ b/apps/dav/l10n/sv.json
@@ -1,6 +1,6 @@
{ "translations": {
"Calendar" : "Kalender",
- "Todos" : "Att göra",
+ "Todos" : "Uppgifter",
"{actor} created calendar {calendar}" : "{actor} skapade kalender {calendar}",
"You created calendar {calendar}" : "Du skapade kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} raderade kalender {calendar}",
@@ -24,20 +24,20 @@
"You deleted event {event} from calendar {calendar}" : "Du raderade händelse {event} från kalender {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} uppdaterade händelse {event} i kalender {calendar}",
"You updated event {event} in calendar {calendar}" : "Du uppdaterade händelse {event} i kalender {calendar}",
- "{actor} created todo {todo} in list {calendar}" : "{actor} skapade att-göra {todo} i listan {calendar}",
- "You created todo {todo} in list {calendar}" : "Du skapade att-göra {todo} i listan {calendar}",
- "{actor} deleted todo {todo} from list {calendar}" : "{actor} raderade att-göra {todo} från listan {calendar}",
- "You deleted todo {todo} from list {calendar}" : "Du raderade att-göra {todo} från listan {calendar}",
- "{actor} updated todo {todo} in list {calendar}" : "{actor} uppdaterade att-göra {todo} i listan {calendar}",
- "You updated todo {todo} in list {calendar}" : "Du uppdaterade att-göra {todo} i listan {calendar}",
- "{actor} solved todo {todo} in list {calendar}" : "{actor} löste att-göra {todo} i listan {calendar}",
- "You solved todo {todo} in list {calendar}" : "Du löste att-göra {todo} i listan {calendar}",
- "{actor} reopened todo {todo} in list {calendar}" : "{actor} återupptog att-göra {todo} i listan {calendar}",
- "You reopened todo {todo} in list {calendar}" : "Du återupptog att-göra {todo} i listan {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} skapade uppgift {todo} i listan {calendar}",
+ "You created todo {todo} in list {calendar}" : "Du skapade uppgift {todo} i listan {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} raderade uppgift {todo} från listan {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Du raderade uppgift {todo} från listan {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} uppdaterade uppgift {todo} i listan {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Du uppdaterade uppgift {todo} i listan {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} löste uppgift {todo} i listan {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Du löste uppgift {todo} i listan {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} återupptog uppgift {todo} i listan {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Du återupptog uppgift {todo} i listan {calendar}",
"A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> modifierades",
"A calendar <strong>event</strong> was modified" : "En kalender-<strong>händelse</strong> modifierades",
- "A calendar <strong>todo</strong> was modified" : "En kalender <strong>att-göra</strong> modifierades",
- "Contact birthdays" : "Kontakters födelsedagar",
+ "A calendar <strong>todo</strong> was modified" : "En kalender <strong>uppgift</strong> modifierades",
+ "Contact birthdays" : "Födelsedagar",
"Personal" : "Privat",
"Contacts" : "Kontakter",
"Technical details" : "Tekniska detaljer",
diff --git a/apps/encryption/css/settings-personal.css b/apps/encryption/css/settings-personal.css
index 8eb5bedcb06..4bab1a8d46b 100644
--- a/apps/encryption/css/settings-personal.css
+++ b/apps/encryption/css/settings-personal.css
@@ -8,3 +8,8 @@
, #recoveryEnabledSuccess {
display: none;
}
+
+/* icons for sidebar */
+.nav-icon-basic-encryption-module {
+ background-image: url('../img/app.svg?v=1');
+} \ No newline at end of file
diff --git a/apps/encryption/l10n/fr.js b/apps/encryption/l10n/fr.js
index 77a433ef58d..14b693baa28 100644
--- a/apps/encryption/l10n/fr.js
+++ b/apps/encryption/l10n/fr.js
@@ -12,7 +12,7 @@ OC.L10N.register(
"Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération",
"Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération",
"Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération",
- "Password successfully changed." : "Mot de passe changé avec succès.",
+ "Password successfully changed." : "Mot de passe modifié avec succès.",
"Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.",
"Recovery Key disabled" : "Clé de récupération désactivée",
"Recovery Key enabled" : "Clef de récupération activée",
diff --git a/apps/encryption/l10n/fr.json b/apps/encryption/l10n/fr.json
index 2129bd43828..74c0b7492a8 100644
--- a/apps/encryption/l10n/fr.json
+++ b/apps/encryption/l10n/fr.json
@@ -10,7 +10,7 @@
"Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération",
"Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération",
"Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération",
- "Password successfully changed." : "Mot de passe changé avec succès.",
+ "Password successfully changed." : "Mot de passe modifié avec succès.",
"Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.",
"Recovery Key disabled" : "Clé de récupération désactivée",
"Recovery Key enabled" : "Clef de récupération activée",
diff --git a/apps/encryption/l10n/id.js b/apps/encryption/l10n/id.js
index c48146d1df8..41a6cfd74a7 100644
--- a/apps/encryption/l10n/id.js
+++ b/apps/encryption/l10n/id.js
@@ -34,6 +34,7 @@ OC.L10N.register(
"The share will expire on %s." : "Pembagian akan berakhir pada %s.",
"Cheers!" : "Horee!",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>",
+ "Default encryption module" : "Modul bawaan enkripsi",
"Encrypt the home storage" : "Enkripsi penyimpanan rumah",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Mengaktifkan opsi ini akan mengenkripsi semua berkas yang disimpan pada penyimpanan utama, jika tidak diaktifkan maka hanya berkas pada penyimpanan eksternal saja yang akan dienkripsi.",
"Enable recovery key" : "Aktifkan kunci pemulihan",
diff --git a/apps/encryption/l10n/id.json b/apps/encryption/l10n/id.json
index 536f4616ddc..e653db4f950 100644
--- a/apps/encryption/l10n/id.json
+++ b/apps/encryption/l10n/id.json
@@ -32,6 +32,7 @@
"The share will expire on %s." : "Pembagian akan berakhir pada %s.",
"Cheers!" : "Horee!",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>",
+ "Default encryption module" : "Modul bawaan enkripsi",
"Encrypt the home storage" : "Enkripsi penyimpanan rumah",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Mengaktifkan opsi ini akan mengenkripsi semua berkas yang disimpan pada penyimpanan utama, jika tidak diaktifkan maka hanya berkas pada penyimpanan eksternal saja yang akan dienkripsi.",
"Enable recovery key" : "Aktifkan kunci pemulihan",
diff --git a/apps/encryption/l10n/sv.js b/apps/encryption/l10n/sv.js
index 0b8530bf006..2a5893af8bf 100644
--- a/apps/encryption/l10n/sv.js
+++ b/apps/encryption/l10n/sv.js
@@ -34,7 +34,7 @@ OC.L10N.register(
"The share will expire on %s." : "Utdelningen kommer att upphöra %s.",
"Cheers!" : "Ha de fint!",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hallå där, <br> Administratören aktiverade serverkryptering. Alla dina filer har blivit krypterade med lösenordet: <strong>%s</ strong>. <br> Gå till i din profil för att ändra krypteringslösenordet till ditt egna lösenord. Ange lösenordet ovan som \"Gammalt lösenord\" och ange sedan ditt egna lösenord.<br>",
- "Default encryption module" : "Standard krypteringsfunktion",
+ "Default encryption module" : "Krypteringsfunktion",
"Encrypt the home storage" : "Kryptera alla filer i molnet",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aktivering av det här alternativet krypterar alla filer som är lagrade på huvudlagringsplatsen, annars kommer bara filer på extern lagringsplats att krypteras",
"Enable recovery key" : "Aktivera återställningsnyckel",
@@ -47,7 +47,7 @@ OC.L10N.register(
"New recovery key password" : "Nytt lösenord",
"Repeat new recovery key password" : "Repetera lösenord",
"Change Password" : "Byt lösenord",
- "Basic encryption module" : "Krypteringsmodul",
+ "Basic encryption module" : "Kryptering",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen",
"Your private key password no longer matches your log-in password." : "Ditt lösenord för din privata nyckel matchar inte längre ditt inloggningslösenord.",
"Set your old private key password to your current log-in password:" : "Sätt ditt gamla privatnyckellösenord till ditt aktuella inloggningslösenord:",
diff --git a/apps/encryption/l10n/sv.json b/apps/encryption/l10n/sv.json
index 976336ae068..f0e64f2c807 100644
--- a/apps/encryption/l10n/sv.json
+++ b/apps/encryption/l10n/sv.json
@@ -32,7 +32,7 @@
"The share will expire on %s." : "Utdelningen kommer att upphöra %s.",
"Cheers!" : "Ha de fint!",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hallå där, <br> Administratören aktiverade serverkryptering. Alla dina filer har blivit krypterade med lösenordet: <strong>%s</ strong>. <br> Gå till i din profil för att ändra krypteringslösenordet till ditt egna lösenord. Ange lösenordet ovan som \"Gammalt lösenord\" och ange sedan ditt egna lösenord.<br>",
- "Default encryption module" : "Standard krypteringsfunktion",
+ "Default encryption module" : "Krypteringsfunktion",
"Encrypt the home storage" : "Kryptera alla filer i molnet",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aktivering av det här alternativet krypterar alla filer som är lagrade på huvudlagringsplatsen, annars kommer bara filer på extern lagringsplats att krypteras",
"Enable recovery key" : "Aktivera återställningsnyckel",
@@ -45,7 +45,7 @@
"New recovery key password" : "Nytt lösenord",
"Repeat new recovery key password" : "Repetera lösenord",
"Change Password" : "Byt lösenord",
- "Basic encryption module" : "Krypteringsmodul",
+ "Basic encryption module" : "Kryptering",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen",
"Your private key password no longer matches your log-in password." : "Ditt lösenord för din privata nyckel matchar inte längre ditt inloggningslösenord.",
"Set your old private key password to your current log-in password:" : "Sätt ditt gamla privatnyckellösenord till ditt aktuella inloggningslösenord:",
diff --git a/apps/federatedfilesharing/l10n/fr.js b/apps/federatedfilesharing/l10n/fr.js
index 4a1d7767965..092b87fb9e8 100644
--- a/apps/federatedfilesharing/l10n/fr.js
+++ b/apps/federatedfilesharing/l10n/fr.js
@@ -29,7 +29,7 @@ OC.L10N.register(
"File is already shared with %s" : "Le fichier est déjà partagé avec %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Le partage de %s a échoué, impossible de trouver %s, le serveur est peut-être momentanément injoignable ou utilise un certificat auto-signé.",
"Could not find share" : "Impossible de trouver le partage",
- "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
"You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vous avez reçu {share} comme partage distant de la part de {user} (de la part de {behalf})",
"You received \"%3$s\" as a remote share from %1$s" : "Vous avez reçu \"%3$s\" comme partage distant de %1$s",
"You received {share} as a remote share from {user}" : "Vous avez reçu {share} comme partage distant de la part de {user}",
diff --git a/apps/federatedfilesharing/l10n/fr.json b/apps/federatedfilesharing/l10n/fr.json
index 670a3bd043c..f90620b940d 100644
--- a/apps/federatedfilesharing/l10n/fr.json
+++ b/apps/federatedfilesharing/l10n/fr.json
@@ -27,7 +27,7 @@
"File is already shared with %s" : "Le fichier est déjà partagé avec %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Le partage de %s a échoué, impossible de trouver %s, le serveur est peut-être momentanément injoignable ou utilise un certificat auto-signé.",
"Could not find share" : "Impossible de trouver le partage",
- "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
"You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vous avez reçu {share} comme partage distant de la part de {user} (de la part de {behalf})",
"You received \"%3$s\" as a remote share from %1$s" : "Vous avez reçu \"%3$s\" comme partage distant de %1$s",
"You received {share} as a remote share from {user}" : "Vous avez reçu {share} comme partage distant de la part de {user}",
diff --git a/apps/federatedfilesharing/l10n/sq.js b/apps/federatedfilesharing/l10n/sq.js
index ae500204ce4..4e55e171b81 100644
--- a/apps/federatedfilesharing/l10n/sq.js
+++ b/apps/federatedfilesharing/l10n/sq.js
@@ -2,13 +2,26 @@ OC.L10N.register(
"federatedfilesharing",
{
"Federated sharing" : "Ndarje e federuar",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Doni që të shtoni ndarjen në remote {name} nga {owner}@{remote}?",
+ "Remote share" : "Ndarje në largësi",
+ "Remote share password" : "Fjalëkalim ndarjeje të largët",
+ "Cancel" : "Anulo",
+ "Copy" : "Kopjo",
+ "Copied!" : "U kopjua!",
+ "Not supported!" : "Nuk mbështetet!",
+ "Press ⌘-C to copy." : "Shtyp ⌘-C për të kopjuar.",
+ "Press Ctrl-C to copy." : "Shtypni Ctrl-C për të kopjuar",
"Invalid Federated Cloud ID" : "ID Federated Cloud e pavlefshme",
+ "Server to server sharing is not enabled on this server" : "Shpërndarja server në server nuk është e mundësuar në këtë server",
+ "Storage not valid" : "memorja nuk është e vlefshme",
+ "Couldn't add remote share" : "Nuk mund të shtohet ndarja në largësi",
"Sharing %s failed, because this item is already shared with %s" : "Ndarja për %s dështoi, ngaqë ky objekt është ndarë një herë me %s",
"Not allowed to create a federated share with the same user" : "S’i lejohet të krijojë një ndarje të federuar me të njëjtin përdorues",
- "File is already shared with %s" : "Kartelë e ndarë tashmë me %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
- "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s (në emër të %2$s)",
- "You received \"/%3$s\" as a remote share from %1$s" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s",
+ "File is already shared with %s" : "Skedari është ndarë tashmë me %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Ndarja e %s dështoi, nuk mund të gjendet %s, ndoshta serveri është për momentin i paaksesueshëm ose përdor një çertifikatë të vetë-nënshkruar",
+ "Could not find share" : "Nuk mund të gjenim ndarjen",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Ju ",
+ "You received \"%3$s\" as a remote share from %1$s" : "Ju pranuat \"%3$s\" si një shpërndarje në distancë nga %1$s",
"Accept" : "Pranoje",
"Decline" : "Hidhe poshtë",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Ndani me mua përmes ID-së time për #Nextcloud Federated Cloud, shihni %s",
@@ -22,6 +35,9 @@ OC.L10N.register(
"Share it:" : "Ndajeni:",
"Add to your website" : "Shtojeni te sajti juaj",
"Share with me via Nextcloud" : "Ndani me mua përmes Nextcloud-it",
- "HTML Code:" : "Kod HTML:"
+ "HTML Code:" : "Kod HTML:",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
+ "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s (në emër të %2$s)",
+ "You received \"/%3$s\" as a remote share from %1$s" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federatedfilesharing/l10n/sq.json b/apps/federatedfilesharing/l10n/sq.json
index 57961c2c2ae..07858aa6434 100644
--- a/apps/federatedfilesharing/l10n/sq.json
+++ b/apps/federatedfilesharing/l10n/sq.json
@@ -1,12 +1,25 @@
{ "translations": {
"Federated sharing" : "Ndarje e federuar",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Doni që të shtoni ndarjen në remote {name} nga {owner}@{remote}?",
+ "Remote share" : "Ndarje në largësi",
+ "Remote share password" : "Fjalëkalim ndarjeje të largët",
+ "Cancel" : "Anulo",
+ "Copy" : "Kopjo",
+ "Copied!" : "U kopjua!",
+ "Not supported!" : "Nuk mbështetet!",
+ "Press ⌘-C to copy." : "Shtyp ⌘-C për të kopjuar.",
+ "Press Ctrl-C to copy." : "Shtypni Ctrl-C për të kopjuar",
"Invalid Federated Cloud ID" : "ID Federated Cloud e pavlefshme",
+ "Server to server sharing is not enabled on this server" : "Shpërndarja server në server nuk është e mundësuar në këtë server",
+ "Storage not valid" : "memorja nuk është e vlefshme",
+ "Couldn't add remote share" : "Nuk mund të shtohet ndarja në largësi",
"Sharing %s failed, because this item is already shared with %s" : "Ndarja për %s dështoi, ngaqë ky objekt është ndarë një herë me %s",
"Not allowed to create a federated share with the same user" : "S’i lejohet të krijojë një ndarje të federuar me të njëjtin përdorues",
- "File is already shared with %s" : "Kartelë e ndarë tashmë me %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
- "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s (në emër të %2$s)",
- "You received \"/%3$s\" as a remote share from %1$s" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s",
+ "File is already shared with %s" : "Skedari është ndarë tashmë me %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Ndarja e %s dështoi, nuk mund të gjendet %s, ndoshta serveri është për momentin i paaksesueshëm ose përdor një çertifikatë të vetë-nënshkruar",
+ "Could not find share" : "Nuk mund të gjenim ndarjen",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Ju ",
+ "You received \"%3$s\" as a remote share from %1$s" : "Ju pranuat \"%3$s\" si një shpërndarje në distancë nga %1$s",
"Accept" : "Pranoje",
"Decline" : "Hidhe poshtë",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Ndani me mua përmes ID-së time për #Nextcloud Federated Cloud, shihni %s",
@@ -20,6 +33,9 @@
"Share it:" : "Ndajeni:",
"Add to your website" : "Shtojeni te sajti juaj",
"Share with me via Nextcloud" : "Ndani me mua përmes Nextcloud-it",
- "HTML Code:" : "Kod HTML:"
+ "HTML Code:" : "Kod HTML:",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
+ "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s (në emër të %2$s)",
+ "You received \"/%3$s\" as a remote share from %1$s" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
index 55329338a92..3c399268124 100644
--- a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
+++ b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
@@ -25,18 +25,24 @@
namespace OCA\FederatedFileSharing\Controller;
+use OC\Files\Filesystem;
use OC\HintException;
+use OC\Share\Helper;
use OCA\FederatedFileSharing\AddressHandler;
+use OCA\FederatedFileSharing\DiscoveryManager;
use OCA\FederatedFileSharing\FederatedShareProvider;
+use OCA\Files_Sharing\External\Manager;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse;
+use OCP\Files\StorageInvalidException;
use OCP\Http\Client\IClientService;
use OCP\IL10N;
use OCP\IRequest;
use OCP\ISession;
use OCP\IUserSession;
use OCP\Share\IManager;
+use OCP\Util;
/**
* Class MountPublicLinkController
@@ -107,6 +113,7 @@ class MountPublicLinkController extends Controller {
*
* @NoCSRFRequired
* @PublicPage
+ * @BruteForceProtection publicLink2FederatedShare
*
* @param string $shareWith
* @param string $token
@@ -226,22 +233,22 @@ class MountPublicLinkController extends Controller {
private function legacyMountPublicLink($token, $remote, $password, $name, $owner, $ownerDisplayName) {
// Check for invalid name
- if (!\OCP\Util::isValidFileName($name)) {
+ if (!Util::isValidFileName($name)) {
return new JSONResponse(['message' => $this->l->t('The mountpoint name contains invalid characters.')], Http::STATUS_BAD_REQUEST);
}
$currentUser = $this->userSession->getUser()->getUID();
$currentServer = $this->addressHandler->generateRemoteURL();
- if (\OC\Share\Helper::isSameUserOnSameServer($owner, $remote, $currentUser, $currentServer)) {
+ if (Helper::isSameUserOnSameServer($owner, $remote, $currentUser, $currentServer)) {
return new JSONResponse(['message' => $this->l->t('Not allowed to create a federated share with the owner.')], Http::STATUS_BAD_REQUEST);
}
- $discoveryManager = new \OCA\FederatedFileSharing\DiscoveryManager(
+ $discoveryManager = new DiscoveryManager(
\OC::$server->getMemCacheFactory(),
\OC::$server->getHTTPClientService()
);
- $externalManager = new \OCA\Files_Sharing\External\Manager(
+ $externalManager = new Manager(
\OC::$server->getDatabaseConnection(),
- \OC\Files\Filesystem::getMountManager(),
- \OC\Files\Filesystem::getLoader(),
+ Filesystem::getMountManager(),
+ Filesystem::getLoader(),
\OC::$server->getHTTPClientService(),
\OC::$server->getNotificationManager(),
$discoveryManager,
@@ -249,7 +256,8 @@ class MountPublicLinkController extends Controller {
);
// check for ssl cert
- if (substr($remote, 0, 5) === 'https') {
+
+ if (strpos($remote, 'https') === 0) {
try {
$client = $this->clientService->newClient();
$client->get($remote, [
@@ -268,19 +276,19 @@ class MountPublicLinkController extends Controller {
try {
// check if storage exists
$storage->checkStorageAvailability();
- } catch (\OCP\Files\StorageInvalidException $e) {
+ } catch (StorageInvalidException $e) {
// note: checkStorageAvailability will already remove the invalid share
- \OCP\Util::writeLog(
+ Util::writeLog(
'federatedfilesharing',
'Invalid remote storage: ' . get_class($e) . ': ' . $e->getMessage(),
- \OCP\Util::DEBUG
+ Util::DEBUG
);
return new JSONResponse(['message' => $this->l->t('Could not authenticate to remote share, password might be wrong')], Http::STATUS_BAD_REQUEST);
} catch (\Exception $e) {
- \OCP\Util::writeLog(
+ Util::writeLog(
'federatedfilesharing',
'Invalid remote storage: ' . get_class($e) . ': ' . $e->getMessage(),
- \OCP\Util::DEBUG
+ Util::DEBUG
);
$externalManager->removeShare($mount->getMountPoint());
return new JSONResponse(['message' => $this->l->t('Storage not valid')], Http::STATUS_BAD_REQUEST);
@@ -295,27 +303,27 @@ class MountPublicLinkController extends Controller {
'legacyMount' => '1'
]
);
- } catch (\OCP\Files\StorageInvalidException $e) {
- \OCP\Util::writeLog(
+ } catch (StorageInvalidException $e) {
+ Util::writeLog(
'federatedfilesharing',
'Invalid remote storage: ' . get_class($e) . ': ' . $e->getMessage(),
- \OCP\Util::DEBUG
+ Util::DEBUG
);
return new JSONResponse(['message' => $this->l->t('Storage not valid')], Http::STATUS_BAD_REQUEST);
} catch (\Exception $e) {
- \OCP\Util::writeLog(
+ Util::writeLog(
'federatedfilesharing',
'Invalid remote storage: ' . get_class($e) . ': ' . $e->getMessage(),
- \OCP\Util::DEBUG
+ Util::DEBUG
);
return new JSONResponse(['message' => $this->l->t('Couldn\'t add remote share')], Http::STATUS_BAD_REQUEST);
}
} else {
$externalManager->removeShare($mount->getMountPoint());
- \OCP\Util::writeLog(
+ Util::writeLog(
'federatedfilesharing',
'Couldn\'t add remote share',
- \OCP\Util::DEBUG
+ Util::DEBUG
);
return new JSONResponse(['message' => $this->l->t('Couldn\'t add remote share')], Http::STATUS_BAD_REQUEST);
}
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 7956ef5c6ae..05b8e58cbe4 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -768,46 +768,20 @@ html.ie8 #controls .button.new {
}
.newFileMenu {
- width: 200px;
- margin-left: -56px;
- margin-top: 25px;
+ font-weight: 300;
+ top: 100%;
+ margin-top: 4px;
+ min-width: 100px;
+ margin-left: 7px;
z-index: 1001;
}
-.newFileMenu .menuitem {
- white-space: nowrap;
- overflow: hidden;
-}
-.newFileMenu.popovermenu a.menuitem,
-.newFileMenu.popovermenu label.menuitem,
-.newFileMenu.popovermenu .menuitem {
- padding: 0;
- margin: 0;
-}
-
-.newFileMenu.popovermenu a.menuitem.active {
- opacity: 1;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- filter: alpha(opacity=100);
-}
-
-.newFileMenu.bubble:after {
- left: 75px;
- right: auto;
-}
-.newFileMenu.bubble:before {
- left: 75px;
- right: auto;
-}
-
.newFileMenu .filenameform {
display: inline-block;
}
.newFileMenu .filenameform input {
- width: 100%;
- box-sizing: border-box;
- margin: -2px 0;
+ margin: 2px 0;
}
#fileList .popovermenu .action {
@@ -835,6 +809,9 @@ html.ie8 #controls .button.new {
height: 15px;
}
+.app-files .actions .button.new {
+ position: relative;
+}
.app-files .actions .button.new .icon {
margin-bottom: 2px;
}
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index cd0eb390ee3..3a59da53517 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -1180,7 +1180,7 @@
var innernameSpan = $('<span></span>').addClass('innernametext').text(basename);
if (path && path !== '/') {
- var conflictingItems = this.$fileList.find('tr[data-file="' + name.replace( /(:|\.|\[|\]|,|=)/g, "\\$1") + '"]');
+ var conflictingItems = this.$fileList.find('tr[data-file="' + this._jqSelEscape(name) + '"]');
if (conflictingItems.length !== 0) {
if (conflictingItems.length === 1) {
// Update the path on the first conflicting item
@@ -1266,6 +1266,14 @@
return tr;
},
+ /* escape a selector expression for jQuery */
+ _jqSelEscape: function (expression) {
+ if (expression) {
+ return expression.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]^`{|}~]/g, '\\$&');
+ }
+ return null;
+ },
+
/**
* Adds an entry to the files array and also into the DOM
* in a sorted manner.
@@ -2470,6 +2478,11 @@
if (!_.isArray(file)) {
file = [file];
}
+ if (file.length === 1) {
+ _.defer(function() {
+ this.showDetailsView(file[0]);
+ }.bind(this));
+ }
this.highlightFiles(file, function($tr) {
$tr.addClass('searchresult');
$tr.one('hover', function() {
@@ -2943,7 +2956,7 @@
this._newFileMenu = new OCA.Files.NewFileMenu({
fileList: this
});
- $('body').append(this._newFileMenu.$el);
+ $('.actions').append(this._newFileMenu.$el);
}
this._newFileMenu.showAt($target);
diff --git a/apps/files/js/newfilemenu.js b/apps/files/js/newfilemenu.js
index 75c4cdcc0ba..e4023c62342 100644
--- a/apps/files/js/newfilemenu.js
+++ b/apps/files/js/newfilemenu.js
@@ -38,7 +38,8 @@
*/
var NewFileMenu = OC.Backbone.View.extend({
tagName: 'div',
- className: 'newFileMenu popovermenu bubble hidden open menu',
+ // Menu is opened by default because it's rendered on "add-button" click
+ className: 'newFileMenu popovermenu bubble menu open menu-left',
events: {
'click .menuitem': '_onClickAction'
@@ -235,13 +236,6 @@
*/
showAt: function($target) {
this.render();
- var targetOffset = $target.offset();
- this.$el.css({
- left: targetOffset.left,
- top: targetOffset.top + $target.height()
- });
- this.$el.removeClass('hidden');
-
OC.showMenu(null, this.$el);
}
});
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index afd1f8142c2..0127235b605 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -76,7 +76,7 @@ OC.L10N.register(
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Du hast {file} zu deinen Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten entfernt",
"File changes" : "Dateiänderungen",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
@@ -98,7 +98,7 @@ OC.L10N.register(
"You moved {oldfile} to {newfile}" : "Du hast {oldfile} nach {newfile} verschoben",
"{user} moved {oldfile} to {newfile}" : "{user} hat {oldfile} nach {newfile} verschoben",
"A file has been added to or removed from your <strong>favorites</strong>" : "Eine Datei wurde deinen <strong>Favoriten</strong> hinzugefügt oder daraus entfernt",
- "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei oder Ordner wurden <strong>geändert</strong> oder <strong>umbenannt</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei / Ordner wurde <strong>geändert</strong> oder <strong>umbenannt</strong>",
"A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Neue Datei oder Verzeichnis wurde <strong>gelöscht</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf deine <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>",
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index 30a2730b47c..d64a9eb0850 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -74,7 +74,7 @@
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Du hast {file} zu deinen Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten entfernt",
"File changes" : "Dateiänderungen",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
@@ -96,7 +96,7 @@
"You moved {oldfile} to {newfile}" : "Du hast {oldfile} nach {newfile} verschoben",
"{user} moved {oldfile} to {newfile}" : "{user} hat {oldfile} nach {newfile} verschoben",
"A file has been added to or removed from your <strong>favorites</strong>" : "Eine Datei wurde deinen <strong>Favoriten</strong> hinzugefügt oder daraus entfernt",
- "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei oder Ordner wurden <strong>geändert</strong> oder <strong>umbenannt</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei / Ordner wurde <strong>geändert</strong> oder <strong>umbenannt</strong>",
"A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Neue Datei oder Verzeichnis wurde <strong>gelöscht</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf deine <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>",
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index 9ef2aed2802..17961360c98 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -76,7 +76,7 @@ OC.L10N.register(
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Sie haben {file} zu Ihren Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten entfernt",
"File changes" : "Datei geändert",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index 3466d7ebd9a..926434c523c 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -74,7 +74,7 @@
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Sie haben {file} zu Ihren Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten entfernt",
"File changes" : "Datei geändert",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index dcd0928ca25..8d110fe5f3f 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -1,24 +1,24 @@
OC.L10N.register(
"files",
{
- "Storage is temporarily not available" : "Le support de stockage est temporairement non disponible",
- "Storage invalid" : "Support de stockage non valable",
+ "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible",
+ "Storage invalid" : "Support de stockage invalide",
"Unknown error" : "Erreur inconnue ",
"Files" : "Fichiers",
"All files" : "Tous les fichiers",
"Recent" : "Récent",
- "File could not be found" : "Ce fichier n'a pu être trouvé.",
+ "File could not be found" : "Fichier introuvable",
"Home" : "Mes fichiers",
"Close" : "Fermer",
"Favorites" : "Favoris",
"Could not create folder \"{dir}\"" : "Impossible de créer le dossier \"{dir}\"",
- "Upload cancelled." : "Envoi annulé.",
+ "Upload cancelled." : "Téléversement annulé.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible d'envoyer {filename} car il s'agit d'un répertoire ou d'un fichier de taille nulle",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace libre insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles",
"Target folder \"{dir}\" does not exist any more" : "Le dossier cible « {dir} » n'existe plus",
- "Not enough free space" : "Pas assez d'espace disponible",
+ "Not enough free space" : "Espace disponible insuffisant",
"Uploading..." : "Téléversement en cours…",
- "..." : "...",
+ "..." : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} sur {totalSize} ({bitrate})",
"Actions" : "Actions",
"Download" : "Télécharger",
@@ -34,7 +34,7 @@ OC.L10N.register(
"Pending" : "En attente",
"Unable to determine date" : "Impossible de déterminer la date",
"This operation is forbidden" : "Cette opération est interdite",
- "This directory is unavailable, please check the logs or contact the administrator" : "Ce répertoire n'est pas disponible. Consultez les logs ou contactez votre administrateur",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ce dossier n'est pas disponible. Consultez les logs ou contactez votre administrateur",
"Could not move \"{file}\", target exists" : "Impossible de déplacer \"{file}\", la cible existe",
"Could not move \"{file}\"" : "Impossible de déplacer \"{file}\"",
"{newName} already exists" : "{newName} existe déjà",
@@ -52,18 +52,18 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["%n dossier","%n dossiers"],
"_%n file_::_%n files_" : ["%n fichier","%n fichiers"],
"{dirs} and {files}" : "{dirs} et {files}",
- "_including %n hidden_::_including %n hidden_" : ["inclus %n caché","inclus %n cachés"],
- "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici",
+ "_including %n hidden_::_including %n hidden_" : ["inclus %n masqué","inclus %n masqués"],
+ "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'envoyer ou de créer des fichiers ici",
"_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"],
"New" : "Nouveau",
"\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.",
"File name cannot be empty." : "Le nom de fichier ne peut être vide.",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisés!",
- "Your storage is full, files can not be updated or synced anymore!" : "Votre espage de stockage est plein, les fichiers ne peuvent plus être ajoutés ou synchronisés !",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !",
+ "Your storage is full, files can not be updated or synced anymore!" : "Votre espace de stockage est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"],
- "View in folder" : "Voir dans le dossier",
+ "View in folder" : "Afficher dans le dossier",
"Path" : "Chemin",
"_%n byte_::_%n bytes_" : ["%n octet","%n octets"],
"Favorited" : "Marqué comme favori",
@@ -71,13 +71,13 @@ OC.L10N.register(
"Copy local link" : "Copier le dossier local",
"Folder" : "Dossier",
"New folder" : "Nouveau dossier",
- "Upload" : "Chargement",
+ "Upload" : "Téléverser",
"An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes",
"Added to favorites" : "Ajouté aux favoris",
"Removed from favorites" : "Retiré des favoris",
"You added {file} to your favorites" : "Vous avez ajouté {file} à vos favoris",
"You removed {file} from your favorites" : "Vous avez retiré {file} de vos favoris",
- "File changes" : "Modifications du fichier",
+ "File changes" : "Modifications de fichiers",
"Created by {user}" : "Créé par {user}",
"Changed by {user}" : "Modifié par {user}",
"Deleted by {user}" : "Supprimé par {user}",
@@ -107,9 +107,9 @@ OC.L10N.register(
"File handling" : "Gestion de fichiers",
"Maximum upload size" : "Taille max. d'envoi",
"max. possible: " : "Max. possible :",
- "Save" : "Sauvegarder",
+ "Save" : "Enregistrer",
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Avec PHP-FPM il peut se passer jusqu'à 5 minutes pour que les changements soient appliqués.",
- "Missing permissions to edit from here." : "Manque de permissions pour éditer à partir d'ici.",
+ "Missing permissions to edit from here." : "Permissions insuffisantes pour modifier à partir d'ici.",
"Settings" : "Paramètres",
"Show hidden files" : "Afficher les fichiers cachés",
"WebDAV" : "WebDAV",
@@ -129,21 +129,21 @@ OC.L10N.register(
"Deleted files" : "Fichiers supprimés",
"Text file" : "Fichier texte",
"New text file.txt" : "Nouveau fichier texte.txt",
- "Storage not available" : "Support de stockage non disponible",
+ "Storage not available" : "Espace de stockage non disponible",
"Unable to set upload directory." : "Impossible de définir le dossier de destination.",
"Invalid Token" : "Jeton non valide",
"No file was uploaded. Unknown error" : "Aucun fichier n'a été envoyé. Erreur inconnue",
- "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès.",
+ "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Le fichier envoyé dépasse l'instruction upload_max_filesize située dans le fichier php.ini :",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML.",
"The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé.",
"No file was uploaded" : "Pas de fichier envoyé.",
"Missing a temporary folder" : "Absence de dossier temporaire",
"Failed to write to disk" : "Erreur d'écriture sur le disque",
- "Not enough storage available" : "Trop peu d'espace de stockage disponible",
+ "Not enough storage available" : "Espace disponible insuffisant",
"The target folder has been moved or deleted." : "Le dossier cible a été déplacé ou supprimé.",
- "Upload failed. Could not find uploaded file" : "L'envoi a échoué. Impossible de trouver le fichier envoyé.",
- "Upload failed. Could not get file info." : "L'envoi a échoué. Impossible d'obtenir les informations du fichier.",
+ "Upload failed. Could not find uploaded file" : "Le téléversement a échoué. Impossible de trouver le fichier envoyé.",
+ "Upload failed. Could not get file info." : "Le téléversement a échoué. Impossible d'obtenir les informations du fichier.",
"Invalid directory." : "Dossier non valide.",
"Total file size {size1} exceeds upload limit {size2}" : "La taille totale du fichier {size1} excède la taille maximale d'envoi {size2}",
"Error uploading file \"{fileName}\": {message}" : "Erreur lors de l'envoi du fichier \"{fileName}\" : {message}",
@@ -155,10 +155,10 @@ OC.L10N.register(
"{seconds} second{plural_s} left" : "{seconds} seconde{plural_s} restante{plural_s}",
"{seconds}s" : "{seconds}s",
"Any moment now..." : "D'ici quelques instants…",
- "Soon..." : "Bientôt...",
+ "Soon..." : "Bientôt…",
"File upload is in progress. Leaving the page now will cancel the upload." : "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.",
"No entries in this folder match '{filter}'" : "Aucune entrée de ce dossier ne correspond à '{filter}'",
- "Local link" : "Dossier local",
+ "Local link" : "Lien local",
"{newname} already exists" : "{newname} existe déjà",
"A file or folder has been <strong>changed</strong>" : "Un fichier ou un répertoire a été <strong>modifié</strong>",
"A file or folder has been <strong>deleted</strong>" : "Un fichier ou un répertoire a été <strong>supprimé</strong>",
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index e990093bbbb..7538abdba42 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -1,22 +1,22 @@
{ "translations": {
- "Storage is temporarily not available" : "Le support de stockage est temporairement non disponible",
- "Storage invalid" : "Support de stockage non valable",
+ "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible",
+ "Storage invalid" : "Support de stockage invalide",
"Unknown error" : "Erreur inconnue ",
"Files" : "Fichiers",
"All files" : "Tous les fichiers",
"Recent" : "Récent",
- "File could not be found" : "Ce fichier n'a pu être trouvé.",
+ "File could not be found" : "Fichier introuvable",
"Home" : "Mes fichiers",
"Close" : "Fermer",
"Favorites" : "Favoris",
"Could not create folder \"{dir}\"" : "Impossible de créer le dossier \"{dir}\"",
- "Upload cancelled." : "Envoi annulé.",
+ "Upload cancelled." : "Téléversement annulé.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible d'envoyer {filename} car il s'agit d'un répertoire ou d'un fichier de taille nulle",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace libre insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles",
"Target folder \"{dir}\" does not exist any more" : "Le dossier cible « {dir} » n'existe plus",
- "Not enough free space" : "Pas assez d'espace disponible",
+ "Not enough free space" : "Espace disponible insuffisant",
"Uploading..." : "Téléversement en cours…",
- "..." : "...",
+ "..." : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} sur {totalSize} ({bitrate})",
"Actions" : "Actions",
"Download" : "Télécharger",
@@ -32,7 +32,7 @@
"Pending" : "En attente",
"Unable to determine date" : "Impossible de déterminer la date",
"This operation is forbidden" : "Cette opération est interdite",
- "This directory is unavailable, please check the logs or contact the administrator" : "Ce répertoire n'est pas disponible. Consultez les logs ou contactez votre administrateur",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ce dossier n'est pas disponible. Consultez les logs ou contactez votre administrateur",
"Could not move \"{file}\", target exists" : "Impossible de déplacer \"{file}\", la cible existe",
"Could not move \"{file}\"" : "Impossible de déplacer \"{file}\"",
"{newName} already exists" : "{newName} existe déjà",
@@ -50,18 +50,18 @@
"_%n folder_::_%n folders_" : ["%n dossier","%n dossiers"],
"_%n file_::_%n files_" : ["%n fichier","%n fichiers"],
"{dirs} and {files}" : "{dirs} et {files}",
- "_including %n hidden_::_including %n hidden_" : ["inclus %n caché","inclus %n cachés"],
- "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici",
+ "_including %n hidden_::_including %n hidden_" : ["inclus %n masqué","inclus %n masqués"],
+ "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'envoyer ou de créer des fichiers ici",
"_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"],
"New" : "Nouveau",
"\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.",
"File name cannot be empty." : "Le nom de fichier ne peut être vide.",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisés!",
- "Your storage is full, files can not be updated or synced anymore!" : "Votre espage de stockage est plein, les fichiers ne peuvent plus être ajoutés ou synchronisés !",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !",
+ "Your storage is full, files can not be updated or synced anymore!" : "Votre espace de stockage est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"],
- "View in folder" : "Voir dans le dossier",
+ "View in folder" : "Afficher dans le dossier",
"Path" : "Chemin",
"_%n byte_::_%n bytes_" : ["%n octet","%n octets"],
"Favorited" : "Marqué comme favori",
@@ -69,13 +69,13 @@
"Copy local link" : "Copier le dossier local",
"Folder" : "Dossier",
"New folder" : "Nouveau dossier",
- "Upload" : "Chargement",
+ "Upload" : "Téléverser",
"An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes",
"Added to favorites" : "Ajouté aux favoris",
"Removed from favorites" : "Retiré des favoris",
"You added {file} to your favorites" : "Vous avez ajouté {file} à vos favoris",
"You removed {file} from your favorites" : "Vous avez retiré {file} de vos favoris",
- "File changes" : "Modifications du fichier",
+ "File changes" : "Modifications de fichiers",
"Created by {user}" : "Créé par {user}",
"Changed by {user}" : "Modifié par {user}",
"Deleted by {user}" : "Supprimé par {user}",
@@ -105,9 +105,9 @@
"File handling" : "Gestion de fichiers",
"Maximum upload size" : "Taille max. d'envoi",
"max. possible: " : "Max. possible :",
- "Save" : "Sauvegarder",
+ "Save" : "Enregistrer",
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Avec PHP-FPM il peut se passer jusqu'à 5 minutes pour que les changements soient appliqués.",
- "Missing permissions to edit from here." : "Manque de permissions pour éditer à partir d'ici.",
+ "Missing permissions to edit from here." : "Permissions insuffisantes pour modifier à partir d'ici.",
"Settings" : "Paramètres",
"Show hidden files" : "Afficher les fichiers cachés",
"WebDAV" : "WebDAV",
@@ -127,21 +127,21 @@
"Deleted files" : "Fichiers supprimés",
"Text file" : "Fichier texte",
"New text file.txt" : "Nouveau fichier texte.txt",
- "Storage not available" : "Support de stockage non disponible",
+ "Storage not available" : "Espace de stockage non disponible",
"Unable to set upload directory." : "Impossible de définir le dossier de destination.",
"Invalid Token" : "Jeton non valide",
"No file was uploaded. Unknown error" : "Aucun fichier n'a été envoyé. Erreur inconnue",
- "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès.",
+ "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Le fichier envoyé dépasse l'instruction upload_max_filesize située dans le fichier php.ini :",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML.",
"The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé.",
"No file was uploaded" : "Pas de fichier envoyé.",
"Missing a temporary folder" : "Absence de dossier temporaire",
"Failed to write to disk" : "Erreur d'écriture sur le disque",
- "Not enough storage available" : "Trop peu d'espace de stockage disponible",
+ "Not enough storage available" : "Espace disponible insuffisant",
"The target folder has been moved or deleted." : "Le dossier cible a été déplacé ou supprimé.",
- "Upload failed. Could not find uploaded file" : "L'envoi a échoué. Impossible de trouver le fichier envoyé.",
- "Upload failed. Could not get file info." : "L'envoi a échoué. Impossible d'obtenir les informations du fichier.",
+ "Upload failed. Could not find uploaded file" : "Le téléversement a échoué. Impossible de trouver le fichier envoyé.",
+ "Upload failed. Could not get file info." : "Le téléversement a échoué. Impossible d'obtenir les informations du fichier.",
"Invalid directory." : "Dossier non valide.",
"Total file size {size1} exceeds upload limit {size2}" : "La taille totale du fichier {size1} excède la taille maximale d'envoi {size2}",
"Error uploading file \"{fileName}\": {message}" : "Erreur lors de l'envoi du fichier \"{fileName}\" : {message}",
@@ -153,10 +153,10 @@
"{seconds} second{plural_s} left" : "{seconds} seconde{plural_s} restante{plural_s}",
"{seconds}s" : "{seconds}s",
"Any moment now..." : "D'ici quelques instants…",
- "Soon..." : "Bientôt...",
+ "Soon..." : "Bientôt…",
"File upload is in progress. Leaving the page now will cancel the upload." : "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.",
"No entries in this folder match '{filter}'" : "Aucune entrée de ce dossier ne correspond à '{filter}'",
- "Local link" : "Dossier local",
+ "Local link" : "Lien local",
"{newname} already exists" : "{newname} existe déjà",
"A file or folder has been <strong>changed</strong>" : "Un fichier ou un répertoire a été <strong>modifié</strong>",
"A file or folder has been <strong>deleted</strong>" : "Un fichier ou un répertoire a été <strong>supprimé</strong>",
diff --git a/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js
index 13504df625a..a78413903b8 100644
--- a/apps/files/l10n/hu_HU.js
+++ b/apps/files/l10n/hu_HU.js
@@ -28,6 +28,7 @@ OC.L10N.register(
"Delete" : "Törlés",
"Disconnect storage" : "Tároló leválasztása",
"Unshare" : "A megosztás visszavonása",
+ "Could not load info for file \"{file}\"" : "Nem sikerült betölteni az információs fájl ehhez: \"{file}\"",
"Details" : "Részletek",
"Select" : "Kiválaszt",
"Pending" : "Folyamatban",
diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json
index 2eab8691b64..f0606da7774 100644
--- a/apps/files/l10n/hu_HU.json
+++ b/apps/files/l10n/hu_HU.json
@@ -26,6 +26,7 @@
"Delete" : "Törlés",
"Disconnect storage" : "Tároló leválasztása",
"Unshare" : "A megosztás visszavonása",
+ "Could not load info for file \"{file}\"" : "Nem sikerült betölteni az információs fájl ehhez: \"{file}\"",
"Details" : "Részletek",
"Select" : "Kiválaszt",
"Pending" : "Folyamatban",
diff --git a/apps/files/l10n/lv.js b/apps/files/l10n/lv.js
index 80e636ff5f0..442f6fc35d6 100644
--- a/apps/files/l10n/lv.js
+++ b/apps/files/l10n/lv.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"files",
{
+ "Storage is temporarily not available" : "Glabātuve īslaicīgi nav pieejama",
"Storage invalid" : "Nepareiza glabātuve",
"Unknown error" : "Nezināma kļūda",
"Files" : "Datnes",
@@ -64,6 +65,7 @@ OC.L10N.register(
"New folder" : "Jauna mape",
"Upload" : "Augšupielādēt",
"An error occurred while trying to update the tags" : "Notika kļūda atjaunojot atzīmi",
+ "You restored {file}" : "Tu atjaunoji {file}",
"A new file or folder has been <strong>created</strong>" : "<strong>Izveidota</strong> jauna datne vai mape",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitēt ziņojumus par jūsu <strong>iecienīto datņu</strong> izveidošanu un izmaiņām <em>(tikai datu straumei)</em>",
"Upload (max. %s)" : "Augšupielādēt (maks. %s)",
@@ -85,6 +87,10 @@ OC.L10N.register(
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Augšupielādējamās datnes pārsniedz servera pieļaujamo datņu augšupielādes apjomu",
"No favorites" : "Nav favorītu",
"Files and folders you mark as favorite will show up here" : "Datnes un mapes, ko atzīmēsiet kā favorītus, tiks rādīti šeit",
+ "Shared with you" : "Koplietots ar tevi",
+ "Shared by link" : "Koplietots ar saiti",
+ "Tags" : "Atzīmes",
+ "Deleted files" : "Dzēstās datnes",
"Text file" : "Teksta datne",
"New text file.txt" : "Jauna teksta datne.txt",
"Storage not available" : "Glabātuve nav pieejama",
diff --git a/apps/files/l10n/lv.json b/apps/files/l10n/lv.json
index d88665b810f..f109de5242f 100644
--- a/apps/files/l10n/lv.json
+++ b/apps/files/l10n/lv.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Storage is temporarily not available" : "Glabātuve īslaicīgi nav pieejama",
"Storage invalid" : "Nepareiza glabātuve",
"Unknown error" : "Nezināma kļūda",
"Files" : "Datnes",
@@ -62,6 +63,7 @@
"New folder" : "Jauna mape",
"Upload" : "Augšupielādēt",
"An error occurred while trying to update the tags" : "Notika kļūda atjaunojot atzīmi",
+ "You restored {file}" : "Tu atjaunoji {file}",
"A new file or folder has been <strong>created</strong>" : "<strong>Izveidota</strong> jauna datne vai mape",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitēt ziņojumus par jūsu <strong>iecienīto datņu</strong> izveidošanu un izmaiņām <em>(tikai datu straumei)</em>",
"Upload (max. %s)" : "Augšupielādēt (maks. %s)",
@@ -83,6 +85,10 @@
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Augšupielādējamās datnes pārsniedz servera pieļaujamo datņu augšupielādes apjomu",
"No favorites" : "Nav favorītu",
"Files and folders you mark as favorite will show up here" : "Datnes un mapes, ko atzīmēsiet kā favorītus, tiks rādīti šeit",
+ "Shared with you" : "Koplietots ar tevi",
+ "Shared by link" : "Koplietots ar saiti",
+ "Tags" : "Atzīmes",
+ "Deleted files" : "Dzēstās datnes",
"Text file" : "Teksta datne",
"New text file.txt" : "Jauna teksta datne.txt",
"Storage not available" : "Glabātuve nav pieejama",
diff --git a/apps/files/l10n/nb_NO.js b/apps/files/l10n/nb_NO.js
index 63164a86d65..e0f02a26713 100644
--- a/apps/files/l10n/nb_NO.js
+++ b/apps/files/l10n/nb_NO.js
@@ -28,6 +28,7 @@ OC.L10N.register(
"Delete" : "Slett",
"Disconnect storage" : "Koble fra lagring",
"Unshare" : "Avslutt deling",
+ "Could not load info for file \"{file}\"" : "Klarte ikke å hente informasjon som filen \"{file}\"",
"Details" : "Detaljer",
"Select" : "Velg",
"Pending" : "Venter",
diff --git a/apps/files/l10n/nb_NO.json b/apps/files/l10n/nb_NO.json
index 1d6d0ab113d..216f9a56368 100644
--- a/apps/files/l10n/nb_NO.json
+++ b/apps/files/l10n/nb_NO.json
@@ -26,6 +26,7 @@
"Delete" : "Slett",
"Disconnect storage" : "Koble fra lagring",
"Unshare" : "Avslutt deling",
+ "Could not load info for file \"{file}\"" : "Klarte ikke å hente informasjon som filen \"{file}\"",
"Details" : "Detaljer",
"Select" : "Velg",
"Pending" : "Venter",
diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js
index 0a8e66d18c9..e13409dfc91 100644
--- a/apps/files/l10n/zh_CN.js
+++ b/apps/files/l10n/zh_CN.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"files",
{
- "Storage is temporarily not available" : "存储暂时不可用",
+ "Storage is temporarily not available" : "存储空间暂时不可用",
"Storage invalid" : "存储空间无效",
"Unknown error" : "未知错误",
"Files" : "文件",
@@ -13,8 +13,8 @@ OC.L10N.register(
"Favorites" : "收藏",
"Could not create folder \"{dir}\"" : "无法创建文件夹 \"{dir}\"",
"Upload cancelled." : "上传已取消",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "无法上传文件 {filename}, 因为其是一个目录或者长度为0字节",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足, 您上传的文件大小为 {size1}, 但可用空间仅剩 {size2}",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "无法上传文件 {filename},因为它是一个目录或者是大小为 0 的空文件",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足,您上传的文件大小为 {size1} ,但可用空间仅剩 {size2}",
"Target folder \"{dir}\" does not exist any more" : "目标目录 \"{dir}\" 不存在",
"Not enough free space" : "可用空间不足",
"Uploading..." : "正在上传...",
@@ -28,7 +28,7 @@ OC.L10N.register(
"Delete" : "删除",
"Disconnect storage" : "断开存储链接",
"Unshare" : "取消共享",
- "Could not load info for file \"{file}\"" : "无法加载 \"{file}\" 文件信息",
+ "Could not load info for file \"{file}\"" : "无法加载文件 \"{file}\" 的信息",
"Details" : "详细信息",
"Select" : "选择",
"Pending" : "等待",
@@ -42,15 +42,15 @@ OC.L10N.register(
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "文件夹 \"{dir}\" 中已经存在 \"{targetName}\". 请尝试其他的名称.",
"Could not rename \"{fileName}\"" : "无法重命名 \"{fileName}\"",
"Could not create file \"{file}\"" : "无法创建文件 \"{file}\"",
- "Could not create file \"{file}\" because it already exists" : "无法创建文件 \"{file}\", 因为其已经存在",
- "Could not create folder \"{dir}\" because it already exists" : "无法创建文件夹 \"{dir}\", 因为其已经存在",
+ "Could not create file \"{file}\" because it already exists" : "无法创建文件 \"{file}\", 因为其已经存在",
+ "Could not create folder \"{dir}\" because it already exists" : "无法创建文件夹 \"{dir}\", 因为其已经存在",
"Error deleting file \"{fileName}\"." : "删除文件 \"{fileName}\" 时出错.",
"No search results in other folders for '{tag}{filter}{endtag}'" : " 在其他文件夹未找到包含 '{tag}{filter}{endtag}' 标签的结果",
"Name" : "名称",
"Size" : "大小",
"Modified" : "修改日期",
"_%n folder_::_%n folders_" : ["%n 个文件夹"],
- "_%n file_::_%n files_" : ["%n个文件"],
+ "_%n file_::_%n files_" : ["%n 个文件"],
"{dirs} and {files}" : "{dirs} 和 {files}",
"_including %n hidden_::_including %n hidden_" : ["包括 %n 个隐藏文件"],
"You don’t have permission to upload or create files here" : "您没有权限在此上传或创建文件",
@@ -131,7 +131,7 @@ OC.L10N.register(
"New text file.txt" : "创建文本文件 .txt",
"Storage not available" : "存储空间不可用",
"Unable to set upload directory." : "无法设置上传文件夹.",
- "Invalid Token" : "无效密匙",
+ "Invalid Token" : "无效密钥",
"No file was uploaded. Unknown error" : "没有文件被上传. 未知错误",
"There is no error, the file uploaded with success" : "文件上传成功, 没有任何错误",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "上传文件的大小已超过 php.ini 中 upload_max_filesize 设置的值",
diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json
index 26ed83ac15c..9de26c4ee29 100644
--- a/apps/files/l10n/zh_CN.json
+++ b/apps/files/l10n/zh_CN.json
@@ -1,5 +1,5 @@
{ "translations": {
- "Storage is temporarily not available" : "存储暂时不可用",
+ "Storage is temporarily not available" : "存储空间暂时不可用",
"Storage invalid" : "存储空间无效",
"Unknown error" : "未知错误",
"Files" : "文件",
@@ -11,8 +11,8 @@
"Favorites" : "收藏",
"Could not create folder \"{dir}\"" : "无法创建文件夹 \"{dir}\"",
"Upload cancelled." : "上传已取消",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "无法上传文件 {filename}, 因为其是一个目录或者长度为0字节",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足, 您上传的文件大小为 {size1}, 但可用空间仅剩 {size2}",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "无法上传文件 {filename},因为它是一个目录或者是大小为 0 的空文件",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足,您上传的文件大小为 {size1} ,但可用空间仅剩 {size2}",
"Target folder \"{dir}\" does not exist any more" : "目标目录 \"{dir}\" 不存在",
"Not enough free space" : "可用空间不足",
"Uploading..." : "正在上传...",
@@ -26,7 +26,7 @@
"Delete" : "删除",
"Disconnect storage" : "断开存储链接",
"Unshare" : "取消共享",
- "Could not load info for file \"{file}\"" : "无法加载 \"{file}\" 文件信息",
+ "Could not load info for file \"{file}\"" : "无法加载文件 \"{file}\" 的信息",
"Details" : "详细信息",
"Select" : "选择",
"Pending" : "等待",
@@ -40,15 +40,15 @@
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "文件夹 \"{dir}\" 中已经存在 \"{targetName}\". 请尝试其他的名称.",
"Could not rename \"{fileName}\"" : "无法重命名 \"{fileName}\"",
"Could not create file \"{file}\"" : "无法创建文件 \"{file}\"",
- "Could not create file \"{file}\" because it already exists" : "无法创建文件 \"{file}\", 因为其已经存在",
- "Could not create folder \"{dir}\" because it already exists" : "无法创建文件夹 \"{dir}\", 因为其已经存在",
+ "Could not create file \"{file}\" because it already exists" : "无法创建文件 \"{file}\", 因为其已经存在",
+ "Could not create folder \"{dir}\" because it already exists" : "无法创建文件夹 \"{dir}\", 因为其已经存在",
"Error deleting file \"{fileName}\"." : "删除文件 \"{fileName}\" 时出错.",
"No search results in other folders for '{tag}{filter}{endtag}'" : " 在其他文件夹未找到包含 '{tag}{filter}{endtag}' 标签的结果",
"Name" : "名称",
"Size" : "大小",
"Modified" : "修改日期",
"_%n folder_::_%n folders_" : ["%n 个文件夹"],
- "_%n file_::_%n files_" : ["%n个文件"],
+ "_%n file_::_%n files_" : ["%n 个文件"],
"{dirs} and {files}" : "{dirs} 和 {files}",
"_including %n hidden_::_including %n hidden_" : ["包括 %n 个隐藏文件"],
"You don’t have permission to upload or create files here" : "您没有权限在此上传或创建文件",
@@ -129,7 +129,7 @@
"New text file.txt" : "创建文本文件 .txt",
"Storage not available" : "存储空间不可用",
"Unable to set upload directory." : "无法设置上传文件夹.",
- "Invalid Token" : "无效密匙",
+ "Invalid Token" : "无效密钥",
"No file was uploaded. Unknown error" : "没有文件被上传. 未知错误",
"There is no error, the file uploaded with success" : "文件上传成功, 没有任何错误",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "上传文件的大小已超过 php.ini 中 upload_max_filesize 设置的值",
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml
index b2f73dce621..8482b8b25ed 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -3,9 +3,9 @@
<id>files_external</id>
<name>External storage support</name>
<description>
- This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, Google Drive, Dropbox, other ownCloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root ownCloud directory, which they can access and use like any other ownCloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.
-
- External storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation.
+This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, Google Drive, Dropbox, other ownCloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root ownCloud directory, which they can access and use like any other ownCloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.
+
+External storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation.
</description>
<licence>AGPL</licence>
<author>Robin Appelman, Michael Gapczynski, Vincent Petry</author>
diff --git a/apps/files_external/img/app-dark.svg b/apps/files_external/img/app-dark.svg
new file mode 100644
index 00000000000..157af238eeb
--- /dev/null
+++ b/apps/files_external/img/app-dark.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" viewBox="0 0 32 32"><path d="M14.903 3.237l4.76 4.515-7.14 6.772 4.76 4.514 7.142-6.772 4.762 4.515V3.237H14.904zM5.38 5.495C4.063 5.495 3 6.5 3 7.752V25.81c0 1.25 1.062 2.257 2.38 2.257h19.045c1.318 0 2.38-1.007 2.38-2.257v-6.772l-2.38-2.257v9.03H5.38V7.752h9.523l-2.38-2.258H5.38z" fill="#000"/></svg>
diff --git a/apps/files_external/lib/Settings/Section.php b/apps/files_external/lib/Settings/Section.php
index 4b4bac93d29..4829bb60d39 100644
--- a/apps/files_external/lib/Settings/Section.php
+++ b/apps/files_external/lib/Settings/Section.php
@@ -24,13 +24,21 @@
namespace OCA\Files_External\Settings;
use OCP\IL10N;
-use OCP\Settings\ISection;
+use OCP\IURLGenerator;
+use OCP\Settings\IIconSection;
-class Section implements ISection {
+class Section implements IIconSection {
/** @var IL10N */
private $l;
+ /** @var IURLGenerator */
+ private $url;
- public function __construct(IL10N $l) {
+ /**
+ * @param IURLGenerator $url
+ * @param IL10N $l
+ */
+ public function __construct(IURLGenerator $url, IL10N $l) {
+ $this->url = $url;
$this->l = $l;
}
@@ -64,4 +72,11 @@ class Section implements ISection {
public function getPriority() {
return 10;
}
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getIcon() {
+ return $this->url->imagePath('files_external', 'app-dark.svg');
+ }
}
diff --git a/apps/files_external/tests/Settings/SectionTest.php b/apps/files_external/tests/Settings/SectionTest.php
index b5dfb28b382..ee501b1270b 100644
--- a/apps/files_external/tests/Settings/SectionTest.php
+++ b/apps/files_external/tests/Settings/SectionTest.php
@@ -25,19 +25,24 @@ namespace OCA\Files_External\Tests\Settings;
use OCA\Files_External\Settings\Section;
use OCP\IL10N;
+use OCP\IURLGenerator;
use Test\TestCase;
class SectionTest extends TestCase {
/** @var IL10N */
private $l;
+ /** @var IURLGenerator */
+ private $urlGenerator;
/** @var Section */
private $section;
public function setUp() {
parent::setUp();
+ $this->urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')->disableOriginalConstructor()->getMock();
$this->l = $this->getMockBuilder('\OCP\IL10N')->disableOriginalConstructor()->getMock();
$this->section = new Section(
+ $this->urlGenerator,
$this->l
);
}
diff --git a/apps/files_sharing/css/authenticate.css b/apps/files_sharing/css/authenticate.css
index 55a40cf508d..16687916ac4 100644
--- a/apps/files_sharing/css/authenticate.css
+++ b/apps/files_sharing/css/authenticate.css
@@ -9,12 +9,8 @@ input[type='submit'] {
margin: 6px;
}
-#body-login input[type='submit'] {
- position: absolute;
- top: 0;
- border: none;
-}
-
fieldset > p {
position: relative;
+ display: flex;
+ align-items: center;
}
diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css
index 94183cf0057..9c8c4a66630 100644
--- a/apps/files_sharing/css/public.css
+++ b/apps/files_sharing/css/public.css
@@ -107,29 +107,33 @@ thead {
max-width: 90%;
}
+/* header buttons */
+#details {
+ display: inline-flex;
+}
+#details button,
+#details input,
+#details .button {
+ margin: 0 5px;
+ line-height: normal;
+}
+#details button:hover,
+#details input:hover,
+#details .button:hover {
+ /* No */
+ border-color: rgba(0,0,0,0.3) !important;
+}
+
/* within #save */
#save .save-form {
position: relative;
}
#remote_address {
- margin: 0;
- width: 130px;
- height: 14px;
- padding: 6px;
- padding-right: 24px;
-}
+ width: 200px;
-.ie8 #remote_address {
- padding-right: 30px;
-}
-
-#save #save-button,
-#save #save-button-confirm {
- margin: 0 5px;
- height: 28px;
- padding-bottom: 4px;
- line-height: 14px;
+ margin-right: 4px;
+ height: 31px;
}
#save-button-confirm {
@@ -137,31 +141,9 @@ thead {
background-color: transparent;
border: none;
margin: 2px 4px !important;
- right: 0;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- filter: alpha(opacity=50);
- opacity: .5;
-}
-
-.ie8 #save-button-confirm {
- margin: 2px 0 !important;
-}
-
-#save-button-confirm:disabled,
-#save-button-confirm:disabled:hover,
-#save-button-confirm:disabled:focus {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
- filter: alpha(opacity=20);
- opacity: .2;
- cursor: default;
-}
-
-#save-button-confirm:hover,
-#save-button-confirm:focus {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- filter: alpha(opacity=100);
- opacity: 1;
- cursor: pointer;
+ right: 7px;
+ top: -8px;
+ height: 30px;
}
#public-upload .avatardiv {
diff --git a/apps/files_sharing/css/sharetabview.css b/apps/files_sharing/css/sharetabview.css
index 936e1af246a..979ef01c030 100644
--- a/apps/files_sharing/css/sharetabview.css
+++ b/apps/files_sharing/css/sharetabview.css
@@ -51,10 +51,9 @@
padding: 0 0 16px;
}
-#shareWithList li {
+#shareWithList > li {
padding-top: 5px;
padding-bottom: 5px;
- font-weight: bold;
white-space: normal;
display: inline-flex;
align-items: center;
@@ -70,6 +69,11 @@
opacity: .5;
}
+#shareWithList .shareOption.menuitem > label:before {
+ /* Checkboxes positionning */
+ margin: 0 12px !important;
+}
+
#shareWithList .unshare {
padding: 1px 6px;
vertical-align: text-bottom;
@@ -78,12 +82,6 @@
vertical-align: text-top;
}
-#shareWithList .unshare .icon-delete {
- padding-right: 4px;
- background-position-x: 0;
- display: inline-block;
-}
-
#shareWithList .sharingOptionsGroup .popovermenu:after {
right: 3px;
}
@@ -100,7 +98,7 @@
overflow: hidden;
vertical-align: middle;
}
-#shareWithList li label {
+#shareWithList li .sharingOptionsGroup > .shareOption > label {
padding: 6px;
margin-right: 8px;
vertical-align: text-top;
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index 0045c7156d2..ad3ef856f23 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -259,7 +259,7 @@ OCA.Sharing.PublicApp = {
$('.save-form').submit(function (event) {
event.preventDefault();
- var remote = $(this).find('input[type="text"]').val();
+ var remote = $(this).find('input[type="email"]').val();
var token = $('#sharingToken').val();
var owner = $('#save').data('owner');
var ownerDisplayName = $('#save').data('owner-display-name');
diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js
index be95fb9cbca..3505b3b07ab 100644
--- a/apps/files_sharing/l10n/de.js
+++ b/apps/files_sharing/l10n/de.js
@@ -91,9 +91,9 @@ OC.L10N.register(
"{actor} shared {file} with you" : "{actor} hat {file} mit dir geteilt",
"%2$s removed you from %1$s" : "Du wurdest durch %2$s von %1$s entfernt",
"{actor} removed you from {file}" : "Du wurdest durch {actor} von {file} entfernt",
- "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Eine Datei oder ein Ordner der per E-Mail oder öffentlich geteilt ist wurde <strong>heruntergeladen</strong>",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Öffentlich oder per E-Mail geteilte Datei / Ordner wurde <strong>heruntergeladen</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt",
- "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurden <strong>geteilt</strong>",
"Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht",
"could not delete share" : "Freigabe konnte nicht gelöscht werden",
"Could not delete share" : "Freigabe konnte nicht gelöscht werden",
@@ -138,7 +138,7 @@ OC.L10N.register(
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files…" : "Dateien werden hochgeladen...",
"Uploaded files:" : "Hochgeladene Dateien: ",
- "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentlich geteilte Datei / Ordner wurde <strong>heruntergeladen</strong>",
"You received a new remote share %2$s from %1$s" : "Du hast eine neue Remotefreigabe %2$s von %1$s erhalten",
"You received a new remote share from %s" : "Du hast eine neue Remotefreigabe von %s erhalten",
"%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert",
diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json
index fe75914067f..95c3f5dd72e 100644
--- a/apps/files_sharing/l10n/de.json
+++ b/apps/files_sharing/l10n/de.json
@@ -89,9 +89,9 @@
"{actor} shared {file} with you" : "{actor} hat {file} mit dir geteilt",
"%2$s removed you from %1$s" : "Du wurdest durch %2$s von %1$s entfernt",
"{actor} removed you from {file}" : "Du wurdest durch {actor} von {file} entfernt",
- "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Eine Datei oder ein Ordner der per E-Mail oder öffentlich geteilt ist wurde <strong>heruntergeladen</strong>",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Öffentlich oder per E-Mail geteilte Datei / Ordner wurde <strong>heruntergeladen</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt",
- "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurden <strong>geteilt</strong>",
"Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht",
"could not delete share" : "Freigabe konnte nicht gelöscht werden",
"Could not delete share" : "Freigabe konnte nicht gelöscht werden",
@@ -136,7 +136,7 @@
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files…" : "Dateien werden hochgeladen...",
"Uploaded files:" : "Hochgeladene Dateien: ",
- "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentlich geteilte Datei / Ordner wurde <strong>heruntergeladen</strong>",
"You received a new remote share %2$s from %1$s" : "Du hast eine neue Remotefreigabe %2$s von %1$s erhalten",
"You received a new remote share from %s" : "Du hast eine neue Remotefreigabe von %s erhalten",
"%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert",
diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js
index bbfdae37c58..01bcc8ccbe8 100644
--- a/apps/files_sharing/l10n/de_DE.js
+++ b/apps/files_sharing/l10n/de_DE.js
@@ -97,7 +97,7 @@ OC.L10N.register(
"Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht",
"could not delete share" : "Freigabe konnte nicht gelöscht werden",
"Could not delete share" : "Freigabe konnte nicht gelöscht werden",
- "Please specify a file or folder path" : "Bitte geben Sie eine Datei oder Ordner an",
+ "Please specify a file or folder path" : "Bitte Datei oder Ordner-Pfad eingeben",
"Wrong path, file/folder doesn't exist" : "Falscher Pfad, Datei/Verzeichnis existiert nicht",
"Could not create share" : "Freigabe konnte nicht erstellt werden",
"invalid permissions" : "Ungültige Berechtigung",
diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json
index e62bb0d816f..5c5d6b815b7 100644
--- a/apps/files_sharing/l10n/de_DE.json
+++ b/apps/files_sharing/l10n/de_DE.json
@@ -95,7 +95,7 @@
"Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht",
"could not delete share" : "Freigabe konnte nicht gelöscht werden",
"Could not delete share" : "Freigabe konnte nicht gelöscht werden",
- "Please specify a file or folder path" : "Bitte geben Sie eine Datei oder Ordner an",
+ "Please specify a file or folder path" : "Bitte Datei oder Ordner-Pfad eingeben",
"Wrong path, file/folder doesn't exist" : "Falscher Pfad, Datei/Verzeichnis existiert nicht",
"Could not create share" : "Freigabe konnte nicht erstellt werden",
"invalid permissions" : "Ungültige Berechtigung",
diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js
index ce7f6154280..095483d6167 100644
--- a/apps/files_sharing/l10n/fr.js
+++ b/apps/files_sharing/l10n/fr.js
@@ -13,7 +13,7 @@ OC.L10N.register(
"You can upload into this folder" : "Vous pouvez téléverser dans ce dossier",
"No compatible server found at {remote}" : "Aucun serveur compatible trouvé sur {remote}",
"Invalid server URL" : "URL serveur invalide",
- "Failed to add the public link to your Nextcloud" : "Echec de l'ajout du lien public à votre Nextcloud",
+ "Failed to add the public link to your Nextcloud" : "Échec de l'ajout du lien public à votre Nextcloud",
"Share" : "Partager",
"No expiration date set" : "Aucune date d'expiration définie",
"Shared by" : "Partagé par",
diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json
index ba1cc34f790..024e9f7983d 100644
--- a/apps/files_sharing/l10n/fr.json
+++ b/apps/files_sharing/l10n/fr.json
@@ -11,7 +11,7 @@
"You can upload into this folder" : "Vous pouvez téléverser dans ce dossier",
"No compatible server found at {remote}" : "Aucun serveur compatible trouvé sur {remote}",
"Invalid server URL" : "URL serveur invalide",
- "Failed to add the public link to your Nextcloud" : "Echec de l'ajout du lien public à votre Nextcloud",
+ "Failed to add the public link to your Nextcloud" : "Échec de l'ajout du lien public à votre Nextcloud",
"Share" : "Partager",
"No expiration date set" : "Aucune date d'expiration définie",
"Shared by" : "Partagé par",
diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js
index e1bec669533..0e2339b6581 100644
--- a/apps/files_sharing/l10n/pl.js
+++ b/apps/files_sharing/l10n/pl.js
@@ -1,55 +1,168 @@
OC.L10N.register(
"files_sharing",
{
- "Server to server sharing is not enabled on this server" : "Współdzielenie między serwerami nie jest uruchomione na tym serwerze",
- "The mountpoint name contains invalid characters." : "Nazwa zamontowanego zasobu zawiera niedozwolone znaki.",
- "Invalid or untrusted SSL certificate" : "Niewłaściwy lub niezaufany certyfikat SSL",
- "Could not authenticate to remote share, password might be wrong" : "Nie można zalogować do zdalnego zasobu, hasło może być niepoprawne",
- "Storage not valid" : "Zasób nie jest prawidłowy",
- "Couldn't add remote share" : "Nie można dodać zdalnego folderu",
"Shared with you" : "Współdzielony z Tobą",
"Shared with others" : "Współdzielony z innymi",
"Shared by link" : "Współdzielony linkiem",
"Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego",
"Files and folders others share with you will show up here" : "Pliki i foldery udostępnione Tobie przez innych wyświetlą się tutaj",
"Nothing shared yet" : "Jeszcze nic nie udostępniono",
- "Files and folders you share will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
+ "Files and folders you share will show up here" : "Pliki i foldery, które udostępniasz, pokażą się tutaj",
"No shared links" : "Brak udostępnionych odnośników",
- "Files and folders you share by link will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?",
- "Remote share" : "Zdalny zasób",
- "Remote share password" : "Hasło do zdalnego zasobu",
- "Cancel" : "Anuluj",
- "Add remote share" : "Dodaj zdalny zasób",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nie znaleziono instalacji ownCloud (w wersji 7 lub nowszej) na {remote}",
- "Invalid ownCloud url" : "Błędny adres URL",
+ "Files and folders you share by link will show up here" : "Pliki i foldery, które udostępniasz, pokażą się tutaj",
+ "You can upload into this folder" : "Możesz przesłać do tego folderu",
+ "No compatible server found at {remote}" : "Nie znaleziono kompatybilnego serwera na {remote}",
+ "Invalid server URL" : "Błędny adres serwera",
+ "Failed to add the public link to your Nextcloud" : "Nie udało się dodać linku do publicznego Nextcloud",
+ "Share" : "Udostępnij",
+ "No expiration date set" : "Nie ustawiono daty wygaśnięcia",
"Shared by" : "Udostępniane przez",
"Sharing" : "Udostępnianie",
+ "File shares" : "Udziały",
+ "Downloaded via public link" : "Pobierane poprzez link publiczny",
+ "Downloaded by %1$s" : "Pobierane przez %1$s",
+ "Downloaded by {email}" : "Pobierane przez {email}",
+ "%1$s downloaded via public link" : "%1$s pobierane za pośrednictwem łącza publicznego",
+ "{file} downloaded via public link" : "{file} pobierane za pośrednictwem łącza publicznego",
+ "%1$s downloaded %2$s" : "%1$s pobierane %2$s",
+ "{email} downloaded {file}" : "{email} pobierane {file}",
+ "Shared with group %1$s" : "Udostępnione grupie %1$s",
+ "Shared with group {group}" : "Udostępnione grupie {group}",
+ "Removed share for group %1$s" : "Zakończono udostępnianie grupie %1$s",
+ "Removed share for group {group}" : "Zakończono udostępnianie grupie {group}",
+ "%2$s shared with group %1$s" : "%2$s jest udostępniane grupie %1$s",
+ "{actor} shared with group {group}" : "{actor} udostępnił grupie {group}",
+ "%2$s removed share for group %1$s" : "%2$s zakończył udostępnianie grupie %1$s",
+ "{actor} removed share for group {group}" : "{actor} zakończył udostępnianie grupie {group}",
+ "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s",
+ "You shared {file} with group {group}" : "Udostępniasz {file} grupie {group}",
+ "You removed group %2$s from %1$s" : "Usunąłeś grupę %2$s z %1$s",
+ "You removed group {group} from {file}" : "Usunąłeś grupę {group} z {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s udostępnił %1$s grupie %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} udostępnił {file} grupie {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s usunął grupę %2$s z %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} usunął grupę {group} z {file}",
+ "Shared as public link" : "Udostępnione jako publiczny link",
+ "Removed public link" : "Usunięto link publiczny",
+ "%1$s shared as public link" : "%1$s udostępnione jako publiczny link",
+ "{actor} shared as public link" : "{actor} udostępniony jako publiczny link",
+ "%1$s removed public link" : "%1$s usunąłeś publiczny link",
+ "{actor} removed public link" : "{actor} usunął publiczny link",
+ "You shared %1$s as public link" : "Udostępniasz %1$s jako publiczny link",
+ "You shared {file} as public link" : "Udostępniasz {file} jako publiczny link",
+ "You removed public link for %1$s" : "Usuwasz link publiczny dla %1$s",
+ "You removed public link for {file}" : "Usuwasz link publiczny dla {file}",
+ "%2$s shared %1$s as public link" : "%2$s udostępnił %1$s jako publiczne łącze",
+ "{actor} shared {file} as public link" : "{actor} udostępnił {file} jako publiczne łącze",
+ "%2$s removed public link for %1$s" : "%2$s usunął publiczne łącze do %1$s",
+ "{actor} removed public link for {file}" : "{actor} usunął publiczne łącze do {file}",
+ "%1$s accepted the remote share" : "%1$s zaakceptował zdalny udział",
+ "{user} accepted the remote share" : "{user} zaakceptował zdalny udział",
+ "%1$s declined the remote share" : "%1$s odrzucił zdalny udział",
+ "{user} declined the remote share" : "{user} odrzucił zdalny udział",
+ "You received a new remote share %1$s from %2$s" : "Otrzymałeś nowy zdalny udział %1$s od użytkownika %2$s",
+ "You received a new remote share {file} from {user}" : "Otrzymałeś nowy zdalny udział {file} od użytkownika {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s zaakceptował zdalny udział %1$s",
+ "{user} accepted the remote share of {file}" : "{user} zaakceptował zdalny udział {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s odrzucił zdalny udział %1$s",
+ "{user} declined the remote share of {file}" : "{user} odrzucił zadalny udział {file}",
+ "%2$s unshared %1$s from you" : "%2$s przestał ci udostępniać %1$s",
+ "{user} unshared {file} from you" : "{user} przestał ci udostępniać {file}",
+ "Shared with %1$s" : "Udostępnione %1$s",
+ "Shared with {user}" : "Udostępnione użytkownikowi {user}",
+ "Removed share for %1$s" : "Zakończono udostępnianie użytkownikowi %1$s",
+ "Removed share for {user}" : "Zakończono udostępnianie użytkownikowi {user}",
+ "%2$s shared with %1$s" : "%2$s udostępnia użytkownikowi %1$s",
+ "{actor} shared with {user}" : "{actor} udostępnia użytkownikowi {user}",
+ "%2$s removed share for %1$s" : "%2$s usuwa udostępnienie dla użytkownika %1$s",
+ "{actor} removed share for {user}" : "{actor} usuwa udostępnienie dla użytkownika {user}",
+ "Shared by %1$s" : "Udostępnione przez użytkownika %1$s",
+ "Shared by {actor}" : "Udostępnione przez użytkownika {actor}",
+ "%1$s removed share" : "%1$s usunął udostępnienie",
+ "{actor} removed share" : "{actor} usunął udostępnienie",
+ "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
+ "You shared {file} with {user}" : "Współdzielisz {file} z {user}",
+ "You removed %2$s from %1$s" : "Usunąłeś użytkownika %2$s z %1$s",
+ "You removed {user} from {file}" : "Usunąłeś użytkownika {user} z {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s udostępnił %1$s użytkownikowi %2$s",
+ "{actor} removed {user} from {file}" : "{actor} usunął użytkownika {user} z {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s usunął użytkownika %2$s z %1$s",
+ "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą",
+ "{actor} shared {file} with you" : "{actor} udostępnił ci {file}",
+ "%2$s removed you from %1$s" : "%2$s usunął cię z %1$s",
+ "{actor} removed you from {file}" : "{actor} usunął cie z {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Plik lub folder udostępniony za pomocą maila lub publicznego łącza został <strong>pobrany</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Plik lub folder został udostępniony z <strong>innego serwera</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>",
+ "Wrong share ID, share doesn't exist" : "Złe ID udziału, udział nie istnieje",
+ "could not delete share" : "nie można usunąć udział",
+ "Could not delete share" : "Nie można usunąć udział",
+ "Please specify a file or folder path" : "Proszę podać pliku lub ścieżkę do folderu",
+ "Wrong path, file/folder doesn't exist" : "Ścieżka nieprawidłowa, plik/folder nie istnieje",
+ "Could not create share" : "Nie można utworzyć udział",
+ "invalid permissions" : "nieprawidłowe uprawnienia",
+ "Please specify a valid user" : "Proszę podać poprawnego użytkownika",
+ "Group sharing is disabled by the administrator" : "Udostępnianie grupy zostało wyłączone przez administratora",
+ "Please specify a valid group" : "Proszę podać prawidłową grupę",
"Public link sharing is disabled by the administrator" : "Udostępnianie linków publicznych zostało zablokowane przez twojego administratora",
"Public upload disabled by the administrator" : "Publiczne wczytywanie zostało zablokowane przez twojego administratora",
"Public upload is only possible for publicly shared folders" : "Publiczne wczytywanie jest możliwe wyłącznie do katalogów publicznych",
- "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>",
- "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
- "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s",
- "You shared %1$s via link" : "Udostępniasz %1$s przez link",
- "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą",
- "%2$s removed the share for %1$s" : "%2$s usunął udział dla %1$s",
- "Shares" : "Udziały",
+ "Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty musi być YYYY-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Udostępnienie %s nie powiodło się ponieważ backend nie zezwala na udziały typu %s",
+ "Unknown share type" : "Nieznany typ udziału",
+ "Not a directory" : "Nie jest katalogiem",
+ "Could not lock path" : "Nie udało się zablokować ścieżki",
+ "Wrong or no update parameter given" : "Brakujący lub błędny parametr aktualizacji",
+ "Can't change permissions for public share links" : "Nie można zmienić uprawnień dla publicznych udziałów",
+ "Cannot increase permissions" : "Nie można zwiększyć uprawnień",
+ "%s is publicly shared" : "%s jest publicznie dostępny",
+ "Share API is disabled" : "API udostępniania jest wyłączone",
"This share is password-protected" : "Udział ten jest chroniony hasłem",
"The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.",
"Password" : "Hasło",
"No entries found in this folder" : "Brak wpisów w tym folderze",
"Name" : "Nazwa",
"Share time" : "Czas współdzielenia",
+ "Expiration date" : "Data wygaśnięcia",
"Sorry, this link doesn’t seem to work anymore." : "Przepraszamy ale wygląda na to, że ten link już nie działa.",
"Reasons might be:" : "Możliwe powody:",
"the item was removed" : "element został usunięty",
"the link expired" : "link wygasł",
"sharing is disabled" : "udostępnianie jest wyłączone",
"For more info, please ask the person who sent this link." : "Aby uzyskać więcej informacji proszę poprosić osobę, która wysłał ten link.",
- "Add to your ownCloud" : "Dodaj do twojego ownCloud",
+ "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
"Download" : "Pobierz",
"Download %s" : "Pobierz %s",
- "Direct link" : "Bezpośredni link"
+ "Direct link" : "Bezpośredni link",
+ "Upload files to %s" : "Prześlij pliki do %s",
+ "Select or drop files" : "Wybierz i upuść pliki",
+ "Uploading files…" : "Wysyłanie plików...",
+ "Uploaded files:" : "Wysłane pliki:",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Publicznie udostępniony plik lub katalog został <strong>pobrany</strong>",
+ "You received a new remote share %2$s from %1$s" : "Otrzymałeś nowy udział zdalny %2$s z %1$s",
+ "You received a new remote share from %s" : "Otrzymałeś nowy zdalny udział z %s",
+ "%1$s accepted remote share %2$s" : "%1$s zaakceptował zdalny udział %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odrzucił zdalny udział %2$s",
+ "%1$s unshared %2$s from you" : "%1$s zakończył udostępnianie Ci %2$s",
+ "Public shared folder %1$s was downloaded" : "Udostępniony publicznie folder %1$s został pobrany",
+ "Public shared file %1$s was downloaded" : "Udostępniony publicznie plik %1$s został pobrany",
+ "%2$s shared %1$s with %3$s" : "%2$s udostępnił %1$s użytkownikowi %3$s",
+ "You removed the share of %2$s for %1$s" : "Zakończyłeś udostępnianie %2$s użytkownikowi %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s zakończył udostępnianie %3$s użytkownikowi %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s udostępnił %1$s grupie %3$s",
+ "%2$s shared %1$s via link" : "%2$s udostępnił %1$s poprzez łącze",
+ "You shared %1$s via link" : "Udostępniasz %1$s przez link",
+ "Your public link for %1$s expired" : "Twoje publiczne łącze do %1$s wygasło",
+ "%2$s removed the share for %1$s" : "%2$s usunął udział dla %1$s",
+ "Shared with %2$s" : "Współdzielone z %2$s",
+ "Shared with %3$s by %2$s" : "Udostępniono użytkownikowi %3$s przez %2$s",
+ "Shared with group %2$s" : "Udostępniono grupie %2$s",
+ "Shared with group %3$s by %2$s" : "Udostępniono grupie %3$s przez użytkownika %2$s",
+ "Shared via link by %2$s" : "Udostępniono za pomocą łącza przez użytkownika %2$s",
+ "Shared via public link" : "Udostępniono przez publiczne łącze",
+ "%2$s removed public link" : "%2$s usunął publiczne łącze",
+ "Public link expired" : "Link publiczny wygasł",
+ "Shared by %2$s" : "Udostępniane przez %2$s",
+ "Shares" : "Udziały"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json
index 6190871b16f..955222647b3 100644
--- a/apps/files_sharing/l10n/pl.json
+++ b/apps/files_sharing/l10n/pl.json
@@ -1,53 +1,166 @@
{ "translations": {
- "Server to server sharing is not enabled on this server" : "Współdzielenie między serwerami nie jest uruchomione na tym serwerze",
- "The mountpoint name contains invalid characters." : "Nazwa zamontowanego zasobu zawiera niedozwolone znaki.",
- "Invalid or untrusted SSL certificate" : "Niewłaściwy lub niezaufany certyfikat SSL",
- "Could not authenticate to remote share, password might be wrong" : "Nie można zalogować do zdalnego zasobu, hasło może być niepoprawne",
- "Storage not valid" : "Zasób nie jest prawidłowy",
- "Couldn't add remote share" : "Nie można dodać zdalnego folderu",
"Shared with you" : "Współdzielony z Tobą",
"Shared with others" : "Współdzielony z innymi",
"Shared by link" : "Współdzielony linkiem",
"Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego",
"Files and folders others share with you will show up here" : "Pliki i foldery udostępnione Tobie przez innych wyświetlą się tutaj",
"Nothing shared yet" : "Jeszcze nic nie udostępniono",
- "Files and folders you share will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
+ "Files and folders you share will show up here" : "Pliki i foldery, które udostępniasz, pokażą się tutaj",
"No shared links" : "Brak udostępnionych odnośników",
- "Files and folders you share by link will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?",
- "Remote share" : "Zdalny zasób",
- "Remote share password" : "Hasło do zdalnego zasobu",
- "Cancel" : "Anuluj",
- "Add remote share" : "Dodaj zdalny zasób",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nie znaleziono instalacji ownCloud (w wersji 7 lub nowszej) na {remote}",
- "Invalid ownCloud url" : "Błędny adres URL",
+ "Files and folders you share by link will show up here" : "Pliki i foldery, które udostępniasz, pokażą się tutaj",
+ "You can upload into this folder" : "Możesz przesłać do tego folderu",
+ "No compatible server found at {remote}" : "Nie znaleziono kompatybilnego serwera na {remote}",
+ "Invalid server URL" : "Błędny adres serwera",
+ "Failed to add the public link to your Nextcloud" : "Nie udało się dodać linku do publicznego Nextcloud",
+ "Share" : "Udostępnij",
+ "No expiration date set" : "Nie ustawiono daty wygaśnięcia",
"Shared by" : "Udostępniane przez",
"Sharing" : "Udostępnianie",
+ "File shares" : "Udziały",
+ "Downloaded via public link" : "Pobierane poprzez link publiczny",
+ "Downloaded by %1$s" : "Pobierane przez %1$s",
+ "Downloaded by {email}" : "Pobierane przez {email}",
+ "%1$s downloaded via public link" : "%1$s pobierane za pośrednictwem łącza publicznego",
+ "{file} downloaded via public link" : "{file} pobierane za pośrednictwem łącza publicznego",
+ "%1$s downloaded %2$s" : "%1$s pobierane %2$s",
+ "{email} downloaded {file}" : "{email} pobierane {file}",
+ "Shared with group %1$s" : "Udostępnione grupie %1$s",
+ "Shared with group {group}" : "Udostępnione grupie {group}",
+ "Removed share for group %1$s" : "Zakończono udostępnianie grupie %1$s",
+ "Removed share for group {group}" : "Zakończono udostępnianie grupie {group}",
+ "%2$s shared with group %1$s" : "%2$s jest udostępniane grupie %1$s",
+ "{actor} shared with group {group}" : "{actor} udostępnił grupie {group}",
+ "%2$s removed share for group %1$s" : "%2$s zakończył udostępnianie grupie %1$s",
+ "{actor} removed share for group {group}" : "{actor} zakończył udostępnianie grupie {group}",
+ "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s",
+ "You shared {file} with group {group}" : "Udostępniasz {file} grupie {group}",
+ "You removed group %2$s from %1$s" : "Usunąłeś grupę %2$s z %1$s",
+ "You removed group {group} from {file}" : "Usunąłeś grupę {group} z {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s udostępnił %1$s grupie %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} udostępnił {file} grupie {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s usunął grupę %2$s z %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} usunął grupę {group} z {file}",
+ "Shared as public link" : "Udostępnione jako publiczny link",
+ "Removed public link" : "Usunięto link publiczny",
+ "%1$s shared as public link" : "%1$s udostępnione jako publiczny link",
+ "{actor} shared as public link" : "{actor} udostępniony jako publiczny link",
+ "%1$s removed public link" : "%1$s usunąłeś publiczny link",
+ "{actor} removed public link" : "{actor} usunął publiczny link",
+ "You shared %1$s as public link" : "Udostępniasz %1$s jako publiczny link",
+ "You shared {file} as public link" : "Udostępniasz {file} jako publiczny link",
+ "You removed public link for %1$s" : "Usuwasz link publiczny dla %1$s",
+ "You removed public link for {file}" : "Usuwasz link publiczny dla {file}",
+ "%2$s shared %1$s as public link" : "%2$s udostępnił %1$s jako publiczne łącze",
+ "{actor} shared {file} as public link" : "{actor} udostępnił {file} jako publiczne łącze",
+ "%2$s removed public link for %1$s" : "%2$s usunął publiczne łącze do %1$s",
+ "{actor} removed public link for {file}" : "{actor} usunął publiczne łącze do {file}",
+ "%1$s accepted the remote share" : "%1$s zaakceptował zdalny udział",
+ "{user} accepted the remote share" : "{user} zaakceptował zdalny udział",
+ "%1$s declined the remote share" : "%1$s odrzucił zdalny udział",
+ "{user} declined the remote share" : "{user} odrzucił zdalny udział",
+ "You received a new remote share %1$s from %2$s" : "Otrzymałeś nowy zdalny udział %1$s od użytkownika %2$s",
+ "You received a new remote share {file} from {user}" : "Otrzymałeś nowy zdalny udział {file} od użytkownika {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s zaakceptował zdalny udział %1$s",
+ "{user} accepted the remote share of {file}" : "{user} zaakceptował zdalny udział {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s odrzucił zdalny udział %1$s",
+ "{user} declined the remote share of {file}" : "{user} odrzucił zadalny udział {file}",
+ "%2$s unshared %1$s from you" : "%2$s przestał ci udostępniać %1$s",
+ "{user} unshared {file} from you" : "{user} przestał ci udostępniać {file}",
+ "Shared with %1$s" : "Udostępnione %1$s",
+ "Shared with {user}" : "Udostępnione użytkownikowi {user}",
+ "Removed share for %1$s" : "Zakończono udostępnianie użytkownikowi %1$s",
+ "Removed share for {user}" : "Zakończono udostępnianie użytkownikowi {user}",
+ "%2$s shared with %1$s" : "%2$s udostępnia użytkownikowi %1$s",
+ "{actor} shared with {user}" : "{actor} udostępnia użytkownikowi {user}",
+ "%2$s removed share for %1$s" : "%2$s usuwa udostępnienie dla użytkownika %1$s",
+ "{actor} removed share for {user}" : "{actor} usuwa udostępnienie dla użytkownika {user}",
+ "Shared by %1$s" : "Udostępnione przez użytkownika %1$s",
+ "Shared by {actor}" : "Udostępnione przez użytkownika {actor}",
+ "%1$s removed share" : "%1$s usunął udostępnienie",
+ "{actor} removed share" : "{actor} usunął udostępnienie",
+ "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
+ "You shared {file} with {user}" : "Współdzielisz {file} z {user}",
+ "You removed %2$s from %1$s" : "Usunąłeś użytkownika %2$s z %1$s",
+ "You removed {user} from {file}" : "Usunąłeś użytkownika {user} z {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s udostępnił %1$s użytkownikowi %2$s",
+ "{actor} removed {user} from {file}" : "{actor} usunął użytkownika {user} z {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s usunął użytkownika %2$s z %1$s",
+ "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą",
+ "{actor} shared {file} with you" : "{actor} udostępnił ci {file}",
+ "%2$s removed you from %1$s" : "%2$s usunął cię z %1$s",
+ "{actor} removed you from {file}" : "{actor} usunął cie z {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Plik lub folder udostępniony za pomocą maila lub publicznego łącza został <strong>pobrany</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Plik lub folder został udostępniony z <strong>innego serwera</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>",
+ "Wrong share ID, share doesn't exist" : "Złe ID udziału, udział nie istnieje",
+ "could not delete share" : "nie można usunąć udział",
+ "Could not delete share" : "Nie można usunąć udział",
+ "Please specify a file or folder path" : "Proszę podać pliku lub ścieżkę do folderu",
+ "Wrong path, file/folder doesn't exist" : "Ścieżka nieprawidłowa, plik/folder nie istnieje",
+ "Could not create share" : "Nie można utworzyć udział",
+ "invalid permissions" : "nieprawidłowe uprawnienia",
+ "Please specify a valid user" : "Proszę podać poprawnego użytkownika",
+ "Group sharing is disabled by the administrator" : "Udostępnianie grupy zostało wyłączone przez administratora",
+ "Please specify a valid group" : "Proszę podać prawidłową grupę",
"Public link sharing is disabled by the administrator" : "Udostępnianie linków publicznych zostało zablokowane przez twojego administratora",
"Public upload disabled by the administrator" : "Publiczne wczytywanie zostało zablokowane przez twojego administratora",
"Public upload is only possible for publicly shared folders" : "Publiczne wczytywanie jest możliwe wyłącznie do katalogów publicznych",
- "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>",
- "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
- "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s",
- "You shared %1$s via link" : "Udostępniasz %1$s przez link",
- "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą",
- "%2$s removed the share for %1$s" : "%2$s usunął udział dla %1$s",
- "Shares" : "Udziały",
+ "Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty musi być YYYY-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Udostępnienie %s nie powiodło się ponieważ backend nie zezwala na udziały typu %s",
+ "Unknown share type" : "Nieznany typ udziału",
+ "Not a directory" : "Nie jest katalogiem",
+ "Could not lock path" : "Nie udało się zablokować ścieżki",
+ "Wrong or no update parameter given" : "Brakujący lub błędny parametr aktualizacji",
+ "Can't change permissions for public share links" : "Nie można zmienić uprawnień dla publicznych udziałów",
+ "Cannot increase permissions" : "Nie można zwiększyć uprawnień",
+ "%s is publicly shared" : "%s jest publicznie dostępny",
+ "Share API is disabled" : "API udostępniania jest wyłączone",
"This share is password-protected" : "Udział ten jest chroniony hasłem",
"The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.",
"Password" : "Hasło",
"No entries found in this folder" : "Brak wpisów w tym folderze",
"Name" : "Nazwa",
"Share time" : "Czas współdzielenia",
+ "Expiration date" : "Data wygaśnięcia",
"Sorry, this link doesn’t seem to work anymore." : "Przepraszamy ale wygląda na to, że ten link już nie działa.",
"Reasons might be:" : "Możliwe powody:",
"the item was removed" : "element został usunięty",
"the link expired" : "link wygasł",
"sharing is disabled" : "udostępnianie jest wyłączone",
"For more info, please ask the person who sent this link." : "Aby uzyskać więcej informacji proszę poprosić osobę, która wysłał ten link.",
- "Add to your ownCloud" : "Dodaj do twojego ownCloud",
+ "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
"Download" : "Pobierz",
"Download %s" : "Pobierz %s",
- "Direct link" : "Bezpośredni link"
+ "Direct link" : "Bezpośredni link",
+ "Upload files to %s" : "Prześlij pliki do %s",
+ "Select or drop files" : "Wybierz i upuść pliki",
+ "Uploading files…" : "Wysyłanie plików...",
+ "Uploaded files:" : "Wysłane pliki:",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Publicznie udostępniony plik lub katalog został <strong>pobrany</strong>",
+ "You received a new remote share %2$s from %1$s" : "Otrzymałeś nowy udział zdalny %2$s z %1$s",
+ "You received a new remote share from %s" : "Otrzymałeś nowy zdalny udział z %s",
+ "%1$s accepted remote share %2$s" : "%1$s zaakceptował zdalny udział %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odrzucił zdalny udział %2$s",
+ "%1$s unshared %2$s from you" : "%1$s zakończył udostępnianie Ci %2$s",
+ "Public shared folder %1$s was downloaded" : "Udostępniony publicznie folder %1$s został pobrany",
+ "Public shared file %1$s was downloaded" : "Udostępniony publicznie plik %1$s został pobrany",
+ "%2$s shared %1$s with %3$s" : "%2$s udostępnił %1$s użytkownikowi %3$s",
+ "You removed the share of %2$s for %1$s" : "Zakończyłeś udostępnianie %2$s użytkownikowi %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s zakończył udostępnianie %3$s użytkownikowi %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s udostępnił %1$s grupie %3$s",
+ "%2$s shared %1$s via link" : "%2$s udostępnił %1$s poprzez łącze",
+ "You shared %1$s via link" : "Udostępniasz %1$s przez link",
+ "Your public link for %1$s expired" : "Twoje publiczne łącze do %1$s wygasło",
+ "%2$s removed the share for %1$s" : "%2$s usunął udział dla %1$s",
+ "Shared with %2$s" : "Współdzielone z %2$s",
+ "Shared with %3$s by %2$s" : "Udostępniono użytkownikowi %3$s przez %2$s",
+ "Shared with group %2$s" : "Udostępniono grupie %2$s",
+ "Shared with group %3$s by %2$s" : "Udostępniono grupie %3$s przez użytkownika %2$s",
+ "Shared via link by %2$s" : "Udostępniono za pomocą łącza przez użytkownika %2$s",
+ "Shared via public link" : "Udostępniono przez publiczne łącze",
+ "%2$s removed public link" : "%2$s usunął publiczne łącze",
+ "Public link expired" : "Link publiczny wygasł",
+ "Shared by %2$s" : "Udostępniane przez %2$s",
+ "Shares" : "Udziały"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php
index ccd0e3aa31d..6181cde6fe6 100644
--- a/apps/files_sharing/lib/Controller/ShareAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareAPIController.php
@@ -668,6 +668,7 @@ class ShareAPIController extends OCSController {
\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE, // legacy
\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE, // correct
\OCP\Constants::PERMISSION_CREATE, // hidden file list
+ \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE, // allow to edit single files
])
) {
throw new OCSBadRequestException($this->l->t('Can\'t change permissions for public share links'));
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index 32e4f3d3dd6..dd2ea855b0b 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -35,40 +35,35 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
<header><div id="header" class="<?php p((isset($_['folder']) ? 'share-folder' : 'share-file')) ?>">
- <a href="<?php print_unescaped(link_to('', 'index.php')); ?>"
- title="" id="nextcloud">
- <div class="logo-icon svg">
- </div>
- </a>
-
- <div class="header-appname-container">
- <h1 class="header-appname">
- <?php p($theme->getName()); ?>
- </h1>
+ <div id="header-left">
+ <a href="<?php print_unescaped(link_to('', 'index.php')); ?>"
+ title="" id="nextcloud">
+ <div class="logo-icon svg"></div>
+ <h1 class="header-appname">
+ <?php p($theme->getName()); ?>
+ </h1>
+ </a>
</div>
<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
- <div class="header-right">
- <span id="details">
- <?php
- if (!isset($_['hideFileList']) || (isset($_['hideFileList']) && $_['hideFileList'] === false)) {
- if ($_['server2serversharing']) {
- ?>
- <span id="save" data-protected="<?php p($_['protected']) ?>"
- data-owner-display-name="<?php p($_['displayName']) ?>" data-owner="<?php p($_['owner']) ?>" data-name="<?php p($_['filename']) ?>">
- <button id="save-button"><?php p($l->t('Add to your Nextcloud')) ?></button>
- <form class="save-form hidden" action="#">
- <input type="text" id="remote_address" placeholder="user@yourNextcloud.org"/>
- <button id="save-button-confirm" class="icon-confirm svg" disabled></button>
- </form>
- </span>
- <?php } ?>
- <a href="<?php p($_['downloadURL']); ?>" id="download" class="button">
- <img class="svg" alt="" src="<?php print_unescaped(image_path("core", "actions/download.svg")); ?>"/>
- <span id="download-text"><?php p($l->t('Download'))?></span>
- </a>
+ <div id="header-right">
+ <?php if (!isset($_['hideFileList']) || (isset($_['hideFileList']) && $_['hideFileList'] === false)) {
+ if ($_['server2serversharing']) {
+ ?>
+ <span id="save" data-protected="<?php p($_['protected']) ?>"
+ data-owner-display-name="<?php p($_['displayName']) ?>" data-owner="<?php p($_['owner']) ?>" data-name="<?php p($_['filename']) ?>">
+ <button id="save-button"><?php p($l->t('Add to your Nextcloud')) ?></button>
+ <form class="save-form hidden" action="#">
+ <input type="email" id="remote_address" placeholder="user@yourNextcloud.org"/>
+ <button id="save-button-confirm" class="icon-confirm svg" disabled></button>
+ </form>
+ </span>
<?php } ?>
- </span>
+ <a href="<?php p($_['downloadURL']); ?>" id="download" class="button">
+ <span class="icon icon-download"></span>
+ <span id="download-text"><?php p($l->t('Download'))?></span>
+ </a>
+ <?php } ?>
</div>
</div></header>
<div id="content-wrapper">
@@ -89,8 +84,8 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
<div id="imgframe"></div>
<?php endif; ?>
<div class="directDownload">
- <a href="<?php p($_['downloadURL']); ?>" id="downloadFile" class="button">
- <img class="svg" alt="" src="<?php print_unescaped(image_path("core", "actions/download.svg")); ?>"/>
+ <a href="<?php p($_['downloadURL']); ?>" id="downloadFile" class="button primary">
+ <span class="icon icon-download"></span>
<?php p($l->t('Download %s', array($_['filename'])))?> (<?php p($_['fileSize']) ?>)
</a>
</div>
diff --git a/apps/provisioning_api/appinfo/routes.php b/apps/provisioning_api/appinfo/routes.php
index 04a34fba903..baa4e475be8 100644
--- a/apps/provisioning_api/appinfo/routes.php
+++ b/apps/provisioning_api/appinfo/routes.php
@@ -45,6 +45,7 @@ return [
['root' => '/cloud', 'name' => 'Users#getUsers', 'url' => '/users', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#addUser', 'url' => '/users', 'verb' => 'POST'],
['root' => '/cloud', 'name' => 'Users#getUser', 'url' => '/users/{userId}', 'verb' => 'GET'],
+ ['root' => '/cloud', 'name' => 'Users#getCurrentUser', 'url' => '/user', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#editUser', 'url' => '/users/{userId}', 'verb' => 'PUT'],
['root' => '/cloud', 'name' => 'Users#deleteUser', 'url' => '/users/{userId}', 'verb' => 'DELETE'],
['root' => '/cloud', 'name' => 'Users#enableUser', 'url' => '/users/{userId}/enable', 'verb' => 'PUT'],
diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php
index cc1d63d2d34..45839cf4f8d 100644
--- a/apps/provisioning_api/lib/Controller/UsersController.php
+++ b/apps/provisioning_api/lib/Controller/UsersController.php
@@ -29,14 +29,15 @@
namespace OCA\Provisioning_API\Controller;
+use OC\Accounts\AccountManager;
use \OC_Helper;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSException;
use OCP\AppFramework\OCS\OCSForbiddenException;
-use OCP\AppFramework\OCS\OCSNotFoundException;
use OCP\AppFramework\OCSController;
use OCP\Files\NotFoundException;
use OCP\IConfig;
+use OCP\IGroup;
use OCP\IGroupManager;
use OCP\ILogger;
use OCP\IRequest;
@@ -53,6 +54,8 @@ class UsersController extends OCSController {
private $groupManager;
/** @var IUserSession */
private $userSession;
+ /** @var AccountManager */
+ private $accountManager;
/** @var ILogger */
private $logger;
@@ -63,6 +66,7 @@ class UsersController extends OCSController {
* @param IConfig $config
* @param IGroupManager $groupManager
* @param IUserSession $userSession
+ * @param AccountManager $accountManager
* @param ILogger $logger
*/
public function __construct($appName,
@@ -71,6 +75,7 @@ class UsersController extends OCSController {
IConfig $config,
IGroupManager $groupManager,
IUserSession $userSession,
+ AccountManager $accountManager,
ILogger $logger) {
parent::__construct($appName, $request);
@@ -78,6 +83,7 @@ class UsersController extends OCSController {
$this->config = $config;
$this->groupManager = $groupManager;
$this->userSession = $userSession;
+ $this->accountManager = $accountManager;
$this->logger = $logger;
}
@@ -107,7 +113,7 @@ class UsersController extends OCSController {
}
if($offset === null) {
- $offset = 0;
+ $offset = 0;
}
$users = [];
@@ -159,7 +165,7 @@ class UsersController extends OCSController {
throw new OCSException('no group specified (required for subadmins)', 106);
}
}
-
+
try {
$newUser = $this->userManager->createUser($userid, $password);
$this->logger->info('Successful addUser call with userid: '.$userid, ['app' => 'ocs_api']);
@@ -209,10 +215,17 @@ class UsersController extends OCSController {
}
}
+ $userAccount = $this->accountManager->getUser($targetUserObject);
+
// Find the data
+ $data['id'] = $targetUserObject->getUID();
$data['quota'] = $this->fillStorageInfo($userId);
$data['email'] = $targetUserObject->getEMailAddress();
$data['displayname'] = $targetUserObject->getDisplayName();
+ $data['phone'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_PHONE]['value'];
+ $data['address'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_ADDRESS]['value'];
+ $data['webpage'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_WEBSITE]['value'];
+ $data['twitter'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_TWITTER]['value'];
return new DataResponse($data);
}
@@ -220,6 +233,30 @@ class UsersController extends OCSController {
/**
* @NoAdminRequired
* @NoSubAdminRequired
+ *
+ * gets user info from the currently logged in user
+ *
+ * @return DataResponse
+ * @throws OCSException
+ */
+ public function getCurrentUser() {
+ $user = $this->userSession->getUser();
+ if ($user) {
+ $result = $this->getUser($user->getUID());
+ // rename "displayname" to "display-name" only for this call to keep
+ // the API stable.
+ $result['display-name'] = $result['displayname'];
+ unset($result['displayname']);
+ return $result;
+
+ }
+
+ throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED);
+ }
+
+ /**
+ * @NoAdminRequired
+ * @NoSubAdminRequired
* @PasswordConfirmationRequired
*
* edit users
@@ -275,9 +312,9 @@ class UsersController extends OCSController {
break;
case 'quota':
$quota = $value;
- if($quota !== 'none' and $quota !== 'default') {
+ if($quota !== 'none' && $quota !== 'default') {
if (is_numeric($quota)) {
- $quota = floatval($quota);
+ $quota = (float) $quota;
} else {
$quota = \OCP\Util::computerFileSize($quota);
}
@@ -421,6 +458,7 @@ class UsersController extends OCSController {
// Looking up someone else
if($subAdminManager->isUserAccessible($loggedInUser, $targetUser)) {
// Return the group that the method caller is subadmin of for the user in question
+ /** @var IGroup[] $getSubAdminsGroups */
$getSubAdminsGroups = $subAdminManager->getSubAdminsGroups($loggedInUser);
foreach ($getSubAdminsGroups as $key => $group) {
$getSubAdminsGroups[$key] = $group->getGID();
@@ -435,11 +473,13 @@ class UsersController extends OCSController {
throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED);
}
}
-
+
}
/**
* @PasswordConfirmationRequired
+ * @NoAdminRequired
+ *
* @param string $userId
* @param string $groupid
* @return DataResponse
@@ -459,6 +499,13 @@ class UsersController extends OCSController {
throw new OCSException('', 103);
}
+ // If they're not an admin, check they are a subadmin of the group in question
+ $loggedInUser = $this->userSession->getUser();
+ $subAdminManager = $this->groupManager->getSubAdmin();
+ if (!$this->groupManager->isAdmin($loggedInUser->getUID()) && !$subAdminManager->isSubAdminOfGroup($loggedInUser, $group)) {
+ throw new OCSException('', 104);
+ }
+
// Add user to group
$group->addUser($targetUser);
return new DataResponse();
@@ -492,25 +539,33 @@ class UsersController extends OCSController {
// If they're not an admin, check they are a subadmin of the group in question
$subAdminManager = $this->groupManager->getSubAdmin();
- if(!$this->groupManager->isAdmin($loggedInUser->getUID()) && !$subAdminManager->isSubAdminofGroup($loggedInUser, $group)) {
+ if (!$this->groupManager->isAdmin($loggedInUser->getUID()) && !$subAdminManager->isSubAdminOfGroup($loggedInUser, $group)) {
throw new OCSException('', 104);
}
+
// Check they aren't removing themselves from 'admin' or their 'subadmin; group
- if($userId === $loggedInUser->getUID()) {
- if($this->groupManager->isAdmin($loggedInUser->getUID())) {
- if($group->getGID() === 'admin') {
+ if ($userId === $loggedInUser->getUID()) {
+ if ($this->groupManager->isAdmin($loggedInUser->getUID())) {
+ if ($group->getGID() === 'admin') {
throw new OCSException('Cannot remove yourself from the admin group', 105);
}
} else {
- // Not an admin, check they are not removing themself from their subadmin group
- $subAdminGroups = $subAdminManager->getSubAdminsGroups($loggedInUser);
- foreach ($subAdminGroups as $key => $group) {
- $subAdminGroups[$key] = $group->getGID();
- }
+ // Not an admin, so the user must be a subadmin of this group, but that is not allowed.
+ throw new OCSException('Cannot remove yourself from this group as you are a SubAdmin', 105);
+ }
- if(in_array($group->getGID(), $subAdminGroups, true)) {
- throw new OCSException('Cannot remove yourself from this group as you are a SubAdmin', 105);
- }
+ } else if (!$this->groupManager->isAdmin($loggedInUser->getUID())) {
+ /** @var IGroup[] $subAdminGroups */
+ $subAdminGroups = $subAdminManager->getSubAdminsGroups($loggedInUser);
+ $subAdminGroups = array_map(function (IGroup $subAdminGroup) {
+ return $subAdminGroup->getGID();
+ }, $subAdminGroups);
+ $userGroups = $this->groupManager->getUserGroupIds($targetUser);
+ $userSubAdminGroups = array_intersect($subAdminGroups, $userGroups);
+
+ if (count($userSubAdminGroups) <= 1) {
+ // Subadmin must not be able to remove a user from all their subadmin groups.
+ throw new OCSException('Cannot remove user from this group as this is the only remaining group you are a SubAdmin of', 105);
}
}
diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
index e04ee86feae..52f7f391c97 100644
--- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
@@ -29,7 +29,12 @@
namespace OCA\Provisioning_API\Tests\Controller;
+use OC\Accounts\AccountManager;
use OCA\Provisioning_API\Controller\UsersController;
+use OCP\AppFramework\Http\DataResponse;
+use OCP\IGroup;
+use OCP\IRequest;
+use OCP\IUser;
use OCP\IUserManager;
use OCP\IConfig;
use OCP\IUserSession;
@@ -38,7 +43,7 @@ use Test\TestCase as OriginalTest;
use OCP\ILogger;
class UsersControllerTest extends OriginalTest {
-
+
/** @var IUserManager | PHPUnit_Framework_MockObject_MockObject */
protected $userManager;
/** @var IConfig | PHPUnit_Framework_MockObject_MockObject */
@@ -51,6 +56,10 @@ class UsersControllerTest extends OriginalTest {
protected $logger;
/** @var UsersController | PHPUnit_Framework_MockObject_MockObject */
protected $api;
+ /** @var AccountManager | PHPUnit_Framework_MockObject_MockObject */
+ protected $accountManager;
+ /** @var IRequest | PHPUnit_Framework_MockObject_MockObject */
+ protected $request;
protected function tearDown() {
parent::tearDown();
@@ -74,17 +83,21 @@ class UsersControllerTest extends OriginalTest {
$this->logger = $this->getMockBuilder('OCP\ILogger')
->disableOriginalConstructor()
->getMock();
- $request = $this->getMockBuilder('OCP\IRequest')
+ $this->request = $this->getMockBuilder('OCP\IRequest')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $this->accountManager = $this->getMockBuilder(AccountManager::class)
->disableOriginalConstructor()
->getMock();
$this->api = $this->getMockBuilder('OCA\Provisioning_API\Controller\UsersController')
->setConstructorArgs([
'provisioning_api',
- $request,
+ $this->request,
$this->userManager,
$this->config,
$this->groupManager,
$this->userSession,
+ $this->accountManager,
$this->logger,
])
->setMethods(['fillStorageInfo'])
@@ -649,6 +662,16 @@ class UsersControllerTest extends OriginalTest {
->method('isAdmin')
->with('admin')
->will($this->returnValue(true));
+ $this->accountManager->expects($this->any())->method('getUser')
+ ->with($targetUser)
+ ->willReturn(
+ [
+ AccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
+ AccountManager::PROPERTY_PHONE => ['value' => 'phone'],
+ AccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ AccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
+ ]
+ );
$this->config
->expects($this->at(0))
->method('getUserValue')
@@ -663,12 +686,21 @@ class UsersControllerTest extends OriginalTest {
->expects($this->once())
->method('getDisplayName')
->will($this->returnValue('Demo User'));
+ $targetUser
+ ->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('UID'));
$expected = [
+ 'id' => 'UID',
'enabled' => 'true',
'quota' => ['DummyValue'],
'email' => 'demo@owncloud.org',
'displayname' => 'Demo User',
+ 'phone' => 'phone',
+ 'address' => 'address',
+ 'webpage' => 'website',
+ 'twitter' => 'twitter'
];
$this->assertEquals($expected, $this->api->getUser('UserToGet')->getData());
}
@@ -728,12 +760,31 @@ class UsersControllerTest extends OriginalTest {
->expects($this->once())
->method('getDisplayName')
->will($this->returnValue('Demo User'));
+ $targetUser
+ ->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('UID'));
+ $this->accountManager->expects($this->any())->method('getUser')
+ ->with($targetUser)
+ ->willReturn(
+ [
+ AccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
+ AccountManager::PROPERTY_PHONE => ['value' => 'phone'],
+ AccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ AccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
+ ]
+ );
$expected = [
+ 'id' => 'UID',
'enabled' => 'true',
'quota' => ['DummyValue'],
'email' => 'demo@owncloud.org',
'displayname' => 'Demo User',
+ 'phone' => 'phone',
+ 'address' => 'address',
+ 'webpage' => 'website',
+ 'twitter' => 'twitter'
];
$this->assertEquals($expected, $this->api->getUser('UserToGet')->getData());
}
@@ -834,11 +885,30 @@ class UsersControllerTest extends OriginalTest {
->expects($this->once())
->method('getEMailAddress')
->will($this->returnValue('subadmin@owncloud.org'));
+ $targetUser
+ ->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('UID'));
+ $this->accountManager->expects($this->any())->method('getUser')
+ ->with($targetUser)
+ ->willReturn(
+ [
+ AccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
+ AccountManager::PROPERTY_PHONE => ['value' => 'phone'],
+ AccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ AccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
+ ]
+ );
$expected = [
+ 'id' => 'UID',
'quota' => ['DummyValue'],
'email' => 'subadmin@owncloud.org',
'displayname' => 'Subadmin User',
+ 'phone' => 'phone',
+ 'address' => 'address',
+ 'webpage' => 'website',
+ 'twitter' => 'twitter'
];
$this->assertEquals($expected, $this->api->getUser('subadmin')->getData());
}
@@ -1598,11 +1668,10 @@ class UsersControllerTest extends OriginalTest {
* @expectedExceptionCode 102
*/
public function testAddToGroupWithTargetGroupNotExisting() {
- $this->groupManager
- ->expects($this->once())
+ $this->groupManager->expects($this->once())
->method('get')
->with('GroupToAddTo')
- ->will($this->returnValue(null));
+ ->willReturn(null);
$this->api->addToGroup('TargetUser', 'GroupToAddTo');
}
@@ -1620,18 +1689,151 @@ class UsersControllerTest extends OriginalTest {
* @expectedExceptionCode 103
*/
public function testAddToGroupWithTargetUserNotExisting() {
- $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
- $this->groupManager
- ->expects($this->once())
+ $targetGroup = $this->createMock(IGroup::class);
+ $this->groupManager->expects($this->once())
->method('get')
->with('GroupToAddTo')
- ->will($this->returnValue($targetGroup));
+ ->willReturn($targetGroup);
$this->api->addToGroup('TargetUser', 'GroupToAddTo');
}
/**
* @expectedException \OCP\AppFramework\OCS\OCSException
+ * @expectedExceptionCode 104
+ */
+ public function testAddToGroupNoSubadmin() {
+ $targetUser = $this->createMock(IUser::class);
+ $loggedInUser = $this->createMock(IUser::class);
+ $loggedInUser->expects($this->once())
+ ->method('getUID')
+ ->willReturn('subadmin');
+
+ $targetGroup = $this->createMock(IGroup::class);
+ $targetGroup->expects($this->never())
+ ->method('addUser')
+ ->with($targetUser);
+
+ $this->groupManager->expects($this->once())
+ ->method('get')
+ ->with('GroupToAddTo')
+ ->willReturn($targetGroup);
+
+
+ $subAdminManager = $this->createMock(\OC\SubAdmin::class);
+ $subAdminManager->expects($this->once())
+ ->method('isSubAdminOfGroup')
+ ->with($loggedInUser, $targetGroup)
+ ->willReturn(false);
+
+ $this->groupManager->expects($this->once())
+ ->method('getSubAdmin')
+ ->willReturn($subAdminManager);
+ $this->groupManager->expects($this->once())
+ ->method('isAdmin')
+ ->with('subadmin')
+ ->willReturn(false);
+
+ $this->userManager->expects($this->once())
+ ->method('get')
+ ->with('TargetUser')
+ ->willReturn($targetUser);
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->willReturn($loggedInUser);
+
+ $this->api->addToGroup('TargetUser', 'GroupToAddTo');
+ }
+
+ public function testAddToGroupSuccessAsSubadmin() {
+ $targetUser = $this->createMock(IUser::class);
+ $loggedInUser = $this->createMock(IUser::class);
+ $loggedInUser->expects($this->once())
+ ->method('getUID')
+ ->willReturn('subadmin');
+
+ $targetGroup = $this->createMock(IGroup::class);
+ $targetGroup->expects($this->once())
+ ->method('addUser')
+ ->with($targetUser);
+
+ $this->groupManager->expects($this->once())
+ ->method('get')
+ ->with('GroupToAddTo')
+ ->willReturn($targetGroup);
+
+
+ $subAdminManager = $this->createMock(\OC\SubAdmin::class);
+ $subAdminManager->expects($this->once())
+ ->method('isSubAdminOfGroup')
+ ->with($loggedInUser, $targetGroup)
+ ->willReturn(true);
+
+ $this->groupManager->expects($this->once())
+ ->method('getSubAdmin')
+ ->willReturn($subAdminManager);
+ $this->groupManager->expects($this->once())
+ ->method('isAdmin')
+ ->with('subadmin')
+ ->willReturn(false);
+
+ $this->userManager->expects($this->once())
+ ->method('get')
+ ->with('TargetUser')
+ ->willReturn($targetUser);
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->willReturn($loggedInUser);
+
+ $this->assertEquals(new DataResponse(), $this->api->addToGroup('TargetUser', 'GroupToAddTo'));
+ }
+
+ public function testAddToGroupSuccessAsAdmin() {
+ $targetUser = $this->createMock(IUser::class);
+ $loggedInUser = $this->createMock(IUser::class);
+ $loggedInUser->expects($this->once())
+ ->method('getUID')
+ ->willReturn('admin');
+
+ $targetGroup = $this->createMock(IGroup::class);
+ $targetGroup->expects($this->once())
+ ->method('addUser')
+ ->with($targetUser);
+
+ $this->groupManager->expects($this->once())
+ ->method('get')
+ ->with('GroupToAddTo')
+ ->willReturn($targetGroup);
+
+
+ $subAdminManager = $this->createMock(\OC\SubAdmin::class);
+ $subAdminManager->expects($this->never())
+ ->method('isSubAdminOfGroup');
+
+ $this->groupManager->expects($this->once())
+ ->method('getSubAdmin')
+ ->willReturn($subAdminManager);
+ $this->groupManager->expects($this->once())
+ ->method('isAdmin')
+ ->with('admin')
+ ->willReturn(true);
+
+ $this->userManager->expects($this->once())
+ ->method('get')
+ ->with('TargetUser')
+ ->willReturn($targetUser);
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->willReturn($loggedInUser);
+
+ $this->assertEquals(new DataResponse(), $this->api->addToGroup('TargetUser', 'GroupToAddTo'));
+ }
+
+ /**
+ * @expectedException \OCP\AppFramework\OCS\OCSException
* @expectedExceptionCode 101
*/
public function testRemoveFromGroupWithNoTargetGroup() {
@@ -1813,22 +2015,79 @@ class UsersControllerTest extends OriginalTest {
->method('isSubAdminofGroup')
->with($loggedInUser, $targetGroup)
->will($this->returnValue(true));
+ $this->groupManager
+ ->expects($this->once())
+ ->method('getSubAdmin')
+ ->will($this->returnValue($subAdminManager));
+ $this->groupManager
+ ->expects($this->any())
+ ->method('isAdmin')
+ ->with('subadmin')
+ ->will($this->returnValue(false));
+
+ $this->api->removeFromGroup('subadmin', 'subadmin');
+ }
+
+ /**
+ * @expectedException \OCP\AppFramework\OCS\OCSException
+ * @expectedExceptionCode 105
+ * @expectedExceptionMessage Cannot remove user from this group as this is the only remaining group you are a SubAdmin of
+ */
+ public function testRemoveFromGroupAsSubAdminFromLastSubAdminGroup() {
+ $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser
+ ->expects($this->any())
+ ->method('getUID')
+ ->will($this->returnValue('subadmin'));
+ $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
+ $targetGroup
+ ->expects($this->any())
+ ->method('getGID')
+ ->will($this->returnValue('subadmin'));
+ $this->userSession
+ ->expects($this->once())
+ ->method('getUser')
+ ->will($this->returnValue($loggedInUser));
+ $this->groupManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('subadmin')
+ ->will($this->returnValue($targetGroup));
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('AnotherUser')
+ ->will($this->returnValue($targetUser));
+ $subAdminManager = $this->getMockBuilder('OC\SubAdmin')
+ ->disableOriginalConstructor()->getMock();
$subAdminManager
->expects($this->once())
- ->method('getSubAdminsGroups')
- ->with($loggedInUser)
- ->will($this->returnValue([$targetGroup]));
+ ->method('isSubAdminofGroup')
+ ->with($loggedInUser, $targetGroup)
+ ->will($this->returnValue(true));
$this->groupManager
->expects($this->once())
->method('getSubAdmin')
->will($this->returnValue($subAdminManager));
+ $subAdminManager
+ ->expects($this->once())
+ ->method('getSubAdminsGroups')
+ ->with($loggedInUser)
+ ->will($this->returnValue([$targetGroup]));
+
$this->groupManager
->expects($this->any())
->method('isAdmin')
->with('subadmin')
->will($this->returnValue(false));
+ $this->groupManager
+ ->expects($this->once())
+ ->method('getUserGroupIds')
+ ->with($targetUser)
+ ->willReturn(['subadmin', 'other group']);
- $this->api->removeFromGroup('subadmin', 'subadmin');
+ $this->api->removeFromGroup('AnotherUser', 'subadmin');
}
public function testRemoveFromGroupSuccessful() {
@@ -2293,4 +2552,70 @@ class UsersControllerTest extends OriginalTest {
$this->assertEquals([], $this->api->disableUser('RequestedUser')->getData());
}
+
+ public function testGetCurrentUserLoggedIn() {
+
+ $user = $this->getMock(IUser::class);
+ $user->expects($this->once())->method('getUID')->willReturn('UID');
+
+ $this->userSession->expects($this->once())->method('getUser')
+ ->willReturn($user);
+
+ /** @var UsersController | PHPUnit_Framework_MockObject_MockObject $api */
+ $api = $this->getMockBuilder('OCA\Provisioning_API\Controller\UsersController')
+ ->setConstructorArgs([
+ 'provisioning_api',
+ $this->request,
+ $this->userManager,
+ $this->config,
+ $this->groupManager,
+ $this->userSession,
+ $this->accountManager,
+ $this->logger,
+ ])
+ ->setMethods(['getUser'])
+ ->getMock();
+
+ $api->expects($this->once())->method('getUser')->with('UID')
+ ->willReturn(
+ [
+ 'id' => 'UID',
+ 'enabled' => 'true',
+ 'quota' => ['DummyValue'],
+ 'email' => 'demo@owncloud.org',
+ 'displayname' => 'Demo User',
+ 'phone' => 'phone',
+ 'address' => 'address',
+ 'webpage' => 'website',
+ 'twitter' => 'twitter'
+ ]
+ );
+
+ $expected = [
+ 'id' => 'UID',
+ 'enabled' => 'true',
+ 'quota' => ['DummyValue'],
+ 'email' => 'demo@owncloud.org',
+ 'phone' => 'phone',
+ 'address' => 'address',
+ 'webpage' => 'website',
+ 'twitter' => 'twitter',
+ 'display-name' => 'Demo User'
+ ];
+
+ $this->assertSame($expected, $api->getCurrentUser());
+ }
+
+ /**
+ * @expectedException \OCP\AppFramework\OCS\OCSException
+ */
+ public function testGetCurrentUserNotLoggedIn() {
+
+ $this->userSession->expects($this->once())->method('getUser')
+ ->willReturn(null);
+
+ $this->api->getCurrentUser();
+ }
+
+
}
diff --git a/apps/systemtags/l10n/de.js b/apps/systemtags/l10n/de.js
index 2fb855a859b..8694bb0b389 100644
--- a/apps/systemtags/l10n/de.js
+++ b/apps/systemtags/l10n/de.js
@@ -40,7 +40,7 @@ OC.L10N.register(
"{actor} removed system tag {systemtag} from {file}" : "{actor} hat den System-Tag {systemtag} von {file} entfernt",
"%s (restricted)" : "%s (eingeschränkt)",
"%s (invisible)" : "%s (unsichtbar)",
- "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert",
"Collaborative tags" : "Zusammenarbeits-Tags",
"Name" : "Name",
"Delete" : "Löschen",
diff --git a/apps/systemtags/l10n/de.json b/apps/systemtags/l10n/de.json
index defb3f58a0c..9c408bb0c09 100644
--- a/apps/systemtags/l10n/de.json
+++ b/apps/systemtags/l10n/de.json
@@ -38,7 +38,7 @@
"{actor} removed system tag {systemtag} from {file}" : "{actor} hat den System-Tag {systemtag} von {file} entfernt",
"%s (restricted)" : "%s (eingeschränkt)",
"%s (invisible)" : "%s (unsichtbar)",
- "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert",
"Collaborative tags" : "Zusammenarbeits-Tags",
"Name" : "Name",
"Delete" : "Löschen",
diff --git a/apps/systemtags/l10n/de_DE.js b/apps/systemtags/l10n/de_DE.js
index 33554f5086d..69d9bce4420 100644
--- a/apps/systemtags/l10n/de_DE.js
+++ b/apps/systemtags/l10n/de_DE.js
@@ -40,7 +40,7 @@ OC.L10N.register(
"{actor} removed system tag {systemtag} from {file}" : "{actor} hat den System-Tag {systemtag} von {file} entfernt",
"%s (restricted)" : "%s (eingeschränkt)",
"%s (invisible)" : "%s (unsichtbar)",
- "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert",
"Collaborative tags" : "Gemeinsame Tags",
"Name" : "Name",
"Delete" : "Löschen",
diff --git a/apps/systemtags/l10n/de_DE.json b/apps/systemtags/l10n/de_DE.json
index f1a71612dfb..1155159a066 100644
--- a/apps/systemtags/l10n/de_DE.json
+++ b/apps/systemtags/l10n/de_DE.json
@@ -38,7 +38,7 @@
"{actor} removed system tag {systemtag} from {file}" : "{actor} hat den System-Tag {systemtag} von {file} entfernt",
"%s (restricted)" : "%s (eingeschränkt)",
"%s (invisible)" : "%s (unsichtbar)",
- "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert",
"Collaborative tags" : "Gemeinsame Tags",
"Name" : "Name",
"Delete" : "Löschen",
diff --git a/apps/systemtags/l10n/sq.js b/apps/systemtags/l10n/sq.js
index 9312d671bd1..3c1c1b4f039 100644
--- a/apps/systemtags/l10n/sq.js
+++ b/apps/systemtags/l10n/sq.js
@@ -2,31 +2,52 @@ OC.L10N.register(
"systemtags",
{
"Tags" : "Etiketa",
+ "Update" : "Përditëso",
+ "Create" : "Krijo",
+ "Select tag…" : "Përzgjidh etiketën...",
"Tagged files" : "Kartela të etiketuara",
"Select tags to filter by" : "Përzgjidhni etiketa sipas të cilat të bëhet filtrimi",
+ "No tags found" : "Asnjë etiket nuk u gjet",
"Please select tags to filter by" : "Ju lutemi, përzgjidhni etiketa sipas të cilat të bëhet filtrimi",
"No files found for the selected tags" : "S’u gjetën kartela për etiketat e përzgjedhura",
+ "Added system tag %1$s" : "U shtua etiketa %1$s e sistemit ",
+ "Added system tag {systemtag}" : "Tagu i shtuar i sistemit{systemtag}",
+ "%1$s added system tag %2$s" : "%1$s shtoi etiketën %2$s të sistemit ",
+ "{actor} added system tag {systemtag}" : "{actor} shtoi etiketën e sistemit {systemtag}",
+ "Removed system tag %1$s" : "Hoqi etiketën %1$s të sistemit ",
+ "Removed system tag {systemtag}" : "Hoqi etiketën e sistemit {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s hoqi etiketën %2$s të sistemit ",
+ "{actor} removed system tag {systemtag}" : "{actor} hoqi etiketën e sistemit {systemtag}",
+ "You created system tag %1$s" : "Ju krijuat etiketën %1$s të sistemit",
+ "%1$s created system tag %2$s" : "%1$s krijoi etiketën e sistemit %2$s",
+ "You deleted system tag %1$s" : "Ju fshit etiketën %1$s të sistemit",
+ "You deleted system tag {systemtag}" : "Ju fshit etiketën {systemtag} të sistemit",
+ "%1$s deleted system tag %2$s" : "%1$s fshiu etiketën e sistemit %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} fshiu etiketën {systemtag} të sistemit",
+ "You updated system tag %2$s to %1$s" : "Ju përditësuat etiketën e sistemit nga %2$s në %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Ju përditësuat etiketën e sistemit nga {oldsystemtag} në {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s përditësoi etiketën e sistemit %3$s si %2$s",
+ "You added system tag %2$s to %1$s" : "Ju shtuat tagun e sistemit%2$s në %1$s",
+ "You added system tag {systemtag} to {file}" : "Ju shtuat tagun e sistemit{systemtag} në{file}",
+ "You removed system tag {systemtag} from {file}" : "Hoqët etiketën e sistemit {systemtag} nga {file}",
+ "%s (restricted)" : "%s (e kufizuar)",
+ "%s (invisible)" : "%s (e padukshme)",
"<strong>System tags</strong> for a file have been modified" : "U ndryshyan <strong>etiketa sistemi</strong>për një kartelë",
+ "Name" : "Emër",
+ "No files in here" : "S’ka kartela këtu",
+ "No entries found in this folder" : "S’u gjetën zëra në këtë dosje",
+ "Size" : "Madhësi",
+ "Modified" : "Ndryshuar më",
"You assigned system tag %3$s" : "Caktuat etiketën e sistemit %3$s",
"%1$s assigned system tag %3$s" : "%1$s caktoi etiketën e sistemit %3$s",
"You unassigned system tag %3$s" : "I hoqët etiketën e sistemit %3$s",
"%1$s unassigned system tag %3$s" : "%1$s e hoqi %3$s si etiketë sistemi",
"You created system tag %2$s" : "Krijuat etiketën e sistemit %2$s",
- "%1$s created system tag %2$s" : "%1$s krijoi etiketën e sistemit %2$s",
"You deleted system tag %2$s" : "Fshitë etiketën e sistemit %2$s",
- "%1$s deleted system tag %2$s" : "%1$s fshiu etiketën e sistemit %2$s",
"You updated system tag %3$s to %2$s" : "Përditësuat etiketën e sistemit %3$s në %2$s",
- "%1$s updated system tag %3$s to %2$s" : "%1$s përditësoi etiketën e sistemit %3$s si %2$s",
"You assigned system tag %3$s to %2$s" : "Caktuat etiketë sistemi %3$s për %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s caktoi etiketën e sistemit %3$s si %2$s",
"You unassigned system tag %3$s from %2$s" : "I hoqët %2$s etiketën e sistemit %3$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s",
- "%s (restricted)" : "%s (e kufizuar)",
- "%s (invisible)" : "%s (e padukshme)",
- "Name" : "Emër",
- "No files in here" : "S’ka kartela këtu",
- "No entries found in this folder" : "S’u gjetën zëra në këtë dosje",
- "Size" : "Madhësi",
- "Modified" : "Ndryshuar më"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/sq.json b/apps/systemtags/l10n/sq.json
index eed88992e5a..31b30a1ffa3 100644
--- a/apps/systemtags/l10n/sq.json
+++ b/apps/systemtags/l10n/sq.json
@@ -1,30 +1,51 @@
{ "translations": {
"Tags" : "Etiketa",
+ "Update" : "Përditëso",
+ "Create" : "Krijo",
+ "Select tag…" : "Përzgjidh etiketën...",
"Tagged files" : "Kartela të etiketuara",
"Select tags to filter by" : "Përzgjidhni etiketa sipas të cilat të bëhet filtrimi",
+ "No tags found" : "Asnjë etiket nuk u gjet",
"Please select tags to filter by" : "Ju lutemi, përzgjidhni etiketa sipas të cilat të bëhet filtrimi",
"No files found for the selected tags" : "S’u gjetën kartela për etiketat e përzgjedhura",
+ "Added system tag %1$s" : "U shtua etiketa %1$s e sistemit ",
+ "Added system tag {systemtag}" : "Tagu i shtuar i sistemit{systemtag}",
+ "%1$s added system tag %2$s" : "%1$s shtoi etiketën %2$s të sistemit ",
+ "{actor} added system tag {systemtag}" : "{actor} shtoi etiketën e sistemit {systemtag}",
+ "Removed system tag %1$s" : "Hoqi etiketën %1$s të sistemit ",
+ "Removed system tag {systemtag}" : "Hoqi etiketën e sistemit {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s hoqi etiketën %2$s të sistemit ",
+ "{actor} removed system tag {systemtag}" : "{actor} hoqi etiketën e sistemit {systemtag}",
+ "You created system tag %1$s" : "Ju krijuat etiketën %1$s të sistemit",
+ "%1$s created system tag %2$s" : "%1$s krijoi etiketën e sistemit %2$s",
+ "You deleted system tag %1$s" : "Ju fshit etiketën %1$s të sistemit",
+ "You deleted system tag {systemtag}" : "Ju fshit etiketën {systemtag} të sistemit",
+ "%1$s deleted system tag %2$s" : "%1$s fshiu etiketën e sistemit %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} fshiu etiketën {systemtag} të sistemit",
+ "You updated system tag %2$s to %1$s" : "Ju përditësuat etiketën e sistemit nga %2$s në %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Ju përditësuat etiketën e sistemit nga {oldsystemtag} në {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s përditësoi etiketën e sistemit %3$s si %2$s",
+ "You added system tag %2$s to %1$s" : "Ju shtuat tagun e sistemit%2$s në %1$s",
+ "You added system tag {systemtag} to {file}" : "Ju shtuat tagun e sistemit{systemtag} në{file}",
+ "You removed system tag {systemtag} from {file}" : "Hoqët etiketën e sistemit {systemtag} nga {file}",
+ "%s (restricted)" : "%s (e kufizuar)",
+ "%s (invisible)" : "%s (e padukshme)",
"<strong>System tags</strong> for a file have been modified" : "U ndryshyan <strong>etiketa sistemi</strong>për një kartelë",
+ "Name" : "Emër",
+ "No files in here" : "S’ka kartela këtu",
+ "No entries found in this folder" : "S’u gjetën zëra në këtë dosje",
+ "Size" : "Madhësi",
+ "Modified" : "Ndryshuar më",
"You assigned system tag %3$s" : "Caktuat etiketën e sistemit %3$s",
"%1$s assigned system tag %3$s" : "%1$s caktoi etiketën e sistemit %3$s",
"You unassigned system tag %3$s" : "I hoqët etiketën e sistemit %3$s",
"%1$s unassigned system tag %3$s" : "%1$s e hoqi %3$s si etiketë sistemi",
"You created system tag %2$s" : "Krijuat etiketën e sistemit %2$s",
- "%1$s created system tag %2$s" : "%1$s krijoi etiketën e sistemit %2$s",
"You deleted system tag %2$s" : "Fshitë etiketën e sistemit %2$s",
- "%1$s deleted system tag %2$s" : "%1$s fshiu etiketën e sistemit %2$s",
"You updated system tag %3$s to %2$s" : "Përditësuat etiketën e sistemit %3$s në %2$s",
- "%1$s updated system tag %3$s to %2$s" : "%1$s përditësoi etiketën e sistemit %3$s si %2$s",
"You assigned system tag %3$s to %2$s" : "Caktuat etiketë sistemi %3$s për %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s caktoi etiketën e sistemit %3$s si %2$s",
"You unassigned system tag %3$s from %2$s" : "I hoqët %2$s etiketën e sistemit %3$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s",
- "%s (restricted)" : "%s (e kufizuar)",
- "%s (invisible)" : "%s (e padukshme)",
- "Name" : "Emër",
- "No files in here" : "S’ka kartela këtu",
- "No entries found in this folder" : "S’u gjetën zëra në këtë dosje",
- "Size" : "Madhësi",
- "Modified" : "Ndryshuar më"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/theming/img/app-dark.svg b/apps/theming/img/app-dark.svg
new file mode 100644
index 00000000000..adf97966c41
--- /dev/null
+++ b/apps/theming/img/app-dark.svg
@@ -0,0 +1 @@
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M10.707 11.412l-.587-.587-.03-.03a.513.513 0 0 1-.074-.526L13.07 3.4l-1.5-1.498-.15.15-.708-.706.505-.505a.538.538 0 0 1 .224-.128c.04-.01.05-.01.087-.016h.087c.04.006.05.006.086.016.072.02.134.055.192.1.74.676 1.42 1.415 2.127 2.124a.503.503 0 0 1 .103.556l-3.053 6.87.344.343.49-.49 3.01 3.01a1.192 1.192 0 0 1-1.685 1.686l-3.012-3.01.49-.488zm-.533-10.217a.986.986 0 0 0-1.396 0l-7.582 7.58a.99.99 0 0 0 0 1.398l1.397 1.396a.986.986 0 0 0 1.396 0l7.58-7.583a.988.988 0 0 0 0-1.396l-1.396-1.395z" fill="#000"/></svg>
diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php
index 73e3ed3a4b4..24ac1c7d8d5 100644
--- a/apps/theming/lib/Controller/ThemingController.php
+++ b/apps/theming/lib/Controller/ThemingController.php
@@ -374,6 +374,7 @@ class ThemingController extends Controller {
';
$responseCss .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$responseCss .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $responseCss .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
}
$logo = $this->config->getAppValue($this->appName, 'logoMime');
@@ -445,8 +446,7 @@ class ThemingController extends Controller {
cacheBuster: ' . json_encode($cacheBusterValue). '
};
})();';
- $response = new Http\DataDisplayResponse($responseJS);
- $response->addHeader('Content-type', 'text/javascript');
+ $response = new DataDownloadResponse($responseJS, 'javascript', 'text/javascript');
$response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
$response->addHeader('Pragma', 'cache');
$response->cacheFor(3600);
diff --git a/apps/theming/lib/Settings/Section.php b/apps/theming/lib/Settings/Section.php
index cffbb8901c8..6078743dead 100644
--- a/apps/theming/lib/Settings/Section.php
+++ b/apps/theming/lib/Settings/Section.php
@@ -24,13 +24,21 @@
namespace OCA\Theming\Settings;
use OCP\IL10N;
-use OCP\Settings\ISection;
+use OCP\IURLGenerator;
+use OCP\Settings\IIconSection;
-class Section implements ISection {
+class Section implements IIconSection {
/** @var IL10N */
private $l;
+ /** @var IURLGenerator */
+ private $url;
- public function __construct(IL10N $l) {
+ /**
+ * @param IURLGenerator $url
+ * @param IL10N $l
+ */
+ public function __construct(IURLGenerator $url, IL10N $l) {
+ $this->url = $url;
$this->l = $l;
}
@@ -64,4 +72,11 @@ class Section implements ISection {
public function getPriority() {
return 30;
}
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getIcon() {
+ return $this->url->imagePath('theming', 'app-dark.svg');
+ }
}
diff --git a/apps/theming/templates/settings-admin.php b/apps/theming/templates/settings-admin.php
index 013b3bcf34f..920b4a007da 100644
--- a/apps/theming/templates/settings-admin.php
+++ b/apps/theming/templates/settings-admin.php
@@ -74,7 +74,7 @@ style('theming', 'settings-admin');
<div>
<form class="uploadButton inlineblock" method="post" action="<?php p($_['uploadLogoRoute']) ?>">
<input type="hidden" id="current-backgroundMime" name="current-backgroundMime" value="<?php p($_['backgroundMime']); ?>" />
- <label for="upload-login-background"><span><?php p($l->t('Log in image')) ?></span></label>
+ <label for="upload-login-background"><span><?php p($l->t('Login image')) ?></span></label>
<input id="upload-login-background" class="upload-logo-field" name="upload-login-background" type="file">
<label for="upload-login-background" class="button icon-upload svg" id="upload-login-background" title="<?php p($l->t("Upload new login background")) ?>"></label>
<div data-setting="backgroundMime" data-toggle="tooltip" data-original-title="<?php p($l->t('reset to default')); ?>" class="theme-undo icon icon-history"></div>
diff --git a/apps/theming/tests/Controller/ThemingControllerTest.php b/apps/theming/tests/Controller/ThemingControllerTest.php
index d42e5afb245..97a5e985860 100644
--- a/apps/theming/tests/Controller/ThemingControllerTest.php
+++ b/apps/theming/tests/Controller/ThemingControllerTest.php
@@ -487,6 +487,7 @@ class ThemingControllerTest extends TestCase {
';
$expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $expectedData .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
$expectedData .= '.nc-theming-contrast {color: #ffffff}' . "\n";
$expectedData .= '.icon-file,.icon-filetype-text {' .
'background-image: url(\'./img/core/filetypes/text.svg?v=0\');' . "}\n" .
@@ -581,6 +582,7 @@ class ThemingControllerTest extends TestCase {
';
$expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $expectedData .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
$expectedData .= '#header .header-appname, #expandDisplayName { color: #000000; }' . "\n";
$expectedData .= '#header .icon-caret { background-image: url(\'' . \OC::$WEBROOT . '/core/img/actions/caret-dark.svg\'); }' . "\n";
$expectedData .= '.searchbox input[type="search"] { background: transparent url(\'' . \OC::$WEBROOT . '/core/img/actions/search.svg\') no-repeat 6px center; color: #000; }' . "\n";
@@ -768,6 +770,7 @@ class ThemingControllerTest extends TestCase {
';
$expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $expectedData .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
$expectedData .= sprintf(
'#header .logo {' .
'background-image: url(\'./logo?v=0\');' .
@@ -879,6 +882,7 @@ class ThemingControllerTest extends TestCase {
';
$expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $expectedData .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
$expectedData .= sprintf(
'#header .logo {' .
'background-image: url(\'./logo?v=0\');' .
@@ -910,7 +914,6 @@ class ThemingControllerTest extends TestCase {
'background-image: url(\'./img/core/filetypes/folder.svg?v=0\');' . "}\n" .
'.icon-filetype-folder-drag-accept {' .
'background-image: url(\'./img/core/filetypes/folder-drag-accept.svg?v=0\')!important;' . "}\n";
- $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css');
$expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css');
$expected->cacheFor(3600);
@@ -948,8 +951,7 @@ class ThemingControllerTest extends TestCase {
cacheBuster: null
};
})();';
- $expected = new Http\DataDisplayResponse($expectedResponse);
- $expected->addHeader("Content-type","text/javascript");
+ $expected = new Http\DataDownloadResponse($expectedResponse, 'javascript', 'text/javascript');
$expected->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
$expected->addHeader('Pragma', 'cache');
$expected->cacheFor(3600);
@@ -983,8 +985,7 @@ class ThemingControllerTest extends TestCase {
cacheBuster: null
};
})();';
- $expected = new Http\DataDisplayResponse($expectedResponse);
- $expected->addHeader("Content-type","text/javascript");
+ $expected = new Http\DataDownloadResponse($expectedResponse, 'javascript', 'text/javascript');
$expected->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
$expected->addHeader('Pragma', 'cache');
$expected->cacheFor(3600);
diff --git a/apps/theming/tests/Settings/SectionTest.php b/apps/theming/tests/Settings/SectionTest.php
index 3a3a4375236..90d1854aebf 100644
--- a/apps/theming/tests/Settings/SectionTest.php
+++ b/apps/theming/tests/Settings/SectionTest.php
@@ -25,19 +25,24 @@ namespace OCA\Theming\Tests\Settings;
use OCA\Theming\Settings\Section;
use OCP\IL10N;
+use OCP\IURLGenerator;
use Test\TestCase;
class SectionTest extends TestCase {
- /** @var IL10N */
+ /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
+ private $url;
+ /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */
private $l;
/** @var Section */
private $section;
public function setUp() {
parent::setUp();
- $this->l = $this->getMockBuilder('\OCP\IL10N')->getMock();
+ $this->url = $this->createMock(IURLGenerator::class);
+ $this->l = $this->createMock(IL10N::class);
$this->section = new Section(
+ $this->url,
$this->l
);
}
@@ -59,4 +64,13 @@ class SectionTest extends TestCase {
public function testGetPriority() {
$this->assertSame(30, $this->section->getPriority());
}
+
+ public function testGetIcon() {
+ $this->url->expects($this->once())
+ ->method('imagePath')
+ ->with('theming', 'app-dark.svg')
+ ->willReturn('icon');
+
+ $this->assertSame('icon', $this->section->getIcon());
+ }
}
diff --git a/apps/twofactor_backupcodes/appinfo/app.php b/apps/twofactor_backupcodes/appinfo/app.php
index 31f9b6b8eae..0cb10531360 100644
--- a/apps/twofactor_backupcodes/appinfo/app.php
+++ b/apps/twofactor_backupcodes/appinfo/app.php
@@ -19,4 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+
+// @codeCoverageIgnoreStart
OC_App::registerPersonal('twofactor_backupcodes', 'settings/personal');
+// @codeCoverageIgnoreEnd
diff --git a/apps/twofactor_backupcodes/appinfo/routes.php b/apps/twofactor_backupcodes/appinfo/routes.php
index f2af12e9b45..0119bfd0b08 100644
--- a/apps/twofactor_backupcodes/appinfo/routes.php
+++ b/apps/twofactor_backupcodes/appinfo/routes.php
@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+// @codeCoverageIgnoreStart
return [
'routes' => [
[
@@ -33,3 +34,4 @@ return [
],
]
];
+// @codeCoverageIgnoreEnd
diff --git a/apps/twofactor_backupcodes/l10n/de.js b/apps/twofactor_backupcodes/l10n/de.js
index 96e1fca0759..039b8bea68b 100644
--- a/apps/twofactor_backupcodes/l10n/de.js
+++ b/apps/twofactor_backupcodes/l10n/de.js
@@ -13,7 +13,7 @@ OC.L10N.register(
"Two-factor authentication" : "Zwei-Faktor Authentifizierung",
"You successfully logged in using two-factor authentication (%1$s)" : "Erfolgreich mittels Zwei-Faktorauthentifizierung angemeldet (%1$s)",
"A login attempt using two-factor authentication failed (%1$s)" : "Ein Anmeldeversuch mittels Zwei-Faktorauthentifizierung gescheitert (%1$s)",
- "You created two-factor backup codes for your account" : "Du hast Zwei-Faktor Sicherungs-Codes für Ihr Konto erstellt",
+ "You created two-factor backup codes for your account" : "Du hast Zwei-Faktor Sicherungs-Codes für Dein Konto erstellt",
"Backup code" : "Backup-Code",
"Use backup code" : "Backup-Code verwenden",
"Second-factor backup codes" : "Zweitfaktor-Backup-Codes"
diff --git a/apps/twofactor_backupcodes/l10n/de.json b/apps/twofactor_backupcodes/l10n/de.json
index 6f582fc8bf0..6afdfa52ac4 100644
--- a/apps/twofactor_backupcodes/l10n/de.json
+++ b/apps/twofactor_backupcodes/l10n/de.json
@@ -11,7 +11,7 @@
"Two-factor authentication" : "Zwei-Faktor Authentifizierung",
"You successfully logged in using two-factor authentication (%1$s)" : "Erfolgreich mittels Zwei-Faktorauthentifizierung angemeldet (%1$s)",
"A login attempt using two-factor authentication failed (%1$s)" : "Ein Anmeldeversuch mittels Zwei-Faktorauthentifizierung gescheitert (%1$s)",
- "You created two-factor backup codes for your account" : "Du hast Zwei-Faktor Sicherungs-Codes für Ihr Konto erstellt",
+ "You created two-factor backup codes for your account" : "Du hast Zwei-Faktor Sicherungs-Codes für Dein Konto erstellt",
"Backup code" : "Backup-Code",
"Use backup code" : "Backup-Code verwenden",
"Second-factor backup codes" : "Zweitfaktor-Backup-Codes"
diff --git a/apps/twofactor_backupcodes/lib/Activity/Provider.php b/apps/twofactor_backupcodes/lib/Activity/Provider.php
index cfb16c9f8d3..9c7aaeae630 100644
--- a/apps/twofactor_backupcodes/lib/Activity/Provider.php
+++ b/apps/twofactor_backupcodes/lib/Activity/Provider.php
@@ -40,6 +40,11 @@ class Provider implements IProvider {
/** @var ILogger */
private $logger;
+ /**
+ * @param L10nFactory $l10n
+ * @param IURLGenerator $urlGenerator
+ * @param ILogger $logger
+ */
public function __construct(L10nFactory $l10n, IURLGenerator $urlGenerator, ILogger $logger) {
$this->logger = $logger;
$this->urlGenerator = $urlGenerator;
diff --git a/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php b/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
index f64e2e9e60b..85cc174fb6a 100644
--- a/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
+++ b/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
@@ -22,7 +22,6 @@
namespace OCA\TwoFactorBackupCodes\Db;
use OCP\AppFramework\Db\Mapper;
-use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
use OCP\IUser;
diff --git a/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php b/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php
index ecb16305e92..1cf62d18801 100644
--- a/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php
+++ b/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php
@@ -33,6 +33,8 @@ use OCP\Security\ISecureRandom;
class BackupCodeStorage {
+ private static $CODE_LENGTH = 16;
+
/** @var BackupCodeMapper */
private $mapper;
@@ -48,6 +50,13 @@ class BackupCodeStorage {
/** @var ILogger */
private $logger;
+ /**
+ * @param BackupCodeMapper $mapper
+ * @param ISecureRandom $random
+ * @param IHasher $hasher
+ * @param IManager $activityManager
+ * @param ILogger $logger
+ */
public function __construct(BackupCodeMapper $mapper, ISecureRandom $random, IHasher $hasher,
IManager $activityManager, ILogger $logger) {
$this->mapper = $mapper;
@@ -69,7 +78,7 @@ class BackupCodeStorage {
$uid = $user->getUID();
foreach (range(1, min([$number, 20])) as $i) {
- $code = $this->random->generate(10, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789');
+ $code = $this->random->generate(self::$CODE_LENGTH, ISecureRandom::CHAR_UPPER . ISecureRandom::CHAR_DIGITS);
$dbCode = new BackupCode();
$dbCode->setUserId($uid);
diff --git a/apps/twofactor_backupcodes/settings/personal.php b/apps/twofactor_backupcodes/settings/personal.php
index 037516e39a3..0a018c0ff28 100644
--- a/apps/twofactor_backupcodes/settings/personal.php
+++ b/apps/twofactor_backupcodes/settings/personal.php
@@ -1,5 +1,6 @@
<?php
-
+// @codeCoverageIgnoreStart
$tmpl = new \OCP\Template('twofactor_backupcodes', 'personal');
return $tmpl->fetchPage();
+// @codeCoverageIgnoreEnd
diff --git a/apps/twofactor_backupcodes/tests/Unit/Activity/GenericProviderTest.php b/apps/twofactor_backupcodes/tests/Unit/Activity/GenericProviderTest.php
new file mode 100644
index 00000000000..242c4ab4e8d
--- /dev/null
+++ b/apps/twofactor_backupcodes/tests/Unit/Activity/GenericProviderTest.php
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * Two-factor backup codes
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\TwoFactorBackupCodes\Test\Unit\Activity;
+
+use InvalidArgumentException;
+use OCA\TwoFactorBackupCodes\Activity\GenericProvider;
+use OCP\Activity\IEvent;
+use OCP\IL10N;
+use OCP\ILogger;
+use OCP\IURLGenerator;
+use OCP\L10N\IFactory;
+use PHPUnit_Framework_MockObject_MockObject;
+use Test\TestCase;
+
+class GenericProviderTest extends TestCase {
+
+ /** @var IL10N|PHPUnit_Framework_MockObject_MockObject */
+ private $l10n;
+
+ /** @var IURLGenerator|PHPUnit_Framework_MockObject_MockObject */
+ private $urlGenerator;
+
+ /** @var ILogger|PHPUnit_Framework_MockObject_MockObject */
+ private $logger;
+
+ /** @var GenericProvider */
+ private $provider;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->l10n = $this->createMock(IFactory::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->logger = $this->createMock(ILogger::class);
+
+ $this->provider = new GenericProvider($this->l10n, $this->urlGenerator, $this->logger);
+ }
+
+ public function testParseUnrelated() {
+ $lang = 'ru';
+ $event = $this->createMock(IEvent::class);
+ $event->expects($this->once())
+ ->method('getType')
+ ->willReturn('comments');
+ $this->setExpectedException(InvalidArgumentException::class);
+
+ $this->provider->parse($lang, $event);
+ }
+
+ public function subjectData() {
+ return [
+ ['twofactor_success'],
+ ['twofactor_failed'],
+ ];
+ }
+
+ /**
+ * @dataProvider subjectData
+ */
+ public function testParse($subject) {
+ $lang = 'ru';
+ $event = $this->createMock(IEvent::class);
+ $l = $this->createMock(IL10N::class);
+
+ $event->expects($this->once())
+ ->method('getType')
+ ->willReturn('twofactor');
+ $this->l10n->expects($this->once())
+ ->method('get')
+ ->with('core', $lang)
+ ->willReturn($l);
+ $this->urlGenerator->expects($this->once())
+ ->method('imagePath')
+ ->with('core', 'actions/password.svg')
+ ->willReturn('path/to/image');
+ $this->urlGenerator->expects($this->once())
+ ->method('getAbsoluteURL')
+ ->with('path/to/image')
+ ->willReturn('absolute/path/to/image');
+ $event->expects($this->once())
+ ->method('setIcon')
+ ->with('absolute/path/to/image');
+ $event->expects($this->once())
+ ->method('getSubject')
+ ->willReturn($subject);
+ $event->expects($this->once())
+ ->method('setParsedSubject');
+
+ $this->provider->parse($lang, $event);
+ }
+
+ public function testParseInvalidSubject() {
+ $lang = 'ru';
+ $l = $this->createMock(IL10N::class);
+ $event = $this->createMock(IEvent::class);
+
+ $event->expects($this->once())
+ ->method('getType')
+ ->willReturn('twofactor');
+ $this->l10n->expects($this->once())
+ ->method('get')
+ ->with('core', $lang)
+ ->willReturn($l);
+ $event->expects($this->once())
+ ->method('getSubject')
+ ->willReturn('unrelated');
+
+ $this->expectException(InvalidArgumentException::class);
+ $this->provider->parse($lang, $event);
+ }
+
+}
diff --git a/apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php b/apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php
index 36e85ec1872..e1a13c89c10 100644
--- a/apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php
+++ b/apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php
@@ -2,7 +2,7 @@
/**
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* Two-factor backup codes
*
@@ -23,21 +23,27 @@
namespace OCA\TwoFactorBackupCodes\Test\Unit\Activity;
use InvalidArgumentException;
-use OCA\TwoFactorBackupCodes\Activity\GenericProvider;
+use OCA\TwoFactorBackupCodes\Activity\Provider;
use OCP\Activity\IEvent;
use OCP\IL10N;
use OCP\ILogger;
use OCP\IURLGenerator;
use OCP\L10N\IFactory;
+use PHPUnit_Framework_MockObject_MockObject;
use Test\TestCase;
class ProviderTest extends TestCase {
+ /** @var IL10N|PHPUnit_Framework_MockObject_MockObject */
private $l10n;
+
+ /** @var IURLGenerator|PHPUnit_Framework_MockObject_MockObject */
private $urlGenerator;
+
+ /** @var ILogger|PHPUnit_Framework_MockObject_MockObject */
private $logger;
- /** @var GenericProvider */
+ /** @var Provider */
private $provider;
protected function setUp() {
@@ -47,15 +53,15 @@ class ProviderTest extends TestCase {
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->logger = $this->createMock(ILogger::class);
- $this->provider = new GenericProvider($this->l10n, $this->urlGenerator, $this->logger);
+ $this->provider = new Provider($this->l10n, $this->urlGenerator, $this->logger);
}
public function testParseUnrelated() {
$lang = 'ru';
$event = $this->createMock(IEvent::class);
$event->expects($this->once())
- ->method('getType')
- ->will($this->returnValue('comments'));
+ ->method('getApp')
+ ->willReturn('comments');
$this->setExpectedException(InvalidArgumentException::class);
$this->provider->parse($lang, $event);
@@ -63,8 +69,7 @@ class ProviderTest extends TestCase {
public function subjectData() {
return [
- ['twofactor_success'],
- ['twofactor_failed'],
+ ['codes_generated'],
];
}
@@ -77,30 +82,50 @@ class ProviderTest extends TestCase {
$l = $this->createMock(IL10N::class);
$event->expects($this->once())
- ->method('getType')
- ->will($this->returnValue('twofactor'));
+ ->method('getApp')
+ ->willReturn('twofactor_backupcodes');
$this->l10n->expects($this->once())
->method('get')
- ->with('core', $lang)
- ->will($this->returnValue($l));
+ ->with('twofactor_backupcodes', $lang)
+ ->willReturn($l);
$this->urlGenerator->expects($this->once())
->method('imagePath')
->with('core', 'actions/password.svg')
- ->will($this->returnValue('path/to/image'));
+ ->willReturn('path/to/image');
$this->urlGenerator->expects($this->once())
->method('getAbsoluteURL')
->with('path/to/image')
- ->will($this->returnValue('absolute/path/to/image'));
+ ->willReturn('absolute/path/to/image');
$event->expects($this->once())
->method('setIcon')
->with('absolute/path/to/image');
$event->expects($this->once())
->method('getSubject')
- ->will($this->returnValue($subject));
+ ->willReturn($subject);
$event->expects($this->once())
->method('setParsedSubject');
$this->provider->parse($lang, $event);
}
+ public function testParseInvalidSubject() {
+ $lang = 'ru';
+ $l = $this->createMock(IL10N::class);
+ $event = $this->createMock(IEvent::class);
+
+ $event->expects($this->once())
+ ->method('getApp')
+ ->willReturn('twofactor_backupcodes');
+ $this->l10n->expects($this->once())
+ ->method('get')
+ ->with('twofactor_backupcodes', $lang)
+ ->willReturn($l);
+ $event->expects($this->once())
+ ->method('getSubject')
+ ->willReturn('unrelated');
+
+ $this->expectException(InvalidArgumentException::class);
+ $this->provider->parse($lang, $event);
+ }
+
}
diff --git a/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php b/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php
index 54738f74600..109db7f688c 100644
--- a/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php
+++ b/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php
@@ -31,23 +31,24 @@ use OCP\ILogger;
use OCP\IUser;
use OCP\Security\IHasher;
use OCP\Security\ISecureRandom;
+use PHPUnit_Framework_MockObject_MockObject;
use Test\TestCase;
class BackupCodeStorageTest extends TestCase {
- /** @var BackupCodeMapper|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var BackupCodeMapper|PHPUnit_Framework_MockObject_MockObject */
private $mapper;
- /** @var ISecureRandom|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var ISecureRandom|PHPUnit_Framework_MockObject_MockObject */
private $random;
- /** @var IHasher|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var IHasher|PHPUnit_Framework_MockObject_MockObject */
private $hasher;
- /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var IManager|PHPUnit_Framework_MockObject_MockObject */
private $activityManager;
- /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var ILogger|PHPUnit_Framework_MockObject_MockObject */
private $logger;
/** @var BackupCodeStorage */
@@ -56,11 +57,9 @@ class BackupCodeStorageTest extends TestCase {
protected function setUp() {
parent::setUp();
- $this->mapper = $this->getMockBuilder(BackupCodeMapper::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->random = $this->getMockBuilder(ISecureRandom::class)->getMock();
- $this->hasher = $this->getMockBuilder(IHasher::class)->getMock();
+ $this->mapper = $this->createMock(BackupCodeMapper::class);
+ $this->random = $this->createMock(ISecureRandom::class);
+ $this->hasher = $this->createMock(IHasher::class);
$this->activityManager = $this->createMock(IManager::class);
$this->logger = $this->createMock(ILogger::class);
@@ -68,7 +67,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testCreateCodes() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$number = 5;
$event = $this->createMock(IEvent::class);
@@ -77,7 +76,7 @@ class BackupCodeStorageTest extends TestCase {
->will($this->returnValue('fritz'));
$this->random->expects($this->exactly($number))
->method('generate')
- ->with(10, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
+ ->with(16, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
->will($this->returnValue('CODEABCDEF'));
$this->hasher->expects($this->exactly($number))
->method('hash')
@@ -121,7 +120,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testHasBackupCodes() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$codes = [
new BackupCode(),
new BackupCode(),
@@ -136,7 +135,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testHasBackupCodesNoCodes() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$codes = [];
$this->mapper->expects($this->once())
@@ -148,7 +147,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testGetBackupCodeState() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$code1 = new BackupCode();
$code1->setUsed(1);
@@ -173,7 +172,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testGetBackupCodeDisabled() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$codes = [];
@@ -191,7 +190,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testValidateCode() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$code = new BackupCode();
$code->setUsed(0);
$code->setCode('HASHEDVALUE');
@@ -217,7 +216,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testValidateUsedCode() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$code = new BackupCode();
$code->setUsed('1');
$code->setCode('HASHEDVALUE');
@@ -238,7 +237,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testValidateCodeWithWrongHash() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$code = new BackupCode();
$code->setUsed(0);
$code->setCode('HASHEDVALUE');
diff --git a/apps/user_ldap/img/app-dark.svg b/apps/user_ldap/img/app-dark.svg
new file mode 100644
index 00000000000..54939fab4f2
--- /dev/null
+++ b/apps/user_ldap/img/app-dark.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" viewBox="0 0 16 16">
+ <path style="block-progression:tb;color:#000000;text-transform:none;text-indent:0" fill="#000" d="m8.4036 1c-1.7312 0-3.1998 1.2661-3.1998 2.9 0.012287 0.51643 0.058473 1.1532 0.36664 2.5v0.033333l0.033328 0.033333c0.098928 0.28338 0.24289 0.44549 0.4333 0.66666s0.41742 0.48149 0.63328 0.69999c0.025397 0.025708 0.041676 0.041633 0.066656 0.066677 0.04281 0.18631 0.094672 0.38681 0.13332 0.56666 0.10284 0.47851 0.092296 0.81737 0.066668 0.93332-0.74389 0.26121-1.6694 0.57228-2.4998 0.93332-0.46622 0.2027-0.8881 0.3837-1.2332 0.59999-0.34513 0.2163-0.68837 0.37971-0.79994 0.86666-0.16004 0.63293-0.19866 0.7539-0.39997 1.5333-0.027212 0.20914 0.083011 0.42961 0.26665 0.53333 1.5078 0.81451 3.824 1.1423 6.1329 1.1333s4.6066-0.35609 6.0662-1.1333c0.11739-0.07353 0.14304-0.10869 0.13332-0.2333-0.04365-0.68908-0.08154-1.3669-0.13332-1.7666-0.01807-0.09908-0.06492-0.19275-0.13332-0.26666-0.46366-0.5537-1.1564-0.89218-1.9665-1.2333-0.7396-0.31144-1.6067-0.63486-2.4665-0.99999-0.048123-0.10721-0.095926-0.41912 0-0.89999 0.025759-0.12912 0.066096-0.26742 0.099994-0.4 0.0808-0.090507 0.14378-0.16447 0.23332-0.26666 0.19096-0.21796 0.39614-0.44661 0.56662-0.66666s0.30996-0.40882 0.39997-0.66666l0.03333-0.033333c0.34839-1.4062 0.34857-1.9929 0.36664-2.5v-0.033333c0-1.6339-1.4686-2.9-3.1998-2.9z"/>
+</svg>
diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js
index cbbe871d9cc..d07010761eb 100644
--- a/apps/user_ldap/l10n/fr.js
+++ b/apps/user_ldap/l10n/fr.js
@@ -10,7 +10,7 @@ OC.L10N.register(
"No action specified" : "Aucune action spécifiée",
"No configuration specified" : "Aucune configuration spécifiée",
"No data specified" : "Aucune donnée spécifiée",
- " Could not set configuration %s" : "Impossible de spécifier la configuration %s",
+ " Could not set configuration %s" : "Impossible d'appliquer la configuration %s",
"Action does not exist" : "L'action n'existe pas",
"The Base DN appears to be wrong" : "Le DN de base est erroné",
"Testing configuration…" : "Test de configuration",
@@ -36,7 +36,7 @@ OC.L10N.register(
"LDAP Operations error. Anonymous bind might not be allowed." : "Erreur LDAP. La connexion anonyme au serveur n'est probablement pas acceptée.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "La sauvegarde a échoué. Veuillez vérifier que la base de données est opérationnelle. Rechargez avant de poursuivre.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Changer de mode activera les requêtes LDAP automatiques. Selon la taille de votre annuaire LDAP, cela peut prendre du temps. Voulez-vous toujours changer de mode ?",
- "Mode switch" : "Changer de mode",
+ "Mode switch" : "Basculer de mode",
"Select attributes" : "Sélectionner les attributs",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utilisateur introuvable. Veuillez vérifier les attributs de login et le nom d'utilisateur. Filtre effectif (à copier-coller pour valider en ligne de commande):<br/>",
"User found and settings verified." : "Utilisateur trouvé et paramètres vérifiés.",
@@ -122,7 +122,7 @@ OC.L10N.register(
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Non recommandé, à utiliser à des fins de tests uniquement. Si la connexion ne fonctionne qu'avec cette option, importez le certificat SSL du serveur LDAP dans le serveur %s.",
"Cache Time-To-Live" : "Durée de vie du cache (TTL)",
"in seconds. A change empties the cache." : "en secondes. Tout changement vide le cache.",
- "Directory Settings" : "Paramètres du répertoire",
+ "Directory Settings" : "Paramètres du dossier",
"User Display Name Field" : "Champ \"nom d'affichage\" de l'utilisateur",
"The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage de l'utilisateur.",
"2nd User Display Name Field" : "Second attribut pour le nom d'affichage",
diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json
index e31c5f7fbe2..72feb90e314 100644
--- a/apps/user_ldap/l10n/fr.json
+++ b/apps/user_ldap/l10n/fr.json
@@ -8,7 +8,7 @@
"No action specified" : "Aucune action spécifiée",
"No configuration specified" : "Aucune configuration spécifiée",
"No data specified" : "Aucune donnée spécifiée",
- " Could not set configuration %s" : "Impossible de spécifier la configuration %s",
+ " Could not set configuration %s" : "Impossible d'appliquer la configuration %s",
"Action does not exist" : "L'action n'existe pas",
"The Base DN appears to be wrong" : "Le DN de base est erroné",
"Testing configuration…" : "Test de configuration",
@@ -34,7 +34,7 @@
"LDAP Operations error. Anonymous bind might not be allowed." : "Erreur LDAP. La connexion anonyme au serveur n'est probablement pas acceptée.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "La sauvegarde a échoué. Veuillez vérifier que la base de données est opérationnelle. Rechargez avant de poursuivre.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Changer de mode activera les requêtes LDAP automatiques. Selon la taille de votre annuaire LDAP, cela peut prendre du temps. Voulez-vous toujours changer de mode ?",
- "Mode switch" : "Changer de mode",
+ "Mode switch" : "Basculer de mode",
"Select attributes" : "Sélectionner les attributs",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utilisateur introuvable. Veuillez vérifier les attributs de login et le nom d'utilisateur. Filtre effectif (à copier-coller pour valider en ligne de commande):<br/>",
"User found and settings verified." : "Utilisateur trouvé et paramètres vérifiés.",
@@ -120,7 +120,7 @@
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Non recommandé, à utiliser à des fins de tests uniquement. Si la connexion ne fonctionne qu'avec cette option, importez le certificat SSL du serveur LDAP dans le serveur %s.",
"Cache Time-To-Live" : "Durée de vie du cache (TTL)",
"in seconds. A change empties the cache." : "en secondes. Tout changement vide le cache.",
- "Directory Settings" : "Paramètres du répertoire",
+ "Directory Settings" : "Paramètres du dossier",
"User Display Name Field" : "Champ \"nom d'affichage\" de l'utilisateur",
"The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage de l'utilisateur.",
"2nd User Display Name Field" : "Second attribut pour le nom d'affichage",
diff --git a/apps/user_ldap/l10n/id.js b/apps/user_ldap/l10n/id.js
index 8c62d7df617..7f256c26649 100644
--- a/apps/user_ldap/l10n/id.js
+++ b/apps/user_ldap/l10n/id.js
@@ -40,12 +40,15 @@ OC.L10N.register(
"Select attributes" : "Pilih atribut",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Pengguna tidak ditemukan. Mohon periksa atribut login dan nama pengguna Anda. Penyaring efektif (salin dan tempel berikut untuk validasi baris perintah):\n<br/>",
"User found and settings verified." : "Pengguna ditemukan dan pengaturan terverifikasi.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Pengaturan terverifikasi, tapi lebih dari satu pengguna ditemukan. Hanya pengguna pertama yang dapat masuk log. Pertimbangkan lebih mempersempit penyaringan.",
"An unspecified error occurred. Please check the settings and the log." : "Terjadi kesalahan yang tidak disebutkan. Mohon periksa pengaturan dan log.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Penyaring pencarian tidak sah, kemungkinan karena masalah sintaks seperti jumlah kurung buka dan tutup tidak sama. Mohon diperiksa.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Terjadi kesalahan sambungan ke LDAP / AD, mohon periksa host, port dan kredensial.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Placeholder %uid tidak ada. Placeholder akan digantikan dengan nama login saat melakukan kueri LDAP / AD.",
"Please provide a login name to test against" : "Mohon berikan nama login untuk mengujinya kembali",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kotak grup telah dinonaktifkan, karena server LDAP / AD tidak mendukung keanggotaan.",
+ "Password change rejected. Hint: " : "Perubahan sandi ditolak. Petunjuk:",
+ "LDAP / AD integration" : "Integrasi LDAP / AD",
"_%s group found_::_%s groups found_" : ["%s grup ditemukan"],
"_%s user found_::_%s users found_" : ["%s pengguna ditemukan"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Tidak mendeteksi atribut nama tampilan pengguna. Silakan menentukannya sendiri di pengaturan ldap lanjutan.",
@@ -140,6 +143,9 @@ OC.L10N.register(
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Ketika dihidupkan, grup yang berisi grup akan didukung. (Hanya bekerja jika atribut anggota grup berisi DN.)",
"Paging chunksize" : "Paging chunksize",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize digunakan untuk pencarian paged LDAP yang mengembalikan hasil secara massal seperti enumerasi pengguna dan grup. (Atur dengan nilai 0 untuk menonaktifkan pencarian paged LDAP dalam situasi tersebut.)",
+ "Enable LDAP password changes per user" : "Aktifkan perubahan sandi LDAP per pengguna",
+ "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Perbolehkan pengguna LDAP mengubah sandi mereka dan perbolehkan Administrator Super dan Administrator Grup untuk mengubah sandi pengguna LDAP mereka. Hanya bekerja ketika kebijaksanaan akses kontrol terconfigurasi berdasarkan server LDAP. Sebagaimana sandi dikirim dalam plain teks ke server LDAP, pengiriman enkripsi harus digunakan dan hashing sandi harus terkonfigurasi di server LDAP.",
+ "(New password is sent as plain text to LDAP)" : "(Sandi baru dikirim sebagai plain teks ke LDAP)",
"Special Attributes" : "Atribut Khusus",
"Quota Field" : "Kolom Kuota",
"Quota Default" : "Kuota Baku",
diff --git a/apps/user_ldap/l10n/id.json b/apps/user_ldap/l10n/id.json
index a356fdac06b..7fc32321558 100644
--- a/apps/user_ldap/l10n/id.json
+++ b/apps/user_ldap/l10n/id.json
@@ -38,12 +38,15 @@
"Select attributes" : "Pilih atribut",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Pengguna tidak ditemukan. Mohon periksa atribut login dan nama pengguna Anda. Penyaring efektif (salin dan tempel berikut untuk validasi baris perintah):\n<br/>",
"User found and settings verified." : "Pengguna ditemukan dan pengaturan terverifikasi.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Pengaturan terverifikasi, tapi lebih dari satu pengguna ditemukan. Hanya pengguna pertama yang dapat masuk log. Pertimbangkan lebih mempersempit penyaringan.",
"An unspecified error occurred. Please check the settings and the log." : "Terjadi kesalahan yang tidak disebutkan. Mohon periksa pengaturan dan log.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Penyaring pencarian tidak sah, kemungkinan karena masalah sintaks seperti jumlah kurung buka dan tutup tidak sama. Mohon diperiksa.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Terjadi kesalahan sambungan ke LDAP / AD, mohon periksa host, port dan kredensial.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Placeholder %uid tidak ada. Placeholder akan digantikan dengan nama login saat melakukan kueri LDAP / AD.",
"Please provide a login name to test against" : "Mohon berikan nama login untuk mengujinya kembali",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kotak grup telah dinonaktifkan, karena server LDAP / AD tidak mendukung keanggotaan.",
+ "Password change rejected. Hint: " : "Perubahan sandi ditolak. Petunjuk:",
+ "LDAP / AD integration" : "Integrasi LDAP / AD",
"_%s group found_::_%s groups found_" : ["%s grup ditemukan"],
"_%s user found_::_%s users found_" : ["%s pengguna ditemukan"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Tidak mendeteksi atribut nama tampilan pengguna. Silakan menentukannya sendiri di pengaturan ldap lanjutan.",
@@ -138,6 +141,9 @@
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Ketika dihidupkan, grup yang berisi grup akan didukung. (Hanya bekerja jika atribut anggota grup berisi DN.)",
"Paging chunksize" : "Paging chunksize",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize digunakan untuk pencarian paged LDAP yang mengembalikan hasil secara massal seperti enumerasi pengguna dan grup. (Atur dengan nilai 0 untuk menonaktifkan pencarian paged LDAP dalam situasi tersebut.)",
+ "Enable LDAP password changes per user" : "Aktifkan perubahan sandi LDAP per pengguna",
+ "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Perbolehkan pengguna LDAP mengubah sandi mereka dan perbolehkan Administrator Super dan Administrator Grup untuk mengubah sandi pengguna LDAP mereka. Hanya bekerja ketika kebijaksanaan akses kontrol terconfigurasi berdasarkan server LDAP. Sebagaimana sandi dikirim dalam plain teks ke server LDAP, pengiriman enkripsi harus digunakan dan hashing sandi harus terkonfigurasi di server LDAP.",
+ "(New password is sent as plain text to LDAP)" : "(Sandi baru dikirim sebagai plain teks ke LDAP)",
"Special Attributes" : "Atribut Khusus",
"Quota Field" : "Kolom Kuota",
"Quota Default" : "Kuota Baku",
diff --git a/apps/user_ldap/l10n/sq.js b/apps/user_ldap/l10n/sq.js
index dd53169a6bd..2f09cd96511 100644
--- a/apps/user_ldap/l10n/sq.js
+++ b/apps/user_ldap/l10n/sq.js
@@ -46,6 +46,7 @@ OC.L10N.register(
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Vendmbajtësja %uid mungon. Do të zëvendësohet me emrin e hyrjes, kur të kërkohet te LDAP / AD.",
"Please provide a login name to test against" : "Ju lutemi, jepni një emër hyrjesh që të ritestohet",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kutia e grupeve u çaktivizua, ngaqë shërbyesi LDAP / AD nuk mbulon memberOf.",
+ "LDAP / AD integration" : "Integrimi LDAP / AD",
"_%s group found_::_%s groups found_" : ["U gjet %s grup","U gjetën %s grupe"],
"_%s user found_::_%s users found_" : ["U gjet %s përdorues","U gjetën %s përdorues"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "S’u zbulua dot atribut emri përdoruesi në ekran. Ju lutemi, caktojeni ju vetë te rregullime e mëtejshme për LDAP.",
@@ -140,6 +141,7 @@ OC.L10N.register(
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Kur aktivizohet, grupet që përmbajnë grupe mbulohen. (Funksionon vetëm nëse atributi për anëtar grupi përmban DN-ra.)",
"Paging chunksize" : "Madhësi copash faqosjeje",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Madhësi copash të përdorura për kërkime LDAP të sistemuara në faqe, kërkime që japin përfundime të papërpunuara, të tilla si numër përdoruesish ose grupesh. (Caktimi si 0 i çaktivizon kërkimet e faqosura LDAP për këto raste.)",
+ "(New password is sent as plain text to LDAP)" : "(Fjalëkalimi i ri është dërgur si text i thjeshtë te LDAP)",
"Special Attributes" : "Atribute Speciale",
"Quota Field" : "Fushë Kuotash",
"Quota Default" : "Parazgjedhje Kuotash",
diff --git a/apps/user_ldap/l10n/sq.json b/apps/user_ldap/l10n/sq.json
index 135a2f27170..053ae0f5a2d 100644
--- a/apps/user_ldap/l10n/sq.json
+++ b/apps/user_ldap/l10n/sq.json
@@ -44,6 +44,7 @@
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Vendmbajtësja %uid mungon. Do të zëvendësohet me emrin e hyrjes, kur të kërkohet te LDAP / AD.",
"Please provide a login name to test against" : "Ju lutemi, jepni një emër hyrjesh që të ritestohet",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kutia e grupeve u çaktivizua, ngaqë shërbyesi LDAP / AD nuk mbulon memberOf.",
+ "LDAP / AD integration" : "Integrimi LDAP / AD",
"_%s group found_::_%s groups found_" : ["U gjet %s grup","U gjetën %s grupe"],
"_%s user found_::_%s users found_" : ["U gjet %s përdorues","U gjetën %s përdorues"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "S’u zbulua dot atribut emri përdoruesi në ekran. Ju lutemi, caktojeni ju vetë te rregullime e mëtejshme për LDAP.",
@@ -138,6 +139,7 @@
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Kur aktivizohet, grupet që përmbajnë grupe mbulohen. (Funksionon vetëm nëse atributi për anëtar grupi përmban DN-ra.)",
"Paging chunksize" : "Madhësi copash faqosjeje",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Madhësi copash të përdorura për kërkime LDAP të sistemuara në faqe, kërkime që japin përfundime të papërpunuara, të tilla si numër përdoruesish ose grupesh. (Caktimi si 0 i çaktivizon kërkimet e faqosura LDAP për këto raste.)",
+ "(New password is sent as plain text to LDAP)" : "(Fjalëkalimi i ri është dërgur si text i thjeshtë te LDAP)",
"Special Attributes" : "Atribute Speciale",
"Quota Field" : "Fushë Kuotash",
"Quota Default" : "Parazgjedhje Kuotash",
diff --git a/apps/user_ldap/l10n/sv.js b/apps/user_ldap/l10n/sv.js
index aba8488f0d1..9a1768fe01e 100644
--- a/apps/user_ldap/l10n/sv.js
+++ b/apps/user_ldap/l10n/sv.js
@@ -44,6 +44,7 @@ OC.L10N.register(
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ett anslutningsfel till LDAP / AD uppstod. Var god granska värd, port och inloggningsuppgifter.",
"Please provide a login name to test against" : "Vänligen ange ett inloggningsnamn att försöka ansluta med",
"Password change rejected. Hint: " : "Lösenordsbyte nekad. Anledning/tips: ",
+ "LDAP / AD integration" : "LDAP / AD integration",
"_%s group found_::_%s groups found_" : ["%s grupp hittad","%s grupper hittade"],
"_%s user found_::_%s users found_" : ["%s användare hittad","%s användare hittade"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunde inte upptäcka attributet användarvisningsnamn. Vänligen ange det själv i de avancerade LDAP-inställningarna.",
diff --git a/apps/user_ldap/l10n/sv.json b/apps/user_ldap/l10n/sv.json
index 8f5b48cbf7e..a4019761f96 100644
--- a/apps/user_ldap/l10n/sv.json
+++ b/apps/user_ldap/l10n/sv.json
@@ -42,6 +42,7 @@
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ett anslutningsfel till LDAP / AD uppstod. Var god granska värd, port och inloggningsuppgifter.",
"Please provide a login name to test against" : "Vänligen ange ett inloggningsnamn att försöka ansluta med",
"Password change rejected. Hint: " : "Lösenordsbyte nekad. Anledning/tips: ",
+ "LDAP / AD integration" : "LDAP / AD integration",
"_%s group found_::_%s groups found_" : ["%s grupp hittad","%s grupper hittade"],
"_%s user found_::_%s users found_" : ["%s användare hittad","%s användare hittade"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunde inte upptäcka attributet användarvisningsnamn. Vänligen ange det själv i de avancerade LDAP-inställningarna.",
diff --git a/apps/user_ldap/lib/Settings/Section.php b/apps/user_ldap/lib/Settings/Section.php
index 82d8d0c84fa..86d293d3879 100644
--- a/apps/user_ldap/lib/Settings/Section.php
+++ b/apps/user_ldap/lib/Settings/Section.php
@@ -24,13 +24,21 @@
namespace OCA\User_LDAP\Settings;
use OCP\IL10N;
-use OCP\Settings\ISection;
+use OCP\IURLGenerator;
+use OCP\Settings\IIconSection;
-class Section implements ISection {
+class Section implements IIconSection {
/** @var IL10N */
private $l;
+ /** @var IURLGenerator */
+ private $url;
- public function __construct(IL10N $l) {
+ /**
+ * @param IURLGenerator $url
+ * @param IL10N $l
+ */
+ public function __construct(IURLGenerator $url, IL10N $l) {
+ $this->url = $url;
$this->l = $l;
}
@@ -64,4 +72,11 @@ class Section implements ISection {
public function getPriority() {
return 25;
}
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getIcon() {
+ return $this->url->imagePath('user_ldap', 'app-dark.svg');
+ }
}
diff --git a/apps/user_ldap/tests/Settings/SectionTest.php b/apps/user_ldap/tests/Settings/SectionTest.php
index 2d2165b8e56..5f565e89933 100644
--- a/apps/user_ldap/tests/Settings/SectionTest.php
+++ b/apps/user_ldap/tests/Settings/SectionTest.php
@@ -25,19 +25,24 @@ namespace OCA\User_LDAP\Tests\Settings;
use OCA\User_LDAP\Settings\Section;
use OCP\IL10N;
+use OCP\IURLGenerator;
use Test\TestCase;
class SectionTest extends TestCase {
- /** @var IL10N */
+ /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
+ private $url;
+ /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */
private $l;
/** @var Section */
private $section;
public function setUp() {
parent::setUp();
- $this->l = $this->getMockBuilder('\OCP\IL10N')->getMock();
+ $this->url = $this->createMock(IURLGenerator::class);
+ $this->l = $this->createMock(IL10N::class);
$this->section = new Section(
+ $this->url,
$this->l
);
}
@@ -59,4 +64,13 @@ class SectionTest extends TestCase {
public function testGetPriority() {
$this->assertSame(25, $this->section->getPriority());
}
+
+ public function testGetIcon() {
+ $this->url->expects($this->once())
+ ->method('imagePath')
+ ->with('user_ldap', 'app-dark.svg')
+ ->willReturn('icon');
+
+ $this->assertSame('icon', $this->section->getIcon());
+ }
}
diff --git a/apps/workflowengine/lib/Settings/Section.php b/apps/workflowengine/lib/Settings/Section.php
index df8bb807134..b46f9a4a35f 100644
--- a/apps/workflowengine/lib/Settings/Section.php
+++ b/apps/workflowengine/lib/Settings/Section.php
@@ -24,13 +24,21 @@
namespace OCA\WorkflowEngine\Settings;
use OCP\IL10N;
-use OCP\Settings\ISection;
+use OCP\IURLGenerator;
+use OCP\Settings\IIconSection;
-class Section implements ISection {
+class Section implements IIconSection {
/** @var IL10N */
private $l;
+ /** @var IURLGenerator */
+ private $url;
- public function __construct(IL10N $l) {
+ /**
+ * @param IURLGenerator $url
+ * @param IL10N $l
+ */
+ public function __construct(IURLGenerator $url, IL10N $l) {
+ $this->url = $url;
$this->l = $l;
}
@@ -54,4 +62,11 @@ class Section implements ISection {
public function getPriority() {
return 55;
}
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getIcon() {
+ return $this->url->imagePath('core', 'actions/tag.svg');
+ }
}
diff --git a/bower.json b/bower.json
index b4256b0c7aa..0735f4eb5a0 100644
--- a/bower.json
+++ b/bower.json
@@ -20,6 +20,7 @@
"jquery-migrate": "~1.4.0",
"jquery-ui": "1.10.0",
"jsTimezoneDetect": "~1.0.5",
+ "marked": "^0.3.6",
"moment": "^2.15.0",
"select2": "~3.4.8",
"zxcvbn": "*",
diff --git a/config/config.sample.php b/config/config.sample.php
index a9bb0067e5b..4f018d189da 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -74,8 +74,10 @@ $CONFIG = array(
/**
- * Where user files are stored; this defaults to ``data/`` in the Nextcloud
- * directory. The SQLite database is also stored here, when you use SQLite.
+ * Where user files are stored. The SQLite database is also stored here, when
+ * you use SQLite.
+ *
+ * Default to ``data/`` in the Nextcloud directory.
*/
'datadirectory' => '/var/www/nextcloud/data',
@@ -93,7 +95,8 @@ $CONFIG = array(
* - sqlite (SQLite3)
* - mysql (MySQL/MariaDB)
* - pgsql (PostgreSQL)
- * - oci (Oracle)
+ *
+ * Defaults to ``sqlite``
*/
'dbtype' => 'sqlite',
@@ -126,6 +129,8 @@ $CONFIG = array(
/**
* Prefix for the Nextcloud tables in the database.
+ *
+ * Default to ``oc_``
*/
'dbtableprefix' => '',
@@ -134,6 +139,8 @@ $CONFIG = array(
* Indicates whether the Nextcloud instance was installed successfully; ``true``
* indicates a successful installation, and ``false`` indicates an unsuccessful
* installation.
+ *
+ * Defaults to ``false``
*/
'installed' => false,
@@ -151,6 +158,8 @@ $CONFIG = array(
* French. It overrides automatic language detection on public pages like login
* or shared items. User's language preferences configured under "personal ->
* language" override this setting after they have logged in.
+ *
+ * Defaults to ``en``
*/
'default_language' => 'en',
@@ -160,6 +169,8 @@ $CONFIG = array(
* gallery. You can use a comma-separated list of app names, so if the first
* app is not enabled for a user then Nextcloud will try the second one, and so
* on. If no enabled apps are found it defaults to the Files app.
+ *
+ * Defaults to ``files``
*/
'defaultapp' => 'files',
@@ -173,6 +184,8 @@ $CONFIG = array(
* ``true`` enables avatars, or user profile photos. These appear on the User
* page, on user's Personal pages and are used by some apps (contacts, mail,
* etc). ``false`` disables them.
+ *
+ * Defaults to ``true``
*/
'enable_avatars' => true,
@@ -183,21 +196,25 @@ $CONFIG = array(
'allow_user_to_change_display_name' => true,
/**
- * Lifetime of the remember login cookie, which is set when the user clicks the
- * ``remember`` checkbox on the login screen. The default is 15 days, expressed
- * in seconds.
+ * Lifetime of the remember login cookie, which is set when the user clicks
+ * the ``remember`` checkbox on the login screen.
+ *
+ * Defaults to ``60*60*24*15`` seconds (15 days)
*/
'remember_login_cookie_lifetime' => 60*60*24*15,
/**
- * The lifetime of a session after inactivity; the default is 24 hours,
- * expressed in seconds.
+ * The lifetime of a session after inactivity.
+ *
+ * Defaults to ``60*60*24`` seconds (24 hours)
*/
'session_lifetime' => 60 * 60 * 24,
/**
* Enable or disable session keep-alive when a user is logged in to the Web UI.
* Enabling this sends a "heartbeat" to the server to keep it from timing out.
+ *
+ * Defaults to ``true``
*/
'session_keepalive' => true,
@@ -205,6 +222,8 @@ $CONFIG = array(
* Enforce token authentication for clients, which blocks requests using the user
* password for enhanced security. Users need to generate tokens in personal settings
* which can be used as passwords on their clients.
+ *
+ * Defaults to ``false``
*/
'token_auth_enforced' => false,
@@ -212,6 +231,8 @@ $CONFIG = array(
* Whether the bruteforce protection shipped with Nextcloud should be enabled or not.
*
* Disabling this is discouraged for security reasons.
+ *
+ * Defaults to ``true``
*/
'auth.bruteforce.protection.enabled' => true,
@@ -219,6 +240,8 @@ $CONFIG = array(
* The directory where the skeleton files are located. These files will be
* copied to the data directory of new users. Leave empty to not copy any
* skeleton files.
+ *
+ * Defaults to ``core/skeleton`` in the Nextcloud directory.
*/
'skeletondirectory' => '/path/to/nextcloud/core/skeleton',
@@ -259,11 +282,15 @@ $CONFIG = array(
/**
* FROM address that overrides the built-in ``sharing-noreply`` and
* ``lostpassword-noreply`` FROM addresses.
+ *
+ * Defaults to different from addresses depending on the feature.
*/
'mail_from_address' => 'nextcloud',
/**
* Enable SMTP class debugging.
+ *
+ * Defaults to ``false``
*/
'mail_smtpdebug' => false,
@@ -282,19 +309,25 @@ $CONFIG = array(
*
* For ``qmail`` the binary is /var/qmail/bin/sendmail, and it must be installed
* on your Unix system.
+ *
+ * Defaults to ``php``
*/
-'mail_smtpmode' => 'sendmail',
+'mail_smtpmode' => 'php',
/**
* This depends on ``mail_smtpmode``. Specify the IP address of your mail
* server host. This may contain multiple hosts separated by a semi-colon. If
* you need to specify the port number append it to the IP address separated by
* a colon, like this: ``127.0.0.1:24``.
+ *
+ * Defaults to ``127.0.0.1``
*/
'mail_smtphost' => '127.0.0.1',
/**
* This depends on ``mail_smtpmode``. Specify the port for sending mail.
+ *
+ * Defaults to ``25``
*/
'mail_smtpport' => 25,
@@ -302,36 +335,48 @@ $CONFIG = array(
* This depends on ``mail_smtpmode``. This sets the SMTP server timeout, in
* seconds. You may need to increase this if you are running an anti-malware or
* spam scanner.
+ *
+ * Defaults to ``10`` seconds
*/
'mail_smtptimeout' => 10,
/**
* This depends on ``mail_smtpmode``. Specify when you are using ``ssl`` or
* ``tls``, or leave empty for no encryption.
+ *
+ * Defaults to ``''`` (empty string)
*/
'mail_smtpsecure' => '',
/**
* This depends on ``mail_smtpmode``. Change this to ``true`` if your mail
* server requires authentication.
+ *
+ * Defaults to ``false``
*/
'mail_smtpauth' => false,
/**
* This depends on ``mail_smtpmode``. If SMTP authentication is required, choose
- * the authentication type as ``LOGIN`` (default) or ``PLAIN``.
+ * the authentication type as ``LOGIN`` or ``PLAIN``.
+ *
+ * Defaults to ``LOGIN``
*/
'mail_smtpauthtype' => 'LOGIN',
/**
* This depends on ``mail_smtpauth``. Specify the username for authenticating to
* the SMTP server.
+ *
+ * Defaults to ``''`` (empty string)
*/
'mail_smtpname' => '',
/**
* This depends on ``mail_smtpauth``. Specify the password for authenticating to
* the SMTP server.
+ *
+ * Default to ``''`` (empty string)
*/
'mail_smtppassword' => '',
@@ -371,6 +416,8 @@ $CONFIG = array(
* expression for the remote IP address. For example, defining a range of IP
* addresses starting with ``10.0.0.`` and ending with 1 to 3:
* ``^10\.0\.0\.[1-3]$``
+ *
+ * Defaults to ``''`` (empty string)
*/
'overwritecondaddr' => '',
@@ -379,6 +426,8 @@ $CONFIG = array(
* are generated within Nextcloud using any kind of command line tools (cron or
* occ). The value should contain the full base URL:
* ``https://www.example.com/nextcloud``
+ *
+ * Defaults to ``''`` (empty string)
*/
'overwrite.cli.url' => '',
@@ -404,6 +453,8 @@ $CONFIG = array(
*
* - `mod_rewrite` is installed
* - `mod_env` is installed
+ *
+ * Defaults to ``''`` (empty string)
*/
'htaccess.RewriteBase' => '/',
@@ -420,12 +471,16 @@ $CONFIG = array(
/**
* The URL of your proxy server, for example ``proxy.example.com:8081``.
+ *
+ * Defaults to ``''`` (empty string)
*/
'proxy' => '',
/**
* The optional authentication for the proxy to use to connect to the internet.
* The format is: ``username:password``.
+ *
+ * Defaults to ``''`` (empty string)
*/
'proxyuserpwd' => '',
@@ -466,6 +521,8 @@ $CONFIG = array(
* delete when exceeds D2 days
* * ``disabled``
* trash bin auto clean disabled, files and folders will be kept forever
+ *
+ * Defaults to ``auto``
*/
'trashbin_retention_obligation' => 'auto',
@@ -505,6 +562,8 @@ $CONFIG = array(
* keep versions for at least D1 days and delete when exceeds D2 days
* * ``disabled``
* versions auto clean disabled, versions will be kept forever
+ *
+ * Defaults to ``auto``
*/
'versions_retention_obligation' => 'auto',
@@ -519,17 +578,23 @@ $CONFIG = array(
* Checks an app before install whether it uses private APIs instead of the
* proper public APIs. If this is set to true it will only allow to install or
* enable apps that pass this check.
+ *
+ * Defaults to ``false``
*/
'appcodechecker' => true,
/**
* Check if Nextcloud is up-to-date and shows a notification if a new version is
* available.
+ *
+ * Defaults to ``true``
*/
'updatechecker' => true,
/**
* URL that Nextcloud should use to look for updates
+ *
+ * Defaults to ``https://updates.nextcloud.com/updater_server/``
*/
'updater.server.url' => 'https://updates.nextcloud.com/updater_server/',
@@ -538,7 +603,7 @@ $CONFIG = array(
*
* Supported values:
* - ``daily``
- * - ``beta`
+ * - ``beta``
* - ``stable``
* - ``production``
*/
@@ -546,6 +611,8 @@ $CONFIG = array(
/**
* Is Nextcloud connected to the Internet or running in a closed network?
+ *
+ * Defaults to ``true``
*/
'has_internet_connection' => true,
@@ -559,6 +626,8 @@ $CONFIG = array(
* Allows Nextcloud to verify a working .well-known URL redirects. This is done
* by attempting to make a request from JS to
* https://your-domain.com/.well-known/caldav/
+ *
+ * Defaults to ``true``
*/
'check_for_working_wellknown_setup' => true,
@@ -568,6 +637,8 @@ $CONFIG = array(
* If it is not, then any options controlled by ``.htaccess``, such as large
* file uploads, will not work. It also runs checks on the ``data/`` directory,
* which verifies that it can't be accessed directly through the Web server.
+ *
+ * Defaults to ``true``
*/
'check_for_working_htaccess' => true,
@@ -578,6 +649,8 @@ $CONFIG = array(
* all options via the Web interface. Furthermore, when updating Nextcloud
* it is required to make the configuration file writable again for the update
* process.
+ *
+ * Defaults to ``false``
*/
'config_is_read_only' => false,
@@ -591,11 +664,14 @@ $CONFIG = array(
* If syslogging is desired, set this parameter to ``syslog``.
* Setting this parameter to ``errorlog`` will use the PHP error_log function
* for logging.
+ *
+ * Defaults to ``file``
*/
'log_type' => 'file',
/**
* Log file path for the Nextcloud logging type.
+ *
* Defaults to ``[datadirectory]/nextcloud.log``
*/
'logfile' => '/var/log/nextcloud.log',
@@ -603,6 +679,8 @@ $CONFIG = array(
/**
* Loglevel to start logging at. Valid values are: 0 = Debug, 1 = Info, 2 =
* Warning, 3 = Error, and 4 = Fatal. The default value is Warning.
+ *
+ * Defaults to ``2``
*/
'loglevel' => 2,
@@ -637,12 +715,16 @@ $CONFIG = array(
/**
* This uses PHP.date formatting; see http://php.net/manual/en/function.date.php
+ *
+ * Defaults to ``Y-m-d\TH:i:sO`` (ISO8601)
*/
'logdateformat' => 'F d, Y H:i:s',
/**
- * The default timezone for logfiles is UTC. You may change this; see
+ * The timezone for logfiles. You may change this; see
* http://php.net/manual/en/timezones.php
+ *
+ * Defaults to ``UTC``
*/
'logtimezone' => 'Europe/Berlin',
@@ -654,6 +736,8 @@ $CONFIG = array(
/**
* Log successful cron runs.
+ *
+ * Defaults to ``true``
*/
'cron_log' => true,
@@ -663,6 +747,8 @@ $CONFIG = array(
* = 100 * 1024 * 1024 bytes). A new logfile is created with a new name when the
* old logfile reaches your limit. If a rotated log file is already present, it
* will be overwritten.
+ *
+ * Defaults to ``0`` (no rotation)
*/
'log_rotate_size' => false,
@@ -676,6 +762,11 @@ $CONFIG = array(
/**
* This section is for configuring the download links for Nextcloud clients, as
* seen in the first-run wizard and on Personal pages.
+ *
+ * Defaults to
+ * * Desktop client: ``https://nextcloud.com/install/#install-clients``
+ * * Android client: ``https://play.google.com/store/apps/details?id=com.nextcloud.client``
+ * * iOS client : ``https://itunes.apple.com/us/app/nextcloud/id1125420102?mt=8``
*/
'customclient_desktop' =>
'https://nextcloud.com/install/#install-clients',
@@ -692,6 +783,8 @@ $CONFIG = array(
/**
* When enabled, admins may install apps from the Nextcloud app store.
+ *
+ * Defaults to ``true``
*/
'appstoreenabled' => true,
@@ -733,16 +826,22 @@ $CONFIG = array(
*
* Valid values are ``true``, to enable previews, or
* ``false``, to disable previews
+ *
+ * Defaults to ``true``
*/
'enable_previews' => true,
/**
* The maximum width, in pixels, of a preview. A value of ``null`` means there
* is no limit.
+ *
+ * Defaults to ``2048``
*/
'preview_max_x' => 2048,
/**
* The maximum height, in pixels, of a preview. A value of ``null`` means there
* is no limit.
+ *
+ * Defaults to ``2048``
*/
'preview_max_y' => 2048,
/**
@@ -750,26 +849,30 @@ $CONFIG = array(
* preview system generates blurry previews, you might want to consider setting
* a maximum scale factor. By default, pictures are upscaled to 10 times the
* original size. A value of ``1`` or ``null`` disables scaling.
+ *
+ * Defaults to ``2``
*/
'preview_max_scale_factor' => 10,
/**
* max file size for generating image previews with imagegd (default behaviour)
- * If the image is bigger, it'll try other preview generators,
- * but will most likely show the default mimetype icon
+ * If the image is bigger, it'll try other preview generators, but will most
+ * likely show the default mimetype icon. Set to -1 for no limit.
*
- * Value represents the maximum filesize in megabytes
- * Default is 50
- * Set to -1 for no limit
+ * Defaults to ``50`` megabytes
*/
'preview_max_filesize_image' => 50,
/**
* custom path for LibreOffice/OpenOffice binary
+ *
+ * Defaults to ``''`` (empty string)
*/
'preview_libreoffice_path' => '/usr/bin/libreoffice',
/**
* Use this if LibreOffice/OpenOffice requires additional arguments.
+ *
+ * Defaults to ``''`` (empty string)
*/
'preview_office_cl_parameters' =>
' --headless --nologo --nofirststartwizard --invisible --norestore '.
@@ -778,17 +881,6 @@ $CONFIG = array(
/**
* Only register providers that have been explicitly enabled
*
- * The following providers are enabled by default:
- *
- * - OC\Preview\PNG
- * - OC\Preview\JPEG
- * - OC\Preview\GIF
- * - OC\Preview\BMP
- * - OC\Preview\XBitmap
- * - OC\Preview\MarkDown
- * - OC\Preview\MP3
- * - OC\Preview\TXT
- *
* The following providers are disabled by default due to performance or privacy
* concerns:
*
@@ -818,6 +910,17 @@ $CONFIG = array(
* - OC\Preview\MSOffice2007
* - OC\Preview\OpenDocument
* - OC\Preview\StarOffice
+ *
+ * Defaults to the following providers:
+ *
+ * - OC\Preview\BMP
+ * - OC\Preview\GIF
+ * - OC\Preview\JPEG
+ * - OC\Preview\MarkDown
+ * - OC\Preview\MP3
+ * - OC\Preview\PNG
+ * - OC\Preview\TXT
+ * - OC\Preview\XBitmap
*/
'enabledPreviewProviders' => array(
'OC\Preview\PNG',
@@ -841,6 +944,8 @@ $CONFIG = array(
* existence and marks them as ready to be cleaned up. The number is always
* minutes. Setting it to 0 disables the feature.
* See command line (occ) methods ``ldap:show-remnants`` and ``user:delete``
+ *
+ * Defaults to ``51`` minutes
*/
'ldapUserCleanupInterval' => 51,
@@ -854,6 +959,8 @@ $CONFIG = array(
* Replaces the default Comments Manager Factory. This can be utilized if an
* own or 3rdParty CommentsManager should be used that – for instance – uses the
* filesystem instead of the database to keep the comments.
+ *
+ * Defaults to ``\OC\Comments\ManagerFactory``
*/
'comments.managerFactory' => '\OC\Comments\ManagerFactory',
@@ -861,6 +968,8 @@ $CONFIG = array(
* Replaces the default System Tags Manager Factory. This can be utilized if an
* own or 3rdParty SystemTagsManager should be used that – for instance – uses the
* filesystem instead of the database to keep the comments.
+ *
+ * Defaults to ``\OC\SystemTag\ManagerFactory``
*/
'systemtags.managerFactory' => '\OC\SystemTag\ManagerFactory',
@@ -878,12 +987,16 @@ $CONFIG = array(
* doing some maintenance work, you need to set the value of the maintenance
* parameter to true. Please keep in mind that users who are already logged-in
* are kicked out of Nextcloud instantly.
+ *
+ * Defaults to ``false``
*/
'maintenance' => false,
/**
* When set to ``true``, the Nextcloud instance will be unavailable for all
* users who are not in the ``admin`` group.
+ *
+ * Defaults to ``false``
*/
'singleuser' => false,
@@ -894,6 +1007,8 @@ $CONFIG = array(
/**
* Extra SSL options to be used for configuration.
+ *
+ * Defaults to an empty array.
*/
'openssl' => array(
'config' => '/absolute/location/of/openssl.cnf',
@@ -927,6 +1042,8 @@ $CONFIG = array(
* Memory caching backend for locally stored data
*
* * Used for host-specific data, e.g. file paths
+ *
+ * Defaults to ``none``
*/
'memcache.local' => '\OC\Memcache\APCu',
@@ -935,6 +1052,8 @@ $CONFIG = array(
*
* * Used for installation-specific data, e.g. database caching
* * If unset, defaults to the value of memcache.local
+ *
+ * Defaults to ``none``
*/
'memcache.distributed' => '\OC\Memcache\Memcached',
@@ -994,6 +1113,8 @@ $CONFIG = array(
* ``$user`` is the current user. When specified, the format will change to
* ``$cache_path/$user`` where ``$cache_path`` is the configured cache directory
* and ``$user`` is the user.
+ *
+ * Defaults to ``''`` (empty string)
*/
'cache_path' => '',
@@ -1002,8 +1123,10 @@ $CONFIG = array(
* garbage collection (in seconds). Increase this value if users have
* issues uploading very large files via the Nextcloud Client as upload isn't
* completed within one day.
+ *
+ * Defaults to ``60*60*24`` (1 day)
*/
-'cache_chunk_gc_ttl' => 86400, // 60*60*24 = 1 day
+'cache_chunk_gc_ttl' => 60*60*24,
/**
* Using Object Store with Nextcloud
@@ -1065,6 +1188,8 @@ $CONFIG = array(
* Replaces the default Share Provider Factory. This can be utilized if
* own or 3rdParty Share Providers be used that – for instance – uses the
* filesystem instead of the database to keep the share information.
+ *
+ * Defaults to ``\OC\Share20\ProviderFactory``
*/
'sharing.managerFactory' => '\OC\Share20\ProviderFactory',
@@ -1125,6 +1250,11 @@ $CONFIG = array(
* - mysql (MySQL)
* - pgsql (PostgreSQL)
* - oci (Oracle)
+ *
+ * Defaults to the following databases:
+ * - sqlite (SQLite3)
+ * - mysql (MySQL)
+ * - pgsql (PostgreSQL)
*/
'supportedDatabases' => array(
'sqlite',
@@ -1153,17 +1283,23 @@ $CONFIG = array(
* Blacklist a specific file or files and disallow the upload of files
* with this name. ``.htaccess`` is blocked by default.
* WARNING: USE THIS ONLY IF YOU KNOW WHAT YOU ARE DOING.
+ *
+ * Defaults to ``array('.htaccess')``
*/
'blacklisted_files' => array('.htaccess'),
/**
* Define a default folder for shared files and folders other than root.
+ *
+ * Defaults to ``/``
*/
'share_folder' => '/',
/**
* If you are applying a theme to Nextcloud, enter the name of the theme here.
* The default location for themes is ``nextcloud/themes/``.
+ *
+ * Defaults to the theming app which is shipped since Nextcloud 9
*/
'theme' => '',
@@ -1182,12 +1318,16 @@ $CONFIG = array(
* When changing this, note that older unsupported versions of the Nextcloud desktop
* client may not function as expected, and could lead to permanent data loss for
* clients or other unexpected results.
+ *
+ * Defaults to ``2.0.0``
*/
'minimum.supported.desktop.version' => '2.0.0',
/**
* EXPERIMENTAL: option whether to include external storage in quota
* calculation, defaults to false.
+ *
+ * Defaults to ``false``
*/
'quota_include_external_storage' => false,
@@ -1202,6 +1342,8 @@ $CONFIG = array(
*
* 1 -> Check each file or folder at most once per request, recommended for
* general use if outside changes might happen.
+ *
+ * Defaults to ``0``
*/
'filesystem_check_changes' => 0,
@@ -1210,18 +1352,24 @@ $CONFIG = array(
* same storage as the upload target. Setting this to false will store the part
* files in the root of the users folder which might be required to work with certain
* external storage setups that have limited rename capabilities.
+ *
+ * Defaults to ``true``
*/
'part_file_in_storage' => true,
/**
* Where ``mount.json`` file should be stored, defaults to ``data/mount.json``
* in the Nextcloud directory.
+ *
+ * Defaults to ``data/mount.json`` in the Nextcloud directory.
*/
'mount_file' => '/var/www/nextcloud/data/mount.json',
/**
* When ``true``, prevent Nextcloud from changing the cache due to changes in
* the filesystem for all storage.
+ *
+ * Defaults to ``false``
*/
'filesystem_cache_readonly' => false,
@@ -1236,6 +1384,7 @@ $CONFIG = array(
*
* If you configure these also consider setting `forwarded_for_headers` which
* otherwise defaults to `HTTP_X_FORWARDED_FOR` (the `X-Forwarded-For` header).
+ * Defaults to an empty array.
*/
'trusted_proxies' => array('203.0.113.45', '198.51.100.128'),
@@ -1247,7 +1396,7 @@ $CONFIG = array(
* If set incorrectly, a client can spoof their IP address as visible to
* Nextcloud, bypassing access controls and making logs useless!
*
- * Defaults to 'HTTP_X_FORWARED_FOR' if unset
+ * Defaults to ``'HTTP_X_FORWARED_FOR'``
*/
'forwarded_for_headers' => array('HTTP_X_FORWARDED', 'HTTP_FORWARDED_FOR'),
@@ -1255,8 +1404,10 @@ $CONFIG = array(
* max file size for animating gifs on public-sharing-site.
* If the gif is bigger, it'll show a static preview
*
- * Value represents the maximum filesize in megabytes. Default is ``10``. Set to
- * ``-1`` for no limit.
+ * Value represents the maximum filesize in megabytes. Set to ``-1`` for
+ * no limit.
+ *
+ * Defaults to ``10`` megabytes
*/
'max_filesize_animated_gifs_public_sharing' => 10,
@@ -1270,6 +1421,8 @@ $CONFIG = array(
* be caused by concurrent operations. Mainly relevant for
* very large installations with many users working with
* shared files.
+ *
+ * Defaults to ``true``
*/
'filelocking.enabled' => true,
@@ -1278,15 +1431,18 @@ $CONFIG = array(
*
* Any lock older than this will be automatically cleaned up.
*
- * If not set this defaults to either 1 hour or the php max_execution_time, whichever is higher.
+ * Defaults to ``60*60`` seconds (1 hour) or the php
+ * max_execution_time, whichever is higher.
*/
-'filelocking.ttl' => 3600,
+'filelocking.ttl' => 60*60,
/**
* Memory caching backend for file locking
*
* Because most memcache backends can clean values without warning using redis
* is highly recommended to *avoid data loss*.
+ *
+ * Defaults to ``none``
*/
'memcache.locking' => '\\OC\\Memcache\\Redis',
@@ -1300,6 +1456,8 @@ $CONFIG = array(
*
* Only enable this for local development and not in production environments
* This will disable the minifier and outputs some additional debug information
+ *
+ * Defaults to ``false``
*/
'debug' => false,
@@ -1313,6 +1471,8 @@ $CONFIG = array(
*
* Updating/Deleting this value can make connected clients stall until
* the user has resolved conflicts.
+ *
+ * Defaults to ``''`` (empty string)
*/
'data-fingerprint' => '',
diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php
index 3c81ed5242a..2509cdf0bde 100644
--- a/core/Controller/LoginController.php
+++ b/core/Controller/LoginController.php
@@ -170,6 +170,8 @@ class LoginController extends Controller {
$parameters['user_autofocus'] = true;
}
+ \OC_Util::addStyle('guest');
+
return new TemplateResponse(
$this->appName, 'login', $parameters, 'guest'
);
@@ -205,8 +207,8 @@ class LoginController extends Controller {
* @return RedirectResponse
*/
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());
+ $currentDelay = $this->throttler->getDelay($this->request->getRemoteAddress(), 'login');
+ $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'login');
// If the user is already logged in and the CSRF check does not pass then
// simply redirect the user to the correct page as required. This is the
@@ -230,7 +232,7 @@ class LoginController extends Controller {
if ($loginResult === false) {
$this->throttler->registerAttempt('login', $this->request->getRemoteAddress(), ['user' => $originalUser]);
if($currentDelay === 0) {
- $this->throttler->sleepDelay($this->request->getRemoteAddress());
+ $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'login');
}
$this->session->set('loginMessages', [
['invalidpassword'], []
@@ -295,15 +297,15 @@ class LoginController extends Controller {
* @return DataResponse
*/
public function confirmPassword($password) {
- $currentDelay = $this->throttler->getDelay($this->request->getRemoteAddress());
- $this->throttler->sleepDelay($this->request->getRemoteAddress());
+ $currentDelay = $this->throttler->getDelay($this->request->getRemoteAddress(), 'sudo');
+ $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'sudo');
$loginName = $this->userSession->getLoginName();
$loginResult = $this->userManager->checkPassword($loginName, $password);
if ($loginResult === false) {
$this->throttler->registerAttempt('sudo', $this->request->getRemoteAddress(), ['user' => $loginName]);
if ($currentDelay === 0) {
- $this->throttler->sleepDelay($this->request->getRemoteAddress());
+ $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'sudo');
}
return new DataResponse([], Http::STATUS_FORBIDDEN);
diff --git a/core/Controller/LostController.php b/core/Controller/LostController.php
index a0ef87e50d8..8a8a50343ed 100644
--- a/core/Controller/LostController.php
+++ b/core/Controller/LostController.php
@@ -202,6 +202,7 @@ class LostController extends Controller {
/**
* @PublicPage
+ * @BruteForceProtection passwordResetEmail
*
* @param string $user
* @return array
diff --git a/core/Controller/OCSController.php b/core/Controller/OCSController.php
index c59b0d7ad3f..1deb5e958bd 100644
--- a/core/Controller/OCSController.php
+++ b/core/Controller/OCSController.php
@@ -106,20 +106,6 @@ class OCSController extends \OCP\AppFramework\OCSController {
}
/**
- * @NoAdminRequired
- * @return DataResponse
- */
- public function getCurrentUser() {
- $userObject = $this->userSession->getUser();
- $data = [
- 'id' => $userObject->getUID(),
- 'display-name' => $userObject->getDisplayName(),
- 'email' => $userObject->getEMailAddress(),
- ];
- return new DataResponse($data);
- }
-
- /**
* @PublicPage
*
* @param string $login
@@ -128,7 +114,7 @@ class OCSController extends \OCP\AppFramework\OCSController {
*/
public function personCheck($login = '', $password = '') {
if ($login !== '' && $password !== '') {
- $this->throttler->sleepDelay($this->request->getRemoteAddress());
+ $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'login');
if ($this->userManager->checkPassword($login, $password)) {
return new DataResponse([
'person' => [
diff --git a/core/Controller/SetupController.php b/core/Controller/SetupController.php
index bb7c8c4969d..87508423cd3 100644
--- a/core/Controller/SetupController.php
+++ b/core/Controller/SetupController.php
@@ -92,6 +92,7 @@ class SetupController {
\OC_Util::addVendorScript('strengthify/jquery.strengthify');
\OC_Util::addVendorStyle('strengthify/strengthify');
+ \OC_Util::addStyle('guest');
\OC_Util::addScript('setup');
\OC_Template::printGuestPage('', 'installation', $parameters);
}
diff --git a/core/css/apps.scss b/core/css/apps.scss
index 6166a9b3326..bb9326fd22d 100644
--- a/core/css/apps.scss
+++ b/core/css/apps.scss
@@ -1,5 +1,16 @@
/**
- * @copyright Copyright (c) 2017, John Molakvoæ (skjnldsv@protonmail.com)
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, pgys <info@pexlab.space>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Stefan Weil <sw@weilnetz.de>
+ * @copyright Copyright (c) 2016, Roeland Jago Douma <rullzer@owncloud.com>
+ * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2015, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2015, Thomas Müller <thomas.mueller@tmit.eu>
+ * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
*
* @license GNU AGPL version 3 or any later version
*
@@ -101,6 +112,13 @@ em {
.active,
.active a {
opacity: 1;
+ box-shadow: inset 2px 0 #0082c9;
+ }
+ li > a:first-child img {
+ margin-bottom: -3px;
+ margin-right: 11px;
+ width: 16px;
+ margin-left: 2px;
}
.collapse {
display: none;
@@ -212,7 +230,8 @@ em {
top: 0;
bottom: 0;
font-size: 12px;
- button, .counter {
+ button,
+ .counter {
width: 44px;
height: 44px;
padding-top: 12px;
@@ -256,6 +275,7 @@ em {
height: 100%;
width: 100%;
margin: 0;
+ box-shadow: none;
}
.app-navigation-entry-utils-menu-button {
button {
@@ -284,7 +304,7 @@ em {
.app-navigation-entry-utils ul, .app-navigation-entry-menu ul {
list-style-type: none;
}
-
+
/* editing an entry */
.app-navigation-entry-edit {
padding-left: 5px;
@@ -603,7 +623,8 @@ em {
li {
display: flex;
> button,
- > a {
+ > a,
+ > .menuitem {
cursor: pointer;
line-height: 36px;
border: 0;
@@ -617,6 +638,7 @@ em {
height: auto;
margin: 0;
font-weight: inherit;
+ box-shadow: none;
/* prevent .action class to break the design */
&.action {
padding: inherit !important;
@@ -629,6 +651,7 @@ em {
}
> span {
cursor: pointer;
+ white-space: nowrap;
}
> p {
width: 150px;
diff --git a/core/css/guest.css b/core/css/guest.css
new file mode 100644
index 00000000000..3223e764ac0
--- /dev/null
+++ b/core/css/guest.css
@@ -0,0 +1,660 @@
+/* Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net
+ This file is licensed under the Affero General Public License version 3 or later.
+ See the COPYING-README file. */
+
+/* Default and reset */
+html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section { margin:0; padding:0; border:0; outline:0; font-weight:inherit; font-size:100%; font-family:inherit; vertical-align:baseline; cursor:default; }
+html, body { height:100%; }
+article, aside, dialog, figure, footer, header, hgroup, nav, section { display:block; }
+body { line-height:1.5; }
+table { border-collapse:separate; border-spacing:0; white-space:nowrap; }
+caption, th, td { text-align:left; font-weight:normal; }
+table, td, th { vertical-align:middle; }
+a { border:0; color:#000; text-decoration:none;}
+a, a *, input, input *, select, .button span, label { cursor:pointer; }
+ul { list-style:none; }
+
+body {
+ background-color: #ffffff;
+ font-weight: 400;
+ font-size: .8em;
+ line-height: 1.6em;
+ font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
+ color: #000;
+ text-align: center;
+ background-color: #0082c9;
+ background-image: url('../img/background.jpg?v=1');
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+ background-size: cover;
+ background-attachment: fixed; /* fix background gradient */
+ height: 100%; /* fix sticky footer */
+}
+
+/* Various fonts settings */
+p.info a,
+#showAdvanced {
+ color: #fff;
+}
+#remember_login:hover+label,
+#remember_login:focus+label,
+#forgot-password:hover,
+#forgot-password:focus,
+p.info a:hover,
+p.info a:focus {
+ opacity: .6;
+}
+em {
+ font-style: normal;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ opacity: .5;
+}
+
+/* heading styles */
+h2 {
+ font-size: 20px;
+ font-weight: 300;
+ margin-bottom: 12px;
+ line-height: 140%;
+}
+h3 {
+ font-size: 15px;
+ font-weight: 300;
+ margin: 12px 0;
+}
+
+/* Global content */
+#header {
+ padding-top: 100px;
+}
+#header .logo {
+ background-image: url(../img/logo-icon.svg?v=1);
+ background-repeat: no-repeat;
+ background-size: 175px;
+ background-position: center;
+ width: 252px;
+ height: 120px;
+ margin: 0 auto;
+}
+.wrapper {
+ min-height: 100%;
+ margin: 0 auto -70px;
+ width: 300px;
+}
+.v-align {
+ width: inherit;
+}
+
+/* Default FORM */
+form {
+ position: relative;
+ width: 280px;
+ margin: 16px auto;
+ padding: 0;
+}
+form fieldset {
+ margin-bottom: 20px;
+ text-align: left;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+form #sqliteInformation {
+ margin-top: -20px;
+ margin-bottom: 20px;
+}
+form #adminaccount {
+ margin-bottom: 15px;
+}
+form fieldset legend, #datadirContent label {
+ width: 100%;
+}
+#datadirContent label {
+ display: block;
+ margin: 0;
+}
+form #datadirField legend {
+ margin-bottom: 15px;
+}
+
+/* View more button */
+#showAdvanced {
+ padding: 13px; /* increase clickable area of Advanced dropdown */
+}
+#showAdvanced img {
+ vertical-align: middle; /* adjust position of Advanced dropdown arrow */
+}
+
+/* Buttons and input */
+input, textarea, select, button {
+ font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
+}
+input {
+ font-size: 20px;
+ margin: 5px;
+ padding: 11px 10px 9px;
+ outline: none;
+ border-radius: 3px;
+}
+input[type="submit"],
+input[type="button"],
+button, .button,
+select {
+ width: auto;
+ min-width: 25px;
+ padding: 5px;
+ background-color: rgba(240,240,240,.9);
+ font-weight: 600;
+ color: #555;
+ border: 1px solid rgba(240,240,240,.9);
+ cursor: pointer;
+}
+input[type="text"],
+input[type="password"],
+input[type='email'] {
+ width: 249px;
+ background: #fff;
+ color: #555;
+ cursor: text;
+ font-family: inherit;
+ -webkit-appearance: textfield;
+ -moz-appearance: textfield;
+ box-sizing: content-box;
+ border: none;
+ font-weight: 300;
+}
+input.login {
+ width: 269px;
+ background-position: right 16px center;
+}
+input[type="submit"],
+input.updateButton,
+input.update-continue {
+ padding: 10px 20px; /* larger log in and installation buttons */
+}
+input.primary,
+button.primary {
+ border: 1px solid #0082c9;
+ background-color: #00a2e9;
+ color: #fff;
+}
+
+/* Radio and Checkbox */
+input[type="checkbox"].checkbox {
+ position: absolute;
+ left:-10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+input[type="checkbox"].checkbox + label:before {
+ content: "";
+ display: inline-block;
+
+ height: 20px;
+ width: 20px;
+ vertical-align: middle;
+
+ background: url('../img/actions/checkbox.svg') left top no-repeat;
+}
+input[type="checkbox"].checkbox:disabled +label:before { opacity: .6; }
+input[type="checkbox"].checkbox.u-left +label:before { float: left; }
+input[type="checkbox"].checkbox.u-hidden + label:before { display: none; }
+input[type="checkbox"].checkbox:checked + label:before {
+ background-image: url('../img/actions/checkbox-checked.svg');
+}
+input[type="checkbox"].checkbox:indeterminate + label:before {
+ background-image: url('../img/actions/checkbox-mixed.svg');
+}
+input[type="checkbox"].checkbox:disabled + label:before {
+ background-image: url('../img/actions/checkbox-disabled.svg');
+}
+input[type="checkbox"].checkbox:checked:disabled + label:before {
+ background-image: url('../img/actions/checkbox-checked-disabled.svg');
+}
+input[type="checkbox"].checkbox:indeterminate:disabled + label:before {
+ background-image: url('../img/actions/checkbox-mixed-disabled.svg');
+}
+input[type="checkbox"].checkbox--white + label:before {
+ background-image: url('../img/actions/checkbox-white.svg');
+}
+input[type="checkbox"].checkbox--white:checked + label:before {
+ background-image: url('../img/actions/checkbox-checked-white.svg');
+}
+input[type="checkbox"].checkbox--white:indeterminate + label:before {
+ background-image: url('../img/actions/checkbox-mixed-white.svg');
+}
+input[type="checkbox"].checkbox--white:disabled + label:before {
+ background-image: url('../img/actions/checkbox-disabled-white.svg');
+}
+input[type="checkbox"].checkbox--white:checked:disabled + label:before {
+ background-image: url('../img/actions/checkbox-checked-disabled.svg');
+}
+input[type="checkbox"].checkbox--white:indeterminate:disabled + label:before {
+ background-image: url('../img/actions/checkbox-mixed-disabled.svg');
+}
+input[type="checkbox"].checkbox:hover+label:before, input[type="checkbox"]:focus+label:before {
+ color:#111 !important;
+}
+input[type="checkbox"]+label {
+ position: relative;
+ margin: 0;
+ padding: 14px;
+ vertical-align: middle;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+input[type="radio"].radio {
+ position: absolute;
+ left:-10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+input[type="radio"].radio + label:before {
+ content: "";
+ display: inline-block;
+
+ height: 20px;
+ width: 20px;
+ vertical-align: middle;
+
+ background: url('../img/actions/radio.svg') left top no-repeat;
+}
+input[type="radio"].radio:checked + label:before {
+ background-image: url('../img/actions/radio-checked.svg');
+}
+input[type="radio"].radio:disabled + label:before {
+ background-image: url('../img/actions/radio-disabled.svg');
+}
+input[type="radio"].radio:checked:disabled + label:before {
+ background-image: url('../img/actions/radio-checked-disabled.svg');
+}
+input[type="radio"].radio--white + label:before {
+ background-image: url('../img/actions/radio-white.svg');
+}
+input[type="radio"].radio--white:checked + label:before {
+ background-image: url('../img/actions/radio-checked-white.svg');
+}
+input[type="radio"].radio--white:disabled + label:before {
+ background-image: url('../img/actions/radio-disabled.svg');
+}
+input[type="radio"].radio--white:checked:disabled + label:before {
+ background-image: url('../img/actions/radio-checked-disabled.svg');
+}
+
+/* keep the labels for screen readers but hide them since we use placeholders */
+label.infield {
+ display: none;
+}
+
+/* Password strength meter */
+.strengthify-wrapper {
+ display: inline-block;
+ position: relative;
+ left: 15px;
+ top: -23px;
+ width: 250px;
+}
+.tooltip-inner {
+ font-weight: bold;
+ color: #ccc;
+ padding: 3px 6px;
+ text-align: center;
+}
+
+/* Show password toggle */
+#show, #dbpassword {
+ position: absolute;
+ right: 1em;
+ top: .8em;
+ float: right;
+}
+#show, #dbpassword, #personal-show {
+ display: none;
+}
+#show + label, #dbpassword + label {
+ right: 21px;
+ top: 15px !important;
+ margin: -14px !important;
+ padding: 14px !important;
+}
+#show:checked + label, #dbpassword:checked + label, #personal-show:checked + label {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
+ opacity: .8;
+}
+#show + label, #dbpassword + label, #personal-show + label {
+ position: absolute !important;
+ height: 20px;
+ width: 24px;
+ background-image: url('../img/actions/toggle.svg?v=1');
+ background-repeat: no-repeat;
+ background-position: center;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
+ opacity: .3;
+}
+#show + label:before, #dbpassword + label:before, #personal-show + label:before {
+ display: none;
+}
+#pass2, input[name="personal-password-clone"] {
+ padding: .6em 2.5em .4em .4em;
+ width: 8em;
+}
+#personal-show + label {
+ height: 14px;
+ margin-top: -25px;
+ left: 295px;
+ display: block;
+}
+#passwordbutton {
+ margin-left: .5em;
+}
+
+/* Dark subtle label text */
+p.info,
+form fieldset legend,
+#datadirContent label,
+form fieldset .warning-info,
+form input[type="checkbox"]+label {
+ text-align: center;
+ color: #fff;
+}
+/* overrides another !important statement that sets this to unreadable black */
+form .warning input[type="checkbox"]:hover+label,
+form .warning input[type="checkbox"]:focus+label,
+form .warning input[type="checkbox"]+label {
+ color: #fff !important;
+}
+
+/* Additional login options */
+#remember_login {
+ margin: 18px 5px 0 16px !important;
+}
+.remember-login-container {
+ display: inline-block;
+ margin: 10px 0;
+ text-align: center;
+ width: 100%;
+}
+#forgot-password {
+ padding: 11px;
+ float: right;
+ color: #fff;
+}
+
+/* Alternative Logins */
+#alternative-logins legend { margin-bottom:10px; }
+#alternative-logins li { height:40px; display:inline-block; white-space:nowrap; }
+
+/* fixes for update page TODO should be fixed some time in a proper way */
+/* this is just for an error while updating the ownCloud instance */
+.updateProgress .error {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+/* Database selector on install page */
+form #selectDbType {
+ text-align:center;
+ white-space: nowrap;
+ margin: 0;
+}
+form #selectDbType .info {
+ white-space: normal;
+}
+form #selectDbType label {
+ position: static;
+ margin: 0 -3px 5px;
+ font-size: 12px;
+ background:#f8f8f8;
+ color:#888;
+ cursor:pointer;
+ border: 1px solid #ddd;
+}
+form #selectDbType label span {
+ cursor: pointer;
+ padding: 10px 20px;
+}
+form #selectDbType label.ui-state-hover,
+form #selectDbType label.ui-state-active {
+ color:#000;
+ background-color:#e8e8e8; }
+
+/* Nicely grouping input field sets */
+.grouptop,
+.groupmiddle,
+.groupbottom {
+ position: relative;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.grouptop input {
+ margin-bottom: 0 !important;
+ border-bottom: 0 !important;
+ border-bottom-left-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+}
+.groupmiddle input {
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+ border-top: 0 !important;
+ border-bottom: 0 !important;
+ border-radius: 0 !important;
+ box-shadow: 0 1px 0 rgba(0,0,0,.1) inset !important;
+}
+.groupbottom input {
+ margin-top: 0 !important;
+ border-top: 0 !important;
+ border-top-right-radius: 0 !important;
+ border-top-left-radius: 0 !important;
+ box-shadow: 0 1px 0 rgba(0,0,0,.1) inset !important;
+}
+.groupbottom input[type=submit] {
+ box-shadow: none !important;
+}
+
+/* Errors */
+/* Warnings and errors are the same */
+.warning,
+.update,
+.error {
+ display: block;
+ padding: 10px;
+ background-color: rgba(0,0,0,.3);
+ color: #fff;
+ text-align: left;
+ border-radius: 3px;
+ cursor: default;
+}
+.warning, {
+ padding: 5px;
+ background: #fdd;
+ margin: 0 7px 5px 4px;
+}
+.warning legend,
+.warning a,
+.error a {
+ color: #fff !important;
+ font-weight: 600 !important;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ opacity: 1;
+}
+.error a.button {
+ color: #555 !important;
+ display: inline-block;
+ text-align: center;
+}
+.error pre {
+ white-space: pre-wrap;
+ text-align: left;
+}
+.error-wide {
+ width: 700px;
+ margin-left: -200px !important;
+ margin-top: 35px;
+}
+.error-wide .button {
+ color: black !important;
+}
+.warning-input {
+ border-color: #ce3702 !important;
+}
+a.warning {
+ cursor: pointer;
+}
+fieldset.warning legend,
+fieldset.update legend {
+ top: 18px;
+ position: relative;
+}
+fieldset.warning legend + p,
+fieldset.update legend + p {
+ margin-top: 12px;
+}
+
+/* Various paragraph styles */
+.infogroup {
+ margin-bottom: 15px;
+}
+p.info {
+ margin: 0 auto;
+ padding-top: 20px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+/* Update */
+.update {
+ width: inherit;
+ text-align: center;
+}
+.update .appList {
+ list-style: disc;
+ text-align: left;
+ margin-left: 25px;
+ margin-right: 25px;
+}
+.update img.float-spinner {
+ float: left;
+}
+.update h2 {
+ margin: 0 0 20px;
+}
+.update a {
+ color: #fff;
+ border-bottom: 1px solid #aaa;
+}
+.update a.update-show-detailed {
+ border-bottom: inherit;
+}
+#update-progress-detailed {
+ text-align: left;
+}
+.update-show-detailed {
+ padding: 13px;
+ display: block;
+ opacity: .75;
+}
+#update-progress-icon {
+ height: 32px;
+ margin: 10px;
+ background-size: 32px;
+}
+
+/* Icons */
+.icon-info-white {
+ background-image: url(../img/actions/info-white.svg?v=1);
+}
+
+/* Loading */
+.float-spinner {
+ margin-top: -32px;
+ padding-top: 32px;
+}
+[class^='icon-'], [class*=' icon-'] {
+ background-repeat: no-repeat;
+ background-position: center;
+ min-width: 16px;
+ min-height: 16px;
+}
+.loading, .loading-small, .icon-loading, .icon-loading-dark, .icon-loading-small, .icon-loading-small-dark {
+ position: relative;
+}
+.loading:after, .loading-small:after, .icon-loading:after, .icon-loading-dark:after, .icon-loading-small:after, .icon-loading-small-dark:after {
+ z-index: 2;
+ content: '';
+ height: 32px;
+ width: 32px;
+ margin: -17px 0 0 -17px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ border-radius: 100%;
+ -webkit-animation: rotate .8s infinite linear;
+ animation: rotate .8s infinite linear;
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+}
+.loading:after, .loading-small:after, .icon-loading:after, .icon-loading-dark:after, .icon-loading-small:after, .icon-loading-small-dark:after {
+ border: 2px solid rgba(150, 150, 150, 0.5);
+ border-top-color: #646464;
+}
+.icon-loading-dark:after, .icon-loading-small-dark:after {
+ border: 2px solid rgba(187, 187, 187, 0.5);
+ border-top-color: #bbb;
+}
+.icon-loading-small:after, .icon-loading-small-dark:after {
+ height: 16px;
+ width: 16px;
+ margin: -9px 0 0 -9px;
+}
+/* Css replaced elements don't have ::after nor ::before */
+img.icon-loading, object.icon-loading, video.icon-loading, button.icon-loading, textarea.icon-loading, input.icon-loading, select.icon-loading {
+ background-image: url("../img/loading.gif");
+}
+img.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark, button.icon-loading-dark, textarea.icon-loading-dark, input.icon-loading-dark, select.icon-loading-dark {
+ background-image: url("../img/loading-dark.gif");
+}
+img.icon-loading-small, object.icon-loading-small, video.icon-loading-small, button.icon-loading-small, textarea.icon-loading-small, input.icon-loading-small, select.icon-loading-small {
+ background-image: url("../img/loading-small.gif");
+}
+img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-small-dark, button.icon-loading-small-dark, textarea.icon-loading-small-dark, input.icon-loading-small-dark, select.icon-loading-small-dark {
+ background-image: url("../img/loading-small-dark.gif");
+}
+@-webkit-keyframes rotate {
+ from {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ to {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@keyframes rotate {
+ from {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ to {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+
+/* FOOTER */
+footer,
+.push {
+ height: 70px;
+} \ No newline at end of file
diff --git a/core/css/header.scss b/core/css/header.scss
index 8035f7e568a..21b8cff4d28 100644
--- a/core/css/header.scss
+++ b/core/css/header.scss
@@ -1,13 +1,28 @@
-/* prevent ugly selection effect on accidental selection */
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Jos Poortvliet <jos@opensuse.org>
+ * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org>
+ * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2015, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2015, Volker E <volker.e@temporaer.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
-#header, #navigation, #expanddiv {
+/* prevent ugly selection effect on accidental selection */
+#header,
+#navigation,
+#expanddiv {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
}
/* removed until content-focusing issue is fixed */
-
#skip-to-content a {
position: absolute;
left: -10000px;
@@ -25,25 +40,23 @@
}
/* HEADERS ------------------------------------------------------------------ */
-
-#body-user #header, #body-settings #header, #body-public #header {
+#body-user #header,
+#body-settings #header,
+#body-public #header {
+ display: inline-flex;
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 2000;
height: 45px;
- line-height: 2.5em;
background-color: #0082c9;
box-sizing: border-box;
+ justify-content: space-between;
}
/* LOGO and APP NAME -------------------------------------------------------- */
-
#nextcloud {
- position: absolute;
- top: 0;
- left: 0;
padding: 5px;
padding-bottom: 0;
height: 45px;
@@ -82,11 +95,34 @@
}
.header-appname-container {
display: inline-block;
- position: absolute;
- left: 70px;
- height: 27px;
- padding-top: 18px;
+ padding-top: 22px;
padding-right: 10px;
+ flex-shrink: 0;
+ }
+ /* show caret indicator next to logo to make clear it is tappable */
+ .icon-caret {
+ display: inline-block;
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ margin-top: -21px;
+ padding: 0;
+ vertical-align: middle;
+ }
+
+ #header-left,
+ #header-right {
+ display: inline-flex;
+ align-items: center;
+ }
+
+ #header-left {
+ flex: 0 0;
+ flex-grow: 1;
+ }
+
+ #header-right {
+ justify-content: flex-end;
}
}
@@ -123,7 +159,6 @@
}
/* show appname next to logo */
-
.header-appname {
display: inline-block;
position: relative;
@@ -131,31 +166,19 @@
font-size: 16px;
font-weight: 300;
margin: 0;
- margin-top: -24px;
+ margin-top: -27px;
padding: 7px 0 7px 5px;
vertical-align: middle;
}
-/* show caret indicator next to logo to make clear it is tappable */
-#header .icon-caret {
- display: inline-block;
- width: 12px;
- height: 12px;
- margin: 0;
- margin-top: -21px;
- padding: 0;
- vertical-align: middle;
-}
/* do not show menu toggle on public share links as there is no menu */
-
#body-public #header .icon-caret {
display: none;
}
/* NAVIGATION --------------------------------------------------------------- */
-
#navigation {
position: fixed;
top: 45px;
@@ -170,6 +193,7 @@
border-top-left-radius: 0;
border-top-right-radius: 0;
display: none;
+ box-sizing: border-box;
/*overflow-y: auto;
overflow-x: hidden;*/
z-index: 2000;
@@ -185,37 +209,8 @@
border-bottom-color: rgba(255, 255, 255, 0.97);
border-width: 10px;
margin-left: -10px;
+ left: 47%;
}
-}
-
-/* arrow look */
-
-#expanddiv:after {
- bottom: 100%;
- border: solid transparent;
- content: ' ';
- height: 0;
- width: 0;
- position: absolute;
- pointer-events: none;
- border-color: rgba(0, 0, 0, 0);
- border-bottom-color: rgba(255, 255, 255, 0.97);
- border-width: 10px;
- margin-left: -10px;
-}
-
-/* position of dropdown arrow */
-
-#navigation:after {
- left: 47%;
-}
-
-#expanddiv:after {
- right: 15px;
-}
-
-#navigation {
- box-sizing: border-box;
* {
box-sizing: border-box;
}
@@ -241,11 +236,15 @@
overflow: hidden;
text-overflow: ellipsis;
}
- svg, span {
+ svg,
+ span {
-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)';
opacity: .5;
}
- &:hover svg, &:focus svg, &:hover span, &:focus span {
+ &:hover svg,
+ &:focus svg,
+ &:hover span,
+ &:focus span {
-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
opacity: 1;
}
@@ -256,52 +255,50 @@
}
}
}
-}
-
-/* icon opacity and hover effect */
-
-#apps-management a {
- &:hover svg, &:focus svg, &.active svg, &:hover span, &:focus span, &.active span {
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
+ .app-icon {
+ margin: 0 auto;
+ padding: 0;
+ max-height: 32px;
+ max-width: 32px;
+ }
+ /* loading feedback for apps */
+ .app-loading {
+ .icon-loading-dark {
+ display: inline !important;
+ position: absolute;
+ top: 20px;
+ left: 24px;
+ width: 32px;
+ height: 32px;
+ }
+ .app-icon {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=0)';
+ opacity: 0;
+ }
}
-}
-
-#navigation .app-icon {
- margin: 0 auto;
- padding: 0;
- max-height: 32px;
- max-width: 32px;
}
/* Apps management */
-
#apps-management {
min-height: initial;
height: initial;
margin: 0;
a {
- svg, span {
+ svg,
+ span {
-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=30)';
opacity: .3;
}
- }
-}
-
-/* loading feedback for apps */
-
-#navigation .app-loading {
- .icon-loading-dark {
- display: inline !important;
- position: absolute;
- top: 20px;
- left: 24px;
- width: 32px;
- height: 32px;
- }
- .app-icon {
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=0)';
- opacity: 0;
+ /* icon opacity and hover effect */
+ &:hover svg,
+ &:focus svg,
+ &.active svg,
+ &:hover span,
+ &:focus span,
+ &.active span {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
}
}
@@ -312,36 +309,8 @@
/* USER MENU -----------------------------------------------------------------*/
-/* info part on the right, used e.g. for info on who shared something */
-
-.header-right {
- position: absolute;
- right: 0;
- padding: 7px 5px;
- color: #fff;
- height: 100%;
- max-width: 80%;
- white-space: nowrap;
- box-sizing: border-box;
-}
-
-/* Profile picture in header */
-
-#header .avatardiv {
- float: left;
- display: inline-block;
- margin-right: 8px;
- cursor: pointer;
- height: 32px;
- width: 32px;
- img {
- opacity: 1;
- cursor: pointer;
- }
-}
-
#settings {
- float: right;
+ display: inline-block;
color: #ddd;
cursor: pointer;
.icon-loading-small-dark {
@@ -350,30 +319,51 @@
margin-right: 6px;
background-size: 16px 16px;
}
+ flex: 0 0 auto;
}
+/* User menu on the right */
#expand {
- display: block;
+ display: flex;
+ align-items: center;
padding: 7px 30px 6px 10px;
cursor: pointer;
* {
cursor: pointer;
}
- &:hover, &:focus, &:active {
- color: #fff;
- }
img {
-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=70)';
opacity: .7;
margin-bottom: -2px;
}
- &:hover img, &:focus img, &:active img {
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
+ &:hover,
+ &:focus,
+ &:active {
+ color: #fff;
+ img {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
}
.icon-caret {
margin-top: 0;
}
+
+ /* Profile picture in header */
+ .avatardiv {
+ margin-right: 8px;
+ cursor: pointer;
+ height: 32px;
+ width: 32px;
+ img {
+ opacity: 1;
+ cursor: pointer;
+ }
+ /* do not show display name when profile picture is present */
+ &.avatardiv-shown + #expandDisplayName {
+ display: none;
+ }
+ }
}
#expanddiv {
@@ -389,14 +379,24 @@
border-top-right-radius: 0;
box-sizing: border-box;
&:after {
- border-color: rgba(0, 0, 0, 0);
- border-bottom-color: rgba(255, 255, 255, 1);
+ /* position of dropdown arrow */
+ right: 15px;
+ border: 10px solid transparent;
+ border-color: transparent;
+ border-bottom-color: #fff;
+ bottom: 100%;
+ content: ' ';
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ margin-left: -10px;
}
a {
display: block;
height: 40px;
color: #000;
- padding: 4px 12px 0;
+ padding: 10px 12px 0;
-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)';
opacity: .5;
box-sizing: border-box;
@@ -404,20 +404,12 @@
margin-bottom: -3px;
margin-right: 6px;
}
- &:hover, &:focus, &:active, &.active {
+ &:hover,
+ &:focus,
+ &:active,
+ &.active {
-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
opacity: 1;
}
}
}
-
-/* do not show display name when profile picture is present */
-
-#header {
- .avatardiv.avatardiv-shown + #expandDisplayName {
- display: none;
- }
- #expand {
- display: block;
- }
-}
diff --git a/core/css/icons.scss b/core/css/icons.scss
index b1f9cc6df67..1e72b71ad3d 100644
--- a/core/css/icons.scss
+++ b/core/css/icons.scss
@@ -1,5 +1,12 @@
/**
- * @copyright Copyright (c) 2017, John Molakvoæ (skjnldsv@protonmail.com)
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ * @copyright Copyright (c) 2016, Vincent Chan <plus.vincchan@gmail.com>
+ * @copyright Copyright (c) 2015, Thomas Müller <thomas.mueller@tmit.eu>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2015, Jan-Christoph Borchardt <hey@jancborchardt.net>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/core/css/inputs.scss b/core/css/inputs.scss
index aa9c841f2b2..f7b9cdb723c 100644
--- a/core/css/inputs.scss
+++ b/core/css/inputs.scss
@@ -1,163 +1,203 @@
-/* INPUTS */
-
-/* specifically override browser styles */
-
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch>
+ * @copyright Copyright (c) 2015, Joas Schilling <nickvergessen@owncloud.com>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+
+ /* Specifically override browser styles */
input, textarea, select, button {
font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
}
-
.select2-container-multi .select2-choices .select2-search-field input, .select2-search input, .ui-widget {
font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif !important;
}
-input {
- &[type='text'], &[type='password'], &[type='search'], &[type='number'], &[type='email'], &[type='tel'], &[type='url'], &[type='time'], &[type='date'] {
- width: 130px;
- margin: 3px 3px 3px 0;
- padding: 7px 6px 5px;
- font-size: 13px;
- background-color: #fff;
- color: #333;
- border: 1px solid #ddd;
- outline: none;
- border-radius: 3px;
- }
-}
-
-textarea, select, button, .button {
+/* Simple selector to allow easy overriding */
+select,
+button,
+input,
+textarea {
width: 130px;
- margin: 3px 3px 3px 0;
- padding: 7px 6px 5px;
- font-size: 13px;
- background-color: #fff;
- color: #333;
- border: 1px solid #ddd;
- outline: none;
- border-radius: 3px;
-}
-
-input {
- &[type='submit'], &[type='button'] {
- width: 130px;
- margin: 3px 3px 3px 0;
- padding: 7px 6px 5px;
- font-size: 13px;
- background-color: #fff;
- color: #333;
- border: 1px solid #ddd;
- outline: none;
- border-radius: 3px;
- }
+ min-height: 32px;
+ box-sizing: border-box;
}
-#quota, .pager li a {
- width: 130px;
+/* Default global values */
+select,
+button, .button,
+input:not([type='range']),
+textarea,
+#quota, .pager li a {
margin: 3px 3px 3px 0;
- padding: 7px 6px 5px;
+ padding: 7px 6px;
font-size: 13px;
background-color: #fff;
color: #333;
border: 1px solid #ddd;
outline: none;
border-radius: 3px;
-}
-
-input {
- &[type='hidden'] {
- height: 0;
- width: 0;
+ &:not(:disabled):not(.primary) {
+ /* no border on quota */
+ &:not(#quota):hover,
+ &:focus,
+ &.active {
+ /* active class used for multiselect */
+ border-color: #0082c9;
+ outline: none;
+ }
+ &:active {
+ outline: none;
+ background-color: #fff;
+ }
}
- &[type='text'], &[type='password'], &[type='search'], &[type='number'], &[type='email'], &[type='tel'], &[type='url'], &[type='time'] {
- background: #fff;
- color: #555;
- cursor: text;
- font-family: inherit;
- /* use default ownCloud font instead of default textarea monospace */
+ &:disabled {
+ background-color: #eee;
+ color: #999;
+ cursor: default;
+ opacity: 0.5;
+ }
+ /* Primary action button, use sparingly */
+ &.primary {
+ border: 1px solid #0082c9;
+ background-color: #00a2e9;
+ color: #fff;
+ cursor: pointer;
+ &:not(:disabled) {
+ &:hover,
+ &:focus {
+ background-color: #0092d9;
+ }
+ &:active {
+ background-color: #00a2e9;
+ }
+ }
+ &:disabled {
+ background-color: #00a2e9;
+ color: #bbb;
+ }
}
}
-textarea {
- background: #fff;
- color: #555;
- cursor: text;
- font-family: inherit;
- /* use default ownCloud font instead of default textarea monospace */
-}
-
+/* Specific override */
input {
- &[type='text'], &[type='password'], &[type='search'], &[type='number'], &[type='email'], &[type='tel'], &[type='url'], &[type='time'] {
+ &:not([type='radio']):not([type='checkbox']):not([type='range']):not([type='submit']):not([type='button']):not([type='reset']):not([type='color']):not([type='file']):not([type='image']) {
-webkit-appearance: textfield;
-moz-appearance: textfield;
- box-sizing: content-box;
- }
- &[type='text'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
- }
- &[type='password'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
}
- &[type='number'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
- }
- &[type='search'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
- }
- &[type='email'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
+ &[type='radio'],
+ &[type='checkbox'],
+ &[type='file'],
+ &[type='image'] {
+ height: auto;
+ width: auto;
}
- &[type='tel'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
+ /* Color input doesn't respect the initial height
+ so we need to set a custom one */
+ &[type='color'] {
+ margin: 3px;
+ padding: 0 2px;
+ min-height: 30px;
+ width: 40px;
+ cursor: pointer;
}
- &[type='url'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
+ &[type='hidden'] {
+ height: 0;
+ width: 0;
}
&[type='time'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
+ width: initial;
+ }
+}
+
+/* 'Click' inputs */
+select,
+button, .button,
+input[type='button'],
+input[type='submit'],
+input[type='reset'] {
+ padding: 6px 12px;
+ width: auto;
+ min-height: 34px;
+ cursor: pointer;
+ box-sizing: border-box;
+ background-color: #fafafa;
+}
+
+/* Buttons */
+button, .button,
+input[type='button'],
+input[type='submit'],
+input[type='reset'] {
+ font-weight: bold;
+ /* Get rid of the ugly firefox dotted line */
+ &::-moz-focus-inner {
+ border: 0;
+ }
+}
+button, .button {
+ > span {
+ /* icon position inside buttons */
+ &[class^='icon-'],
+ &[class*=' icon-'] {
+ display: inline-block;
+ vertical-align: text-bottom;
+ opacity: 0.5;
}
}
}
textarea {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
+ color: #555;
+ cursor: text;
+ font-family: inherit;
+ height: auto;
+ &:not(:disabled) {
+ &:active,
+ &:hover,
+ &:focus {
+ border-color: #ddd !important;
+ background-color: #fff !important;
+ }
}
}
+/* Override the ugly select arrow */
+select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background: url('../img/actions/triangle-s.svg') no-repeat right 4px center;
+ background-color: inherit;
+ outline: 0;
+ padding-right: 24px !important;
+}
+
+/* Various Fixes */
+button img,
+.button img {
+ cursor: pointer;
+}
+#quota {
+ color: #555;
+}
+select,
+.button.multiselect {
+ font-weight: 400;
+}
+
+/* Radio & Checkboxes */
input {
- &[type='checkbox'] {
+ &[type='checkbox'],
+ &[type='radio'] {
+ &.radio,
&.checkbox {
position: absolute;
left: -10000px;
@@ -165,126 +205,109 @@ input {
width: 1px;
height: 1px;
overflow: hidden;
+ + label {
+ user-select: none;
+ }
+ &:disabled + label,
+ &:disabled + label:before {
+ cursor: default;
+ }
+ label:before {
content: '';
display: inline-block;
- height: 20px;
- width: 20px;
+ height: 12px;
+ width: 12px;
vertical-align: middle;
- background: url('../img/actions/checkbox.svg') left top no-repeat;
- }
- &:disabled + label:before {
- opacity: .6;
+ border-radius: 50%;
+ margin: 3px;
+ margin-top: 1px;
+ border: 1px solid #888;
}
- &.u-left + label:before {
- float: left;
+ &:not(:disabled):not(:checked) + label:hover:before,
+ &:focus + label:before {
+ border-color: #0082c9;
}
- &.u-hidden + label:before {
- display: none;
- }
- &:checked + label:before {
- background-image: url('../img/actions/checkbox-checked.svg');
- }
- &:indeterminate + label:before {
- background-image: url('../img/actions/checkbox-mixed.svg');
+ &:checked + label:before,
+ &.checkbox:indeterminate + label:before {
+ /* ^ :indeterminate have a strange behavior on radio,
+ so we respecified the checkbox class again to be safe */
+ box-shadow: inset 0px 0px 0px 2px #fff;
+ background-color: #0082c9;
+ border-color: #0082c9
}
&:disabled + label:before {
- background-image: url('../img/actions/checkbox-disabled.svg');
+ background-color: #ccc !important; /* override other status */
}
&:checked:disabled + label:before {
- background-image: url('../img/actions/checkbox-checked-disabled.svg');
- }
- &:indeterminate:disabled + label:before {
- background-image: url('../img/actions/checkbox-mixed-disabled.svg');
+ box-shadow: inset 0px 0px 0px 2px #fff;
+ border-color: #aaa;
+ background-color: #bbb;
}
}
- &.checkbox--white {
+ &.checkbox {
+ label:before {
- background-image: url('../img/actions/checkbox-white.svg');
+ border-radius: 1px;
+ height: 10px;
+ width: 10px;
+ box-shadow: none !important;
+ background-position: center;
}
&:checked + label:before {
- background-image: url('../img/actions/checkbox-checked-white.svg');
+ background-image: url('../img/actions/checkbox-mark.svg');
}
&:indeterminate + label:before {
- background-image: url('../img/actions/checkbox-mixed-white.svg');
- }
- &:disabled + label:before {
- background-image: url('../img/actions/checkbox-disabled-white.svg');
- }
- &:checked:disabled + label:before {
- background-image: url('../img/actions/checkbox-checked-disabled.svg');
+ background-image: url('../img/actions/checkbox-mixed.svg');
}
&:indeterminate:disabled + label:before {
- background-image: url('../img/actions/checkbox-mixed-disabled.svg');
+ border-color: #888;
}
}
- &.checkbox:hover + label:before, &:focus + label:before {
- color: #111 !important;
- }
- }
- &[type='radio'] {
- &.radio {
- position: absolute;
- left: -10000px;
- top: auto;
- width: 1px;
- height: 1px;
- overflow: hidden;
+ &.radio--white,
+ &.checkbox--white {
+ label:before {
- content: '';
- display: inline-block;
- height: 20px;
- width: 20px;
- vertical-align: middle;
- background: url('../img/actions/radio.svg') left top no-repeat;
+ border-color: #aaa;
}
- &:checked + label:before {
- background-image: url('../img/actions/radio-checked.svg');
+ &:not(:disabled):not(:checked) + label:hover:before,
+ &:focus + label:before {
+ border-color: #fff;
+ }
+ &:checked + label:before,
+ &.checkbox:indeterminate + label:before {
+ /* ^ :indeterminate have a strange behavior on radio,
+ so we respecified the checkbox class again to be safe */
+ box-shadow: inset 0px 0px 0px 2px #000;
+ background-color: #eee;
+ border-color: #eee
}
&:disabled + label:before {
- background-image: url('../img/actions/radio-disabled.svg');
+ background-color: #666 !important; /* override other status */
+ border-color: #999 !important; /* override other status */
}
&:checked:disabled + label:before {
- background-image: url('../img/actions/radio-checked-disabled.svg');
+ box-shadow: inset 0px 0px 0px 2px #000;
+ border-color: #666;
+ background-color: #222;
}
}
- &.radio--white {
- + label:before {
- background-image: url('../img/actions/radio-white.svg');
- }
+ &.checkbox--white {
&:checked + label:before {
- background-image: url('../img/actions/radio-checked-white.svg');
+ background-image: url('../img/actions/checkbox-mark-white.svg');
}
- &:disabled + label:before {
- background-image: url('../img/actions/radio-disabled.svg');
+ &:indeterminate + label:before {
+ background-image: url('../img/actions/checkbox-mixed-white.svg');
}
- &:checked:disabled + label:before {
- background-image: url('../img/actions/radio-checked-disabled.svg');
+ &:checked:disabled + label:after {
+ border-color: #aaa;
+ }
+ &:indeterminate:disabled + label:after {
+ background-color: #aaa;
}
}
}
- &[type='time'] {
- width: initial;
- height: 31px;
- box-sizing: border-box;
- }
}
-select {
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- background: url('../../core/img/actions/triangle-s.svg') no-repeat right 8px center rgba(240, 240, 240, 0.9);
- outline: 0;
- padding-right: 24px !important;
- &:hover {
- background-color: #fefefe;
- }
-}
-
-/* select2 adjustments */
-
-#select2-drop {
+/* Select2 overriding. Merged to core with vendor stylesheet */
+.select2-drop {
margin-top: -2px;
&.select2-drop-active {
border-color: #ddd;
@@ -297,15 +320,7 @@ select {
cursor: pointer;
}
}
-}
-
-.select2-chosen .avatar img, #select2-drop .avatar, .select2-chosen .avatar {
- cursor: pointer;
-}
-
-#select2-drop {
.select2-search input {
- width: calc(100% - 14px);
min-height: auto;
background: url('../img/actions/search.svg') no-repeat right center !important;
background-origin: content-box !important;
@@ -322,7 +337,9 @@ select {
cursor: pointer;
}
}
- .select2-result, .select2-no-results, .select2-searching {
+ .select2-result,
+ .select2-no-results,
+ .select2-searching {
position: relative;
display: list-item;
padding: 12px;
@@ -341,9 +358,16 @@ select {
}
}
}
-
+.select2-chosen,
+#select2-drop {
+ .avatar,
+ .avatar img {
+ cursor: pointer;
+ }
+}
.select2-container-multi {
- .select2-choices, &.select2-container-active .select2-choices {
+ .select2-choices,
+ &.select2-container-active .select2-choices {
box-shadow: none;
white-space: nowrap;
text-overflow: ellipsis;
@@ -355,83 +379,28 @@ select {
margin: 0;
padding: 2px 0;
min-height: auto;
- }
-}
-
-.select2-container .select2-choice {
- box-shadow: none;
- white-space: nowrap;
- text-overflow: ellipsis;
- background: #fff;
- color: #555;
- box-sizing: content-box;
- border-radius: 3px;
- border: 1px solid #ddd;
- margin: 0;
- padding: 2px 0;
- min-height: auto;
-}
-
-.select2-container-multi {
- .select2-choices .select2-search-choice, &.select2-container-active .select2-choices .select2-search-choice {
- line-height: 20px;
- padding-left: 5px;
- background-image: none;
- background-color: #f8f8f8;
- border-color: #f8f8f8;
- }
-}
-
-.select2-container .select2-choice .select2-search-choice {
- line-height: 20px;
- padding-left: 5px;
- background-image: none;
- background-color: #f8f8f8;
- border-color: #f8f8f8;
-}
-
-.select2-container-multi {
- .select2-choices .select2-search-choice {
- &.select2-search-choice-focus, &:hover {
- background-color: #f0f0f0;
- border-color: #f0f0f0;
+ .select2-search-choice {
+ line-height: 20px;
+ padding-left: 5px;
+ &.select2-search-choice-focus,
+ &:hover,
+ &:active,
+ & {
+ background-image: none;
+ background-color: #fff;
+ color: #333;
+ border: 1px solid #ddd;
+ }
+ .select2-search-choice-close {
+ display: none;
+ }
}
- }
- &.select2-container-active .select2-choices .select2-search-choice {
- &.select2-search-choice-focus, &:hover {
- background-color: #f0f0f0;
- border-color: #f0f0f0;
+ .select2-search-field input {
+ line-height: 20px;
}
}
}
-
-.select2-container .select2-choice .select2-search-choice {
- &.select2-search-choice-focus, &:hover {
- background-color: #f0f0f0;
- border-color: #f0f0f0;
- }
-}
-
-.select2-container-multi {
- .select2-choices .select2-search-choice .select2-search-choice-close, &.select2-container-active .select2-choices .select2-search-choice .select2-search-choice-close {
- display: none;
- }
-}
-
-.select2-container .select2-choice .select2-search-choice .select2-search-choice-close {
- display: none;
-}
-
-.select2-container-multi {
- .select2-choices .select2-search-field input, &.select2-container-active .select2-choices .select2-search-field input {
- line-height: 20px;
- }
-}
-
.select2-container {
- .select2-choice .select2-search-field input {
- line-height: 20px;
- }
margin: 3px 3px 3px 0;
&.select2-container-multi .select2-choices {
display: flex;
@@ -441,7 +410,33 @@ select {
}
}
.select2-choice {
- padding-left: 38px;
+ box-shadow: none;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ background: #fff;
+ color: #555;
+ box-sizing: content-box;
+ border-radius: 3px;
+ border: 1px solid #ddd;
+ margin: 0;
+ padding: 2px 0;
+ padding-left: 6px;
+ min-height: auto;
+ .select2-search-choice {
+ line-height: 20px;
+ padding-left: 5px;
+ background-image: none;
+ background-color: #f8f8f8;
+ border-color: #f8f8f8;
+ .select2-search-choice-close {
+ display: none;
+ }
+ &.select2-search-choice-focus,
+ &:hover {
+ background-color: #f0f0f0;
+ border-color: #f0f0f0;
+ }
+ }
.select2-arrow {
background: none;
border-radius: 0;
@@ -451,14 +446,19 @@ select {
opacity: .5;
}
}
- &:hover .select2-arrow b, &:focus .select2-arrow b, &:active .select2-arrow b {
+ &:hover .select2-arrow b,
+ &:focus .select2-arrow b,
+ &:active .select2-arrow b {
opacity: .7;
}
+ .select2-search-field input {
+ line-height: 20px;
+ }
}
}
-/* jQuery UI fixes */
-
+/* Select menus - TODO: move to jquery-ui-fixes.css
+----------------------------------*/
.ui-menu {
padding: 0;
.ui-menu-item a {
@@ -485,298 +485,28 @@ select {
background: #f8f8f8;
}
-/* correctly align images inside of buttons */
-
-input img, button img, .button img {
- vertical-align: text-bottom;
-}
-
-input[type='submit'].enabled {
- background-color: #66f866;
- border: 1px solid #5e5;
-}
-
-.input-button-inline {
- position: absolute !important;
- right: 0;
- background-color: transparent !important;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=30)';
- opacity: .3;
-}
-
-/* BUTTONS */
-
-input {
- &[type='submit'], &[type='button'] {
- width: auto;
- min-width: 25px;
- padding: 5px;
- background-color: rgba(240, 240, 240, 0.9);
- font-weight: 600;
- color: #555;
- border: 1px solid rgba(240, 240, 240, 0.9);
- cursor: pointer;
- }
-}
-
-button, .button, #quota, select, .pager li a {
- width: auto;
- min-width: 25px;
- padding: 5px;
- background-color: rgba(240, 240, 240, 0.9);
- font-weight: 600;
- color: #555;
- border: 1px solid rgba(240, 240, 240, 0.9);
- cursor: pointer;
-}
-
-select, .button.multiselect {
- font-weight: 400;
-}
-
-input {
- &[type='submit'] {
- &:hover, &:focus {
- background-color: rgba(255, 255, 255, 0.95);
- color: #111;
- }
- }
- &[type='button'] {
- &:hover, &:focus {
- background-color: rgba(255, 255, 255, 0.95);
- color: #111;
- }
- }
-}
-
-button {
- &:hover, &:focus {
- background-color: rgba(255, 255, 255, 0.95);
- color: #111;
- }
-}
-
-.button {
- &:hover, &:focus, a:focus {
- background-color: rgba(255, 255, 255, 0.95);
- color: #111;
- }
-}
-
-select {
- &:hover, &:focus, &:active {
- background-color: rgba(255, 255, 255, 0.95);
- color: #111;
- }
-}
-
-input {
- &[type='submit'] img, &[type='button'] img {
- cursor: pointer;
- }
-}
-
-button img, .button img {
- cursor: pointer;
-}
-
-#header .button {
- border: none;
- box-shadow: none;
-}
-
-/* disabled input fields and buttons */
-
-input:disabled {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- &:hover, &:focus {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- }
-}
-
-button:disabled {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- &:hover, &:focus {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- }
-}
-
-.button:disabled {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- &:hover, &:focus {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- }
-}
-
-a.disabled {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- &:hover, &:focus {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- }
-}
-
-textarea:disabled {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
-}
-
-input:disabled {
- + label, &:hover + label, &:focus + label {
- color: #999 !important;
- cursor: default;
- }
-}
-
-/* Primary action button, use sparingly */
-
-.primary {
- border: 1px solid #0082c9;
- background-color: #00a2e9;
- color: #fff;
-}
-
-input {
- &[type='submit'].primary, &[type='button'].primary {
- border: 1px solid #0082c9;
- background-color: #00a2e9;
- color: #fff;
- }
-}
-
-button.primary, .button.primary {
- border: 1px solid #0082c9;
- background-color: #00a2e9;
- color: #fff;
-}
-
-.primary:hover {
- background-color: #0092d9;
- color: #fff;
-}
-
-input {
- &[type='submit'].primary:hover, &[type='button'].primary:hover {
- background-color: #0092d9;
- color: #fff;
- }
-}
-
-button.primary:hover, .button.primary:hover, .primary:focus {
- background-color: #0092d9;
- color: #fff;
-}
-
-input {
- &[type='submit'].primary:focus, &[type='button'].primary:focus {
- background-color: #0092d9;
- color: #fff;
- }
-}
-
-button.primary:focus, .button.primary:focus {
- background-color: #0092d9;
- color: #fff;
-}
-
-.primary:active {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input {
- &[type='submit'].primary:active, &[type='button'].primary:active {
- background-color: #00a2e9;
- color: #bbb;
- }
-}
-
-button.primary:active, .button.primary:active, .primary:disabled {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input {
- &[type='submit'].primary:disabled, &[type='button'].primary:disabled {
- background-color: #00a2e9;
- color: #bbb;
- }
-}
-
-button.primary:disabled, .button.primary:disabled, .primary:disabled:hover {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input {
- &[type='submit'].primary:disabled:hover, &[type='button'].primary:disabled:hover {
- background-color: #00a2e9;
- color: #bbb;
- }
-}
-
-button.primary:disabled:hover, .button.primary:disabled:hover, .primary:disabled:focus {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input {
- &[type='submit'].primary:disabled:focus, &[type='button'].primary:disabled:focus {
- background-color: #00a2e9;
- color: #bbb;
- }
-}
-
-button.primary:disabled:focus, .button.primary:disabled:focus {
- background-color: #00a2e9;
- color: #bbb;
-}
-
+/* Animation */
@keyframes shake {
- 0% {
- transform: translate(-5px, 0);
+ 10%,
+ 90% {
+ transform: translate(-1px);
}
-
- 20% {
- transform: translate(5px, 0);
+ 20%,
+ 80% {
+ transform: translate(2px);
}
-
- 40% {
- transform: translate(-5px, 0);
+ 30%,
+ 50%,
+ 70% {
+ transform: translate(-4px);
}
-
+ 40%,
60% {
- transform: translate(5px, 0);
- }
-
- 80% {
- transform: translate(-5px, 0);
- }
-
- 100% {
- transform: translate(5px, 0);
+ transform: translate(4px);
}
}
-
-
.shake {
animation-name: shake;
- animation-duration: .3s;
+ animation-duration: .7s;
animation-timing-function: ease-out;
}
diff --git a/core/css/installation.css b/core/css/installation.css
deleted file mode 100644
index 69c98f1ea22..00000000000
--- a/core/css/installation.css
+++ /dev/null
@@ -1,802 +0,0 @@
-/*
-* Installation css file.
-* This file is used on the install page only when the database
-* isn't set, preventing scss files to be stored using the AppdataController.
-* It should contain every style needed to correctly display the installation template.
-*
-*/
-
-/* Reset */
-html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- font-weight: inherit;
- font-size: 100%;
- font-family: inherit;
- vertical-align: baseline;
- cursor: default;
-}
-
-html, body {
- height: 100%;
-}
-
-article, aside, dialog, figure, footer, header, hgroup, nav, section {
- display: block;
-}
-
-body {
- line-height: 1.5;
-}
-
-table {
- border-collapse: separate;
- border-spacing: 0;
- white-space: nowrap;
-}
-
-caption, th, td {
- text-align: left;
- font-weight: normal;
-}
-
-table, td, th {
- vertical-align: middle;
-}
-
-a {
- border: 0;
- color: #000;
- text-decoration: none;
- cursor: pointer;
-}
-a * {
- cursor: pointer;
-}
-
-input {
- cursor: pointer;
-}
-input * {
- cursor: pointer;
-}
-
-select, .button span, label {
- cursor: pointer;
-}
-
-ul {
- list-style: none;
-}
-
-body {
- background-color: #ffffff;
- font-weight: 400;
- font-size: .8em;
- line-height: 1.6em;
- font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
- color: #000;
- height: auto;
-}
-
-/* Global */
-#body-login {
- text-align: center;
- background-color: #0082c9;
- background-image: url("../img/background.jpg?v=1");
- background-position: 50% 50%;
- background-repeat: no-repeat;
- background-size: cover;
- background-attachment: fixed;
- /* fix background gradient */
- height: 100%;
- /* fix sticky footer */
-}
-
-
-/* heading styles */
-h2 {
- font-size: 20px;
- font-weight: 300;
- margin-bottom: 12px;
- line-height: 140%;
-}
-h3 {
- font-size: 15px;
- font-weight: 300;
- margin: 12px 0;
-}
-
-
-/* do not use italic typeface style, instead lighter color */
-em {
- font-style: normal;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- opacity: .5;
-}
-
-#header {
- padding-top: 100px;
-}
-
-p.info, form fieldset legend, #datadirContent label {
- text-align: center;
- color: #fff;
-}
-
-form fieldset .warning-info, form input[type='checkbox'] + label {
- text-align: center;
- color: #fff;
-}
-form .warning input[type='checkbox']:hover + label, form .warning input[type='checkbox']:focus + label, form .warning input[type='checkbox'] + label {
- color: #fff !important;
-}
-
-.infogroup {
- margin-bottom: 15px;
-}
-
-p#message img {
- vertical-align: middle;
- padding: 5px;
-}
-
-div.buttons {
- text-align: center;
-}
-
-p.info {
- width: 22em;
- margin: 0 auto;
- padding-top: 20px;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-p.info a {
- font-weight: 600;
- padding: 13px;
- margin: -13px;
- color: #fff;
-}
-
-#body-login .warning, #body-login .update, #body-login .error {
- display: block;
- padding: 10px;
- background-color: rgba(0, 0, 0, 0.3);
- color: #fff;
- text-align: left;
- border-radius: 3px;
- cursor: default;
-}
-
-#body-login .warning {
- margin: 0 7px 5px 4px;
-}
-
-form {
- position: relative;
- width: 280px;
- margin: 16px auto;
- padding: 0;
-}
-form fieldset {
- margin-bottom: 20px;
- text-align: left;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-form #sqliteInformation {
- margin-top: -20px;
- margin-bottom: 20px;
-}
-form #adminaccount {
- margin-bottom: 15px;
-}
-form fieldset legend {
- width: 100%;
-}
-form fieldset.warning legend, form fieldset.update legend {
- top: 18px;
- position: relative;
-}
-form fieldset.warning legend + p, form fieldset.update legend + p {
- margin-top: 12px;
-}
-form input[type='checkbox'] + label {
- position: relative;
- margin: 0;
- padding: 14px;
- vertical-align: middle;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-form .errors {
- background: #fed7d7;
- border: 1px solid #f00;
- list-style-indent: inside;
- margin: 0 0 2em;
- padding: 1em;
-}
-form .success {
- background: #d7fed7;
- border: 1px solid #0f0;
- width: 35%;
- margin: 30px auto;
- padding: 1em;
- text-align: center;
-}
-form #showAdvanced > img {
- padding: 4px;
- box-sizing: border-box;
-}
-form p.info a, form #showAdvanced {
- color: #fff;
-}
-form #remember_login:hover + label, form #remember_login:focus + label {
- opacity: .6;
-}
-form #forgot-password:hover, form #forgot-password:focus {
- opacity: .6;
-}
-form p.info a:hover, form p.info a:focus {
- opacity: .6;
-}
-form footer .info {
- white-space: nowrap;
-}
-
-#datadirContent label {
- display: block;
- width: 100%;
- margin: 0;
-}
-
-form #datadirField legend {
- margin-bottom: 15px;
-}
-
-#showAdvanced {
- padding: 13px;
- /* increase clickable area of Advanced dropdown */
-}
-#showAdvanced img {
- vertical-align: bottom;
- /* adjust position of Advanced dropdown arrow */
- margin-left: -4px;
-}
-
-.icon-info-white {
- padding: 10px;
-}
-
-.float-spinner {
- height: 32px;
- display: none;
-}
-
-.strengthify-wrapper {
- display: inline-block;
- position: relative;
- left: 15px;
- top: -23px;
- width: 250px;
-}
-
-.tipsy-inner {
- font-weight: bold;
- color: #ccc;
-}
-
-
-/* LOGO */
-#header .logo {
- background-image: url(../img/logo-icon.svg?v=1);
- background-repeat: no-repeat;
- background-size: 175px;
- background-position: center;
- width: 252px;
- height: 120px;
- margin: 0 auto;
-}
-
-/* Show password toggle */
-#show, #dbpassword {
- position: absolute;
- right: 1em;
- top: .8em;
- float: right;
-}
-
-#show, #dbpassword, #personal-show {
- display: none;
-}
-
-#show + label, #dbpassword + label {
- right: 21px;
- top: 15px !important;
- margin: -14px !important;
- padding: 14px !important;
-}
-
-#show:checked + label, #dbpassword:checked + label, #personal-show:checked + label {
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)';
- opacity: .8;
-}
-
-#show + label, #dbpassword + label, #personal-show + label {
- position: absolute !important;
- height: 20px;
- width: 24px;
- background-image: url("../img/actions/toggle.svg?v=1");
- background-repeat: no-repeat;
- background-position: center;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=30)';
- opacity: .3;
-}
-
-#show + label:before, #dbpassword + label:before, #personal-show + label:before {
- display: none;
-}
-
-#pass2, input[name='personal-password-clone'] {
- padding: .6em 2.5em .4em .4em;
- width: 8em;
-}
-
-#personal-show + label {
- height: 14px;
- margin-top: -25px;
- left: 295px;
- display: block;
-}
-
-#passwordbutton {
- margin-left: .5em;
-}
-
-/* LOADER */
-#body-login .float-spinner {
- margin-top: -32px;
- padding-top: 32px;
-}
-
-[class^='icon-'], [class*=' icon-'] {
- background-repeat: no-repeat;
- background-position: center;
- min-width: 16px;
- min-height: 16px;
-}
-
-.loading, .loading-small, .icon-loading, .icon-loading-dark, .icon-loading-small, .icon-loading-small-dark {
- position: relative;
-}
-
-.loading:after, .loading-small:after, .icon-loading:after, .icon-loading-dark:after, .icon-loading-small:after, .icon-loading-small-dark:after {
- z-index: 2;
- content: '';
- height: 32px;
- width: 32px;
- margin: -17px 0 0 -17px;
- position: absolute;
- top: 50%;
- left: 50%;
- border-radius: 100%;
- -webkit-animation: rotate .8s infinite linear;
- animation: rotate .8s infinite linear;
- -webkit-transform-origin: center;
- -ms-transform-origin: center;
- transform-origin: center;
-}
-
-.loading:after, .loading-small:after, .icon-loading:after, .icon-loading-dark:after, .icon-loading-small:after, .icon-loading-small-dark:after {
- border: 2px solid rgba(150, 150, 150, 0.5);
- border-top-color: #646464;
-}
-
-.icon-loading-dark:after, .icon-loading-small-dark:after {
- border: 2px solid rgba(187, 187, 187, 0.5);
- border-top-color: #bbb;
-}
-
-.icon-loading-small:after, .icon-loading-small-dark:after {
- height: 16px;
- width: 16px;
- margin: -9px 0 0 -9px;
-}
-
-.icon-info-white {
- background-image: url(../img/actions/info-white.svg?v=1);
-}
-
-@-webkit-keyframes rotate {
- from {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg);
- }
-}
-@keyframes rotate {
- from {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg);
- }
-}
-/*!
- * Bootstrap v3.3.5 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-.tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
- font-style: normal;
- font-weight: normal;
- letter-spacing: normal;
- line-break: auto;
- line-height: 1.42857143;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- white-space: normal;
- word-break: normal;
- word-spacing: normal;
- word-wrap: normal;
- font-size: 12px;
- opacity: 0;
- filter: alpha(opacity=0);
-}
-.tooltip.in {
- opacity: 0.9;
- filter: alpha(opacity=90);
-}
-.tooltip.top {
- margin-top: -3px;
- padding: 5px 0;
-}
-.tooltip.right {
- margin-left: 3px;
- padding: 0 5px;
-}
-.tooltip.bottom {
- margin-top: 3px;
- padding: 5px 0;
-}
-.tooltip.left {
- margin-left: -3px;
- padding: 0 5px;
-}
-
-.tooltip-inner {
- max-width: 350px;
- padding: 3px 8px;
- color: #ffffff;
- text-align: center;
- background-color: #000000;
- border-radius: 4px;
-}
-
-.tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-
-.tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000000;
-}
-.tooltip.top-left .tooltip-arrow {
- bottom: 0;
- right: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000000;
-}
-.tooltip.top-right .tooltip-arrow {
- bottom: 0;
- left: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000000;
-}
-.tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-width: 5px 5px 5px 0;
- border-right-color: #000000;
-}
-.tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-width: 5px 0 5px 5px;
- border-left-color: #000000;
-}
-.tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000000;
-}
-.tooltip.bottom-left .tooltip-arrow {
- top: 0;
- right: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000000;
-}
-.tooltip.bottom-right .tooltip-arrow {
- top: 0;
- left: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000000;
-}
-
-/* SCROLLING */
-::-webkit-scrollbar {
- width: 5px;
-}
-
-::-webkit-scrollbar-track-piece {
- background-color: transparent;
-}
-
-::-webkit-scrollbar-thumb {
- background: #ddd;
- border-radius: 3px;
-}
-.error-wide {
- width: 700px;
- margin-left: -200px !important;
-}
-
-/* Config write issue */
-#body-login .v-align {
- width: inherit;
-}
-#body-login .wrapper {
- min-height: 100%;
- margin: 0 auto -70px;
- width: 300px;
-}
-.warning legend, .warning a, .error a {
- color: #fff !important;
- font-weight: 600 !important;
-}
-#body-login ul.error-wide {
- margin-top: 35px;
-}
-
-/* Update info */
-#body-login .update {
- width: inherit;
- text-align: center;
-}
-#body-login .update h2 {
- margin: 0 0 20px;
-}
-
-#body-login .update a {
- color: #fff;
- border-bottom: 1px solid #aaa;
-}
-
-/* INPUTS */
-input[type="text"], input[type="password"], input[type="search"], input[type="number"], input[type="email"], input[type="tel"], input[type="url"], input[type="time"], input[type="date"], textarea, select, button, .button, input[type="submit"], input[type="button"], #quota, .pager li a {
- width: 130px;
- margin: 3px 3px 3px 0;
- padding: 7px 6px 5px;
- font-size: 13px;
- background-color: #fff;
- color: #333;
- border: 1px solid #ddd;
- outline: none;
- border-radius: 3px;
-}
-#body-login input {
- font-size: 20px;
- margin: 5px;
- padding: 11px 10px 9px;
-}
-input[type="submit"], input[type="button"], button, .button {
- width: auto;
- min-width: 25px;
- padding: 5px;
- background-color: rgba(240, 240, 240, 0.9);
- font-weight: 600;
- color: #555;
- border: 1px solid rgba(240, 240, 240, 0.9);
- cursor: pointer;
-}
-
-input {
- font-size: 20px;
- margin: 5px;
- padding: 11px 10px 9px;
-}
-input[type='text'], input[type='password'], input[type='email'] {
- font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
- border: none;
- font-weight: 300;
- font-size: 20px;
- margin: 5px;
- padding: 11px 10px 9px;
- -webkit-appearance: textfield;
- -moz-appearance: textfield;
- box-sizing: content-box;
- background: #fff;
- color: #555;
- cursor: text;
- font-family: inherit;
- outline: none;
- border-radius: 3px;
- width: 249px;
-}
-input.login {
- width: 269px;
- background-position: right 16px center;
-}
-input[type='submit'] {
- padding: 10px 20px;
- /* larger log in and installation buttons */
-}
-
-/* Nicely grouping input field sets */
-.grouptop, .groupmiddle, .groupbottom {
- position: relative;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.grouptop input {
- margin-bottom: 0 !important;
- border-bottom: 0 !important;
- border-bottom-left-radius: 0 !important;
- border-bottom-right-radius: 0 !important;
-}
-
-.groupmiddle input {
- margin-top: 0 !important;
- margin-bottom: 0 !important;
- border-top: 0 !important;
- border-bottom: 0 !important;
- border-radius: 0 !important;
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1) inset !important;
-}
-
-.groupbottom input {
- margin-top: 0 !important;
- border-top: 0 !important;
- border-top-right-radius: 0 !important;
- border-top-left-radius: 0 !important;
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1) inset !important;
-}
-
-.groupbottom input[type=submit] {
- box-shadow: none !important;
-}
-
-label.infield {
- display: none;
-}
-
-/* Primary action button, use sparingly */
-.primary {
- border: 1px solid #0082c9;
- background-color: #00a2e9;
- color: #fff;
-}
-
-input[type='submit'].primary, input[type='button'].primary {
- border: 1px solid #0082c9;
- background-color: #00a2e9;
- color: #fff;
-}
-
-button.primary, .button.primary {
- border: 1px solid #0082c9;
- background-color: #00a2e9;
- color: #fff;
-}
-
-.primary:hover {
- background-color: #0092d9;
- color: #fff;
-}
-
-input[type='submit'].primary:hover, input[type='button'].primary:hover {
- background-color: #0092d9;
- color: #fff;
-}
-
-button.primary:hover, .button.primary:hover, .primary:focus {
- background-color: #0092d9;
- color: #fff;
-}
-
-input[type='submit'].primary:focus, input[type='button'].primary:focus {
- background-color: #0092d9;
- color: #fff;
-}
-
-button.primary:focus, .button.primary:focus {
- background-color: #0092d9;
- color: #fff;
-}
-
-.primary:active {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input[type='submit'].primary:active, input[type='button'].primary:active {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-button.primary:active, .button.primary:active, .primary:disabled {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input[type='submit'].primary:disabled, input[type='button'].primary:disabled {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-button.primary:disabled, .button.primary:disabled, .primary:disabled:hover {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input[type='submit'].primary:disabled:hover, input[type='button'].primary:disabled:hover {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-button.primary:disabled:hover, .button.primary:disabled:hover, .primary:disabled:focus {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input[type='submit'].primary:disabled:focus, input[type='button'].primary:disabled:focus {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-button.primary:disabled:focus, .button.primary:disabled:focus {
- background-color: #00a2e9;
- color: #bbb;
-}
-input, textarea, select, button {
- font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
-}
diff --git a/core/css/jquery-ui-fixes.scss b/core/css/jquery-ui-fixes.css
index 4cf4f4cdd4a..e8cf2b769b8 100644
--- a/core/css/jquery-ui-fixes.scss
+++ b/core/css/jquery-ui-fixes.css
@@ -1,124 +1,134 @@
/* Component containers
----------------------------------*/
-
.ui-widget {
- font-family: 'Lucida Grande', Arial, Verdana, sans-serif;
+ font-family: "Lucida Grande", Arial, Verdana, sans-serif;
font-size: 1em;
- button {
- font-family: 'Lucida Grande', Arial, Verdana, sans-serif;
- }
}
-
+.ui-widget button {
+ font-family: "Lucida Grande", Arial, Verdana, sans-serif;
+}
.ui-widget-content {
border: 1px solid #dddddd;
background: #eeeeee url('images/ui-bg_highlight-soft_100_eeeeee_1x100.png') 50% top repeat-x;
color: #333333;
- a {
- color: #333333;
- }
}
-
+.ui-widget-content a {
+ color: #333333;
+}
.ui-widget-header {
border: 1px solid #0082c9;
background: #0082c9;
color: #ffffff;
- a {
- color: #ffffff;
- }
+}
+.ui-widget-header a {
+ color: #ffffff;
}
/* Interaction states
----------------------------------*/
-
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
border: 1px solid #ddd;
background: #f8f8f8 url('images/ui-bg_glass_100_f8f8f8_1x400.png') 50% 50% repeat-x;
font-weight: bold;
color: #555;
}
-
-.ui-state-default a {
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
color: #555;
- &:link, &:visited {
- color: #555;
- }
}
-
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
border: 1px solid #ddd;
background: #ffffff url('images/ui-bg_flat_100_ffffff_40x100.png') 50% 50% repeat-x;
font-weight: bold;
color: #333;
}
-
-.ui-state-hover a {
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited {
color: #333;
- &:hover, &:link, &:visited {
- color: #333;
- }
}
-
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
border: 1px solid #0082c9;
background: #f8f8f8 url('images/ui-bg_glass_100_f8f8f8_1x400.png') 50% 50% repeat-x;
font-weight: bold;
color: #0082c9;
}
-
-.ui-state-active a {
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
color: #0082c9;
- &:link, &:visited {
- color: #0082c9;
- }
}
/* Interaction Cues
----------------------------------*/
-
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
border: 1px solid #ddd;
background: #f8f8f8 url('images/ui-bg_highlight-hard_100_f8f8f8_1x100.png') 50% top repeat-x;
color: #555;
}
-
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a {
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
color: #555;
}
-
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
border: 1px solid #cd0a0a;
background: #b81900 url('images/ui-bg_diagonals-thick_18_b81900_40x40.png') 50% 50% repeat;
color: #ffffff;
}
-
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a, .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text {
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
color: #ffffff;
}
/* Icons
----------------------------------*/
-
-.ui-state-default .ui-icon, .ui-state-hover .ui-icon, .ui-state-focus .ui-icon, .ui-state-active .ui-icon {
+.ui-state-default .ui-icon {
+ background-image: url('images/ui-icons_1d2d44_256x240.png');
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url('images/ui-icons_1d2d44_256x240.png');
+}
+.ui-state-active .ui-icon {
background-image: url('images/ui-icons_1d2d44_256x240.png');
}
-
.ui-state-highlight .ui-icon {
background-image: url('images/ui-icons_ffffff_256x240.png');
}
-
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
background-image: url('images/ui-icons_ffd27a_256x240.png');
}
/* Misc visuals
----------------------------------*/
/* Overlays */
-
.ui-widget-overlay {
background: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat;
opacity: .5;
}
-
.ui-widget-shadow {
margin: -5px 0 0 -5px;
padding: 5px;
diff --git a/core/css/multiselect.scss b/core/css/multiselect.scss
index 024e5818a40..4b5d9cb6cf3 100644
--- a/core/css/multiselect.scss
+++ b/core/css/multiselect.scss
@@ -1,5 +1,16 @@
/**
- * @copyright Copyright (c) 2011, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Sergio Bertolín <sbertolin@solidgear.es>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2014, Vincent Petry <pvince81@owncloud.com>
+ * @copyright Copyright (c) 2013, Vincent Petry <pvince81@owncloud.com>
+ * @copyright Copyright (c) 2013, raghunayyar <me@iraghu.com>
+ * @copyright Copyright (c) 2013, Victor Dubiniuk <victor.dubiniuk@gmail.com>
+ * @copyright Copyright (c) 2013, kondou <kondou@ts.unde.re>
+ * @copyright Copyright (c) 2012, Thomas Tanghus <thomas@tanghus.net>
+ * @copyright Copyright (c) 2012, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2012, Jan-Christoph Borchardt <hey@jancborchardt.net>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/core/css/share.scss b/core/css/share.scss
index 7ce365a1454..8852ad2748e 100644
--- a/core/css/share.scss
+++ b/core/css/share.scss
@@ -1,6 +1,14 @@
/**
- * @copyright Copyright (c) 2011, Jan-Christoph Borchardt <hey@jancborchardt.net>
- * @copyright Copyright (c) 2017, John Molakvoæ (skjnldsv@protonmail.com)
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, Julia Bode <julia.bode@lulisaur.us>
+ * @copyright Copyright (c) 2016, Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2015, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
+ * @copyright Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
+ * @copyright Copyright (c) 2015, Roeland Jago Douma <roeland@famdouma.nl>
+ * @copyright Copyright (c) 2015, Morris Jobke <hey@morrisjobke.de>
*
* @license GNU AGPL version 3 or any later version
*
@@ -73,7 +81,7 @@
#shareWithList {
list-style-type: none;
padding: 8px;
- li {
+ > li {
padding-top: 10px;
padding-bottom: 10px;
font-weight: bold;
@@ -85,8 +93,8 @@
flex-shrink: 0;
position: relative;
.popovermenu {
- right: -6px;
- top: 40px;
+ right: -11px;
+ top: 35px;
padding: 3px 6px;
}
}
@@ -112,9 +120,6 @@
vertical-align: middle;
flex-grow: 5;
}
- li label {
- margin-right: 8px;
- }
}
a {
diff --git a/core/css/styles.scss b/core/css/styles.scss
index affaec14342..a709ef56152 100644
--- a/core/css/styles.scss
+++ b/core/css/styles.scss
@@ -1,6 +1,17 @@
-/* Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net
- This file is licensed under the Affero General Public License version 3 or later.
- See the COPYING-README file. */
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2016, Raghu Nayyar <hey@raghunayyar.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {
margin: 0;
@@ -168,8 +179,7 @@ body {
color: #fff;
border: 0;
border-radius: 3px;
- margin-top: 9px;
- float: right;
+ margin-top: 3px;
width: 0;
cursor: pointer;
-webkit-transition: all 100ms;
@@ -179,10 +189,9 @@ body {
&:focus, &:active, &:valid {
color: #fff;
width: 155px;
- max-width: 50%;
cursor: text;
- background-color: #0082c9;
- border: 1px solid rgba(255, 255, 255, 0.5);
+ background-color: #0082c9 !important;
+ border: 1px solid rgba(255, 255, 255, 0.5) !important;
}
}
@@ -567,19 +576,19 @@ label.infield {
}
#pass2, input[name='personal-password-clone'] {
- padding: .6em 2.5em .4em .4em;
- width: 8em;
+ padding-right: 30px;
}
+.personal-show-container {
+ position: relative;
+ display: inline-block;
+ margin-right: 6px;
+}
#personal-show + label {
- height: 14px;
- margin-top: -25px;
- left: 295px;
display: block;
-}
-
-#passwordbutton {
- margin-left: .5em;
+ right: 0;
+ margin-top: -36px;
+ padding: 6px 4px;
}
/* Database selector */
@@ -724,9 +733,9 @@ label.infield {
#body-login input {
font-size: 20px;
margin: 5px;
- padding: 11px 10px 9px;
+ padding: 10px 10px 8px;
&[type='text'], &[type='password'] {
- width: 249px;
+ width: calc(100% - 10px); /* 5px margin */
}
&.login {
width: 269px;
diff --git a/core/css/systemtags.scss b/core/css/systemtags.scss
index 1ae26710108..b32f33f36e5 100644
--- a/core/css/systemtags.scss
+++ b/core/css/systemtags.scss
@@ -1,5 +1,10 @@
/**
- * @copyright Copyright (c) 2017
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl>
+ * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2016, Vincent Petry <pvince81@owncloud.com>
+ * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org>
+ * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/core/css/tooltip.scss b/core/css/tooltip.scss
index 96073962884..263dad0b0c9 100644
--- a/core/css/tooltip.scss
+++ b/core/css/tooltip.scss
@@ -1,4 +1,10 @@
-/*!
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl>
+ * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org>
+ * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
+ *
* Bootstrap v3.3.5 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
diff --git a/core/css/update.css b/core/css/update.css
deleted file mode 100644
index 0ae72fd04a0..00000000000
--- a/core/css/update.css
+++ /dev/null
@@ -1,449 +0,0 @@
-#update-progress-icon {
- height: 32px;
- margin: 10px;
- background-size: 32px;
-}
-
-#update-progress-message-error,
-#update-progress-message-warnings {
- font-weight: 600;
- margin-bottom: 10px;
-}
-
-#update-progress-message {
- margin-bottom: 10px;
-}
-
-.update-show-detailed {
- padding: 13px;
- display: block;
- opacity: .75;
-}
-
-#body-login .update a.update-show-detailed {
- border-bottom: inherit;
-}
-
-#update-progress-detailed {
- text-align: left;
-}
-
-#body-login .warning.hidden {
- display: none;
-}
-
-/**
- * Below this is a copy of the original CSS because we moved to on-the-fly
- * generated CSS from SCSS which doesn't work during update
- */
-
-/** HEADER **/
-
-/* prevent ugly selection effect on accidental selection */
-#header {
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
-}
-
-/* removed until content-focusing issue is fixed */
-#skip-to-content a {
- position: absolute;
- left: -10000px;
- top: auto;
- width: 1px;
- height: 1px;
- overflow: hidden;
-}
-#skip-to-content a:focus {
- left: 76px;
- top: -9px;
- color: #fff;
- width: auto;
- height: auto;
-}
-
-/* HEADERS ------------------------------------------------------------------ */
-
-#header .logo {
- background-image: url('../img/logo-icon.svg?v=1');
- background-repeat: no-repeat;
- background-size: 175px;
- background-position: center;
- width: 252px;
- height: 120px;
- margin: 0 auto;
-}
-
-/** STYLES **/
-
-/* Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net
- This file is licensed under the Affero General Public License version 3 or later.
- See the COPYING-README file. */
-
-html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section { margin:0; padding:0; border:0; outline:0; font-weight:inherit; font-size:100%; font-family:inherit; vertical-align:baseline; cursor:default; }
-html, body { height:100%; }
-article, aside, dialog, figure, footer, header, hgroup, nav, section { display:block; }
-body { line-height:1.5; }
-table { border-collapse:separate; border-spacing:0; white-space:nowrap; }
-caption, th, td { text-align:left; font-weight:normal; }
-table, td, th { vertical-align:middle; }
-a { border:0; color:#000; text-decoration:none;}
-a, a *, input, input *, select, .button span, label { cursor:pointer; }
-ul { list-style:none; }
-
-body {
- background-color: #ffffff;
- font-weight: 400;
- font-size: .8em;
- line-height: 1.6em;
- font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
- color: #000;
- height: auto;
-}
-
-#body-login {
- text-align: center;
- background-color: #0082c9;
- background-image: url('../img/background.jpg?v=1');
- background-position: 50% 50%;
- background-repeat: no-repeat;
- background-size: cover;
-}
-
-#nojavascript {
- position: fixed;
- top: 0;
- bottom: 0;
- height: 100%;
- width: 100%;
- z-index: 9000;
- text-align: center;
- background-color: rgba(0,0,0,0.5);
- color: #fff;
- line-height: 125%;
- font-size: 24px;
-}
-#nojavascript div {
- display: block;
- position: relative;
- width: 50%;
- top: 35%;
- margin: 0px auto;
-}
-#nojavascript a {
- color: #fff;
- border-bottom: 2px dotted #fff;
-}
-#nojavascript a:hover,
-#nojavascript a:focus {
- color: #ddd;
-}
-
-/* SCROLLING */
-::-webkit-scrollbar {
- width: 5px;
-}
-::-webkit-scrollbar-track-piece {
- background-color: transparent;
-}
-::-webkit-scrollbar-thumb {
- background: #ddd;
- border-radius: 3px;
-}
-
-/* LOG IN & INSTALLATION ------------------------------------------------------------ */
-
-/* Some whitespace to the top */
-#body-login #header {
- padding-top: 100px;
-}
-#body-login {
- background-attachment: fixed; /* fix background gradient */
- height: 100%; /* fix sticky footer */
-}
-
-/* Dark subtle label text */
-#body-login p.info {
- text-align: center;
- color: #fff;
-}
-
-#body-login .update h2 {
- margin: 0 0 20px;
-}
-
-#body-login .update a {
- color: #fff;
- border-bottom: 1px solid #aaa;
-}
-
-#body-login .infogroup {
- margin-bottom: 15px;
-}
-
-#body-login p#message img {
- vertical-align: middle;
- padding: 5px;
-}
-
-#body-login p.info {
- margin: 0 auto;
- padding-top: 20px;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-#body-login p.info a {
- font-weight: 600;
- padding: 13px;
- margin: -13px;
- color: #fff;
-}
-
-#body-login .success {
- background:#d7fed7;
- border:1px solid #0f0;
- width: 35%;
- margin: 30px auto;
- padding:1em;
- text-align: center;
-}
-
-#body-login p.info a:hover,
-#body-login p.info a:focus {
- opacity: .6;
-}
-
-/* Warnings and errors are the same */
-#body-login .warning,
-#body-login .update,
-#body-login .error {
- display: block;
- padding: 10px;
- background-color: rgba(0,0,0,.3);
- color: #fff;
- text-align: left;
- border-radius: 3px;
- cursor: default;
-}
-
-#body-login .update {
- width: inherit;
- text-align: center;
-}
-
-#body-login .update .appList {
- list-style: disc;
- text-align: left;
- margin-left: 25px;
- margin-right: 25px;
-}
-
-#body-login .v-align {
- width: inherit;
-}
-
-.error a {
- color: #fff !important;
- font-weight: 600 !important;
-}
-.error a.button {
- color: #555 !important;
- display: inline-block;
- text-align: center;
-}
-.error pre {
- white-space: pre-wrap;
- text-align: left;
-}
-
-/* fixes for update page TODO should be fixed some time in a proper way */
-/* this is just for an error while updating the ownCloud instance */
-#body-login .updateProgress .error {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-
-/* Log in and install button */
-#body-login input {
- font-size: 20px;
- margin: 5px;
- padding: 11px 10px 9px;
-}
-#body-login input.login {
- width: 269px;
- background-position: right 16px center;
-}
-
-/* Sticky footer */
-#body-login .wrapper {
- min-height: 100%;
- margin: 0 auto -70px;
- width: 300px;
-}
-#body-login footer, #body-login .push {
- height: 70px;
-}
-
-code { font-family:"Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", monospace; }
-
-/* for IE10 */
-@-ms-viewport {
- width: device-width;
-}
-
-/** APPS **/
-
-/* buttons */
-button.loading {
- background-image: url('../img/loading.gif');
- background-position: right 10px center; background-repeat: no-repeat;
- background-size: 16px;
- padding-right: 30px;
-}
-
-/* heading styles */
-h2 {
- font-size: 20px;
- font-weight: 300;
- margin-bottom: 12px;
- line-height: 140%;
-}
-h3 {
- font-size: 15px;
- font-weight: 300;
- margin: 12px 0;
-}
-
-/* do not use italic typeface style, instead lighter color */
-em {
- font-style: normal;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- opacity: .5;
-}
-
-/** ICONS **/
-
-[class^="icon-"], [class*=" icon-"] {
- background-repeat: no-repeat;
- background-position: center;
- min-width: 16px;
- min-height: 16px;
-}
-
-/* general assets */
-
-.icon-loading-dark {
- position: relative;
-}
-.icon-loading-dark:after {
- z-index: 2;
- content: "";
- height: 30px;
- width: 30px;
- margin: -16px 0 0 -16px;
- position: absolute;
- top: 50%;
- left: 50%;
- border-radius: 100%;
- -webkit-animation: rotate .8s infinite linear;
- animation: rotate .8s infinite linear;
- -webkit-transform-origin: center;
- -ms-transform-origin: center;
- transform-origin: center;
-}
-.icon-loading-dark:after {
- border: 2px solid rgba(150, 150, 150, .5);
- border-top-color: rgb(100, 100, 100);
-}
-
-.icon-loading-dark:after,
-.icon-loading-small-dark:after {
- border: 2px solid rgba(187, 187, 187, .5);
- border-top-color: #bbb;
-}
-
-/* Css replaced elements don't have ::after nor ::before */
-img.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark, button.icon-loading-dark, textarea.icon-loading-dark, input.icon-loading-dark, select.icon-loading-dark {
- background-image: url("../img/loading-dark.gif");
-}
-
-@-webkit-keyframes rotate {
- from {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg);
- }
-}
-@keyframes rotate {
- from {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg);
- }
-}
-
-.icon-32 {
- background-size: 32px !important;
-}
-
-.icon-checkmark-white {
- background-image: url('../img/actions/checkmark-white.svg?v=1');
-}
-
-.icon-error-white {
- background-image: url('../img/actions/error-white.svg?v=1');
-}
-
-/* INPUTS */
-
-/* specifically override browser styles */
-input {
- font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
-}
-
-input[type="button"] {
- width: 130px;
- margin: 3px 3px 3px 0;
- padding: 7px 6px 5px;
- font-size: 13px;
- background-color: #fff;
- color: #333;
- border: 1px solid #ddd;
- outline: none;
- border-radius: 3px;
-}
-
-/* correctly align images inside of buttons */
-input img {
- vertical-align: text-bottom;
-}
-
-/* BUTTONS */
-input[type="button"] {
- width: auto;
- min-width: 25px;
- padding: 5px;
- background-color: rgba(240,240,240,.9);
- font-weight: 600;
- color: #555;
- border: 1px solid rgba(240,240,240,.9);
- cursor: pointer;
-}
-
-input[type="button"]:hover, input[type="button"]:focus {
- background-color: rgba(255, 255, 255, .95);
- color: #111;
-}
-input[type="button"] img {
- border: none;
- box-shadow: none;
-}
diff --git a/core/img/actions/checkbox-checked-disabled.svg b/core/img/actions/checkbox-checked-disabled.svg
deleted file mode 100644
index 8b0118da343..00000000000
--- a/core/img/actions/checkbox-checked-disabled.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#fff"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm8.924 2.066l1.433 1.432-6.365 6.365L2.75 7.62l1.414-1.415 2.828 2.83 4.932-4.97z" fill="#969696"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-checked-white.svg b/core/img/actions/checkbox-checked-white.svg
deleted file mode 100644
index 8043bd463be..00000000000
--- a/core/img/actions/checkbox-checked-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm8.924 2.066l1.433 1.432-6.365 6.365L2.75 7.62l1.414-1.415 2.828 2.83 4.932-4.97z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-checked.svg b/core/img/actions/checkbox-checked.svg
deleted file mode 100644
index bd9241d664c..00000000000
--- a/core/img/actions/checkbox-checked.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#fff"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm8.924 2.066l1.433 1.432-6.365 6.365L2.75 7.62l1.414-1.415 2.828 2.83 4.932-4.97z" fill="#0082c9"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-disabled-white.svg b/core/img/actions/checkbox-disabled-white.svg
deleted file mode 100644
index c5cf4a66585..00000000000
--- a/core/img/actions/checkbox-disabled-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#dcdcdc"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-disabled.svg b/core/img/actions/checkbox-disabled.svg
deleted file mode 100644
index fa73b4f4352..00000000000
--- a/core/img/actions/checkbox-disabled.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#dcdcdc"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#969696"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-mark-white.svg b/core/img/actions/checkbox-mark-white.svg
new file mode 100644
index 00000000000..8407898164b
--- /dev/null
+++ b/core/img/actions/checkbox-mark-white.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M11.924 4.066l-4.932 4.97-2.828-2.83L2.75 7.618l4.242 4.243 6.365-6.365-1.433-1.432z"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-mark.svg b/core/img/actions/checkbox-mark.svg
new file mode 100644
index 00000000000..1013b6cc3f2
--- /dev/null
+++ b/core/img/actions/checkbox-mark.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M11.924 4.066l-4.932 4.97-2.828-2.83L2.75 7.618l4.242 4.243 6.365-6.365-1.433-1.432z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-mixed-disabled.svg b/core/img/actions/checkbox-mixed-disabled.svg
deleted file mode 100644
index 2e8e98fb9fc..00000000000
--- a/core/img/actions/checkbox-mixed-disabled.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#dcdcdc"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#969696"/><path d="M4 7h8v2H4z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-mixed-white.svg b/core/img/actions/checkbox-mixed-white.svg
index ca7d92bbeed..c66636717be 100644
--- a/core/img/actions/checkbox-mixed-white.svg
+++ b/core/img/actions/checkbox-mixed-white.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm1 5h8v2H4V7z" fill="#fff"/></svg> \ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M4 7v2h8V7H4z"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-mixed.svg b/core/img/actions/checkbox-mixed.svg
index 8a1412bf849..308baae3920 100644
--- a/core/img/actions/checkbox-mixed.svg
+++ b/core/img/actions/checkbox-mixed.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#fff"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm1 5h8v2H4V7z" fill="#969696"/></svg> \ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M4 7v2h8V7H4z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-white.svg b/core/img/actions/checkbox-white.svg
deleted file mode 100644
index 1a0cd569e1c..00000000000
--- a/core/img/actions/checkbox-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox.svg b/core/img/actions/checkbox.svg
deleted file mode 100644
index 46cad084ab5..00000000000
--- a/core/img/actions/checkbox.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#fff"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#969696"/></svg> \ No newline at end of file
diff --git a/core/img/actions/radio-checked-disabled.svg b/core/img/actions/radio-checked-disabled.svg
deleted file mode 100644
index 470293c2960..00000000000
--- a/core/img/actions/radio-checked-disabled.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13z" fill="#fff"/><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="#969696"/></svg> \ No newline at end of file
diff --git a/core/img/actions/radio-checked-white.svg b/core/img/actions/radio-checked-white.svg
deleted file mode 100644
index d024c91ff19..00000000000
--- a/core/img/actions/radio-checked-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/radio-checked.svg b/core/img/actions/radio-checked.svg
deleted file mode 100644
index bb4c622a9f7..00000000000
--- a/core/img/actions/radio-checked.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13z" fill="#fff"/><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="#0082c9"/></svg> \ No newline at end of file
diff --git a/core/img/actions/radio-disabled.svg b/core/img/actions/radio-disabled.svg
deleted file mode 100644
index e6bf778f192..00000000000
--- a/core/img/actions/radio-disabled.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13z" fill="#dcdcdc"/><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6z" fill="#969696"/></svg> \ No newline at end of file
diff --git a/core/img/actions/radio-white.svg b/core/img/actions/radio-white.svg
deleted file mode 100644
index 0eda991c4d3..00000000000
--- a/core/img/actions/radio-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/radio.svg b/core/img/actions/radio.svg
deleted file mode 100644
index 31a364b88e0..00000000000
--- a/core/img/actions/radio.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13z" fill="#fff"/><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6z" fill="#969696"/></svg> \ No newline at end of file
diff --git a/core/img/actions/settings-dark.svg b/core/img/actions/settings-dark.svg
new file mode 100644
index 00000000000..2160b673e30
--- /dev/null
+++ b/core/img/actions/settings-dark.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1"><path d="M6.938 0A.43.43 0 0 0 6.5.438v1.25a5.818 5.818 0 0 0-1.53.656l-.907-.906a.436.436 0 0 0-.625 0l-1.5 1.5a.436.436 0 0 0 0 .624l.906.907c-.285.48-.514.976-.656 1.53H.938a.43.43 0 0 0-.438.438v2.125C.5 8.81.69 9 .938 9h1.25a5.82 5.82 0 0 0 .656 1.53l-.907.908a.436.436 0 0 0 0 .625l1.5 1.5c.176.176.45.176.625 0l.907-.907c.48.285.976.514 1.53.656v1.25c0 .25.19.438.437.438h2.125a.43.43 0 0 0 .438-.438v-1.25a5.82 5.82 0 0 0 1.53-.657l.907.907c.176.175.45.175.625 0l1.5-1.5a.436.436 0 0 0 0-.625l-.906-.906A5.79 5.79 0 0 0 13.812 9h1.25a.43.43 0 0 0 .438-.438V6.437A.43.43 0 0 0 15.062 6h-1.25a5.79 5.79 0 0 0-.656-1.532l.906-.906a.436.436 0 0 0 0-.625l-1.5-1.5a.436.436 0 0 0-.625 0l-.906.906a5.816 5.816 0 0 0-1.53-.656V.437A.43.43 0 0 0 9.063 0zM8 4.157a3.344 3.344 0 0 1 0 6.686 3.344 3.344 0 0 1 0-6.686z" display="block"/></svg>
diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js
index cb553947de6..84a3d18942f 100644
--- a/core/js/sharedialoglinkshareview.js
+++ b/core/js/sharedialoglinkshareview.js
@@ -43,6 +43,13 @@
'</div>' +
' {{/if}}' +
' {{/if}}' +
+ ' {{#if publicEditing}}' +
+ '<div id="allowPublicEditingWrapper">' +
+ ' <span class="icon-loading-small hidden"></span>' +
+ ' <input type="checkbox" value="1" name="allowPublicEditing" id="sharingDialogAllowPublicEditing-{{cid}}" class="checkbox publicEditingCheckbox" {{{publicEditingChecked}}} />' +
+ '<label for="sharingDialogAllowPublicEditing-{{cid}}">{{publicEditingLabel}}</label>' +
+ '</div>' +
+ ' {{/if}}' +
' {{#if showPasswordCheckBox}}' +
'<input type="checkbox" name="showPassword" id="showPassword-{{cid}}" class="checkbox showPasswordCheckbox" {{#if isPasswordSet}}checked="checked"{{/if}} value="1" />' +
'<label for="showPassword-{{cid}}">{{enablePasswordLabel}}</label>' +
@@ -87,6 +94,7 @@
'click .linkCheckbox': 'onLinkCheckBoxChange',
'click .linkText': 'onLinkTextClick',
'change .publicUploadCheckbox': 'onAllowPublicUploadChange',
+ 'change .publicEditingCheckbox': 'onAllowPublicEditingChange',
'change .hideFileListCheckbox': 'onHideFileListChange',
'click .showPasswordCheckbox': 'onShowPasswordClick'
},
@@ -128,7 +136,8 @@
'onLinkTextClick',
'onShowPasswordClick',
'onHideFileListChange',
- 'onAllowPublicUploadChange'
+ 'onAllowPublicUploadChange',
+ 'onAllowPublicEditingChange'
);
var clipboard = new Clipboard('.clipboardButton');
@@ -266,6 +275,20 @@
});
},
+ onAllowPublicEditingChange: function() {
+ var $checkbox = this.$('.publicEditingCheckbox');
+ $checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock');
+
+ var permissions = OC.PERMISSION_READ;
+ if($checkbox.is(':checked')) {
+ permissions = OC.PERMISSION_UPDATE | OC.PERMISSION_READ;
+ }
+
+ this.model.saveLinkShare({
+ permissions: permissions
+ });
+ },
+
onHideFileListChange: function () {
var $checkbox = this.$('.hideFileListCheckbox');
$checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock');
@@ -307,6 +330,12 @@
publicUploadChecked = 'checked="checked"';
}
+ var publicEditingChecked = '';
+ if(this.model.isPublicEditingAllowed()) {
+ publicEditingChecked = 'checked="checked"';
+ }
+
+
var hideFileList = publicUploadChecked;
var hideFileListChecked = '';
@@ -320,6 +349,11 @@
&& ( !this.configModel.get('enforcePasswordForPublicLink')
|| !this.model.get('linkShare').password);
+ var publicEditable =
+ !this.model.isFolder()
+ && isLinkShare
+ && this.model.updatePermissionPossible();
+
this.$el.html(linkShareTemplate({
cid: this.cid,
shareAllowed: true,
@@ -337,6 +371,9 @@
publicUploadChecked: publicUploadChecked,
hideFileListChecked: hideFileListChecked,
publicUploadLabel: t('core', 'Allow upload and editing'),
+ publicEditing: publicEditable,
+ publicEditingChecked: publicEditingChecked,
+ publicEditingLabel: t('core', 'Allow editing'),
hideFileListLabel: t('core', 'File drop (upload only)'),
mailPrivatePlaceholder: t('core', 'Email link to person'),
mailButtonText: t('core', 'Send')
diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js
index 0fe0747dd59..4647dedd722 100644
--- a/core/js/sharedialogshareelistview.js
+++ b/core/js/sharedialogshareelistview.js
@@ -59,7 +59,7 @@
'<ul>' +
'{{#if isResharingAllowed}} {{#if sharePermissionPossible}} {{#unless isMailShare}}' +
'<li>' +
- '<span class="shareOption">' +
+ '<span class="shareOption menuitem">' +
'<input id="canShare-{{cid}}-{{shareWith}}" type="checkbox" name="share" class="permissions checkbox" {{#if hasSharePermission}}checked="checked"{{/if}} data-permissions="{{sharePermission}}" />' +
'<label for="canShare-{{cid}}-{{shareWith}}">{{canShareLabel}}</label>' +
'</span>' +
@@ -68,7 +68,7 @@
'{{#if isFolder}}' +
'{{#if createPermissionPossible}}{{#unless isMailShare}}' +
'<li>' +
- '<span class="shareOption">' +
+ '<span class="shareOption menuitem">' +
'<input id="canCreate-{{cid}}-{{shareWith}}" type="checkbox" name="create" class="permissions checkbox" {{#if hasCreatePermission}}checked="checked"{{/if}} data-permissions="{{createPermission}}"/>' +
'<label for="canCreate-{{cid}}-{{shareWith}}">{{createPermissionLabel}}</label>' +
'</span>' +
@@ -76,7 +76,7 @@
'{{/unless}}{{/if}}' +
'{{#if updatePermissionPossible}}{{#unless isMailShare}}' +
'<li>' +
- '<span class="shareOption">' +
+ '<span class="shareOption menuitem">' +
'<input id="canUpdate-{{cid}}-{{shareWith}}" type="checkbox" name="update" class="permissions checkbox" {{#if hasUpdatePermission}}checked="checked"{{/if}} data-permissions="{{updatePermission}}"/>' +
'<label for="canUpdate-{{cid}}-{{shareWith}}">{{updatePermissionLabel}}</label>' +
'</span>' +
@@ -84,7 +84,7 @@
'{{/unless}}{{/if}}' +
'{{#if deletePermissionPossible}}{{#unless isMailShare}}' +
'<li>' +
- '<span class="shareOption">' +
+ '<span class="shareOption menuitem">' +
'<input id="canDelete-{{cid}}-{{shareWith}}" type="checkbox" name="delete" class="permissions checkbox" {{#if hasDeletePermission}}checked="checked"{{/if}} data-permissions="{{deletePermission}}"/>' +
'<label for="canDelete-{{cid}}-{{shareWith}}">{{deletePermissionLabel}}</label>' +
'</span>' +
diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js
index 9b10f067afc..ae4c07e3f4e 100644
--- a/core/js/shareitemmodel.js
+++ b/core/js/shareitemmodel.js
@@ -272,6 +272,10 @@
return this.get('allowPublicUploadStatus');
},
+ isPublicEditingAllowed: function() {
+ return this.get('allowPublicEditingStatus');
+ },
+
/**
* @returns {boolean}
*/
@@ -679,6 +683,17 @@
});
}
+ var allowPublicEditingStatus = true;
+ if(!_.isUndefined(data.shares)) {
+ $.each(data.shares, function (key, value) {
+ if (value.share_type === OC.Share.SHARE_TYPE_LINK) {
+ allowPublicEditingStatus = (value.permissions & OC.PERMISSION_UPDATE) ? true : false;
+ return true;
+ }
+ });
+ }
+
+
var hideFileListStatus = false;
if(!_.isUndefined(data.shares)) {
$.each(data.shares, function (key, value) {
@@ -762,6 +777,7 @@
linkShare: linkShare,
permissions: permissions,
allowPublicUploadStatus: allowPublicUploadStatus,
+ allowPublicEditingStatus: allowPublicEditingStatus,
hideFileListStatus: hideFileListStatus
};
},
diff --git a/core/l10n/bg_BG.js b/core/l10n/bg_BG.js
index cb41f4e1437..a23ead44e93 100644
--- a/core/l10n/bg_BG.js
+++ b/core/l10n/bg_BG.js
@@ -121,6 +121,7 @@ OC.L10N.register(
"Link" : "Връзка",
"Password protect" : "Защитено с парола",
"Allow upload and editing" : "Позволи обновяване и редактиране",
+ "Allow editing" : "Позволяване на редактиране",
"File drop (upload only)" : "Пускане на файл (качване само)",
"Email link to person" : "Имейл връзка към човек",
"Send" : "Изпращане",
@@ -238,8 +239,8 @@ OC.L10N.register(
"Need help?" : "Нуждаете се от помощ?",
"See the documentation" : "Прегледайте документацията",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "За да функционира приложението изисква JavaScript. Моля, {linkstart}включете JavaScript{linkend} и презаредете страницата.",
- "Log out" : "Отписване",
"Search" : "Търсене",
+ "Log out" : "Отписване",
"This action requires you to confirm your password:" : "Това действие изисква да потвърдите паролата си:",
"Confirm your password" : "Потвърдете паролата си",
"Server side authentication failed!" : "Удостоверяването от страна на сървъра е неуспешно!",
@@ -340,7 +341,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Файловете Ви са криптирани. Ако не сте настроили ключ за възстановяване, няма да можете да възстановите данните си след смяна на паролата.<br />Ако не сте сигурни какво да направите, моля, свържете се с Вашия администратор преди да продължите. <br/>Наистина ли желаете да продължите?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Сървърът няма работеща интернет връзка. Това означава, че някои функции като прикачването на външни дискови устройства, уведомления за обновяване или инсталиране на външни приложения няма да работят. Достъпът на файлове отвън или изпращане на имейли за уведомление вероятно също няма да работят. Препоръчваме да включиш интернет връзката за този сървър ако искаш да използваш всички тези функции.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Хедърите за обратно прокси са невалидни, или достъпвате Nextcloud от доверено прокси. Ако не достъпвате Nextcloud от доверено прокси, то това е проблем в сигурността и може да позволи на хакер да прикрие IP адреса си в Nextcloud. Допълнителна информация може да бъде намерена в нашата <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документация</a>.",
- "Allow editing" : "Позволяване на редактиране",
"Hide file listing" : "Скрий показването на файлове",
"Sending ..." : "Изпращане ...",
"Email sent" : "Имейла е изпратен",
diff --git a/core/l10n/bg_BG.json b/core/l10n/bg_BG.json
index 91ea33e4c87..7146057c1f0 100644
--- a/core/l10n/bg_BG.json
+++ b/core/l10n/bg_BG.json
@@ -119,6 +119,7 @@
"Link" : "Връзка",
"Password protect" : "Защитено с парола",
"Allow upload and editing" : "Позволи обновяване и редактиране",
+ "Allow editing" : "Позволяване на редактиране",
"File drop (upload only)" : "Пускане на файл (качване само)",
"Email link to person" : "Имейл връзка към човек",
"Send" : "Изпращане",
@@ -236,8 +237,8 @@
"Need help?" : "Нуждаете се от помощ?",
"See the documentation" : "Прегледайте документацията",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "За да функционира приложението изисква JavaScript. Моля, {linkstart}включете JavaScript{linkend} и презаредете страницата.",
- "Log out" : "Отписване",
"Search" : "Търсене",
+ "Log out" : "Отписване",
"This action requires you to confirm your password:" : "Това действие изисква да потвърдите паролата си:",
"Confirm your password" : "Потвърдете паролата си",
"Server side authentication failed!" : "Удостоверяването от страна на сървъра е неуспешно!",
@@ -338,7 +339,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Файловете Ви са криптирани. Ако не сте настроили ключ за възстановяване, няма да можете да възстановите данните си след смяна на паролата.<br />Ако не сте сигурни какво да направите, моля, свържете се с Вашия администратор преди да продължите. <br/>Наистина ли желаете да продължите?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Сървърът няма работеща интернет връзка. Това означава, че някои функции като прикачването на външни дискови устройства, уведомления за обновяване или инсталиране на външни приложения няма да работят. Достъпът на файлове отвън или изпращане на имейли за уведомление вероятно също няма да работят. Препоръчваме да включиш интернет връзката за този сървър ако искаш да използваш всички тези функции.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Хедърите за обратно прокси са невалидни, или достъпвате Nextcloud от доверено прокси. Ако не достъпвате Nextcloud от доверено прокси, то това е проблем в сигурността и може да позволи на хакер да прикрие IP адреса си в Nextcloud. Допълнителна информация може да бъде намерена в нашата <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документация</a>.",
- "Allow editing" : "Позволяване на редактиране",
"Hide file listing" : "Скрий показването на файлове",
"Sending ..." : "Изпращане ...",
"Email sent" : "Имейла е изпратен",
diff --git a/core/l10n/cs_CZ.js b/core/l10n/cs_CZ.js
index 67ea21fd64a..3c590e6f727 100644
--- a/core/l10n/cs_CZ.js
+++ b/core/l10n/cs_CZ.js
@@ -60,6 +60,7 @@ OC.L10N.register(
"seconds ago" : "před pár sekundami",
"Logging in …" : "Přihlašování …",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Odkaz na obnovení hesla byl odeslán na vaši emailovou adresu. Pokud jej v krátké době neobdržíte, zkontrolujte nevyžádanou poštu a koš.<br>Pokud jej nenaleznete, kontaktujte svého správce systému.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Po vyresetování vašeho hesla nebudete moc získat data zpět.<br/>Pokud si nejste jisti tím co děláte, předtím než budete pokračovat, kontaktujte vašeho administrátora.<br/>Opravdu chcete pokračovat?",
"I know what I'm doing" : "Vím co dělám",
"Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého správce systému.",
"No" : "Ne",
@@ -121,6 +122,7 @@ OC.L10N.register(
"Link" : "Odkaz",
"Password protect" : "Chránit heslem",
"Allow upload and editing" : "Povolit nahrávání a úpravy",
+ "Allow editing" : "Povolit úpravy",
"File drop (upload only)" : "Přetažení souboru (pouze nahrání)",
"Email link to person" : "Odeslat osobě odkaz emailem",
"Send" : "Odeslat",
@@ -239,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Potřebujete pomoc?",
"See the documentation" : "Shlédnout dokumentaci",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tato aplikace potřebuje pro správnou funkčnost JavaScript. Prosím {linkstart}povolte JavaScript{linkend} a znovu načtěte stránku.",
- "Log out" : "Odhlásit se",
"Search" : "Hledat",
+ "Log out" : "Odhlásit se",
"This action requires you to confirm your password:" : "Tato akce vyžaduje potvrzení vašeho hesla:",
"Confirm your password" : "Potvrdit heslo",
"Server side authentication failed!" : "Autentizace na serveru selhala!",
@@ -341,7 +343,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tento server nemá funkční připojení k Internetu. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti ownCloud, doporučujeme povolit pro tento server připojení k Internetu.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurace hlaviček reverzní proxy není správná nebo přistupujete na ownCloud z důvěryhodné proxy. Pokud nepřistupujete k ownCloud z důvěryhodné proxy, potom je toto bezpečností chyba a může útočníkovi umožnit falšovat IP adresu, kterou ownCloud vidí. Další informace lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentaci</a>.",
- "Allow editing" : "Povolit úpravy",
"Hide file listing" : "Skrýt seznam souborů",
"Sending ..." : "Odesílám ...",
"Email sent" : "Email odeslán",
diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json
index b1b7501e039..ef9261ac7b9 100644
--- a/core/l10n/cs_CZ.json
+++ b/core/l10n/cs_CZ.json
@@ -58,6 +58,7 @@
"seconds ago" : "před pár sekundami",
"Logging in …" : "Přihlašování …",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Odkaz na obnovení hesla byl odeslán na vaši emailovou adresu. Pokud jej v krátké době neobdržíte, zkontrolujte nevyžádanou poštu a koš.<br>Pokud jej nenaleznete, kontaktujte svého správce systému.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Po vyresetování vašeho hesla nebudete moc získat data zpět.<br/>Pokud si nejste jisti tím co děláte, předtím než budete pokračovat, kontaktujte vašeho administrátora.<br/>Opravdu chcete pokračovat?",
"I know what I'm doing" : "Vím co dělám",
"Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého správce systému.",
"No" : "Ne",
@@ -119,6 +120,7 @@
"Link" : "Odkaz",
"Password protect" : "Chránit heslem",
"Allow upload and editing" : "Povolit nahrávání a úpravy",
+ "Allow editing" : "Povolit úpravy",
"File drop (upload only)" : "Přetažení souboru (pouze nahrání)",
"Email link to person" : "Odeslat osobě odkaz emailem",
"Send" : "Odeslat",
@@ -237,8 +239,8 @@
"Need help?" : "Potřebujete pomoc?",
"See the documentation" : "Shlédnout dokumentaci",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tato aplikace potřebuje pro správnou funkčnost JavaScript. Prosím {linkstart}povolte JavaScript{linkend} a znovu načtěte stránku.",
- "Log out" : "Odhlásit se",
"Search" : "Hledat",
+ "Log out" : "Odhlásit se",
"This action requires you to confirm your password:" : "Tato akce vyžaduje potvrzení vašeho hesla:",
"Confirm your password" : "Potvrdit heslo",
"Server side authentication failed!" : "Autentizace na serveru selhala!",
@@ -339,7 +341,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tento server nemá funkční připojení k Internetu. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti ownCloud, doporučujeme povolit pro tento server připojení k Internetu.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurace hlaviček reverzní proxy není správná nebo přistupujete na ownCloud z důvěryhodné proxy. Pokud nepřistupujete k ownCloud z důvěryhodné proxy, potom je toto bezpečností chyba a může útočníkovi umožnit falšovat IP adresu, kterou ownCloud vidí. Další informace lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentaci</a>.",
- "Allow editing" : "Povolit úpravy",
"Hide file listing" : "Skrýt seznam souborů",
"Sending ..." : "Odesílám ...",
"Email sent" : "Email odeslán",
diff --git a/core/l10n/da.js b/core/l10n/da.js
index 8b8bfa3c9de..16740e8fc55 100644
--- a/core/l10n/da.js
+++ b/core/l10n/da.js
@@ -100,6 +100,7 @@ OC.L10N.register(
"Share link" : "Del link",
"Link" : "Link",
"Password protect" : "Beskyt med adgangskode",
+ "Allow editing" : "Tillad redigering",
"Email link to person" : "E-mail link til person",
"Send" : "Send",
"Shared with you and the group {group} by {owner}" : "Delt med dig og gruppen {group} af {owner}",
@@ -191,8 +192,8 @@ OC.L10N.register(
"Need help?" : "Brug for hjælp?",
"See the documentation" : "Se dokumentationen",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikation kræver JavaScript for at fungere korrekt. {linkstart}Slå venligst JavaScript til{linkend} og genindlæs siden. ",
- "Log out" : "Log ud",
"Search" : "Søg",
+ "Log out" : "Log ud",
"Server side authentication failed!" : "Server side godkendelse mislykkedes!",
"Please contact your administrator." : "Kontakt venligst din administrator",
"An internal error occurred." : "Der opstod en intern fejl.",
@@ -280,7 +281,6 @@ OC.L10N.register(
"Dec." : "Dec.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurationen af reverse proxy-headere er ikke korrekt eller du tilgår ownCloud fra en betroet proxy. Hvis du ikke tilgår ownCloud fra en betroet proxy, så er dette et sikkerhedsproblem og kan tillade en angriber af forfalske deres IP-adresse som synlig for ownCloud. Yderligere information kan findes i vores <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.",
- "Allow editing" : "Tillad redigering",
"Sending ..." : "Sender ...",
"Email sent" : "E-mail afsendt",
"Send link via email" : "Send link via e-mail",
diff --git a/core/l10n/da.json b/core/l10n/da.json
index c94b4019f56..b479be4e426 100644
--- a/core/l10n/da.json
+++ b/core/l10n/da.json
@@ -98,6 +98,7 @@
"Share link" : "Del link",
"Link" : "Link",
"Password protect" : "Beskyt med adgangskode",
+ "Allow editing" : "Tillad redigering",
"Email link to person" : "E-mail link til person",
"Send" : "Send",
"Shared with you and the group {group} by {owner}" : "Delt med dig og gruppen {group} af {owner}",
@@ -189,8 +190,8 @@
"Need help?" : "Brug for hjælp?",
"See the documentation" : "Se dokumentationen",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikation kræver JavaScript for at fungere korrekt. {linkstart}Slå venligst JavaScript til{linkend} og genindlæs siden. ",
- "Log out" : "Log ud",
"Search" : "Søg",
+ "Log out" : "Log ud",
"Server side authentication failed!" : "Server side godkendelse mislykkedes!",
"Please contact your administrator." : "Kontakt venligst din administrator",
"An internal error occurred." : "Der opstod en intern fejl.",
@@ -278,7 +279,6 @@
"Dec." : "Dec.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurationen af reverse proxy-headere er ikke korrekt eller du tilgår ownCloud fra en betroet proxy. Hvis du ikke tilgår ownCloud fra en betroet proxy, så er dette et sikkerhedsproblem og kan tillade en angriber af forfalske deres IP-adresse som synlig for ownCloud. Yderligere information kan findes i vores <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.",
- "Allow editing" : "Tillad redigering",
"Sending ..." : "Sender ...",
"Email sent" : "E-mail afsendt",
"Send link via email" : "Send link via e-mail",
diff --git a/core/l10n/de.js b/core/l10n/de.js
index 9c558ffd2a8..3ac9e1ab061 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -122,6 +122,7 @@ OC.L10N.register(
"Link" : "Link",
"Password protect" : "Passwortschutz",
"Allow upload and editing" : "Hochladen und Bearbeiten erlauben",
+ "Allow editing" : "Bearbeitung erlauben",
"File drop (upload only)" : "Dateien ablegen (nur Hochladen)",
"Email link to person" : "Link per E-Mail verschicken",
"Send" : "Senden",
@@ -240,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Hilfe nötig?",
"See the documentation" : "Schau in die Dokumentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt JavaScript zum ordnungsgemäßen Betrieb. Bitte aktiviere {linkstart}JavaScript{linkend} und lade die Seite neu.",
- "Log out" : "Abmelden",
"Search" : "Suche",
+ "Log out" : "Abmelden",
"This action requires you to confirm your password:" : "Dieser Vorgang benötigt eine Passwortbestätigung von dir:",
"Confirm your password" : "Bestätige dein Passwort",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
@@ -342,7 +343,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Deine Dateien sind verschlüsselt. Solltest du den Wiederherstellungsschlüssel nicht aktiviert haben, gibt es keine Möglichkeit, deine Daten zurückzuerlangen, nachdem dein Passwort zurückgesetzt wurde.<br />Falls du dir nicht sicher bist, was zu tun ist, kontaktiere bitte deinen Administrator, bevor du fortfährst<br />Möchtest du wirklich fortfahren?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn du alle Funktionen nutzen möchtest.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder du greifst auf Nextcloud über einen vertrauenswürdigen Proxy zu. Wenn du nicht über einen vertrauenswürdigen Proxy zugreifst, dann liegt ein Sicherheitsproblem vor, das es einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu findest du in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.",
- "Allow editing" : "Bearbeitung erlauben",
"Hide file listing" : "Dateiliste verbergen",
"Sending ..." : "Senden…",
"Email sent" : "E-Mail wurde verschickt",
diff --git a/core/l10n/de.json b/core/l10n/de.json
index 9491465ac37..be81fc7f0a2 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -120,6 +120,7 @@
"Link" : "Link",
"Password protect" : "Passwortschutz",
"Allow upload and editing" : "Hochladen und Bearbeiten erlauben",
+ "Allow editing" : "Bearbeitung erlauben",
"File drop (upload only)" : "Dateien ablegen (nur Hochladen)",
"Email link to person" : "Link per E-Mail verschicken",
"Send" : "Senden",
@@ -238,8 +239,8 @@
"Need help?" : "Hilfe nötig?",
"See the documentation" : "Schau in die Dokumentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt JavaScript zum ordnungsgemäßen Betrieb. Bitte aktiviere {linkstart}JavaScript{linkend} und lade die Seite neu.",
- "Log out" : "Abmelden",
"Search" : "Suche",
+ "Log out" : "Abmelden",
"This action requires you to confirm your password:" : "Dieser Vorgang benötigt eine Passwortbestätigung von dir:",
"Confirm your password" : "Bestätige dein Passwort",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
@@ -340,7 +341,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Deine Dateien sind verschlüsselt. Solltest du den Wiederherstellungsschlüssel nicht aktiviert haben, gibt es keine Möglichkeit, deine Daten zurückzuerlangen, nachdem dein Passwort zurückgesetzt wurde.<br />Falls du dir nicht sicher bist, was zu tun ist, kontaktiere bitte deinen Administrator, bevor du fortfährst<br />Möchtest du wirklich fortfahren?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn du alle Funktionen nutzen möchtest.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder du greifst auf Nextcloud über einen vertrauenswürdigen Proxy zu. Wenn du nicht über einen vertrauenswürdigen Proxy zugreifst, dann liegt ein Sicherheitsproblem vor, das es einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu findest du in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.",
- "Allow editing" : "Bearbeitung erlauben",
"Hide file listing" : "Dateiliste verbergen",
"Sending ..." : "Senden…",
"Email sent" : "E-Mail wurde verschickt",
diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js
index c73bccbf0b2..626653e7d63 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -122,6 +122,7 @@ OC.L10N.register(
"Link" : "Link",
"Password protect" : "Passwortschutz",
"Allow upload and editing" : "Hochladen und Bearbeiten erlauben",
+ "Allow editing" : "Bearbeitung erlauben",
"File drop (upload only)" : "Dateien ablegen (nur Hochladen)",
"Email link to person" : "Link per E-Mail verschicken",
"Send" : "Senden",
@@ -240,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Hilfe nötig?",
"See the documentation" : "Schauen Sie in die Dokumentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt zum ordnungsgemäßen Betrieb JavaScript. Bitte {linkstart}aktivieren Sie JavaScript{linkend} und laden Sie die Seite neu.",
- "Log out" : "Abmelden",
"Search" : "Suche",
+ "Log out" : "Abmelden",
"This action requires you to confirm your password:" : "Dieser Vorgang benötigt eine Passwortbestätigung von Ihnen:",
"Confirm your password" : "Bestätigen Sie Ihr Passwort",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
@@ -342,7 +343,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Sie alle Funktionen nutzen möchten.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder Sie greifen auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn Sie auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifen, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fäschen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.",
- "Allow editing" : "Bearbeitung erlauben",
"Hide file listing" : "Dateiliste verbergen",
"Sending ..." : "Senden…",
"Email sent" : "E-Mail gesendet",
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index 024fb770198..213f7886d71 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -120,6 +120,7 @@
"Link" : "Link",
"Password protect" : "Passwortschutz",
"Allow upload and editing" : "Hochladen und Bearbeiten erlauben",
+ "Allow editing" : "Bearbeitung erlauben",
"File drop (upload only)" : "Dateien ablegen (nur Hochladen)",
"Email link to person" : "Link per E-Mail verschicken",
"Send" : "Senden",
@@ -238,8 +239,8 @@
"Need help?" : "Hilfe nötig?",
"See the documentation" : "Schauen Sie in die Dokumentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt zum ordnungsgemäßen Betrieb JavaScript. Bitte {linkstart}aktivieren Sie JavaScript{linkend} und laden Sie die Seite neu.",
- "Log out" : "Abmelden",
"Search" : "Suche",
+ "Log out" : "Abmelden",
"This action requires you to confirm your password:" : "Dieser Vorgang benötigt eine Passwortbestätigung von Ihnen:",
"Confirm your password" : "Bestätigen Sie Ihr Passwort",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
@@ -340,7 +341,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Sie alle Funktionen nutzen möchten.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder Sie greifen auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn Sie auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifen, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fäschen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.",
- "Allow editing" : "Bearbeitung erlauben",
"Hide file listing" : "Dateiliste verbergen",
"Sending ..." : "Senden…",
"Email sent" : "E-Mail gesendet",
diff --git a/core/l10n/el.js b/core/l10n/el.js
index fe3def81035..c2eb36e3a9f 100644
--- a/core/l10n/el.js
+++ b/core/l10n/el.js
@@ -95,6 +95,7 @@ OC.L10N.register(
"Share link" : "Διαμοιρασμός συνδέσμου",
"Link" : "Σύνδεσμος",
"Password protect" : "Προστασία συνθηματικού",
+ "Allow editing" : "Επιτρέπεται η επεξεργασία",
"Email link to person" : "Αποστολή συνδέσμου με email ",
"Send" : "Αποστολή",
"Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}",
@@ -183,8 +184,8 @@ OC.L10N.register(
"Need help?" : "Θέλετε βοήθεια;",
"See the documentation" : "Δείτε την τεκμηρίωση",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Αυτή η εφαρμογή απαιτεί JavaScript για σωστή λειτουργία. Παρακαλώ {linkstart} ενεργοποιήστε τη JavaScrip {linkend} και επαναφορτώστε τη σελίδα.",
- "Log out" : "Αποσύνδεση",
"Search" : "Αναζήτηση",
+ "Log out" : "Αποσύνδεση",
"Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!",
"Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.",
"An internal error occurred." : "Παρουσιάστηκε ένα εσωτερικό σφάλμα.",
@@ -274,7 +275,6 @@ OC.L10N.register(
"Nov." : "Νοε.",
"Dec." : "Δεκ.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του κωδικού πρόσβασής σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε στ' αλήθεια να συνεχίσετε;",
- "Allow editing" : "Επιτρέπεται η επεξεργασία",
"Sending ..." : "Αποστολή...",
"Email sent" : "Το Email απεστάλη ",
"Send link via email" : "Αποστολή συνδέσμου μέσω email",
diff --git a/core/l10n/el.json b/core/l10n/el.json
index b2ba470c7b0..a93bcb6e975 100644
--- a/core/l10n/el.json
+++ b/core/l10n/el.json
@@ -93,6 +93,7 @@
"Share link" : "Διαμοιρασμός συνδέσμου",
"Link" : "Σύνδεσμος",
"Password protect" : "Προστασία συνθηματικού",
+ "Allow editing" : "Επιτρέπεται η επεξεργασία",
"Email link to person" : "Αποστολή συνδέσμου με email ",
"Send" : "Αποστολή",
"Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}",
@@ -181,8 +182,8 @@
"Need help?" : "Θέλετε βοήθεια;",
"See the documentation" : "Δείτε την τεκμηρίωση",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Αυτή η εφαρμογή απαιτεί JavaScript για σωστή λειτουργία. Παρακαλώ {linkstart} ενεργοποιήστε τη JavaScrip {linkend} και επαναφορτώστε τη σελίδα.",
- "Log out" : "Αποσύνδεση",
"Search" : "Αναζήτηση",
+ "Log out" : "Αποσύνδεση",
"Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!",
"Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.",
"An internal error occurred." : "Παρουσιάστηκε ένα εσωτερικό σφάλμα.",
@@ -272,7 +273,6 @@
"Nov." : "Νοε.",
"Dec." : "Δεκ.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του κωδικού πρόσβασής σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε στ' αλήθεια να συνεχίσετε;",
- "Allow editing" : "Επιτρέπεται η επεξεργασία",
"Sending ..." : "Αποστολή...",
"Email sent" : "Το Email απεστάλη ",
"Send link via email" : "Αποστολή συνδέσμου μέσω email",
diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js
index a12d3a48840..d78122ce116 100644
--- a/core/l10n/en_GB.js
+++ b/core/l10n/en_GB.js
@@ -116,6 +116,7 @@ OC.L10N.register(
"Share link" : "Share link",
"Link" : "Link",
"Password protect" : "Password protect",
+ "Allow editing" : "Allow editing",
"Email link to person" : "Email link to person",
"Send" : "Send",
"Shared with you and the group {group} by {owner}" : "Shared with you and the group {group} by {owner}",
@@ -211,8 +212,8 @@ OC.L10N.register(
"Need help?" : "Need help?",
"See the documentation" : "See the documentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.",
- "Log out" : "Log out",
"Search" : "Search",
+ "Log out" : "Log out",
"Server side authentication failed!" : "Server side authentication failed!",
"Please contact your administrator." : "Please contact your administrator.",
"An internal error occurred." : "An internal error occurred.",
@@ -305,7 +306,6 @@ OC.L10N.register(
"Dec." : "Dec.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
- "Allow editing" : "Allow editing",
"Hide file listing" : "Hide file listing",
"Sending ..." : "Sending ...",
"Email sent" : "Email sent",
diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json
index b5cb70086ef..64f79a7e768 100644
--- a/core/l10n/en_GB.json
+++ b/core/l10n/en_GB.json
@@ -114,6 +114,7 @@
"Share link" : "Share link",
"Link" : "Link",
"Password protect" : "Password protect",
+ "Allow editing" : "Allow editing",
"Email link to person" : "Email link to person",
"Send" : "Send",
"Shared with you and the group {group} by {owner}" : "Shared with you and the group {group} by {owner}",
@@ -209,8 +210,8 @@
"Need help?" : "Need help?",
"See the documentation" : "See the documentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.",
- "Log out" : "Log out",
"Search" : "Search",
+ "Log out" : "Log out",
"Server side authentication failed!" : "Server side authentication failed!",
"Please contact your administrator." : "Please contact your administrator.",
"An internal error occurred." : "An internal error occurred.",
@@ -303,7 +304,6 @@
"Dec." : "Dec.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
- "Allow editing" : "Allow editing",
"Hide file listing" : "Hide file listing",
"Sending ..." : "Sending ...",
"Email sent" : "Email sent",
diff --git a/core/l10n/es.js b/core/l10n/es.js
index e8b699a87d2..90a007b3658 100644
--- a/core/l10n/es.js
+++ b/core/l10n/es.js
@@ -121,6 +121,7 @@ OC.L10N.register(
"Link" : "Enlace",
"Password protect" : "Protección con contraseña",
"Allow upload and editing" : "Permitir subito y edición",
+ "Allow editing" : "Permitir edición",
"File drop (upload only)" : "Entrega de archivos (solo subida)",
"Email link to person" : "Enviar enlace por correo electrónico a una persona",
"Send" : "Enviar",
@@ -239,8 +240,8 @@ OC.L10N.register(
"Need help?" : "¿Necesita ayuda?",
"See the documentation" : "Vea la documentación",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere JavaScript para operar correctamente. Por favor, {linkstart}habilite JavaScript{linkend} y recargue la página.",
- "Log out" : "Salir",
"Search" : "Buscar",
+ "Log out" : "Salir",
"This action requires you to confirm your password:" : "Esta acción requiere que confirme su contraseña:",
"Confirm your password" : "Confirme su contraseña",
"Server side authentication failed!" : "La autenticación a fallado en el servidor.",
@@ -341,7 +342,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no ha activado la clave de recuperación, no habrá manera de recuperar los datos una vez su contraseña sea restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor no tiene una conexión a Internet. Esto significa que algunas de las características como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones o instalación de aplicaciones de terceros no funcionarán. Podría no funcionar el acceso a los archivos de forma remota y el envío de correos electrónicos de notificación. Sugerimos habilitar la conexión a Internet de este servidor, si quiere tener todas las funciones.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuración de las cabeceras inversas del proxy son incorrectas, o está accediendo a ownCloud desde un proxy confiable. Si no está accediendo a ownCloud desde un proxy certificado y confiable, este es un problema de seguridad y puede permitirle a un hacker camuflar su dirección IP a ownCloud. Más información puede ser encontrada en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
- "Allow editing" : "Permitir edición",
"Hide file listing" : "Ocultar la lista de archivos.",
"Sending ..." : "Enviando...",
"Email sent" : "Correo electrónico enviado",
diff --git a/core/l10n/es.json b/core/l10n/es.json
index 3d239d2c769..bfea7c92f8f 100644
--- a/core/l10n/es.json
+++ b/core/l10n/es.json
@@ -119,6 +119,7 @@
"Link" : "Enlace",
"Password protect" : "Protección con contraseña",
"Allow upload and editing" : "Permitir subito y edición",
+ "Allow editing" : "Permitir edición",
"File drop (upload only)" : "Entrega de archivos (solo subida)",
"Email link to person" : "Enviar enlace por correo electrónico a una persona",
"Send" : "Enviar",
@@ -237,8 +238,8 @@
"Need help?" : "¿Necesita ayuda?",
"See the documentation" : "Vea la documentación",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere JavaScript para operar correctamente. Por favor, {linkstart}habilite JavaScript{linkend} y recargue la página.",
- "Log out" : "Salir",
"Search" : "Buscar",
+ "Log out" : "Salir",
"This action requires you to confirm your password:" : "Esta acción requiere que confirme su contraseña:",
"Confirm your password" : "Confirme su contraseña",
"Server side authentication failed!" : "La autenticación a fallado en el servidor.",
@@ -339,7 +340,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no ha activado la clave de recuperación, no habrá manera de recuperar los datos una vez su contraseña sea restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor no tiene una conexión a Internet. Esto significa que algunas de las características como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones o instalación de aplicaciones de terceros no funcionarán. Podría no funcionar el acceso a los archivos de forma remota y el envío de correos electrónicos de notificación. Sugerimos habilitar la conexión a Internet de este servidor, si quiere tener todas las funciones.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuración de las cabeceras inversas del proxy son incorrectas, o está accediendo a ownCloud desde un proxy confiable. Si no está accediendo a ownCloud desde un proxy certificado y confiable, este es un problema de seguridad y puede permitirle a un hacker camuflar su dirección IP a ownCloud. Más información puede ser encontrada en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
- "Allow editing" : "Permitir edición",
"Hide file listing" : "Ocultar la lista de archivos.",
"Sending ..." : "Enviando...",
"Email sent" : "Correo electrónico enviado",
diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js
index bce3567feae..1d0653a51a3 100644
--- a/core/l10n/fi_FI.js
+++ b/core/l10n/fi_FI.js
@@ -110,6 +110,7 @@ OC.L10N.register(
"Link" : "Linkki",
"Password protect" : "Suojaa salasanalla",
"Allow upload and editing" : "Salli lähetys ja muokkaus",
+ "Allow editing" : "Salli muokkaus",
"Email link to person" : "Lähetä linkki sähköpostitse",
"Send" : "Lähetä",
"Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjän {owner} toimesta",
@@ -210,8 +211,8 @@ OC.L10N.register(
"Need help?" : "Tarvitsetko apua?",
"See the documentation" : "Tutustu dokumentaatioon",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tämä sovellus vaatii toimiakseen JavaScript-tuen. {linkstart}Ota JavaScript käyttöön{linkend} ja päivitä sivu.",
- "Log out" : "Kirjaudu ulos",
"Search" : "Etsi",
+ "Log out" : "Kirjaudu ulos",
"Server side authentication failed!" : "Palvelimen puoleinen tunnistautuminen epäonnistui!",
"Please contact your administrator." : "Ota yhteys ylläpitäjään.",
"An internal error occurred." : "Tapahtui sisäinen virhe",
@@ -309,7 +310,6 @@ OC.L10N.register(
"Dec." : "Joulu",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tällä palvelimella ei ole toimivaa internetyhteyttä. Sen seurauksena jotkin ominaisuudet, kuten erillinen tallennustila, ilmoitukset päivityksistä ja kolmansien osapuolten sovellusten asennus eivät toimi. Tiedostojen käyttö etänä tai ilmoitusten lähetys sähköpostitse eivät välttämättä toimi myöskään. Suosittelemme kytkemään palvelimen internetyhteyteen, jos haluat käyttää kaikkia ominaisuuksia.",
- "Allow editing" : "Salli muokkaus",
"Hide file listing" : "Piilota tiedostolistaus",
"Sending ..." : "Lähetetään...",
"Email sent" : "Sähköposti lähetetty",
diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json
index 205eb023c05..da11bc2635d 100644
--- a/core/l10n/fi_FI.json
+++ b/core/l10n/fi_FI.json
@@ -108,6 +108,7 @@
"Link" : "Linkki",
"Password protect" : "Suojaa salasanalla",
"Allow upload and editing" : "Salli lähetys ja muokkaus",
+ "Allow editing" : "Salli muokkaus",
"Email link to person" : "Lähetä linkki sähköpostitse",
"Send" : "Lähetä",
"Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjän {owner} toimesta",
@@ -208,8 +209,8 @@
"Need help?" : "Tarvitsetko apua?",
"See the documentation" : "Tutustu dokumentaatioon",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tämä sovellus vaatii toimiakseen JavaScript-tuen. {linkstart}Ota JavaScript käyttöön{linkend} ja päivitä sivu.",
- "Log out" : "Kirjaudu ulos",
"Search" : "Etsi",
+ "Log out" : "Kirjaudu ulos",
"Server side authentication failed!" : "Palvelimen puoleinen tunnistautuminen epäonnistui!",
"Please contact your administrator." : "Ota yhteys ylläpitäjään.",
"An internal error occurred." : "Tapahtui sisäinen virhe",
@@ -307,7 +308,6 @@
"Dec." : "Joulu",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tällä palvelimella ei ole toimivaa internetyhteyttä. Sen seurauksena jotkin ominaisuudet, kuten erillinen tallennustila, ilmoitukset päivityksistä ja kolmansien osapuolten sovellusten asennus eivät toimi. Tiedostojen käyttö etänä tai ilmoitusten lähetys sähköpostitse eivät välttämättä toimi myöskään. Suosittelemme kytkemään palvelimen internetyhteyteen, jos haluat käyttää kaikkia ominaisuuksia.",
- "Allow editing" : "Salli muokkaus",
"Hide file listing" : "Piilota tiedostolistaus",
"Sending ..." : "Lähetetään...",
"Email sent" : "Sähköposti lähetetty",
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index 660cedc31a0..90e99370f2e 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -122,6 +122,7 @@ OC.L10N.register(
"Link" : "Lien",
"Password protect" : "Protéger par un mot de passe",
"Allow upload and editing" : "Autoriser l'envoi et l'édition",
+ "Allow editing" : "Permettre la modification",
"File drop (upload only)" : "Dépôt de fichier (téléversement uniquement)",
"Email link to person" : "Envoyer le lien par courriel",
"Send" : "Envoyer",
@@ -240,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Besoin d'aide ?",
"See the documentation" : "Lire la documentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Cette application requiert JavaScript pour fonctionner correctement. Veuillez {linkstart}activer JavaScript{linkend} et recharger la page.",
- "Log out" : "Se déconnecter",
"Search" : "Rechercher",
+ "Log out" : "Se déconnecter",
"This action requires you to confirm your password:" : "Cette action nécessite que vous confirmiez votre mot de passe :",
"Confirm your password" : "Confirmer votre mot de passe",
"Server side authentication failed!" : "L'authentification sur le serveur a échoué !",
@@ -342,7 +343,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clé de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par courriel peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuration des entêtes du proxy inverse est incorrecte, ou vous accédez à ownCloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à ownCloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant de masquer sa véritable adresse IP. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.",
- "Allow editing" : "Permettre la modification",
"Hide file listing" : "Cacher la liste des fichiers",
"Sending ..." : "Envoi…",
"Email sent" : "Courriel envoyé",
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index e99e1adc9ad..df5e24efb1d 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -120,6 +120,7 @@
"Link" : "Lien",
"Password protect" : "Protéger par un mot de passe",
"Allow upload and editing" : "Autoriser l'envoi et l'édition",
+ "Allow editing" : "Permettre la modification",
"File drop (upload only)" : "Dépôt de fichier (téléversement uniquement)",
"Email link to person" : "Envoyer le lien par courriel",
"Send" : "Envoyer",
@@ -238,8 +239,8 @@
"Need help?" : "Besoin d'aide ?",
"See the documentation" : "Lire la documentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Cette application requiert JavaScript pour fonctionner correctement. Veuillez {linkstart}activer JavaScript{linkend} et recharger la page.",
- "Log out" : "Se déconnecter",
"Search" : "Rechercher",
+ "Log out" : "Se déconnecter",
"This action requires you to confirm your password:" : "Cette action nécessite que vous confirmiez votre mot de passe :",
"Confirm your password" : "Confirmer votre mot de passe",
"Server side authentication failed!" : "L'authentification sur le serveur a échoué !",
@@ -340,7 +341,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clé de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par courriel peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuration des entêtes du proxy inverse est incorrecte, ou vous accédez à ownCloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à ownCloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant de masquer sa véritable adresse IP. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.",
- "Allow editing" : "Permettre la modification",
"Hide file listing" : "Cacher la liste des fichiers",
"Sending ..." : "Envoi…",
"Email sent" : "Courriel envoyé",
diff --git a/core/l10n/he.js b/core/l10n/he.js
index dc544b6eece..8212568973e 100644
--- a/core/l10n/he.js
+++ b/core/l10n/he.js
@@ -103,6 +103,7 @@ OC.L10N.register(
"Share link" : "קישור לשיתוף",
"Link" : "קישור",
"Password protect" : "הגנה בססמה",
+ "Allow editing" : "אישור עריכה",
"Email link to person" : "שליחת קישור בדוא״ל למשתמש",
"Send" : "שליחה",
"Shared with you and the group {group} by {owner}" : "שותף אתך ועם הקבוצה {group} שבבעלות {owner}",
@@ -196,8 +197,8 @@ OC.L10N.register(
"Need help?" : "עזרה נזקקת?",
"See the documentation" : "יש לצפות במסמכי התיעוד",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "יישום זה דורש JavaScript לפעולה נכונה. יש {linkstart}לאפשר JavaScript{linkend} ולטעון את העמוד מחדש.",
- "Log out" : "התנתקות",
"Search" : "חיפוש",
+ "Log out" : "התנתקות",
"Server side authentication failed!" : "אימות לצד שרת נכשל!",
"Please contact your administrator." : "יש ליצור קשר עם המנהל.",
"An internal error occurred." : "אירעה שגיאה פנימית.",
@@ -290,7 +291,6 @@ OC.L10N.register(
"Dec." : "דצמ׳",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "הקבצים שלך מוצפנים. אם לא הפעלת את מפתח השחזור, לא תהיה דרך לקבל את המידע מחדש אחרי שהסיסמא תאופס.<br />אם אין לך מושג מה לעשות what to do, מוטב לפנות למנהל שלך לפני ההמשך. <br />האם באמת ברצונך להמשיך?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "תצורת כותרות פרוקסי ההפוכה אינה נכונה, או שהגישה ל- ownCloud מתבצעת מ- proxy אמין. אם הגישה ל- ownCloud אינה מ- proxy אמין, מדובר בבעיית אבטחה שמאפשרת לתוקף לזייף את כתובת ה- IP כגלויה ל- ownCloud. מידע נוסף ניתן למצוא ב- <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">מסמכי התיעוד</a> שלנו.",
- "Allow editing" : "אישור עריכה",
"Sending ..." : "מתבצעת שליחה ...",
"Email sent" : "הודעת הדוא״ל נשלחה",
"Send link via email" : "שליחת קישור באמצעות דואר אלקטרוני",
diff --git a/core/l10n/he.json b/core/l10n/he.json
index aa562c78360..60e70973ebe 100644
--- a/core/l10n/he.json
+++ b/core/l10n/he.json
@@ -101,6 +101,7 @@
"Share link" : "קישור לשיתוף",
"Link" : "קישור",
"Password protect" : "הגנה בססמה",
+ "Allow editing" : "אישור עריכה",
"Email link to person" : "שליחת קישור בדוא״ל למשתמש",
"Send" : "שליחה",
"Shared with you and the group {group} by {owner}" : "שותף אתך ועם הקבוצה {group} שבבעלות {owner}",
@@ -194,8 +195,8 @@
"Need help?" : "עזרה נזקקת?",
"See the documentation" : "יש לצפות במסמכי התיעוד",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "יישום זה דורש JavaScript לפעולה נכונה. יש {linkstart}לאפשר JavaScript{linkend} ולטעון את העמוד מחדש.",
- "Log out" : "התנתקות",
"Search" : "חיפוש",
+ "Log out" : "התנתקות",
"Server side authentication failed!" : "אימות לצד שרת נכשל!",
"Please contact your administrator." : "יש ליצור קשר עם המנהל.",
"An internal error occurred." : "אירעה שגיאה פנימית.",
@@ -288,7 +289,6 @@
"Dec." : "דצמ׳",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "הקבצים שלך מוצפנים. אם לא הפעלת את מפתח השחזור, לא תהיה דרך לקבל את המידע מחדש אחרי שהסיסמא תאופס.<br />אם אין לך מושג מה לעשות what to do, מוטב לפנות למנהל שלך לפני ההמשך. <br />האם באמת ברצונך להמשיך?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "תצורת כותרות פרוקסי ההפוכה אינה נכונה, או שהגישה ל- ownCloud מתבצעת מ- proxy אמין. אם הגישה ל- ownCloud אינה מ- proxy אמין, מדובר בבעיית אבטחה שמאפשרת לתוקף לזייף את כתובת ה- IP כגלויה ל- ownCloud. מידע נוסף ניתן למצוא ב- <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">מסמכי התיעוד</a> שלנו.",
- "Allow editing" : "אישור עריכה",
"Sending ..." : "מתבצעת שליחה ...",
"Email sent" : "הודעת הדוא״ל נשלחה",
"Send link via email" : "שליחת קישור באמצעות דואר אלקטרוני",
diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js
index a3b04dc33e3..5a8251eb0bb 100644
--- a/core/l10n/hu_HU.js
+++ b/core/l10n/hu_HU.js
@@ -121,6 +121,7 @@ OC.L10N.register(
"Link" : "Hivatkozás",
"Password protect" : "Jelszóval védett",
"Allow upload and editing" : "Feltöltés és szerkesztés engedélyezése",
+ "Allow editing" : "Szerkesztés engedélyezése",
"File drop (upload only)" : "Fájl ejtés (csak feltöltés)",
"Email link to person" : "Hivatkozás elküldése e-mail címre",
"Send" : "Küldés",
@@ -239,8 +240,8 @@ OC.L10N.register(
"Need help?" : "Segítségre van szüksége?",
"See the documentation" : "Nézze meg a dokumentációt",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Az alkalmazás megfelelő működéséhez JavaScript szükséges. Kérjük, {linkstart}engedélyezze a JavaScript-et{linkend} és frissítse a lapot.",
- "Log out" : "Kijelentkezés",
"Search" : "Keresés",
+ "Log out" : "Kijelentkezés",
"This action requires you to confirm your password:" : "A művelethez szükség van a jelszavad megerősítésére:",
"Confirm your password" : "Erősítsd meg a jelszavad:",
"Server side authentication failed!" : "A szerveroldali hitelesítés sikertelen!",
@@ -341,7 +342,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Az Ön fájljai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne.<br />Biztos, hogy folytatni kívánja?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ennek a szervernek nincs működő internet kapcsolata. Ez azt jelenti, hogy néhány funkció, mint pl. külső tárolók csatolása, frissítési értesítések, vagy a harmadik féltől származó alkalmazások telepítése nem fog működni. A fájlok távoli elérése és az e-mail értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden funkciót használni szeretnél.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A fordított proxy fejlécek konfigurációs beállításai helytelenek, vagy egy megbízható proxy-ból próbálja az ownCloud-ot elérni. Ha nem megbízható proxy-ból próbálja elérni az ownCloud-ot, akkor ez egy biztonsági probléma, a támadó az ownCloud számára látható IP cím csalást tud végrehajtani. Bővebb információt a <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentációban</a> találhat.",
- "Allow editing" : "Szerkesztés engedélyezése",
"Hide file listing" : "Fájl lista elrejtése",
"Sending ..." : "Küldés ...",
"Email sent" : "Az e-mailt elküldtük!",
diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json
index 81458973e3d..a3c1cab9276 100644
--- a/core/l10n/hu_HU.json
+++ b/core/l10n/hu_HU.json
@@ -119,6 +119,7 @@
"Link" : "Hivatkozás",
"Password protect" : "Jelszóval védett",
"Allow upload and editing" : "Feltöltés és szerkesztés engedélyezése",
+ "Allow editing" : "Szerkesztés engedélyezése",
"File drop (upload only)" : "Fájl ejtés (csak feltöltés)",
"Email link to person" : "Hivatkozás elküldése e-mail címre",
"Send" : "Küldés",
@@ -237,8 +238,8 @@
"Need help?" : "Segítségre van szüksége?",
"See the documentation" : "Nézze meg a dokumentációt",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Az alkalmazás megfelelő működéséhez JavaScript szükséges. Kérjük, {linkstart}engedélyezze a JavaScript-et{linkend} és frissítse a lapot.",
- "Log out" : "Kijelentkezés",
"Search" : "Keresés",
+ "Log out" : "Kijelentkezés",
"This action requires you to confirm your password:" : "A művelethez szükség van a jelszavad megerősítésére:",
"Confirm your password" : "Erősítsd meg a jelszavad:",
"Server side authentication failed!" : "A szerveroldali hitelesítés sikertelen!",
@@ -339,7 +340,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Az Ön fájljai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne.<br />Biztos, hogy folytatni kívánja?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ennek a szervernek nincs működő internet kapcsolata. Ez azt jelenti, hogy néhány funkció, mint pl. külső tárolók csatolása, frissítési értesítések, vagy a harmadik féltől származó alkalmazások telepítése nem fog működni. A fájlok távoli elérése és az e-mail értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden funkciót használni szeretnél.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A fordított proxy fejlécek konfigurációs beállításai helytelenek, vagy egy megbízható proxy-ból próbálja az ownCloud-ot elérni. Ha nem megbízható proxy-ból próbálja elérni az ownCloud-ot, akkor ez egy biztonsági probléma, a támadó az ownCloud számára látható IP cím csalást tud végrehajtani. Bővebb információt a <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentációban</a> találhat.",
- "Allow editing" : "Szerkesztés engedélyezése",
"Hide file listing" : "Fájl lista elrejtése",
"Sending ..." : "Küldés ...",
"Email sent" : "Az e-mailt elküldtük!",
diff --git a/core/l10n/id.js b/core/l10n/id.js
index 1f8d96e4001..2ed3768d6a4 100644
--- a/core/l10n/id.js
+++ b/core/l10n/id.js
@@ -121,6 +121,7 @@ OC.L10N.register(
"Link" : "Tautan",
"Password protect" : "Lindungi dengan sandi",
"Allow upload and editing" : "Izinkan pengunggahan dan penyuntingan",
+ "Allow editing" : "Izinkan penyuntingan",
"Email link to person" : "Emailkan tautan ini ke orang",
"Send" : "Kirim",
"Shared with you and the group {group} by {owner}" : "Dibagikan dengan anda dan grup {group} oleh {owner}",
@@ -219,8 +220,8 @@ OC.L10N.register(
"Need help?" : "Butuh bantuan?",
"See the documentation" : "Lihat dokumentasi",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aplikasi ini memerlukan JavaScript untuk dapat beroperasi dengan benar. Mohon {linkstart}aktifkan JavaScript{linkend} dan muat ulang halaman ini.",
- "Log out" : "Keluar",
"Search" : "Cari",
+ "Log out" : "Keluar",
"Server side authentication failed!" : "Otentikasi dari sisi server gagal!",
"Please contact your administrator." : "Silahkan hubungi administrator anda.",
"An internal error occurred." : "Terjadi kesalahan internal.",
@@ -314,7 +315,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Server ini tidak tersambung ke internet. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses ownCloud dari proxy terpercaya. Apabila Anda tidak mengakses ownCloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke ownCloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.",
- "Allow editing" : "Izinkan penyuntingan",
"Hide file listing" : "Sembunyikan pendaftaran berkas",
"Sending ..." : "Mengirim ...",
"Email sent" : "Email terkirim",
diff --git a/core/l10n/id.json b/core/l10n/id.json
index 8ca0ea8a28d..dd562e7d9b1 100644
--- a/core/l10n/id.json
+++ b/core/l10n/id.json
@@ -119,6 +119,7 @@
"Link" : "Tautan",
"Password protect" : "Lindungi dengan sandi",
"Allow upload and editing" : "Izinkan pengunggahan dan penyuntingan",
+ "Allow editing" : "Izinkan penyuntingan",
"Email link to person" : "Emailkan tautan ini ke orang",
"Send" : "Kirim",
"Shared with you and the group {group} by {owner}" : "Dibagikan dengan anda dan grup {group} oleh {owner}",
@@ -217,8 +218,8 @@
"Need help?" : "Butuh bantuan?",
"See the documentation" : "Lihat dokumentasi",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aplikasi ini memerlukan JavaScript untuk dapat beroperasi dengan benar. Mohon {linkstart}aktifkan JavaScript{linkend} dan muat ulang halaman ini.",
- "Log out" : "Keluar",
"Search" : "Cari",
+ "Log out" : "Keluar",
"Server side authentication failed!" : "Otentikasi dari sisi server gagal!",
"Please contact your administrator." : "Silahkan hubungi administrator anda.",
"An internal error occurred." : "Terjadi kesalahan internal.",
@@ -312,7 +313,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Server ini tidak tersambung ke internet. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses ownCloud dari proxy terpercaya. Apabila Anda tidak mengakses ownCloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke ownCloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.",
- "Allow editing" : "Izinkan penyuntingan",
"Hide file listing" : "Sembunyikan pendaftaran berkas",
"Sending ..." : "Mengirim ...",
"Email sent" : "Email terkirim",
diff --git a/core/l10n/is.js b/core/l10n/is.js
index 1c20ea4faa6..ac8414d4cf8 100644
--- a/core/l10n/is.js
+++ b/core/l10n/is.js
@@ -109,6 +109,7 @@ OC.L10N.register(
"Link" : "Tengill",
"Password protect" : "Verja með lykilorði",
"Allow upload and editing" : "Leyfa innsendingu og breytingar",
+ "Allow editing" : "Leyfa breytingar",
"Email link to person" : "Senda veftengil í tölvupósti til notanda",
"Send" : "Senda",
"Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}",
@@ -207,8 +208,8 @@ OC.L10N.register(
"Need help?" : "Þarftu hjálp?",
"See the documentation" : "Sjá hjálparskjölin",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Þetta forrit krefst JavaScript fyrir rétta virkni. {linkstart} virkjaðu JavaScript {linkend} og endurlestu síðan síðuna.",
- "Log out" : "Skrá út",
"Search" : "Leita",
+ "Log out" : "Skrá út",
"Server side authentication failed!" : "Auðkenning af hálfu þjóns tókst ekki!",
"Please contact your administrator." : "Hafðu samband við kerfisstjóra.",
"An internal error occurred." : "Innri villa kom upp.",
@@ -307,7 +308,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Skrárnar þínar eru dulritaðar. Ef þú hefur ekki virkjað endurheimtingarlykilinn, þá verður engin leið til að fá gögnin þín til baka eftir lykilorðið þitt er endurstillt.<br />Ef þú ert ekki viss hvað eigi að gera, skaltu hafa samband við kerfisstjórann áður en þú heldur áfram. <br />Viltu halda áfram?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Þessi þjónn er ekki með virka nettengingu. Þetta þýðir að sumir eiginleikar eins og að virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á forritum þriðja aðila, mun ekki virka. Fjartengdur aðgangur að skrám og sending tilkynninga í tölvupósti virka líklega ekki heldur. Við leggjum til að internettenging sé virkjuð fyrir þennan vefþjón ef þú vilt hafa alla eiginleika tiltæka.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Uppsetning gagnstæðs milliþjónshauss (reverse proxy header) er röng, eða að þú ert að tengjast Nextcloud frá treystum milliþjóni. Ef þú ert ekki að tengjast Nextcloud frá treystum milliþjóni, þá er þetta er öryggisvandamál og getur leyft árásaraðilum að dulbúa IP-vistfang þeirra sem sýnilegt Nextcloud. Nánari upplýsingar má finna í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.",
- "Allow editing" : "Leyfa breytingar",
"Hide file listing" : "Fela skráalista",
"Sending ..." : "Sendi ...",
"Email sent" : "Tölvupóstur sendur",
diff --git a/core/l10n/is.json b/core/l10n/is.json
index c4b579cd2bd..a389453cfc7 100644
--- a/core/l10n/is.json
+++ b/core/l10n/is.json
@@ -107,6 +107,7 @@
"Link" : "Tengill",
"Password protect" : "Verja með lykilorði",
"Allow upload and editing" : "Leyfa innsendingu og breytingar",
+ "Allow editing" : "Leyfa breytingar",
"Email link to person" : "Senda veftengil í tölvupósti til notanda",
"Send" : "Senda",
"Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}",
@@ -205,8 +206,8 @@
"Need help?" : "Þarftu hjálp?",
"See the documentation" : "Sjá hjálparskjölin",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Þetta forrit krefst JavaScript fyrir rétta virkni. {linkstart} virkjaðu JavaScript {linkend} og endurlestu síðan síðuna.",
- "Log out" : "Skrá út",
"Search" : "Leita",
+ "Log out" : "Skrá út",
"Server side authentication failed!" : "Auðkenning af hálfu þjóns tókst ekki!",
"Please contact your administrator." : "Hafðu samband við kerfisstjóra.",
"An internal error occurred." : "Innri villa kom upp.",
@@ -305,7 +306,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Skrárnar þínar eru dulritaðar. Ef þú hefur ekki virkjað endurheimtingarlykilinn, þá verður engin leið til að fá gögnin þín til baka eftir lykilorðið þitt er endurstillt.<br />Ef þú ert ekki viss hvað eigi að gera, skaltu hafa samband við kerfisstjórann áður en þú heldur áfram. <br />Viltu halda áfram?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Þessi þjónn er ekki með virka nettengingu. Þetta þýðir að sumir eiginleikar eins og að virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á forritum þriðja aðila, mun ekki virka. Fjartengdur aðgangur að skrám og sending tilkynninga í tölvupósti virka líklega ekki heldur. Við leggjum til að internettenging sé virkjuð fyrir þennan vefþjón ef þú vilt hafa alla eiginleika tiltæka.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Uppsetning gagnstæðs milliþjónshauss (reverse proxy header) er röng, eða að þú ert að tengjast Nextcloud frá treystum milliþjóni. Ef þú ert ekki að tengjast Nextcloud frá treystum milliþjóni, þá er þetta er öryggisvandamál og getur leyft árásaraðilum að dulbúa IP-vistfang þeirra sem sýnilegt Nextcloud. Nánari upplýsingar má finna í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.",
- "Allow editing" : "Leyfa breytingar",
"Hide file listing" : "Fela skráalista",
"Sending ..." : "Sendi ...",
"Email sent" : "Tölvupóstur sendur",
diff --git a/core/l10n/it.js b/core/l10n/it.js
index 1e8630be362..27555092526 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -121,6 +121,7 @@ OC.L10N.register(
"Link" : "Collegamento",
"Password protect" : "Proteggi con password",
"Allow upload and editing" : "Consenti il caricamento e la modifica",
+ "Allow editing" : "Consenti la modifica",
"File drop (upload only)" : "Rilascia file (solo caricamento)",
"Email link to person" : "Invia collegamento via email",
"Send" : "Invia",
@@ -239,8 +240,8 @@ OC.L10N.register(
"Need help?" : "Ti serve aiuto?",
"See the documentation" : "Leggi la documentazione",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Questa applicazione richiede JavaScript per un corretto funzionamento. {linkstart}Abilita JavaScript{linkend} e ricarica la pagina.",
- "Log out" : "Esci",
"Search" : "Cerca",
+ "Log out" : "Esci",
"This action requires you to confirm your password:" : "Questa azione richiede la conferma della tua password:",
"Confirm your password" : "Conferma la tua password",
"Server side authentication failed!" : "Autenticazione lato server non riuscita!",
@@ -341,7 +342,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di ripristino, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Questo server non ha una connessione a Internet funzionante. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a ownCloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendolo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</a>.",
- "Allow editing" : "Consenti la modifica",
"Hide file listing" : "Nascondi elenco dei file",
"Sending ..." : "Invio in corso...",
"Email sent" : "Messaggio inviato",
diff --git a/core/l10n/it.json b/core/l10n/it.json
index a2269c3dea2..a5424c326c6 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -119,6 +119,7 @@
"Link" : "Collegamento",
"Password protect" : "Proteggi con password",
"Allow upload and editing" : "Consenti il caricamento e la modifica",
+ "Allow editing" : "Consenti la modifica",
"File drop (upload only)" : "Rilascia file (solo caricamento)",
"Email link to person" : "Invia collegamento via email",
"Send" : "Invia",
@@ -237,8 +238,8 @@
"Need help?" : "Ti serve aiuto?",
"See the documentation" : "Leggi la documentazione",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Questa applicazione richiede JavaScript per un corretto funzionamento. {linkstart}Abilita JavaScript{linkend} e ricarica la pagina.",
- "Log out" : "Esci",
"Search" : "Cerca",
+ "Log out" : "Esci",
"This action requires you to confirm your password:" : "Questa azione richiede la conferma della tua password:",
"Confirm your password" : "Conferma la tua password",
"Server side authentication failed!" : "Autenticazione lato server non riuscita!",
@@ -339,7 +340,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di ripristino, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Questo server non ha una connessione a Internet funzionante. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a ownCloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendolo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</a>.",
- "Allow editing" : "Consenti la modifica",
"Hide file listing" : "Nascondi elenco dei file",
"Sending ..." : "Invio in corso...",
"Email sent" : "Messaggio inviato",
diff --git a/core/l10n/ja.js b/core/l10n/ja.js
index c27c4f1c2ff..3ac40cc49be 100644
--- a/core/l10n/ja.js
+++ b/core/l10n/ja.js
@@ -121,6 +121,7 @@ OC.L10N.register(
"Link" : "リンク",
"Password protect" : "パスワード保護を有効化",
"Allow upload and editing" : "アップロードと編集を許可する",
+ "Allow editing" : "編集を許可",
"File drop (upload only)" : "ファイルドロップ(アップロードのみ)",
"Email link to person" : "メールリンク",
"Send" : "送信",
@@ -239,8 +240,8 @@ OC.L10N.register(
"Need help?" : "ヘルプが必要ですか?",
"See the documentation" : "ドキュメントを確認してください",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "このアプリケーションの動作にはJavaScriptが必要です。\n {linkstart}JavaScriptを有効にし{linkend} 、ページを更新してください。 ",
- "Log out" : "ログアウト",
"Search" : "検索",
+ "Log out" : "ログアウト",
"This action requires you to confirm your password:" : "この操作では、パスワードを確認する必要があります:",
"Confirm your password" : "パスワードを確認",
"Server side authentication failed!" : "サーバーサイドの認証に失敗しました!",
@@ -341,7 +342,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に問い合わせてください。<br />続けてよろしいでしょうか?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティ製のアプリ、といった一部の機能が利用できません。また、リモート接続でのファイルアクセス、通知メールの送信のような機能も利用できないことがあります。すべての機能を利用するには、このサーバーのインターネット接続を有効にすることをお勧めします。",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "リバースプロキシのヘッダー設定が間違っているか、または信頼されたプロキシからownCloudにアクセスしていません。もし、信頼されたプロキシからアクセスされているのでないなら、攻撃者の詐称されたIPアドレスから ownCloudを見ることができるように許可されていて、セキュリティに問題があります。詳細な情報は、 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ドキュメント</a>を確認してください。",
- "Allow editing" : "編集を許可",
"Hide file listing" : "ファイルリストを隠す",
"Sending ..." : "送信中...",
"Email sent" : "メールを送信しました",
diff --git a/core/l10n/ja.json b/core/l10n/ja.json
index f43227e85b4..fcf71a2a46b 100644
--- a/core/l10n/ja.json
+++ b/core/l10n/ja.json
@@ -119,6 +119,7 @@
"Link" : "リンク",
"Password protect" : "パスワード保護を有効化",
"Allow upload and editing" : "アップロードと編集を許可する",
+ "Allow editing" : "編集を許可",
"File drop (upload only)" : "ファイルドロップ(アップロードのみ)",
"Email link to person" : "メールリンク",
"Send" : "送信",
@@ -237,8 +238,8 @@
"Need help?" : "ヘルプが必要ですか?",
"See the documentation" : "ドキュメントを確認してください",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "このアプリケーションの動作にはJavaScriptが必要です。\n {linkstart}JavaScriptを有効にし{linkend} 、ページを更新してください。 ",
- "Log out" : "ログアウト",
"Search" : "検索",
+ "Log out" : "ログアウト",
"This action requires you to confirm your password:" : "この操作では、パスワードを確認する必要があります:",
"Confirm your password" : "パスワードを確認",
"Server side authentication failed!" : "サーバーサイドの認証に失敗しました!",
@@ -339,7 +340,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に問い合わせてください。<br />続けてよろしいでしょうか?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティ製のアプリ、といった一部の機能が利用できません。また、リモート接続でのファイルアクセス、通知メールの送信のような機能も利用できないことがあります。すべての機能を利用するには、このサーバーのインターネット接続を有効にすることをお勧めします。",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "リバースプロキシのヘッダー設定が間違っているか、または信頼されたプロキシからownCloudにアクセスしていません。もし、信頼されたプロキシからアクセスされているのでないなら、攻撃者の詐称されたIPアドレスから ownCloudを見ることができるように許可されていて、セキュリティに問題があります。詳細な情報は、 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ドキュメント</a>を確認してください。",
- "Allow editing" : "編集を許可",
"Hide file listing" : "ファイルリストを隠す",
"Sending ..." : "送信中...",
"Email sent" : "メールを送信しました",
diff --git a/core/l10n/ko.js b/core/l10n/ko.js
index 446672597f0..11ec45f71a9 100644
--- a/core/l10n/ko.js
+++ b/core/l10n/ko.js
@@ -119,6 +119,7 @@ OC.L10N.register(
"Link" : "링크",
"Password protect" : "암호 보호",
"Allow upload and editing" : "업로드 및 편집 허용",
+ "Allow editing" : "편집 허용",
"Email link to person" : "이메일 주소",
"Send" : "전송",
"Shared with you and the group {group} by {owner}" : "{owner} 님이 여러분 및 그룹 {group}와(과) 공유 중",
@@ -220,8 +221,8 @@ OC.L10N.register(
"Need help?" : "도움이 필요한가요?",
"See the documentation" : "문서 보기",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "이 프로그램이 올바르게 작동하려면 JavaScript가 필요합니다. {linkstart}JavaScript를 활성화{linkend}한 다음 페이지를 새로 고치십시오.",
- "Log out" : "로그아웃",
"Search" : "검색",
+ "Log out" : "로그아웃",
"This action requires you to confirm your password:" : "이 작업을 수행하려면 암호를 입력해야 합니다:",
"Confirm your password" : "암호를 입력하십시오",
"Server side authentication failed!" : "서버 인증 실패!",
@@ -322,7 +323,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "파일이 암호화되어 있습니다. 복구 키를 활성화하지 않았다면 암호를 초기화한 후 데이터를 복구할 수 없습니다.<br />무엇을 해야 할 지 잘 모르겠으면 계속하기 전에 관리자에게 연락하십시오.<br />그래도 계속 진행하시겠습니까?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "서버에서 인터넷 연결을 사용할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "역방향 프록시 헤더 설정이 올바르지 않거나 Trusted Proxy를 통해 ownCloud에 접근하고 있을 수 있습니다. 만약 ownCloud를 Trusted Proxy를 통해 접근하고 있지 않다면 이는 보안 문제이며 공격자가 IP 주소를 속이고 있을 수 있습니다. 자세한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">사용 설명서</a>를 참고하십시오.",
- "Allow editing" : "편집 허용",
"Hide file listing" : "숨김 파일 목록",
"Sending ..." : "전송 중...",
"Email sent" : "이메일 발송됨",
diff --git a/core/l10n/ko.json b/core/l10n/ko.json
index 8341f8a846a..c36e174afb3 100644
--- a/core/l10n/ko.json
+++ b/core/l10n/ko.json
@@ -117,6 +117,7 @@
"Link" : "링크",
"Password protect" : "암호 보호",
"Allow upload and editing" : "업로드 및 편집 허용",
+ "Allow editing" : "편집 허용",
"Email link to person" : "이메일 주소",
"Send" : "전송",
"Shared with you and the group {group} by {owner}" : "{owner} 님이 여러분 및 그룹 {group}와(과) 공유 중",
@@ -218,8 +219,8 @@
"Need help?" : "도움이 필요한가요?",
"See the documentation" : "문서 보기",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "이 프로그램이 올바르게 작동하려면 JavaScript가 필요합니다. {linkstart}JavaScript를 활성화{linkend}한 다음 페이지를 새로 고치십시오.",
- "Log out" : "로그아웃",
"Search" : "검색",
+ "Log out" : "로그아웃",
"This action requires you to confirm your password:" : "이 작업을 수행하려면 암호를 입력해야 합니다:",
"Confirm your password" : "암호를 입력하십시오",
"Server side authentication failed!" : "서버 인증 실패!",
@@ -320,7 +321,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "파일이 암호화되어 있습니다. 복구 키를 활성화하지 않았다면 암호를 초기화한 후 데이터를 복구할 수 없습니다.<br />무엇을 해야 할 지 잘 모르겠으면 계속하기 전에 관리자에게 연락하십시오.<br />그래도 계속 진행하시겠습니까?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "서버에서 인터넷 연결을 사용할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "역방향 프록시 헤더 설정이 올바르지 않거나 Trusted Proxy를 통해 ownCloud에 접근하고 있을 수 있습니다. 만약 ownCloud를 Trusted Proxy를 통해 접근하고 있지 않다면 이는 보안 문제이며 공격자가 IP 주소를 속이고 있을 수 있습니다. 자세한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">사용 설명서</a>를 참고하십시오.",
- "Allow editing" : "편집 허용",
"Hide file listing" : "숨김 파일 목록",
"Sending ..." : "전송 중...",
"Email sent" : "이메일 발송됨",
diff --git a/core/l10n/nb_NO.js b/core/l10n/nb_NO.js
index c8083c8fe3a..b3141566eec 100644
--- a/core/l10n/nb_NO.js
+++ b/core/l10n/nb_NO.js
@@ -117,6 +117,7 @@ OC.L10N.register(
"Link" : "Lenke",
"Password protect" : "Passordbeskyttet",
"Allow upload and editing" : "Tillatt opplasting og redigering",
+ "Allow editing" : "Tillat redigering",
"File drop (upload only)" : "Filkasse (kun opplasting)",
"Email link to person" : "Email lenke til person",
"Send" : "Send",
@@ -233,8 +234,8 @@ OC.L10N.register(
"Need help?" : "Trenger du hjelp?",
"See the documentation" : "Se dokumentasjonen",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. Vennligst {linkstart}aktiver JavaScript{linkend} og last siden på nytt.",
- "Log out" : "Logg ut",
"Search" : "Søk",
+ "Log out" : "Logg ut",
"This action requires you to confirm your password:" : "Denne handlingen krever at du bekrefter ditt passord:",
"Confirm your password" : "Bekreft ditt passord",
"Server side authentication failed!" : "Autentisering feilet på tjeneren!",
@@ -334,7 +335,6 @@ OC.L10N.register(
"Dec." : "Des.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.",
- "Allow editing" : "Tillat redigering",
"Hide file listing" : "Skjul filliste",
"Sending ..." : "Sender...",
"Email sent" : "E-post sendt",
diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json
index 4e7eeedb33a..35df1224439 100644
--- a/core/l10n/nb_NO.json
+++ b/core/l10n/nb_NO.json
@@ -115,6 +115,7 @@
"Link" : "Lenke",
"Password protect" : "Passordbeskyttet",
"Allow upload and editing" : "Tillatt opplasting og redigering",
+ "Allow editing" : "Tillat redigering",
"File drop (upload only)" : "Filkasse (kun opplasting)",
"Email link to person" : "Email lenke til person",
"Send" : "Send",
@@ -231,8 +232,8 @@
"Need help?" : "Trenger du hjelp?",
"See the documentation" : "Se dokumentasjonen",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. Vennligst {linkstart}aktiver JavaScript{linkend} og last siden på nytt.",
- "Log out" : "Logg ut",
"Search" : "Søk",
+ "Log out" : "Logg ut",
"This action requires you to confirm your password:" : "Denne handlingen krever at du bekrefter ditt passord:",
"Confirm your password" : "Bekreft ditt passord",
"Server side authentication failed!" : "Autentisering feilet på tjeneren!",
@@ -332,7 +333,6 @@
"Dec." : "Des.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.",
- "Allow editing" : "Tillat redigering",
"Hide file listing" : "Skjul filliste",
"Sending ..." : "Sender...",
"Email sent" : "E-post sendt",
diff --git a/core/l10n/nl.js b/core/l10n/nl.js
index 36bbfd1d962..af191be30b1 100644
--- a/core/l10n/nl.js
+++ b/core/l10n/nl.js
@@ -60,6 +60,7 @@ OC.L10N.register(
"seconds ago" : "seconden geleden",
"Logging in …" : "Inloggen...",
"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." : "De link om je wachtwoord te herstellen is per e-mail naar je verstuurd. Als je dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan je spammap. <br>Als het daar niet in zit, neem dan contact op met je beheerder.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Je bestanden zijn versleuteld. Het is niet mogelijk om je gegevens terug te krijgen als je wachtwoord wordt gereset.<br />Als je niet zeker weer wat je moet doen, neem dan contact op met je beheerder voordat je verdergaat. <br />Wil je echt verder gaan?",
"I know what I'm doing" : "Ik weet wat ik doe",
"Password can not be changed. Please contact your administrator." : "Het wachtwoord kan niet worden gewijzigd. Neem contact op met uw beheerder.",
"No" : "Nee",
@@ -121,6 +122,7 @@ OC.L10N.register(
"Link" : "Link",
"Password protect" : "Wachtwoord beveiligd",
"Allow upload and editing" : "Toestaan uploaden en bewerken",
+ "Allow editing" : "Toestaan bewerken",
"File drop (upload only)" : "File drop (alleen uploaden)",
"Email link to person" : "E-mail link naar persoon",
"Send" : "Versturen",
@@ -239,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Hulp nodig?",
"See the documentation" : "Zie de documentatie",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Deze applicatie heeft JavaScript nodig. {linkstart}Activeer JavaScript{linkend} en ververs deze pagina.",
- "Log out" : "Afmelden",
"Search" : "Zoeken",
+ "Log out" : "Afmelden",
"This action requires you to confirm your password:" : "Deze actie vereist dat je je wachtwoord bevestigt:",
"Confirm your password" : "Bevestig je wachtwoord",
"Server side authentication failed!" : "Authenticatie bij de server mislukte!",
@@ -341,7 +343,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Je bestanden zijn versleuteld. Als je de herstelsleutel niet hebt geactiveerd, is het niet mogelijk om je gegevens terug te krijgen nadat je wachtwoord is hersteld. <br>Als je niet weet wat je moet doen, neem dan eerst contact op met je beheerder. <br>Wil je echt verder gaan?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Deze server heeft geen actieve internetverbinding. Dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van 3e partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie e-mails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of je hebt toegang tot Nextcloud via een vertrouwde proxy. Als je Nextcloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat Nextcloud ziet kan vervalsen. Meer informatie is te vinden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</a>.",
- "Allow editing" : "Toestaan bewerken",
"Hide file listing" : "Verberg bestandsoverzicht",
"Sending ..." : "Versturen ...",
"Email sent" : "E-mail verzonden",
diff --git a/core/l10n/nl.json b/core/l10n/nl.json
index 9d77ea63e9a..c53918ff27a 100644
--- a/core/l10n/nl.json
+++ b/core/l10n/nl.json
@@ -58,6 +58,7 @@
"seconds ago" : "seconden geleden",
"Logging in …" : "Inloggen...",
"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." : "De link om je wachtwoord te herstellen is per e-mail naar je verstuurd. Als je dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan je spammap. <br>Als het daar niet in zit, neem dan contact op met je beheerder.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Je bestanden zijn versleuteld. Het is niet mogelijk om je gegevens terug te krijgen als je wachtwoord wordt gereset.<br />Als je niet zeker weer wat je moet doen, neem dan contact op met je beheerder voordat je verdergaat. <br />Wil je echt verder gaan?",
"I know what I'm doing" : "Ik weet wat ik doe",
"Password can not be changed. Please contact your administrator." : "Het wachtwoord kan niet worden gewijzigd. Neem contact op met uw beheerder.",
"No" : "Nee",
@@ -119,6 +120,7 @@
"Link" : "Link",
"Password protect" : "Wachtwoord beveiligd",
"Allow upload and editing" : "Toestaan uploaden en bewerken",
+ "Allow editing" : "Toestaan bewerken",
"File drop (upload only)" : "File drop (alleen uploaden)",
"Email link to person" : "E-mail link naar persoon",
"Send" : "Versturen",
@@ -237,8 +239,8 @@
"Need help?" : "Hulp nodig?",
"See the documentation" : "Zie de documentatie",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Deze applicatie heeft JavaScript nodig. {linkstart}Activeer JavaScript{linkend} en ververs deze pagina.",
- "Log out" : "Afmelden",
"Search" : "Zoeken",
+ "Log out" : "Afmelden",
"This action requires you to confirm your password:" : "Deze actie vereist dat je je wachtwoord bevestigt:",
"Confirm your password" : "Bevestig je wachtwoord",
"Server side authentication failed!" : "Authenticatie bij de server mislukte!",
@@ -339,7 +341,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Je bestanden zijn versleuteld. Als je de herstelsleutel niet hebt geactiveerd, is het niet mogelijk om je gegevens terug te krijgen nadat je wachtwoord is hersteld. <br>Als je niet weet wat je moet doen, neem dan eerst contact op met je beheerder. <br>Wil je echt verder gaan?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Deze server heeft geen actieve internetverbinding. Dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van 3e partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie e-mails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of je hebt toegang tot Nextcloud via een vertrouwde proxy. Als je Nextcloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat Nextcloud ziet kan vervalsen. Meer informatie is te vinden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</a>.",
- "Allow editing" : "Toestaan bewerken",
"Hide file listing" : "Verberg bestandsoverzicht",
"Sending ..." : "Versturen ...",
"Email sent" : "E-mail verzonden",
diff --git a/core/l10n/pl.js b/core/l10n/pl.js
index 6fef626b0ea..a8c54a6af18 100644
--- a/core/l10n/pl.js
+++ b/core/l10n/pl.js
@@ -111,6 +111,7 @@ OC.L10N.register(
"Link" : "Odnośnik",
"Password protect" : "Zabezpiecz hasłem",
"Allow upload and editing" : "Pozwól na przesyłanie i edycję",
+ "Allow editing" : "Pozwól na edycję",
"Email link to person" : "Wyślij osobie odnośnik poprzez e-mail",
"Send" : "Wyślij",
"Shared with you and the group {group} by {owner}" : "Udostępnione tobie i grupie {group} przez {owner}",
@@ -226,8 +227,8 @@ OC.L10N.register(
"Need help?" : "Potrzebujesz pomocy?",
"See the documentation" : "Zapoznaj się z dokumentacją",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ta aplikacja wymaga JavaScript do poprawnego działania. Proszę {linkstart}włączyć JavaScript{linkend} i przeładować stronę.",
- "Log out" : "Wyloguj",
"Search" : "Wyszukaj",
+ "Log out" : "Wyloguj",
"This action requires you to confirm your password:" : "Ta akcja wymaga potwierdzenia hasłem:",
"Confirm your password" : "Potwierdź hasło",
"Server side authentication failed!" : "Uwierzytelnianie po stronie serwera nie powiodło się!",
@@ -326,7 +327,6 @@ OC.L10N.register(
"Nov." : "Lis.",
"Dec." : "Gru.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ",
- "Allow editing" : "Pozwól na edycję",
"Hide file listing" : "Schowaj listę plików",
"Sending ..." : "Wysyłanie...",
"Email sent" : "E-mail wysłany",
diff --git a/core/l10n/pl.json b/core/l10n/pl.json
index c768d3bf79f..52f23012923 100644
--- a/core/l10n/pl.json
+++ b/core/l10n/pl.json
@@ -109,6 +109,7 @@
"Link" : "Odnośnik",
"Password protect" : "Zabezpiecz hasłem",
"Allow upload and editing" : "Pozwól na przesyłanie i edycję",
+ "Allow editing" : "Pozwól na edycję",
"Email link to person" : "Wyślij osobie odnośnik poprzez e-mail",
"Send" : "Wyślij",
"Shared with you and the group {group} by {owner}" : "Udostępnione tobie i grupie {group} przez {owner}",
@@ -224,8 +225,8 @@
"Need help?" : "Potrzebujesz pomocy?",
"See the documentation" : "Zapoznaj się z dokumentacją",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ta aplikacja wymaga JavaScript do poprawnego działania. Proszę {linkstart}włączyć JavaScript{linkend} i przeładować stronę.",
- "Log out" : "Wyloguj",
"Search" : "Wyszukaj",
+ "Log out" : "Wyloguj",
"This action requires you to confirm your password:" : "Ta akcja wymaga potwierdzenia hasłem:",
"Confirm your password" : "Potwierdź hasło",
"Server side authentication failed!" : "Uwierzytelnianie po stronie serwera nie powiodło się!",
@@ -324,7 +325,6 @@
"Nov." : "Lis.",
"Dec." : "Gru.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ",
- "Allow editing" : "Pozwól na edycję",
"Hide file listing" : "Schowaj listę plików",
"Sending ..." : "Wysyłanie...",
"Email sent" : "E-mail wysłany",
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index 76e2c1de93e..dfc4ef87ad7 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -60,6 +60,7 @@ OC.L10N.register(
"seconds ago" : "segundos atrás",
"Logging in …" : "Logando ...",
"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." : "O link para redefinir sua senha foi enviado para seu e-mail. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo.<br> Se ele não estiver lá, pergunte ao administrador do local.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Não existe nenhuma maneira de ter seus dados de volta depois que sua senha seja redefinida.<br /> Se você não tem certeza do que fazer, por favor contate seu administrador antes de continuar.<br />Você realmente deseja continuar?",
"I know what I'm doing" : "Eu sei o que estou fazendo",
"Password can not be changed. Please contact your administrator." : "A senha não pode ser alterada. Por favor, contate o administrador.",
"No" : "Não",
@@ -121,6 +122,7 @@ OC.L10N.register(
"Link" : "Link",
"Password protect" : "Proteger com senha",
"Allow upload and editing" : "Permitir envio e edição",
+ "Allow editing" : "Permitir edição",
"File drop (upload only)" : "Zona de arquivos (somente upload)",
"Email link to person" : "Enviar link por e-mail",
"Send" : "Enviar",
@@ -239,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Precisa de ajuda?",
"See the documentation" : "Veja a documentação",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer JavaScript para sua correta operação. Por favor {linkstart}habilite JavaScript{linkend} e recerregue a página.",
- "Log out" : "Sair",
"Search" : "Perquisar",
+ "Log out" : "Sair",
"This action requires you to confirm your password:" : "Essa ação requer confirmação da sua senha:",
"Confirm your password" : "Confirme sua senha",
"Server side authentication failed!" : "Autenticação do servidor falhou!",
@@ -341,7 +343,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida.<br/>Se não tiver certeza do que deve fazer, contate o administrador antes de continuar. <br/>Deseja realmente continuar?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor não tem nenhuma conexão com a Internet. Isso significa que alguns dos recursos como montar armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acessar arquivos remotamente e envio de e-mails de notificação pode não funcionar, também. Sugerimos permitir conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A configuração de cabeçalhos do proxy reverso está incorreta, ou você está acessando ownCloud de um proxy confiável. Se você não estiver acessando ownCloud de um proxy de confiança, esta é uma questão de segurança e pode permitir a um invasor falsificar o endereço IP como visíveis para ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
- "Allow editing" : "Permitir edição",
"Hide file listing" : "Listar arquivo oculto",
"Sending ..." : "Enviando ...",
"Email sent" : "E-mail enviado",
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 2ef61d3f038..cafdfbef0e0 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -58,6 +58,7 @@
"seconds ago" : "segundos atrás",
"Logging in …" : "Logando ...",
"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." : "O link para redefinir sua senha foi enviado para seu e-mail. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo.<br> Se ele não estiver lá, pergunte ao administrador do local.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Não existe nenhuma maneira de ter seus dados de volta depois que sua senha seja redefinida.<br /> Se você não tem certeza do que fazer, por favor contate seu administrador antes de continuar.<br />Você realmente deseja continuar?",
"I know what I'm doing" : "Eu sei o que estou fazendo",
"Password can not be changed. Please contact your administrator." : "A senha não pode ser alterada. Por favor, contate o administrador.",
"No" : "Não",
@@ -119,6 +120,7 @@
"Link" : "Link",
"Password protect" : "Proteger com senha",
"Allow upload and editing" : "Permitir envio e edição",
+ "Allow editing" : "Permitir edição",
"File drop (upload only)" : "Zona de arquivos (somente upload)",
"Email link to person" : "Enviar link por e-mail",
"Send" : "Enviar",
@@ -237,8 +239,8 @@
"Need help?" : "Precisa de ajuda?",
"See the documentation" : "Veja a documentação",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer JavaScript para sua correta operação. Por favor {linkstart}habilite JavaScript{linkend} e recerregue a página.",
- "Log out" : "Sair",
"Search" : "Perquisar",
+ "Log out" : "Sair",
"This action requires you to confirm your password:" : "Essa ação requer confirmação da sua senha:",
"Confirm your password" : "Confirme sua senha",
"Server side authentication failed!" : "Autenticação do servidor falhou!",
@@ -339,7 +341,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida.<br/>Se não tiver certeza do que deve fazer, contate o administrador antes de continuar. <br/>Deseja realmente continuar?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor não tem nenhuma conexão com a Internet. Isso significa que alguns dos recursos como montar armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acessar arquivos remotamente e envio de e-mails de notificação pode não funcionar, também. Sugerimos permitir conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A configuração de cabeçalhos do proxy reverso está incorreta, ou você está acessando ownCloud de um proxy confiável. Se você não estiver acessando ownCloud de um proxy de confiança, esta é uma questão de segurança e pode permitir a um invasor falsificar o endereço IP como visíveis para ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
- "Allow editing" : "Permitir edição",
"Hide file listing" : "Listar arquivo oculto",
"Sending ..." : "Enviando ...",
"Email sent" : "E-mail enviado",
diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js
index 3dc75f4f190..28fc45b20e2 100644
--- a/core/l10n/pt_PT.js
+++ b/core/l10n/pt_PT.js
@@ -103,6 +103,7 @@ OC.L10N.register(
"Share link" : "Compartilhar hiperligação",
"Link" : "Hiperligação",
"Password protect" : "Proteger com palavra-passe",
+ "Allow editing" : "Permitir edição",
"Email link to person" : "Enviar hiperligação por mensagem para a pessoa",
"Send" : "Enviar",
"Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}",
@@ -196,8 +197,8 @@ OC.L10N.register(
"Need help?" : "Precisa de ajuda?",
"See the documentation" : "Consulte a documentação",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer o JavaScript para funcionar corretamente. Por favor, {linkstart}ative o JavaScript{linkend} e recarregue a página.",
- "Log out" : "Terminar sessão",
"Search" : "Procurar",
+ "Log out" : "Terminar sessão",
"Server side authentication failed!" : "Autenticação do lado do servidor falhou!",
"Please contact your administrator." : "Por favor, contacte o seu administrador.",
"An internal error occurred." : "Ocorreu um erro interno.",
@@ -290,7 +291,6 @@ OC.L10N.register(
"Dec." : "Dez.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros estão encriptados. Se não ativou a chave de recuperação, não terá nenhum modo para voltar obter os seus dados depois de reiniciar a sua senha. <br />Se não tem a certeza do que fazer, por favor, contacte o seu administrador antes de continuar.<br /> Tem a certeza que quer continuar?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A configuração dos headers do proxy reverso está incorreta, ou então está a aceder ao ownCloud através de um proxy de confiança. Se não está a aceder ao ownCloud através de um proxy de confiança, isto é um problema de segurança e poderá permitir a um invasor falsificar um endereço IP como visível para o ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
- "Allow editing" : "Permitir edição",
"Sending ..." : "A enviar...",
"Email sent" : "Mensagem enviada",
"Send link via email" : "Enviar hiperligação por mensagem",
diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json
index 54693ed0609..fd0d06d47a4 100644
--- a/core/l10n/pt_PT.json
+++ b/core/l10n/pt_PT.json
@@ -101,6 +101,7 @@
"Share link" : "Compartilhar hiperligação",
"Link" : "Hiperligação",
"Password protect" : "Proteger com palavra-passe",
+ "Allow editing" : "Permitir edição",
"Email link to person" : "Enviar hiperligação por mensagem para a pessoa",
"Send" : "Enviar",
"Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}",
@@ -194,8 +195,8 @@
"Need help?" : "Precisa de ajuda?",
"See the documentation" : "Consulte a documentação",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer o JavaScript para funcionar corretamente. Por favor, {linkstart}ative o JavaScript{linkend} e recarregue a página.",
- "Log out" : "Terminar sessão",
"Search" : "Procurar",
+ "Log out" : "Terminar sessão",
"Server side authentication failed!" : "Autenticação do lado do servidor falhou!",
"Please contact your administrator." : "Por favor, contacte o seu administrador.",
"An internal error occurred." : "Ocorreu um erro interno.",
@@ -288,7 +289,6 @@
"Dec." : "Dez.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros estão encriptados. Se não ativou a chave de recuperação, não terá nenhum modo para voltar obter os seus dados depois de reiniciar a sua senha. <br />Se não tem a certeza do que fazer, por favor, contacte o seu administrador antes de continuar.<br /> Tem a certeza que quer continuar?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A configuração dos headers do proxy reverso está incorreta, ou então está a aceder ao ownCloud através de um proxy de confiança. Se não está a aceder ao ownCloud através de um proxy de confiança, isto é um problema de segurança e poderá permitir a um invasor falsificar um endereço IP como visível para o ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
- "Allow editing" : "Permitir edição",
"Sending ..." : "A enviar...",
"Email sent" : "Mensagem enviada",
"Send link via email" : "Enviar hiperligação por mensagem",
diff --git a/core/l10n/ru.js b/core/l10n/ru.js
index a29beebb3c1..9487a79c578 100644
--- a/core/l10n/ru.js
+++ b/core/l10n/ru.js
@@ -26,8 +26,8 @@ OC.L10N.register(
"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" : "Режим обслуживания отключён",
+ "Turned on maintenance mode" : "Включён режим обслуживания ",
+ "Turned off maintenance mode" : "Отключён режим обслуживания",
"Maintenance mode is kept active" : "Режим обслуживания оставлен включенным",
"Updating database schema" : "Обновление схемы базы данных",
"Updated database" : "База данных обновлена",
@@ -37,8 +37,8 @@ OC.L10N.register(
"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",
- "Set log level to debug" : "Установить журнал в режим отладки",
- "Reset log level" : "Сбросить уровень журнала",
+ "Set log level to debug" : "Установлен отладочный уровень протоколирования",
+ "Reset log level" : "Сброс уровня протоколирования",
"Starting code integrity check" : "Начинается проверка целостности кода",
"Finished code integrity check" : "Проверка целостности кода завершина",
"%s (3rdparty)" : "%s (стороннее)",
@@ -122,6 +122,7 @@ OC.L10N.register(
"Link" : "Ссылка",
"Password protect" : "Защитить паролем",
"Allow upload and editing" : "Разрешить загрузку и редактирование",
+ "Allow editing" : "Разрешить редактирование",
"File drop (upload only)" : "Хранилище (только для приема файлов)",
"Email link to person" : "Отправить ссылку по электронной почте",
"Send" : "Отправить",
@@ -240,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Нужна помощь?",
"See the documentation" : "Посмотреть документацию",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Для корректной работы приложения требуется JavaScript. Пожалуйста, {linkstart}включите JavaScript{linkend} и обновите страницу.",
- "Log out" : "Выйти",
"Search" : "Найти",
+ "Log out" : "Выйти",
"This action requires you to confirm your password:" : "Это действие требует подтверждения вашего пароля:",
"Confirm your password" : "Подтвердите свой пароль",
"Server side authentication failed!" : "Ошибка аутентификации на стороне сервера!",
@@ -280,7 +281,7 @@ OC.L10N.register(
"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:" : "Чтобы избежать тайм-аутов в крупных установках, вместо этого можно выполнить следующую команду в каталоге установки:",
- "Detailed logs" : "Подбробные логи",
+ "Detailed logs" : "Подробные журналы",
"Update needed" : "Требуется обновление",
"Please use the command line updater because you have a big instance." : "Пожалуйста, используйте обновление через командную строку, так как данная установка имеет большой размер.",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Для помощи, ознакомьтесь с <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документацией</a>.",
@@ -342,7 +343,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не включили ключ восстановления, то ваши данные будут недоступны после сброса пароля.<br />Если вы не уверены что делать дальше - обратитесь к вашему администратору.<br />Вы действительно хотите продолжить?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Этот сервер не имеет подключения к Интернету. Это означает, что некоторые из функций, таких как внешнее хранилище, уведомления об обновлениях и установка сторонних приложений не будут работать. Доступ к файлам удаленно и отправки уведомлений по почте могут не работать. Рекомендуется разрешить данному серверу доступ в Интернет если хотите, чтобы все функции работали.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Конфигурация заголовков обратного прокси не верна, либо доступ к nextCloud осуществлён через доверенный прокси. Если nextCloud открыт не через доверенный прокси то это проблема безопасности, которая может позволить атакующему подделать IP адрес, который видит nextCloud. Дополнительная информация доступна в нашей <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документации</a>.",
- "Allow editing" : "Разрешить редактирование",
"Hide file listing" : "Скрыть список файлов",
"Sending ..." : "Отправляется ...",
"Email sent" : "Письмо отправлено",
diff --git a/core/l10n/ru.json b/core/l10n/ru.json
index 48a498cd435..0644b0af787 100644
--- a/core/l10n/ru.json
+++ b/core/l10n/ru.json
@@ -24,8 +24,8 @@
"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" : "Режим обслуживания отключён",
+ "Turned on maintenance mode" : "Включён режим обслуживания ",
+ "Turned off maintenance mode" : "Отключён режим обслуживания",
"Maintenance mode is kept active" : "Режим обслуживания оставлен включенным",
"Updating database schema" : "Обновление схемы базы данных",
"Updated database" : "База данных обновлена",
@@ -35,8 +35,8 @@
"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",
- "Set log level to debug" : "Установить журнал в режим отладки",
- "Reset log level" : "Сбросить уровень журнала",
+ "Set log level to debug" : "Установлен отладочный уровень протоколирования",
+ "Reset log level" : "Сброс уровня протоколирования",
"Starting code integrity check" : "Начинается проверка целостности кода",
"Finished code integrity check" : "Проверка целостности кода завершина",
"%s (3rdparty)" : "%s (стороннее)",
@@ -120,6 +120,7 @@
"Link" : "Ссылка",
"Password protect" : "Защитить паролем",
"Allow upload and editing" : "Разрешить загрузку и редактирование",
+ "Allow editing" : "Разрешить редактирование",
"File drop (upload only)" : "Хранилище (только для приема файлов)",
"Email link to person" : "Отправить ссылку по электронной почте",
"Send" : "Отправить",
@@ -238,8 +239,8 @@
"Need help?" : "Нужна помощь?",
"See the documentation" : "Посмотреть документацию",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Для корректной работы приложения требуется JavaScript. Пожалуйста, {linkstart}включите JavaScript{linkend} и обновите страницу.",
- "Log out" : "Выйти",
"Search" : "Найти",
+ "Log out" : "Выйти",
"This action requires you to confirm your password:" : "Это действие требует подтверждения вашего пароля:",
"Confirm your password" : "Подтвердите свой пароль",
"Server side authentication failed!" : "Ошибка аутентификации на стороне сервера!",
@@ -278,7 +279,7 @@
"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:" : "Чтобы избежать тайм-аутов в крупных установках, вместо этого можно выполнить следующую команду в каталоге установки:",
- "Detailed logs" : "Подбробные логи",
+ "Detailed logs" : "Подробные журналы",
"Update needed" : "Требуется обновление",
"Please use the command line updater because you have a big instance." : "Пожалуйста, используйте обновление через командную строку, так как данная установка имеет большой размер.",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Для помощи, ознакомьтесь с <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документацией</a>.",
@@ -340,7 +341,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не включили ключ восстановления, то ваши данные будут недоступны после сброса пароля.<br />Если вы не уверены что делать дальше - обратитесь к вашему администратору.<br />Вы действительно хотите продолжить?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Этот сервер не имеет подключения к Интернету. Это означает, что некоторые из функций, таких как внешнее хранилище, уведомления об обновлениях и установка сторонних приложений не будут работать. Доступ к файлам удаленно и отправки уведомлений по почте могут не работать. Рекомендуется разрешить данному серверу доступ в Интернет если хотите, чтобы все функции работали.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Конфигурация заголовков обратного прокси не верна, либо доступ к nextCloud осуществлён через доверенный прокси. Если nextCloud открыт не через доверенный прокси то это проблема безопасности, которая может позволить атакующему подделать IP адрес, который видит nextCloud. Дополнительная информация доступна в нашей <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документации</a>.",
- "Allow editing" : "Разрешить редактирование",
"Hide file listing" : "Скрыть список файлов",
"Sending ..." : "Отправляется ...",
"Email sent" : "Письмо отправлено",
diff --git a/core/l10n/sk_SK.js b/core/l10n/sk_SK.js
index f09fefc1343..0b1e2d05f07 100644
--- a/core/l10n/sk_SK.js
+++ b/core/l10n/sk_SK.js
@@ -111,6 +111,7 @@ OC.L10N.register(
"Link" : "Odkaz",
"Password protect" : "Chrániť heslom",
"Allow upload and editing" : "Povoliť nahratie a úpravy",
+ "Allow editing" : "Povoliť úpravy",
"Email link to person" : "Odoslať odkaz emailom",
"Send" : "Odoslať",
"Shared with you and the group {group} by {owner}" : "Sprístupnené vám a skupine {group} používateľom {owner}",
@@ -207,8 +208,8 @@ OC.L10N.register(
"Need help?" : "Potrebujete pomoc?",
"See the documentation" : "Pozri dokumentáciu",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Táto aplikácia vyžaduje JavaScript, aby správne fungovala. Prosím, {linkstart}zapnite si JavaScript{linkend} a obnovte stránku",
- "Log out" : "Odhlásiť",
"Search" : "Hľadať",
+ "Log out" : "Odhlásiť",
"Server side authentication failed!" : "Autentifikácia na serveri zlyhala!",
"Please contact your administrator." : "Kontaktujte prosím vášho administrátora.",
"An internal error occurred." : "Došlo k vnútornej chybe.",
@@ -298,7 +299,6 @@ OC.L10N.register(
"Dec." : "Dec.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Súbory sú zašifrované. Ak ste nepovolili kľúč pre obnovenie, neexistuje žiadny spôsob, ako obnoviť vaše dáta po obnovení vášho hesla. <br /> Ak si nie ste istí čo urobiť, prosím skôr než budete pokračovať, obráťte sa na administrátora. <br /> Naozaj chcete pokračovať?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurácia hlavičiek reverse proxy nie je správna alebo pristupujete k ownCloud z dôveryhodného proxy servera. Ak k ownCloud nepristupujete z dôveryhodného proxy servera, vzniká bezpečnostné riziko - IP adresa potenciálneho útočníka, ktorú vidí ownCloud, môže byť falošná. Viac informácií nájdete v našej <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentácii</a>.",
- "Allow editing" : "Povoliť úpravy",
"Sending ..." : "Odosielam ...",
"Email sent" : "Email odoslaný",
"notify by email" : "informovať emailom",
diff --git a/core/l10n/sk_SK.json b/core/l10n/sk_SK.json
index 52cd2b135d4..ae464c73869 100644
--- a/core/l10n/sk_SK.json
+++ b/core/l10n/sk_SK.json
@@ -109,6 +109,7 @@
"Link" : "Odkaz",
"Password protect" : "Chrániť heslom",
"Allow upload and editing" : "Povoliť nahratie a úpravy",
+ "Allow editing" : "Povoliť úpravy",
"Email link to person" : "Odoslať odkaz emailom",
"Send" : "Odoslať",
"Shared with you and the group {group} by {owner}" : "Sprístupnené vám a skupine {group} používateľom {owner}",
@@ -205,8 +206,8 @@
"Need help?" : "Potrebujete pomoc?",
"See the documentation" : "Pozri dokumentáciu",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Táto aplikácia vyžaduje JavaScript, aby správne fungovala. Prosím, {linkstart}zapnite si JavaScript{linkend} a obnovte stránku",
- "Log out" : "Odhlásiť",
"Search" : "Hľadať",
+ "Log out" : "Odhlásiť",
"Server side authentication failed!" : "Autentifikácia na serveri zlyhala!",
"Please contact your administrator." : "Kontaktujte prosím vášho administrátora.",
"An internal error occurred." : "Došlo k vnútornej chybe.",
@@ -296,7 +297,6 @@
"Dec." : "Dec.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Súbory sú zašifrované. Ak ste nepovolili kľúč pre obnovenie, neexistuje žiadny spôsob, ako obnoviť vaše dáta po obnovení vášho hesla. <br /> Ak si nie ste istí čo urobiť, prosím skôr než budete pokračovať, obráťte sa na administrátora. <br /> Naozaj chcete pokračovať?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurácia hlavičiek reverse proxy nie je správna alebo pristupujete k ownCloud z dôveryhodného proxy servera. Ak k ownCloud nepristupujete z dôveryhodného proxy servera, vzniká bezpečnostné riziko - IP adresa potenciálneho útočníka, ktorú vidí ownCloud, môže byť falošná. Viac informácií nájdete v našej <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentácii</a>.",
- "Allow editing" : "Povoliť úpravy",
"Sending ..." : "Odosielam ...",
"Email sent" : "Email odoslaný",
"notify by email" : "informovať emailom",
diff --git a/core/l10n/sl.js b/core/l10n/sl.js
index 17f6185aa0d..0ddea48e946 100644
--- a/core/l10n/sl.js
+++ b/core/l10n/sl.js
@@ -107,6 +107,7 @@ OC.L10N.register(
"Link" : "Povezava",
"Password protect" : "Zaščiti z geslom",
"Allow upload and editing" : "Dovoli nalaganje in urejanje",
+ "Allow editing" : "Dovoli urejanje",
"Email link to person" : "Posreduj povezavo po elektronski pošti",
"Send" : "Pošlji",
"Shared with you and the group {group} by {owner}" : "V souporabi z vami in skupino {group}. Lastnik je {owner}.",
@@ -205,8 +206,8 @@ OC.L10N.register(
"Need help?" : "Ali potrebujete pomoč?",
"See the documentation" : "Preverite dokumentacijo",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Program zahteva podporo JavaScript za pravilno delovanje. Med nastavitvami omogočite {linkstart}JavaScript{linkend} in osvežite spletno stran.",
- "Log out" : "Odjava",
"Search" : "Poišči",
+ "Log out" : "Odjava",
"Server side authentication failed!" : "Overitev s strežnika je spodletela!",
"Please contact your administrator." : "Stopite v stik s skrbnikom sistema.",
"An internal error occurred." : "Prišlo je do notranje napake.",
@@ -302,7 +303,6 @@ OC.L10N.register(
"Nov." : "nov",
"Dec." : "dec",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?",
- "Allow editing" : "Dovoli urejanje",
"Hide file listing" : "Skrij spisek datotek",
"Sending ..." : "Pošiljanje ...",
"Email sent" : "Elektronska pošta je poslana",
diff --git a/core/l10n/sl.json b/core/l10n/sl.json
index a9c6cd78d1a..6e9c3892efe 100644
--- a/core/l10n/sl.json
+++ b/core/l10n/sl.json
@@ -105,6 +105,7 @@
"Link" : "Povezava",
"Password protect" : "Zaščiti z geslom",
"Allow upload and editing" : "Dovoli nalaganje in urejanje",
+ "Allow editing" : "Dovoli urejanje",
"Email link to person" : "Posreduj povezavo po elektronski pošti",
"Send" : "Pošlji",
"Shared with you and the group {group} by {owner}" : "V souporabi z vami in skupino {group}. Lastnik je {owner}.",
@@ -203,8 +204,8 @@
"Need help?" : "Ali potrebujete pomoč?",
"See the documentation" : "Preverite dokumentacijo",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Program zahteva podporo JavaScript za pravilno delovanje. Med nastavitvami omogočite {linkstart}JavaScript{linkend} in osvežite spletno stran.",
- "Log out" : "Odjava",
"Search" : "Poišči",
+ "Log out" : "Odjava",
"Server side authentication failed!" : "Overitev s strežnika je spodletela!",
"Please contact your administrator." : "Stopite v stik s skrbnikom sistema.",
"An internal error occurred." : "Prišlo je do notranje napake.",
@@ -300,7 +301,6 @@
"Nov." : "nov",
"Dec." : "dec",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?",
- "Allow editing" : "Dovoli urejanje",
"Hide file listing" : "Skrij spisek datotek",
"Sending ..." : "Pošiljanje ...",
"Email sent" : "Elektronska pošta je poslana",
diff --git a/core/l10n/sq.js b/core/l10n/sq.js
index 729ce181d33..29a0ee5ff97 100644
--- a/core/l10n/sq.js
+++ b/core/l10n/sq.js
@@ -60,6 +60,7 @@ OC.L10N.register(
"seconds ago" : "sekonda më parë",
"Logging in …" : "Duke u loguar ...",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Lidhja për ricaktimin e fjalëkalimi tuaj u dërgua tek email-i juaj. Nëse nuk e merrni brenda një kohe të arsyeshme, kontrolloni dosjet e postës së padëshirueshme/postës së pavlerë.<br>Nëse s’është as aty, pyetni përgjegjësin tuaj lokal.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Skedarët tuaj janë të enkriptuar. Nuk do ketë asnjë mënyrë për ti rimarrë të dhënat pasi fjalëkalimi juaj të rivendoset. <br>Nëse nuk jeni të sigurt se çfarë duhet të bëni, ju lutemi flisni me administratorin tuaj para se të vazhdoni. <br /> Doni vërtet të vazhdoni?",
"I know what I'm doing" : "E di se ç’bëj",
"Password can not be changed. Please contact your administrator." : "Fjalëkalimi nuk mund të ndryshohet. Ju lutemi, lidhuni me përgjegjësin tuaj.",
"No" : "Jo",
@@ -121,6 +122,7 @@ OC.L10N.register(
"Link" : "Lidhje",
"Password protect" : "Mbroje me fjalëkalim",
"Allow upload and editing" : "Lejo ngarkim dhe editim",
+ "Allow editing" : "Lejo përpunim",
"File drop (upload only)" : "Lësho skedar (vetëm ngarkim)",
"Email link to person" : "Dërgoja personit lidhjen me email",
"Send" : "Dërgoje",
@@ -239,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Ju duhet ndihmë?",
"See the documentation" : "Shihni dokumentimin",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ky aplikacion lyp JavaScript për punim të saktë. Ju lutemi, {linkstart}aktivizoni JavaScript-in{linkend} dhe ringarkoni faqen.",
- "Log out" : "Dilni",
"Search" : "Kërko",
+ "Log out" : "Dilni",
"This action requires you to confirm your password:" : "Ky veprim kërkon të konfirmoni fjalëkalimin tuaj:",
"Confirm your password" : "Konfrimoni fjalëkalimin tuaj",
"Server side authentication failed!" : "Mirëfilltësimi më anë të shërbyesit dështoi!",
@@ -341,7 +343,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Kartelat tuaja janë të fshehtëzuara. Nëse s’keni aktivizuar kyçin e rimarrjeve, nuk do të ketë ndonjë rrugë për të marrë sërish të dhënat tuaja pasi të jetë ricaktuar fjalëkalimi juaj.<br />Nëse s’jeni i sigurt se ç’duhet bërë, ju lutemi, përpara se të vazhdoni, lidhuni me përgjegjësin tuaj. <br />Doni vërtet të vazhdoni?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ky shërbyes nuk ka lidhje Internet funksionale. Kjo do të thotë që disa nga karakteristikat e lidhjes së ngarkesës së jashtme, njoftimet rreth përditësimit ose instalimit të aplikacioneve të palës së tretë nuk do të punojnë. Duke aksesuar skedarët në distancë dhe duke dërguar njoftimin me postë elektronike mund të mos punojë. Ne sygjerojmë të aktivizoni lidhjen e Internet për këtë shërbyes nëse doni të keni të gjitha karakteristikat.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Formësimi për krye ndërmjetësi prapësor është i pasaktë, ose jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar. Nëse s’jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar, ky është një problem sigurie dhe mund t’i lejojë një agresori të maskojë adresën e vet IP si një të pranueshme nga ownCloud-i. Të dhëna të mëtejshme mund të gjeni te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë.",
- "Allow editing" : "Lejo përpunim",
"Hide file listing" : "Fshih skedarin e listimit",
"Sending ..." : "Po dërgohet …",
"Email sent" : "Email-i u dërgua",
diff --git a/core/l10n/sq.json b/core/l10n/sq.json
index 5e15937e5b4..b61584cc5f3 100644
--- a/core/l10n/sq.json
+++ b/core/l10n/sq.json
@@ -58,6 +58,7 @@
"seconds ago" : "sekonda më parë",
"Logging in …" : "Duke u loguar ...",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Lidhja për ricaktimin e fjalëkalimi tuaj u dërgua tek email-i juaj. Nëse nuk e merrni brenda një kohe të arsyeshme, kontrolloni dosjet e postës së padëshirueshme/postës së pavlerë.<br>Nëse s’është as aty, pyetni përgjegjësin tuaj lokal.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Skedarët tuaj janë të enkriptuar. Nuk do ketë asnjë mënyrë për ti rimarrë të dhënat pasi fjalëkalimi juaj të rivendoset. <br>Nëse nuk jeni të sigurt se çfarë duhet të bëni, ju lutemi flisni me administratorin tuaj para se të vazhdoni. <br /> Doni vërtet të vazhdoni?",
"I know what I'm doing" : "E di se ç’bëj",
"Password can not be changed. Please contact your administrator." : "Fjalëkalimi nuk mund të ndryshohet. Ju lutemi, lidhuni me përgjegjësin tuaj.",
"No" : "Jo",
@@ -119,6 +120,7 @@
"Link" : "Lidhje",
"Password protect" : "Mbroje me fjalëkalim",
"Allow upload and editing" : "Lejo ngarkim dhe editim",
+ "Allow editing" : "Lejo përpunim",
"File drop (upload only)" : "Lësho skedar (vetëm ngarkim)",
"Email link to person" : "Dërgoja personit lidhjen me email",
"Send" : "Dërgoje",
@@ -237,8 +239,8 @@
"Need help?" : "Ju duhet ndihmë?",
"See the documentation" : "Shihni dokumentimin",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ky aplikacion lyp JavaScript për punim të saktë. Ju lutemi, {linkstart}aktivizoni JavaScript-in{linkend} dhe ringarkoni faqen.",
- "Log out" : "Dilni",
"Search" : "Kërko",
+ "Log out" : "Dilni",
"This action requires you to confirm your password:" : "Ky veprim kërkon të konfirmoni fjalëkalimin tuaj:",
"Confirm your password" : "Konfrimoni fjalëkalimin tuaj",
"Server side authentication failed!" : "Mirëfilltësimi më anë të shërbyesit dështoi!",
@@ -339,7 +341,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Kartelat tuaja janë të fshehtëzuara. Nëse s’keni aktivizuar kyçin e rimarrjeve, nuk do të ketë ndonjë rrugë për të marrë sërish të dhënat tuaja pasi të jetë ricaktuar fjalëkalimi juaj.<br />Nëse s’jeni i sigurt se ç’duhet bërë, ju lutemi, përpara se të vazhdoni, lidhuni me përgjegjësin tuaj. <br />Doni vërtet të vazhdoni?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ky shërbyes nuk ka lidhje Internet funksionale. Kjo do të thotë që disa nga karakteristikat e lidhjes së ngarkesës së jashtme, njoftimet rreth përditësimit ose instalimit të aplikacioneve të palës së tretë nuk do të punojnë. Duke aksesuar skedarët në distancë dhe duke dërguar njoftimin me postë elektronike mund të mos punojë. Ne sygjerojmë të aktivizoni lidhjen e Internet për këtë shërbyes nëse doni të keni të gjitha karakteristikat.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Formësimi për krye ndërmjetësi prapësor është i pasaktë, ose jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar. Nëse s’jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar, ky është një problem sigurie dhe mund t’i lejojë një agresori të maskojë adresën e vet IP si një të pranueshme nga ownCloud-i. Të dhëna të mëtejshme mund të gjeni te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë.",
- "Allow editing" : "Lejo përpunim",
"Hide file listing" : "Fshih skedarin e listimit",
"Sending ..." : "Po dërgohet …",
"Email sent" : "Email-i u dërgua",
diff --git a/core/l10n/sv.js b/core/l10n/sv.js
index 7e220940d23..f5cad1205bd 100644
--- a/core/l10n/sv.js
+++ b/core/l10n/sv.js
@@ -60,6 +60,7 @@ OC.L10N.register(
"seconds ago" : "sekunder sedan",
"Logging in …" : "Loggar 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." : "Länken för att återställa ditt lösenord har skickats till din e-mail. Om du inte mottar något inom kort, kontrollera spam/skräpkorgen.<br>Om det inte finns något där, vänligen kontakta din lokala administratör.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Det kommer inte att finnas något sätt att få tillbaka din data efter att ditt lösenord om ditt lösenord återställs..<br />Om du är osäker på hur du ska göra, vänligen kontakta din administratör innan du fortsätter..<br />Är du verkligen säker på att du vill fortsätta?",
"I know what I'm doing" : "Jag är säker på vad jag gör",
"Password can not be changed. Please contact your administrator." : "Lösenordet kan inte ändras. Vänligen kontakta din administratör.",
"No" : "Nej",
@@ -121,6 +122,7 @@ OC.L10N.register(
"Link" : "Länk",
"Password protect" : "Lösenordsskydda",
"Allow upload and editing" : "Tillåt uppladdning och redigering",
+ "Allow editing" : "Tillåt redigering",
"File drop (upload only)" : "Göm fillista (endast uppladdning)",
"Email link to person" : "Skicka länken som e-postmeddelande",
"Send" : "Skicka",
@@ -239,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Behöver du hjälp?",
"See the documentation" : "Läs dokumentationen",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denna applikationen kräver JavaScript för att fungera korrekt. Var god {linkstart}aktivera JavaScript{linkend} och ladda om sidan.",
- "Log out" : "Logga ut",
"Search" : "Sök",
+ "Log out" : "Logga ut",
"This action requires you to confirm your password:" : "Denna åtgärd kräver att du bekräftar ditt lösenord:",
"Confirm your password" : "Bekräfta ditt lösenord",
"Server side authentication failed!" : "Servern misslyckades med autentisering!",
@@ -341,7 +343,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Servern har ingen fungerande internetuppkoppling. Detta betyder att vissa funktioner så som extern lagring, notifikationer om uppdateringar eller installationer utav tredjepartsapplikationer inte kommer fungera. Åtkomst av filer utifrån och att skicka notifieringar via epost kanske inte fungerar heller. Vi föreslår att internetanslutningen aktiveras för denna server om man vill använda samtliga funktioner.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfiguration för \"reverse proxy headers\" är felaktig eller så försöker du nå Nextcloud från en betrodd proxy. Om du inte försöker nå Nextcloud från en betrodd proxy, detta är en säkerhetsrisk och kan möjliggöra att en hacker att förfalska sin IP adress som är synlig för Nextcloud. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.",
- "Allow editing" : "Tillåt redigering",
"Hide file listing" : "Dölj filer i mappen",
"Sending ..." : "Skickar ...",
"Email sent" : "E-post skickat",
diff --git a/core/l10n/sv.json b/core/l10n/sv.json
index b709cdeaa8c..642187b356c 100644
--- a/core/l10n/sv.json
+++ b/core/l10n/sv.json
@@ -58,6 +58,7 @@
"seconds ago" : "sekunder sedan",
"Logging in …" : "Loggar 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." : "Länken för att återställa ditt lösenord har skickats till din e-mail. Om du inte mottar något inom kort, kontrollera spam/skräpkorgen.<br>Om det inte finns något där, vänligen kontakta din lokala administratör.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Det kommer inte att finnas något sätt att få tillbaka din data efter att ditt lösenord om ditt lösenord återställs..<br />Om du är osäker på hur du ska göra, vänligen kontakta din administratör innan du fortsätter..<br />Är du verkligen säker på att du vill fortsätta?",
"I know what I'm doing" : "Jag är säker på vad jag gör",
"Password can not be changed. Please contact your administrator." : "Lösenordet kan inte ändras. Vänligen kontakta din administratör.",
"No" : "Nej",
@@ -119,6 +120,7 @@
"Link" : "Länk",
"Password protect" : "Lösenordsskydda",
"Allow upload and editing" : "Tillåt uppladdning och redigering",
+ "Allow editing" : "Tillåt redigering",
"File drop (upload only)" : "Göm fillista (endast uppladdning)",
"Email link to person" : "Skicka länken som e-postmeddelande",
"Send" : "Skicka",
@@ -237,8 +239,8 @@
"Need help?" : "Behöver du hjälp?",
"See the documentation" : "Läs dokumentationen",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denna applikationen kräver JavaScript för att fungera korrekt. Var god {linkstart}aktivera JavaScript{linkend} och ladda om sidan.",
- "Log out" : "Logga ut",
"Search" : "Sök",
+ "Log out" : "Logga ut",
"This action requires you to confirm your password:" : "Denna åtgärd kräver att du bekräftar ditt lösenord:",
"Confirm your password" : "Bekräfta ditt lösenord",
"Server side authentication failed!" : "Servern misslyckades med autentisering!",
@@ -339,7 +341,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Servern har ingen fungerande internetuppkoppling. Detta betyder att vissa funktioner så som extern lagring, notifikationer om uppdateringar eller installationer utav tredjepartsapplikationer inte kommer fungera. Åtkomst av filer utifrån och att skicka notifieringar via epost kanske inte fungerar heller. Vi föreslår att internetanslutningen aktiveras för denna server om man vill använda samtliga funktioner.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfiguration för \"reverse proxy headers\" är felaktig eller så försöker du nå Nextcloud från en betrodd proxy. Om du inte försöker nå Nextcloud från en betrodd proxy, detta är en säkerhetsrisk och kan möjliggöra att en hacker att förfalska sin IP adress som är synlig för Nextcloud. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.",
- "Allow editing" : "Tillåt redigering",
"Hide file listing" : "Dölj filer i mappen",
"Sending ..." : "Skickar ...",
"Email sent" : "E-post skickat",
diff --git a/core/l10n/th_TH.js b/core/l10n/th_TH.js
index beb7f903de8..09129861c82 100644
--- a/core/l10n/th_TH.js
+++ b/core/l10n/th_TH.js
@@ -97,6 +97,7 @@ OC.L10N.register(
"Share link" : "แชร์ลิงค์",
"Link" : "ลิงค์",
"Password protect" : "ป้องกันด้วยรหัสผ่าน",
+ "Allow editing" : "อนุญาตให้แก้ไข",
"Email link to person" : "ส่งลิงก์ให้ทางอีเมล",
"Send" : "ส่ง",
"Shared with you and the group {group} by {owner}" : "ได้แชร์ให้กับคุณ และกลุ่ม {group} โดย {owner}",
@@ -181,8 +182,8 @@ OC.L10N.register(
"Need help?" : "ต้องการความช่วยเหลือ?",
"See the documentation" : "ดูได้จากเอกสาร",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "โปรแกรมนี้ต้องการ JavaScript สำหรับการดำเนินงานที่ถูกต้อง กรุณา {linkstart}เปิดใช้งาน JavaScript{linkend} และโหลดหน้าเว็บ",
- "Log out" : "ออกจากระบบ",
"Search" : "ค้นหา",
+ "Log out" : "ออกจากระบบ",
"Server side authentication failed!" : "การรับรองความถูกต้องจากเซิร์ฟเวอร์ล้มเหลว!",
"Please contact your administrator." : "กรุณาติดต่อผู้ดูแลระบบ",
"Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ",
@@ -268,7 +269,6 @@ OC.L10N.register(
"Nov." : "พ.ย.",
"Dec." : "ธ.ค.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ไฟล์ของคุณจะถูกเข้ารหัส หากคุณยังไม่ได้เปิดใช้งานรหัสการกู้คืน คุณจะได้รับข้อมูลของคุณกลับมาหลังจากที่รหัสผ่านของคุณถูกรีเซ็ต<br /> หากคุณไม่แน่ใจว่าควรทำอย่างไรโปรดติดต่อผู้ดูแลระบบของคุณก่อนที่คุณจะดำเนินการต่อไป <br /> คุณต้องการดำเนินการต่อ?",
- "Allow editing" : "อนุญาตให้แก้ไข",
"Sending ..." : "กำลังส่ง...",
"Email sent" : "ส่งอีเมล์แล้ว",
"notify by email" : "แจ้งเตือนทางอีเมล",
diff --git a/core/l10n/th_TH.json b/core/l10n/th_TH.json
index 745b520128a..589a776139f 100644
--- a/core/l10n/th_TH.json
+++ b/core/l10n/th_TH.json
@@ -95,6 +95,7 @@
"Share link" : "แชร์ลิงค์",
"Link" : "ลิงค์",
"Password protect" : "ป้องกันด้วยรหัสผ่าน",
+ "Allow editing" : "อนุญาตให้แก้ไข",
"Email link to person" : "ส่งลิงก์ให้ทางอีเมล",
"Send" : "ส่ง",
"Shared with you and the group {group} by {owner}" : "ได้แชร์ให้กับคุณ และกลุ่ม {group} โดย {owner}",
@@ -179,8 +180,8 @@
"Need help?" : "ต้องการความช่วยเหลือ?",
"See the documentation" : "ดูได้จากเอกสาร",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "โปรแกรมนี้ต้องการ JavaScript สำหรับการดำเนินงานที่ถูกต้อง กรุณา {linkstart}เปิดใช้งาน JavaScript{linkend} และโหลดหน้าเว็บ",
- "Log out" : "ออกจากระบบ",
"Search" : "ค้นหา",
+ "Log out" : "ออกจากระบบ",
"Server side authentication failed!" : "การรับรองความถูกต้องจากเซิร์ฟเวอร์ล้มเหลว!",
"Please contact your administrator." : "กรุณาติดต่อผู้ดูแลระบบ",
"Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ",
@@ -266,7 +267,6 @@
"Nov." : "พ.ย.",
"Dec." : "ธ.ค.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ไฟล์ของคุณจะถูกเข้ารหัส หากคุณยังไม่ได้เปิดใช้งานรหัสการกู้คืน คุณจะได้รับข้อมูลของคุณกลับมาหลังจากที่รหัสผ่านของคุณถูกรีเซ็ต<br /> หากคุณไม่แน่ใจว่าควรทำอย่างไรโปรดติดต่อผู้ดูแลระบบของคุณก่อนที่คุณจะดำเนินการต่อไป <br /> คุณต้องการดำเนินการต่อ?",
- "Allow editing" : "อนุญาตให้แก้ไข",
"Sending ..." : "กำลังส่ง...",
"Email sent" : "ส่งอีเมล์แล้ว",
"notify by email" : "แจ้งเตือนทางอีเมล",
diff --git a/core/l10n/tr.js b/core/l10n/tr.js
index 92e3ce5ba70..f938e97716a 100644
--- a/core/l10n/tr.js
+++ b/core/l10n/tr.js
@@ -108,6 +108,7 @@ OC.L10N.register(
"Share link" : "Paylaşma bağlantısı",
"Link" : "Bağlantı",
"Password protect" : "Parola koruması",
+ "Allow editing" : "Düzenlemeye izin ver",
"Email link to person" : "Bağlantıyı e-posta ile gönder",
"Send" : "Gönder",
"Shared with you and the group {group} by {owner}" : "{owner} tarafından sizinle ve {group} ile paylaştırılmış",
@@ -203,8 +204,8 @@ OC.L10N.register(
"Need help?" : "Yardım mı lazım?",
"See the documentation" : "Belgelendirmeye bak",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Bu uygulama düzgün çalışabilmesi için JavaScript gerektirir. Lütfen {linkstart}JavaScript'i etkinleştirin{linkend} ve sayfayı yeniden yükleyin.",
- "Log out" : "Çıkış yap",
"Search" : "Ara",
+ "Log out" : "Çıkış yap",
"Server side authentication failed!" : "Sunucu taraflı yetkilendirme başarısız!",
"Please contact your administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.",
"An internal error occurred." : "Dahili bir hata oluştu.",
@@ -297,7 +298,6 @@ OC.L10N.register(
"Dec." : "Ara.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmemişseniz, parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak.<br />Ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin.<br />Gerçekten devam etmek istiyor musunuz?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ters vekil sunucu başlık yapılandırmanız hatalı veya ownCloud'a güvenilen bir vekil sunucudan erişiyorsunuz. Eğer erişiminiz güvenilen bir vekil sunucu aracılığıyla gerçekleşmiyorsa bu bir güvenlik sorunudur ve bir saldırganın IP adresini farklıymış gibi göstermesine neden olabilir. Daha fazla bilgiyi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.",
- "Allow editing" : "Düzenlemeye izin ver",
"Hide file listing" : "Dosya listelemesini gizle",
"Sending ..." : "Gönderiliyor...",
"Email sent" : "E-posta gönderildi",
diff --git a/core/l10n/tr.json b/core/l10n/tr.json
index 764d16e978a..79c15a5ecee 100644
--- a/core/l10n/tr.json
+++ b/core/l10n/tr.json
@@ -106,6 +106,7 @@
"Share link" : "Paylaşma bağlantısı",
"Link" : "Bağlantı",
"Password protect" : "Parola koruması",
+ "Allow editing" : "Düzenlemeye izin ver",
"Email link to person" : "Bağlantıyı e-posta ile gönder",
"Send" : "Gönder",
"Shared with you and the group {group} by {owner}" : "{owner} tarafından sizinle ve {group} ile paylaştırılmış",
@@ -201,8 +202,8 @@
"Need help?" : "Yardım mı lazım?",
"See the documentation" : "Belgelendirmeye bak",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Bu uygulama düzgün çalışabilmesi için JavaScript gerektirir. Lütfen {linkstart}JavaScript'i etkinleştirin{linkend} ve sayfayı yeniden yükleyin.",
- "Log out" : "Çıkış yap",
"Search" : "Ara",
+ "Log out" : "Çıkış yap",
"Server side authentication failed!" : "Sunucu taraflı yetkilendirme başarısız!",
"Please contact your administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.",
"An internal error occurred." : "Dahili bir hata oluştu.",
@@ -295,7 +296,6 @@
"Dec." : "Ara.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmemişseniz, parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak.<br />Ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin.<br />Gerçekten devam etmek istiyor musunuz?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ters vekil sunucu başlık yapılandırmanız hatalı veya ownCloud'a güvenilen bir vekil sunucudan erişiyorsunuz. Eğer erişiminiz güvenilen bir vekil sunucu aracılığıyla gerçekleşmiyorsa bu bir güvenlik sorunudur ve bir saldırganın IP adresini farklıymış gibi göstermesine neden olabilir. Daha fazla bilgiyi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.",
- "Allow editing" : "Düzenlemeye izin ver",
"Hide file listing" : "Dosya listelemesini gizle",
"Sending ..." : "Gönderiliyor...",
"Email sent" : "E-posta gönderildi",
diff --git a/core/l10n/uk.js b/core/l10n/uk.js
index 45b8810cd50..aef131f69fe 100644
--- a/core/l10n/uk.js
+++ b/core/l10n/uk.js
@@ -95,6 +95,7 @@ OC.L10N.register(
"Share link" : "Поділитись посиланням",
"Link" : "Посилання",
"Password protect" : "Захистити паролем",
+ "Allow editing" : "Дозволити редагування",
"Email link to person" : "Надіслати посилання електронною поштою",
"Send" : "Надіслати",
"Shared with you and the group {group} by {owner}" : " {owner} опублікував для Вас та для групи {group}",
@@ -186,8 +187,8 @@ OC.L10N.register(
"Need help?" : "Потрібна допомога?",
"See the documentation" : "Дивіться документацію",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ця програма вимагає увімкнений JavaScript для коректної роботи. Будь ласка, {linkstart} Увімкніть JavaScript {linkend} та перезавантажте сторінку.",
- "Log out" : "Вихід",
"Search" : "Пошук",
+ "Log out" : "Вихід",
"Server side authentication failed!" : "Невдала аутентифікація з сервером!",
"Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.",
"An internal error occurred." : "Виникла внутрішня помилка.",
@@ -278,7 +279,6 @@ OC.L10N.register(
"Nov." : "Лис.",
"Dec." : "Гру.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?",
- "Allow editing" : "Дозволити редагування",
"Sending ..." : "Надсилання...",
"Email sent" : "Лист надіслано",
"Send link via email" : "Надіслати посилання електронною поштою",
diff --git a/core/l10n/uk.json b/core/l10n/uk.json
index d93853483d5..da69ffaea29 100644
--- a/core/l10n/uk.json
+++ b/core/l10n/uk.json
@@ -93,6 +93,7 @@
"Share link" : "Поділитись посиланням",
"Link" : "Посилання",
"Password protect" : "Захистити паролем",
+ "Allow editing" : "Дозволити редагування",
"Email link to person" : "Надіслати посилання електронною поштою",
"Send" : "Надіслати",
"Shared with you and the group {group} by {owner}" : " {owner} опублікував для Вас та для групи {group}",
@@ -184,8 +185,8 @@
"Need help?" : "Потрібна допомога?",
"See the documentation" : "Дивіться документацію",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ця програма вимагає увімкнений JavaScript для коректної роботи. Будь ласка, {linkstart} Увімкніть JavaScript {linkend} та перезавантажте сторінку.",
- "Log out" : "Вихід",
"Search" : "Пошук",
+ "Log out" : "Вихід",
"Server side authentication failed!" : "Невдала аутентифікація з сервером!",
"Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.",
"An internal error occurred." : "Виникла внутрішня помилка.",
@@ -276,7 +277,6 @@
"Nov." : "Лис.",
"Dec." : "Гру.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?",
- "Allow editing" : "Дозволити редагування",
"Sending ..." : "Надсилання...",
"Email sent" : "Лист надіслано",
"Send link via email" : "Надіслати посилання електронною поштою",
diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js
index 9018b26d645..47101cfe384 100644
--- a/core/l10n/zh_CN.js
+++ b/core/l10n/zh_CN.js
@@ -122,6 +122,7 @@ OC.L10N.register(
"Link" : "链接",
"Password protect" : "密码保护",
"Allow upload and editing" : "允许上传和编辑",
+ "Allow editing" : "允许编辑",
"File drop (upload only)" : "文件拖拽 (仅上传)",
"Email link to person" : "发送链接到个人",
"Send" : "发送",
@@ -240,8 +241,8 @@ OC.L10N.register(
"Need help?" : "需要帮助?",
"See the documentation" : "查看文档",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "对于正确的操作, 该应用需要使用 JavaScript. 请 {linkstart}启用 JavaScript{linkend}, 并重新加载页面.",
- "Log out" : "注销",
"Search" : "搜索",
+ "Log out" : "注销",
"This action requires you to confirm your password:" : "此操作需要确认您的密码:",
"Confirm your password" : "确认您的密码",
"Server side authentication failed!" : "服务端认证失败!",
@@ -342,7 +343,6 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的文件已经加密. 如果您没有启用恢复密钥, 当您的密码重置后没有任何方式能恢复您的数据. <br />如果您不确定, 请在继续前联系您的管理员.<br/>您是否真的要继续?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "此服务器没有可用的互联网连接. 这意味着某些功能比如挂载外部存储, 更新通知以及安装第三方应用将无法工作. 远程访问文件和发送通知邮件可能也不工作. 如果您想使用所有的功能, 我们建议启用互联网连接.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "反向代理配置错误, 或者您正在通过可信的代理访问 ownCloud. 如果您不是通过可信代理访问 ownCloud, 这将是一个安全问题, 并允许攻击者通过伪装 IP 地址访问 ownCloud. 更多信息请查看我们的<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">文档</a>.",
- "Allow editing" : "允许编辑",
"Hide file listing" : "隐藏列出的文件",
"Sending ..." : "正在发送...",
"Email sent" : "邮件已发送",
diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json
index c6efd72710f..23134b325d7 100644
--- a/core/l10n/zh_CN.json
+++ b/core/l10n/zh_CN.json
@@ -120,6 +120,7 @@
"Link" : "链接",
"Password protect" : "密码保护",
"Allow upload and editing" : "允许上传和编辑",
+ "Allow editing" : "允许编辑",
"File drop (upload only)" : "文件拖拽 (仅上传)",
"Email link to person" : "发送链接到个人",
"Send" : "发送",
@@ -238,8 +239,8 @@
"Need help?" : "需要帮助?",
"See the documentation" : "查看文档",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "对于正确的操作, 该应用需要使用 JavaScript. 请 {linkstart}启用 JavaScript{linkend}, 并重新加载页面.",
- "Log out" : "注销",
"Search" : "搜索",
+ "Log out" : "注销",
"This action requires you to confirm your password:" : "此操作需要确认您的密码:",
"Confirm your password" : "确认您的密码",
"Server side authentication failed!" : "服务端认证失败!",
@@ -340,7 +341,6 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的文件已经加密. 如果您没有启用恢复密钥, 当您的密码重置后没有任何方式能恢复您的数据. <br />如果您不确定, 请在继续前联系您的管理员.<br/>您是否真的要继续?",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "此服务器没有可用的互联网连接. 这意味着某些功能比如挂载外部存储, 更新通知以及安装第三方应用将无法工作. 远程访问文件和发送通知邮件可能也不工作. 如果您想使用所有的功能, 我们建议启用互联网连接.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "反向代理配置错误, 或者您正在通过可信的代理访问 ownCloud. 如果您不是通过可信代理访问 ownCloud, 这将是一个安全问题, 并允许攻击者通过伪装 IP 地址访问 ownCloud. 更多信息请查看我们的<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">文档</a>.",
- "Allow editing" : "允许编辑",
"Hide file listing" : "隐藏列出的文件",
"Sending ..." : "正在发送...",
"Email sent" : "邮件已发送",
diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js
index 45fa22b72a8..a3fc8f21d5c 100644
--- a/core/l10n/zh_TW.js
+++ b/core/l10n/zh_TW.js
@@ -103,6 +103,7 @@ OC.L10N.register(
"Link" : "連結",
"Password protect" : "密碼保護",
"Allow upload and editing" : "允許上傳及編輯",
+ "Allow editing" : "允許編輯",
"Email link to person" : "將連結 email 給別人",
"Send" : "寄出",
"Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}",
@@ -201,8 +202,8 @@ OC.L10N.register(
"Need help?" : "需要幫助?",
"See the documentation" : "閱讀說明文件",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "這個應用程式需要啟用 Javascript 才能正常運作,請{linkstart}啟用Javascript{linkend}然後重新整理頁面。",
- "Log out" : "登出",
"Search" : "搜尋",
+ "Log out" : "登出",
"Server side authentication failed!" : "伺服器端認證失敗!",
"Please contact your administrator." : "請聯絡系統管理員",
"An internal error occurred." : "發生內部錯誤",
@@ -297,7 +298,6 @@ OC.L10N.register(
"Nov." : "十一月",
"Dec." : "十二月",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的檔案是加密的,如果您沒有啟用救援金鑰,當您重設密碼之後將無法存取您的資料。<br/>如果不確定該怎麼做,請聯絡您的系統管理員。<br/>您確定要繼續嗎?",
- "Allow editing" : "允許編輯",
"Hide file listing" : "隱藏檔案列表",
"Sending ..." : "正在傳送…",
"Email sent" : "Email 已寄出",
diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json
index e3a8544d9db..f14939e854e 100644
--- a/core/l10n/zh_TW.json
+++ b/core/l10n/zh_TW.json
@@ -101,6 +101,7 @@
"Link" : "連結",
"Password protect" : "密碼保護",
"Allow upload and editing" : "允許上傳及編輯",
+ "Allow editing" : "允許編輯",
"Email link to person" : "將連結 email 給別人",
"Send" : "寄出",
"Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}",
@@ -199,8 +200,8 @@
"Need help?" : "需要幫助?",
"See the documentation" : "閱讀說明文件",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "這個應用程式需要啟用 Javascript 才能正常運作,請{linkstart}啟用Javascript{linkend}然後重新整理頁面。",
- "Log out" : "登出",
"Search" : "搜尋",
+ "Log out" : "登出",
"Server side authentication failed!" : "伺服器端認證失敗!",
"Please contact your administrator." : "請聯絡系統管理員",
"An internal error occurred." : "發生內部錯誤",
@@ -295,7 +296,6 @@
"Nov." : "十一月",
"Dec." : "十二月",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的檔案是加密的,如果您沒有啟用救援金鑰,當您重設密碼之後將無法存取您的資料。<br/>如果不確定該怎麼做,請聯絡您的系統管理員。<br/>您確定要繼續嗎?",
- "Allow editing" : "允許編輯",
"Hide file listing" : "隱藏檔案列表",
"Sending ..." : "正在傳送…",
"Email sent" : "Email 已寄出",
diff --git a/core/routes.php b/core/routes.php
index 6f1892d19ac..5d61d58e037 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -59,7 +59,6 @@ $application->registerRoutes($this, [
],
'ocs' => [
['root' => '/cloud', 'name' => 'OCS#getCapabilities', 'url' => '/capabilities', 'verb' => 'GET'],
- ['root' => '/cloud', 'name' => 'OCS#getCurrentUser', 'url' => '/user', 'verb' => 'GET'],
['root' => '', 'name' => 'OCS#getConfig', 'url' => '/config', 'verb' => 'GET'],
['root' => '/person', 'name' => 'OCS#personCheck', 'url' => '/check', 'verb' => 'POST'],
['root' => '/identityproof', 'name' => 'OCS#getIdentityProof', 'url' => '/key/{cloudId}', 'verb' => 'GET'],
diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php
index c53e016c1c2..6cf4a0b8f2d 100644
--- a/core/templates/layout.user.php
+++ b/core/templates/layout.user.php
@@ -42,67 +42,70 @@
<div id="notification"></div>
</div>
<header role="banner"><div id="header">
- <a href="<?php print_unescaped(link_to('', 'index.php')); ?>"
- id="nextcloud" tabindex="1">
- <div class="logo-icon">
- <h1 class="hidden-visually">
- <?php p($theme->getName()); ?>
- </h1>
- </div>
- </a>
+ <div id="header-left">
+ <a href="<?php print_unescaped(link_to('', 'index.php')); ?>"
+ id="nextcloud" tabindex="1">
+ <div class="logo-icon">
+ <h1 class="hidden-visually">
+ <?php p($theme->getName()); ?>
+ </h1>
+ </div>
+ </a>
- <a href="#" class="header-appname-container menutoggle" tabindex="2">
- <h1 class="header-appname">
- <?php p(!empty($_['application'])?$_['application']: $l->t('Apps')); ?>
- </h1>
- <div class="icon-caret"></div>
- </a>
+ <a href="#" class="header-appname-container menutoggle" tabindex="2">
+ <h1 class="header-appname">
+ <?php p(!empty($_['application'])?$_['application']: $l->t('Apps')); ?>
+ </h1>
+ <div class="icon-caret"></div>
+ </a>
+ </div>
<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
- <div id="settings">
- <div id="expand" tabindex="6" role="link" class="menutoggle">
- <?php if ($_['enableAvatars']): ?>
- <div class="avatardiv<?php if ($_['userAvatarSet']) { print_unescaped(' avatardiv-shown'); } else { print_unescaped('" style="display: none'); } ?>">
- <?php if ($_['userAvatarSet']): ?>
- <img alt="" width="32" height="32"
- src="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 32, 'v' => $_['userAvatarVersion']]));?>"
- srcset="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 64, 'v' => $_['userAvatarVersion']]));?> 2x, <?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 128, 'v' => $_['userAvatarVersion']]));?> 4x"
- >
+ <div id="header-right">
+ <form class="searchbox" action="#" method="post" role="search" novalidate>
+ <label for="searchbox" class="hidden-visually">
+ <?php p($l->t('Search'));?>
+ </label>
+ <input id="searchbox" type="search" name="query"
+ value="" required
+ autocomplete="off" tabindex="5">
+ </form>
+ <div id="settings">
+ <div id="expand" tabindex="6" role="link" class="menutoggle">
+ <?php if ($_['enableAvatars']): ?>
+ <div class="avatardiv<?php if ($_['userAvatarSet']) { print_unescaped(' avatardiv-shown'); } else { print_unescaped('" style="display: none'); } ?>">
+ <?php if ($_['userAvatarSet']): ?>
+ <img alt="" width="32" height="32"
+ src="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 32, 'v' => $_['userAvatarVersion']]));?>"
+ srcset="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 64, 'v' => $_['userAvatarVersion']]));?> 2x, <?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 128, 'v' => $_['userAvatarVersion']]));?> 4x"
+ >
+ <?php endif; ?>
+ </div>
<?php endif; ?>
+ <span id="expandDisplayName"><?php p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span>
+ <div class="icon-caret"></div>
+ </div>
+ <div id="expanddiv">
+ <ul>
+ <?php foreach($_['settingsnavigation'] as $entry):?>
+ <li>
+ <a href="<?php print_unescaped($entry['href']); ?>"
+ <?php if( $entry["active"] ): ?> class="active"<?php endif; ?>>
+ <img alt="" src="<?php print_unescaped($entry['icon'] . '?v=' . $_['versionHash']); ?>">
+ <?php p($entry['name']) ?>
+ </a>
+ </li>
+ <?php endforeach; ?>
+ <li>
+ <a id="logout" <?php print_unescaped(OC_User::getLogoutAttribute()); ?>>
+ <img alt="" src="<?php print_unescaped(image_path('', 'actions/logout.svg') . '?v=' . $_['versionHash']); ?>">
+ <?php p($l->t('Log out'));?>
+ </a>
+ </li>
+ </ul>
</div>
- <?php endif; ?>
- <span id="expandDisplayName"><?php p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span>
- <div class="icon-caret"></div>
- </div>
- <div id="expanddiv">
- <ul>
- <?php foreach($_['settingsnavigation'] as $entry):?>
- <li>
- <a href="<?php print_unescaped($entry['href']); ?>"
- <?php if( $entry["active"] ): ?> class="active"<?php endif; ?>>
- <img alt="" src="<?php print_unescaped($entry['icon'] . '?v=' . $_['versionHash']); ?>">
- <?php p($entry['name']) ?>
- </a>
- </li>
- <?php endforeach; ?>
- <li>
- <a id="logout" <?php print_unescaped(OC_User::getLogoutAttribute()); ?>>
- <img alt="" src="<?php print_unescaped(image_path('', 'actions/logout.svg') . '?v=' . $_['versionHash']); ?>">
- <?php p($l->t('Log out'));?>
- </a>
- </li>
- </ul>
</div>
</div>
-
- <form class="searchbox" action="#" method="post" role="search" novalidate>
- <label for="searchbox" class="hidden-visually">
- <?php p($l->t('Search'));?>
- </label>
- <input id="searchbox" type="search" name="query"
- value="" required
- autocomplete="off" tabindex="5">
- </form>
</div></header>
<nav role="navigation"><div id="navigation">
diff --git a/core/vendor/.gitignore b/core/vendor/.gitignore
index fe078fdd291..19bd084f76e 100644
--- a/core/vendor/.gitignore
+++ b/core/vendor/.gitignore
@@ -1,12 +1,14 @@
test/
src/
bower.json
+component.json
.jshintrc
.travis.yml
CHANGELOG*
Gemfile
gruntfile.js
Gruntfile.js
+Gulpfile.js
Makefile
package.json
README*
@@ -156,3 +158,17 @@ autosize/**
!autosize/dist/autosize.js
!autosize/.bower.json
!autosize/LICENCE.md
+
+#marked
+marked/bin
+marked/doc
+marked/index.js
+marked/lib
+marked/man
+
+# DOMPurity
+DOMPurify/**
+!DOMPurify/dist
+!DOMPurify/dist/purify.min.js
+!DOMPurify/.bower.json
+!DOMPurify/LICENSE \ No newline at end of file
diff --git a/core/vendor/DOMPurify/.bower.json b/core/vendor/DOMPurify/.bower.json
new file mode 100644
index 00000000000..45f4fa47258
--- /dev/null
+++ b/core/vendor/DOMPurify/.bower.json
@@ -0,0 +1,42 @@
+{
+ "name": "DOMPurify",
+ "version": "0.8.4",
+ "homepage": "https://github.com/cure53/DOMPurify",
+ "author": "Cure53 <info@cure53.de>",
+ "description": "A DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG",
+ "main": "src/purify.js",
+ "keywords": [
+ "dom",
+ "xss",
+ "cross site scripting",
+ "html",
+ "svg",
+ "mathml",
+ "sanitizer",
+ "filter",
+ "sanitize",
+ "security",
+ "secure"
+ ],
+ "license": [
+ "MPL-2.0",
+ "Apache-2.0"
+ ],
+ "ignore": [
+ "**/.*",
+ "demos",
+ "scripts",
+ "test",
+ "website"
+ ],
+ "_release": "0.8.4",
+ "_resolution": {
+ "type": "version",
+ "tag": "0.8.4",
+ "commit": "9be8f9def3124ccf2db71b7711027b55f9b90f48"
+ },
+ "_source": "https://github.com/cure53/DOMPurify.git",
+ "_target": "^0.8.4",
+ "_originalSource": "DOMPurify",
+ "_direct": true
+} \ No newline at end of file
diff --git a/core/vendor/DOMPurify/LICENSE b/core/vendor/DOMPurify/LICENSE
new file mode 100644
index 00000000000..e099aad0f09
--- /dev/null
+++ b/core/vendor/DOMPurify/LICENSE
@@ -0,0 +1,378 @@
+DOMPurify
+Copyright 2015 Mario Heiderich
+
+DOMPurify is free software; you can redistribute it and/or modify it under the
+terms of either:
+
+a) the Apache License Version 2.0, or
+b) the Mozilla Public License Version 2.0
+
+-----------------------------------------------------------------------------
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-----------------------------------------------------------------------------
+Mozilla Public License, version 2.0
+
+1. Definitions
+
+1.1. “Contributor”
+
+ means each individual or legal entity that creates, contributes to the
+ creation of, or owns Covered Software.
+
+1.2. “Contributor Version”
+
+ means the combination of the Contributions of others (if any) used by a
+ Contributor and that particular Contributor’s Contribution.
+
+1.3. “Contribution”
+
+ means Covered Software of a particular Contributor.
+
+1.4. “Covered Software”
+
+ means Source Code Form to which the initial Contributor has attached the
+ notice in Exhibit A, the Executable Form of such Source Code Form, and
+ Modifications of such Source Code Form, in each case including portions
+ thereof.
+
+1.5. “Incompatible With Secondary Licenses”
+ means
+
+ a. that the initial Contributor has attached the notice described in
+ Exhibit B to the Covered Software; or
+
+ b. that the Covered Software was made available under the terms of version
+ 1.1 or earlier of the License, but not also under the terms of a
+ Secondary License.
+
+1.6. “Executable Form”
+
+ means any form of the work other than Source Code Form.
+
+1.7. “Larger Work”
+
+ means a work that combines Covered Software with other material, in a separate
+ file or files, that is not Covered Software.
+
+1.8. “License”
+
+ means this document.
+
+1.9. “Licensable”
+
+ means having the right to grant, to the maximum extent possible, whether at the
+ time of the initial grant or subsequently, any and all of the rights conveyed by
+ this License.
+
+1.10. “Modifications”
+
+ means any of the following:
+
+ a. any file in Source Code Form that results from an addition to, deletion
+ from, or modification of the contents of Covered Software; or
+
+ b. any new file in Source Code Form that contains any Covered Software.
+
+1.11. “Patent Claims” of a Contributor
+
+ means any patent claim(s), including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by such Contributor that
+ would be infringed, but for the grant of the License, by the making,
+ using, selling, offering for sale, having made, import, or transfer of
+ either its Contributions or its Contributor Version.
+
+1.12. “Secondary License”
+
+ means either the GNU General Public License, Version 2.0, the GNU Lesser
+ General Public License, Version 2.1, the GNU Affero General Public
+ License, Version 3.0, or any later versions of those licenses.
+
+1.13. “Source Code Form”
+
+ means the form of the work preferred for making modifications.
+
+1.14. “You” (or “Your”)
+
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, “You” includes any entity that controls, is
+ controlled by, or is under common control with You. For purposes of this
+ definition, “control” means (a) the power, direct or indirect, to cause
+ the direction or management of such entity, whether by contract or
+ otherwise, or (b) ownership of more than fifty percent (50%) of the
+ outstanding shares or beneficial ownership of such entity.
+
+
+2. License Grants and Conditions
+
+2.1. Grants
+
+ Each Contributor hereby grants You a world-wide, royalty-free,
+ non-exclusive license:
+
+ a. under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or as
+ part of a Larger Work; and
+
+ b. under Patent Claims of such Contributor to make, use, sell, offer for
+ sale, have made, import, and otherwise transfer either its Contributions
+ or its Contributor Version.
+
+2.2. Effective Date
+
+ The licenses granted in Section 2.1 with respect to any Contribution become
+ effective for each Contribution on the date the Contributor first distributes
+ such Contribution.
+
+2.3. Limitations on Grant Scope
+
+ The licenses granted in this Section 2 are the only rights granted under this
+ License. No additional rights or licenses will be implied from the distribution
+ or licensing of Covered Software under this License. Notwithstanding Section
+ 2.1(b) above, no patent license is granted by a Contributor:
+
+ a. for any code that a Contributor has removed from Covered Software; or
+
+ b. for infringements caused by: (i) Your and any other third party’s
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+ c. under Patent Claims infringed by Covered Software in the absence of its
+ Contributions.
+
+ This License does not grant any rights in the trademarks, service marks, or
+ logos of any Contributor (except as may be necessary to comply with the
+ notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+ No Contributor makes additional grants as a result of Your choice to
+ distribute the Covered Software under a subsequent version of this License
+ (see Section 10.2) or under the terms of a Secondary License (if permitted
+ under the terms of Section 3.3).
+
+2.5. Representation
+
+ Each Contributor represents that the Contributor believes its Contributions
+ are its original creation(s) or it has sufficient rights to grant the
+ rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+ This License is not intended to limit any rights You have under applicable
+ copyright doctrines of fair use, fair dealing, or other equivalents.
+
+2.7. Conditions
+
+ Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
+ Section 2.1.
+
+
+3. Responsibilities
+
+3.1. Distribution of Source Form
+
+ All distribution of Covered Software in Source Code Form, including any
+ Modifications that You create or to which You contribute, must be under the
+ terms of this License. You must inform recipients that the Source Code Form
+ of the Covered Software is governed by the terms of this License, and how
+ they can obtain a copy of this License. You may not attempt to alter or
+ restrict the recipients’ rights in the Source Code Form.
+
+3.2. Distribution of Executable Form
+
+ If You distribute Covered Software in Executable Form then:
+
+ a. such Covered Software must also be made available in Source Code Form,
+ as described in Section 3.1, and You must inform recipients of the
+ Executable Form how they can obtain a copy of such Source Code Form by
+ reasonable means in a timely manner, at a charge no more than the cost
+ of distribution to the recipient; and
+
+ b. You may distribute such Executable Form under the terms of this License,
+ or sublicense it under different terms, provided that the license for
+ the Executable Form does not attempt to limit or alter the recipients’
+ rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+ You may create and distribute a Larger Work under terms of Your choice,
+ provided that You also comply with the requirements of this License for the
+ Covered Software. If the Larger Work is a combination of Covered Software
+ with a work governed by one or more Secondary Licenses, and the Covered
+ Software is not Incompatible With Secondary Licenses, this License permits
+ You to additionally distribute such Covered Software under the terms of
+ such Secondary License(s), so that the recipient of the Larger Work may, at
+ their option, further distribute the Covered Software under the terms of
+ either this License or such Secondary License(s).
+
+3.4. Notices
+
+ You may not remove or alter the substance of any license notices (including
+ copyright notices, patent notices, disclaimers of warranty, or limitations
+ of liability) contained within the Source Code Form of the Covered
+ Software, except that You may alter any license notices to the extent
+ required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+ You may choose to offer, and to charge a fee for, warranty, support,
+ indemnity or liability obligations to one or more recipients of Covered
+ Software. However, You may do so only on Your own behalf, and not on behalf
+ of any Contributor. You must make it absolutely clear that any such
+ warranty, support, indemnity, or liability obligation is offered by You
+ alone, and You hereby agree to indemnify every Contributor for any
+ liability incurred by such Contributor as a result of warranty, support,
+ indemnity or liability terms You offer. You may include additional
+ disclaimers of warranty and limitations of liability specific to any
+ jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+
+ If it is impossible for You to comply with any of the terms of this License
+ with respect to some or all of the Covered Software due to statute, judicial
+ order, or regulation then You must: (a) comply with the terms of this License
+ to the maximum extent possible; and (b) describe the limitations and the code
+ they affect. Such description must be placed in a text file included with all
+ distributions of the Covered Software under this License. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Termination
+
+5.1. The rights granted under this License will terminate automatically if You
+ fail to comply with any of its terms. However, if You become compliant,
+ then the rights granted under this License from a particular Contributor
+ are reinstated (a) provisionally, unless and until such Contributor
+ explicitly and finally terminates Your grants, and (b) on an ongoing basis,
+ if such Contributor fails to notify You of the non-compliance by some
+ reasonable means prior to 60 days after You have come back into compliance.
+ Moreover, Your grants from a particular Contributor are reinstated on an
+ ongoing basis if such Contributor notifies You of the non-compliance by
+ some reasonable means, this is the first time You have received notice of
+ non-compliance with this License from such Contributor, and You become
+ compliant prior to 30 days after Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+ infringement claim (excluding declaratory judgment actions, counter-claims,
+ and cross-claims) alleging that a Contributor Version directly or
+ indirectly infringes any patent, then the rights granted to You by any and
+ all Contributors for the Covered Software under Section 2.1 of this License
+ shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
+ license agreements (excluding distributors and resellers) which have been
+ validly granted by You or Your distributors under this License prior to
+ termination shall survive termination.
+
+6. Disclaimer of Warranty
+
+ Covered Software is provided under this License on an “as is” basis, without
+ warranty of any kind, either expressed, implied, or statutory, including,
+ without limitation, warranties that the Covered Software is free of defects,
+ merchantable, fit for a particular purpose or non-infringing. The entire
+ risk as to the quality and performance of the Covered Software is with You.
+ Should any Covered Software prove defective in any respect, You (not any
+ Contributor) assume the cost of any necessary servicing, repair, or
+ correction. This disclaimer of warranty constitutes an essential part of this
+ License. No use of any Covered Software is authorized under this License
+ except under this disclaimer.
+
+7. Limitation of Liability
+
+ Under no circumstances and under no legal theory, whether tort (including
+ negligence), contract, or otherwise, shall any Contributor, or anyone who
+ distributes Covered Software as permitted above, be liable to You for any
+ direct, indirect, special, incidental, or consequential damages of any
+ character including, without limitation, damages for lost profits, loss of
+ goodwill, work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses, even if such party shall have been
+ informed of the possibility of such damages. This limitation of liability
+ shall not apply to liability for death or personal injury resulting from such
+ party’s negligence to the extent applicable law prohibits such limitation.
+ Some jurisdictions do not allow the exclusion or limitation of incidental or
+ consequential damages, so this exclusion and limitation may not apply to You.
+
+8. Litigation
+
+ Any litigation relating to this License may be brought only in the courts of
+ a jurisdiction where the defendant maintains its principal place of business
+ and such litigation shall be governed by laws of that jurisdiction, without
+ reference to its conflict-of-law provisions. Nothing in this Section shall
+ prevent a party’s ability to bring cross-claims or counter-claims.
+
+9. Miscellaneous
+
+ This License represents the complete agreement concerning the subject matter
+ hereof. If any provision of this License is held to be unenforceable, such
+ provision shall be reformed only to the extent necessary to make it
+ enforceable. Any law or regulation which provides that the language of a
+ contract shall be construed against the drafter shall not be used to construe
+ this License against a Contributor.
+
+
+10. Versions of the License
+
+10.1. New Versions
+
+ Mozilla Foundation is the license steward. Except as provided in Section
+ 10.3, no one other than the license steward has the right to modify or
+ publish new versions of this License. Each version will be given a
+ distinguishing version number.
+
+10.2. Effect of New Versions
+
+ You may distribute the Covered Software under the terms of the version of
+ the License under which You originally received the Covered Software, or
+ under the terms of any subsequent version published by the license
+ steward.
+
+10.3. Modified Versions
+
+ If you create software not governed by this License, and you want to
+ create a new license for such software, you may create and use a modified
+ version of this License if you rename the license and remove any
+ references to the name of the license steward (except to note that such
+ modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
+ If You choose to distribute Source Code Form that is Incompatible With
+ Secondary Licenses under the terms of this version of the License, the
+ notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+
+ This Source Code Form is subject to the
+ terms of the Mozilla Public License, v.
+ 2.0. If a copy of the MPL was not
+ distributed with this file, You can
+ obtain one at
+ http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular file, then
+You may include the notice in a location (such as a LICENSE file in a relevant
+directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - “Incompatible With Secondary Licenses” Notice
+
+ This Source Code Form is “Incompatible
+ With Secondary Licenses”, as defined by
+ the Mozilla Public License, v. 2.0.
+
diff --git a/core/vendor/DOMPurify/dist/purify.min.js b/core/vendor/DOMPurify/dist/purify.min.js
new file mode 100644
index 00000000000..d95d80fc231
--- /dev/null
+++ b/core/vendor/DOMPurify/dist/purify.min.js
@@ -0,0 +1,2 @@
+(function(e){"use strict";var t=typeof window==="undefined"?null:window;if(typeof define==="function"&&define.amd){define(function(){return e(t)})}else if(typeof module!=="undefined"){module.exports=e(t)}else{t.DOMPurify=e(t)}})(function e(t){"use strict";var r=function(t){return e(t)};r.version="0.8.4";r.removed=[];if(!t||!t.document||t.document.nodeType!==9){r.isSupported=false;return r}var n=t.document;var a=n;var i=t.DocumentFragment;var o=t.HTMLTemplateElement;var l=t.NodeFilter;var s=t.NamedNodeMap||t.MozNamedAttrMap;var f=t.Text;var c=t.Comment;var u=t.DOMParser;if(typeof o==="function"){var d=n.createElement("template");if(d.content&&d.content.ownerDocument){n=d.content.ownerDocument}}var m=n.implementation;var p=n.createNodeIterator;var v=n.getElementsByTagName;var h=n.createDocumentFragment;var g=a.importNode;var y={};r.isSupported=typeof m.createHTMLDocument!=="undefined"&&n.documentMode!==9;var b=function(e,t){var r=t.length;while(r--){if(typeof t[r]==="string"){t[r]=t[r].toLowerCase()}e[t[r]]=true}return e};var T=function(e){var t={};var r;for(r in e){if(e.hasOwnProperty(r)){t[r]=e[r]}}return t};var x=null;var k=b({},["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr","svg","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","switch","symbol","text","textpath","title","tref","tspan","view","vkern","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmuliscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mpspace","msqrt","mystyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","#text"]);var A=null;var w=b({},["accept","action","align","alt","autocomplete","background","bgcolor","border","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","coords","datetime","default","dir","disabled","download","enctype","face","for","headers","height","hidden","high","href","hreflang","id","ismap","label","lang","list","loop","low","max","maxlength","media","method","min","multiple","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","rows","rowspan","spellcheck","scope","selected","shape","size","span","srclang","start","src","step","style","summary","tabindex","title","type","usemap","valign","value","width","xmlns","accent-height","accumulate","additivive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mode","min","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","surfacescale","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","u1","u2","unicode","values","viewbox","visibility","vert-adv-y","vert-origin-x","vert-origin-y","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","y","y1","y2","z","zoomandpan","accent","accentunder","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","display","displaystyle","fence","frame","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]);var E=null;var S=null;var M=true;var O=false;var N=false;var L=false;var D=/\{\{[\s\S]*|[\s\S]*\}\}/gm;var _=/<%[\s\S]*|[\s\S]*%>/gm;var C=false;var z=false;var R=false;var F=false;var H=true;var B=true;var W=b({},["audio","head","math","script","style","svg","video"]);var j=b({},["audio","video","img","source"]);var G=b({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]);var I=null;var q=n.createElement("form");var P=function(e){if(typeof e!=="object"){e={}}x="ALLOWED_TAGS"in e?b({},e.ALLOWED_TAGS):k;A="ALLOWED_ATTR"in e?b({},e.ALLOWED_ATTR):w;E="FORBID_TAGS"in e?b({},e.FORBID_TAGS):{};S="FORBID_ATTR"in e?b({},e.FORBID_ATTR):{};M=e.ALLOW_DATA_ATTR!==false;O=e.ALLOW_UNKNOWN_PROTOCOLS||false;N=e.SAFE_FOR_JQUERY||false;L=e.SAFE_FOR_TEMPLATES||false;C=e.WHOLE_DOCUMENT||false;z=e.RETURN_DOM||false;R=e.RETURN_DOM_FRAGMENT||false;F=e.RETURN_DOM_IMPORT||false;H=e.SANITIZE_DOM!==false;B=e.KEEP_CONTENT!==false;if(L){M=false}if(R){z=true}if(e.ADD_TAGS){if(x===k){x=T(x)}b(x,e.ADD_TAGS)}if(e.ADD_ATTR){if(A===w){A=T(A)}b(A,e.ADD_ATTR)}if(B){x["#text"]=true}if(Object&&"freeze"in Object){Object.freeze(e)}I=e};var U=function(e){r.removed.push({element:e});try{e.parentNode.removeChild(e)}catch(t){e.outerHTML=""}};var V=function(e,t){r.removed.push({attribute:t.getAttributeNode(e),from:t});t.removeAttribute(e)};var K=function(e){var t,r;try{t=(new u).parseFromString(e,"text/html")}catch(n){}if(!t||!t.documentElement){t=m.createHTMLDocument("");r=t.body;r.parentNode.removeChild(r.parentNode.firstElementChild);r.outerHTML=e}if(typeof t.getElementsByTagName==="function"){return t.getElementsByTagName(C?"html":"body")[0]}return v.call(t,C?"html":"body")[0]};var J=function(e){return p.call(e.ownerDocument||e,e,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT,function(){return l.FILTER_ACCEPT},false)};var Q=function(e){if(e instanceof f||e instanceof c){return false}if(typeof e.nodeName!=="string"||typeof e.textContent!=="string"||typeof e.removeChild!=="function"||!(e.attributes instanceof s)||typeof e.removeAttribute!=="function"||typeof e.setAttribute!=="function"){return true}return false};var X=function(e){var t,n;ne("beforeSanitizeElements",e,null);if(Q(e)){U(e);return true}t=e.nodeName.toLowerCase();ne("uponSanitizeElement",e,{tagName:t,allowedTags:x});if(!x[t]||E[t]){if(B&&!W[t]&&typeof e.insertAdjacentHTML==="function"){try{e.insertAdjacentHTML("AfterEnd",e.innerHTML)}catch(a){}}U(e);return true}if(N&&!e.firstElementChild&&(!e.content||!e.content.firstElementChild)&&/</g.test(e.textContent)){r.removed.push({element:e.cloneNode()});e.innerHTML=e.textContent.replace(/</g,"&lt;")}if(L&&e.nodeType===3){n=e.textContent;n=n.replace(D," ");n=n.replace(_," ");if(e.textContent!==n){r.removed.push({element:e.cloneNode()});e.textContent=n}}ne("afterSanitizeElements",e,null);return false};var Y=/^data-[\-\w.\u00B7-\uFFFF]/;var Z=/^(?:(?:(?:f|ht)tps?|mailto|tel):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i;var $=/^(?:\w+script|data):/i;var ee=/[\x00-\x20\xA0\u1680\u180E\u2000-\u2029\u205f\u3000]/g;var te=function(e){var a,i,o,l,s,f,c,u;ne("beforeSanitizeAttributes",e,null);f=e.attributes;if(!f){return}c={attrName:"",attrValue:"",keepAttr:true,allowedAttributes:A};u=f.length;while(u--){a=f[u];i=a.name;o=a.value;l=i.toLowerCase();c.attrName=l;c.attrValue=o;c.keepAttr=true;ne("uponSanitizeAttribute",e,c);o=c.attrValue;if(l==="name"&&e.nodeName==="IMG"&&f.id){s=f.id;f=Array.prototype.slice.apply(f);V("id",e);V(i,e);if(f.indexOf(s)>u){e.setAttribute("id",s.value)}}else{if(i==="id"){e.setAttribute(i,"")}V(i,e)}if(!c.keepAttr){continue}if(H&&(l==="id"||l==="name")&&(o in t||o in n||o in q)){continue}if(L){o=o.replace(D," ");o=o.replace(_," ")}if(M&&Y.test(l)){}else if(!A[l]||S[l]){continue}else if(G[l]){}else if(Z.test(o.replace(ee,""))){}else if(l==="src"&&o.indexOf("data:")===0&&j[e.nodeName.toLowerCase()]){}else if(O&&!$.test(o.replace(ee,""))){}else if(!o){}else{continue}try{e.setAttribute(i,o);r.removed.pop()}catch(d){}}ne("afterSanitizeAttributes",e,null)};var re=function(e){var t;var r=J(e);ne("beforeSanitizeShadowDOM",e,null);while(t=r.nextNode()){ne("uponSanitizeShadowNode",t,null);if(X(t)){continue}if(t.content instanceof i){re(t.content)}te(t)}ne("afterSanitizeShadowDOM",e,null)};var ne=function(e,t,n){if(!y[e]){return}y[e].forEach(function(e){e.call(r,t,n,I)})};r.sanitize=function(e,n){var o,l,s,f,c;if(!e){e=""}if(typeof e!=="string"){if(typeof e.toString!=="function"){throw new TypeError("toString is not a function")}else{e=e.toString()}}if(!r.isSupported){if(typeof t.toStaticHTML==="object"||typeof t.toStaticHTML==="function"){return t.toStaticHTML(e)}return e}P(n);r.removed=[];if(!z&&!C&&e.indexOf("<")===-1){return e}o=K(e);if(!o){return z?null:""}f=J(o);while(l=f.nextNode()){if(l.nodeType===3&&l===s){continue}if(X(l)){continue}if(l.content instanceof i){re(l.content)}te(l);s=l}if(z){if(R){c=h.call(o.ownerDocument);while(o.firstChild){c.appendChild(o.firstChild)}}else{c=o}if(F){c=g.call(a,c,true)}return c}return C?o.outerHTML:o.innerHTML};r.addHook=function(e,t){if(typeof t!=="function"){return}y[e]=y[e]||[];y[e].push(t)};r.removeHook=function(e){if(y[e]){y[e].pop()}};r.removeHooks=function(e){if(y[e]){y[e]=[]}};r.removeAllHooks=function(){y={}};return r});
+//# sourceMappingURL=./dist/purify.min.js.map \ No newline at end of file
diff --git a/core/vendor/marked/.bower.json b/core/vendor/marked/.bower.json
new file mode 100644
index 00000000000..058b951d4b7
--- /dev/null
+++ b/core/vendor/marked/.bower.json
@@ -0,0 +1,33 @@
+{
+ "name": "marked",
+ "version": "0.3.6",
+ "homepage": "https://github.com/chjj/marked",
+ "authors": [
+ "Christopher Jeffrey <chjjeffrey@gmail.com>"
+ ],
+ "description": "A markdown parser built for speed",
+ "keywords": [
+ "markdown",
+ "markup",
+ "html"
+ ],
+ "main": "lib/marked.js",
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "app/bower_components",
+ "test",
+ "tests"
+ ],
+ "_release": "0.3.6",
+ "_resolution": {
+ "type": "version",
+ "tag": "v0.3.6",
+ "commit": "eddec20467c2d10c7769061ee9074e268500966f"
+ },
+ "_source": "https://github.com/chjj/marked.git",
+ "_target": "0.3.6",
+ "_originalSource": "marked"
+} \ No newline at end of file
diff --git a/core/vendor/marked/LICENSE b/core/vendor/marked/LICENSE
new file mode 100644
index 00000000000..a7b812ed618
--- /dev/null
+++ b/core/vendor/marked/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2011-2014, Christopher Jeffrey (https://github.com/chjj/)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/core/vendor/marked/marked.min.js b/core/vendor/marked/marked.min.js
new file mode 100644
index 00000000000..555c1dc1d9d
--- /dev/null
+++ b/core/vendor/marked/marked.min.js
@@ -0,0 +1,6 @@
+/**
+ * marked - a markdown parser
+ * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
+ * https://github.com/chjj/marked
+ */
+(function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",/<!--[\s\S]*?-->/)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]||""});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].split(/ *\| */)}this.tokens.push(item);continue}if(cap=this.rules.lheading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[2]==="="?1:2,text:cap[1]});continue}if(cap=this.rules.hr.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"hr"});continue}if(cap=this.rules.blockquote.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"blockquote_start"});cap=cap[0].replace(/^ *> ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i<l;i++){item=cap[i];space=item.length;item=item.replace(/^ *([*+-]|\d+\.) +/,"");if(~item.indexOf("\n ")){space-=item.length;item=!this.options.pedantic?item.replace(new RegExp("^ {1,"+space+"}","gm"),""):item.replace(/^ {1,4}/gm,"")}if(this.options.smartLists&&i!==l-1){b=block.bullet.exec(cap[i+1])[0];if(bull!==b&&!(bull.length>1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&(cap[1]==="pre"||cap[1]==="script"||cap[1]==="style"),text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].replace(/^ *\| *| *\| *$/g,"").split(/ *\| */)}this.tokens.push(item);continue}if(top&&(cap=this.rules.paragraph.exec(src))){src=src.substring(cap[0].length);this.tokens.push({type:"paragraph",text:cap[1].charAt(cap[1].length-1)==="\n"?cap[1].slice(0,-1):cap[1]});continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"text",text:cap[0]});continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return this.tokens};var inline={escape:/^\\([\\`*{}\[\]()#+\-.!_>])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/};inline._inside=/(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/;inline._href=/\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^<a /i.test(cap[0])){this.inLink=true}else if(this.inLink&&/^<\/a>/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(cap[0]):escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.text(escape(this.smartypants(cap[0])));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")};InlineLexer.prototype.mangle=function(text){if(!this.options.mangle)return text;var out="",l=text.length,i=0,ch;for(;i<l;i++){ch=text.charCodeAt(i);if(Math.random()>.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"<pre><code>"+(escaped?code:escape(code,true))+"\n</code></pre>"}return'<pre><code class="'+this.options.langPrefix+escape(lang,true)+'">'+(escaped?code:escape(code,true))+"\n</code></pre>\n"};Renderer.prototype.blockquote=function(quote){return"<blockquote>\n"+quote+"</blockquote>\n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"<h"+level+' id="'+this.options.headerPrefix+raw.toLowerCase().replace(/[^\w]+/g,"-")+'">'+text+"</h"+level+">\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"</"+type+">\n"};Renderer.prototype.listitem=function(text){return"<li>"+text+"</li>\n"};Renderer.prototype.paragraph=function(text){return"<p>"+text+"</p>\n"};Renderer.prototype.table=function(header,body){return"<table>\n"+"<thead>\n"+header+"</thead>\n"+"<tbody>\n"+body+"</tbody>\n"+"</table>\n"};Renderer.prototype.tablerow=function(content){return"<tr>\n"+content+"</tr>\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"</"+type+">\n"};Renderer.prototype.strong=function(text){return"<strong>"+text+"</strong>"};Renderer.prototype.em=function(text){return"<em>"+text+"</em>"};Renderer.prototype.codespan=function(text){return"<code>"+text+"</code>"};Renderer.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"};Renderer.prototype.del=function(text){return"<del>"+text+"</del>"};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0||prot.indexOf("vbscript:")===0){return""}}var out='<a href="'+href+'"';if(title){out+=' title="'+title+'"'}out+=">"+text+"</a>";return out};Renderer.prototype.image=function(href,title,text){var out='<img src="'+href+'" alt="'+text+'"';if(title){out+=' title="'+title+'"'}out+=this.options.xhtml?"/>":">";return out};Renderer.prototype.text=function(text){return text};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i<this.token.header.length;i++){flags={header:true,align:this.token.align[i]};cell+=this.renderer.tablecell(this.inline.output(this.token.header[i]),{header:true,align:this.token.align[i]})}header+=this.renderer.tablerow(cell);for(i=0;i<this.token.cells.length;i++){row=this.token.cells[i];cell="";for(j=0;j<row.length;j++){cell+=this.renderer.tablecell(this.inline.output(row[j]),{header:false,align:this.token.align[j]})}body+=this.renderer.tablerow(cell)}return this.renderer.table(header,body)}case"blockquote_start":{var body="";while(this.next().type!=="blockquote_end"){body+=this.tok()}return this.renderer.blockquote(body)}case"list_start":{var body="",ordered=this.token.ordered;while(this.next().type!=="list_end"){body+=this.tok()}return this.renderer.list(body,ordered)}case"list_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.token.type==="text"?this.parseText():this.tok()}return this.renderer.listitem(body)}case"loose_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.tok()}return this.renderer.listitem(body)}case"html":{var html=!this.token.pre&&!this.options.pedantic?this.inline.output(this.token.text):this.token.text;return this.renderer.html(html)}case"paragraph":{return this.renderer.paragraph(this.inline.output(this.token.text))}case"text":{return this.renderer.paragraph(this.parseText())}}};function escape(html,encode){return html.replace(!encode?/&(?!#?\w+;)/g:/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;i<arguments.length;i++){target=arguments[i];for(key in target){if(Object.prototype.hasOwnProperty.call(target,key)){obj[key]=target[key]}}}return obj}function marked(src,opt,callback){if(callback||typeof opt==="function"){if(!callback){callback=opt;opt=null}opt=merge({},marked.defaults,opt||{});var highlight=opt.highlight,tokens,pending,i=0;try{tokens=Lexer.lex(src,opt)}catch(e){return callback(e)}pending=tokens.length;var done=function(err){if(err){opt.highlight=highlight;return callback(err)}var out;try{out=Parser.parse(tokens,opt)}catch(e){err=e}opt.highlight=highlight;return err?callback(err):callback(null,out)};if(!highlight||highlight.length<3){return done()}delete opt.highlight;if(!pending)return done();for(;i<tokens.length;i++){(function(token){if(token.type!=="code"){return--pending||done()}return highlight(token.text,token.lang,function(err,code){if(err)return done(err);if(code==null||code===token.text){return--pending||done()}token.text=code;token.escaped=true;--pending||done()})})(tokens[i])}return}try{if(opt)opt=merge({},marked.defaults,opt);return Parser.parse(Lexer.lex(src,opt),opt)}catch(e){e.message+="\nPlease report this to https://github.com/chjj/marked.";if((opt||marked.defaults).silent){return"<p>An error occured:</p><pre>"+escape(e.message+"",true)+"</pre>"}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,sanitizer:null,mangle:true,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}()); \ No newline at end of file
diff --git a/lib/base.php b/lib/base.php
index 23eda212f03..3ba0755eaab 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -281,7 +281,7 @@ class OC {
// render error page
$template = new OC_Template('', 'update.user', 'guest');
OC_Util::addScript('maintenance-check');
- OC_Util::addStyle('update');
+ OC_Util::addStyle('guest');
$template->printPage();
die();
}
@@ -355,7 +355,7 @@ class OC {
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 120');
- \OCP\Util::addStyle('update');
+ OC_Util::addStyle('guest');
// render error page
$template = new OC_Template('', 'update.use-cli', 'guest');
@@ -376,9 +376,9 @@ class OC {
$oldTheme = $systemConfig->getValue('theme');
$systemConfig->setValue('theme', '');
- \OCP\Util::addScript('config'); // needed for web root
- \OCP\Util::addScript('update');
- \OCP\Util::addStyle('update');
+ OC_Util::addScript('config'); // needed for web root
+ OC_Util::addScript('update');
+ OC_Util::addStyle('guest');
/** @var \OC\App\AppManager $appManager */
$appManager = \OC::$server->getAppManager();
@@ -708,6 +708,7 @@ class OC {
exit(1);
} else {
OC_Response::setStatus(OC_Response::STATUS_SERVICE_UNAVAILABLE);
+ OC_Util::addStyle('guest');
OC_Template::printGuestPage('', 'error', array('errors' => $errors));
exit;
}
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index d0ca4646e52..84b5dc637bc 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -225,6 +225,7 @@ return array(
'OCP\\Security\\ISecureRandom' => $baseDir . '/lib/public/Security/ISecureRandom.php',
'OCP\\Security\\StringUtils' => $baseDir . '/lib/public/Security/StringUtils.php',
'OCP\\Session\\Exceptions\\SessionNotAvailableException' => $baseDir . '/lib/public/Session/Exceptions/SessionNotAvailableException.php',
+ 'OCP\\Settings\\IIconSection' => $baseDir . '/lib/public/Settings/IIconSection.php',
'OCP\\Settings\\IManager' => $baseDir . '/lib/public/Settings/IManager.php',
'OCP\\Settings\\ISection' => $baseDir . '/lib/public/Settings/ISection.php',
'OCP\\Settings\\ISettings' => $baseDir . '/lib/public/Settings/ISettings.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 6fe9a95c249..01edabe6889 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -255,6 +255,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Security\\ISecureRandom' => __DIR__ . '/../../..' . '/lib/public/Security/ISecureRandom.php',
'OCP\\Security\\StringUtils' => __DIR__ . '/../../..' . '/lib/public/Security/StringUtils.php',
'OCP\\Session\\Exceptions\\SessionNotAvailableException' => __DIR__ . '/../../..' . '/lib/public/Session/Exceptions/SessionNotAvailableException.php',
+ 'OCP\\Settings\\IIconSection' => __DIR__ . '/../../..' . '/lib/public/Settings/IIconSection.php',
'OCP\\Settings\\IManager' => __DIR__ . '/../../..' . '/lib/public/Settings/IManager.php',
'OCP\\Settings\\ISection' => __DIR__ . '/../../..' . '/lib/public/Settings/ISection.php',
'OCP\\Settings\\ISettings' => __DIR__ . '/../../..' . '/lib/public/Settings/ISettings.php',
diff --git a/lib/l10n/sk_SK.js b/lib/l10n/sk_SK.js
index 91bfe834f95..0e4854cdef0 100644
--- a/lib/l10n/sk_SK.js
+++ b/lib/l10n/sk_SK.js
@@ -36,6 +36,8 @@ OC.L10N.register(
"File name is too long" : "Meno súboru je veľmi dlhé.",
"Dot files are not allowed" : "Názov súboru začínajúci bodkou nie je povolený.",
"Empty filename is not allowed" : "Prázdny názov súboru nie je povolený",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
"Server settings" : "Nastavenia servera",
"Sharing" : "Sprístupnenie",
"Encryption" : "Šifrovanie",
@@ -64,6 +66,7 @@ OC.L10N.register(
"Sharing %s failed, because the backend does not allow shares from type %i" : "Sprístupnenie %s zlyhalo, backend nepodporuje typ sprístupnenia %i",
"Sharing %s failed, because the file does not exist" : "Nie je možné sprístupniť %s, súbor neexistuje",
"You are not allowed to share %s" : "Nemôžete sprístupniť %s",
+ "Sharing %s failed, because you can not share with yourself" : "Sprístupnenie %s zlyhalo, nieje možné sprístupniť obsah so sebou samým",
"Sharing %s failed, because the user %s does not exist" : "Sprístupnenie %s zlyhalo, používateľ %s neexistuje",
"Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Sprístupnenie %s zlyhalo, používateľ %s nie je členom žiadnej skupiny spoločnej s používateľom %s",
"Sharing %s failed, because this item is already shared with %s" : "Sprístupnenie %s zlyhalo, pretože táto položka už je prístupná pre %s",
@@ -72,6 +75,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Sprístupnenie %s zlyhalo, %s nie je členom skupiny %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Musíte zadať heslo ak chcete vytvoriť verejný odkaz, lebo iba odkazy chránené heslom sú povolené",
"Sharing %s failed, because sharing with links is not allowed" : "%s nie je možné sprístupniť, sprístupnenie prostredníctvom odkazu nie je povolené",
+ "Not allowed to create a federated share with the same user" : "Nie je možné vytvoriť združené sprístupnenie so sebou samým",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sprístupňovanie %s zlyhalo, nepodarilo sa nájsť %s, možno je server dočasne nedostupný.",
"Share type %s is not valid for %s" : "Typ sprístupnenia %s nie je možný pre %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Nastavenie povolení pre %s zlyhalo, pretože povolenia prekračujú povolenia udelené %s",
@@ -136,6 +140,7 @@ OC.L10N.register(
"Nov." : "Nov.",
"Dec." : "Dec.",
"Apps" : "Aplikácie",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "V mene používateľa je možné použiť iba nasledovné znaky: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"",
"A valid username must be provided" : "Musíte zadať platné používateľské meno",
"Username contains whitespace at the beginning or at the end" : "Meno používateľa obsahuje na začiatku, alebo na konci medzeru",
"A valid password must be provided" : "Musíte zadať platné heslo",
@@ -146,6 +151,8 @@ OC.L10N.register(
"Personal" : "Osobné",
"Users" : "Používatelia",
"Admin" : "Administrátor",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikáciu \"%s\" nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikácia \"%s\" nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná.",
"No app name specified" : "Nešpecifikované meno aplikácie",
"App '%s' could not be installed!" : "Aplikáciu '%s' nebolo možné nainštalovať!",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Aplikáciu \"%s\" nie je možné inštalovať, pretože nie sú splnené nasledovné závislosti: %s",
@@ -161,14 +168,18 @@ OC.L10N.register(
"Cannot write into \"apps\" directory" : "Nie je možné zapisovať do priečinka \"apps\"",
"This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Toto je zvyčajne možné opraviť tým, že %s udelíte webovému serveru oprávnenie na zápis do priečinka aplikácií %s alebo vypnete obchod s aplikáciami v konfiguračnom súbore.",
"Cannot create \"data\" directory (%s)" : "Nie je možné vytvoriť priečinok \"data\" (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "To je zvyčajne možné opraviť tým <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">že udelíte webovému serveru oprávnenie na zápis do koreňového priečinka</a>.",
"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnenia je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis do koreňového priečinka%s.",
"Setting locale to %s failed" : "Nastavenie locale na %s zlyhalo",
"Please install one of these locales on your system and restart your webserver." : "Prosím, nainštalujte si aspoň jeden z týchto jazykov so svojho systému a reštartujte webserver.",
"Please ask your server administrator to install the module." : "Prosím, požiadajte administrátora vášho servera o inštaláciu modulu.",
"PHP module %s not installed." : "PHP modul %s nie je nainštalovaný.",
"PHP setting \"%s\" is not set to \"%s\"." : "Voľba PHP „%s“ nie je nastavená na „%s“.",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "Použitím týchto nastavení v php.ini dovolí Nextcloudu sa znova spustiť",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload je nastavený na \"%s\", namiesto predpokladanej hodnoty \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Oprava problému spočíva v nastavení <code>mbstring.func_overload</code> na <code>0</code> vo vašom php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Vyžadovaná verzia libxml2 je 2.7.0 a vyššia. Momentálne je nainštalovaná verzia %s.",
+ "To fix this issue update your libxml2 version and restart your web server." : "Pre vyriešenie tohto problému aktualizujte prosím verziu libxml2 a reštartujte webový server.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je zjavne nastavené, aby odstraňovalo bloky vloženej dokumentácie. To zneprístupní niekoľko základných aplikácií.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "To je pravdepodobne spôsobené cache/akcelerátorom ako napr. Zend OPcache alebo eAccelerator.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moduly boli nainštalované, ale stále sa tvária, že chýbajú?",
@@ -192,6 +203,8 @@ OC.L10N.register(
"Archives of type %s are not supported" : "Tento typ archívu %s nie je podporovaný",
"Failed to open archive when installing app" : "Zlyhanie pri otváraní archívu počas inštalácie aplikácie",
"App does not provide an info.xml file" : "Aplikácia neposkytuje súbor info.xml",
+ "App cannot be installed because appinfo file cannot be read." : "Aplikáciu nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "Nebolo možné skontrolovať podpis aplikácie. Kontaktujte prosím vývojára aplikácie a skontrolujte administrátorské nastavenia.",
"App can't be installed because of not allowed code in the App" : "Aplikácia nemôže byť nainštalovaná pre nepovolený kód v aplikácii",
"App can't be installed because it is not compatible with this version of the server" : "Aplikácia nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikácia nemôže byť nainštalovaná pretože obsahuje značku<shipped>true</shipped>, ktorá nie je povolená pre nedodávané aplikácie",
diff --git a/lib/l10n/sk_SK.json b/lib/l10n/sk_SK.json
index f67c99dd28c..ddd42d62b8e 100644
--- a/lib/l10n/sk_SK.json
+++ b/lib/l10n/sk_SK.json
@@ -34,6 +34,8 @@
"File name is too long" : "Meno súboru je veľmi dlhé.",
"Dot files are not allowed" : "Názov súboru začínajúci bodkou nie je povolený.",
"Empty filename is not allowed" : "Prázdny názov súboru nie je povolený",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
"Server settings" : "Nastavenia servera",
"Sharing" : "Sprístupnenie",
"Encryption" : "Šifrovanie",
@@ -62,6 +64,7 @@
"Sharing %s failed, because the backend does not allow shares from type %i" : "Sprístupnenie %s zlyhalo, backend nepodporuje typ sprístupnenia %i",
"Sharing %s failed, because the file does not exist" : "Nie je možné sprístupniť %s, súbor neexistuje",
"You are not allowed to share %s" : "Nemôžete sprístupniť %s",
+ "Sharing %s failed, because you can not share with yourself" : "Sprístupnenie %s zlyhalo, nieje možné sprístupniť obsah so sebou samým",
"Sharing %s failed, because the user %s does not exist" : "Sprístupnenie %s zlyhalo, používateľ %s neexistuje",
"Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Sprístupnenie %s zlyhalo, používateľ %s nie je členom žiadnej skupiny spoločnej s používateľom %s",
"Sharing %s failed, because this item is already shared with %s" : "Sprístupnenie %s zlyhalo, pretože táto položka už je prístupná pre %s",
@@ -70,6 +73,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Sprístupnenie %s zlyhalo, %s nie je členom skupiny %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Musíte zadať heslo ak chcete vytvoriť verejný odkaz, lebo iba odkazy chránené heslom sú povolené",
"Sharing %s failed, because sharing with links is not allowed" : "%s nie je možné sprístupniť, sprístupnenie prostredníctvom odkazu nie je povolené",
+ "Not allowed to create a federated share with the same user" : "Nie je možné vytvoriť združené sprístupnenie so sebou samým",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sprístupňovanie %s zlyhalo, nepodarilo sa nájsť %s, možno je server dočasne nedostupný.",
"Share type %s is not valid for %s" : "Typ sprístupnenia %s nie je možný pre %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Nastavenie povolení pre %s zlyhalo, pretože povolenia prekračujú povolenia udelené %s",
@@ -134,6 +138,7 @@
"Nov." : "Nov.",
"Dec." : "Dec.",
"Apps" : "Aplikácie",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "V mene používateľa je možné použiť iba nasledovné znaky: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"",
"A valid username must be provided" : "Musíte zadať platné používateľské meno",
"Username contains whitespace at the beginning or at the end" : "Meno používateľa obsahuje na začiatku, alebo na konci medzeru",
"A valid password must be provided" : "Musíte zadať platné heslo",
@@ -144,6 +149,8 @@
"Personal" : "Osobné",
"Users" : "Používatelia",
"Admin" : "Administrátor",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikáciu \"%s\" nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikácia \"%s\" nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná.",
"No app name specified" : "Nešpecifikované meno aplikácie",
"App '%s' could not be installed!" : "Aplikáciu '%s' nebolo možné nainštalovať!",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Aplikáciu \"%s\" nie je možné inštalovať, pretože nie sú splnené nasledovné závislosti: %s",
@@ -159,14 +166,18 @@
"Cannot write into \"apps\" directory" : "Nie je možné zapisovať do priečinka \"apps\"",
"This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Toto je zvyčajne možné opraviť tým, že %s udelíte webovému serveru oprávnenie na zápis do priečinka aplikácií %s alebo vypnete obchod s aplikáciami v konfiguračnom súbore.",
"Cannot create \"data\" directory (%s)" : "Nie je možné vytvoriť priečinok \"data\" (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "To je zvyčajne možné opraviť tým <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">že udelíte webovému serveru oprávnenie na zápis do koreňového priečinka</a>.",
"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnenia je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis do koreňového priečinka%s.",
"Setting locale to %s failed" : "Nastavenie locale na %s zlyhalo",
"Please install one of these locales on your system and restart your webserver." : "Prosím, nainštalujte si aspoň jeden z týchto jazykov so svojho systému a reštartujte webserver.",
"Please ask your server administrator to install the module." : "Prosím, požiadajte administrátora vášho servera o inštaláciu modulu.",
"PHP module %s not installed." : "PHP modul %s nie je nainštalovaný.",
"PHP setting \"%s\" is not set to \"%s\"." : "Voľba PHP „%s“ nie je nastavená na „%s“.",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "Použitím týchto nastavení v php.ini dovolí Nextcloudu sa znova spustiť",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload je nastavený na \"%s\", namiesto predpokladanej hodnoty \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Oprava problému spočíva v nastavení <code>mbstring.func_overload</code> na <code>0</code> vo vašom php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Vyžadovaná verzia libxml2 je 2.7.0 a vyššia. Momentálne je nainštalovaná verzia %s.",
+ "To fix this issue update your libxml2 version and restart your web server." : "Pre vyriešenie tohto problému aktualizujte prosím verziu libxml2 a reštartujte webový server.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je zjavne nastavené, aby odstraňovalo bloky vloženej dokumentácie. To zneprístupní niekoľko základných aplikácií.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "To je pravdepodobne spôsobené cache/akcelerátorom ako napr. Zend OPcache alebo eAccelerator.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moduly boli nainštalované, ale stále sa tvária, že chýbajú?",
@@ -190,6 +201,8 @@
"Archives of type %s are not supported" : "Tento typ archívu %s nie je podporovaný",
"Failed to open archive when installing app" : "Zlyhanie pri otváraní archívu počas inštalácie aplikácie",
"App does not provide an info.xml file" : "Aplikácia neposkytuje súbor info.xml",
+ "App cannot be installed because appinfo file cannot be read." : "Aplikáciu nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "Nebolo možné skontrolovať podpis aplikácie. Kontaktujte prosím vývojára aplikácie a skontrolujte administrátorské nastavenia.",
"App can't be installed because of not allowed code in the App" : "Aplikácia nemôže byť nainštalovaná pre nepovolený kód v aplikácii",
"App can't be installed because it is not compatible with this version of the server" : "Aplikácia nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikácia nemôže byť nainštalovaná pretože obsahuje značku<shipped>true</shipped>, ktorá nie je povolená pre nedodávané aplikácie",
diff --git a/lib/private/AppConfig.php b/lib/private/AppConfig.php
index 06e760e86f6..4e102522550 100644
--- a/lib/private/AppConfig.php
+++ b/lib/private/AppConfig.php
@@ -1,5 +1,6 @@
<?php
/**
+ * @copyright Copyright (c) 2017, Joas Schilling <coding@schilljs.com>
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
@@ -42,6 +43,9 @@ class AppConfig implements IAppConfig {
/** @var array[] */
protected $sensitiveValues = [
+ 'spreed' => [
+ 'turn_server_secret',
+ ],
'user_ldap' => [
'ldap_agent_password',
],
diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php
index ac42960f54d..57499f3ffe8 100644
--- a/lib/private/AppFramework/DependencyInjection/DIContainer.php
+++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php
@@ -43,8 +43,10 @@ use OC\AppFramework\Middleware\OCSMiddleware;
use OC\AppFramework\Middleware\Security\SecurityMiddleware;
use OC\AppFramework\Middleware\SessionMiddleware;
use OC\AppFramework\Utility\SimpleContainer;
+use OC\AppFramework\Utility\TimeFactory;
use OC\Core\Middleware\TwoFactorMiddleware;
use OC\RichObjectStrings\Validator;
+use OC\Security\Bruteforce\Throttler;
use OCP\AppFramework\IApi;
use OCP\AppFramework\IAppContainer;
use OCP\Files\IAppData;
@@ -376,20 +378,25 @@ class DIContainer extends SimpleContainer implements IAppContainer {
*/
$app = $this;
$this->registerService('SecurityMiddleware', function($c) use ($app){
+ /** @var \OC\Server $server */
+ $server = $app->getServer();
+
return new SecurityMiddleware(
$c['Request'],
$c['ControllerMethodReflector'],
- $app->getServer()->getNavigationManager(),
- $app->getServer()->getURLGenerator(),
- $app->getServer()->getLogger(),
- $app->getServer()->getSession(),
+ $server->getNavigationManager(),
+ $server->getURLGenerator(),
+ $server->getLogger(),
+ $server->getSession(),
$c['AppName'],
$app->isLoggedIn(),
$app->isAdminUser(),
- $app->getServer()->getContentSecurityPolicyManager(),
- $app->getServer()->getCsrfTokenManager(),
- $app->getServer()->getContentSecurityPolicyNonceManager()
+ $server->getContentSecurityPolicyManager(),
+ $server->getCsrfTokenManager(),
+ $server->getContentSecurityPolicyNonceManager(),
+ $server->getBruteForceThrottler()
);
+
});
$this->registerService('CORSMiddleware', function($c) {
diff --git a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
index d60d5749d57..edba6a3e759 100644
--- a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
+++ b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
@@ -36,6 +36,7 @@ use OC\AppFramework\Middleware\Security\Exceptions\NotConfirmedException;
use OC\AppFramework\Middleware\Security\Exceptions\NotLoggedInException;
use OC\AppFramework\Middleware\Security\Exceptions\StrictCookieMissingException;
use OC\AppFramework\Utility\ControllerMethodReflector;
+use OC\Security\Bruteforce\Throttler;
use OC\Security\CSP\ContentSecurityPolicyManager;
use OC\Security\CSP\ContentSecurityPolicyNonceManager;
use OC\Security\CSRF\CsrfTokenManager;
@@ -87,6 +88,8 @@ class SecurityMiddleware extends Middleware {
private $csrfTokenManager;
/** @var ContentSecurityPolicyNonceManager */
private $cspNonceManager;
+ /** @var Throttler */
+ private $throttler;
/**
* @param IRequest $request
@@ -101,6 +104,7 @@ class SecurityMiddleware extends Middleware {
* @param ContentSecurityPolicyManager $contentSecurityPolicyManager
* @param CSRFTokenManager $csrfTokenManager
* @param ContentSecurityPolicyNonceManager $cspNonceManager
+ * @param Throttler $throttler
*/
public function __construct(IRequest $request,
ControllerMethodReflector $reflector,
@@ -113,7 +117,8 @@ class SecurityMiddleware extends Middleware {
$isAdminUser,
ContentSecurityPolicyManager $contentSecurityPolicyManager,
CsrfTokenManager $csrfTokenManager,
- ContentSecurityPolicyNonceManager $cspNonceManager) {
+ ContentSecurityPolicyNonceManager $cspNonceManager,
+ Throttler $throttler) {
$this->navigationManager = $navigationManager;
$this->request = $request;
$this->reflector = $reflector;
@@ -126,6 +131,7 @@ class SecurityMiddleware extends Middleware {
$this->contentSecurityPolicyManager = $contentSecurityPolicyManager;
$this->csrfTokenManager = $csrfTokenManager;
$this->cspNonceManager = $cspNonceManager;
+ $this->throttler = $throttler;
}
@@ -185,6 +191,12 @@ class SecurityMiddleware extends Middleware {
}
}
+ if($this->reflector->hasAnnotation('BruteForceProtection')) {
+ $action = $this->reflector->getAnnotationParameter('BruteForceProtection');
+ $this->throttler->sleepDelay($this->request->getRemoteAddress(), $action);
+ $this->throttler->registerAttempt($action, $this->request->getRemoteAddress());
+ }
+
/**
* FIXME: Use DI once available
* Checks if app is enabled (also includes a check whether user is allowed to access the resource)
diff --git a/lib/private/AppFramework/Utility/ControllerMethodReflector.php b/lib/private/AppFramework/Utility/ControllerMethodReflector.php
index 33a117d8121..034fc3a1759 100644
--- a/lib/private/AppFramework/Utility/ControllerMethodReflector.php
+++ b/lib/private/AppFramework/Utility/ControllerMethodReflector.php
@@ -55,8 +55,10 @@ class ControllerMethodReflector implements IControllerMethodReflector{
$docs = $reflection->getDocComment();
// extract everything prefixed by @ and first letter uppercase
- preg_match_all('/@([A-Z]\w+)/', $docs, $matches);
- $this->annotations = $matches[1];
+ preg_match_all('/^\h+\*\h+@(?P<annotation>[A-Z]\w+)(\h+(?P<parameter>\w+))?$/m', $docs, $matches);
+ foreach($matches['annotation'] as $key => $annontation) {
+ $this->annotations[$annontation] = $matches['parameter'][$key];
+ }
// extract type parameter information
preg_match_all('/@param\h+(?P<type>\w+)\h+\$(?P<var>\w+)/', $docs, $matches);
@@ -112,7 +114,22 @@ class ControllerMethodReflector implements IControllerMethodReflector{
* @return bool true if the annotation is found
*/
public function hasAnnotation($name){
- return in_array($name, $this->annotations);
+ return array_key_exists($name, $this->annotations);
+ }
+
+
+ /**
+ * Get optional annotation parameter
+ * @param string $name the name of the annotation
+ * @return string
+ */
+ public function getAnnotationParameter($name){
+ $parameter = '';
+ if($this->hasAnnotation($name)) {
+ $parameter = $this->annotations[$name];
+ }
+
+ return $parameter;
}
diff --git a/lib/private/Files/Node/File.php b/lib/private/Files/Node/File.php
index c4430b9181d..4bfa5d583f7 100644
--- a/lib/private/Files/Node/File.php
+++ b/lib/private/Files/Node/File.php
@@ -30,6 +30,16 @@ use OCP\Files\NotPermittedException;
class File extends Node implements \OCP\Files\File {
/**
+ * Creates a Folder that represents a non-existing path
+ *
+ * @param string $path path
+ * @return string non-existing node class
+ */
+ protected function createNonExistingNode($path) {
+ return new NonExistingFile($this->root, $this->view, $path);
+ }
+
+ /**
* @return string
* @throws \OCP\Files\NotPermittedException
*/
@@ -114,52 +124,6 @@ class File extends Node implements \OCP\Files\File {
}
/**
- * @param string $targetPath
- * @throws \OCP\Files\NotPermittedException
- * @return \OC\Files\Node\Node
- */
- public function copy($targetPath) {
- $targetPath = $this->normalizePath($targetPath);
- $parent = $this->root->get(dirname($targetPath));
- if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
- $nonExisting = new NonExistingFile($this->root, $this->view, $targetPath);
- $this->root->emit('\OC\Files', 'preCopy', array($this, $nonExisting));
- $this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
- $this->view->copy($this->path, $targetPath);
- $targetNode = $this->root->get($targetPath);
- $this->root->emit('\OC\Files', 'postCopy', array($this, $targetNode));
- $this->root->emit('\OC\Files', 'postWrite', array($targetNode));
- return $targetNode;
- } else {
- throw new NotPermittedException();
- }
- }
-
- /**
- * @param string $targetPath
- * @throws \OCP\Files\NotPermittedException
- * @return \OC\Files\Node\Node
- */
- public function move($targetPath) {
- $targetPath = $this->normalizePath($targetPath);
- $parent = $this->root->get(dirname($targetPath));
- if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
- $nonExisting = new NonExistingFile($this->root, $this->view, $targetPath);
- $this->root->emit('\OC\Files', 'preRename', array($this, $nonExisting));
- $this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
- $this->view->rename($this->path, $targetPath);
- $targetNode = $this->root->get($targetPath);
- $this->root->emit('\OC\Files', 'postRename', array($this, $targetNode));
- $this->root->emit('\OC\Files', 'postWrite', array($targetNode));
- $this->path = $targetPath;
- $this->fileInfo = null;
- return $targetNode;
- } else {
- throw new NotPermittedException();
- }
- }
-
- /**
* @param string $type
* @param bool $raw
* @return string
diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php
index 288a02ef207..fd907f708f3 100644
--- a/lib/private/Files/Node/Folder.php
+++ b/lib/private/Files/Node/Folder.php
@@ -36,6 +36,16 @@ use OCP\Files\NotPermittedException;
class Folder extends Node implements \OCP\Files\Folder {
/**
+ * Creates a Folder that represents a non-existing path
+ *
+ * @param string $path path
+ * @return string non-existing node class
+ */
+ protected function createNonExistingNode($path) {
+ return new NonExistingFolder($this->root, $this->view, $path);
+ }
+
+ /**
* @param string $path path relative to the folder
* @return string
* @throws \OCP\Files\NotPermittedException
@@ -326,51 +336,6 @@ class Folder extends Node implements \OCP\Files\Folder {
}
/**
- * @param string $targetPath
- * @throws \OCP\Files\NotPermittedException
- * @return \OC\Files\Node\Node
- */
- public function copy($targetPath) {
- $targetPath = $this->normalizePath($targetPath);
- $parent = $this->root->get(dirname($targetPath));
- if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
- $nonExisting = new NonExistingFolder($this->root, $this->view, $targetPath);
- $this->root->emit('\OC\Files', 'preCopy', array($this, $nonExisting));
- $this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
- $this->view->copy($this->path, $targetPath);
- $targetNode = $this->root->get($targetPath);
- $this->root->emit('\OC\Files', 'postCopy', array($this, $targetNode));
- $this->root->emit('\OC\Files', 'postWrite', array($targetNode));
- return $targetNode;
- } else {
- throw new NotPermittedException('No permission to copy to path');
- }
- }
-
- /**
- * @param string $targetPath
- * @throws \OCP\Files\NotPermittedException
- * @return \OC\Files\Node\Node
- */
- public function move($targetPath) {
- $targetPath = $this->normalizePath($targetPath);
- $parent = $this->root->get(dirname($targetPath));
- if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
- $nonExisting = new NonExistingFolder($this->root, $this->view, $targetPath);
- $this->root->emit('\OC\Files', 'preRename', array($this, $nonExisting));
- $this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
- $this->view->rename($this->path, $targetPath);
- $targetNode = $this->root->get($targetPath);
- $this->root->emit('\OC\Files', 'postRename', array($this, $targetNode));
- $this->root->emit('\OC\Files', 'postWrite', array($targetNode));
- $this->path = $targetPath;
- return $targetNode;
- } else {
- throw new NotPermittedException('No permission to move to path');
- }
- }
-
- /**
* Add a suffix to the name in case the file exists
*
* @param string $name
diff --git a/lib/private/Files/Node/Node.php b/lib/private/Files/Node/Node.php
index 226c182622f..e00debe6903 100644
--- a/lib/private/Files/Node/Node.php
+++ b/lib/private/Files/Node/Node.php
@@ -33,6 +33,7 @@ use OCP\Files\InvalidPathException;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
+// FIXME: this class really should be abstract
class Node implements \OCP\Files\Node {
/**
* @var \OC\Files\View $view
@@ -56,7 +57,7 @@ class Node implements \OCP\Files\Node {
/**
* @param \OC\Files\View $view
- * @param \OC\Files\Node\Root $root
+ * @param \OCP\Files\IRootFolder $root
* @param string $path
* @param FileInfo $fileInfo
*/
@@ -68,6 +69,16 @@ class Node implements \OCP\Files\Node {
}
/**
+ * Creates a Node of the same type that represents a non-existing path
+ *
+ * @param string $path path
+ * @return string non-existing node class
+ */
+ protected function createNonExistingNode($path) {
+ throw new \Exception('Must be implemented by subclasses');
+ }
+
+ /**
* Returns the matching file info
*
* @return FileInfo
@@ -106,28 +117,11 @@ class Node implements \OCP\Files\Node {
return ($this->getPermissions() & $permissions) === $permissions;
}
- /**
- * @param string $targetPath
- * @throws \OCP\Files\NotPermittedException
- * @return \OC\Files\Node\Node
- */
- public function move($targetPath) {
- return;
- }
-
public function delete() {
return;
}
/**
- * @param string $targetPath
- * @return \OC\Files\Node\Node
- */
- public function copy($targetPath) {
- return;
- }
-
- /**
* @param int $mtime
* @throws \OCP\Files\NotPermittedException
*/
@@ -381,4 +375,54 @@ class Node implements \OCP\Files\Node {
public function unlock($type) {
$this->view->unlockFile($this->path, $type);
}
+
+ /**
+ * @param string $targetPath
+ * @throws \OCP\Files\NotPermittedException if copy not allowed or failed
+ * @return \OC\Files\Node\Node
+ */
+ public function copy($targetPath) {
+ $targetPath = $this->normalizePath($targetPath);
+ $parent = $this->root->get(dirname($targetPath));
+ if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
+ $nonExisting = $this->createNonExistingNode($targetPath);
+ $this->root->emit('\OC\Files', 'preCopy', [$this, $nonExisting]);
+ $this->root->emit('\OC\Files', 'preWrite', [$nonExisting]);
+ if (!$this->view->copy($this->path, $targetPath)) {
+ throw new NotPermittedException('Could not copy ' . $this->path . ' to ' . $targetPath);
+ }
+ $targetNode = $this->root->get($targetPath);
+ $this->root->emit('\OC\Files', 'postCopy', [$this, $targetNode]);
+ $this->root->emit('\OC\Files', 'postWrite', [$targetNode]);
+ return $targetNode;
+ } else {
+ throw new NotPermittedException('No permission to copy to path ' . $targetPath);
+ }
+ }
+
+ /**
+ * @param string $targetPath
+ * @throws \OCP\Files\NotPermittedException if move not allowed or failed
+ * @return \OC\Files\Node\Node
+ */
+ public function move($targetPath) {
+ $targetPath = $this->normalizePath($targetPath);
+ $parent = $this->root->get(dirname($targetPath));
+ if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
+ $nonExisting = $this->createNonExistingNode($targetPath);
+ $this->root->emit('\OC\Files', 'preRename', [$this, $nonExisting]);
+ $this->root->emit('\OC\Files', 'preWrite', [$nonExisting]);
+ if (!$this->view->rename($this->path, $targetPath)) {
+ throw new NotPermittedException('Could not move ' . $this->path . ' to ' . $targetPath);
+ }
+ $targetNode = $this->root->get($targetPath);
+ $this->root->emit('\OC\Files', 'postRename', [$this, $targetNode]);
+ $this->root->emit('\OC\Files', 'postWrite', [$targetNode]);
+ $this->path = $targetPath;
+ return $targetNode;
+ } else {
+ throw new NotPermittedException('No permission to move to path ' . $targetPath);
+ }
+ }
+
}
diff --git a/lib/private/Files/Type/Detection.php b/lib/private/Files/Type/Detection.php
index 84d727ebb0e..cd4ddc2f067 100644
--- a/lib/private/Files/Type/Detection.php
+++ b/lib/private/Files/Type/Detection.php
@@ -167,6 +167,10 @@ class Detection implements IMimeTypeDetector {
$this->loadMappings();
$fileName = basename($path);
+
+ // remove leading dot on hidden files with a file extension
+ $fileName = ltrim($fileName, '.');
+
// note: leading dot doesn't qualify as extension
if (strpos($fileName, '.') > 0) {
//try to guess the type by the file extension
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index 909c49197b8..db21d400b39 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -1146,6 +1146,8 @@ class View {
$unlockLater = false;
if ($this->lockingEnabled && $operation === 'fopen' && is_resource($result)) {
$unlockLater = true;
+ // make sure our unlocking callback will still be called if connection is aborted
+ ignore_user_abort(true);
$result = CallbackWrapper::wrap($result, null, null, function () use ($hooks, $path) {
if (in_array('write', $hooks)) {
$this->unlockFile($path, ILockingProvider::LOCK_EXCLUSIVE);
diff --git a/lib/private/Mail/Mailer.php b/lib/private/Mail/Mailer.php
index df8fa80f2c2..e704e8e3490 100644
--- a/lib/private/Mail/Mailer.php
+++ b/lib/private/Mail/Mailer.php
@@ -200,7 +200,7 @@ class Mailer implements IMailer {
* @return \Swift_SendmailTransport
*/
protected function getSendMailInstance() {
- switch ($this->config->getSystemValue('mail_smtpmode', 'sendmail')) {
+ switch ($this->config->getSystemValue('mail_smtpmode', 'php')) {
case 'qmail':
$binaryPath = '/var/qmail/bin/sendmail';
break;
diff --git a/lib/private/Security/Bruteforce/Throttler.php b/lib/private/Security/Bruteforce/Throttler.php
index 031c5ffd411..765f109fdb3 100644
--- a/lib/private/Security/Bruteforce/Throttler.php
+++ b/lib/private/Security/Bruteforce/Throttler.php
@@ -189,9 +189,10 @@ class Throttler {
* Get the throttling delay (in milliseconds)
*
* @param string $ip
+ * @param string $action optionally filter by action
* @return int
*/
- public function getDelay($ip) {
+ public function getDelay($ip, $action = '') {
$cutoffTime = (new \DateTime())
->sub($this->getCutoff(43200))
->getTimestamp();
@@ -201,6 +202,11 @@ class Throttler {
->from('bruteforce_attempts')
->where($qb->expr()->gt('occurred', $qb->createNamedParameter($cutoffTime)))
->andWhere($qb->expr()->eq('subnet', $qb->createNamedParameter($this->getSubnet($ip))));
+
+ if ($action !== '') {
+ $qb->andWhere($qb->expr()->eq('action', $qb->createNamedParameter($action)));
+ }
+
$attempts = count($qb->execute()->fetchAll());
if ($attempts === 0) {
@@ -225,10 +231,11 @@ class Throttler {
* Will sleep for the defined amount of time
*
* @param string $ip
+ * @param string $action optionally filter by action
* @return int the time spent sleeping
*/
- public function sleepDelay($ip) {
- $delay = $this->getDelay($ip);
+ public function sleepDelay($ip, $action = '') {
+ $delay = $this->getDelay($ip, $action);
usleep($delay * 1000);
return $delay;
}
diff --git a/lib/private/Server.php b/lib/private/Server.php
index d88a687bbc4..8528d5e7b32 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -792,7 +792,8 @@ class Server extends ServerContainer implements IServerContainer {
$c->getEncryptionManager(),
$c->getUserManager(),
$c->getLockingProvider(),
- new \OC\Settings\Mapper($c->getDatabaseConnection())
+ new \OC\Settings\Mapper($c->getDatabaseConnection()),
+ $c->getURLGenerator()
);
return $manager;
});
diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php
index 949826aa246..7a339b94199 100644
--- a/lib/private/Settings/Manager.php
+++ b/lib/private/Settings/Manager.php
@@ -29,6 +29,7 @@ use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IL10N;
use OCP\ILogger;
+use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\Lock\ILockingProvider;
use OCP\Settings\ISettings;
@@ -55,6 +56,8 @@ class Manager implements IManager {
private $userManager;
/** @var ILockingProvider */
private $lockingProvider;
+ /** @var IURLGenerator */
+ private $url;
/**
* @param ILogger $log
@@ -65,7 +68,7 @@ class Manager implements IManager {
* @param IUserManager $userManager
* @param ILockingProvider $lockingProvider
* @param Mapper $mapper
- * @internal param IDBConnection $dbc
+ * @param IURLGenerator $url
*/
public function __construct(
ILogger $log,
@@ -75,7 +78,8 @@ class Manager implements IManager {
EncryptionManager $encryptionManager,
IUserManager $userManager,
ILockingProvider $lockingProvider,
- Mapper $mapper
+ Mapper $mapper,
+ IURLGenerator $url
) {
$this->log = $log;
$this->dbc = $dbc;
@@ -85,6 +89,7 @@ class Manager implements IManager {
$this->encryptionManager = $encryptionManager;
$this->userManager = $userManager;
$this->lockingProvider = $lockingProvider;
+ $this->url = $url;
}
/**
@@ -260,11 +265,11 @@ class Manager implements IManager {
public function getAdminSections() {
// built-in sections
$sections = [
- 0 => [new Section('server', $this->l->t('Server settings'), 0)],
- 5 => [new Section('sharing', $this->l->t('Sharing'), 0)],
- 45 => [new Section('encryption', $this->l->t('Encryption'), 0)],
- 98 => [new Section('additional', $this->l->t('Additional settings'), 0)],
- 99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0)],
+ 0 => [new Section('server', $this->l->t('Server settings'), 0, $this->url->imagePath('settings', 'admin.svg'))],
+ 5 => [new Section('sharing', $this->l->t('Sharing'), 0, $this->url->imagePath('core', 'actions/share.svg'))],
+ 45 => [new Section('encryption', $this->l->t('Encryption'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
+ 98 => [new Section('additional', $this->l->t('Additional settings'), 0, $this->url->imagePath('core', 'actions/settings-dark.svg'))],
+ 99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0, $this->url->imagePath('settings', 'help.svg'))],
];
$rows = $this->mapper->getAdminSectionsFromDB();
diff --git a/lib/private/Settings/Section.php b/lib/private/Settings/Section.php
index b3cf242279f..c89a3999c4e 100644
--- a/lib/private/Settings/Section.php
+++ b/lib/private/Settings/Section.php
@@ -23,25 +23,29 @@
namespace OC\Settings;
-use OCP\Settings\ISection;
+use OCP\Settings\IIconSection;
-class Section implements ISection {
+class Section implements IIconSection {
/** @var string */
private $id;
/** @var string */
private $name;
/** @var int */
private $priority;
+ /** @var string */
+ private $icon;
/**
* @param string $id
* @param string $name
* @param int $priority
+ * @param string $icon
*/
- public function __construct($id, $name, $priority) {
+ public function __construct($id, $name, $priority, $icon = '') {
$this->id = $id;
$this->name = $name;
$this->priority = $priority;
+ $this->icon = $icon;
}
/**
@@ -74,4 +78,15 @@ class Section implements ISection {
public function getPriority() {
return $this->priority;
}
+
+ /**
+ * returns the relative path to an 16*16 icon describing the section.
+ * e.g. '/core/img/places/files.svg'
+ *
+ * @returns string
+ * @since 12
+ */
+ public function getIcon() {
+ return $this->icon;
+ }
}
diff --git a/lib/private/SubAdmin.php b/lib/private/SubAdmin.php
index 9a2beed09fe..0650c7c6c01 100644
--- a/lib/private/SubAdmin.php
+++ b/lib/private/SubAdmin.php
@@ -188,7 +188,7 @@ class SubAdmin extends PublicEmitter {
* @param IGroup $group
* @return bool
*/
- public function isSubAdminofGroup(IUser $user, IGroup $group) {
+ public function isSubAdminOfGroup(IUser $user, IGroup $group) {
$qb = $this->dbConn->getQueryBuilder();
/*
diff --git a/lib/private/Template/CSSResourceLocator.php b/lib/private/Template/CSSResourceLocator.php
index 351e6d1366f..6af4e319e36 100644
--- a/lib/private/Template/CSSResourceLocator.php
+++ b/lib/private/Template/CSSResourceLocator.php
@@ -39,7 +39,7 @@ class CSSResourceLocator extends ResourceLocator {
* @param array $party_map
* @param SCSSCacher $scssCacher
*/
- public function __construct(ILogger $logger, $theme, $core_map, $party_map, SCSSCacher $scssCacher) {
+ public function __construct(ILogger $logger, $theme, $core_map, $party_map, $scssCacher) {
$this->scssCacher = $scssCacher;
parent::__construct($logger, $theme, $core_map, $party_map);
@@ -85,12 +85,17 @@ class CSSResourceLocator extends ResourceLocator {
*/
protected function cacheAndAppendScssIfExist($root, $file, $webRoot = null) {
if (is_file($root.'/'.$file)) {
- if($this->scssCacher->process($root, $file)) {
- $this->append($root, $this->scssCacher->getCachedSCSS('core', $file), $webRoot, false);
- return true;
+ if($this->scssCacher !== null) {
+ if($this->scssCacher->process($root, $file)) {
+ $this->append($root, $this->scssCacher->getCachedSCSS('core', $file), $webRoot, false);
+ return true;
+ } else {
+ $this->logger->error('Failed to compile and/or save '.$root.'/'.$file, ['app' => 'core']);
+ return false;
+ }
} else {
- $this->logger->error('Failed to compile and/or save '.$root.'/'.$file, ['app' => 'core']);
- return false;
+ $this->logger->error('Scss is disabled for '.$root.'/'.$file.', ignoring', ['app' => 'core']);
+ return true;
}
}
return false;
diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php
index bc6a485ad43..7ded109f76b 100644
--- a/lib/private/TemplateLayout.php
+++ b/lib/private/TemplateLayout.php
@@ -157,19 +157,17 @@ class TemplateLayout extends \OC_Template {
foreach($jsFiles as $info) {
$web = $info[1];
$file = $info[2];
- $this->append( 'jsfiles', $web.'/'.$file . '?v=' . self::$versionHash);
+ $this->append( 'jsfiles', $web.'/'.$file . $this->getVersionHashSuffix() );
}
- // Add the css files and check if server is already installed to prevent
- // appdata initialisation before database configuration
- if(\OC::$server->getSystemConfig()->getValue('installed', false)) {
+ // Do not initialise scss appdata until we have a fully installed instance
+ // Do not load scss for update, errors, installation or login page
+ if(\OC::$server->getSystemConfig()->getValue('installed', false)
+ && !\OCP\Util::needUpgrade()
+ && strpos(\OC::$server->getRequest()->getRequestUri(), \OC::$server->getURLGenerator()->linkToRoute('core.login.tryLogin')) !== 0) {
$cssFiles = self::findStylesheetFiles(\OC_Util::$styles);
} else {
- $cssFiles = array(
- [\OC::$SERVERROOT, \OC::$WEBROOT, 'core/css/global.css'],
- [\OC::$SERVERROOT, \OC::$WEBROOT, 'core/css/fonts.css'],
- [\OC::$SERVERROOT, \OC::$WEBROOT, 'core/css/installation.css']
- );
+ $cssFiles = self::findStylesheetFiles(\OC_Util::$styles, false);
}
$this->assign('cssfiles', array());
$this->assign('printcssfiles', []);
@@ -179,27 +177,40 @@ class TemplateLayout extends \OC_Template {
$file = $info[2];
if (substr($file, -strlen('print.css')) === 'print.css') {
- $this->append( 'printcssfiles', $web.'/'.$file . '?v=' . self::$versionHash);
+ $this->append( 'printcssfiles', $web.'/'.$file . $this->getVersionHashSuffix() );
} else {
- $this->append( 'cssfiles', $web.'/'.$file . '?v=' . self::$versionHash);
+ $this->append( 'cssfiles', $web.'/'.$file . $this->getVersionHashSuffix() );
}
}
}
+ protected function getVersionHashSuffix() {
+ if(\OC::$server->getConfig()->getSystemValue('debug', false)) {
+ // allows chrome workspace mapping in debug mode
+ return "";
+ }
+
+ return '?v=' . self::$versionHash;
+ }
+
/**
* @param array $styles
* @return array
*/
- static public function findStylesheetFiles($styles) {
+ static public function findStylesheetFiles($styles, $compileScss = true) {
// Read the selected theme from the config file
$theme = \OC_Util::getTheme();
- $SCSSCacher = new SCSSCacher(
- \OC::$server->getLogger(),
- \OC::$server->getAppDataDir('css'),
- \OC::$server->getURLGenerator(),
- \OC::$server->getSystemConfig()
- );
+ if($compileScss) {
+ $SCSSCacher = new SCSSCacher(
+ \OC::$server->getLogger(),
+ \OC::$server->getAppDataDir('css'),
+ \OC::$server->getURLGenerator(),
+ \OC::$server->getSystemConfig()
+ );
+ } else {
+ $SCSSCacher = null;
+ }
$locator = new \OC\Template\CSSResourceLocator(
\OC::$server->getLogger(),
diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php
index 1834bd025d1..9cc42e671a8 100644
--- a/lib/private/User/Session.php
+++ b/lib/private/User/Session.php
@@ -317,7 +317,7 @@ class Session implements IUserSession, Emitter {
$password,
IRequest $request,
OC\Security\Bruteforce\Throttler $throttler) {
- $currentDelay = $throttler->sleepDelay($request->getRemoteAddress());
+ $currentDelay = $throttler->sleepDelay($request->getRemoteAddress(), 'login');
$isTokenPassword = $this->isTokenPassword($password);
if (!$isTokenPassword && $this->isTokenAuthEnforced()) {
@@ -334,7 +334,7 @@ class Session implements IUserSession, Emitter {
$throttler->registerAttempt('login', $request->getRemoteAddress(), ['uid' => $user]);
if($currentDelay === 0) {
- $throttler->sleepDelay($request->getRemoteAddress());
+ $throttler->sleepDelay($request->getRemoteAddress(), 'login');
}
return false;
}
@@ -768,7 +768,7 @@ class Session implements IUserSession, Emitter {
try {
$this->tokenProvider->invalidateToken($this->session->getId());
} catch (SessionNotAvailableException $ex) {
-
+
}
}
$this->setUser(null);
diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php
index 8ef7e08c733..a475b895d9f 100644
--- a/lib/private/legacy/app.php
+++ b/lib/private/legacy/app.php
@@ -1304,43 +1304,21 @@ class OC_App {
$data['summary'] = self::findBestL10NOption($data['summary'], $lang);
}
if ($lang && isset($data['description']) && is_array($data['description'])) {
- $data['description'] = self::findBestL10NOption($data['description'], $lang);
- }
-
- // just modify the description if it is available
- // otherwise this will create a $data element with an empty 'description'
- if (isset($data['description'])) {
- if (is_string($data['description'])) {
- // sometimes the description contains line breaks and they are then also
- // shown in this way in the app management which isn't wanted as HTML
- // manages line breaks itself
-
- // first of all we split on empty lines
- $paragraphs = preg_split("!\n[[:space:]]*\n!mu", $data['description']);
-
- $result = [];
- foreach ($paragraphs as $value) {
- // replace multiple whitespace (tabs, space, newlines) inside a paragraph
- // with a single space - also trims whitespace
- $result[] = trim(preg_replace('![[:space:]]+!mu', ' ', $value));
- }
-
- // join the single paragraphs with a empty line in between
- $data['description'] = implode("\n\n", $result);
-
- } else {
- $data['description'] = '';
- }
+ $data['description'] = trim(self::findBestL10NOption($data['description'], $lang));
+ } else if (isset($data['description']) && is_string($data['description'])) {
+ $data['description'] = trim($data['description']);
+ } else {
+ $data['description'] = '';
}
return $data;
}
/**
- * @param $config
- * @param $l
- * @param $info
- * @throws Exception
+ * @param \OCP\IConfig $config
+ * @param \OCP\IL10N $l
+ * @param array $info
+ * @throws \Exception
*/
protected static function checkAppDependencies($config, $l, $info) {
$dependencyAnalyzer = new DependencyAnalyzer(new Platform($config), $l);
diff --git a/lib/private/legacy/files.php b/lib/private/legacy/files.php
index b6c6857a1bf..8c9adad0d49 100644
--- a/lib/private/legacy/files.php
+++ b/lib/private/legacy/files.php
@@ -148,6 +148,7 @@ class OC_Files {
$streamer->sendHeaders($name);
$executionTime = intval(OC::$server->getIniWrapper()->getNumeric('max_execution_time'));
set_time_limit(0);
+ ignore_user_abort(true);
if ($getType === self::ZIP_FILES) {
foreach ($files as $file) {
$file = $dir . '/' . $file;
diff --git a/lib/private/legacy/helper.php b/lib/private/legacy/helper.php
index 9c4bc895fb9..dfe2e09afff 100644
--- a/lib/private/legacy/helper.php
+++ b/lib/private/legacy/helper.php
@@ -52,6 +52,7 @@ class OC_Helper {
/**
* Creates an absolute url for public use
+ *
* @param string $service id
* @param bool $add_slash
* @return string the url
@@ -62,13 +63,14 @@ class OC_Helper {
if ($service === 'files') {
$url = OC::$server->getURLGenerator()->getAbsoluteURL('/s');
} else {
- $url = OC::$server->getURLGenerator()->getAbsoluteURL(OC::$server->getURLGenerator()->linkTo('', 'public.php').'?service='.$service);
+ $url = OC::$server->getURLGenerator()->getAbsoluteURL(OC::$server->getURLGenerator()->linkTo('', 'public.php') . '?service=' . $service);
}
return $url . (($add_slash && $service[strlen($service) - 1] != '/') ? '/' : '');
}
/**
* Make a human file size
+ *
* @param int $bytes file size in bytes
* @return string a human readable file size
*
@@ -104,6 +106,7 @@ class OC_Helper {
/**
* Make a php file size
+ *
* @param int $bytes file size in bytes
* @return string a php parseable file size
*
@@ -130,6 +133,7 @@ class OC_Helper {
/**
* Make a computer file size
+ *
* @param string $str file size in human readable format
* @return float a file size in bytes
*
@@ -172,6 +176,7 @@ class OC_Helper {
/**
* Recursive copying of folders
+ *
* @param string $src source folder
* @param string $dest target folder
*
@@ -194,6 +199,7 @@ class OC_Helper {
/**
* Recursive deletion of folders
+ *
* @param string $dir path to the folder
* @param bool $deleteSelf if set to false only the content of the folder will be deleted
* @return bool
@@ -393,6 +399,7 @@ class OC_Helper {
/**
* performs a search in a nested array
+ *
* @param array $haystack the array to be searched
* @param string $needle the search string
* @param string $index optional, only search this key name
@@ -425,7 +432,7 @@ class OC_Helper {
* @return int number of bytes representing
*/
public static function maxUploadFilesize($dir, $freeSpace = null) {
- if (is_null($freeSpace) || $freeSpace < 0){
+ if (is_null($freeSpace) || $freeSpace < 0) {
$freeSpace = self::freeSpace($dir);
}
return min($freeSpace, self::uploadLimit());
@@ -443,7 +450,7 @@ class OC_Helper {
$freeSpace = max($freeSpace, 0);
return $freeSpace;
} else {
- return (INF > 0)? INF: PHP_INT_MAX; // work around https://bugs.php.net/bug.php?id=69188
+ return (INF > 0) ? INF : PHP_INT_MAX; // work around https://bugs.php.net/bug.php?id=69188
}
}
@@ -510,7 +517,7 @@ class OC_Helper {
if (empty($paths)) {
$paths = '/usr/local/bin /usr/bin /opt/bin /bin';
} else {
- $paths = str_replace(':',' ',getenv('PATH'));
+ $paths = str_replace(':', ' ', getenv('PATH'));
}
$command = 'find ' . $paths . ' -name ' . escapeshellarg($program) . ' 2> /dev/null';
exec($command, $output, $returnCode);
@@ -533,6 +540,12 @@ class OC_Helper {
* @throws \OCP\Files\NotFoundException
*/
public static function getStorageInfo($path, $rootInfo = null) {
+ $memcache = \OC::$server->getMemCacheFactory()->create('storageInfo');
+ $cacheKey = $rootInfo ? '__root__' . md5($path) : md5($path);
+ $cached = $memcache->get($cacheKey);
+ if (is_array($cached)) {
+ return $cached;
+ }
// return storage info without adding mount points
$includeExtStorage = \OC::$server->getSystemConfig()->getValue('quota_include_external_storage', false);
@@ -597,10 +610,20 @@ class OC_Helper {
$ownerId = $storage->getOwner($path);
$ownerDisplayName = '';
$owner = \OC::$server->getUserManager()->get($ownerId);
- if($owner) {
+ if ($owner) {
$ownerDisplayName = $owner->getDisplayName();
}
+ $memcache->set($cacheKey, [
+ 'free' => $free,
+ 'used' => $used,
+ 'quota' => $quota,
+ 'total' => $total,
+ 'relative' => $relative,
+ 'owner' => $ownerId,
+ 'ownerDisplayName' => $ownerDisplayName,
+ ], 5 * 60);
+
return [
'free' => $free,
'used' => $used,
@@ -645,6 +668,7 @@ class OC_Helper {
/**
* Returns whether the config file is set manually to read-only
+ *
* @return bool
*/
public static function isReadOnlyConfigEnabled() {
diff --git a/lib/public/Files/Cache/IScanner.php b/lib/public/Files/Cache/IScanner.php
index 60282996232..8aa4dc04aa9 100644
--- a/lib/public/Files/Cache/IScanner.php
+++ b/lib/public/Files/Cache/IScanner.php
@@ -32,6 +32,7 @@ interface IScanner {
const SCAN_RECURSIVE = true;
const SCAN_SHALLOW = false;
+ const REUSE_NONE = 0;
const REUSE_ETAG = 1;
const REUSE_SIZE = 2;
diff --git a/lib/public/Files/Storage/IStorage.php b/lib/public/Files/Storage/IStorage.php
index b806dc3b7d1..27b8f1d0697 100644
--- a/lib/public/Files/Storage/IStorage.php
+++ b/lib/public/Files/Storage/IStorage.php
@@ -383,7 +383,7 @@ interface IStorage {
public function verifyPath($path, $fileName);
/**
- * @param \OCP\Files\Storage $sourceStorage
+ * @param \OCP\Files\Storage|\OCP\Files\Storage\IStorage $sourceStorage
* @param string $sourceInternalPath
* @param string $targetInternalPath
* @return bool
@@ -392,7 +392,7 @@ interface IStorage {
public function copyFromStorage(\OCP\Files\Storage $sourceStorage, $sourceInternalPath, $targetInternalPath);
/**
- * @param \OCP\Files\Storage $sourceStorage
+ * @param \OCP\Files\Storage|\OCP\Files\Storage\IStorage $sourceStorage
* @param string $sourceInternalPath
* @param string $targetInternalPath
* @return bool
diff --git a/lib/public/RichObjectStrings/Definitions.php b/lib/public/RichObjectStrings/Definitions.php
index 4b5b0da978e..f1208ae0f2c 100644
--- a/lib/public/RichObjectStrings/Definitions.php
+++ b/lib/public/RichObjectStrings/Definitions.php
@@ -152,6 +152,31 @@ class Definitions {
],
],
],
+ 'call' => [
+ 'author' => 'Nextcloud',
+ 'app' => 'spreed',
+ 'since' => '11.0.2',
+ 'parameters' => [
+ 'id' => [
+ 'since' => '11.0.2',
+ 'required' => true,
+ 'description' => 'The id used to identify the call on the instance',
+ 'example' => '42',
+ ],
+ 'name' => [
+ 'since' => '11.0.2',
+ 'required' => true,
+ 'description' => 'The display name of the call which should be used in the visual representation',
+ 'example' => 'Company call',
+ ],
+ 'call-type' => [
+ 'since' => '11.0.2',
+ 'required' => true,
+ 'description' => 'The type of the call: one2one, group or public',
+ 'example' => 'one2one',
+ ],
+ ],
+ ],
'email' => [
'author' => 'Nextcloud',
'app' => 'sharebymail',
diff --git a/lib/public/Settings/IIconSection.php b/lib/public/Settings/IIconSection.php
new file mode 100644
index 00000000000..089b9b094e9
--- /dev/null
+++ b/lib/public/Settings/IIconSection.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017, Joas Schilling <coding@schilljs.com>
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Settings;
+
+/**
+ * @since 12
+ */
+interface IIconSection extends ISection {
+ /**
+ * returns the relative path to an 16*16 icon describing the section.
+ * e.g. '/core/img/places/files.svg'
+ *
+ * @returns string
+ * @since 12
+ */
+ public function getIcon();
+}
diff --git a/lib/public/Settings/ISection.php b/lib/public/Settings/ISection.php
index 5edf5de0ca4..3c08b74bdc9 100644
--- a/lib/public/Settings/ISection.php
+++ b/lib/public/Settings/ISection.php
@@ -24,6 +24,7 @@
namespace OCP\Settings;
/**
+ * @deprecated 12 Use IIconSection instead
* @since 9.1
*/
interface ISection {
diff --git a/settings/Controller/AdminSettingsController.php b/settings/Controller/AdminSettingsController.php
index ef70caf5690..4bc986e708e 100644
--- a/settings/Controller/AdminSettingsController.php
+++ b/settings/Controller/AdminSettingsController.php
@@ -28,7 +28,9 @@ use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\INavigationManager;
use OCP\IRequest;
+use OCP\Settings\IIconSection;
use OCP\Settings\IManager as ISettingsManager;
+use OCP\Settings\ISection;
use OCP\Template;
/**
@@ -133,10 +135,16 @@ class AdminSettingsController extends Controller {
/** @var \OC\Settings\Section[] $prioritizedSections */
foreach($sections as $prioritizedSections) {
foreach ($prioritizedSections as $section) {
+ $icon = '';
+ if ($section instanceof IIconSection) {
+ $icon = $section->getIcon();
+ }
+
$templateParameters[] = [
'anchor' => $section->getID(),
'section-name' => $section->getName(),
'active' => $section->getID() === $currentSection,
+ 'icon' => $icon,
];
}
}
diff --git a/settings/Controller/UsersController.php b/settings/Controller/UsersController.php
index 28b8d2648d9..43a38432499 100644
--- a/settings/Controller/UsersController.php
+++ b/settings/Controller/UsersController.php
@@ -346,13 +346,12 @@ class UsersController extends Controller {
}
if (empty($groups)) {
- $groups = $this->groupManager->getSubAdmin()->getSubAdminsGroups($currentUser);
- // New class returns IGroup[] so convert back
- $gids = [];
- foreach ($groups as $group) {
- $gids[] = $group->getGID();
- }
- $groups = $gids;
+ return new DataResponse(
+ array(
+ 'message' => $this->l10n->t('No valid group selected'),
+ ),
+ Http::STATUS_FORBIDDEN
+ );
}
}
@@ -380,7 +379,7 @@ class UsersController extends Controller {
);
}
- if($user instanceof User) {
+ if($user instanceof IUser) {
if($groups !== null) {
foreach($groups as $groupName) {
$group = $this->groupManager->get($groupName);
diff --git a/settings/ajax/togglegroups.php b/settings/ajax/togglegroups.php
deleted file mode 100644
index b9958bef0c9..00000000000
--- a/settings/ajax/togglegroups.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Bart Visscher <bartv@thisnet.nl>
- * @author Christopher Schäpers <kondou@ts.unde.re>
- * @author Georg Ehrke <georg@owncloud.com>
- * @author Jakob Sack <mail@jakobsack.de>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Robin Appelman <robin@icewind.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-OC_JSON::checkSubAdminUser();
-OCP\JSON::callCheck();
-
-$lastConfirm = (int) \OC::$server->getSession()->get('last-password-confirm');
-if ($lastConfirm < (time() - 30 * 60 + 15)) { // allow 15 seconds delay
- $l = \OC::$server->getL10N('core');
- OC_JSON::error(array( 'data' => array( 'message' => $l->t('Password confirmation is required'))));
- exit();
-}
-
-$success = true;
-$username = (string)$_POST['username'];
-$group = (string)$_POST['group'];
-
-if($username === OC_User::getUser() && $group === "admin" && OC_User::isAdminUser($username)) {
- $l = \OC::$server->getL10N('core');
- OC_JSON::error(array( 'data' => array( 'message' => $l->t('Admins can\'t remove themself from the admin group'))));
- exit();
-}
-
-$isUserAccessible = false;
-$isGroupAccessible = false;
-$currentUserObject = \OC::$server->getUserSession()->getUser();
-$targetUserObject = \OC::$server->getUserManager()->get($username);
-$targetGroupObject = \OC::$server->getGroupManager()->get($group);
-if($targetUserObject !== null && $currentUserObject !== null && $targetGroupObject !== null) {
- $isUserAccessible = \OC::$server->getGroupManager()->getSubAdmin()->isUserAccessible($currentUserObject, $targetUserObject);
- $isGroupAccessible = \OC::$server->getGroupManager()->getSubAdmin()->isSubAdminofGroup($currentUserObject, $targetGroupObject);
-}
-
-if(!OC_User::isAdminUser(OC_User::getUser())
- && (!$isUserAccessible
- || !$isGroupAccessible)) {
- $l = \OC::$server->getL10N('core');
- OC_JSON::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
- exit();
-}
-
-if(!OC_Group::groupExists($group)) {
- OC_Group::createGroup($group);
-}
-
-$l = \OC::$server->getL10N('settings');
-
-$error = $l->t("Unable to add user to group %s", $group);
-$action = "add";
-
-// Toggle group
-if( OC_Group::inGroup( $username, $group )) {
- $action = "remove";
- $error = $l->t("Unable to remove user from group %s", $group);
- $success = OC_Group::removeFromGroup( $username, $group );
- $usersInGroup=OC_Group::usersInGroup($group);
-}
-else{
- $success = OC_Group::addToGroup( $username, $group );
-}
-
-// Return Success story
-if( $success ) {
- OC_JSON::success(array("data" => array( "username" => $username, "action" => $action, "groupname" => $group )));
-}
-else{
- OC_JSON::error(array("data" => array( "message" => $error )));
-}
diff --git a/settings/css/settings.css b/settings/css/settings.css
index 46394d3f03d..c0c79ca65ef 100644
--- a/settings/css/settings.css
+++ b/settings/css/settings.css
@@ -7,6 +7,26 @@ input#openid, input#webdav { width:20em; }
/* PERSONAL */
+/* icons for sidebar */
+.nav-icon-personal-settings {
+ background-image: url('../img/personal.svg?v=1');
+}
+.nav-icon-sessions {
+ background-image: url('../img/toggle-filelist.svg?v=1');
+}
+.nav-icon-apppasswords {
+ background-image: url('../img/password.svg?v=1');
+}
+.nav-icon-clientsbox {
+ background-image: url('../img/change.svg?v=1');
+}
+.nav-icon-federated-cloud {
+ background-image: url('../img/share.svg?v=1');
+}
+.nav-icon-second-factor-backup-codes {
+ background-image: url('../img/password.svg?v=1');
+}
+
#avatarform {
width: 160px;
padding-right: 0;
@@ -104,7 +124,7 @@ input#openid, input#webdav { width:20em; }
}
#personal-settings-container > div > form span[class^="icon-checkmark"] {
position: absolute;
- left: 239px;
+ left: 228px;
top: 82px;
pointer-events: none;
}
@@ -399,7 +419,7 @@ table.grid th, table.grid td {
font-weight: normal;
}
td.name, td.password { padding-left:.8em; }
-td.password>img,td.displayName>img, td.remove>a, td.quota>img { visibility:hidden; }
+td.password>img,td.displayName>img, td.remove>a, td.quota>img { visibility:hidden; vertical-align: middle;}
td.password, td.quota, td.displayName { width:12em; cursor:pointer; }
td.password>span, td.quota>span, rd.displayName>span { margin-right: 1.2em; color: #C7C7C7; }
span.usersLastLoginTooltip { white-space: nowrap; }
@@ -492,6 +512,12 @@ input.userFilter {width: 200px;}
/* APPS */
+#app-content > svg.app-filter {
+ float: left;
+ height: 0;
+ width: 0;
+}
+
.appinfo { margin: 1em 40px; }
#app-navigation .appwarning {
background: #fcc;
@@ -542,6 +568,10 @@ span.version {
flex-wrap: wrap;
align-content: flex-start;
}
+#apps-list.hidden {
+ display: none;
+}
+
#apps-list .section {
position: relative;
flex: 0 0 auto;
@@ -551,6 +581,26 @@ span.version {
flex-basis: 90%;
}
+#apps-list .app-description p {
+ margin: 10px 0;
+}
+#apps-list .app-description ul {
+ list-style: disc;
+}
+#apps-list .app-description ol {
+ list-style: decimal;
+}
+#apps-list .app-description > ul,
+#apps-list .app-description > ol {
+ margin-left: 19px;
+}
+#apps-list .app-description ol ol,
+#apps-list .app-description ol ul,
+#apps-list .app-description ul ol,
+#apps-list .app-description ul ul {
+ padding-left: 15px;
+}
+
@media (min-width: 1601px) {
#apps-list .section {
width: 22%;
@@ -634,9 +684,6 @@ form.section {
.app-description {
clear: both;
}
-.app-description pre {
- white-space: pre-line;
-}
#apps-list .groups-enable {
margin-top: 8px;
@@ -686,6 +733,17 @@ table.grid td.date{
}
/* ADMIN */
+
+/* Navigation icons */
+#app-navigation img {
+ margin-bottom: -3px;
+ margin-right: 6px;
+ width: 16px;
+}
+#app-navigation li span.no-icon {
+ padding-left: 32px;
+}
+
#security-warning li {
list-style: initial;
margin: 10px 0;
@@ -787,9 +845,9 @@ span.indeterminate {
/* PASSWORD */
#passwordform .strengthify-wrapper {
position: absolute;
- left: 186px;
- width: 131px;
- margin-top: -7px;
+ left: 0;
+ width: 130px;
+ margin-top: -6px;
}
/* OPERA hack for strengthify*/
diff --git a/settings/img/change.svg b/settings/img/change.svg
new file mode 100644
index 00000000000..cbc5d982b30
--- /dev/null
+++ b/settings/img/change.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1">
+ <path d="m7.9375 0c-3.1175 0.023214-6.0756 1.876-7.3438 4.9375l2.7812 1.1563c1.0568-2.5513 3.98-3.7756 6.5312-2.7188 0.8628 0.3573 1.5738 0.9274 2.0938 1.625l-2 2h6v-6l-1.875 1.875c-0.802-0.9616-1.825-1.7688-3.063-2.2812-1.02-0.4227-2.0853-0.60149-3.1245-0.59375z"/>
+ <path d="m0 9.5v6l2.0938-2.094c0.7676 0.843 1.7205 1.535 2.8437 2 4.082 1.691 8.7775-0.262 10.468-4.344l-2.781-1.1558c-1.057 2.5508-3.98 3.7758-6.5312 2.7188-0.7435-0.308-1.3509-0.805-1.8438-1.375l1.75-1.75h-6z"/>
+</svg>
diff --git a/settings/img/password.svg b/settings/img/password.svg
new file mode 100644
index 00000000000..3d161917f6e
--- /dev/null
+++ b/settings/img/password.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 71 100"><path d="M35.5 6.25c-13.807 0-25 11.193-25 25v12.5H4.25V87.5h62.5V43.75H60.5v-12.5c0-13.807-11.194-25-25-25zm0 12.5c6.904 0 12.5 5.596 12.5 12.5v12.5H23v-12.5c0-6.904 5.596-12.5 12.5-12.5z"/></svg> \ No newline at end of file
diff --git a/settings/img/share.svg b/settings/img/share.svg
new file mode 100644
index 00000000000..68f2100e490
--- /dev/null
+++ b/settings/img/share.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 16 16"><path d="M12.228 1a2.457 2.457 0 0 0-2.46 2.454c0 .075.01.15.016.224L5.05 6.092a2.445 2.445 0 0 0-1.596-.586A2.453 2.453 0 0 0 1 7.96a2.453 2.453 0 0 0 2.454 2.455 2.45 2.45 0 0 0 1.46-.477l4.865 2.474c-.004.044-.01.09-.01.134a2.457 2.457 0 1 0 .804-1.818l-4.696-2.4c.02-.123.035-.25.035-.378 0-.072-.01-.144-.015-.214l4.74-2.414A2.457 2.457 0 1 0 12.228.99z"/></svg> \ No newline at end of file
diff --git a/settings/img/toggle-filelist.svg b/settings/img/toggle-filelist.svg
new file mode 100644
index 00000000000..47f019057ea
--- /dev/null
+++ b/settings/img/toggle-filelist.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 16 16" version="1"><rect rx=".5" ry=".5" height="4" width="4" y="1" x="1"/><rect rx=".5" ry=".5" height="1" width="9" y="2" x="6"/><rect rx=".5" ry=".5" height="4" width="4" y="6" x="1"/><rect rx=".5" ry=".5" height="1" width="9" y="7" x="6"/><rect rx=".5" ry=".5" height="4" width="4" y="11" x="1"/><rect rx=".5" ry=".5" height="1" width="9" y="12" x="6"/></svg> \ No newline at end of file
diff --git a/settings/js/apps.js b/settings/js/apps.js
index 61d817e43e4..1538e71a491 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -19,6 +19,8 @@ Handlebars.registerHelper('level', function() {
OC.Settings = OC.Settings || {};
OC.Settings.Apps = OC.Settings.Apps || {
+ markedOptions: {},
+
setupGroupsSelect: function($elements) {
OC.Settings.setupGroupsSelect($elements, {
placeholder: t('core', 'All')
@@ -186,6 +188,25 @@ OC.Settings.Apps = OC.Settings.Apps || {
app.author = app.author['@value'];
}
+ // Parse markdown in app description
+ app.description = DOMPurify.sanitize(
+ marked(app.description.trim(), OC.Settings.Apps.markedOptions),
+ {
+ SAFE_FOR_JQUERY: true,
+ ALLOWED_TAGS: [
+ 'strong',
+ 'p',
+ 'a',
+ 'ul',
+ 'ol',
+ 'li',
+ 'em',
+ 'del',
+ 'blockquote'
+ ]
+ }
+ );
+
var html = template(app);
if (selector) {
selector.html(html);
@@ -633,6 +654,50 @@ OC.Settings.Apps = OC.Settings.Apps || {
* Initializes the apps list
*/
initialize: function($el) {
+
+ var renderer = new marked.Renderer();
+ renderer.link = function(href, title, text) {
+ try {
+ var prot = decodeURIComponent(unescape(href))
+ .replace(/[^\w:]/g, '')
+ .toLowerCase();
+ } catch (e) {
+ return '';
+ }
+
+ if (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {
+ return '';
+ }
+
+ var out = '<a href="' + href + '" rel="noreferrer noopener"';
+ if (title) {
+ out += ' title="' + title + '"';
+ }
+ out += '>' + text + '</a>';
+ return out;
+ };
+ renderer.image = function(href, title, text) {
+ if (text) {
+ return text;
+ }
+ return title;
+ };
+ renderer.blockquote = function(quote) {
+ return quote;
+ };
+
+ OC.Settings.Apps.markedOptions = {
+ renderer: renderer,
+ gfm: false,
+ highlight: false,
+ tables: false,
+ breaks: false,
+ pedantic: false,
+ sanitize: true,
+ smartLists: true,
+ smartypants: false
+ };
+
OC.Plugins.register('OCA.Search', OC.Settings.Apps.Search);
OC.Settings.Apps.loadCategories();
OC.Util.History.addOnPopStateHandler(_.bind(this._onPopState, this));
diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js
index cfe01c17530..aac1609bce7 100644
--- a/settings/js/users/groups.js
+++ b/settings/js/users/groups.js
@@ -225,7 +225,9 @@ GroupList = {
toggleAddGroup: function (event) {
if (GroupList.isAddGroupButtonVisible()) {
- event.stopPropagation();
+ if (event) {
+ event.stopPropagation();
+ }
$('#newgroup-form').show();
$('#newgroup-init').hide();
$('#newgroupname').focus();
diff --git a/settings/js/users/users.js b/settings/js/users/users.js
index a2ccc059f15..3cf7b5e810a 100644
--- a/settings/js/users/users.js
+++ b/settings/js/users/users.js
@@ -420,42 +420,63 @@ var UserList = {
var $element = $(element);
- var checkHandler = null;
+ var addUserToGroup = null,
+ removeUserFromGroup = null;
if(user) { // Only if in a user row, and not the #newusergroups select
- checkHandler = function (group) {
- if (user === OC.currentUser && group === 'admin') {
+ var handleUserGroupMembership = function (group, add) {
+ if (user === OC.getCurrentUser().uid && group === 'admin') {
return false;
}
if (!OC.isUserAdmin() && checked.length === 1 && checked[0] === group) {
return false;
}
- $.post(
- OC.filePath('settings', 'ajax', 'togglegroups.php'),
- {
- username: user,
- group: group
+
+ if (add && OC.isUserAdmin() && UserList.availableGroups.indexOf(group) === -1) {
+ GroupList.createGroup(group);
+ if (UserList.availableGroups.indexOf(group) === -1) {
+ UserList.availableGroups.push(group);
+ }
+ }
+
+ $.ajax({
+ url: OC.linkToOCS('cloud/users/' + user , 2) + 'groups',
+ data: {
+ groupid: group
},
- function (response) {
- if (response.status === 'success') {
- GroupList.update();
- var groupName = response.data.groupname;
- if (UserList.availableGroups.indexOf(groupName) === -1 &&
- response.data.action === 'add'
- ) {
- UserList.availableGroups.push(groupName);
- }
+ type: add ? 'POST' : 'DELETE',
+ beforeSend: function (request) {
+ request.setRequestHeader('Accept', 'application/json');
+ },
+ success: function() {
+ GroupList.update();
+ if (add && UserList.availableGroups.indexOf(group) === -1) {
+ UserList.availableGroups.push(group);
+ }
- if (response.data.action === 'add') {
- GroupList.incGroupCount(groupName);
- } else {
- GroupList.decGroupCount(groupName);
- }
+ if (add) {
+ GroupList.incGroupCount(group);
+ } else {
+ GroupList.decGroupCount(group);
}
- if (response.data.message) {
- OC.Notification.show(response.data.message);
+ },
+ error: function() {
+ if (add) {
+ OC.Notification.show(t('settings', 'Unable to add user to group {group}', {
+ group: group
+ }));
+ } else {
+ OC.Notification.show(t('settings', 'Unable to remove user from group {group}', {
+ group: group
+ }));
}
}
- );
+ });
+ };
+ addUserToGroup = function (group) {
+ return handleUserGroupMembership(group, true);
+ };
+ removeUserFromGroup = function (group) {
+ return handleUserGroupMembership(group, false);
};
}
var addGroup = function (select, group) {
@@ -473,8 +494,8 @@ var UserList = {
createText: label,
selectedFirst: true,
checked: checked,
- oncheck: checkHandler,
- onuncheck: checkHandler,
+ oncheck: addUserToGroup,
+ onuncheck: removeUserFromGroup,
minWidth: 100
});
},
diff --git a/settings/l10n/ar.js b/settings/l10n/ar.js
index f23e16c9091..7567276456c 100644
--- a/settings/l10n/ar.js
+++ b/settings/l10n/ar.js
@@ -15,9 +15,6 @@ OC.L10N.register(
"Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل",
"Your full name has been changed." : "اسمك الكامل تم تغييره.",
"Email saved" : "تم حفظ البريد الإلكتروني",
- "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين",
- "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s",
- "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s",
"Couldn't update app." : "تعذر تحديث التطبيق.",
"Sending..." : "جاري الارسال ...",
"All" : "الكل",
@@ -95,6 +92,9 @@ OC.L10N.register(
"set new password" : "اعداد كلمة مرور جديدة",
"Default" : "افتراضي",
"Language changed" : "تم تغيير اللغة",
+ "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين",
+ "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s",
+ "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.",
"Please wait...." : "الرجاء الانتظار ...",
"Everything (fatal issues, errors, warnings, info, debug)" : "كل شيء (مشاكل فادحة, اخطاء , تحذيرات , معلومات , تصحيح الاخطاء)",
diff --git a/settings/l10n/ar.json b/settings/l10n/ar.json
index 7f9fbff55d3..a44eebfbfa8 100644
--- a/settings/l10n/ar.json
+++ b/settings/l10n/ar.json
@@ -13,9 +13,6 @@
"Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل",
"Your full name has been changed." : "اسمك الكامل تم تغييره.",
"Email saved" : "تم حفظ البريد الإلكتروني",
- "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين",
- "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s",
- "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s",
"Couldn't update app." : "تعذر تحديث التطبيق.",
"Sending..." : "جاري الارسال ...",
"All" : "الكل",
@@ -93,6 +90,9 @@
"set new password" : "اعداد كلمة مرور جديدة",
"Default" : "افتراضي",
"Language changed" : "تم تغيير اللغة",
+ "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين",
+ "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s",
+ "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.",
"Please wait...." : "الرجاء الانتظار ...",
"Everything (fatal issues, errors, warnings, info, debug)" : "كل شيء (مشاكل فادحة, اخطاء , تحذيرات , معلومات , تصحيح الاخطاء)",
diff --git a/settings/l10n/ast.js b/settings/l10n/ast.js
index 743e0a2f967..5c0a54c4083 100644
--- a/settings/l10n/ast.js
+++ b/settings/l10n/ast.js
@@ -18,9 +18,6 @@ OC.L10N.register(
"Your full name has been changed." : "Camudóse'l nome completu.",
"Email saved" : "Corréu-e guardáu",
"Couldn't remove app." : "Nun pudo desaniciase l'aplicación.",
- "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador",
- "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s",
- "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s",
"Couldn't update app." : "Nun pudo anovase l'aplicación.",
"Add trusted domain" : "Amestar dominiu de confianza",
"Sending..." : "Unviando...",
@@ -131,6 +128,9 @@ OC.L10N.register(
"set new password" : "afitar nueva contraseña",
"Default" : "Predetermináu",
"Language changed" : "Camudóse la llingua",
+ "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador",
+ "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s",
+ "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿De xuru que quies amestar \"{domain}\" como dominiu de confianza?",
"Please wait...." : "Espera, por favor....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Too (Información, Avisos, Fallos, debug y problemes fatales)",
diff --git a/settings/l10n/ast.json b/settings/l10n/ast.json
index 25ec57af772..847b3822dc3 100644
--- a/settings/l10n/ast.json
+++ b/settings/l10n/ast.json
@@ -16,9 +16,6 @@
"Your full name has been changed." : "Camudóse'l nome completu.",
"Email saved" : "Corréu-e guardáu",
"Couldn't remove app." : "Nun pudo desaniciase l'aplicación.",
- "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador",
- "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s",
- "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s",
"Couldn't update app." : "Nun pudo anovase l'aplicación.",
"Add trusted domain" : "Amestar dominiu de confianza",
"Sending..." : "Unviando...",
@@ -129,6 +126,9 @@
"set new password" : "afitar nueva contraseña",
"Default" : "Predetermináu",
"Language changed" : "Camudóse la llingua",
+ "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador",
+ "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s",
+ "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿De xuru que quies amestar \"{domain}\" como dominiu de confianza?",
"Please wait...." : "Espera, por favor....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Too (Información, Avisos, Fallos, debug y problemes fatales)",
diff --git a/settings/l10n/az.js b/settings/l10n/az.js
index baa771e4def..a48f28672bc 100644
--- a/settings/l10n/az.js
+++ b/settings/l10n/az.js
@@ -32,9 +32,6 @@ OC.L10N.register(
"Unable to change mail address" : "Mail ünvanını dəyişmək olmur",
"Email saved" : "Məktub yadda saxlanıldı",
"Couldn't remove app." : "Proqram təminatını silmək mümkün olmadı.",
- "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz",
- "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı",
- "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı",
"Couldn't update app." : "Proqram təminatını yeniləmək mümkün deyil.",
"Add trusted domain" : "İnamlı domainlərə əlavə et",
"Sending..." : "Göndərilir...",
@@ -184,6 +181,9 @@ OC.L10N.register(
"Default" : "Susmaya görə",
"log-level out of allowed range" : "jurnal-səviyyəsi izin verilən aralıqdan kənardır",
"Language changed" : "Dil dəyişdirildi",
+ "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz",
+ "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı",
+ "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" adını inamlı domainlər siyahısına əlavə etməyinizdən əminsinizmi?",
"Please wait...." : "Xahiş olunur gözləyəsiniz.",
"Everything (fatal issues, errors, warnings, info, debug)" : "Hər şey(ən pis hadisələr, səhvlər, xəbərdarlıqlar, məlmat, araşdırma səhvləri)",
diff --git a/settings/l10n/az.json b/settings/l10n/az.json
index 203c526ba55..c1c57e15a07 100644
--- a/settings/l10n/az.json
+++ b/settings/l10n/az.json
@@ -30,9 +30,6 @@
"Unable to change mail address" : "Mail ünvanını dəyişmək olmur",
"Email saved" : "Məktub yadda saxlanıldı",
"Couldn't remove app." : "Proqram təminatını silmək mümkün olmadı.",
- "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz",
- "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı",
- "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı",
"Couldn't update app." : "Proqram təminatını yeniləmək mümkün deyil.",
"Add trusted domain" : "İnamlı domainlərə əlavə et",
"Sending..." : "Göndərilir...",
@@ -182,6 +179,9 @@
"Default" : "Susmaya görə",
"log-level out of allowed range" : "jurnal-səviyyəsi izin verilən aralıqdan kənardır",
"Language changed" : "Dil dəyişdirildi",
+ "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz",
+ "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı",
+ "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" adını inamlı domainlər siyahısına əlavə etməyinizdən əminsinizmi?",
"Please wait...." : "Xahiş olunur gözləyəsiniz.",
"Everything (fatal issues, errors, warnings, info, debug)" : "Hər şey(ən pis hadisələr, səhvlər, xəbərdarlıqlar, məlmat, araşdırma səhvləri)",
diff --git a/settings/l10n/bg_BG.js b/settings/l10n/bg_BG.js
index 02f75415856..51edd407da4 100644
--- a/settings/l10n/bg_BG.js
+++ b/settings/l10n/bg_BG.js
@@ -32,9 +32,6 @@ OC.L10N.register(
"Unable to change mail address" : "Неуспешна промяна на адрес на електронна поща",
"Email saved" : "Имейлът е запазен",
"Couldn't remove app." : "Приложението не бе премахнато.",
- "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".",
- "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.",
- "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.",
"Couldn't update app." : "Приложението не бе обновено.",
"Add trusted domain" : "Добавяне на сигурен домейн",
"Sending..." : "Изпращане...",
@@ -228,6 +225,9 @@ OC.L10N.register(
"Default" : "Стандарт",
"log-level out of allowed range" : "Ниво на проследяване \\(log-level\\) e извън допустимия обхват",
"Language changed" : "Езикът е променен",
+ "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".",
+ "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.",
+ "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Сигурен/на ли сте, че искате \"{domain}\" да бъде добавен като сигурен домейн?",
"Please wait...." : "Моля, изчакайте....",
"iPhone" : "iPhone",
diff --git a/settings/l10n/bg_BG.json b/settings/l10n/bg_BG.json
index 054f5cdfda0..0443f8489af 100644
--- a/settings/l10n/bg_BG.json
+++ b/settings/l10n/bg_BG.json
@@ -30,9 +30,6 @@
"Unable to change mail address" : "Неуспешна промяна на адрес на електронна поща",
"Email saved" : "Имейлът е запазен",
"Couldn't remove app." : "Приложението не бе премахнато.",
- "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".",
- "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.",
- "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.",
"Couldn't update app." : "Приложението не бе обновено.",
"Add trusted domain" : "Добавяне на сигурен домейн",
"Sending..." : "Изпращане...",
@@ -226,6 +223,9 @@
"Default" : "Стандарт",
"log-level out of allowed range" : "Ниво на проследяване \\(log-level\\) e извън допустимия обхват",
"Language changed" : "Езикът е променен",
+ "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".",
+ "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.",
+ "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Сигурен/на ли сте, че искате \"{domain}\" да бъде добавен като сигурен домейн?",
"Please wait...." : "Моля, изчакайте....",
"iPhone" : "iPhone",
diff --git a/settings/l10n/bn_BD.js b/settings/l10n/bn_BD.js
index 8b47f30f20d..195745a1b8e 100644
--- a/settings/l10n/bn_BD.js
+++ b/settings/l10n/bn_BD.js
@@ -12,9 +12,6 @@ OC.L10N.register(
"Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।",
"Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে",
"Couldn't remove app." : "অ্যাপ অপসারণ করা গেলনা",
- "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না",
- "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ",
- "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না",
"Couldn't update app." : "অ্যাপ নবায়ন করা গেলনা।",
"All" : "সবাই",
"Error while disabling app" : "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ",
@@ -72,6 +69,9 @@ OC.L10N.register(
"set new password" : "নতুন কূটশব্দ নির্ধারণ করুন",
"Default" : "পূর্বনির্ধারিত",
"Language changed" : "ভাষা পরিবর্তন করা হয়েছে",
+ "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না",
+ "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ",
+ "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না",
"More" : "বেশী",
"Less" : "কম",
"Group" : "গোষ্ঠীসমূহ"
diff --git a/settings/l10n/bn_BD.json b/settings/l10n/bn_BD.json
index 716f5e23e75..6c6794cbe26 100644
--- a/settings/l10n/bn_BD.json
+++ b/settings/l10n/bn_BD.json
@@ -10,9 +10,6 @@
"Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।",
"Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে",
"Couldn't remove app." : "অ্যাপ অপসারণ করা গেলনা",
- "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না",
- "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ",
- "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না",
"Couldn't update app." : "অ্যাপ নবায়ন করা গেলনা।",
"All" : "সবাই",
"Error while disabling app" : "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ",
@@ -70,6 +67,9 @@
"set new password" : "নতুন কূটশব্দ নির্ধারণ করুন",
"Default" : "পূর্বনির্ধারিত",
"Language changed" : "ভাষা পরিবর্তন করা হয়েছে",
+ "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না",
+ "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ",
+ "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না",
"More" : "বেশী",
"Less" : "কম",
"Group" : "গোষ্ঠীসমূহ"
diff --git a/settings/l10n/bs.js b/settings/l10n/bs.js
index ec346198073..f1d6d4a48e7 100644
--- a/settings/l10n/bs.js
+++ b/settings/l10n/bs.js
@@ -28,9 +28,6 @@ OC.L10N.register(
"Unable to change mail address" : "Nemoguće je izmjeniti adresu e-pošte",
"Email saved" : "E-pošta je spremljena",
"Couldn't remove app." : "Nije moguće ukloniti aplikaciju.",
- "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
- "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
- "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Couldn't update app." : "Ažuriranje aplikacije nije moguće.",
"Add trusted domain" : "Dodaj pouzdanu domenu",
"Sending..." : "Slanje...",
@@ -158,6 +155,9 @@ OC.L10N.register(
"change email address" : "promjeni adresu e-pošte",
"Default" : "Zadano",
"Language changed" : "Jezik je promijenjen",
+ "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
+ "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
+ "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li zaista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
"Please wait...." : "Molim pričekajte...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Sve (fatalni problemi, greške, upozorenja, info, ispravljanje pogrešaka)",
diff --git a/settings/l10n/bs.json b/settings/l10n/bs.json
index 364c0bab5a6..b45efaeea0c 100644
--- a/settings/l10n/bs.json
+++ b/settings/l10n/bs.json
@@ -26,9 +26,6 @@
"Unable to change mail address" : "Nemoguće je izmjeniti adresu e-pošte",
"Email saved" : "E-pošta je spremljena",
"Couldn't remove app." : "Nije moguće ukloniti aplikaciju.",
- "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
- "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
- "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Couldn't update app." : "Ažuriranje aplikacije nije moguće.",
"Add trusted domain" : "Dodaj pouzdanu domenu",
"Sending..." : "Slanje...",
@@ -156,6 +153,9 @@
"change email address" : "promjeni adresu e-pošte",
"Default" : "Zadano",
"Language changed" : "Jezik je promijenjen",
+ "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
+ "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
+ "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li zaista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
"Please wait...." : "Molim pričekajte...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Sve (fatalni problemi, greške, upozorenja, info, ispravljanje pogrešaka)",
diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js
index b7c54a09206..917f5d41e4e 100644
--- a/settings/l10n/ca.js
+++ b/settings/l10n/ca.js
@@ -34,9 +34,6 @@ OC.L10N.register(
"Unable to change mail address" : "No es pot canviar l'adreça de correu electrònic",
"Email saved" : "S'ha desat el correu electrònic",
"Couldn't remove app." : "No s'ha pogut eliminar l'aplicació",
- "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin",
- "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s",
- "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s",
"Couldn't update app." : "No s'ha pogut actualitzar l'aplicació.",
"Add trusted domain" : "Afegir domini de confiança",
"Migration in progress. Please wait until the migration is finished" : "Migració en progrés. Si us plau, espereu fins que finalitzi la migració",
@@ -204,6 +201,9 @@ OC.L10N.register(
"Default" : "Per defecte",
"log-level out of allowed range" : "Nivell d'autenticació fora del rang permès",
"Language changed" : "S'ha canviat l'idioma",
+ "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin",
+ "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s",
+ "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?",
"Please wait...." : "Espereu...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tot (problemes fatals, errors, avisos, informació, depuració)",
diff --git a/settings/l10n/ca.json b/settings/l10n/ca.json
index 62a7867f23a..67b310b196e 100644
--- a/settings/l10n/ca.json
+++ b/settings/l10n/ca.json
@@ -32,9 +32,6 @@
"Unable to change mail address" : "No es pot canviar l'adreça de correu electrònic",
"Email saved" : "S'ha desat el correu electrònic",
"Couldn't remove app." : "No s'ha pogut eliminar l'aplicació",
- "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin",
- "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s",
- "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s",
"Couldn't update app." : "No s'ha pogut actualitzar l'aplicació.",
"Add trusted domain" : "Afegir domini de confiança",
"Migration in progress. Please wait until the migration is finished" : "Migració en progrés. Si us plau, espereu fins que finalitzi la migració",
@@ -202,6 +199,9 @@
"Default" : "Per defecte",
"log-level out of allowed range" : "Nivell d'autenticació fora del rang permès",
"Language changed" : "S'ha canviat l'idioma",
+ "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin",
+ "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s",
+ "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?",
"Please wait...." : "Espereu...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tot (problemes fatals, errors, avisos, informació, depuració)",
diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js
index 0d06d1a6042..0ce52997e1c 100644
--- a/settings/l10n/cs_CZ.js
+++ b/settings/l10n/cs_CZ.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "Email uložen",
"Password confirmation is required" : "Je vyžadováno potvrzení hesla",
"Couldn't remove app." : "Nepodařilo se odebrat aplikaci.",
- "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
- "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s",
- "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s",
"Couldn't update app." : "Nelze aktualizovat aplikaci.",
"Are you really sure you want add {domain} as trusted domain?" : "Jste si jisti, že chcete přidat {domain} mezi důvěryhodné domény?",
"Add trusted domain" : "Přidat důvěryhodnou doménu",
@@ -125,6 +122,8 @@ OC.L10N.register(
"undo" : "vrátit zpět",
"never" : "nikdy",
"deleted {userName}" : "smazán {userName}",
+ "Unable to add user to group {group}" : "Nelze přidat uživatele do skupiny {group}",
+ "Unable to remove user from group {group}" : "Nelze odebrat uživatele ze skupiny {group}",
"Add group" : "Přidat skupinu",
"Invalid quota value \"{val}\"" : "Neplatná hodnota kvóty \"{val}\"",
"no group" : "není ve skupině",
@@ -341,6 +340,9 @@ OC.L10N.register(
"Default" : "Výchozí",
"log-level out of allowed range" : "úroveň logování z povoleného rozpětí",
"Language changed" : "Jazyk byl změněn",
+ "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
+ "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s",
+ "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jste si jisti, že chcete přidat \"{domain}\" mezi důvěryhodné domény?",
"Please wait...." : "Čekejte prosím...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json
index 30ce1f499e0..78f17d4f827 100644
--- a/settings/l10n/cs_CZ.json
+++ b/settings/l10n/cs_CZ.json
@@ -37,9 +37,6 @@
"Email saved" : "Email uložen",
"Password confirmation is required" : "Je vyžadováno potvrzení hesla",
"Couldn't remove app." : "Nepodařilo se odebrat aplikaci.",
- "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
- "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s",
- "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s",
"Couldn't update app." : "Nelze aktualizovat aplikaci.",
"Are you really sure you want add {domain} as trusted domain?" : "Jste si jisti, že chcete přidat {domain} mezi důvěryhodné domény?",
"Add trusted domain" : "Přidat důvěryhodnou doménu",
@@ -123,6 +120,8 @@
"undo" : "vrátit zpět",
"never" : "nikdy",
"deleted {userName}" : "smazán {userName}",
+ "Unable to add user to group {group}" : "Nelze přidat uživatele do skupiny {group}",
+ "Unable to remove user from group {group}" : "Nelze odebrat uživatele ze skupiny {group}",
"Add group" : "Přidat skupinu",
"Invalid quota value \"{val}\"" : "Neplatná hodnota kvóty \"{val}\"",
"no group" : "není ve skupině",
@@ -339,6 +338,9 @@
"Default" : "Výchozí",
"log-level out of allowed range" : "úroveň logování z povoleného rozpětí",
"Language changed" : "Jazyk byl změněn",
+ "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
+ "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s",
+ "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jste si jisti, že chcete přidat \"{domain}\" mezi důvěryhodné domény?",
"Please wait...." : "Čekejte prosím...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/da.js b/settings/l10n/da.js
index b715757bb98..474007513ce 100644
--- a/settings/l10n/da.js
+++ b/settings/l10n/da.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Kan ikke ændre mailadresse",
"Email saved" : "E-mailadressen er gemt",
"Couldn't remove app." : "Kunne ikke fjerne app'en.",
- "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen",
- "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s",
- "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s",
"Couldn't update app." : "Kunne ikke opdatere app'en.",
"Add trusted domain" : "Tilføj et domæne som du har tillid til",
"Migration in progress. Please wait until the migration is finished" : "Immigration er i gang. Vent venligst indtil overflytningen er afsluttet",
@@ -224,6 +221,9 @@ OC.L10N.register(
"Default" : "Standard",
"log-level out of allowed range" : "niveau for logregistrering går ud over tilladte interval",
"Language changed" : "Sprog ændret",
+ "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen",
+ "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s",
+ "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sikker på at du vil tilføje \"{domain}\" som et domæne du har tiilid til?",
"Please wait...." : "Vent venligst...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alt (alvorlige fejl, fejl, advarsler, info, debug)",
diff --git a/settings/l10n/da.json b/settings/l10n/da.json
index 3bfbca279de..70af6ed51a0 100644
--- a/settings/l10n/da.json
+++ b/settings/l10n/da.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Kan ikke ændre mailadresse",
"Email saved" : "E-mailadressen er gemt",
"Couldn't remove app." : "Kunne ikke fjerne app'en.",
- "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen",
- "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s",
- "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s",
"Couldn't update app." : "Kunne ikke opdatere app'en.",
"Add trusted domain" : "Tilføj et domæne som du har tillid til",
"Migration in progress. Please wait until the migration is finished" : "Immigration er i gang. Vent venligst indtil overflytningen er afsluttet",
@@ -222,6 +219,9 @@
"Default" : "Standard",
"log-level out of allowed range" : "niveau for logregistrering går ud over tilladte interval",
"Language changed" : "Sprog ændret",
+ "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen",
+ "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s",
+ "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sikker på at du vil tilføje \"{domain}\" som et domæne du har tiilid til?",
"Please wait...." : "Vent venligst...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alt (alvorlige fejl, fejl, advarsler, info, debug)",
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index 4baf07cb9a9..291c98e06c2 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "E-Mail-Adresse gespeichert",
"Password confirmation is required" : "Passwortbestätigung ist erforderlich",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
- "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.",
- "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
- "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Couldn't update app." : "Die App konnte nicht aktualisiert werden.",
"Are you really sure you want add {domain} as trusted domain?" : "Bist du sicher, dass du {domain} als vertrauenswürdige Domain hinzufügen möchtest?",
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
@@ -125,6 +122,8 @@ OC.L10N.register(
"undo" : "rückgängig machen",
"never" : "niemals",
"deleted {userName}" : "{userName} gelöscht",
+ "Unable to add user to group {group}" : "Benutzer kann nicht zur Gruppe {group} hinzugefügt werden ",
+ "Unable to remove user from group {group}" : "Benutzer kann nicht aus der Gruppe {group} entfernt werden ",
"Add group" : "Gruppe hinzufügen",
"Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"",
"no group" : "Keine Gruppe",
@@ -139,7 +138,7 @@ OC.L10N.register(
"Unlimited" : "Unbegrenzt",
"Personal info" : "Persönliche Informationen",
"Sessions" : "Sitzungen",
- "App passwords" : "App-Passwörter",
+ "App passwords" : "App-PINs",
"Sync clients" : "Sync-Clients",
"None" : "Nichts",
"Login" : "Anmelden",
@@ -276,7 +275,7 @@ OC.L10N.register(
"Email" : "E-Mail",
"Your email address" : "Deine E-Mail-Adresse",
"No email address set" : "Keine E-Mail-Adresse angegeben",
- "For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen",
+ "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen",
"Phone number" : "Telefonnummer",
"Your phone number" : "Deine Telefonnummer",
"Address" : "Adresse",
@@ -341,6 +340,9 @@ OC.L10N.register(
"Default" : "Standard",
"log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"Language changed" : "Sprache geändert",
+ "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.",
+ "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
+ "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist du sicher, dass du „{domain}“ als vertrauenswürdige Domain hinzufügen möchtest?",
"Please wait...." : "Bitte warten…",
"iPhone" : "iPhone",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index 2b69afd9886..f881ef48004 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -37,9 +37,6 @@
"Email saved" : "E-Mail-Adresse gespeichert",
"Password confirmation is required" : "Passwortbestätigung ist erforderlich",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
- "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.",
- "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
- "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Couldn't update app." : "Die App konnte nicht aktualisiert werden.",
"Are you really sure you want add {domain} as trusted domain?" : "Bist du sicher, dass du {domain} als vertrauenswürdige Domain hinzufügen möchtest?",
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
@@ -123,6 +120,8 @@
"undo" : "rückgängig machen",
"never" : "niemals",
"deleted {userName}" : "{userName} gelöscht",
+ "Unable to add user to group {group}" : "Benutzer kann nicht zur Gruppe {group} hinzugefügt werden ",
+ "Unable to remove user from group {group}" : "Benutzer kann nicht aus der Gruppe {group} entfernt werden ",
"Add group" : "Gruppe hinzufügen",
"Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"",
"no group" : "Keine Gruppe",
@@ -137,7 +136,7 @@
"Unlimited" : "Unbegrenzt",
"Personal info" : "Persönliche Informationen",
"Sessions" : "Sitzungen",
- "App passwords" : "App-Passwörter",
+ "App passwords" : "App-PINs",
"Sync clients" : "Sync-Clients",
"None" : "Nichts",
"Login" : "Anmelden",
@@ -274,7 +273,7 @@
"Email" : "E-Mail",
"Your email address" : "Deine E-Mail-Adresse",
"No email address set" : "Keine E-Mail-Adresse angegeben",
- "For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen",
+ "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen",
"Phone number" : "Telefonnummer",
"Your phone number" : "Deine Telefonnummer",
"Address" : "Adresse",
@@ -339,6 +338,9 @@
"Default" : "Standard",
"log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"Language changed" : "Sprache geändert",
+ "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.",
+ "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
+ "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist du sicher, dass du „{domain}“ als vertrauenswürdige Domain hinzufügen möchtest?",
"Please wait...." : "Bitte warten…",
"iPhone" : "iPhone",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index 2463552498f..4e55788e56c 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "E-Mail-Adresse gespeichert",
"Password confirmation is required" : "Passwortbestätigung ist erforderlich",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
- "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen",
- "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
- "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Couldn't update app." : "Die App konnte nicht aktualisiert werden.",
"Are you really sure you want add {domain} as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie {domain} als vertrauenswürdige Domain hinzufügen möchten?",
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
@@ -125,6 +122,8 @@ OC.L10N.register(
"undo" : "rückgängig machen",
"never" : "niemals",
"deleted {userName}" : "{userName} gelöscht",
+ "Unable to add user to group {group}" : "Benutzer kann nicht zur Gruppe {group} hinzugefügt werden ",
+ "Unable to remove user from group {group}" : "Benutzer kann nicht aus der Gruppe {group} entfernt werden ",
"Add group" : "Gruppe hinzufügen",
"Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"",
"no group" : "Keine Gruppe",
@@ -139,7 +138,7 @@ OC.L10N.register(
"Unlimited" : "Unbegrenzt",
"Personal info" : "Persönliche Informationen",
"Sessions" : "Sitzungen",
- "App passwords" : "App-Passwörter",
+ "App passwords" : "App-PINs",
"Sync clients" : "Sync-Clients",
"None" : "Keine",
"Login" : "Anmelden",
@@ -276,7 +275,7 @@ OC.L10N.register(
"Email" : "E-Mail",
"Your email address" : "Ihre E-Mail-Adresse",
"No email address set" : "Keine E-Mail-Adresse angegeben",
- "For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen",
+ "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen",
"Phone number" : "Telefonnummer",
"Your phone number" : "Ihre Telefonnummer",
"Address" : "Adresse",
@@ -341,6 +340,9 @@ OC.L10N.register(
"Default" : "Standard",
"log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"Language changed" : "Sprache geändert",
+ "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen",
+ "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
+ "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie »{domain}« als vertrauenswürdige Domain hinzufügen möchten?",
"Please wait...." : "Bitte warten…",
"iPhone" : "iPhone",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index 01c0883803d..8d4674d04eb 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -37,9 +37,6 @@
"Email saved" : "E-Mail-Adresse gespeichert",
"Password confirmation is required" : "Passwortbestätigung ist erforderlich",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
- "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen",
- "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
- "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Couldn't update app." : "Die App konnte nicht aktualisiert werden.",
"Are you really sure you want add {domain} as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie {domain} als vertrauenswürdige Domain hinzufügen möchten?",
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
@@ -123,6 +120,8 @@
"undo" : "rückgängig machen",
"never" : "niemals",
"deleted {userName}" : "{userName} gelöscht",
+ "Unable to add user to group {group}" : "Benutzer kann nicht zur Gruppe {group} hinzugefügt werden ",
+ "Unable to remove user from group {group}" : "Benutzer kann nicht aus der Gruppe {group} entfernt werden ",
"Add group" : "Gruppe hinzufügen",
"Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"",
"no group" : "Keine Gruppe",
@@ -137,7 +136,7 @@
"Unlimited" : "Unbegrenzt",
"Personal info" : "Persönliche Informationen",
"Sessions" : "Sitzungen",
- "App passwords" : "App-Passwörter",
+ "App passwords" : "App-PINs",
"Sync clients" : "Sync-Clients",
"None" : "Keine",
"Login" : "Anmelden",
@@ -274,7 +273,7 @@
"Email" : "E-Mail",
"Your email address" : "Ihre E-Mail-Adresse",
"No email address set" : "Keine E-Mail-Adresse angegeben",
- "For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen",
+ "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen",
"Phone number" : "Telefonnummer",
"Your phone number" : "Ihre Telefonnummer",
"Address" : "Adresse",
@@ -339,6 +338,9 @@
"Default" : "Standard",
"log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"Language changed" : "Sprache geändert",
+ "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen",
+ "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
+ "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie »{domain}« als vertrauenswürdige Domain hinzufügen möchten?",
"Please wait...." : "Bitte warten…",
"iPhone" : "iPhone",
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index 2918b6d753c..3d64829cea6 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας",
"Email saved" : "Το email αποθηκεύτηκε ",
"Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.",
- "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών",
- "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s",
- "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s",
"Couldn't update app." : "Αδυναμία ενημέρωσης εφαρμογής",
"Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή",
"Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση",
@@ -279,6 +276,9 @@ OC.L10N.register(
"Default" : "Προκαθορισμένο",
"log-level out of allowed range" : "Το επίπεδο καταγραφής είναι εκτός του επιτρεπόμενου πεδίου",
"Language changed" : "Η γλώσσα άλλαξε",
+ "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών",
+ "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s",
+ "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;",
"Please wait...." : "Παρακαλώ περιμένετε...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index 0a5630b7ac1..e0be5bf283b 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας",
"Email saved" : "Το email αποθηκεύτηκε ",
"Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.",
- "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών",
- "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s",
- "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s",
"Couldn't update app." : "Αδυναμία ενημέρωσης εφαρμογής",
"Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή",
"Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση",
@@ -277,6 +274,9 @@
"Default" : "Προκαθορισμένο",
"log-level out of allowed range" : "Το επίπεδο καταγραφής είναι εκτός του επιτρεπόμενου πεδίου",
"Language changed" : "Η γλώσσα άλλαξε",
+ "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών",
+ "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s",
+ "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;",
"Please wait...." : "Παρακαλώ περιμένετε...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js
index 34acd971716..930205ba494 100644
--- a/settings/l10n/en_GB.js
+++ b/settings/l10n/en_GB.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Unable to change mail address",
"Email saved" : "Email saved",
"Couldn't remove app." : "Couldn't remove app.",
- "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group",
- "Unable to add user to group %s" : "Unable to add user to group %s",
- "Unable to remove user from group %s" : "Unable to remove user from group %s",
"Couldn't update app." : "Couldn't update app.",
"Add trusted domain" : "Add trusted domain",
"Migration in progress. Please wait until the migration is finished" : "Migration in progress. Please wait until the migration is finished",
@@ -264,6 +261,9 @@ OC.L10N.register(
"Default" : "Default",
"log-level out of allowed range" : "log-level out of allowed range",
"Language changed" : "Language changed",
+ "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group",
+ "Unable to add user to group %s" : "Unable to add user to group %s",
+ "Unable to remove user from group %s" : "Unable to remove user from group %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?",
"Please wait...." : "Please wait....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)",
diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json
index 6fe3e756980..0584f6a5bb1 100644
--- a/settings/l10n/en_GB.json
+++ b/settings/l10n/en_GB.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Unable to change mail address",
"Email saved" : "Email saved",
"Couldn't remove app." : "Couldn't remove app.",
- "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group",
- "Unable to add user to group %s" : "Unable to add user to group %s",
- "Unable to remove user from group %s" : "Unable to remove user from group %s",
"Couldn't update app." : "Couldn't update app.",
"Add trusted domain" : "Add trusted domain",
"Migration in progress. Please wait until the migration is finished" : "Migration in progress. Please wait until the migration is finished",
@@ -262,6 +259,9 @@
"Default" : "Default",
"log-level out of allowed range" : "log-level out of allowed range",
"Language changed" : "Language changed",
+ "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group",
+ "Unable to add user to group %s" : "Unable to add user to group %s",
+ "Unable to remove user from group %s" : "Unable to remove user from group %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?",
"Please wait...." : "Please wait....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)",
diff --git a/settings/l10n/eo.js b/settings/l10n/eo.js
index 4406664c16d..57bacd60c50 100644
--- a/settings/l10n/eo.js
+++ b/settings/l10n/eo.js
@@ -14,9 +14,6 @@ OC.L10N.register(
"Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon",
"Your full name has been changed." : "Via plena nomo ŝanĝitas.",
"Email saved" : "La retpoŝtadreso konserviĝis",
- "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.",
- "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s",
- "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s",
"Couldn't update app." : "Ne eblis ĝisdatigi la aplikaĵon.",
"Sending..." : "Sendante...",
"All" : "Ĉio",
@@ -124,6 +121,9 @@ OC.L10N.register(
"change email address" : "ŝanĝi retpoŝtadreson",
"Default" : "Defaŭlta",
"Language changed" : "La lingvo estas ŝanĝita",
+ "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.",
+ "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s",
+ "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s",
"Please wait...." : "Bonvolu atendi...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Ĉio (fatalaĵoj, eraroj, avertoj, informoj, sencimigaj mesaĝoj)",
"Info, warnings, errors and fatal issues" : "Informoj, avertoj, eraroj kaj fatalaĵoj",
diff --git a/settings/l10n/eo.json b/settings/l10n/eo.json
index 977c235a952..adb48f15be5 100644
--- a/settings/l10n/eo.json
+++ b/settings/l10n/eo.json
@@ -12,9 +12,6 @@
"Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon",
"Your full name has been changed." : "Via plena nomo ŝanĝitas.",
"Email saved" : "La retpoŝtadreso konserviĝis",
- "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.",
- "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s",
- "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s",
"Couldn't update app." : "Ne eblis ĝisdatigi la aplikaĵon.",
"Sending..." : "Sendante...",
"All" : "Ĉio",
@@ -122,6 +119,9 @@
"change email address" : "ŝanĝi retpoŝtadreson",
"Default" : "Defaŭlta",
"Language changed" : "La lingvo estas ŝanĝita",
+ "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.",
+ "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s",
+ "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s",
"Please wait...." : "Bonvolu atendi...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Ĉio (fatalaĵoj, eraroj, avertoj, informoj, sencimigaj mesaĝoj)",
"Info, warnings, errors and fatal issues" : "Informoj, avertoj, eraroj kaj fatalaĵoj",
diff --git a/settings/l10n/es.js b/settings/l10n/es.js
index 251015180a1..cd2b201dc37 100644
--- a/settings/l10n/es.js
+++ b/settings/l10n/es.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "Correo electrónico guardado",
"Password confirmation is required" : "Se requiere confirmar la contraseña",
"Couldn't remove app." : "No se pudo eliminar la aplicación.",
- "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
- "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
- "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Couldn't update app." : "No se pudo actualizar la aplicación.",
"Are you really sure you want add {domain} as trusted domain?" : "¿Está realmente seguro de que quiere añadir {domain} como dominio de confianza?",
"Add trusted domain" : "Agregar dominio de confianza",
@@ -341,6 +338,9 @@ OC.L10N.register(
"Default" : "Predeterminado",
"log-level out of allowed range" : "Nivel de autenticación fuera del rango permitido",
"Language changed" : "Idioma cambiado",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
+ "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?",
"Please wait...." : "Espere, por favor....",
"iPhone" : "iPhone",
diff --git a/settings/l10n/es.json b/settings/l10n/es.json
index 04f9f551f20..1bd74a37d12 100644
--- a/settings/l10n/es.json
+++ b/settings/l10n/es.json
@@ -37,9 +37,6 @@
"Email saved" : "Correo electrónico guardado",
"Password confirmation is required" : "Se requiere confirmar la contraseña",
"Couldn't remove app." : "No se pudo eliminar la aplicación.",
- "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
- "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
- "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Couldn't update app." : "No se pudo actualizar la aplicación.",
"Are you really sure you want add {domain} as trusted domain?" : "¿Está realmente seguro de que quiere añadir {domain} como dominio de confianza?",
"Add trusted domain" : "Agregar dominio de confianza",
@@ -339,6 +336,9 @@
"Default" : "Predeterminado",
"log-level out of allowed range" : "Nivel de autenticación fuera del rango permitido",
"Language changed" : "Idioma cambiado",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
+ "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?",
"Please wait...." : "Espere, por favor....",
"iPhone" : "iPhone",
diff --git a/settings/l10n/es_AR.js b/settings/l10n/es_AR.js
index 6822b46a57a..a557cec74b1 100644
--- a/settings/l10n/es_AR.js
+++ b/settings/l10n/es_AR.js
@@ -16,9 +16,6 @@ OC.L10N.register(
"Unable to change full name" : "Imposible cambiar el nombre completo",
"Your full name has been changed." : "Su nombre completo ha sido cambiado.",
"Email saved" : "e-mail guardado",
- "Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ",
- "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s",
- "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s",
"Couldn't update app." : "No se pudo actualizar la App.",
"Sending..." : "Enviando...",
"All" : "Todos",
@@ -103,6 +100,9 @@ OC.L10N.register(
"set new password" : "Configurar nueva contraseña",
"Default" : "Predeterminado",
"Language changed" : "Idioma cambiado",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ",
+ "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s",
"Please wait...." : "Por favor, esperá....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (notificaciones fatales, errores, advertencias, info, debug)",
"Info, warnings, errors and fatal issues" : "Info, advertencias, errores y notificaciones fatales",
diff --git a/settings/l10n/es_AR.json b/settings/l10n/es_AR.json
index 9ec6ee099c5..2d6ed9b8c32 100644
--- a/settings/l10n/es_AR.json
+++ b/settings/l10n/es_AR.json
@@ -14,9 +14,6 @@
"Unable to change full name" : "Imposible cambiar el nombre completo",
"Your full name has been changed." : "Su nombre completo ha sido cambiado.",
"Email saved" : "e-mail guardado",
- "Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ",
- "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s",
- "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s",
"Couldn't update app." : "No se pudo actualizar la App.",
"Sending..." : "Enviando...",
"All" : "Todos",
@@ -101,6 +98,9 @@
"set new password" : "Configurar nueva contraseña",
"Default" : "Predeterminado",
"Language changed" : "Idioma cambiado",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ",
+ "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s",
"Please wait...." : "Por favor, esperá....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (notificaciones fatales, errores, advertencias, info, debug)",
"Info, warnings, errors and fatal issues" : "Info, advertencias, errores y notificaciones fatales",
diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js
index 09c843f9fa6..c07e9a94267 100644
--- a/settings/l10n/es_MX.js
+++ b/settings/l10n/es_MX.js
@@ -14,9 +14,6 @@ OC.L10N.register(
"Unable to change full name" : "No se puede cambiar el nombre completo",
"Your full name has been changed." : "Se ha cambiado su nombre completo.",
"Email saved" : "Correo electrónico guardado",
- "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
- "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
- "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Couldn't update app." : "No se pudo actualizar la aplicación.",
"All" : "Todos",
"Error while disabling app" : "Error mientras se desactivaba la aplicación",
@@ -79,6 +76,9 @@ OC.L10N.register(
"set new password" : "establecer nueva contraseña",
"Default" : "Predeterminado",
"Language changed" : "Idioma cambiado",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
+ "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Please wait...." : "Espere, por favor....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)",
"Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales",
diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json
index e2a78820f11..0eca2bb49ae 100644
--- a/settings/l10n/es_MX.json
+++ b/settings/l10n/es_MX.json
@@ -12,9 +12,6 @@
"Unable to change full name" : "No se puede cambiar el nombre completo",
"Your full name has been changed." : "Se ha cambiado su nombre completo.",
"Email saved" : "Correo electrónico guardado",
- "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
- "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
- "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Couldn't update app." : "No se pudo actualizar la aplicación.",
"All" : "Todos",
"Error while disabling app" : "Error mientras se desactivaba la aplicación",
@@ -77,6 +74,9 @@
"set new password" : "establecer nueva contraseña",
"Default" : "Predeterminado",
"Language changed" : "Idioma cambiado",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
+ "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Please wait...." : "Espere, por favor....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)",
"Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales",
diff --git a/settings/l10n/et_EE.js b/settings/l10n/et_EE.js
index 76b2854ff70..58ebcc50cd3 100644
--- a/settings/l10n/et_EE.js
+++ b/settings/l10n/et_EE.js
@@ -30,9 +30,6 @@ OC.L10N.register(
"Unable to change mail address" : "E-posti aadressi muutmine ebaõnnestus",
"Email saved" : "Kiri on salvestatud",
"Couldn't remove app." : "Ei suutnud rakendit eemaldada.",
- "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada",
- "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s",
- "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s",
"Couldn't update app." : "Rakenduse uuendamine ebaõnnestus.",
"Add trusted domain" : "Lis ausaldusväärne domeen",
"Migration in progress. Please wait until the migration is finished" : "Kolimine on käimas. Palun oota, kuni see on lõpetatud",
@@ -197,6 +194,9 @@ OC.L10N.register(
"change email address" : "muuda e-posti aadressi",
"Default" : "Vaikeväärtus",
"Language changed" : "Keel on muudetud",
+ "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada",
+ "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s",
+ "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Oled sa kindel, et soovid lisada domeeni \"{domain}\" usaldusväärseks domeeniks?",
"Please wait...." : "Palun oota...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Kõik (tõsised probleemid, veateated, hoiatused, info, veatuvastus)",
diff --git a/settings/l10n/et_EE.json b/settings/l10n/et_EE.json
index 678d1072bb6..d8732c4e338 100644
--- a/settings/l10n/et_EE.json
+++ b/settings/l10n/et_EE.json
@@ -28,9 +28,6 @@
"Unable to change mail address" : "E-posti aadressi muutmine ebaõnnestus",
"Email saved" : "Kiri on salvestatud",
"Couldn't remove app." : "Ei suutnud rakendit eemaldada.",
- "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada",
- "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s",
- "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s",
"Couldn't update app." : "Rakenduse uuendamine ebaõnnestus.",
"Add trusted domain" : "Lis ausaldusväärne domeen",
"Migration in progress. Please wait until the migration is finished" : "Kolimine on käimas. Palun oota, kuni see on lõpetatud",
@@ -195,6 +192,9 @@
"change email address" : "muuda e-posti aadressi",
"Default" : "Vaikeväärtus",
"Language changed" : "Keel on muudetud",
+ "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada",
+ "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s",
+ "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Oled sa kindel, et soovid lisada domeeni \"{domain}\" usaldusväärseks domeeniks?",
"Please wait...." : "Palun oota...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Kõik (tõsised probleemid, veateated, hoiatused, info, veatuvastus)",
diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js
index 996ea37e205..ac332f20a21 100644
--- a/settings/l10n/eu.js
+++ b/settings/l10n/eu.js
@@ -29,9 +29,6 @@ OC.L10N.register(
"Unable to change mail address" : "Ezin izan da posta helbidea aldatu",
"Email saved" : "Eposta gorde da",
"Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..",
- "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik",
- "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu",
- "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu",
"Couldn't update app." : "Ezin izan da aplikazioa eguneratu.",
"Add trusted domain" : "Gehitu domeinu fidagarria",
"Sending..." : "Bidaltzen...",
@@ -165,6 +162,9 @@ OC.L10N.register(
"Default" : "Lehenetsia",
"log-level out of allowed range" : "erregistro-maila baimendutako tartetik at",
"Language changed" : "Hizkuntza aldatuta",
+ "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik",
+ "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu",
+ "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ziur zaude gehitu nahi duzula \"{domain}\" domeinu fidagarri gisa?",
"Please wait...." : "Itxoin mesedez...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Dena (arazo larriak, erroreak, abisuak, informazioa, arazketa)",
diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json
index 0643dd34ab5..a7d45148ef3 100644
--- a/settings/l10n/eu.json
+++ b/settings/l10n/eu.json
@@ -27,9 +27,6 @@
"Unable to change mail address" : "Ezin izan da posta helbidea aldatu",
"Email saved" : "Eposta gorde da",
"Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..",
- "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik",
- "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu",
- "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu",
"Couldn't update app." : "Ezin izan da aplikazioa eguneratu.",
"Add trusted domain" : "Gehitu domeinu fidagarria",
"Sending..." : "Bidaltzen...",
@@ -163,6 +160,9 @@
"Default" : "Lehenetsia",
"log-level out of allowed range" : "erregistro-maila baimendutako tartetik at",
"Language changed" : "Hizkuntza aldatuta",
+ "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik",
+ "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu",
+ "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ziur zaude gehitu nahi duzula \"{domain}\" domeinu fidagarri gisa?",
"Please wait...." : "Itxoin mesedez...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Dena (arazo larriak, erroreak, abisuak, informazioa, arazketa)",
diff --git a/settings/l10n/fa.js b/settings/l10n/fa.js
index 350c9e24b21..712d52864e2 100644
--- a/settings/l10n/fa.js
+++ b/settings/l10n/fa.js
@@ -28,9 +28,6 @@ OC.L10N.register(
"Unable to change mail address" : "تغییر آدرس ایمیل امکان‌پذیر نیست",
"Email saved" : "ایمیل ذخیره شد",
"Couldn't remove app." : "امکان حذف برنامه وجود ندارد.",
- "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند",
- "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست",
- "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست",
"Couldn't update app." : "برنامه را نمی توان به هنگام ساخت.",
"Add trusted domain" : "افزودن دامنه مورد اعتماد",
"Migration in progress. Please wait until the migration is finished" : "مهاجرت در حال اجراست. لطفا تا اتمام مهاجرت صبر کنید",
@@ -189,6 +186,9 @@ OC.L10N.register(
"change email address" : "تغییر آدرس ایمیل ",
"Default" : "پیش فرض",
"Language changed" : "زبان تغییر کرد",
+ "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند",
+ "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست",
+ "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست",
"Please wait...." : "لطفا صبر کنید ...",
"Everything (fatal issues, errors, warnings, info, debug)" : "همه موارد (مشکلات مهلک، خطاها، اخطارها، اطلاعات، خطایابی)",
"Info, warnings, errors and fatal issues" : "اطلاعات، اخطارها، خطاها، مشکلات اساسی",
diff --git a/settings/l10n/fa.json b/settings/l10n/fa.json
index 1b75b935e24..33fcfe51a99 100644
--- a/settings/l10n/fa.json
+++ b/settings/l10n/fa.json
@@ -26,9 +26,6 @@
"Unable to change mail address" : "تغییر آدرس ایمیل امکان‌پذیر نیست",
"Email saved" : "ایمیل ذخیره شد",
"Couldn't remove app." : "امکان حذف برنامه وجود ندارد.",
- "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند",
- "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست",
- "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست",
"Couldn't update app." : "برنامه را نمی توان به هنگام ساخت.",
"Add trusted domain" : "افزودن دامنه مورد اعتماد",
"Migration in progress. Please wait until the migration is finished" : "مهاجرت در حال اجراست. لطفا تا اتمام مهاجرت صبر کنید",
@@ -187,6 +184,9 @@
"change email address" : "تغییر آدرس ایمیل ",
"Default" : "پیش فرض",
"Language changed" : "زبان تغییر کرد",
+ "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند",
+ "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست",
+ "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست",
"Please wait...." : "لطفا صبر کنید ...",
"Everything (fatal issues, errors, warnings, info, debug)" : "همه موارد (مشکلات مهلک، خطاها، اخطارها، اطلاعات، خطایابی)",
"Info, warnings, errors and fatal issues" : "اطلاعات، اخطارها، خطاها، مشکلات اساسی",
diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js
index 22170fe0e9b..dc9a7672601 100644
--- a/settings/l10n/fi_FI.js
+++ b/settings/l10n/fi_FI.js
@@ -35,9 +35,6 @@ OC.L10N.register(
"Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut",
"Email saved" : "Sähköposti tallennettu",
"Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.",
- "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä",
- "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu",
- "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu",
"Couldn't update app." : "Sovelluksen päivitys epäonnistui.",
"Add trusted domain" : "Lisää luotettu toimialue",
"Migration in progress. Please wait until the migration is finished" : "Migraatio on kesken. Odota kunnes migraatio valmistuu",
@@ -245,6 +242,9 @@ OC.L10N.register(
"Default" : "Oletus",
"log-level out of allowed range" : "lokitaso ei sallittujen rajojen sisäpuolella",
"Language changed" : "Kieli on vaihdettu",
+ "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä",
+ "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu",
+ "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Haluatko varmasti liittää kohteen \"{domain}\" luotetuksi toimialueeksi?",
"Please wait...." : "Odota hetki...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Kaikki (vakavat ongelmat, virheet, varoitukset, tiedot, vianjäljitys)",
diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json
index 93730c125ff..c241717a604 100644
--- a/settings/l10n/fi_FI.json
+++ b/settings/l10n/fi_FI.json
@@ -33,9 +33,6 @@
"Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut",
"Email saved" : "Sähköposti tallennettu",
"Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.",
- "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä",
- "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu",
- "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu",
"Couldn't update app." : "Sovelluksen päivitys epäonnistui.",
"Add trusted domain" : "Lisää luotettu toimialue",
"Migration in progress. Please wait until the migration is finished" : "Migraatio on kesken. Odota kunnes migraatio valmistuu",
@@ -243,6 +240,9 @@
"Default" : "Oletus",
"log-level out of allowed range" : "lokitaso ei sallittujen rajojen sisäpuolella",
"Language changed" : "Kieli on vaihdettu",
+ "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä",
+ "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu",
+ "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Haluatko varmasti liittää kohteen \"{domain}\" luotetuksi toimialueeksi?",
"Please wait...." : "Odota hetki...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Kaikki (vakavat ongelmat, virheet, varoitukset, tiedot, vianjäljitys)",
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index da1108667eb..994250c4fae 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -30,7 +30,7 @@ OC.L10N.register(
"Your %s account was created" : "Votre compte %s a été créé",
"Unable to delete user." : "Impossible de supprimer l'utilisateur.",
"Settings saved" : "Paramètres sauvegardés",
- "Unable to change full name" : "Impossible de changer le nom complet",
+ "Unable to change full name" : "Impossible de modifier le nom complet",
"Unable to change email address" : "Impossible de modifier l'adresse e-mail",
"Your full name has been changed." : "Votre nom complet a été modifié.",
"Forbidden" : "Interdit",
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "E-mail sauvegardé",
"Password confirmation is required" : "Confirmation par mot de passe est requise",
"Couldn't remove app." : "Impossible de supprimer l'application.",
- "Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin",
- "Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s",
- "Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s",
"Couldn't update app." : "Impossible de mettre à jour l'application",
"Are you really sure you want add {domain} as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter {domain} comme domaine de confiance ?",
"Add trusted domain" : "Ajouter un domaine de confiance",
@@ -125,6 +122,8 @@ OC.L10N.register(
"undo" : "annuler",
"never" : "jamais",
"deleted {userName}" : "{userName} supprimé",
+ "Unable to add user to group {group}" : "Impossible d'ajouter l'utilisateur au groupe {group}",
+ "Unable to remove user from group {group}" : "Impossible de supprimer l'utilisateur du groupe {group}",
"Add group" : "Ajouter un groupe",
"Invalid quota value \"{val}\"" : "Valeur de quota invalide \"{val}\"",
"no group" : "aucun groupe",
@@ -220,8 +219,8 @@ OC.L10N.register(
"Exclude groups from sharing" : "Empêcher certains groupes de partager",
"These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets doivent être indiqués.",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement. (Visible seulement quand la liste des fichiers est masquée.)",
- "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera visible sur la page publique de téléversement quand la liste des fichiers est masquée.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement (seulement lorsque la liste des fichiers est masquée).",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera affiché sur la page publique de téléversement lorsque la liste des fichiers est masquée.",
"Tips & tricks" : "Trucs et astuces",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite est actuellement utilisé comme système de gestion de base de données. Pour des installations plus volumineuses, nous vous recommandons de migrer vers un autre système de gestion de base de données.",
"This is particularly recommended when using the desktop client for file synchronisation." : "C'est particulièrement recommandé lorsque l'on utilise un client bureau pour la synchronisation des fichiers.",
@@ -299,9 +298,9 @@ OC.L10N.register(
"If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Si vous voulez apporter votre appui au projet {contributeopen}joignez-vous à son développement{linkclose} ou {contributeopen}passez le mot{linkclose}!",
"Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion",
"Web, desktop and mobile clients currently logged in to your account." : "Clients web, desktop et mobiles actuellement connectés sur votre compte.",
- "Device" : "Périphérique",
+ "Device" : "Appareil",
"Last activity" : "Dernière activité",
- "Passcodes that give an app or device permissions to access your account." : "Un mot de passe d'application est un mot de passe qui autorise une application ou un périphérique d'accéder à votre compte.",
+ "Passcodes that give an app or device permissions to access your account." : "Codes de sécurité autorisant une application ou un appareil à accéder à votre compte.",
"Name" : "Nom",
"App name" : "Nom de l'application",
"Create new app password" : "Créer un nouveau mot de passe d'application",
@@ -341,6 +340,9 @@ OC.L10N.register(
"Default" : "Défaut",
"log-level out of allowed range" : "niveau de journalisation hors borne",
"Language changed" : "Langue changée",
+ "Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin",
+ "Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s",
+ "Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter \"{domain}\" comme domaine de confiance ?",
"Please wait...." : "Veuillez patienter…",
"iPhone" : "iPhone",
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index bfeab18cf7d..351a9d4f8c4 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -28,7 +28,7 @@
"Your %s account was created" : "Votre compte %s a été créé",
"Unable to delete user." : "Impossible de supprimer l'utilisateur.",
"Settings saved" : "Paramètres sauvegardés",
- "Unable to change full name" : "Impossible de changer le nom complet",
+ "Unable to change full name" : "Impossible de modifier le nom complet",
"Unable to change email address" : "Impossible de modifier l'adresse e-mail",
"Your full name has been changed." : "Votre nom complet a été modifié.",
"Forbidden" : "Interdit",
@@ -37,9 +37,6 @@
"Email saved" : "E-mail sauvegardé",
"Password confirmation is required" : "Confirmation par mot de passe est requise",
"Couldn't remove app." : "Impossible de supprimer l'application.",
- "Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin",
- "Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s",
- "Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s",
"Couldn't update app." : "Impossible de mettre à jour l'application",
"Are you really sure you want add {domain} as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter {domain} comme domaine de confiance ?",
"Add trusted domain" : "Ajouter un domaine de confiance",
@@ -123,6 +120,8 @@
"undo" : "annuler",
"never" : "jamais",
"deleted {userName}" : "{userName} supprimé",
+ "Unable to add user to group {group}" : "Impossible d'ajouter l'utilisateur au groupe {group}",
+ "Unable to remove user from group {group}" : "Impossible de supprimer l'utilisateur du groupe {group}",
"Add group" : "Ajouter un groupe",
"Invalid quota value \"{val}\"" : "Valeur de quota invalide \"{val}\"",
"no group" : "aucun groupe",
@@ -218,8 +217,8 @@
"Exclude groups from sharing" : "Empêcher certains groupes de partager",
"These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets doivent être indiqués.",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement. (Visible seulement quand la liste des fichiers est masquée.)",
- "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera visible sur la page publique de téléversement quand la liste des fichiers est masquée.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement (seulement lorsque la liste des fichiers est masquée).",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera affiché sur la page publique de téléversement lorsque la liste des fichiers est masquée.",
"Tips & tricks" : "Trucs et astuces",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite est actuellement utilisé comme système de gestion de base de données. Pour des installations plus volumineuses, nous vous recommandons de migrer vers un autre système de gestion de base de données.",
"This is particularly recommended when using the desktop client for file synchronisation." : "C'est particulièrement recommandé lorsque l'on utilise un client bureau pour la synchronisation des fichiers.",
@@ -297,9 +296,9 @@
"If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Si vous voulez apporter votre appui au projet {contributeopen}joignez-vous à son développement{linkclose} ou {contributeopen}passez le mot{linkclose}!",
"Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion",
"Web, desktop and mobile clients currently logged in to your account." : "Clients web, desktop et mobiles actuellement connectés sur votre compte.",
- "Device" : "Périphérique",
+ "Device" : "Appareil",
"Last activity" : "Dernière activité",
- "Passcodes that give an app or device permissions to access your account." : "Un mot de passe d'application est un mot de passe qui autorise une application ou un périphérique d'accéder à votre compte.",
+ "Passcodes that give an app or device permissions to access your account." : "Codes de sécurité autorisant une application ou un appareil à accéder à votre compte.",
"Name" : "Nom",
"App name" : "Nom de l'application",
"Create new app password" : "Créer un nouveau mot de passe d'application",
@@ -339,6 +338,9 @@
"Default" : "Défaut",
"log-level out of allowed range" : "niveau de journalisation hors borne",
"Language changed" : "Langue changée",
+ "Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin",
+ "Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s",
+ "Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter \"{domain}\" comme domaine de confiance ?",
"Please wait...." : "Veuillez patienter…",
"iPhone" : "iPhone",
diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js
index 8f1ea962f1a..609782e501f 100644
--- a/settings/l10n/gl.js
+++ b/settings/l10n/gl.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Non é posíbel cambiar o enderezo de correo.",
"Email saved" : "Correo gardado",
"Couldn't remove app." : "Non foi posíbel retirar a aplicación.",
- "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin",
- "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s",
- "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s",
"Couldn't update app." : "Non foi posíbel actualizar a aplicación.",
"Add trusted domain" : "Engadir dominio de confianza",
"Migration in progress. Please wait until the migration is finished" : "A migración está en proceso. Agarde a que remate.",
@@ -216,6 +213,9 @@ OC.L10N.register(
"Default" : "Predeterminado",
"log-level out of allowed range" : "o nivel do rexistro está fora do intervalo admitido",
"Language changed" : "O idioma cambiou",
+ "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin",
+ "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s",
+ "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Confirma que quere engadir «{domain}» como dominio de confianza?",
"Please wait...." : "Agarde...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (incidencias críticas, erros, avisos, información, depuración)",
diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json
index 2b4ec949579..4d81d6bfab1 100644
--- a/settings/l10n/gl.json
+++ b/settings/l10n/gl.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Non é posíbel cambiar o enderezo de correo.",
"Email saved" : "Correo gardado",
"Couldn't remove app." : "Non foi posíbel retirar a aplicación.",
- "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin",
- "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s",
- "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s",
"Couldn't update app." : "Non foi posíbel actualizar a aplicación.",
"Add trusted domain" : "Engadir dominio de confianza",
"Migration in progress. Please wait until the migration is finished" : "A migración está en proceso. Agarde a que remate.",
@@ -214,6 +211,9 @@
"Default" : "Predeterminado",
"log-level out of allowed range" : "o nivel do rexistro está fora do intervalo admitido",
"Language changed" : "O idioma cambiou",
+ "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin",
+ "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s",
+ "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Confirma que quere engadir «{domain}» como dominio de confianza?",
"Please wait...." : "Agarde...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (incidencias críticas, erros, avisos, información, depuración)",
diff --git a/settings/l10n/he.js b/settings/l10n/he.js
index 37eaf589d01..8e9e2538327 100644
--- a/settings/l10n/he.js
+++ b/settings/l10n/he.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "לא ניתן לשנות כתובת דואר אלקטרוני",
"Email saved" : "הדואר האלקטרוני נשמר",
"Couldn't remove app." : "לא ניתן להסיר את היישום.",
- "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים",
- "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s",
- "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s",
"Couldn't update app." : "לא ניתן לעדכן את היישום.",
"Add trusted domain" : "הוספת שם מתחם מהימן",
"Migration in progress. Please wait until the migration is finished" : "המרה בביצוע. יש להמתין עד סיום ההמרה",
@@ -258,6 +255,9 @@ OC.L10N.register(
"Default" : "ברירת מחדל",
"log-level out of allowed range" : "גודל הלוג מעבר לרמה המותרת",
"Language changed" : "שפה השתנתה",
+ "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים",
+ "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s",
+ "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "האם באמת להוסיף \"{domain}\" כשם מתחם מהימן?",
"Please wait...." : "נא להמתין…",
"Everything (fatal issues, errors, warnings, info, debug)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)",
diff --git a/settings/l10n/he.json b/settings/l10n/he.json
index fed31aaa2a1..3eace55b4b8 100644
--- a/settings/l10n/he.json
+++ b/settings/l10n/he.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "לא ניתן לשנות כתובת דואר אלקטרוני",
"Email saved" : "הדואר האלקטרוני נשמר",
"Couldn't remove app." : "לא ניתן להסיר את היישום.",
- "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים",
- "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s",
- "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s",
"Couldn't update app." : "לא ניתן לעדכן את היישום.",
"Add trusted domain" : "הוספת שם מתחם מהימן",
"Migration in progress. Please wait until the migration is finished" : "המרה בביצוע. יש להמתין עד סיום ההמרה",
@@ -256,6 +253,9 @@
"Default" : "ברירת מחדל",
"log-level out of allowed range" : "גודל הלוג מעבר לרמה המותרת",
"Language changed" : "שפה השתנתה",
+ "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים",
+ "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s",
+ "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "האם באמת להוסיף \"{domain}\" כשם מתחם מהימן?",
"Please wait...." : "נא להמתין…",
"Everything (fatal issues, errors, warnings, info, debug)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)",
diff --git a/settings/l10n/hr.js b/settings/l10n/hr.js
index 744ed9b410f..267befb6645 100644
--- a/settings/l10n/hr.js
+++ b/settings/l10n/hr.js
@@ -17,9 +17,6 @@ OC.L10N.register(
"Your full name has been changed." : "Vaše puno ime je promijenjeno.",
"Email saved" : "E-pošta spremljena",
"Couldn't remove app." : "Nije moguće ukloniti app.",
- "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
- "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
- "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Couldn't update app." : "Ažuriranje aplikacija nije moguće",
"Add trusted domain" : "Dodajte pouzdanu domenu",
"Sending..." : "Slanje...",
@@ -133,6 +130,9 @@ OC.L10N.register(
"set new password" : "postavite novu lozinku",
"Default" : "Zadano",
"Language changed" : "Promjena jezika",
+ "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
+ "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
+ "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li doista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
"Please wait...." : "Molimo pričekajte...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Sve (kobni problemi, pogreške, upozorenja, ispravljanje pogrešaka)",
diff --git a/settings/l10n/hr.json b/settings/l10n/hr.json
index 1b2c51c42ef..22f56cf81f4 100644
--- a/settings/l10n/hr.json
+++ b/settings/l10n/hr.json
@@ -15,9 +15,6 @@
"Your full name has been changed." : "Vaše puno ime je promijenjeno.",
"Email saved" : "E-pošta spremljena",
"Couldn't remove app." : "Nije moguće ukloniti app.",
- "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
- "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
- "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Couldn't update app." : "Ažuriranje aplikacija nije moguće",
"Add trusted domain" : "Dodajte pouzdanu domenu",
"Sending..." : "Slanje...",
@@ -131,6 +128,9 @@
"set new password" : "postavite novu lozinku",
"Default" : "Zadano",
"Language changed" : "Promjena jezika",
+ "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
+ "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
+ "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li doista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
"Please wait...." : "Molimo pričekajte...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Sve (kobni problemi, pogreške, upozorenja, ispravljanje pogrešaka)",
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index d10f05504c1..73883a1107d 100644
--- a/settings/l10n/hu_HU.js
+++ b/settings/l10n/hu_HU.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "E-mail elmentve!",
"Password confirmation is required" : "Jelszó megerősítés szükséges",
"Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.",
- "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.",
- "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s",
- "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s",
"Couldn't update app." : "Az alkalmazás frissítése nem sikerült.",
"Are you really sure you want add {domain} as trusted domain?" : "Biztos, hogy hozzá akarod adni ezt a megbízható domainekhez: {domain} ?",
"Add trusted domain" : "Megbízható tartomány hozzáadása",
@@ -341,6 +338,9 @@ OC.L10N.register(
"Default" : "Alapértelmezett",
"log-level out of allowed range" : "A naplózási szint a megengedett terjedelmen kívül van.",
"Language changed" : "A nyelv megváltozott",
+ "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.",
+ "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s",
+ "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?",
"Please wait...." : "Kérlek várj...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index ee97655631f..aad4e32d971 100644
--- a/settings/l10n/hu_HU.json
+++ b/settings/l10n/hu_HU.json
@@ -37,9 +37,6 @@
"Email saved" : "E-mail elmentve!",
"Password confirmation is required" : "Jelszó megerősítés szükséges",
"Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.",
- "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.",
- "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s",
- "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s",
"Couldn't update app." : "Az alkalmazás frissítése nem sikerült.",
"Are you really sure you want add {domain} as trusted domain?" : "Biztos, hogy hozzá akarod adni ezt a megbízható domainekhez: {domain} ?",
"Add trusted domain" : "Megbízható tartomány hozzáadása",
@@ -339,6 +336,9 @@
"Default" : "Alapértelmezett",
"log-level out of allowed range" : "A naplózási szint a megengedett terjedelmen kívül van.",
"Language changed" : "A nyelv megváltozott",
+ "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.",
+ "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s",
+ "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?",
"Please wait...." : "Kérlek várj...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/id.js b/settings/l10n/id.js
index 192fcee5e67..42829f7a679 100644
--- a/settings/l10n/id.js
+++ b/settings/l10n/id.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Tidak dapat mengubah alamat email",
"Email saved" : "Email disimpan",
"Couldn't remove app." : "Tidak dapat menghapus aplikasi.",
- "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin",
- "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s",
- "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s",
"Couldn't update app." : "Tidak dapat memperbarui aplikasi.",
"Add trusted domain" : "Tambah domain terpercaya",
"Migration in progress. Please wait until the migration is finished" : "Migrasi sedang dalam proses. Mohon tunggu sampai migrasi selesai.",
@@ -292,6 +289,9 @@ OC.L10N.register(
"Default" : "Default",
"log-level out of allowed range" : "level-log melebihi batas yang diizinkan",
"Language changed" : "Bahasa telah diubah",
+ "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin",
+ "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s",
+ "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah Anda yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?",
"Please wait...." : "Mohon tunggu....",
"iPhone" : "iPhone",
diff --git a/settings/l10n/id.json b/settings/l10n/id.json
index 63d53f1ba14..4b9ed65bd57 100644
--- a/settings/l10n/id.json
+++ b/settings/l10n/id.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Tidak dapat mengubah alamat email",
"Email saved" : "Email disimpan",
"Couldn't remove app." : "Tidak dapat menghapus aplikasi.",
- "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin",
- "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s",
- "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s",
"Couldn't update app." : "Tidak dapat memperbarui aplikasi.",
"Add trusted domain" : "Tambah domain terpercaya",
"Migration in progress. Please wait until the migration is finished" : "Migrasi sedang dalam proses. Mohon tunggu sampai migrasi selesai.",
@@ -290,6 +287,9 @@
"Default" : "Default",
"log-level out of allowed range" : "level-log melebihi batas yang diizinkan",
"Language changed" : "Bahasa telah diubah",
+ "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin",
+ "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s",
+ "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah Anda yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?",
"Please wait...." : "Mohon tunggu....",
"iPhone" : "iPhone",
diff --git a/settings/l10n/is.js b/settings/l10n/is.js
index 5718ce727d5..dd390673589 100644
--- a/settings/l10n/is.js
+++ b/settings/l10n/is.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Get ekki breytt tölvupóstfangi",
"Email saved" : "Tölvupóstfang vistað",
"Couldn't remove app." : "Gat ekki fjarlægt forrit.",
- "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp",
- "Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s",
- "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s",
"Couldn't update app." : "Gat ekki uppfært forrit.",
"Add trusted domain" : "Bæta við treystu léni",
"Migration in progress. Please wait until the migration is finished" : "Yfirfærsla er í gangi. Dokaðu við þar til henni er lokið",
@@ -296,6 +293,9 @@ OC.L10N.register(
"Default" : "Sjálfgefið",
"log-level out of allowed range" : "annálsstig utan leyfðra marka",
"Language changed" : "Tungumáli breytt",
+ "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp",
+ "Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s",
+ "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ertu viss um að þú viljir bæta \"{domain}\" við sem treystu léni?",
"Please wait...." : "Andartak....",
"iPhone" : "iPhone",
diff --git a/settings/l10n/is.json b/settings/l10n/is.json
index 2629549dbc6..f5bf0bee0b9 100644
--- a/settings/l10n/is.json
+++ b/settings/l10n/is.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Get ekki breytt tölvupóstfangi",
"Email saved" : "Tölvupóstfang vistað",
"Couldn't remove app." : "Gat ekki fjarlægt forrit.",
- "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp",
- "Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s",
- "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s",
"Couldn't update app." : "Gat ekki uppfært forrit.",
"Add trusted domain" : "Bæta við treystu léni",
"Migration in progress. Please wait until the migration is finished" : "Yfirfærsla er í gangi. Dokaðu við þar til henni er lokið",
@@ -294,6 +291,9 @@
"Default" : "Sjálfgefið",
"log-level out of allowed range" : "annálsstig utan leyfðra marka",
"Language changed" : "Tungumáli breytt",
+ "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp",
+ "Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s",
+ "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ertu viss um að þú viljir bæta \"{domain}\" við sem treystu léni?",
"Please wait...." : "Andartak....",
"iPhone" : "iPhone",
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index 59b7a06f2a2..6aa08ac59e7 100644
--- a/settings/l10n/it.js
+++ b/settings/l10n/it.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "Email salvata",
"Password confirmation is required" : "La conferma della password è richiesta",
"Couldn't remove app." : "Impossibile rimuovere l'applicazione.",
- "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione",
- "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s",
- "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s",
"Couldn't update app." : "Impossibile aggiornate l'applicazione.",
"Are you really sure you want add {domain} as trusted domain?" : "Sei davvero sicuro di voler aggiungere {domain} come dominio attendibile?",
"Add trusted domain" : "Aggiungi dominio attendibile",
@@ -341,6 +338,9 @@ OC.L10N.register(
"Default" : "Predefinito",
"log-level out of allowed range" : "livello di log fuori dall'intervallo consentito",
"Language changed" : "Lingua modificata",
+ "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione",
+ "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s",
+ "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?",
"Please wait...." : "Attendere...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index 6edd1efd647..08163eef564 100644
--- a/settings/l10n/it.json
+++ b/settings/l10n/it.json
@@ -37,9 +37,6 @@
"Email saved" : "Email salvata",
"Password confirmation is required" : "La conferma della password è richiesta",
"Couldn't remove app." : "Impossibile rimuovere l'applicazione.",
- "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione",
- "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s",
- "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s",
"Couldn't update app." : "Impossibile aggiornate l'applicazione.",
"Are you really sure you want add {domain} as trusted domain?" : "Sei davvero sicuro di voler aggiungere {domain} come dominio attendibile?",
"Add trusted domain" : "Aggiungi dominio attendibile",
@@ -339,6 +336,9 @@
"Default" : "Predefinito",
"log-level out of allowed range" : "livello di log fuori dall'intervallo consentito",
"Language changed" : "Lingua modificata",
+ "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione",
+ "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s",
+ "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?",
"Please wait...." : "Attendere...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index e64915ef5c2..0d103fdcc0a 100644
--- a/settings/l10n/ja.js
+++ b/settings/l10n/ja.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "メールアドレスを保存しました",
"Password confirmation is required" : "パスワードの確認が必要です",
"Couldn't remove app." : "アプリが削除できませんでした。",
- "Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。",
- "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません",
- "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません",
"Couldn't update app." : "アプリをアップデートできませんでした。",
"Are you really sure you want add {domain} as trusted domain?" : "{domain} を信頼できるドメインとして追加してもよろしいですか?",
"Add trusted domain" : "信頼するドメイン名に追加",
@@ -341,6 +338,9 @@ OC.L10N.register(
"Default" : "デフォルト",
"log-level out of allowed range" : "ログレベルが許可された範囲を超えています",
"Language changed" : "言語が変更されました",
+ "Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。",
+ "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません",
+ "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" を信頼するドメインに追加してもよろしいでしょうか?",
"Please wait...." : "しばらくお待ちください...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index c998cccc687..0729101e4ed 100644
--- a/settings/l10n/ja.json
+++ b/settings/l10n/ja.json
@@ -37,9 +37,6 @@
"Email saved" : "メールアドレスを保存しました",
"Password confirmation is required" : "パスワードの確認が必要です",
"Couldn't remove app." : "アプリが削除できませんでした。",
- "Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。",
- "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません",
- "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません",
"Couldn't update app." : "アプリをアップデートできませんでした。",
"Are you really sure you want add {domain} as trusted domain?" : "{domain} を信頼できるドメインとして追加してもよろしいですか?",
"Add trusted domain" : "信頼するドメイン名に追加",
@@ -339,6 +336,9 @@
"Default" : "デフォルト",
"log-level out of allowed range" : "ログレベルが許可された範囲を超えています",
"Language changed" : "言語が変更されました",
+ "Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。",
+ "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません",
+ "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" を信頼するドメインに追加してもよろしいでしょうか?",
"Please wait...." : "しばらくお待ちください...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/ka_GE.js b/settings/l10n/ka_GE.js
index 6371621de15..131f1beb0f3 100644
--- a/settings/l10n/ka_GE.js
+++ b/settings/l10n/ka_GE.js
@@ -5,9 +5,6 @@ OC.L10N.register(
"Email sent" : "იმეილი გაიგზავნა",
"Invalid request" : "არასწორი მოთხოვნა",
"Email saved" : "იმეილი შენახულია",
- "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან",
- "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s",
- "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s",
"Couldn't update app." : "ვერ მოხერხდა აპლიკაციის განახლება.",
"All" : "ყველა",
"Disable" : "გამორთვა",
@@ -56,6 +53,9 @@ OC.L10N.register(
"set new password" : "დააყენეთ ახალი პაროლი",
"Default" : "საწყისი პარამეტრები",
"Language changed" : "ენა შეცვლილია",
+ "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან",
+ "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s",
+ "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s",
"Please wait...." : "დაიცადეთ....",
"Log" : "ლოგი",
"More" : "უფრო მეტი",
diff --git a/settings/l10n/ka_GE.json b/settings/l10n/ka_GE.json
index bd1c1b4dd8c..d2953e86a98 100644
--- a/settings/l10n/ka_GE.json
+++ b/settings/l10n/ka_GE.json
@@ -3,9 +3,6 @@
"Email sent" : "იმეილი გაიგზავნა",
"Invalid request" : "არასწორი მოთხოვნა",
"Email saved" : "იმეილი შენახულია",
- "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან",
- "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s",
- "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s",
"Couldn't update app." : "ვერ მოხერხდა აპლიკაციის განახლება.",
"All" : "ყველა",
"Disable" : "გამორთვა",
@@ -54,6 +51,9 @@
"set new password" : "დააყენეთ ახალი პაროლი",
"Default" : "საწყისი პარამეტრები",
"Language changed" : "ენა შეცვლილია",
+ "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან",
+ "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s",
+ "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s",
"Please wait...." : "დაიცადეთ....",
"Log" : "ლოგი",
"More" : "უფრო მეტი",
diff --git a/settings/l10n/km.js b/settings/l10n/km.js
index 5632b01a146..5c604f03c49 100644
--- a/settings/l10n/km.js
+++ b/settings/l10n/km.js
@@ -10,9 +10,6 @@ OC.L10N.register(
"You need to set your user email before being able to send test emails." : "អ្នក​ត្រូវ​តែ​កំណត់​អ៊ីមែល​របស់​អ្នក​មុន​នឹង​អាច​ផ្ញើ​អ៊ីមែល​សាកល្បង​បាន។",
"Invalid request" : "សំណើ​មិន​ត្រឹម​ត្រូវ",
"Email saved" : "បាន​រក្សា​ទុក​អ៊ីមែល",
- "Admins can't remove themself from the admin group" : "អ្នក​គ្រប់​គ្រង​មិន​អាច​លុប​ខ្លួន​ឯង​ចេញ​ពី​ក្រុម​អ្នក​គ្រប់​គ្រង​ឡើយ",
- "Unable to add user to group %s" : "មិន​អាច​បន្ថែម​អ្នក​ប្រើ​ទៅ​ក្រុម %s",
- "Unable to remove user from group %s" : "មិន​អាច​ដក​អ្នក​ប្រើ​ចេញ​ពី​ក្រុម​ %s",
"Couldn't update app." : "មិន​អាច​ធ្វើ​បច្ចុប្បន្នភាព​កម្មវិធី។",
"Sending..." : "កំពុង​ផ្ញើ...",
"All" : "ទាំងអស់",
@@ -73,6 +70,9 @@ OC.L10N.register(
"set new password" : "កំណត់​ពាក្យ​សម្ងាត់​ថ្មី",
"Default" : "លំនាំ​ដើម",
"Language changed" : "បាន​ប្ដូរ​ភាសា",
+ "Admins can't remove themself from the admin group" : "អ្នក​គ្រប់​គ្រង​មិន​អាច​លុប​ខ្លួន​ឯង​ចេញ​ពី​ក្រុម​អ្នក​គ្រប់​គ្រង​ឡើយ",
+ "Unable to add user to group %s" : "មិន​អាច​បន្ថែម​អ្នក​ប្រើ​ទៅ​ក្រុម %s",
+ "Unable to remove user from group %s" : "មិន​អាច​ដក​អ្នក​ប្រើ​ចេញ​ពី​ក្រុម​ %s",
"Please wait...." : "សូម​រង់​ចាំ....",
"Log" : "Log",
"More" : "ច្រើន​ទៀត",
diff --git a/settings/l10n/km.json b/settings/l10n/km.json
index a08b32a609b..00f212fc436 100644
--- a/settings/l10n/km.json
+++ b/settings/l10n/km.json
@@ -8,9 +8,6 @@
"You need to set your user email before being able to send test emails." : "អ្នក​ត្រូវ​តែ​កំណត់​អ៊ីមែល​របស់​អ្នក​មុន​នឹង​អាច​ផ្ញើ​អ៊ីមែល​សាកល្បង​បាន។",
"Invalid request" : "សំណើ​មិន​ត្រឹម​ត្រូវ",
"Email saved" : "បាន​រក្សា​ទុក​អ៊ីមែល",
- "Admins can't remove themself from the admin group" : "អ្នក​គ្រប់​គ្រង​មិន​អាច​លុប​ខ្លួន​ឯង​ចេញ​ពី​ក្រុម​អ្នក​គ្រប់​គ្រង​ឡើយ",
- "Unable to add user to group %s" : "មិន​អាច​បន្ថែម​អ្នក​ប្រើ​ទៅ​ក្រុម %s",
- "Unable to remove user from group %s" : "មិន​អាច​ដក​អ្នក​ប្រើ​ចេញ​ពី​ក្រុម​ %s",
"Couldn't update app." : "មិន​អាច​ធ្វើ​បច្ចុប្បន្នភាព​កម្មវិធី។",
"Sending..." : "កំពុង​ផ្ញើ...",
"All" : "ទាំងអស់",
@@ -71,6 +68,9 @@
"set new password" : "កំណត់​ពាក្យ​សម្ងាត់​ថ្មី",
"Default" : "លំនាំ​ដើម",
"Language changed" : "បាន​ប្ដូរ​ភាសា",
+ "Admins can't remove themself from the admin group" : "អ្នក​គ្រប់​គ្រង​មិន​អាច​លុប​ខ្លួន​ឯង​ចេញ​ពី​ក្រុម​អ្នក​គ្រប់​គ្រង​ឡើយ",
+ "Unable to add user to group %s" : "មិន​អាច​បន្ថែម​អ្នក​ប្រើ​ទៅ​ក្រុម %s",
+ "Unable to remove user from group %s" : "មិន​អាច​ដក​អ្នក​ប្រើ​ចេញ​ពី​ក្រុម​ %s",
"Please wait...." : "សូម​រង់​ចាំ....",
"Log" : "Log",
"More" : "ច្រើន​ទៀត",
diff --git a/settings/l10n/kn.js b/settings/l10n/kn.js
index 00942e0680e..441cc3e1ee6 100644
--- a/settings/l10n/kn.js
+++ b/settings/l10n/kn.js
@@ -26,9 +26,6 @@ OC.L10N.register(
"Unable to change mail address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
"Email saved" : "ಇ-ಅಂಚೆಯನ್ನು ಉಳಿಸಿದೆ",
"Couldn't remove app." : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
- "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ",
- "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
- "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
"Couldn't update app." : " ಕಾಯಕ್ರಮವನ್ನು ನವೀಕರಿಸಲ ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.",
"Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...",
"All" : "ಎಲ್ಲಾ",
@@ -107,6 +104,9 @@ OC.L10N.register(
"change email address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಿ",
"Default" : "ಆರಂಭದ ಪ್ರತಿ",
"Language changed" : "ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ",
+ "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
"Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....",
"Everything (fatal issues, errors, warnings, info, debug)" : "ಎಲ್ಲ ರೀತಿಗಳು (ವಿನಾಶಕ ಸಮಸ್ಯೆಗಳು, ದೋಷಗಳು, ಎಚ್ಚರಿಕೆಗಳನ್ನು, ಮಾಹಿತಿ, ಇತರೆ )",
"Info, warnings, errors and fatal issues" : "ಮಾಹಿತಿ, ಎಚ್ಚರಿಕೆ, ದೋಷಗಳು ಮತ್ತು ಮಾರಕ ಸಮಸ್ಯೆಗಳು",
diff --git a/settings/l10n/kn.json b/settings/l10n/kn.json
index 766de4c9410..76d068bfb5a 100644
--- a/settings/l10n/kn.json
+++ b/settings/l10n/kn.json
@@ -24,9 +24,6 @@
"Unable to change mail address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
"Email saved" : "ಇ-ಅಂಚೆಯನ್ನು ಉಳಿಸಿದೆ",
"Couldn't remove app." : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
- "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ",
- "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
- "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
"Couldn't update app." : " ಕಾಯಕ್ರಮವನ್ನು ನವೀಕರಿಸಲ ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.",
"Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...",
"All" : "ಎಲ್ಲಾ",
@@ -105,6 +102,9 @@
"change email address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಿ",
"Default" : "ಆರಂಭದ ಪ್ರತಿ",
"Language changed" : "ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ",
+ "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
"Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....",
"Everything (fatal issues, errors, warnings, info, debug)" : "ಎಲ್ಲ ರೀತಿಗಳು (ವಿನಾಶಕ ಸಮಸ್ಯೆಗಳು, ದೋಷಗಳು, ಎಚ್ಚರಿಕೆಗಳನ್ನು, ಮಾಹಿತಿ, ಇತರೆ )",
"Info, warnings, errors and fatal issues" : "ಮಾಹಿತಿ, ಎಚ್ಚರಿಕೆ, ದೋಷಗಳು ಮತ್ತು ಮಾರಕ ಸಮಸ್ಯೆಗಳು",
diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js
index e665803a971..adaff000a69 100644
--- a/settings/l10n/ko.js
+++ b/settings/l10n/ko.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "이메일 저장됨",
"Password confirmation is required" : "암호 확인이 필요합니다",
"Couldn't remove app." : "앱을 삭제할 수 없습니다.",
- "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음",
- "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음",
- "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음",
"Couldn't update app." : "앱을 업데이트할 수 없습니다.",
"Are you really sure you want add {domain} as trusted domain?" : "신뢰할 수 있는 도메인 목록에 {domain}을(를) 추가하시겠습니까?",
"Add trusted domain" : "신뢰할 수 있는 도메인 추가",
@@ -337,6 +334,9 @@ OC.L10N.register(
"Default" : "기본값",
"log-level out of allowed range" : "로그 단계가 허용 범위를 벗어남",
"Language changed" : "언어가 변경됨",
+ "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음",
+ "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음",
+ "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "신뢰할 수 있는 도메인 목록에 \"{domain}\"을(를) 추가하시겠습니까?",
"Please wait...." : "기다려 주십시오....",
"iPhone" : "아이폰",
diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json
index 451b7b17b26..08934a74bd5 100644
--- a/settings/l10n/ko.json
+++ b/settings/l10n/ko.json
@@ -37,9 +37,6 @@
"Email saved" : "이메일 저장됨",
"Password confirmation is required" : "암호 확인이 필요합니다",
"Couldn't remove app." : "앱을 삭제할 수 없습니다.",
- "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음",
- "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음",
- "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음",
"Couldn't update app." : "앱을 업데이트할 수 없습니다.",
"Are you really sure you want add {domain} as trusted domain?" : "신뢰할 수 있는 도메인 목록에 {domain}을(를) 추가하시겠습니까?",
"Add trusted domain" : "신뢰할 수 있는 도메인 추가",
@@ -335,6 +332,9 @@
"Default" : "기본값",
"log-level out of allowed range" : "로그 단계가 허용 범위를 벗어남",
"Language changed" : "언어가 변경됨",
+ "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음",
+ "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음",
+ "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "신뢰할 수 있는 도메인 목록에 \"{domain}\"을(를) 추가하시겠습니까?",
"Please wait...." : "기다려 주십시오....",
"iPhone" : "아이폰",
diff --git a/settings/l10n/lb.js b/settings/l10n/lb.js
index 33960d9b9ae..9a1d28e770f 100644
--- a/settings/l10n/lb.js
+++ b/settings/l10n/lb.js
@@ -8,8 +8,6 @@ OC.L10N.register(
"Email sent" : "Email geschéckt",
"Invalid request" : "Ongülteg Requête",
"Email saved" : "E-mail gespäichert",
- "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.",
- "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s",
"All" : "All",
"Disable" : "Ofschalten",
"Enable" : "Aschalten",
@@ -49,6 +47,8 @@ OC.L10N.register(
"Other" : "Aner",
"Quota" : "Quota",
"Language changed" : "Sprooch huet geännert",
+ "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.",
+ "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s",
"Log" : "Log",
"More" : "Méi",
"Less" : "Manner",
diff --git a/settings/l10n/lb.json b/settings/l10n/lb.json
index 20f255a6be9..cd241c5539a 100644
--- a/settings/l10n/lb.json
+++ b/settings/l10n/lb.json
@@ -6,8 +6,6 @@
"Email sent" : "Email geschéckt",
"Invalid request" : "Ongülteg Requête",
"Email saved" : "E-mail gespäichert",
- "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.",
- "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s",
"All" : "All",
"Disable" : "Ofschalten",
"Enable" : "Aschalten",
@@ -47,6 +45,8 @@
"Other" : "Aner",
"Quota" : "Quota",
"Language changed" : "Sprooch huet geännert",
+ "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.",
+ "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s",
"Log" : "Log",
"More" : "Méi",
"Less" : "Manner",
diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js
index 60645a30070..6d564652550 100644
--- a/settings/l10n/lt_LT.js
+++ b/settings/l10n/lt_LT.js
@@ -29,9 +29,6 @@ OC.L10N.register(
"Email saved" : "El. paštas įrašytas",
"Password confirmation is required" : "Reikalingas slaptažodžio patvirtinimas",
"Couldn't remove app." : "Nepavyko pašalinti programėlės.",
- "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės",
- "Unable to add user to group %s" : "Nepavyko pridėti naudotojo į grupę %s",
- "Unable to remove user from group %s" : "Nepavyko pašalinti naudotojo iš grupės %s",
"Couldn't update app." : "Nepavyko atnaujinti programėlės.",
"Add trusted domain" : "Pridėti patikimą domeną",
"Not saved" : "Neįrašyta",
@@ -166,6 +163,9 @@ OC.L10N.register(
"set new password" : "nustatyti naują slaptažodį",
"Default" : "Numatytasis",
"Language changed" : "Kalba pakeista",
+ "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės",
+ "Unable to add user to group %s" : "Nepavyko pridėti naudotojo į grupę %s",
+ "Unable to remove user from group %s" : "Nepavyko pašalinti naudotojo iš grupės %s",
"Please wait...." : "Prašome palaukti...",
"iPhone" : "iPhone",
"Fatal issues only" : "Tik lemtingosios klaidos",
diff --git a/settings/l10n/lt_LT.json b/settings/l10n/lt_LT.json
index cd359354248..85d13b49170 100644
--- a/settings/l10n/lt_LT.json
+++ b/settings/l10n/lt_LT.json
@@ -27,9 +27,6 @@
"Email saved" : "El. paštas įrašytas",
"Password confirmation is required" : "Reikalingas slaptažodžio patvirtinimas",
"Couldn't remove app." : "Nepavyko pašalinti programėlės.",
- "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės",
- "Unable to add user to group %s" : "Nepavyko pridėti naudotojo į grupę %s",
- "Unable to remove user from group %s" : "Nepavyko pašalinti naudotojo iš grupės %s",
"Couldn't update app." : "Nepavyko atnaujinti programėlės.",
"Add trusted domain" : "Pridėti patikimą domeną",
"Not saved" : "Neįrašyta",
@@ -164,6 +161,9 @@
"set new password" : "nustatyti naują slaptažodį",
"Default" : "Numatytasis",
"Language changed" : "Kalba pakeista",
+ "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės",
+ "Unable to add user to group %s" : "Nepavyko pridėti naudotojo į grupę %s",
+ "Unable to remove user from group %s" : "Nepavyko pašalinti naudotojo iš grupės %s",
"Please wait...." : "Prašome palaukti...",
"iPhone" : "iPhone",
"Fatal issues only" : "Tik lemtingosios klaidos",
diff --git a/settings/l10n/lv.js b/settings/l10n/lv.js
index 13ea3628329..f74b96b41e1 100644
--- a/settings/l10n/lv.js
+++ b/settings/l10n/lv.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"settings",
{
- "Enabled" : "Pievienots",
+ "Enabled" : "Iespējots",
"Not enabled" : "Nav pievienots",
"Wrong password" : "Nepareiza parole",
"Saved" : "Saglabāts",
@@ -30,9 +30,6 @@ OC.L10N.register(
"Unable to change mail address" : "Nevar nomainīt e-pasta adresi",
"Email saved" : "E-pasts tika saglabāts",
"Couldn't remove app." : "Nebija iespējams atslēgt lietoni.",
- "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas",
- "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s",
- "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s",
"Couldn't update app." : "Nevarēja atjaunināt lietotni.",
"Add trusted domain" : "Pievienot uzticamu domēnu",
"Sending..." : "Sūta...",
@@ -48,8 +45,17 @@ OC.L10N.register(
"Uninstalling ...." : "Atinstalē ....",
"Error while uninstalling app" : "Kļūda, atinstalējot lietotni",
"Uninstall" : "Atinstalēt",
+ "Copied!" : "Nokopēts!",
+ "Not supported!" : "Nav atbalstīts!",
+ "Press ⌘-C to copy." : "Spied ⌘-C lai kopētu.",
+ "Press Ctrl-C to copy." : "Spied Ctrl-C lai kopētu.",
"Valid until {date}" : "Valīds līdz {date}",
"Delete" : "Dzēst",
+ "Local" : "Lokāls",
+ "Only visible to local users" : "Redzami tikai lokālajiem lietotājiem",
+ "Only visible to you" : "Redzams tikai jums",
+ "Contacts" : "Kontakti",
+ "Public" : "Publisks",
"Select a profile picture" : "Izvēlieties profila attēlu",
"Very weak password" : "Ļoti vāja parole",
"Weak password" : "Vāja parole",
@@ -63,6 +69,8 @@ OC.L10N.register(
"undo" : "atsaukt",
"never" : "nekad",
"deleted {userName}" : "lietotājs {userName} dzēsts",
+ "Add group" : "Pievienot grupu",
+ "no group" : "neviena grupa",
"A valid username must be provided" : "Jānorāda derīgs lietotājvārds",
"A valid password must be provided" : "Jānorāda derīga parole",
"A valid email must be provided" : "Jānorāda derīga e-pasta adrese",
@@ -73,6 +81,9 @@ OC.L10N.register(
"Login" : "Ierakstīties",
"Plain" : "vienkāršs teksts",
"NT LAN Manager" : "NT LAN Pārvaldnieks",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
+ "Email server" : "E-pasta serveris",
"Open documentation" : "Atvērt dokumentāciju",
"Encryption" : "Šifrēšana",
"From address" : "No adreses",
@@ -136,6 +147,9 @@ OC.L10N.register(
"set new password" : "iestatīt jaunu paroli",
"Default" : "Noklusējuma",
"Language changed" : "Valoda tika nomainīta",
+ "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas",
+ "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s",
+ "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Vai esat pārliecināts, ka vēlaties pievienot \"{domain}\" kā uzticamu domēnu?",
"Please wait...." : "Lūdzu, uzgaidiet....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Viss (letālas problēmas, kļūdas, brīdinājumi, informatīvas ziņas, atkļūdošanas paziņojumi)",
@@ -146,6 +160,10 @@ OC.L10N.register(
"Log" : "Žurnāls",
"More" : "Vairāk",
"Less" : "Mazāk",
- "Group" : "Grupa"
+ "Uninstall App" : "Atinstalēt aplikāciju",
+ "Add Group" : "Pievienot grupu",
+ "Group" : "Grupa",
+ "Default Quota" : "Apjoms pēc noklusējuma",
+ "Full Name" : "Pilns vārds"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/settings/l10n/lv.json b/settings/l10n/lv.json
index 2633c64ed15..3d8f131695c 100644
--- a/settings/l10n/lv.json
+++ b/settings/l10n/lv.json
@@ -1,5 +1,5 @@
{ "translations": {
- "Enabled" : "Pievienots",
+ "Enabled" : "Iespējots",
"Not enabled" : "Nav pievienots",
"Wrong password" : "Nepareiza parole",
"Saved" : "Saglabāts",
@@ -28,9 +28,6 @@
"Unable to change mail address" : "Nevar nomainīt e-pasta adresi",
"Email saved" : "E-pasts tika saglabāts",
"Couldn't remove app." : "Nebija iespējams atslēgt lietoni.",
- "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas",
- "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s",
- "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s",
"Couldn't update app." : "Nevarēja atjaunināt lietotni.",
"Add trusted domain" : "Pievienot uzticamu domēnu",
"Sending..." : "Sūta...",
@@ -46,8 +43,17 @@
"Uninstalling ...." : "Atinstalē ....",
"Error while uninstalling app" : "Kļūda, atinstalējot lietotni",
"Uninstall" : "Atinstalēt",
+ "Copied!" : "Nokopēts!",
+ "Not supported!" : "Nav atbalstīts!",
+ "Press ⌘-C to copy." : "Spied ⌘-C lai kopētu.",
+ "Press Ctrl-C to copy." : "Spied Ctrl-C lai kopētu.",
"Valid until {date}" : "Valīds līdz {date}",
"Delete" : "Dzēst",
+ "Local" : "Lokāls",
+ "Only visible to local users" : "Redzami tikai lokālajiem lietotājiem",
+ "Only visible to you" : "Redzams tikai jums",
+ "Contacts" : "Kontakti",
+ "Public" : "Publisks",
"Select a profile picture" : "Izvēlieties profila attēlu",
"Very weak password" : "Ļoti vāja parole",
"Weak password" : "Vāja parole",
@@ -61,6 +67,8 @@
"undo" : "atsaukt",
"never" : "nekad",
"deleted {userName}" : "lietotājs {userName} dzēsts",
+ "Add group" : "Pievienot grupu",
+ "no group" : "neviena grupa",
"A valid username must be provided" : "Jānorāda derīgs lietotājvārds",
"A valid password must be provided" : "Jānorāda derīga parole",
"A valid email must be provided" : "Jānorāda derīga e-pasta adrese",
@@ -71,6 +79,9 @@
"Login" : "Ierakstīties",
"Plain" : "vienkāršs teksts",
"NT LAN Manager" : "NT LAN Pārvaldnieks",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
+ "Email server" : "E-pasta serveris",
"Open documentation" : "Atvērt dokumentāciju",
"Encryption" : "Šifrēšana",
"From address" : "No adreses",
@@ -134,6 +145,9 @@
"set new password" : "iestatīt jaunu paroli",
"Default" : "Noklusējuma",
"Language changed" : "Valoda tika nomainīta",
+ "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas",
+ "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s",
+ "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Vai esat pārliecināts, ka vēlaties pievienot \"{domain}\" kā uzticamu domēnu?",
"Please wait...." : "Lūdzu, uzgaidiet....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Viss (letālas problēmas, kļūdas, brīdinājumi, informatīvas ziņas, atkļūdošanas paziņojumi)",
@@ -144,6 +158,10 @@
"Log" : "Žurnāls",
"More" : "Vairāk",
"Less" : "Mazāk",
- "Group" : "Grupa"
+ "Uninstall App" : "Atinstalēt aplikāciju",
+ "Add Group" : "Pievienot grupu",
+ "Group" : "Grupa",
+ "Default Quota" : "Apjoms pēc noklusējuma",
+ "Full Name" : "Pilns vārds"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
} \ No newline at end of file
diff --git a/settings/l10n/mk.js b/settings/l10n/mk.js
index ed5cde4f7d0..b4ddc955102 100644
--- a/settings/l10n/mk.js
+++ b/settings/l10n/mk.js
@@ -33,9 +33,6 @@ OC.L10N.register(
"Unable to change mail address" : "Не можам да ја променам електронската адреса/пошта",
"Email saved" : "Електронската пошта е снимена",
"Couldn't remove app." : "Не можам да ја отстранам апликацијата.",
- "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата",
- "Unable to add user to group %s" : "Неможе да додадам корисник во група %s",
- "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s",
"Couldn't update app." : "Не можам да ја надградам апликацијата.",
"Add trusted domain" : "Додади доверлив домејн",
"Migration started …" : "Миграцијата е започнаа ...",
@@ -163,6 +160,9 @@ OC.L10N.register(
"Default" : "Предефиниран",
"log-level out of allowed range" : "нивото на логирање е надвор од дозволениот опсег",
"Language changed" : "Јазикот е сменет",
+ "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата",
+ "Unable to add user to group %s" : "Неможе да додадам корисник во група %s",
+ "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s",
"Please wait...." : "Ве молам почекајте ...",
"Info, warnings, errors and fatal issues" : "Информации, предупредувања, грешки и фатални работи",
"Warnings, errors and fatal issues" : "Предупредувања, грешки и фатални работи",
diff --git a/settings/l10n/mk.json b/settings/l10n/mk.json
index 65d7b25933f..cbb05bbd380 100644
--- a/settings/l10n/mk.json
+++ b/settings/l10n/mk.json
@@ -31,9 +31,6 @@
"Unable to change mail address" : "Не можам да ја променам електронската адреса/пошта",
"Email saved" : "Електронската пошта е снимена",
"Couldn't remove app." : "Не можам да ја отстранам апликацијата.",
- "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата",
- "Unable to add user to group %s" : "Неможе да додадам корисник во група %s",
- "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s",
"Couldn't update app." : "Не можам да ја надградам апликацијата.",
"Add trusted domain" : "Додади доверлив домејн",
"Migration started …" : "Миграцијата е започнаа ...",
@@ -161,6 +158,9 @@
"Default" : "Предефиниран",
"log-level out of allowed range" : "нивото на логирање е надвор од дозволениот опсег",
"Language changed" : "Јазикот е сменет",
+ "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата",
+ "Unable to add user to group %s" : "Неможе да додадам корисник во група %s",
+ "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s",
"Please wait...." : "Ве молам почекајте ...",
"Info, warnings, errors and fatal issues" : "Информации, предупредувања, грешки и фатални работи",
"Warnings, errors and fatal issues" : "Предупредувања, грешки и фатални работи",
diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js
index 9dd8ab0ac72..32cc38f7759 100644
--- a/settings/l10n/nb_NO.js
+++ b/settings/l10n/nb_NO.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Kan ikke endre epost-adresse",
"Email saved" : "Epost lagret",
"Couldn't remove app." : "Klarte ikke å fjerne app.",
- "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen",
- "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s",
- "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s",
"Couldn't update app." : "Kunne ikke oppdatere app.",
"Add trusted domain" : "Legg til et klarert domene",
"Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til migreringen er ferdig.",
@@ -309,6 +306,9 @@ OC.L10N.register(
"Default" : "Standard",
"log-level out of allowed range" : "Loggnivå utenfor tillatt område",
"Language changed" : "Språk endret",
+ "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen",
+ "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s",
+ "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som klarert domene?",
"Please wait...." : "Vennligst vent...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json
index 96f6a5b8be4..dc153fc66f6 100644
--- a/settings/l10n/nb_NO.json
+++ b/settings/l10n/nb_NO.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Kan ikke endre epost-adresse",
"Email saved" : "Epost lagret",
"Couldn't remove app." : "Klarte ikke å fjerne app.",
- "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen",
- "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s",
- "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s",
"Couldn't update app." : "Kunne ikke oppdatere app.",
"Add trusted domain" : "Legg til et klarert domene",
"Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til migreringen er ferdig.",
@@ -307,6 +304,9 @@
"Default" : "Standard",
"log-level out of allowed range" : "Loggnivå utenfor tillatt område",
"Language changed" : "Språk endret",
+ "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen",
+ "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s",
+ "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som klarert domene?",
"Please wait...." : "Vennligst vent...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index ad50ed8781e..913c94e04cb 100644
--- a/settings/l10n/nl.js
+++ b/settings/l10n/nl.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "E-mail opgeslagen",
"Password confirmation is required" : "Wachtwoordbevestiging vereist",
"Couldn't remove app." : "Kon app niet verwijderen.",
- "Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen",
- "Unable to add user to group %s" : "Niet in staat om gebruiker toe te voegen aan groep %s",
- "Unable to remove user from group %s" : "Niet in staat om gebruiker te verwijderen uit groep %s",
"Couldn't update app." : "Kon de app niet bijwerken.",
"Are you really sure you want add {domain} as trusted domain?" : "Bent u er zeker van om {domain} als vertrouwd domein toe te voegen?",
"Add trusted domain" : "Vertrouwd domein toevoegen",
@@ -125,6 +122,8 @@ OC.L10N.register(
"undo" : "ongedaan maken",
"never" : "geen",
"deleted {userName}" : "verwijderd {userName}",
+ "Unable to add user to group {group}" : "Kan niet worden toegevoegd aan gebruikersgroep {group}",
+ "Unable to remove user from group {group}" : "Gebruiker kan niet worden verwijderd van groep {group}",
"Add group" : "Groep toevoegen",
"Invalid quota value \"{val}\"" : "Ongeldige quota waarde \"{val}\"",
"no group" : "geen groep",
@@ -341,6 +340,9 @@ OC.L10N.register(
"Default" : "Standaard",
"log-level out of allowed range" : "loggingniveau buiten toegestane bereik",
"Language changed" : "Taal aangepast",
+ "Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen",
+ "Unable to add user to group %s" : "Niet in staat om gebruiker toe te voegen aan groep %s",
+ "Unable to remove user from group %s" : "Niet in staat om gebruiker te verwijderen uit groep %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Weet je zeker dat je \"{domain}\" als een vertrouwd domein wilt toevoegen?",
"Please wait...." : "Even geduld a.u.b.",
"iPhone" : "iPhone",
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index bb09350a18d..c21b9b0c9c1 100644
--- a/settings/l10n/nl.json
+++ b/settings/l10n/nl.json
@@ -37,9 +37,6 @@
"Email saved" : "E-mail opgeslagen",
"Password confirmation is required" : "Wachtwoordbevestiging vereist",
"Couldn't remove app." : "Kon app niet verwijderen.",
- "Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen",
- "Unable to add user to group %s" : "Niet in staat om gebruiker toe te voegen aan groep %s",
- "Unable to remove user from group %s" : "Niet in staat om gebruiker te verwijderen uit groep %s",
"Couldn't update app." : "Kon de app niet bijwerken.",
"Are you really sure you want add {domain} as trusted domain?" : "Bent u er zeker van om {domain} als vertrouwd domein toe te voegen?",
"Add trusted domain" : "Vertrouwd domein toevoegen",
@@ -123,6 +120,8 @@
"undo" : "ongedaan maken",
"never" : "geen",
"deleted {userName}" : "verwijderd {userName}",
+ "Unable to add user to group {group}" : "Kan niet worden toegevoegd aan gebruikersgroep {group}",
+ "Unable to remove user from group {group}" : "Gebruiker kan niet worden verwijderd van groep {group}",
"Add group" : "Groep toevoegen",
"Invalid quota value \"{val}\"" : "Ongeldige quota waarde \"{val}\"",
"no group" : "geen groep",
@@ -339,6 +338,9 @@
"Default" : "Standaard",
"log-level out of allowed range" : "loggingniveau buiten toegestane bereik",
"Language changed" : "Taal aangepast",
+ "Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen",
+ "Unable to add user to group %s" : "Niet in staat om gebruiker toe te voegen aan groep %s",
+ "Unable to remove user from group %s" : "Niet in staat om gebruiker te verwijderen uit groep %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Weet je zeker dat je \"{domain}\" als een vertrouwd domein wilt toevoegen?",
"Please wait...." : "Even geduld a.u.b.",
"iPhone" : "iPhone",
diff --git a/settings/l10n/nn_NO.js b/settings/l10n/nn_NO.js
index 8e55154fd83..a3715eaf4d8 100644
--- a/settings/l10n/nn_NO.js
+++ b/settings/l10n/nn_NO.js
@@ -10,9 +10,6 @@ OC.L10N.register(
"Email sent" : "E-post sendt",
"Invalid request" : "Ugyldig førespurnad",
"Email saved" : "E-postadresse lagra",
- "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa",
- "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s",
- "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s",
"Couldn't update app." : "Klarte ikkje oppdatera programmet.",
"All" : "Alle",
"Error while disabling app" : "Klarte ikkje å skru av programmet",
@@ -72,6 +69,9 @@ OC.L10N.register(
"set new password" : "lag nytt passord",
"Default" : "Standard",
"Language changed" : "Språk endra",
+ "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa",
+ "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s",
+ "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s",
"Please wait...." : "Ver venleg og vent …",
"Log" : "Logg",
"More" : "Meir",
diff --git a/settings/l10n/nn_NO.json b/settings/l10n/nn_NO.json
index 2fdd74a5424..940aa42c3b1 100644
--- a/settings/l10n/nn_NO.json
+++ b/settings/l10n/nn_NO.json
@@ -8,9 +8,6 @@
"Email sent" : "E-post sendt",
"Invalid request" : "Ugyldig førespurnad",
"Email saved" : "E-postadresse lagra",
- "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa",
- "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s",
- "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s",
"Couldn't update app." : "Klarte ikkje oppdatera programmet.",
"All" : "Alle",
"Error while disabling app" : "Klarte ikkje å skru av programmet",
@@ -70,6 +67,9 @@
"set new password" : "lag nytt passord",
"Default" : "Standard",
"Language changed" : "Språk endra",
+ "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa",
+ "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s",
+ "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s",
"Please wait...." : "Ver venleg og vent …",
"Log" : "Logg",
"More" : "Meir",
diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js
index 44444e737dc..84b81f181a1 100644
--- a/settings/l10n/pl.js
+++ b/settings/l10n/pl.js
@@ -38,9 +38,6 @@ OC.L10N.register(
"Email saved" : "E-mail zapisany",
"Password confirmation is required" : "Wymagane jest potwierdzenie hasła",
"Couldn't remove app." : "Nie można usunąć aplikacji.",
- "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów",
- "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s",
- "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s",
"Couldn't update app." : "Nie można uaktualnić aplikacji.",
"Are you really sure you want add {domain} as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?",
"Add trusted domain" : "Dodaj zaufaną domenę",
@@ -310,6 +307,9 @@ OC.L10N.register(
"Default" : "Domyślny",
"log-level out of allowed range" : "wartość log-level spoza dozwolonego zakresu",
"Language changed" : "Zmieniono język",
+ "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów",
+ "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s",
+ "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?",
"Please wait...." : "Proszę czekać...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json
index 87b0f8f1d57..01e92aeef88 100644
--- a/settings/l10n/pl.json
+++ b/settings/l10n/pl.json
@@ -36,9 +36,6 @@
"Email saved" : "E-mail zapisany",
"Password confirmation is required" : "Wymagane jest potwierdzenie hasła",
"Couldn't remove app." : "Nie można usunąć aplikacji.",
- "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów",
- "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s",
- "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s",
"Couldn't update app." : "Nie można uaktualnić aplikacji.",
"Are you really sure you want add {domain} as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?",
"Add trusted domain" : "Dodaj zaufaną domenę",
@@ -308,6 +305,9 @@
"Default" : "Domyślny",
"log-level out of allowed range" : "wartość log-level spoza dozwolonego zakresu",
"Language changed" : "Zmieniono język",
+ "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów",
+ "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s",
+ "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?",
"Please wait...." : "Proszę czekać...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js
index 807f63c7618..b43a307e705 100644
--- a/settings/l10n/pt_BR.js
+++ b/settings/l10n/pt_BR.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "E-mail salvo",
"Password confirmation is required" : "A confirmação da senha é necessária",
"Couldn't remove app." : "Não foi possível remover aplicativos.",
- "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração",
- "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s",
- "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s",
"Couldn't update app." : "Não foi possível atualizar a app.",
"Are you really sure you want add {domain} as trusted domain?" : "Tem certeza que deseja adicionar {domain} como um domínio confiável",
"Add trusted domain" : "Adicionar domínio confiável",
@@ -125,6 +122,8 @@ OC.L10N.register(
"undo" : "desfazer",
"never" : "nunca",
"deleted {userName}" : "eliminado {userName}",
+ "Unable to add user to group {group}" : "Não é possível adicionar usuário ao grupo {group}",
+ "Unable to remove user from group {group}" : "Não é possível remover usuário do grupo {group}",
"Add group" : "Adicionar grupo",
"Invalid quota value \"{val}\"" : "Valor da quota inválido \"{val}\"",
"no group" : "nenhum grupo",
@@ -341,6 +340,9 @@ OC.L10N.register(
"Default" : "Padrão",
"log-level out of allowed range" : "log-nível acima do permitido",
"Language changed" : "Idioma alterado",
+ "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração",
+ "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s",
+ "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Deseja realemente adicionar \"{domain}\" como domínio confiável?",
"Please wait...." : "Por favor, aguarde...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json
index 29fef7a6721..093fb8cd92a 100644
--- a/settings/l10n/pt_BR.json
+++ b/settings/l10n/pt_BR.json
@@ -37,9 +37,6 @@
"Email saved" : "E-mail salvo",
"Password confirmation is required" : "A confirmação da senha é necessária",
"Couldn't remove app." : "Não foi possível remover aplicativos.",
- "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração",
- "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s",
- "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s",
"Couldn't update app." : "Não foi possível atualizar a app.",
"Are you really sure you want add {domain} as trusted domain?" : "Tem certeza que deseja adicionar {domain} como um domínio confiável",
"Add trusted domain" : "Adicionar domínio confiável",
@@ -123,6 +120,8 @@
"undo" : "desfazer",
"never" : "nunca",
"deleted {userName}" : "eliminado {userName}",
+ "Unable to add user to group {group}" : "Não é possível adicionar usuário ao grupo {group}",
+ "Unable to remove user from group {group}" : "Não é possível remover usuário do grupo {group}",
"Add group" : "Adicionar grupo",
"Invalid quota value \"{val}\"" : "Valor da quota inválido \"{val}\"",
"no group" : "nenhum grupo",
@@ -339,6 +338,9 @@
"Default" : "Padrão",
"log-level out of allowed range" : "log-nível acima do permitido",
"Language changed" : "Idioma alterado",
+ "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração",
+ "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s",
+ "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Deseja realemente adicionar \"{domain}\" como domínio confiável?",
"Please wait...." : "Por favor, aguarde...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js
index 91f8d3570ca..3662b709bc9 100644
--- a/settings/l10n/pt_PT.js
+++ b/settings/l10n/pt_PT.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Não foi possível alterar o teu endereço de email",
"Email saved" : "E-mail guardado",
"Couldn't remove app." : "Não foi possível remover a aplicação.",
- "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.",
- "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s",
- "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s",
"Couldn't update app." : "Não foi possível atualizar a app.",
"Add trusted domain" : "Adicionar domínio confiável ",
"Migration in progress. Please wait until the migration is finished" : "Migração em progresso. Por favor, aguarde até que a mesma esteja concluída..",
@@ -254,6 +251,9 @@ OC.L10N.register(
"Default" : "Padrão",
"log-level out of allowed range" : "log-level fora do alcance permitido",
"Language changed" : "Idioma alterado",
+ "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.",
+ "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s",
+ "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?",
"Please wait...." : "Por favor, aguarde...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)",
diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json
index 9b2e2b49c24..28f83d064dd 100644
--- a/settings/l10n/pt_PT.json
+++ b/settings/l10n/pt_PT.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Não foi possível alterar o teu endereço de email",
"Email saved" : "E-mail guardado",
"Couldn't remove app." : "Não foi possível remover a aplicação.",
- "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.",
- "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s",
- "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s",
"Couldn't update app." : "Não foi possível atualizar a app.",
"Add trusted domain" : "Adicionar domínio confiável ",
"Migration in progress. Please wait until the migration is finished" : "Migração em progresso. Por favor, aguarde até que a mesma esteja concluída..",
@@ -252,6 +249,9 @@
"Default" : "Padrão",
"log-level out of allowed range" : "log-level fora do alcance permitido",
"Language changed" : "Idioma alterado",
+ "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.",
+ "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s",
+ "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?",
"Please wait...." : "Por favor, aguarde...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)",
diff --git a/settings/l10n/ro.js b/settings/l10n/ro.js
index 8d21c64415b..d6a2d997686 100644
--- a/settings/l10n/ro.js
+++ b/settings/l10n/ro.js
@@ -32,9 +32,6 @@ OC.L10N.register(
"Unable to change mail address" : "Nu s-a putut schimba adresa email",
"Email saved" : "E-mail salvat",
"Couldn't remove app." : "Nu s-a putut înlătura aplicația.",
- "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul adminnistrativ",
- "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul în grupul %s",
- "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s",
"Couldn't update app." : "Aplicaţia nu s-a putut actualiza.",
"Add trusted domain" : "Adaugă domeniu de încredere",
"Migration in progress. Please wait until the migration is finished" : "Migrare în progres. Așteaptă până când migrarea este finalizată",
@@ -188,6 +185,9 @@ OC.L10N.register(
"Default" : "Implicită",
"log-level out of allowed range" : "NIvelul de logare este în afara plajei admise",
"Language changed" : "Limba a fost schimbată",
+ "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul adminnistrativ",
+ "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul în grupul %s",
+ "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s",
"Please wait...." : "Aşteptaţi vă rog....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tot (erori fatale, erori, avertizări, informări, depanare)",
"Info, warnings, errors and fatal issues" : "Informări, avertizări, erori și erori fatale",
diff --git a/settings/l10n/ro.json b/settings/l10n/ro.json
index bf931ed386d..3edcf42290f 100644
--- a/settings/l10n/ro.json
+++ b/settings/l10n/ro.json
@@ -30,9 +30,6 @@
"Unable to change mail address" : "Nu s-a putut schimba adresa email",
"Email saved" : "E-mail salvat",
"Couldn't remove app." : "Nu s-a putut înlătura aplicația.",
- "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul adminnistrativ",
- "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul în grupul %s",
- "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s",
"Couldn't update app." : "Aplicaţia nu s-a putut actualiza.",
"Add trusted domain" : "Adaugă domeniu de încredere",
"Migration in progress. Please wait until the migration is finished" : "Migrare în progres. Așteaptă până când migrarea este finalizată",
@@ -186,6 +183,9 @@
"Default" : "Implicită",
"log-level out of allowed range" : "NIvelul de logare este în afara plajei admise",
"Language changed" : "Limba a fost schimbată",
+ "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul adminnistrativ",
+ "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul în grupul %s",
+ "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s",
"Please wait...." : "Aşteptaţi vă rog....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tot (erori fatale, erori, avertizări, informări, depanare)",
"Info, warnings, errors and fatal issues" : "Informări, avertizări, erori și erori fatale",
diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js
index b0341ed675f..08134d27f05 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "Адрес сохранен",
"Password confirmation is required" : "Требуется подтверждение пароля",
"Couldn't remove app." : "Не удалось удалить приложение.",
- "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов",
- "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s",
- "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s",
"Couldn't update app." : "Невозможно обновить приложение",
"Are you really sure you want add {domain} as trusted domain?" : "Вы действительно хотите добавить домен {domain} как доверенный?",
"Add trusted domain" : "Добавить доверенный домен",
@@ -60,7 +57,7 @@ OC.L10N.register(
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Это приложение не проверялось на наличие проблем с безопасностью, также оно может работать нестабильно. Устанавливайте на свой страх и риск.",
"Enabling app …" : "Включение приложения",
"Error while disabling app" : "Ошибка при отключении приложения",
- "Disable" : "Выключить",
+ "Disable" : "Отключить",
"Enable" : "Включить",
"Error while enabling app" : "Ошибка при включении приложения",
"Error: this app cannot be enabled because it makes the server unstable" : "Ошибка: это приложение не может быть включено, так как оно делает сервер нестабильным",
@@ -125,6 +122,8 @@ OC.L10N.register(
"undo" : "отмена",
"never" : "никогда",
"deleted {userName}" : "удалён {userName}",
+ "Unable to add user to group {group}" : "Невозможно добавить пользователя в группу {group}",
+ "Unable to remove user from group {group}" : "Невозможно удалить пользователя из группы {group}",
"Add group" : "Добавить группу",
"Invalid quota value \"{val}\"" : "Недопустимая величина квоты \"{val}\"",
"no group" : "Без группы",
@@ -341,6 +340,9 @@ OC.L10N.register(
"Default" : "По умолчанию",
"log-level out of allowed range" : "уровень журнала вышел за разрешенный диапазон",
"Language changed" : "Язык изменён",
+ "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов",
+ "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s",
+ "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?",
"Please wait...." : "Пожалуйста подождите...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json
index 4e7f9fa9385..06e76ea1651 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -37,9 +37,6 @@
"Email saved" : "Адрес сохранен",
"Password confirmation is required" : "Требуется подтверждение пароля",
"Couldn't remove app." : "Не удалось удалить приложение.",
- "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов",
- "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s",
- "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s",
"Couldn't update app." : "Невозможно обновить приложение",
"Are you really sure you want add {domain} as trusted domain?" : "Вы действительно хотите добавить домен {domain} как доверенный?",
"Add trusted domain" : "Добавить доверенный домен",
@@ -58,7 +55,7 @@
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Это приложение не проверялось на наличие проблем с безопасностью, также оно может работать нестабильно. Устанавливайте на свой страх и риск.",
"Enabling app …" : "Включение приложения",
"Error while disabling app" : "Ошибка при отключении приложения",
- "Disable" : "Выключить",
+ "Disable" : "Отключить",
"Enable" : "Включить",
"Error while enabling app" : "Ошибка при включении приложения",
"Error: this app cannot be enabled because it makes the server unstable" : "Ошибка: это приложение не может быть включено, так как оно делает сервер нестабильным",
@@ -123,6 +120,8 @@
"undo" : "отмена",
"never" : "никогда",
"deleted {userName}" : "удалён {userName}",
+ "Unable to add user to group {group}" : "Невозможно добавить пользователя в группу {group}",
+ "Unable to remove user from group {group}" : "Невозможно удалить пользователя из группы {group}",
"Add group" : "Добавить группу",
"Invalid quota value \"{val}\"" : "Недопустимая величина квоты \"{val}\"",
"no group" : "Без группы",
@@ -339,6 +338,9 @@
"Default" : "По умолчанию",
"log-level out of allowed range" : "уровень журнала вышел за разрешенный диапазон",
"Language changed" : "Язык изменён",
+ "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов",
+ "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s",
+ "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?",
"Please wait...." : "Пожалуйста подождите...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/si_LK.js b/settings/l10n/si_LK.js
index fb8754b18cc..4ea33986970 100644
--- a/settings/l10n/si_LK.js
+++ b/settings/l10n/si_LK.js
@@ -4,8 +4,6 @@ OC.L10N.register(
"Authentication error" : "සත්‍යාපන දෝෂයක්",
"Invalid request" : "අවලංගු අයැදුමක්",
"Email saved" : "වි-තැපෑල සුරකින ලදී",
- "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක",
- "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
"All" : "සියල්ල",
"Disable" : "අක්‍රිය කරන්න",
"Enable" : "සක්‍රිය කරන්න",
@@ -36,6 +34,8 @@ OC.L10N.register(
"Other" : "වෙනත්",
"Quota" : "සලාකය",
"Language changed" : "භාෂාව ාවනස් කිරීම",
+ "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක",
+ "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
"Log" : "ලඝුව",
"More" : "වැඩි",
"Less" : "අඩු"
diff --git a/settings/l10n/si_LK.json b/settings/l10n/si_LK.json
index 93559d04eb8..0f9ebafcd6e 100644
--- a/settings/l10n/si_LK.json
+++ b/settings/l10n/si_LK.json
@@ -2,8 +2,6 @@
"Authentication error" : "සත්‍යාපන දෝෂයක්",
"Invalid request" : "අවලංගු අයැදුමක්",
"Email saved" : "වි-තැපෑල සුරකින ලදී",
- "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක",
- "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
"All" : "සියල්ල",
"Disable" : "අක්‍රිය කරන්න",
"Enable" : "සක්‍රිය කරන්න",
@@ -34,6 +32,8 @@
"Other" : "වෙනත්",
"Quota" : "සලාකය",
"Language changed" : "භාෂාව ාවනස් කිරීම",
+ "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක",
+ "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
"Log" : "ලඝුව",
"More" : "වැඩි",
"Less" : "අඩු"
diff --git a/settings/l10n/sk_SK.js b/settings/l10n/sk_SK.js
index 6af204caaa9..2d3e4a35609 100644
--- a/settings/l10n/sk_SK.js
+++ b/settings/l10n/sk_SK.js
@@ -37,9 +37,6 @@ OC.L10N.register(
"Email saved" : "Email uložený",
"Password confirmation is required" : "Vyžaduje sa overenie heslom",
"Couldn't remove app." : "Nemožno odstrániť aplikáciu.",
- "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin",
- "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s",
- "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s",
"Couldn't update app." : "Nemožno aktualizovať aplikáciu.",
"Are you really sure you want add {domain} as trusted domain?" : "Ste si istí, že chcete pridať {domain} medzi dôveryhodné domény?",
"Add trusted domain" : "Pridať dôveryhodnú doménu",
@@ -225,6 +222,7 @@ OC.L10N.register(
"Import root certificate" : "Importovať koreňový certifikát",
"Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Dobrý deň,<br><br>toto je oznámenie o novo vytvorenom účte %s.<br><br>Vaše používateľské meno: <strong>%s</strong><br>Prihlásiť sa môžete tu: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "Pekný deň!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Dobrý deň,\n\ntoto je oznámenie o novo vytvorenom účte %s.\n\nVaše používateľské meno: %s\nPrihlásiť sa môžete tu: %s\n\n",
"Administrator documentation" : "Príručka administrátora",
"Online documentation" : "Online príručka",
"Forum" : "Fórum",
@@ -303,6 +301,9 @@ OC.L10N.register(
"Default" : "Predvolené",
"log-level out of allowed range" : "úroveň logovania z povoleného rozpätia",
"Language changed" : "Jazyk zmenený",
+ "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin",
+ "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s",
+ "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ste si istí, že chcete pridať \"{domain}\" medzi dôveryhodné domény?",
"Please wait...." : "Čakajte prosím...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/sk_SK.json b/settings/l10n/sk_SK.json
index faf66bbaca6..227e9b1b061 100644
--- a/settings/l10n/sk_SK.json
+++ b/settings/l10n/sk_SK.json
@@ -35,9 +35,6 @@
"Email saved" : "Email uložený",
"Password confirmation is required" : "Vyžaduje sa overenie heslom",
"Couldn't remove app." : "Nemožno odstrániť aplikáciu.",
- "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin",
- "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s",
- "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s",
"Couldn't update app." : "Nemožno aktualizovať aplikáciu.",
"Are you really sure you want add {domain} as trusted domain?" : "Ste si istí, že chcete pridať {domain} medzi dôveryhodné domény?",
"Add trusted domain" : "Pridať dôveryhodnú doménu",
@@ -223,6 +220,7 @@
"Import root certificate" : "Importovať koreňový certifikát",
"Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Dobrý deň,<br><br>toto je oznámenie o novo vytvorenom účte %s.<br><br>Vaše používateľské meno: <strong>%s</strong><br>Prihlásiť sa môžete tu: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "Pekný deň!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Dobrý deň,\n\ntoto je oznámenie o novo vytvorenom účte %s.\n\nVaše používateľské meno: %s\nPrihlásiť sa môžete tu: %s\n\n",
"Administrator documentation" : "Príručka administrátora",
"Online documentation" : "Online príručka",
"Forum" : "Fórum",
@@ -301,6 +299,9 @@
"Default" : "Predvolené",
"log-level out of allowed range" : "úroveň logovania z povoleného rozpätia",
"Language changed" : "Jazyk zmenený",
+ "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin",
+ "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s",
+ "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ste si istí, že chcete pridať \"{domain}\" medzi dôveryhodné domény?",
"Please wait...." : "Čakajte prosím...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js
index 2192820e220..35b1758f16b 100644
--- a/settings/l10n/sl.js
+++ b/settings/l10n/sl.js
@@ -35,9 +35,6 @@ OC.L10N.register(
"Unable to change mail address" : "Ni mogoče spremeniti naslova elektronske pošte.",
"Email saved" : "Elektronski naslov je shranjen",
"Couldn't remove app." : "Ni mogoče odstraniti programa.",
- "Admins can't remove themself from the admin group" : "Skrbnikov ni mogoče odstraniti iz skupine skrbnikov (admin)",
- "Unable to add user to group %s" : "Uporabnika ni mogoče dodati k skupini %s",
- "Unable to remove user from group %s" : "Uporabnika ni mogoče odstraniti iz skupine %s",
"Couldn't update app." : "Programa ni mogoče posodobiti.",
"Add trusted domain" : "Dodaj varno domeno",
"Migration in progress. Please wait until the migration is finished" : "V teku je selitev. Počakajte, da se zaključi.",
@@ -242,6 +239,9 @@ OC.L10N.register(
"Default" : "Privzeto",
"log-level out of allowed range" : "stopnja zapisovanja je izven dovoljenega območja",
"Language changed" : "Jezik je spremenjen",
+ "Admins can't remove themself from the admin group" : "Skrbnikov ni mogoče odstraniti iz skupine skrbnikov (admin)",
+ "Unable to add user to group %s" : "Uporabnika ni mogoče dodati k skupini %s",
+ "Unable to remove user from group %s" : "Uporabnika ni mogoče odstraniti iz skupine %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ali ste prepričani, da želite dodati \"{domain}\" kot varno domeno?",
"Please wait...." : "Počakajte ...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Vse (podrobnosti, opozorila, hrošče, napake in usodne dogodke)",
diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json
index 860b93c4415..e4a83311a03 100644
--- a/settings/l10n/sl.json
+++ b/settings/l10n/sl.json
@@ -33,9 +33,6 @@
"Unable to change mail address" : "Ni mogoče spremeniti naslova elektronske pošte.",
"Email saved" : "Elektronski naslov je shranjen",
"Couldn't remove app." : "Ni mogoče odstraniti programa.",
- "Admins can't remove themself from the admin group" : "Skrbnikov ni mogoče odstraniti iz skupine skrbnikov (admin)",
- "Unable to add user to group %s" : "Uporabnika ni mogoče dodati k skupini %s",
- "Unable to remove user from group %s" : "Uporabnika ni mogoče odstraniti iz skupine %s",
"Couldn't update app." : "Programa ni mogoče posodobiti.",
"Add trusted domain" : "Dodaj varno domeno",
"Migration in progress. Please wait until the migration is finished" : "V teku je selitev. Počakajte, da se zaključi.",
@@ -240,6 +237,9 @@
"Default" : "Privzeto",
"log-level out of allowed range" : "stopnja zapisovanja je izven dovoljenega območja",
"Language changed" : "Jezik je spremenjen",
+ "Admins can't remove themself from the admin group" : "Skrbnikov ni mogoče odstraniti iz skupine skrbnikov (admin)",
+ "Unable to add user to group %s" : "Uporabnika ni mogoče dodati k skupini %s",
+ "Unable to remove user from group %s" : "Uporabnika ni mogoče odstraniti iz skupine %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ali ste prepričani, da želite dodati \"{domain}\" kot varno domeno?",
"Please wait...." : "Počakajte ...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Vse (podrobnosti, opozorila, hrošče, napake in usodne dogodke)",
diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js
index 6e9217c7ad9..0f55b61956e 100644
--- a/settings/l10n/sq.js
+++ b/settings/l10n/sq.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "Email-i u ruajt",
"Password confirmation is required" : "Kërkohet konfirmimi i fjalëkalimit",
"Couldn't remove app." : "S’hoqi dot aplikacionin.",
- "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin",
- "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s",
- "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s",
"Couldn't update app." : "S’përditësoi dot aplikacionin.",
"Are you really sure you want add {domain} as trusted domain?" : "Jeni i sigurt se doni ta shtoni {domain} si një domain të besuar?",
"Add trusted domain" : "Shtoni përkatësi të besuar",
@@ -341,6 +338,9 @@ OC.L10N.register(
"Default" : "Parazgjedhje",
"log-level out of allowed range" : "nivel regjistrimi jashtë intervalit të lejuar",
"Language changed" : "Gjuha u ndryshua",
+ "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin",
+ "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s",
+ "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeni vërtet i sigurt se doni të shtoni \"{domain}\" si përkatësi të besuar?",
"Please wait...." : "Ju lutemi, prisni…",
"iPhone" : "iPhone",
diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json
index c2d345f3ad2..62d72bb52dc 100644
--- a/settings/l10n/sq.json
+++ b/settings/l10n/sq.json
@@ -37,9 +37,6 @@
"Email saved" : "Email-i u ruajt",
"Password confirmation is required" : "Kërkohet konfirmimi i fjalëkalimit",
"Couldn't remove app." : "S’hoqi dot aplikacionin.",
- "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin",
- "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s",
- "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s",
"Couldn't update app." : "S’përditësoi dot aplikacionin.",
"Are you really sure you want add {domain} as trusted domain?" : "Jeni i sigurt se doni ta shtoni {domain} si një domain të besuar?",
"Add trusted domain" : "Shtoni përkatësi të besuar",
@@ -339,6 +336,9 @@
"Default" : "Parazgjedhje",
"log-level out of allowed range" : "nivel regjistrimi jashtë intervalit të lejuar",
"Language changed" : "Gjuha u ndryshua",
+ "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin",
+ "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s",
+ "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeni vërtet i sigurt se doni të shtoni \"{domain}\" si përkatësi të besuar?",
"Please wait...." : "Ju lutemi, prisni…",
"iPhone" : "iPhone",
diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js
index c548718a801..2ee6f9f0ce6 100644
--- a/settings/l10n/sr.js
+++ b/settings/l10n/sr.js
@@ -34,9 +34,6 @@ OC.L10N.register(
"Unable to change mail address" : "Не могу да изменим е-адресу",
"Email saved" : "Е-порука сачувана",
"Couldn't remove app." : "Не могу да уклоним апликацију.",
- "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе",
- "Unable to add user to group %s" : "Не могу да додам корисника у групу %s",
- "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s",
"Couldn't update app." : "Не могу да ажурирам апликацију.",
"Add trusted domain" : "Додај поуздан домен",
"Migration in progress. Please wait until the migration is finished" : "Пресељење је у току. Сачекајте док се не заврши",
@@ -214,6 +211,9 @@ OC.L10N.register(
"Default" : "Подразумевано",
"log-level out of allowed range" : "ниво бележења је ван дозвољеног опсега",
"Language changed" : "Језик је промењен",
+ "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе",
+ "Unable to add user to group %s" : "Не могу да додам корисника у групу %s",
+ "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Да ли заиста желите да додате „{domain}“ као поуздан домен?",
"Please wait...." : "Сачекајте…",
"Everything (fatal issues, errors, warnings, info, debug)" : "Све (фаталне проблеме, грешке, упозорења, информације, отклањање грешака)",
diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json
index 87e1a5094bd..399d1df09a3 100644
--- a/settings/l10n/sr.json
+++ b/settings/l10n/sr.json
@@ -32,9 +32,6 @@
"Unable to change mail address" : "Не могу да изменим е-адресу",
"Email saved" : "Е-порука сачувана",
"Couldn't remove app." : "Не могу да уклоним апликацију.",
- "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе",
- "Unable to add user to group %s" : "Не могу да додам корисника у групу %s",
- "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s",
"Couldn't update app." : "Не могу да ажурирам апликацију.",
"Add trusted domain" : "Додај поуздан домен",
"Migration in progress. Please wait until the migration is finished" : "Пресељење је у току. Сачекајте док се не заврши",
@@ -212,6 +209,9 @@
"Default" : "Подразумевано",
"log-level out of allowed range" : "ниво бележења је ван дозвољеног опсега",
"Language changed" : "Језик је промењен",
+ "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе",
+ "Unable to add user to group %s" : "Не могу да додам корисника у групу %s",
+ "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Да ли заиста желите да додате „{domain}“ као поуздан домен?",
"Please wait...." : "Сачекајте…",
"Everything (fatal issues, errors, warnings, info, debug)" : "Све (фаталне проблеме, грешке, упозорења, информације, отклањање грешака)",
diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js
index cc738f841ed..803021a8d31 100644
--- a/settings/l10n/sv.js
+++ b/settings/l10n/sv.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "E-post sparad",
"Password confirmation is required" : "Lösenordsbekräftelse krävs",
"Couldn't remove app." : "Kunde inte ta bort applikationen.",
- "Admins can't remove themself from the admin group" : "Administratörer kan inte ta bort sig själva från admingruppen",
- "Unable to add user to group %s" : "Kan inte lägga till användare i gruppen %s",
- "Unable to remove user from group %s" : "Kan inte radera användare från gruppen %s",
"Couldn't update app." : "Kunde inte uppdatera appen.",
"Are you really sure you want add {domain} as trusted domain?" : "Är du verkligen säker att du vill lägga till (domain) som tillförlitlig domän?",
"Add trusted domain" : "Lägg till betrodd domän",
@@ -174,7 +171,7 @@ OC.L10N.register(
"This is the final warning: Do you really want to enable encryption?" : "Detta är en slutgiltig varning: Vill du verkligen aktivera kryptering?",
"Enable encryption" : "Aktivera kryptering",
"No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul laddad, var god aktivera krypteringsmodulen i applikationsmenyn.",
- "Select default encryption module:" : "Välj standard krypteringsmodul:",
+ "Select default encryption module:" : "Välj krypteringsmodul:",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya. Var god aktivera \"Default encryption module\" och kör 'occ encryption:migrate'.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya.",
"Start migration" : "Starta migrering",
@@ -341,6 +338,9 @@ OC.L10N.register(
"Default" : "Förvald",
"log-level out of allowed range" : "logg-nivå utanför tillåtet område",
"Language changed" : "Språk ändrades",
+ "Admins can't remove themself from the admin group" : "Administratörer kan inte ta bort sig själva från admingruppen",
+ "Unable to add user to group %s" : "Kan inte lägga till användare i gruppen %s",
+ "Unable to remove user from group %s" : "Kan inte radera användare från gruppen %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Är du verkligen säker på att du vill lägga till \"{domain}\" som en trusted domian?",
"Please wait...." : "Var god vänta ...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json
index 55a40b7173a..4024d1b622a 100644
--- a/settings/l10n/sv.json
+++ b/settings/l10n/sv.json
@@ -37,9 +37,6 @@
"Email saved" : "E-post sparad",
"Password confirmation is required" : "Lösenordsbekräftelse krävs",
"Couldn't remove app." : "Kunde inte ta bort applikationen.",
- "Admins can't remove themself from the admin group" : "Administratörer kan inte ta bort sig själva från admingruppen",
- "Unable to add user to group %s" : "Kan inte lägga till användare i gruppen %s",
- "Unable to remove user from group %s" : "Kan inte radera användare från gruppen %s",
"Couldn't update app." : "Kunde inte uppdatera appen.",
"Are you really sure you want add {domain} as trusted domain?" : "Är du verkligen säker att du vill lägga till (domain) som tillförlitlig domän?",
"Add trusted domain" : "Lägg till betrodd domän",
@@ -172,7 +169,7 @@
"This is the final warning: Do you really want to enable encryption?" : "Detta är en slutgiltig varning: Vill du verkligen aktivera kryptering?",
"Enable encryption" : "Aktivera kryptering",
"No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul laddad, var god aktivera krypteringsmodulen i applikationsmenyn.",
- "Select default encryption module:" : "Välj standard krypteringsmodul:",
+ "Select default encryption module:" : "Välj krypteringsmodul:",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya. Var god aktivera \"Default encryption module\" och kör 'occ encryption:migrate'.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya.",
"Start migration" : "Starta migrering",
@@ -339,6 +336,9 @@
"Default" : "Förvald",
"log-level out of allowed range" : "logg-nivå utanför tillåtet område",
"Language changed" : "Språk ändrades",
+ "Admins can't remove themself from the admin group" : "Administratörer kan inte ta bort sig själva från admingruppen",
+ "Unable to add user to group %s" : "Kan inte lägga till användare i gruppen %s",
+ "Unable to remove user from group %s" : "Kan inte radera användare från gruppen %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Är du verkligen säker på att du vill lägga till \"{domain}\" som en trusted domian?",
"Please wait...." : "Var god vänta ...",
"iPhone" : "iPhone",
diff --git a/settings/l10n/ta_LK.js b/settings/l10n/ta_LK.js
index d16ebf306e3..ff63cae0124 100644
--- a/settings/l10n/ta_LK.js
+++ b/settings/l10n/ta_LK.js
@@ -4,8 +4,6 @@ OC.L10N.register(
"Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
"Invalid request" : "செல்லுபடியற்ற வேண்டுகோள்",
"Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது",
- "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது",
- "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது",
"All" : "எல்லாம்",
"Disable" : "இயலுமைப்ப",
"Enable" : "இயலுமைப்படுத்துக",
@@ -35,6 +33,8 @@ OC.L10N.register(
"Other" : "மற்றவை",
"Quota" : "பங்கு",
"Language changed" : "மொழி மாற்றப்பட்டது",
+ "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது",
+ "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது",
"More" : "மேலதிக",
"Less" : "குறைவான"
},
diff --git a/settings/l10n/ta_LK.json b/settings/l10n/ta_LK.json
index ac3f00ca2e0..7a862136b81 100644
--- a/settings/l10n/ta_LK.json
+++ b/settings/l10n/ta_LK.json
@@ -2,8 +2,6 @@
"Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
"Invalid request" : "செல்லுபடியற்ற வேண்டுகோள்",
"Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது",
- "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது",
- "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது",
"All" : "எல்லாம்",
"Disable" : "இயலுமைப்ப",
"Enable" : "இயலுமைப்படுத்துக",
@@ -33,6 +31,8 @@
"Other" : "மற்றவை",
"Quota" : "பங்கு",
"Language changed" : "மொழி மாற்றப்பட்டது",
+ "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது",
+ "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது",
"More" : "மேலதிக",
"Less" : "குறைவான"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/settings/l10n/th_TH.js b/settings/l10n/th_TH.js
index 7c493b11a53..f2a1d599c1d 100644
--- a/settings/l10n/th_TH.js
+++ b/settings/l10n/th_TH.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "ไม่สามารถที่จะเปลี่ยนที่อยู่อีเมล",
"Email saved" : "อีเมลถูกบันทึกแล้ว",
"Couldn't remove app." : "ไม่สามารถลบแอพฯ",
- "Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้",
- "Unable to add user to group %s" : "ไม่สามารถเพิ่มผู้ใช้งานเข้าไปที่กลุ่ม %s ได้",
- "Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้",
"Couldn't update app." : "ไม่สามารถอัพเดทแอปฯ",
"Add trusted domain" : "เพิ่มโดเมนที่เชื่อถือได้",
"Migration in progress. Please wait until the migration is finished" : "ในระหว่างดำเนินการโยกย้าย กรุณารอสักครู่จนกว่าการโยกย้ายจะเสร็จสิ้น",
@@ -244,6 +241,9 @@ OC.L10N.register(
"Default" : "ค่าเริ่มต้น",
"log-level out of allowed range" : "ระดับ-บันทึก ไม่ได้อยู่ในช่วงที่ได้รับอนุญาต",
"Language changed" : "เปลี่ยนภาษาเรียบร้อยแล้ว",
+ "Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้",
+ "Unable to add user to group %s" : "ไม่สามารถเพิ่มผู้ใช้งานเข้าไปที่กลุ่ม %s ได้",
+ "Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "คุณแน่ใจจริงๆ ว่าคุณต้องการเพิ่ม \"{domain}\" เป็นโดเมนที่เชื่อถือได้?",
"Please wait...." : "กรุณารอสักครู่...",
"Everything (fatal issues, errors, warnings, info, debug)" : "ทุกอย่าง (ปัญหาร้ายแรง ข้อผิดพลาด คำเตือน ข้อมูล การแก้ปัญหา)",
diff --git a/settings/l10n/th_TH.json b/settings/l10n/th_TH.json
index 19e9b941834..e3cc8835b53 100644
--- a/settings/l10n/th_TH.json
+++ b/settings/l10n/th_TH.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "ไม่สามารถที่จะเปลี่ยนที่อยู่อีเมล",
"Email saved" : "อีเมลถูกบันทึกแล้ว",
"Couldn't remove app." : "ไม่สามารถลบแอพฯ",
- "Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้",
- "Unable to add user to group %s" : "ไม่สามารถเพิ่มผู้ใช้งานเข้าไปที่กลุ่ม %s ได้",
- "Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้",
"Couldn't update app." : "ไม่สามารถอัพเดทแอปฯ",
"Add trusted domain" : "เพิ่มโดเมนที่เชื่อถือได้",
"Migration in progress. Please wait until the migration is finished" : "ในระหว่างดำเนินการโยกย้าย กรุณารอสักครู่จนกว่าการโยกย้ายจะเสร็จสิ้น",
@@ -242,6 +239,9 @@
"Default" : "ค่าเริ่มต้น",
"log-level out of allowed range" : "ระดับ-บันทึก ไม่ได้อยู่ในช่วงที่ได้รับอนุญาต",
"Language changed" : "เปลี่ยนภาษาเรียบร้อยแล้ว",
+ "Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้",
+ "Unable to add user to group %s" : "ไม่สามารถเพิ่มผู้ใช้งานเข้าไปที่กลุ่ม %s ได้",
+ "Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "คุณแน่ใจจริงๆ ว่าคุณต้องการเพิ่ม \"{domain}\" เป็นโดเมนที่เชื่อถือได้?",
"Please wait...." : "กรุณารอสักครู่...",
"Everything (fatal issues, errors, warnings, info, debug)" : "ทุกอย่าง (ปัญหาร้ายแรง ข้อผิดพลาด คำเตือน ข้อมูล การแก้ปัญหา)",
diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js
index e37b8dfa955..418854fb4dc 100644
--- a/settings/l10n/tr.js
+++ b/settings/l10n/tr.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Posta adresini değiştirme başarısız",
"Email saved" : "E-posta kaydedildi",
"Couldn't remove app." : "Uygulama kaldırılamadı.",
- "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz",
- "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor",
- "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor",
"Couldn't update app." : "Uygulama güncellenemedi.",
"Add trusted domain" : "Güvenilir alan adı ekle",
"Migration in progress. Please wait until the migration is finished" : "Taşınma sürüyor. Lütfen taşınma tamamlanana kadar bekleyin",
@@ -285,6 +282,9 @@ OC.L10N.register(
"Default" : "Öntanımlı",
"log-level out of allowed range" : "günlük seviyesi izin verilen aralık dışında",
"Language changed" : "Dil değiştirildi",
+ "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz",
+ "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor",
+ "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" alan adını güvenilir alan adı olarak eklemek istediğinizden emin misiniz?",
"Please wait...." : "Lütfen bekleyin....",
"iPhone" : "iPhone",
diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json
index 95fbac30ff9..4472e7f8242 100644
--- a/settings/l10n/tr.json
+++ b/settings/l10n/tr.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Posta adresini değiştirme başarısız",
"Email saved" : "E-posta kaydedildi",
"Couldn't remove app." : "Uygulama kaldırılamadı.",
- "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz",
- "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor",
- "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor",
"Couldn't update app." : "Uygulama güncellenemedi.",
"Add trusted domain" : "Güvenilir alan adı ekle",
"Migration in progress. Please wait until the migration is finished" : "Taşınma sürüyor. Lütfen taşınma tamamlanana kadar bekleyin",
@@ -283,6 +280,9 @@
"Default" : "Öntanımlı",
"log-level out of allowed range" : "günlük seviyesi izin verilen aralık dışında",
"Language changed" : "Dil değiştirildi",
+ "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz",
+ "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor",
+ "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" alan adını güvenilir alan adı olarak eklemek istediğinizden emin misiniz?",
"Please wait...." : "Lütfen bekleyin....",
"iPhone" : "iPhone",
diff --git a/settings/l10n/ug.js b/settings/l10n/ug.js
index bf4b16b3027..c93f085439d 100644
--- a/settings/l10n/ug.js
+++ b/settings/l10n/ug.js
@@ -4,9 +4,6 @@ OC.L10N.register(
"Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
"Invalid request" : "ئىناۋەتسىز ئىلتىماس",
"Email saved" : "تورخەت ساقلاندى",
- "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ",
- "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ",
- "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ",
"Couldn't update app." : "ئەپنى يېڭىلىيالمايدۇ.",
"All" : "ھەممىسى",
"Disable" : "چەكلە",
@@ -46,6 +43,9 @@ OC.L10N.register(
"set new password" : "يېڭى ئىم تەڭشە",
"Default" : "كۆڭۈلدىكى",
"Language changed" : "تىل ئۆزگەردى",
+ "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ",
+ "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ",
+ "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ",
"Please wait...." : "سەل كۈتۈڭ…",
"Log" : "خاتىرە",
"More" : "تېخىمۇ كۆپ",
diff --git a/settings/l10n/ug.json b/settings/l10n/ug.json
index b99ed2b034b..70a46e94da0 100644
--- a/settings/l10n/ug.json
+++ b/settings/l10n/ug.json
@@ -2,9 +2,6 @@
"Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
"Invalid request" : "ئىناۋەتسىز ئىلتىماس",
"Email saved" : "تورخەت ساقلاندى",
- "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ",
- "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ",
- "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ",
"Couldn't update app." : "ئەپنى يېڭىلىيالمايدۇ.",
"All" : "ھەممىسى",
"Disable" : "چەكلە",
@@ -44,6 +41,9 @@
"set new password" : "يېڭى ئىم تەڭشە",
"Default" : "كۆڭۈلدىكى",
"Language changed" : "تىل ئۆزگەردى",
+ "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ",
+ "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ",
+ "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ",
"Please wait...." : "سەل كۈتۈڭ…",
"Log" : "خاتىرە",
"More" : "تېخىمۇ كۆپ",
diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js
index af6a3735ec5..0ba5efbf720 100644
--- a/settings/l10n/uk.js
+++ b/settings/l10n/uk.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Неможливо поміняти email адресу",
"Email saved" : "Адресу збережено",
"Couldn't remove app." : "Неможливо видалити додаток.",
- "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів",
- "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s",
- "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s",
"Couldn't update app." : "Не вдалося оновити додаток. ",
"Add trusted domain" : "Додати довірений домен",
"Migration in progress. Please wait until the migration is finished" : "Міграція триває. Будь ласка, зачекайте доки процес міграції завершиться",
@@ -218,6 +215,9 @@ OC.L10N.register(
"Default" : "За замовчуванням",
"log-level out of allowed range" : "рівень протоколювання перевищує дозволені межі",
"Language changed" : "Мову змінено",
+ "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів",
+ "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s",
+ "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ви дійсно бажаєте додати \"{domain}\" як довірений домен?",
"Please wait...." : "Зачекайте, будь ласка...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Усі (критичні проблеми, помилки, попередження, інформаційні, налагодження)",
diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json
index 13159cb589f..948dc4de7ee 100644
--- a/settings/l10n/uk.json
+++ b/settings/l10n/uk.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Неможливо поміняти email адресу",
"Email saved" : "Адресу збережено",
"Couldn't remove app." : "Неможливо видалити додаток.",
- "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів",
- "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s",
- "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s",
"Couldn't update app." : "Не вдалося оновити додаток. ",
"Add trusted domain" : "Додати довірений домен",
"Migration in progress. Please wait until the migration is finished" : "Міграція триває. Будь ласка, зачекайте доки процес міграції завершиться",
@@ -216,6 +213,9 @@
"Default" : "За замовчуванням",
"log-level out of allowed range" : "рівень протоколювання перевищує дозволені межі",
"Language changed" : "Мову змінено",
+ "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів",
+ "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s",
+ "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ви дійсно бажаєте додати \"{domain}\" як довірений домен?",
"Please wait...." : "Зачекайте, будь ласка...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Усі (критичні проблеми, помилки, попередження, інформаційні, налагодження)",
diff --git a/settings/l10n/vi.js b/settings/l10n/vi.js
index c989c037a72..cd73020bddb 100644
--- a/settings/l10n/vi.js
+++ b/settings/l10n/vi.js
@@ -9,9 +9,6 @@ OC.L10N.register(
"Unable to change full name" : "Họ và tên không thể đổi ",
"Your full name has been changed." : "Họ và tên đã được thay đổi.",
"Email saved" : "Lưu email",
- "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý",
- "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s",
- "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s",
"Couldn't update app." : "Không thể cập nhật ứng dụng",
"All" : "Tất cả",
"Disable" : "Tắt",
@@ -62,6 +59,9 @@ OC.L10N.register(
"set new password" : "đặt mật khẩu mới",
"Default" : "Mặc định",
"Language changed" : "Ngôn ngữ đã được thay đổi",
+ "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý",
+ "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s",
+ "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s",
"Please wait...." : "Xin hãy đợi...",
"Log" : "Log",
"More" : "hơn",
diff --git a/settings/l10n/vi.json b/settings/l10n/vi.json
index a6f1e0427d6..cd1a4245ca0 100644
--- a/settings/l10n/vi.json
+++ b/settings/l10n/vi.json
@@ -7,9 +7,6 @@
"Unable to change full name" : "Họ và tên không thể đổi ",
"Your full name has been changed." : "Họ và tên đã được thay đổi.",
"Email saved" : "Lưu email",
- "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý",
- "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s",
- "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s",
"Couldn't update app." : "Không thể cập nhật ứng dụng",
"All" : "Tất cả",
"Disable" : "Tắt",
@@ -60,6 +57,9 @@
"set new password" : "đặt mật khẩu mới",
"Default" : "Mặc định",
"Language changed" : "Ngôn ngữ đã được thay đổi",
+ "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý",
+ "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s",
+ "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s",
"Please wait...." : "Xin hãy đợi...",
"Log" : "Log",
"More" : "hơn",
diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js
index 5c7fd8feb8d..c70d0aa67f1 100644
--- a/settings/l10n/zh_CN.js
+++ b/settings/l10n/zh_CN.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "无法更改邮箱地址",
"Email saved" : "电子邮件已保存",
"Couldn't remove app." : "无法删除应用。",
- "Admins can't remove themself from the admin group" : "管理员不能将自己移出管理组。",
- "Unable to add user to group %s" : "无法把用户增加到组 %s",
- "Unable to remove user from group %s" : "无法从组%s中移除用户",
"Couldn't update app." : "无法更新应用。",
"Add trusted domain" : "添加信任域",
"Migration in progress. Please wait until the migration is finished" : "迁移正在进行中。请等待,直到完成迁移",
@@ -239,6 +236,9 @@ OC.L10N.register(
"Default" : "默认",
"log-level out of allowed range" : "日志级别超出允许的范围",
"Language changed" : "语言已修改",
+ "Admins can't remove themself from the admin group" : "管理员不能将自己移出管理组。",
+ "Unable to add user to group %s" : "无法把用户增加到组 %s",
+ "Unable to remove user from group %s" : "无法从组%s中移除用户",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "你真的希望添加 \"{domain}\" 为信任域?",
"Please wait...." : "请稍等....",
"Everything (fatal issues, errors, warnings, info, debug)" : "所有(灾难性问题,错误,警告,信息,调试)",
diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json
index 10e7ca844a8..0fbec2e48fd 100644
--- a/settings/l10n/zh_CN.json
+++ b/settings/l10n/zh_CN.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "无法更改邮箱地址",
"Email saved" : "电子邮件已保存",
"Couldn't remove app." : "无法删除应用。",
- "Admins can't remove themself from the admin group" : "管理员不能将自己移出管理组。",
- "Unable to add user to group %s" : "无法把用户增加到组 %s",
- "Unable to remove user from group %s" : "无法从组%s中移除用户",
"Couldn't update app." : "无法更新应用。",
"Add trusted domain" : "添加信任域",
"Migration in progress. Please wait until the migration is finished" : "迁移正在进行中。请等待,直到完成迁移",
@@ -237,6 +234,9 @@
"Default" : "默认",
"log-level out of allowed range" : "日志级别超出允许的范围",
"Language changed" : "语言已修改",
+ "Admins can't remove themself from the admin group" : "管理员不能将自己移出管理组。",
+ "Unable to add user to group %s" : "无法把用户增加到组 %s",
+ "Unable to remove user from group %s" : "无法从组%s中移除用户",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "你真的希望添加 \"{domain}\" 为信任域?",
"Please wait...." : "请稍等....",
"Everything (fatal issues, errors, warnings, info, debug)" : "所有(灾难性问题,错误,警告,信息,调试)",
diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js
index f19a6e825d0..942c29a2157 100644
--- a/settings/l10n/zh_TW.js
+++ b/settings/l10n/zh_TW.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "無法更改 email 地址",
"Email saved" : "Email 已儲存",
"Couldn't remove app." : "無法移除應用程式",
- "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除",
- "Unable to add user to group %s" : "無法將使用者加入群組 %s",
- "Unable to remove user from group %s" : "無法將使用者移出群組 %s",
"Couldn't update app." : "無法更新應用程式",
"Add trusted domain" : "新增信任的網域",
"Migration in progress. Please wait until the migration is finished" : "資料搬移中,請耐心等候直到資料搬移結束",
@@ -253,6 +250,9 @@ OC.L10N.register(
"Default" : "預設",
"log-level out of allowed range" : "log-level 超過允許範圍",
"Language changed" : "語言已變更",
+ "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除",
+ "Unable to add user to group %s" : "無法將使用者加入群組 %s",
+ "Unable to remove user from group %s" : "無法將使用者移出群組 %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "您確定要新增 \"{domain}' 為信任的網域?",
"Please wait...." : "請稍候…",
"iPhone" : "iPhone",
diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json
index 595b47eb9be..21af65d762b 100644
--- a/settings/l10n/zh_TW.json
+++ b/settings/l10n/zh_TW.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "無法更改 email 地址",
"Email saved" : "Email 已儲存",
"Couldn't remove app." : "無法移除應用程式",
- "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除",
- "Unable to add user to group %s" : "無法將使用者加入群組 %s",
- "Unable to remove user from group %s" : "無法將使用者移出群組 %s",
"Couldn't update app." : "無法更新應用程式",
"Add trusted domain" : "新增信任的網域",
"Migration in progress. Please wait until the migration is finished" : "資料搬移中,請耐心等候直到資料搬移結束",
@@ -251,6 +248,9 @@
"Default" : "預設",
"log-level out of allowed range" : "log-level 超過允許範圍",
"Language changed" : "語言已變更",
+ "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除",
+ "Unable to add user to group %s" : "無法將使用者加入群組 %s",
+ "Unable to remove user from group %s" : "無法將使用者移出群組 %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "您確定要新增 \"{domain}' 為信任的網域?",
"Please wait...." : "請稍候…",
"iPhone" : "iPhone",
diff --git a/settings/templates/admin/frame.php b/settings/templates/admin/frame.php
index 761d76c4434..2b234f4cd9b 100644
--- a/settings/templates/admin/frame.php
+++ b/settings/templates/admin/frame.php
@@ -30,14 +30,28 @@ script('files', 'jquery.fileupload');
<div id="app-navigation">
<ul>
- <?php foreach($_['forms'] as $form) {
+ <?php
+ foreach($_['forms'] as $form) {
if (isset($form['anchor'])) {
$anchor = \OC::$server->getURLGenerator()->linkToRoute('settings.AdminSettings.index', ['section' => $form['anchor']]);
+ $class = 'nav-icon-' . $form['anchor'];
$sectionName = $form['section-name'];
$active = $form['active'] ? ' class="active"' : '';
- print_unescaped(sprintf("<li%s><a href='%s'>%s</a></li>", $active, \OCP\Util::sanitizeHTML($anchor), \OCP\Util::sanitizeHTML($sectionName)));
+ ?>
+ <li <?php print_unescaped($form['active'] ? ' class="active"' : ''); ?>>
+ <a href="<?php p($anchor); ?>">
+ <?php if (!empty($form['icon'])) { ?>
+ <img alt="" src="<?php print_unescaped($form['icon']); ?>">
+ <span><?php p($form['section-name']); ?></span>
+ <?php } else { ?>
+ <span class="no-icon"><?php p($form['section-name']); ?></span>
+ <?php } ?>
+ </a>
+ </li>
+ <?php
}
- }?>
+ }
+ ?>
</ul>
</div>
diff --git a/settings/templates/apps.php b/settings/templates/apps.php
index 24f8061a530..80689237e60 100644
--- a/settings/templates/apps.php
+++ b/settings/templates/apps.php
@@ -3,7 +3,9 @@ style('settings', 'settings');
vendor_script(
'core',
[
- 'handlebars/handlebars'
+ 'handlebars/handlebars',
+ 'marked/marked.min',
+ 'DOMPurify/dist/purify.min',
]
);
script(
@@ -59,7 +61,7 @@ script(
<div class="app-detailpage"></div>
<div class="app-description-container hidden">
- <div class="app-description"><pre>{{description}}</pre></div>
+ <div class="app-description">{{{description}}}</div>
<!--<div class="app-changed">{{changed}}</div>-->
{{#if documentation}}
<p class="documentation">
@@ -148,7 +150,7 @@ script(
</ul>
</div>
<div id="app-content">
- <svg height="0">
+ <svg class="app-filter">
<defs><filter id="invertIcon"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"></feColorMatrix></filter></defs>
</svg>
<div id="apps-list" class="icon-loading"></div>
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index a14982b9b74..65ce3751b98 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -9,12 +9,14 @@
?>
<div id="app-navigation">
- <ul>
+ <ul class="with-icon">
<?php foreach($_['forms'] as $form) {
if (isset($form['anchor'])) {
$anchor = '#' . $form['anchor'];
+ $class = 'nav-icon-' . $form['anchor'];
$sectionName = $form['section-name'];
- print_unescaped(sprintf("<li><a href='%s'>%s</a></li>", \OCP\Util::sanitizeHTML($anchor), \OCP\Util::sanitizeHTML($sectionName)));
+ print_unescaped(sprintf("<li><a href='%s' class='%s'>%s</a></li>", \OCP\Util::sanitizeHTML($anchor),
+ \OCP\Util::sanitizeHTML($class), \OCP\Util::sanitizeHTML($sectionName)));
}
}?>
</ul>
@@ -184,12 +186,14 @@ if($_['passwordChangeSupported']) {
<input type="password" id="pass1" name="oldpassword"
placeholder="<?php p($l->t('Current password'));?>"
autocomplete="off" autocapitalize="off" autocorrect="off" />
- <label for="pass2" class="hidden-visually"><?php p($l->t('New password'));?>: </label>
- <input type="password" id="pass2" name="newpassword"
- placeholder="<?php p($l->t('New password')); ?>"
- data-typetoggle="#personal-show"
- autocomplete="off" autocapitalize="off" autocorrect="off" />
- <input type="checkbox" id="personal-show" name="show" /><label for="personal-show" class="personal-show-label"></label>
+ <div class="personal-show-container">
+ <label for="pass2" class="hidden-visually"><?php p($l->t('New password'));?>: </label>
+ <input type="password" id="pass2" name="newpassword"
+ placeholder="<?php p($l->t('New password')); ?>"
+ data-typetoggle="#personal-show"
+ autocomplete="off" autocapitalize="off" autocorrect="off" />
+ <input type="checkbox" id="personal-show" name="show" /><label for="personal-show" class="personal-show-label"></label>
+ </div>
<input id="passwordbutton" type="submit" value="<?php p($l->t('Change password')); ?>" />
<br/>
</form>
diff --git a/settings/tests/js/appsSpec.js b/settings/tests/js/appsSpec.js
index aa785a6768e..4b917b425c1 100644
--- a/settings/tests/js/appsSpec.js
+++ b/settings/tests/js/appsSpec.js
@@ -185,23 +185,27 @@ describe('OC.Settings.Apps tests', function() {
{
id: 'foo',
name: 'Foo app',
+ description: 'Hello',
level: 0,
author: 'foo'
},
{
id: 'alpha',
name: 'Alpha app',
+ description: 'Hello',
level: 300,
author: ['alpha', 'beta']
},
{
id: 'nolevel',
name: 'No level',
+ description: 'Hello',
author: 'bar'
},
{
id: 'zork',
name: 'Some famous adventure game',
+ description: 'Hello',
level: 200,
author: 'baz'
@@ -209,6 +213,7 @@ describe('OC.Settings.Apps tests', function() {
{
id: 'delta',
name: 'Mathematical symbol',
+ description: 'Hello',
level: 200,
author: 'foobar'
}
@@ -223,29 +228,34 @@ describe('OC.Settings.Apps tests', function() {
'foo': {
id: 'foo',
name: 'Foo app',
+ description: 'Hello',
level: 0,
author: 'foo'
},
'alpha': {
id: 'alpha',
name: 'Alpha app',
+ description: 'Hello',
level: 300,
author: ['alpha', 'beta']
},
'nolevel': {
id: 'nolevel',
name: 'No level',
+ description: 'Hello',
author: 'bar'
},
'zork': {
id: 'zork',
name: 'Some famous adventure game',
+ description: 'Hello',
level: 200,
author: 'baz',
},
'delta': {
id: 'delta',
name: 'Mathematical symbol',
+ description: 'Hello',
level: 200,
author: 'foobar'
}
diff --git a/tests/Core/Controller/OCSControllerTest.php b/tests/Core/Controller/OCSControllerTest.php
index 6c47521786f..7241df9317c 100644
--- a/tests/Core/Controller/OCSControllerTest.php
+++ b/tests/Core/Controller/OCSControllerTest.php
@@ -116,24 +116,6 @@ class OCSControllerTest extends TestCase {
$this->assertEquals($expected, $this->controller->getCapabilities());
}
- public function testGetCurrentUser() {
- $user = $this->createMock(IUser::class);
- $user->method('getUID')->willReturn('uid');
- $user->method('getDisplayName')->willReturn('displayName');
- $user->method('getEMailAddress')->willReturn('e@mail.com');
-
-
- $this->userSession->method('getUser')
- ->willReturn($user);
-
- $expected = new DataResponse([
- 'id' => 'uid',
- 'display-name' => 'displayName',
- 'email' => 'e@mail.com',
- ]);
- $this->assertEquals($expected, $this->controller->getCurrentUser());
- }
-
public function testPersonCheckValid() {
$this->request->method('getRemoteAddress')
->willReturn('1.2.3.4');
diff --git a/tests/Settings/Controller/UsersControllerTest.php b/tests/Settings/Controller/UsersControllerTest.php
index b85667740f7..36ca0917524 100644
--- a/tests/Settings/Controller/UsersControllerTest.php
+++ b/tests/Settings/Controller/UsersControllerTest.php
@@ -19,6 +19,7 @@ use OCP\AppFramework\Http\DataResponse;
use OCP\IAvatar;
use OCP\IAvatarManager;
use OCP\IConfig;
+use OCP\IGroup;
use OCP\IGroupManager;
use OCP\IL10N;
use OCP\ILogger;
@@ -852,95 +853,6 @@ class UsersControllerTest extends \Test\TestCase {
$this->assertEquals($expectedResponse, $response);
}
- public function testCreateSuccessfulWithoutGroupSubAdmin() {
- $controller = $this->getController(false);
- $user = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
- $this->userSession
- ->expects($this->once())
- ->method('getUser')
- ->will($this->returnValue($user));
-
- $newUser = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
- $newUser
- ->method('getUID')
- ->will($this->returnValue('foo'));
- $newUser
- ->method('getHome')
- ->will($this->returnValue('/home/user'));
- $newUser
- ->method('getHome')
- ->will($this->returnValue('/home/user'));
- $newUser
- ->expects($this->once())
- ->method('getBackendClassName')
- ->will($this->returnValue('bar'));
- $user = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
- $subGroup1 = $this->getMockBuilder('\OCP\IGroup')
- ->disableOriginalConstructor()->getMock();
- $subGroup1
- ->expects($this->once())
- ->method('addUser')
- ->with($newUser);
- $subGroup2 = $this->getMockBuilder('\OCP\IGroup')
- ->disableOriginalConstructor()->getMock();
- $subGroup2
- ->expects($this->once())
- ->method('addUser')
- ->with($newUser);
-
- $this->userManager
- ->expects($this->once())
- ->method('createUser')
- ->will($this->returnValue($newUser));
- $this->groupManager
- ->expects($this->exactly(2))
- ->method('get')
- ->will($this->onConsecutiveCalls($subGroup1, $subGroup2));
- $this->groupManager
- ->expects($this->once())
- ->method('getUserGroupIds')
- ->with($user)
- ->will($this->onConsecutiveCalls(['SubGroup1', 'SubGroup2']));
-
- $subadmin = $this->getMockBuilder('\OC\SubAdmin')
- ->disableOriginalConstructor()
- ->getMock();
- $subadmin
- ->expects($this->at(0))
- ->method('getSubAdminsGroups')
- ->will($this->returnValue([$subGroup1, $subGroup2]));
- $subadmin
- ->expects($this->at(1))
- ->method('getSubAdminsGroups')
- ->will($this->returnValue([]));
- $this->groupManager
- ->expects($this->any())
- ->method('getSubAdmin')
- ->will($this->returnValue($subadmin));
-
- $expectedResponse = new DataResponse(
- array(
- 'name' => 'foo',
- 'groups' => ['SubGroup1', 'SubGroup2'],
- 'storageLocation' => '/home/user',
- 'backend' => 'bar',
- 'lastLogin' => 0,
- 'displayname' => null,
- 'quota' => null,
- 'subadmin' => [],
- 'email' => null,
- 'isRestoreDisabled' => false,
- 'isAvatarAvailable' => true,
- ),
- Http::STATUS_CREATED
- );
- $response = $controller->create('foo', 'password');
- $this->assertEquals($expectedResponse, $response);
- }
-
public function testCreateSuccessfulWithGroupAdmin() {
$controller = $this->getController(true);
@@ -1026,16 +938,12 @@ class UsersControllerTest extends \Test\TestCase {
public function testCreateSuccessfulWithGroupSubAdmin() {
$controller = $this->getController(false);
- $user = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
+ $user = $this->createMock(IUser::class);
$this->userSession
->expects($this->once())
->method('getUser')
->will($this->returnValue($user));
- $user = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
- $newUser = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
+ $newUser = $this->createMock(IUser::class);
$newUser
->method('getHome')
->will($this->returnValue('/home/user'));
@@ -1049,8 +957,7 @@ class UsersControllerTest extends \Test\TestCase {
->expects($this->once())
->method('getBackendClassName')
->will($this->returnValue('bar'));
- $subGroup1 = $this->getMockBuilder('\OCP\IGroup')
- ->disableOriginalConstructor()->getMock();
+ $subGroup1 = $this->createMock(IGroup::class);
$subGroup1
->expects($this->any())
->method('getGID')
@@ -1064,16 +971,6 @@ class UsersControllerTest extends \Test\TestCase {
->method('createUser')
->will($this->returnValue($newUser));
$this->groupManager
- ->expects($this->at(0))
- ->method('get')
- ->with('SubGroup1')
- ->will($this->returnValue($subGroup1));
- $this->groupManager
- ->expects($this->at(4))
- ->method('get')
- ->with('SubGroup1')
- ->will($this->returnValue($subGroup1));
- $this->groupManager
->expects($this->once())
->method('getUserGroupIds')
->with($user)
@@ -1084,21 +981,28 @@ class UsersControllerTest extends \Test\TestCase {
->with($newUser)
->will($this->onConsecutiveCalls(['SubGroup1']));
- $subadmin = $this->getMockBuilder('\OC\SubAdmin')
- ->disableOriginalConstructor()
- ->getMock();
- $subadmin->expects($this->at(1))
+ $subadmin = $this->createMock(\OC\SubAdmin::class);
+ $subadmin->expects($this->atLeastOnce())
->method('getSubAdminsGroups')
->with($user)
- ->will($this->returnValue([$subGroup1]));
- $subadmin->expects($this->at(2))
- ->method('getSubAdminsGroups')
- ->with($newUser)
- ->will($this->returnValue([]));
+ ->willReturnMap([
+ [$user, [$subGroup1]],
+ [$newUser, []],
+ ]);
+ $subadmin->expects($this->atLeastOnce())
+ ->method('isSubAdminofGroup')
+ ->willReturnMap([
+ [$user, $subGroup1, true],
+ ]);
$this->groupManager
->expects($this->any())
->method('getSubAdmin')
->will($this->returnValue($subadmin));
+ $this->groupManager->expects($this->atLeastOnce())
+ ->method('get')
+ ->willReturnMap([
+ ['SubGroup1', $subGroup1],
+ ]);
$expectedResponse = new DataResponse(
array(
@@ -1137,16 +1041,36 @@ class UsersControllerTest extends \Test\TestCase {
$this->assertEquals($expectedResponse, $response);
}
+ public function testCreateUnsuccessfulSubAdminNoGroup() {
+ $controller = $this->getController(false);
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->any())
+ ->method('getUID')
+ ->will($this->returnValue('username'));
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->will($this->returnValue($user));
+
+ $this->userManager->expects($this->never())
+ ->method('createUser');
+
+ $expectedResponse = new DataResponse(
+ [
+ 'message' => 'No valid group selected'
+ ],
+ Http::STATUS_FORBIDDEN
+ );
+ $response = $controller->create('foo', 'password', []);
+ $this->assertEquals($expectedResponse, $response);
+ }
+
public function testCreateUnsuccessfulSubAdmin() {
$controller = $this->getController(false);
- $user = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
- $user
- ->expects($this->any())
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->any())
->method('getUID')
->will($this->returnValue('username'));
- $this->userSession
- ->expects($this->once())
+ $this->userSession->expects($this->once())
->method('getUser')
->will($this->returnValue($user));
@@ -1154,29 +1078,24 @@ class UsersControllerTest extends \Test\TestCase {
->method('createUser')
->will($this->throwException(new \Exception()));
- $subgroup1 = $this->getMockBuilder('\OCP\IGroup')
- ->disableOriginalConstructor()
- ->getMock();
- $subgroup1->expects($this->once())
- ->method('getGID')
- ->will($this->returnValue('SubGroup1'));
- $subgroup2 = $this->getMockBuilder('\OCP\IGroup')
- ->disableOriginalConstructor()
- ->getMock();
- $subgroup2->expects($this->once())
- ->method('getGID')
- ->will($this->returnValue('SubGroup2'));
- $subadmin = $this->getMockBuilder('\OC\SubAdmin')
- ->disableOriginalConstructor()
- ->getMock();
- $subadmin->expects($this->once())
- ->method('getSubAdminsGroups')
- ->with($user)
- ->will($this->returnValue([$subgroup1, $subgroup2]));
- $this->groupManager
- ->expects($this->any())
+ $subgroup1 = $this->createMock(IGroup::class);
+ $subgroup2 = $this->createMock(IGroup::class);
+ $subadmin = $this->createMock(\OC\SubAdmin::class);
+ $subadmin->expects($this->atLeastOnce())
+ ->method('isSubAdminofGroup')
+ ->willReturnMap([
+ [$user, $subgroup1, true],
+ [$user, $subgroup2, true],
+ ]);
+ $this->groupManager->expects($this->any())
->method('getSubAdmin')
- ->will($this->returnValue($subadmin));
+ ->willReturn($subadmin);
+ $this->groupManager->expects($this->atLeastOnce())
+ ->method('get')
+ ->willReturnMap([
+ ['SubGroup1', $subgroup1],
+ ['SubGroup2', $subgroup2],
+ ]);
$expectedResponse = new DataResponse(
[
@@ -1184,7 +1103,7 @@ class UsersControllerTest extends \Test\TestCase {
],
Http::STATUS_FORBIDDEN
);
- $response = $controller->create('foo', 'password', array());
+ $response = $controller->create('foo', 'password', array('SubGroup1', 'SubGroup2'));
$this->assertEquals($expectedResponse, $response);
}
diff --git a/tests/karma.config.js b/tests/karma.config.js
index c499451c7dc..e9aa38dd66f 100644
--- a/tests/karma.config.js
+++ b/tests/karma.config.js
@@ -110,7 +110,9 @@ module.exports = function(config) {
name: 'settings',
srcFiles: [
'settings/js/apps.js',
- 'settings/js/users/deleteHandler.js'
+ 'settings/js/users/deleteHandler.js',
+ 'core/vendor/marked/marked.min.js',
+ 'core/vendor/DOMPurify/dist/purify.min.js'
],
testFiles: [
'settings/tests/js/appsSpec.js',
diff --git a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
index 5a988751070..164ea48de70 100644
--- a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
+++ b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
@@ -34,6 +34,7 @@ use OC\AppFramework\Middleware\Security\Exceptions\SecurityException;
use OC\Appframework\Middleware\Security\Exceptions\StrictCookieMissingException;
use OC\AppFramework\Middleware\Security\SecurityMiddleware;
use OC\AppFramework\Utility\ControllerMethodReflector;
+use OC\Security\Bruteforce\Throttler;
use OC\Security\CSP\ContentSecurityPolicy;
use OC\Security\CSP\ContentSecurityPolicyManager;
use OC\Security\CSP\ContentSecurityPolicyNonceManager;
@@ -82,6 +83,8 @@ class SecurityMiddlewareTest extends \Test\TestCase {
private $csrfTokenManager;
/** @var ContentSecurityPolicyNonceManager|\PHPUnit_Framework_MockObject_MockObject */
private $cspNonceManager;
+ /** @var Throttler|\PHPUnit_Framework_MockObject_MockObject */
+ private $bruteForceThrottler;
protected function setUp() {
parent::setUp();
@@ -96,6 +99,7 @@ class SecurityMiddlewareTest extends \Test\TestCase {
$this->contentSecurityPolicyManager = $this->createMock(ContentSecurityPolicyManager::class);
$this->csrfTokenManager = $this->createMock(CsrfTokenManager::class);
$this->cspNonceManager = $this->createMock(ContentSecurityPolicyNonceManager::class);
+ $this->bruteForceThrottler = $this->getMockBuilder(Throttler::class)->disableOriginalConstructor()->getMock();
$this->middleware = $this->getMiddleware(true, true);
$this->secException = new SecurityException('hey', false);
$this->secAjaxException = new SecurityException('hey', true);
@@ -119,7 +123,8 @@ class SecurityMiddlewareTest extends \Test\TestCase {
$isAdminUser,
$this->contentSecurityPolicyManager,
$this->csrfTokenManager,
- $this->cspNonceManager
+ $this->cspNonceManager,
+ $this->bruteForceThrottler
);
}
@@ -652,4 +657,70 @@ class SecurityMiddlewareTest extends \Test\TestCase {
$this->assertEquals($response, $this->middleware->afterController($this->controller, 'test', $response));
}
+
+ /**
+ * @dataProvider dataTestBeforeControllerBruteForce
+ */
+ public function testBeforeControllerBruteForce($bruteForceProtectionEnabled) {
+ /** @var ControllerMethodReflector|\PHPUnit_Framework_MockObject_MockObject $reader */
+ $reader = $this->getMockBuilder(ControllerMethodReflector::class)->disableOriginalConstructor()->getMock();
+
+ $middleware = new SecurityMiddleware(
+ $this->request,
+ $reader,
+ $this->navigationManager,
+ $this->urlGenerator,
+ $this->logger,
+ $this->session,
+ 'files',
+ false,
+ false,
+ $this->contentSecurityPolicyManager,
+ $this->csrfTokenManager,
+ $this->cspNonceManager,
+ $this->bruteForceThrottler
+ );
+
+ $reader->expects($this->any())->method('hasAnnotation')
+ ->willReturnCallback(
+ function($annotation) use ($bruteForceProtectionEnabled) {
+
+ switch ($annotation) {
+ case 'BruteForceProtection':
+ return $bruteForceProtectionEnabled;
+ case 'PasswordConfirmationRequired':
+ case 'StrictCookieRequired':
+ return false;
+ case 'PublicPage':
+ case 'NoCSRFRequired':
+ return true;
+ }
+
+ return true;
+ }
+ );
+
+ $reader->expects($this->any())->method('getAnnotationParameter')->willReturn('action');
+ $this->request->expects($this->any())->method('getRemoteAddress')->willReturn('remoteAddress');
+
+ if ($bruteForceProtectionEnabled) {
+ $this->bruteForceThrottler->expects($this->once())->method('sleepDelay')
+ ->with('remoteAddress', 'action');
+ $this->bruteForceThrottler->expects($this->once())->method('registerAttempt')
+ ->with('action', 'remoteAddress');
+ } else {
+ $this->bruteForceThrottler->expects($this->never())->method('sleepDelay');
+ $this->bruteForceThrottler->expects($this->never())->method('registerAttempt');
+ }
+
+ $middleware->beforeController($this->controller, 'test');
+
+ }
+
+ public function dataTestBeforeControllerBruteForce() {
+ return [
+ [true],
+ [false]
+ ];
+ }
}
diff --git a/tests/lib/AppFramework/Utility/ControllerMethodReflectorTest.php b/tests/lib/AppFramework/Utility/ControllerMethodReflectorTest.php
index 92d767e9987..644245e1967 100644
--- a/tests/lib/AppFramework/Utility/ControllerMethodReflectorTest.php
+++ b/tests/lib/AppFramework/Utility/ControllerMethodReflectorTest.php
@@ -77,6 +77,19 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
/**
+ * @Annotation parameter
+ */
+ public function testGetAnnotationParameter(){
+ $reader = new ControllerMethodReflector();
+ $reader->reflect(
+ '\Test\AppFramework\Utility\ControllerMethodReflectorTest',
+ 'testGetAnnotationParameter'
+ );
+
+ $this->assertSame('parameter', $reader->getAnnotationParameter('Annotation'));
+ }
+
+ /**
* @Annotation
* @param test
*/
diff --git a/tests/lib/AppTest.php b/tests/lib/AppTest.php
index 575e32dd60c..a60a03a07f5 100644
--- a/tests/lib/AppTest.php
+++ b/tests/lib/AppTest.php
@@ -8,6 +8,7 @@
*/
namespace Test;
+
use OC\AppConfig;
use OCP\IAppConfig;
@@ -24,7 +25,7 @@ class AppTest extends \Test\TestCase {
const TEST_GROUP1 = 'group1';
const TEST_GROUP2 = 'group2';
- function appVersionsProvider() {
+ public function appVersionsProvider() {
return array(
// exact match
array(
@@ -338,7 +339,7 @@ class AppTest extends \Test\TestCase {
/**
* Providers for the app config values
*/
- function appConfigValuesProvider() {
+ public function appConfigValuesProvider() {
return array(
// logged in user1
array(
@@ -561,27 +562,30 @@ class AppTest extends \Test\TestCase {
/**
* Providers for the app data values
*/
- function appDataProvider() {
+ public function appDataProvider() {
return [
[
['description' => " \t This is a multiline \n test with \n \t \n \n some new lines "],
- ['description' => "This is a multiline test with\n\nsome new lines"]
+ ['description' => "This is a multiline \n test with \n \t \n \n some new lines"],
],
[
['description' => " \t This is a multiline \n test with \n \t some new lines "],
- ['description' => "This is a multiline test with some new lines"]
+ ['description' => "This is a multiline \n test with \n \t some new lines"],
],
[
['description' => hex2bin('5065726d657420646520732761757468656e7469666965722064616e732070697769676f20646972656374656d656e74206176656320736573206964656e74696669616e7473206f776e636c6f75642073616e73206c65732072657461706572206574206d657420c3a0206a6f757273206365757820636920656e20636173206465206368616e67656d656e74206465206d6f742064652070617373652e0d0a0d')],
- ['description' => "Permet de s'authentifier dans piwigo directement avec ses identifiants owncloud sans les retaper et met à jours ceux ci en cas de changement de mot de passe."]
+ ['description' => "Permet de s'authentifier dans piwigo directement avec ses identifiants owncloud sans les retaper et met à jours ceux ci en cas de changement de mot de passe."],
],
[
['not-a-description' => " \t This is a multiline \n test with \n \t some new lines "],
- ['not-a-description' => " \t This is a multiline \n test with \n \t some new lines "]
+ [
+ 'not-a-description' => " \t This is a multiline \n test with \n \t some new lines ",
+ 'description' => '',
+ ],
],
[
['description' => [100, 'bla']],
- ['description' => ""]
+ ['description' => ''],
],
];
}
diff --git a/tests/lib/Files/Node/FileTest.php b/tests/lib/Files/Node/FileTest.php
index 823e3b50249..a17cc1d1a3a 100644
--- a/tests/lib/Files/Node/FileTest.php
+++ b/tests/lib/Files/Node/FileTest.php
@@ -8,161 +8,28 @@
namespace Test\Files\Node;
-use OC\Files\FileInfo;
-use OCP\Files\NotFoundException;
-use OCP\ILogger;
-use OCP\IUserManager;
-
-class FileTest extends \Test\TestCase {
- /** @var \OC\User\User */
- private $user;
- /** @var \OC\Files\Mount\Manager */
- private $manager;
- /** @var \OC\Files\View|\PHPUnit_Framework_MockObject_MockObject */
- private $view;
- /** @var \OCP\Files\Config\IUserMountCache|\PHPUnit_Framework_MockObject_MockObject */
- private $userMountCache;
- /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
- private $logger;
- /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
- private $userManager;
-
- protected function setUp() {
- parent::setUp();
- $config = $this->getMockBuilder('\OCP\IConfig')
- ->disableOriginalConstructor()
- ->getMock();
- $this->user = new \OC\User\User('', new \Test\Util\User\Dummy, null, $config);
- $this->manager = $this->getMockBuilder('\OC\Files\Mount\Manager')
- ->disableOriginalConstructor()
- ->getMock();
- $this->view = $this->getMockBuilder('\OC\Files\View')
- ->disableOriginalConstructor()
- ->getMock();
- $this->userMountCache = $this->getMockBuilder('\OCP\Files\Config\IUserMountCache')
- ->disableOriginalConstructor()
- ->getMock();
- $this->logger = $this->createMock(ILogger::class);
- $this->userManager = $this->createMock(IUserManager::class);
- }
-
- protected function getMockStorage() {
- $storage = $this->getMockBuilder('\OCP\Files\Storage')
- ->getMock();
- $storage->expects($this->any())
- ->method('getId')
- ->will($this->returnValue('home::someuser'));
- return $storage;
+/**
+ * Class FileTest
+ *
+ * @group DB
+ *
+ * @package Test\Files\Node
+ */
+class FileTest extends NodeTest {
+ protected function createTestNode($root, $view, $path) {
+ return new \OC\Files\Node\File($root, $view, $path);
}
- protected function getFileInfo($data) {
- return new FileInfo('', $this->getMockStorage(), '', $data, null);
+ protected function getNodeClass() {
+ return '\OC\Files\Node\File';
}
- public function testDelete() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $root->expects($this->exactly(2))
- ->method('emit')
- ->will($this->returnValue(true));
- $root->expects($this->any())
- ->method('getUser')
- ->will($this->returnValue($this->user));
-
- $this->view->expects($this->once())
- ->method('getFileInfo')
- ->with('/bar/foo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
-
- $this->view->expects($this->once())
- ->method('unlink')
- ->with('/bar/foo')
- ->will($this->returnValue(true));
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $node->delete();
- }
-
- public function testDeleteHooks() {
- $test = $this;
- $hooksRun = 0;
- /**
- * @param \OC\Files\Node\File $node
- */
- $preListener = function ($node) use (&$test, &$hooksRun) {
- $test->assertInstanceOf('\OC\Files\Node\File', $node);
- $test->assertEquals('foo', $node->getInternalPath());
- $test->assertEquals('/bar/foo', $node->getPath());
- $test->assertEquals(1, $node->getId());
- $hooksRun++;
- };
-
- /**
- * @param \OC\Files\Node\File $node
- */
- $postListener = function ($node) use (&$test, &$hooksRun) {
- $test->assertInstanceOf('\OC\Files\Node\NonExistingFile', $node);
- $test->assertEquals('foo', $node->getInternalPath());
- $test->assertEquals('/bar/foo', $node->getPath());
- $test->assertEquals(1, $node->getId());
- $test->assertEquals('text/plain', $node->getMimeType());
- $hooksRun++;
- };
-
- $root = new \OC\Files\Node\Root(
- $this->manager,
- $this->view,
- $this->user,
- $this->userMountCache,
- $this->logger,
- $this->userManager
- );
- $root->listen('\OC\Files', 'preDelete', $preListener);
- $root->listen('\OC\Files', 'postDelete', $postListener);
-
- $this->view->expects($this->any())
- ->method('getFileInfo')
- ->with('/bar/foo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1, 'mimetype' => 'text/plain'))));
-
- $this->view->expects($this->once())
- ->method('unlink')
- ->with('/bar/foo')
- ->will($this->returnValue(true));
-
- $this->view->expects($this->any())
- ->method('resolvePath')
- ->with('/bar/foo')
- ->will($this->returnValue(array(null, 'foo')));
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $node->delete();
- $this->assertEquals(2, $hooksRun);
+ protected function getNonExistingNodeClass() {
+ return '\OC\Files\Node\NonExistingFile';
}
- /**
- * @expectedException \OCP\Files\NotPermittedException
- */
- public function testDeleteNotPermitted() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $root->expects($this->any())
- ->method('getUser')
- ->will($this->returnValue($this->user));
-
- $this->view->expects($this->once())
- ->method('getFileInfo')
- ->with('/bar/foo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $node->delete();
+ protected function getViewDeleteMethod() {
+ return 'unlink';
}
public function testGetContent() {
@@ -421,224 +288,5 @@ class FileTest extends \Test\TestCase {
$node->fopen('w');
}
- public function testCopySameStorage() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $this->view->expects($this->any())
- ->method('copy')
- ->with('/bar/foo', '/bar/asd');
-
- $this->view->expects($this->any())
- ->method('getFileInfo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 3))));
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar');
- $newNode = new \OC\Files\Node\File($root, $this->view, '/bar/asd');
-
- $root->expects($this->exactly(2))
- ->method('get')
- ->will($this->returnValueMap(array(
- array('/bar/asd', $newNode),
- array('/bar', $parentNode)
- )));
-
- $target = $node->copy('/bar/asd');
- $this->assertInstanceOf('\OC\Files\Node\File', $target);
- $this->assertEquals(3, $target->getId());
- }
-
- /**
- * @expectedException \OCP\Files\NotPermittedException
- */
- public function testCopyNotPermitted() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- /**
- * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage
- */
- $storage = $this->getMockBuilder('\OC\Files\Storage\Storage')
- ->disableOriginalConstructor()
- ->getMock();
-
- $root->expects($this->never())
- ->method('getMount');
-
- $storage->expects($this->never())
- ->method('copy');
- $this->view->expects($this->any())
- ->method('getFileInfo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ, 'fileid' => 3))));
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar');
-
- $root->expects($this->once())
- ->method('get')
- ->will($this->returnValueMap(array(
- array('/bar', $parentNode)
- )));
-
- $node->copy('/bar/asd');
- }
-
- /**
- * @expectedException \OCP\Files\NotFoundException
- */
- public function testCopyNoParent() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $this->view->expects($this->never())
- ->method('copy');
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
-
- $root->expects($this->once())
- ->method('get')
- ->with('/bar/asd')
- ->will($this->throwException(new NotFoundException()));
-
- $node->copy('/bar/asd/foo');
- }
-
- /**
- * @expectedException \OCP\Files\NotPermittedException
- */
- public function testCopyParentIsFile() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $this->view->expects($this->never())
- ->method('copy');
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\File($root, $this->view, '/bar');
-
- $root->expects($this->once())
- ->method('get')
- ->will($this->returnValueMap(array(
- array('/bar', $parentNode)
- )));
-
- $node->copy('/bar/asd');
- }
-
- public function testMoveSameStorage() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $this->view->expects($this->any())
- ->method('rename')
- ->with('/bar/foo', '/bar/asd');
-
- $this->view->expects($this->any())
- ->method('getFileInfo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))));
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar');
-
- $root->expects($this->any())
- ->method('get')
- ->will($this->returnValueMap(array(array('/bar', $parentNode), array('/bar/asd', $node))));
-
- $target = $node->move('/bar/asd');
- $this->assertInstanceOf('\OC\Files\Node\File', $target);
- $this->assertEquals(1, $target->getId());
- $this->assertEquals('/bar/asd', $node->getPath());
- }
-
- /**
- * @expectedException \OCP\Files\NotPermittedException
- */
- public function testMoveNotPermitted() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $this->view->expects($this->any())
- ->method('getFileInfo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
-
- $this->view->expects($this->never())
- ->method('rename');
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar');
-
- $root->expects($this->once())
- ->method('get')
- ->with('/bar')
- ->will($this->returnValue($parentNode));
-
- $node->move('/bar/asd');
- }
-
- /**
- * @expectedException \OCP\Files\NotFoundException
- */
- public function testMoveNoParent() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- /**
- * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage
- */
- $storage = $this->getMockBuilder('\OC\Files\Storage\Storage')
- ->disableOriginalConstructor()
- ->getMock();
-
- $storage->expects($this->never())
- ->method('rename');
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar');
-
- $root->expects($this->once())
- ->method('get')
- ->with('/bar')
- ->will($this->throwException(new NotFoundException()));
-
- $node->move('/bar/asd');
- }
-
- /**
- * @expectedException \OCP\Files\NotPermittedException
- */
- public function testMoveParentIsFile() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $this->view->expects($this->never())
- ->method('rename');
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\File($root, $this->view, '/bar');
-
- $root->expects($this->once())
- ->method('get')
- ->with('/bar')
- ->will($this->returnValue($parentNode));
-
- $node->move('/bar/asd');
- }
}
diff --git a/tests/lib/Files/Node/FolderTest.php b/tests/lib/Files/Node/FolderTest.php
index dcfe6a1768c..ec043c7b81e 100644
--- a/tests/lib/Files/Node/FolderTest.php
+++ b/tests/lib/Files/Node/FolderTest.php
@@ -18,13 +18,11 @@ use OC\Files\Node\Node;
use OC\Files\Node\Root;
use OC\Files\Storage\Temporary;
use OC\Files\Storage\Wrapper\Jail;
+use OC\Files\View;
use OC\User\User;
use OCP\Files\Mount\IMountPoint;
use OCP\Files\NotFoundException;
-use OC\Files\View;
use OCP\Files\Storage;
-use OCP\ILogger;
-use OCP\IUserManager;
/**
* Class FolderTest
@@ -33,152 +31,21 @@ use OCP\IUserManager;
*
* @package Test\Files\Node
*/
-class FolderTest extends \Test\TestCase {
- /** @var User */
- private $user;
- /** @var \OCP\Files\Config\IUserMountCache|\PHPUnit_Framework_MockObject_MockObject */
- private $userMountCache;
- /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
- private $logger;
- /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
- private $userManager;
-
- protected function setUp() {
- parent::setUp();
- $this->user = new \OC\User\User('', new \Test\Util\User\Dummy);
- $this->userMountCache = $this->getMockBuilder('\OCP\Files\Config\IUserMountCache')
- ->disableOriginalConstructor()
- ->getMock();
- $this->logger = $this->createMock(ILogger::class);
- $this->userManager = $this->createMock(IUserManager::class);
+class FolderTest extends NodeTest {
+ protected function createTestNode($root, $view, $path) {
+ return new \OC\Files\Node\Folder($root, $view, $path);
}
- protected function getMockStorage() {
- $storage = $this->createMock(Storage::class);
- $storage->expects($this->any())
- ->method('getId')
- ->will($this->returnValue('home::someuser'));
- return $storage;
+ protected function getNodeClass() {
+ return '\OC\Files\Node\Folder';
}
- protected function getFileInfo($data) {
- return new FileInfo('', $this->getMockStorage(), '', $data, null);
+ protected function getNonExistingNodeClass() {
+ return '\OC\Files\Node\NonExistingFolder';
}
- public function testDelete() {
- $manager = $this->createMock(Manager::class);
- /**
- * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
- */
- $view = $this->createMock(View::class);
- $root = $this->getMockBuilder(Root::class)
- ->setConstructorArgs([$manager, $view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
- $root->expects($this->any())
- ->method('getUser')
- ->will($this->returnValue($this->user));
- $root->expects($this->exactly(2))
- ->method('emit')
- ->will($this->returnValue(true));
-
- $view->expects($this->any())
- ->method('getFileInfo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
-
- $view->expects($this->once())
- ->method('rmdir')
- ->with('/bar/foo')
- ->will($this->returnValue(true));
-
- $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo');
- $node->delete();
- }
-
- public function testDeleteHooks() {
- $test = $this;
- $hooksRun = 0;
- /**
- * @param \OC\Files\Node\File $node
- */
- $preListener = function ($node) use (&$test, &$hooksRun) {
- $test->assertInstanceOf('\OC\Files\Node\Folder', $node);
- $test->assertEquals('foo', $node->getInternalPath());
- $test->assertEquals('/bar/foo', $node->getPath());
- $hooksRun++;
- };
-
- /**
- * @param \OC\Files\Node\File $node
- */
- $postListener = function ($node) use (&$test, &$hooksRun) {
- $test->assertInstanceOf('\OC\Files\Node\NonExistingFolder', $node);
- $test->assertEquals('foo', $node->getInternalPath());
- $test->assertEquals('/bar/foo', $node->getPath());
- $test->assertEquals(1, $node->getId());
- $hooksRun++;
- };
-
- /**
- * @var \OC\Files\Mount\Manager $manager
- */
- $manager = $this->createMock(Manager::class);
- /**
- * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
- */
- $view = $this->createMock(View::class);
- $root = new \OC\Files\Node\Root(
- $manager,
- $view,
- $this->user,
- $this->userMountCache,
- $this->logger,
- $this->userManager
- );
- $root->listen('\OC\Files', 'preDelete', $preListener);
- $root->listen('\OC\Files', 'postDelete', $postListener);
-
- $view->expects($this->any())
- ->method('getFileInfo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))));
-
- $view->expects($this->once())
- ->method('rmdir')
- ->with('/bar/foo')
- ->will($this->returnValue(true));
-
- $view->expects($this->any())
- ->method('resolvePath')
- ->with('/bar/foo')
- ->will($this->returnValue(array(null, 'foo')));
-
- $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo');
- $node->delete();
- $this->assertEquals(2, $hooksRun);
- }
-
- /**
- * @expectedException \OCP\Files\NotPermittedException
- */
- public function testDeleteNotPermitted() {
- $manager = $this->createMock(Manager::class);
- /**
- * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
- */
- $view = $this->createMock(View::class);
- $root = $this->getMockBuilder(Root::class)
- ->setConstructorArgs([$manager, $view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
- $root->expects($this->any())
- ->method('getUser')
- ->will($this->returnValue($this->user));
-
- $view->expects($this->once())
- ->method('getFileInfo')
- ->with('/bar/foo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
-
- $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo');
- $node->delete();
+ protected function getViewDeleteMethod() {
+ return 'rmdir';
}
public function testGetDirectoryContent() {
diff --git a/tests/lib/Files/Node/NodeTest.php b/tests/lib/Files/Node/NodeTest.php
index 1a3a0472e97..5e18caa2014 100644
--- a/tests/lib/Files/Node/NodeTest.php
+++ b/tests/lib/Files/Node/NodeTest.php
@@ -9,24 +9,34 @@
namespace Test\Files\Node;
use OC\Files\FileInfo;
+use OC\Files\View;
+use OCP\Files\Config\IUserMountCache;
+use OCP\Files\IRootFolder;
+use OCP\Files\Node;
use OCP\ILogger;
use OCP\IUserManager;
+use OCP\Files\NotFoundException;
-class NodeTest extends \Test\TestCase {
+/**
+ * Class NodeTest
+ *
+ * @package Test\Files\Node
+ */
+abstract class NodeTest extends \Test\TestCase {
/** @var \OC\User\User */
- private $user;
+ protected $user;
/** @var \OC\Files\Mount\Manager */
- private $manager;
+ protected $manager;
/** @var \OC\Files\View|\PHPUnit_Framework_MockObject_MockObject */
- private $view;
+ protected $view;
/** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject */
- private $root;
+ protected $root;
/** @var \OCP\Files\Config\IUserMountCache|\PHPUnit_Framework_MockObject_MockObject */
- private $userMountCache;
+ protected $userMountCache;
/** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
- private $logger;
+ protected $logger;
/** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
- private $userManager;
+ protected $userManager;
protected function setUp() {
parent::setUp();
@@ -54,6 +64,29 @@ class NodeTest extends \Test\TestCase {
->getMock();
}
+ /**
+ * @param IRootFolder $root
+ * @param View $view
+ * @param string $path
+ * @return Node
+ */
+ protected abstract function createTestNode($root, $view, $path);
+
+ /**
+ * @return string
+ */
+ protected abstract function getNodeClass();
+
+ /**
+ * @return string
+ */
+ protected abstract function getNonExistingNodeClass();
+
+ /**
+ * @return string
+ */
+ protected abstract function getViewDeleteMethod();
+
protected function getMockStorage() {
$storage = $this->getMockBuilder('\OCP\Files\Storage')
->disableOriginalConstructor()
@@ -68,6 +101,104 @@ class NodeTest extends \Test\TestCase {
return new FileInfo('', $this->getMockStorage(), '', $data, null);
}
+ public function testDelete() {
+ $this->root->expects($this->exactly(2))
+ ->method('emit')
+ ->will($this->returnValue(true));
+ $this->root->expects($this->any())
+ ->method('getUser')
+ ->will($this->returnValue($this->user));
+
+ $this->view->expects($this->once())
+ ->method('getFileInfo')
+ ->with('/bar/foo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL])));
+
+ $this->view->expects($this->once())
+ ->method($this->getViewDeleteMethod())
+ ->with('/bar/foo')
+ ->will($this->returnValue(true));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $node->delete();
+ }
+
+ public function testDeleteHooks() {
+ $test = $this;
+ $hooksRun = 0;
+ /**
+ * @param \OC\Files\Node\File $node
+ */
+ $preListener = function ($node) use (&$test, &$hooksRun) {
+ $test->assertInstanceOf($this->getNodeClass(), $node);
+ $test->assertEquals('foo', $node->getInternalPath());
+ $test->assertEquals('/bar/foo', $node->getPath());
+ $test->assertEquals(1, $node->getId());
+ $hooksRun++;
+ };
+
+ /**
+ * @param \OC\Files\Node\File $node
+ */
+ $postListener = function ($node) use (&$test, &$hooksRun) {
+ $test->assertInstanceOf($this->getNonExistingNodeClass(), $node);
+ $test->assertEquals('foo', $node->getInternalPath());
+ $test->assertEquals('/bar/foo', $node->getPath());
+ $test->assertEquals(1, $node->getId());
+ $test->assertEquals('text/plain', $node->getMimeType());
+ $hooksRun++;
+ };
+
+ $root = new \OC\Files\Node\Root(
+ $this->manager,
+ $this->view,
+ $this->user,
+ $this->userMountCache,
+ $this->logger,
+ $this->userManager
+ );
+
+ $root->listen('\OC\Files', 'preDelete', $preListener);
+ $root->listen('\OC\Files', 'postDelete', $postListener);
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->with('/bar/foo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1, 'mimetype' => 'text/plain'])));
+
+ $this->view->expects($this->once())
+ ->method($this->getViewDeleteMethod())
+ ->with('/bar/foo')
+ ->will($this->returnValue(true));
+
+ $this->view->expects($this->any())
+ ->method('resolvePath')
+ ->with('/bar/foo')
+ ->will($this->returnValue([null, 'foo']));
+
+ $node = $this->createTestNode($root, $this->view, '/bar/foo');
+ $node->delete();
+ $this->assertEquals(2, $hooksRun);
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testDeleteNotPermitted() {
+ $this->root->expects($this->any())
+ ->method('getUser')
+ ->will($this->returnValue($this->user));
+
+ $this->view->expects($this->once())
+ ->method('getFileInfo')
+ ->with('/bar/foo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_READ])));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $node->delete();
+ }
+
+
public function testStat() {
$this->root->expects($this->any())
->method('getUser')
@@ -86,7 +217,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($stat));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals($stat, $node->stat());
}
@@ -107,7 +238,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($stat));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals(1, $node->getId());
}
@@ -129,7 +260,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($stat));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals(100, $node->getSize());
}
@@ -150,7 +281,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($stat));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals('qwerty', $node->getEtag());
}
@@ -171,7 +302,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($stat));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals(50, $node->getMTime());
}
@@ -192,7 +323,7 @@ class NodeTest extends \Test\TestCase {
->will($this->returnValue(array($storage, 'foo')));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals($storage, $node->getStorage());
}
@@ -201,7 +332,7 @@ class NodeTest extends \Test\TestCase {
->method('getUser')
->will($this->returnValue($this->user));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals('/bar/foo', $node->getPath());
}
@@ -222,7 +353,7 @@ class NodeTest extends \Test\TestCase {
->will($this->returnValue(array($storage, 'foo')));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals('foo', $node->getInternalPath());
}
@@ -231,7 +362,7 @@ class NodeTest extends \Test\TestCase {
->method('getUser')
->will($this->returnValue($this->user));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals('foo', $node->getName());
}
@@ -250,7 +381,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
- $node = new \OC\Files\Node\Node($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$node->touch(100);
$this->assertEquals(100, $node->getMTime());
}
@@ -302,7 +433,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
- $node = new \OC\Files\Node\Node($root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($root, $this->view, '/bar/foo');
$node->touch(100);
$this->assertEquals(2, $hooksRun);
}
@@ -320,7 +451,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
- $node = new \OC\Files\Node\Node($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$node->touch(100);
}
@@ -328,7 +459,312 @@ class NodeTest extends \Test\TestCase {
* @expectedException \OCP\Files\InvalidPathException
*/
public function testInvalidPath() {
- $node = new \OC\Files\Node\Node($this->root, $this->view, '/../foo');
+ $node = $this->createTestNode($this->root, $this->view, '/../foo');
$node->getFileInfo();
}
+
+ public function testCopySameStorage() {
+ $this->view->expects($this->any())
+ ->method('copy')
+ ->with('/bar/foo', '/bar/asd')
+ ->will($this->returnValue(true));
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 3])));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar');
+ $newNode = $this->createTestNode($this->root, $this->view, '/bar/asd');
+
+ $this->root->expects($this->exactly(2))
+ ->method('get')
+ ->will($this->returnValueMap([
+ ['/bar/asd', $newNode],
+ ['/bar', $parentNode]
+ ]));
+
+ $target = $node->copy('/bar/asd');
+ $this->assertInstanceOf($this->getNodeClass(), $target);
+ $this->assertEquals(3, $target->getId());
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testCopyNotPermitted() {
+ /**
+ * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage
+ */
+ $storage = $this->createMock('\OC\Files\Storage\Storage');
+
+ $this->root->expects($this->never())
+ ->method('getMount');
+
+ $storage->expects($this->never())
+ ->method('copy');
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_READ, 'fileid' => 3])));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->once())
+ ->method('get')
+ ->will($this->returnValueMap([
+ ['/bar', $parentNode]
+ ]));
+
+ $node->copy('/bar/asd');
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotFoundException
+ */
+ public function testCopyNoParent() {
+ $this->view->expects($this->never())
+ ->method('copy');
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+
+ $this->root->expects($this->once())
+ ->method('get')
+ ->with('/bar/asd')
+ ->will($this->throwException(new NotFoundException()));
+
+ $node->copy('/bar/asd/foo');
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testCopyParentIsFile() {
+ $this->view->expects($this->never())
+ ->method('copy');
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\File($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->once())
+ ->method('get')
+ ->will($this->returnValueMap([
+ ['/bar', $parentNode]
+ ]));
+
+ $node->copy('/bar/asd');
+ }
+
+ public function testMoveSameStorage() {
+ $this->view->expects($this->any())
+ ->method('rename')
+ ->with('/bar/foo', '/bar/asd')
+ ->will($this->returnValue(true));
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1])));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->any())
+ ->method('get')
+ ->will($this->returnValueMap([['/bar', $parentNode], ['/bar/asd', $node]]));
+
+ $target = $node->move('/bar/asd');
+ $this->assertInstanceOf($this->getNodeClass(), $target);
+ $this->assertEquals(1, $target->getId());
+ $this->assertEquals('/bar/asd', $node->getPath());
+ }
+
+ public function moveOrCopyProvider() {
+ return [
+ ['move', 'rename', 'preRename', 'postRename'],
+ ['copy', 'copy', 'preCopy', 'postCopy'],
+ ];
+ }
+
+ /**
+ * @dataProvider moveOrCopyProvider
+ * @param string $operationMethod
+ * @param string $viewMethod
+ * @param string $preHookName
+ * @param string $postHookName
+ */
+ public function testMoveCopyHooks($operationMethod, $viewMethod, $preHookName, $postHookName) {
+ /** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject $root */
+ $root = $this->getMockBuilder('\OC\Files\Node\Root')
+ ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
+ ->setMethods(['get'])
+ ->getMock();
+
+ $this->view->expects($this->any())
+ ->method($viewMethod)
+ ->with('/bar/foo', '/bar/asd')
+ ->will($this->returnValue(true));
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1])));
+
+ /**
+ * @var \OC\Files\Node\File|\PHPUnit_Framework_MockObject_MockObject $node
+ */
+ $node = $this->createTestNode($root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar');
+ $targetTestNode = $this->createTestNode($root, $this->view, '/bar/asd');
+
+ $root->expects($this->any())
+ ->method('get')
+ ->will($this->returnValueMap([['/bar', $parentNode], ['/bar/asd', $targetTestNode]]));
+
+ $hooksRun = 0;
+
+ $preListener = function (Node $sourceNode, Node $targetNode) use (&$hooksRun, $node) {
+ $this->assertSame($node, $sourceNode);
+ $this->assertInstanceOf($this->getNodeClass(), $sourceNode);
+ $this->assertInstanceOf($this->getNonExistingNodeClass(), $targetNode);
+ $this->assertEquals('/bar/asd', $targetNode->getPath());
+ $hooksRun++;
+ };
+
+ $postListener = function (Node $sourceNode, Node $targetNode) use (&$hooksRun, $node, $targetTestNode) {
+ $this->assertSame($node, $sourceNode);
+ $this->assertNotSame($node, $targetNode);
+ $this->assertSame($targetTestNode, $targetNode);
+ $this->assertInstanceOf($this->getNodeClass(), $sourceNode);
+ $this->assertInstanceOf($this->getNodeClass(), $targetNode);
+ $hooksRun++;
+ };
+
+ $preWriteListener = function (Node $targetNode) use (&$hooksRun) {
+ $this->assertInstanceOf($this->getNonExistingNodeClass(), $targetNode);
+ $this->assertEquals('/bar/asd', $targetNode->getPath());
+ $hooksRun++;
+ };
+
+ $postWriteListener = function (Node $targetNode) use (&$hooksRun, $targetTestNode) {
+ $this->assertSame($targetTestNode, $targetNode);
+ $hooksRun++;
+ };
+
+ $root->listen('\OC\Files', $preHookName, $preListener);
+ $root->listen('\OC\Files', 'preWrite', $preWriteListener);
+ $root->listen('\OC\Files', $postHookName, $postListener);
+ $root->listen('\OC\Files', 'postWrite', $postWriteListener);
+
+ $node->$operationMethod('/bar/asd');
+
+ $this->assertEquals(4, $hooksRun);
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testMoveNotPermitted() {
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_READ])));
+
+ $this->view->expects($this->never())
+ ->method('rename');
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->once())
+ ->method('get')
+ ->with('/bar')
+ ->will($this->returnValue($parentNode));
+
+ $node->move('/bar/asd');
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotFoundException
+ */
+ public function testMoveNoParent() {
+ /**
+ * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage
+ */
+ $storage = $this->createMock('\OC\Files\Storage\Storage');
+
+ $storage->expects($this->never())
+ ->method('rename');
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+
+ $this->root->expects($this->once())
+ ->method('get')
+ ->with('/bar')
+ ->will($this->throwException(new NotFoundException()));
+
+ $node->move('/bar/asd');
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testMoveParentIsFile() {
+ $this->view->expects($this->never())
+ ->method('rename');
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\File($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->once())
+ ->method('get')
+ ->with('/bar')
+ ->will($this->returnValue($parentNode));
+
+ $node->move('/bar/asd');
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testMoveFailed() {
+ $this->view->expects($this->any())
+ ->method('rename')
+ ->with('/bar/foo', '/bar/asd')
+ ->will($this->returnValue(false));
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1])));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->any())
+ ->method('get')
+ ->will($this->returnValueMap([['/bar', $parentNode], ['/bar/asd', $node]]));
+
+ $node->move('/bar/asd');
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testCopyFailed() {
+ $this->view->expects($this->any())
+ ->method('copy')
+ ->with('/bar/foo', '/bar/asd')
+ ->will($this->returnValue(false));
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1])));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->any())
+ ->method('get')
+ ->will($this->returnValueMap([['/bar', $parentNode], ['/bar/asd', $node]]));
+
+ $node->copy('/bar/asd');
+ }
}
diff --git a/tests/lib/Files/Type/DetectionTest.php b/tests/lib/Files/Type/DetectionTest.php
index 87e0f94e3e2..5c1f48a806e 100644
--- a/tests/lib/Files/Type/DetectionTest.php
+++ b/tests/lib/Files/Type/DetectionTest.php
@@ -74,9 +74,13 @@ class DetectionTest extends \Test\TestCase {
$this->assertEquals('text/plain', $this->detection->detectPath('foo.txt'));
$this->assertEquals('image/png', $this->detection->detectPath('foo.png'));
$this->assertEquals('image/png', $this->detection->detectPath('foo.bar.png'));
+ $this->assertEquals('image/png', $this->detection->detectPath('.hidden.png'));
+ $this->assertEquals('image/png', $this->detection->detectPath('.hidden.foo.png'));
$this->assertEquals('image/png', $this->detection->detectPath('.hidden/foo.png'));
+ $this->assertEquals('image/png', $this->detection->detectPath('.hidden/.hidden.png'));
$this->assertEquals('image/png', $this->detection->detectPath('test.jpg/foo.png'));
$this->assertEquals('application/octet-stream', $this->detection->detectPath('.png'));
+ $this->assertEquals('application/octet-stream', $this->detection->detectPath('..hidden'));
$this->assertEquals('application/octet-stream', $this->detection->detectPath('foo'));
$this->assertEquals('application/octet-stream', $this->detection->detectPath(''));
}
diff --git a/tests/lib/Mail/MailerTest.php b/tests/lib/Mail/MailerTest.php
index c63ceb5982a..7a7ce0392e9 100644
--- a/tests/lib/Mail/MailerTest.php
+++ b/tests/lib/Mail/MailerTest.php
@@ -44,7 +44,7 @@ class MailerTest extends TestCase {
$this->config
->expects($this->once())
->method('getSystemValue')
- ->with('mail_smtpmode', 'sendmail')
+ ->with('mail_smtpmode', 'php')
->will($this->returnValue('sendmail'));
$this->assertEquals(\Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs'), self::invokePrivate($this->mailer, 'getSendMailInstance'));
@@ -54,7 +54,7 @@ class MailerTest extends TestCase {
$this->config
->expects($this->once())
->method('getSystemValue')
- ->with('mail_smtpmode', 'sendmail')
+ ->with('mail_smtpmode', 'php')
->will($this->returnValue('qmail'));
$this->assertEquals(\Swift_SendmailTransport::newInstance('/var/qmail/bin/sendmail -bs'), self::invokePrivate($this->mailer, 'getSendMailInstance'));
diff --git a/tests/lib/Settings/ManagerTest.php b/tests/lib/Settings/ManagerTest.php
index b91331a1d30..70401abb652 100644
--- a/tests/lib/Settings/ManagerTest.php
+++ b/tests/lib/Settings/ManagerTest.php
@@ -32,6 +32,7 @@ use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IL10N;
use OCP\ILogger;
+use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\Lock\ILockingProvider;
use Test\TestCase;
@@ -55,18 +56,21 @@ class ManagerTest extends TestCase {
private $lockingProvider;
/** @var Mapper|\PHPUnit_Framework_MockObject_MockObject */
private $mapper;
+ /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
+ private $url;
public function setUp() {
parent::setUp();
- $this->logger = $this->getMockBuilder('\OCP\ILogger')->getMock();
- $this->dbConnection = $this->getMockBuilder('\OCP\IDBConnection')->getMock();
- $this->l10n = $this->getMockBuilder('\OCP\IL10N')->getMock();
- $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock();
- $this->encryptionManager = $this->getMockBuilder('\OCP\Encryption\IManager')->getMock();
- $this->userManager = $this->getMockBuilder('\OCP\IUserManager')->getMock();
- $this->lockingProvider = $this->getMockBuilder('\OCP\Lock\ILockingProvider')->getMock();
- $this->mapper = $this->getMockBuilder(Mapper::class)->disableOriginalConstructor()->getMock();
+ $this->logger = $this->createMock(ILogger::class);
+ $this->dbConnection = $this->createMock(IDBConnection::class);
+ $this->l10n = $this->createMock(IL10N::class);
+ $this->config = $this->createMock(IConfig::class);
+ $this->encryptionManager = $this->createMock(IManager::class);
+ $this->userManager = $this->createMock(IUserManager::class);
+ $this->lockingProvider = $this->createMock(ILockingProvider::class);
+ $this->mapper = $this->createMock(Mapper::class);
+ $this->url = $this->createMock(IURLGenerator::class);
$this->manager = new Manager(
$this->logger,
@@ -76,7 +80,8 @@ class ManagerTest extends TestCase {
$this->encryptionManager,
$this->userManager,
$this->lockingProvider,
- $this->mapper
+ $this->mapper,
+ $this->url
);
}
@@ -133,22 +138,26 @@ class ManagerTest extends TestCase {
$this->mapper->expects($this->once())
->method('getAdminSectionsFromDB')
->will($this->returnValue([
- ['class' => '\OCA\LogReader\Settings\Section', 'priority' => 90]
+ ['class' => \OCA\WorkflowEngine\Settings\Section::class, 'priority' => 90]
]));
- $this->mapper->expects($this->once())
- ->method('getAdminSettingsCountFromDB')
- ->will($this->returnValue([
- 'logging' => 1
- ]));
+ $this->url->expects($this->exactly(5))
+ ->method('imagePath')
+ ->willReturnMap([
+ ['settings', 'admin.svg', '1'],
+ ['core', 'actions/share.svg', '2'],
+ ['core', 'actions/password.svg', '3'],
+ ['core', 'actions/settings-dark.svg', '4'],
+ ['settings', 'help.svg', '5'],
+ ]);
$this->assertEquals([
- 0 => [new Section('server', 'Server settings', 0)],
- 5 => [new Section('sharing', 'Sharing', 0)],
- 45 => [new Section('encryption', 'Encryption', 0)],
- 90 => [new \OCA\LogReader\Settings\Section(\OC::$server->getL10N('logreader'))],
- 98 => [new Section('additional', 'Additional settings', 0)],
- 99 => [new Section('tips-tricks', 'Tips & tricks', 0)],
+ 0 => [new Section('server', 'Server settings', 0, '1')],
+ 5 => [new Section('sharing', 'Sharing', 0, '2')],
+ 45 => [new Section('encryption', 'Encryption', 0, '3')],
+ 90 => [\OC::$server->query(\OCA\WorkflowEngine\Settings\Section::class)],
+ 98 => [new Section('additional', 'Additional settings', 0, '4')],
+ 99 => [new Section('tips-tricks', 'Tips & tricks', 0, '5')],
], $this->manager->getAdminSections());
}
@@ -161,19 +170,24 @@ class ManagerTest extends TestCase {
$this->mapper->expects($this->once())
->method('getAdminSectionsFromDB')
->will($this->returnValue([
- ['class' => '\OCA\LogReader\Settings\Section', 'priority' => 90]
]));
- $this->mapper->expects($this->once())
- ->method('getAdminSettingsCountFromDB')
- ->will($this->returnValue([]));
+ $this->url->expects($this->exactly(5))
+ ->method('imagePath')
+ ->willReturnMap([
+ ['settings', 'admin.svg', '1'],
+ ['core', 'actions/share.svg', '2'],
+ ['core', 'actions/password.svg', '3'],
+ ['core', 'actions/settings-dark.svg', '4'],
+ ['settings', 'help.svg', '5'],
+ ]);
$this->assertEquals([
- 0 => [new Section('server', 'Server settings', 0)],
- 5 => [new Section('sharing', 'Sharing', 0)],
- 45 => [new Section('encryption', 'Encryption', 0)],
- 98 => [new Section('additional', 'Additional settings', 0)],
- 99 => [new Section('tips-tricks', 'Tips & tricks', 0)],
+ 0 => [new Section('server', 'Server settings', 0, '1')],
+ 5 => [new Section('sharing', 'Sharing', 0, '2')],
+ 45 => [new Section('encryption', 'Encryption', 0, '3')],
+ 98 => [new Section('additional', 'Additional settings', 0, '4')],
+ 99 => [new Section('tips-tricks', 'Tips & tricks', 0, '5')],
], $this->manager->getAdminSections());
}