Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.htaccess4
-rw-r--r--.mailmap3
-rw-r--r--.mention-bot6
-rw-r--r--.travis.yml12
m---------3rdparty0
-rw-r--r--CONTRIBUTING.md16
-rw-r--r--README.md6
-rw-r--r--apps/dav/appinfo/app.php42
-rw-r--r--apps/dav/appinfo/database.xml72
-rw-r--r--apps/dav/appinfo/register_command.php3
-rw-r--r--apps/dav/command/createaddressbook.php13
-rw-r--r--apps/dav/lib/carddav/addressbookimpl.php219
-rw-r--r--apps/dav/lib/carddav/carddavbackend.php223
-rw-r--r--apps/dav/lib/carddav/sharing/plugin.php78
-rw-r--r--apps/dav/lib/carddav/sharing/xml/sharerequest.php65
-rw-r--r--apps/dav/lib/connector/sabre/auth.php2
-rw-r--r--apps/dav/lib/connector/sabre/file.php2
-rw-r--r--apps/dav/lib/connector/sabre/filesplugin.php11
-rw-r--r--apps/dav/lib/connector/sabre/objecttree.php2
-rw-r--r--apps/dav/lib/rootcollection.php4
-rw-r--r--apps/dav/lib/systemtag/systemtagsbyidcollection.php14
-rw-r--r--apps/dav/lib/systemtag/systemtagsobjecttypecollection.php17
-rw-r--r--apps/dav/tests/travis/caldav/install.sh20
-rw-r--r--apps/dav/tests/travis/caldav/script.sh18
-rw-r--r--apps/dav/tests/travis/caldavtest/tests/CalDAV/current-user-principal.xml151
-rw-r--r--apps/dav/tests/travis/caldavtest/tests/CalDAV/sync-report.xml3512
-rw-r--r--apps/dav/tests/travis/carddav/install.sh20
-rw-r--r--apps/dav/tests/travis/carddav/script.sh19
-rw-r--r--apps/dav/tests/travis/carddavtester.sh35
-rw-r--r--apps/dav/tests/travis/litmus-v1/install.sh (renamed from apps/dav/tests/travis/litmus-v1.sh)11
-rw-r--r--apps/dav/tests/travis/litmus-v1/script.sh13
-rw-r--r--apps/dav/tests/travis/litmus-v2/install.sh (renamed from apps/dav/tests/travis/litmus-v2.sh)11
-rw-r--r--apps/dav/tests/travis/litmus-v2/script.sh13
-rw-r--r--apps/dav/tests/unit/carddav/addressbookimpltest.php287
-rw-r--r--apps/dav/tests/unit/carddav/carddavbackendtest.php349
-rw-r--r--apps/dav/tests/unit/carddav/sharing/plugintest.php81
-rw-r--r--apps/dav/tests/unit/connector/sabre/file.php44
-rw-r--r--apps/dav/tests/unit/connector/sabre/filesplugin.php25
-rw-r--r--apps/dav/tests/unit/connector/sabre/objecttree.php41
-rw-r--r--apps/dav/tests/unit/systemtag/systemtagmappingnode.php4
-rw-r--r--apps/dav/tests/unit/systemtag/systemtagsbyidcollection.php1
-rw-r--r--apps/dav/tests/unit/systemtag/systemtagsobjectmappingcollection.php1
-rw-r--r--apps/encryption/l10n/es.js1
-rw-r--r--apps/encryption/l10n/es.json1
-rw-r--r--apps/encryption/l10n/et_EE.js1
-rw-r--r--apps/encryption/l10n/et_EE.json1
-rw-r--r--apps/encryption/l10n/pt_BR.js2
-rw-r--r--apps/encryption/l10n/pt_BR.json2
-rw-r--r--apps/encryption/lib/crypto/crypt.php31
-rw-r--r--apps/encryption/tests/lib/MigrationTest.php15
-rw-r--r--apps/encryption/vendor/pbkdf2fallback.php87
-rw-r--r--apps/federation/api/ocsauthapi.php24
-rw-r--r--apps/federation/appinfo/application.php3
-rw-r--r--apps/federation/backgroundjob/getsharedsecret.php3
-rw-r--r--apps/federation/backgroundjob/requestsharedsecret.php7
-rw-r--r--apps/federation/tests/api/ocsauthapitest.php12
-rw-r--r--apps/files/admin.php2
-rw-r--r--apps/files/appinfo/register_command.php2
-rw-r--r--apps/files/command/scan.php190
-rw-r--r--apps/files/download.php2
-rw-r--r--apps/files/js/fileactions.js26
-rw-r--r--apps/files/js/fileactionsmenu.js8
-rw-r--r--apps/files/js/filelist.js63
-rw-r--r--apps/files/l10n/ar.js1
-rw-r--r--apps/files/l10n/ar.json1
-rw-r--r--apps/files/l10n/ast.js2
-rw-r--r--apps/files/l10n/ast.json2
-rw-r--r--apps/files/l10n/az.js2
-rw-r--r--apps/files/l10n/az.json2
-rw-r--r--apps/files/l10n/bn_BD.js1
-rw-r--r--apps/files/l10n/bn_BD.json1
-rw-r--r--apps/files/l10n/bs.js2
-rw-r--r--apps/files/l10n/bs.json2
-rw-r--r--apps/files/l10n/de_AT.js1
-rw-r--r--apps/files/l10n/de_AT.json1
-rw-r--r--apps/files/l10n/de_DE.js2
-rw-r--r--apps/files/l10n/de_DE.json2
-rw-r--r--apps/files/l10n/el.js2
-rw-r--r--apps/files/l10n/el.json2
-rw-r--r--apps/files/l10n/en_GB.js2
-rw-r--r--apps/files/l10n/en_GB.json2
-rw-r--r--apps/files/l10n/eo.js1
-rw-r--r--apps/files/l10n/eo.json1
-rw-r--r--apps/files/l10n/es.js3
-rw-r--r--apps/files/l10n/es.json3
-rw-r--r--apps/files/l10n/es_MX.js1
-rw-r--r--apps/files/l10n/es_MX.json1
-rw-r--r--apps/files/l10n/et_EE.js11
-rw-r--r--apps/files/l10n/et_EE.json11
-rw-r--r--apps/files/l10n/eu.js2
-rw-r--r--apps/files/l10n/eu.json2
-rw-r--r--apps/files/l10n/fa.js1
-rw-r--r--apps/files/l10n/fa.json1
-rw-r--r--apps/files/l10n/fi_FI.js2
-rw-r--r--apps/files/l10n/fi_FI.json2
-rw-r--r--apps/files/l10n/fr.js2
-rw-r--r--apps/files/l10n/fr.json2
-rw-r--r--apps/files/l10n/ia.js1
-rw-r--r--apps/files/l10n/ia.json1
-rw-r--r--apps/files/l10n/id.js2
-rw-r--r--apps/files/l10n/id.json2
-rw-r--r--apps/files/l10n/is.js1
-rw-r--r--apps/files/l10n/is.json1
-rw-r--r--apps/files/l10n/it.js2
-rw-r--r--apps/files/l10n/it.json2
-rw-r--r--apps/files/l10n/km.js1
-rw-r--r--apps/files/l10n/km.json1
-rw-r--r--apps/files/l10n/kn.js2
-rw-r--r--apps/files/l10n/kn.json2
-rw-r--r--apps/files/l10n/ko.js2
-rw-r--r--apps/files/l10n/ko.json2
-rw-r--r--apps/files/l10n/lt_LT.js11
-rw-r--r--apps/files/l10n/lt_LT.json11
-rw-r--r--apps/files/l10n/mk.js1
-rw-r--r--apps/files/l10n/mk.json1
-rw-r--r--apps/files/l10n/nb_NO.js2
-rw-r--r--apps/files/l10n/nb_NO.json2
-rw-r--r--apps/files/l10n/nl.js2
-rw-r--r--apps/files/l10n/nl.json2
-rw-r--r--apps/files/l10n/nn_NO.js1
-rw-r--r--apps/files/l10n/nn_NO.json1
-rw-r--r--apps/files/l10n/oc.js2
-rw-r--r--apps/files/l10n/oc.json2
-rw-r--r--apps/files/l10n/pl.js2
-rw-r--r--apps/files/l10n/pl.json2
-rw-r--r--apps/files/l10n/pt_BR.js17
-rw-r--r--apps/files/l10n/pt_BR.json17
-rw-r--r--apps/files/l10n/ro.js2
-rw-r--r--apps/files/l10n/ro.json2
-rw-r--r--apps/files/l10n/ru.js2
-rw-r--r--apps/files/l10n/ru.json2
-rw-r--r--apps/files/l10n/sl.js2
-rw-r--r--apps/files/l10n/sl.json2
-rw-r--r--apps/files/l10n/sq.js2
-rw-r--r--apps/files/l10n/sq.json2
-rw-r--r--apps/files/l10n/sr.js2
-rw-r--r--apps/files/l10n/sr.json2
-rw-r--r--apps/files/l10n/sr@latin.js2
-rw-r--r--apps/files/l10n/sr@latin.json2
-rw-r--r--apps/files/l10n/sv.js2
-rw-r--r--apps/files/l10n/sv.json2
-rw-r--r--apps/files/l10n/ug.js1
-rw-r--r--apps/files/l10n/ug.json1
-rw-r--r--apps/files/l10n/uk.js2
-rw-r--r--apps/files/l10n/uk.json2
-rw-r--r--apps/files/l10n/ur_PK.js1
-rw-r--r--apps/files/l10n/ur_PK.json1
-rw-r--r--apps/files/l10n/vi.js1
-rw-r--r--apps/files/l10n/vi.json1
-rw-r--r--apps/files/l10n/zh_TW.js2
-rw-r--r--apps/files/l10n/zh_TW.json2
-rw-r--r--apps/files/lib/helper.php8
-rw-r--r--apps/files/tests/backgroundjob/ScanFilesTest.php1
-rw-r--r--apps/files/tests/controller/apicontrollertest.php9
-rw-r--r--apps/files/tests/js/fileactionsmenuSpec.js20
-rw-r--r--apps/files/tests/js/filelistSpec.js45
-rw-r--r--apps/files/tests/service/tagservice.php5
-rw-r--r--apps/files_external/appinfo/database.xml6
-rw-r--r--apps/files_external/appinfo/info.xml2
-rw-r--r--apps/files_external/l10n/cs_CZ.js8
-rw-r--r--apps/files_external/l10n/cs_CZ.json8
-rw-r--r--apps/files_external/l10n/de.js4
-rw-r--r--apps/files_external/l10n/de.json4
-rw-r--r--apps/files_external/l10n/el.js1
-rw-r--r--apps/files_external/l10n/el.json1
-rw-r--r--apps/files_external/l10n/es.js6
-rw-r--r--apps/files_external/l10n/es.json6
-rw-r--r--apps/files_external/l10n/et_EE.js12
-rw-r--r--apps/files_external/l10n/et_EE.json12
-rw-r--r--apps/files_external/l10n/fi_FI.js3
-rw-r--r--apps/files_external/l10n/fi_FI.json3
-rw-r--r--apps/files_external/l10n/fr.js8
-rw-r--r--apps/files_external/l10n/fr.json8
-rw-r--r--apps/files_external/l10n/it.js9
-rw-r--r--apps/files_external/l10n/it.json9
-rw-r--r--apps/files_external/l10n/ja.js8
-rw-r--r--apps/files_external/l10n/ja.json8
-rw-r--r--apps/files_external/l10n/nl.js9
-rw-r--r--apps/files_external/l10n/nl.json9
-rw-r--r--apps/files_external/l10n/pt_BR.js10
-rw-r--r--apps/files_external/l10n/pt_BR.json10
-rw-r--r--apps/files_external/l10n/sq.js8
-rw-r--r--apps/files_external/l10n/sq.json8
-rw-r--r--apps/files_external/l10n/th_TH.js7
-rw-r--r--apps/files_external/l10n/th_TH.json7
-rw-r--r--apps/files_external/lib/config.php58
-rw-r--r--apps/files_external/lib/config/configadapter.php2
-rw-r--r--apps/files_external/lib/personalmount.php10
-rw-r--r--apps/files_external/lib/smb.php9
-rw-r--r--apps/files_external/migration/dummyusersession.php51
-rw-r--r--apps/files_external/migration/storagemigrator.php21
-rw-r--r--apps/files_external/service/storagesservice.php3
-rw-r--r--apps/files_external/service/userglobalstoragesservice.php3
-rwxr-xr-xapps/files_external/tests/env/entrypoint.sh274
-rwxr-xr-xapps/files_external/tests/env/start-smb-windows.sh2
-rwxr-xr-xapps/files_external/tests/env/start-swift-ceph.sh13
-rw-r--r--apps/files_external/tests/personalmounttest.php50
-rw-r--r--apps/files_external/tests/service/globalstoragesservicetest.php1
-rw-r--r--apps/files_sharing/ajax/external.php11
-rw-r--r--apps/files_sharing/api/local.php6
-rw-r--r--apps/files_sharing/js/external.js3
-rw-r--r--apps/files_sharing/js/public.js7
-rw-r--r--apps/files_sharing/js/share.js3
-rw-r--r--apps/files_sharing/l10n/es.js1
-rw-r--r--apps/files_sharing/l10n/es.json1
-rw-r--r--apps/files_sharing/l10n/et_EE.js2
-rw-r--r--apps/files_sharing/l10n/et_EE.json2
-rw-r--r--apps/files_sharing/l10n/fi_FI.js1
-rw-r--r--apps/files_sharing/l10n/fi_FI.json1
-rw-r--r--apps/files_sharing/l10n/it.js1
-rw-r--r--apps/files_sharing/l10n/it.json1
-rw-r--r--apps/files_sharing/l10n/ja.js1
-rw-r--r--apps/files_sharing/l10n/ja.json1
-rw-r--r--apps/files_sharing/l10n/lt_LT.js1
-rw-r--r--apps/files_sharing/l10n/lt_LT.json1
-rw-r--r--apps/files_sharing/l10n/mk.js35
-rw-r--r--apps/files_sharing/l10n/mk.json35
-rw-r--r--apps/files_sharing/l10n/nl.js1
-rw-r--r--apps/files_sharing/l10n/nl.json1
-rw-r--r--apps/files_sharing/l10n/pt_BR.js17
-rw-r--r--apps/files_sharing/l10n/pt_BR.json17
-rw-r--r--apps/files_sharing/l10n/sq.js4
-rw-r--r--apps/files_sharing/l10n/sq.json4
-rw-r--r--apps/files_sharing/l10n/th_TH.js1
-rw-r--r--apps/files_sharing/l10n/th_TH.json1
-rw-r--r--apps/files_sharing/lib/controllers/sharecontroller.php1
-rw-r--r--apps/files_sharing/lib/external/storage.php8
-rw-r--r--apps/files_sharing/lib/sharedstorage.php2
-rw-r--r--apps/files_sharing/lib/updater.php41
-rw-r--r--apps/files_sharing/templates/public.php4
-rw-r--r--apps/files_sharing/tests/controller/sharecontroller.php6
-rw-r--r--apps/files_sharing/tests/etagpropagation.php80
-rw-r--r--apps/files_sharing/tests/groupetagpropagation.php104
-rw-r--r--apps/files_sharing/tests/js/externalSpec.js4
-rw-r--r--apps/files_sharing/tests/js/publicAppSpec.js3
-rw-r--r--apps/files_sharing/tests/js/sharedfilelistSpec.js2
-rw-r--r--apps/files_sharing/tests/propagationtestcase.php103
-rw-r--r--apps/files_sharing/tests/testcase.php17
-rw-r--r--apps/files_trashbin/ajax/preview.php2
-rw-r--r--apps/files_trashbin/l10n/mk.js1
-rw-r--r--apps/files_trashbin/l10n/mk.json1
-rw-r--r--apps/files_trashbin/l10n/pt_BR.js4
-rw-r--r--apps/files_trashbin/l10n/pt_BR.json4
-rw-r--r--apps/files_trashbin/lib/helper.php2
-rw-r--r--apps/files_trashbin/lib/storage.php5
-rw-r--r--apps/files_trashbin/tests/storage.php16
-rw-r--r--apps/files_trashbin/tests/trashbin.php5
-rw-r--r--apps/files_versions/ajax/preview.php2
-rw-r--r--apps/files_versions/command/expire.php18
-rw-r--r--apps/files_versions/download.php2
-rw-r--r--apps/files_versions/lib/storage.php29
-rw-r--r--apps/files_versions/tests/versions.php6
-rw-r--r--apps/user_ldap/appinfo/update.php16
-rw-r--r--apps/user_ldap/js/wizard/wizardTabGeneric.js6
-rw-r--r--apps/user_ldap/l10n/et_EE.js6
-rw-r--r--apps/user_ldap/l10n/et_EE.json6
-rw-r--r--apps/user_ldap/l10n/ko.js1
-rw-r--r--apps/user_ldap/l10n/ko.json1
-rw-r--r--apps/user_ldap/lib/access.php95
-rw-r--r--apps/user_ldap/lib/mapping/abstractmapping.php12
-rw-r--r--apps/user_ldap/tests/user_ldap.php62
-rw-r--r--apps/user_ldap/user_ldap.php43
-rwxr-xr-xautotest-external.sh9
-rw-r--r--bower.json3
-rw-r--r--build/integration/features/bootstrap/CapabilitiesContext.php2
-rw-r--r--build/integration/features/bootstrap/WebDav.php23
-rw-r--r--build/integration/features/sharing-v1.feature41
-rw-r--r--config/config.sample.php21
-rw-r--r--console.php10
-rw-r--r--core/avatar/avatarcontroller.php24
-rw-r--r--core/command/app/getpath.php62
-rw-r--r--core/command/maintenance/install.php7
-rw-r--r--core/command/status.php2
-rw-r--r--core/css/styles.css16
-rw-r--r--core/js/avatar.js10
-rw-r--r--core/js/config.php2
-rw-r--r--core/js/files/client.js28
-rw-r--r--core/js/oc-dialogs.js1
-rw-r--r--core/js/placeholder.js12
-rw-r--r--core/js/setupchecks.js12
-rw-r--r--core/js/tests/specs/files/clientSpec.js10
-rw-r--r--core/js/tests/specs/setupchecksSpec.js12
-rw-r--r--core/l10n/ca.js3
-rw-r--r--core/l10n/ca.json3
-rw-r--r--core/l10n/cs_CZ.js7
-rw-r--r--core/l10n/cs_CZ.json7
-rw-r--r--core/l10n/da.js4
-rw-r--r--core/l10n/da.json4
-rw-r--r--core/l10n/de.js6
-rw-r--r--core/l10n/de.json6
-rw-r--r--core/l10n/de_DE.js3
-rw-r--r--core/l10n/de_DE.json3
-rw-r--r--core/l10n/el.js5
-rw-r--r--core/l10n/el.json5
-rw-r--r--core/l10n/en_GB.js2
-rw-r--r--core/l10n/en_GB.json2
-rw-r--r--core/l10n/es.js13
-rw-r--r--core/l10n/es.json13
-rw-r--r--core/l10n/et_EE.js8
-rw-r--r--core/l10n/et_EE.json8
-rw-r--r--core/l10n/fi_FI.js13
-rw-r--r--core/l10n/fi_FI.json13
-rw-r--r--core/l10n/fr.js13
-rw-r--r--core/l10n/fr.json13
-rw-r--r--core/l10n/gl.js2
-rw-r--r--core/l10n/gl.json2
-rw-r--r--core/l10n/hu_HU.js5
-rw-r--r--core/l10n/hu_HU.json5
-rw-r--r--core/l10n/id.js5
-rw-r--r--core/l10n/id.json5
-rw-r--r--core/l10n/is.js4
-rw-r--r--core/l10n/is.json4
-rw-r--r--core/l10n/it.js13
-rw-r--r--core/l10n/it.json13
-rw-r--r--core/l10n/ja.js14
-rw-r--r--core/l10n/ja.json14
-rw-r--r--core/l10n/ko.js5
-rw-r--r--core/l10n/ko.json5
-rw-r--r--core/l10n/mk.js1
-rw-r--r--core/l10n/mk.json1
-rw-r--r--core/l10n/nb_NO.js5
-rw-r--r--core/l10n/nb_NO.json5
-rw-r--r--core/l10n/nl.js13
-rw-r--r--core/l10n/nl.json13
-rw-r--r--core/l10n/oc.js5
-rw-r--r--core/l10n/oc.json5
-rw-r--r--core/l10n/pt_BR.js20
-rw-r--r--core/l10n/pt_BR.json20
-rw-r--r--core/l10n/pt_PT.js3
-rw-r--r--core/l10n/pt_PT.json3
-rw-r--r--core/l10n/ru.js5
-rw-r--r--core/l10n/ru.json5
-rw-r--r--core/l10n/sk_SK.js1
-rw-r--r--core/l10n/sk_SK.json1
-rw-r--r--core/l10n/sq.js13
-rw-r--r--core/l10n/sq.json13
-rw-r--r--core/l10n/sr.js2
-rw-r--r--core/l10n/sr.json2
-rw-r--r--core/l10n/th_TH.js7
-rw-r--r--core/l10n/th_TH.json7
-rw-r--r--core/l10n/tr.js5
-rw-r--r--core/l10n/tr.json5
-rw-r--r--core/l10n/uk.js3
-rw-r--r--core/l10n/uk.json3
-rw-r--r--core/l10n/zh_CN.js5
-rw-r--r--core/l10n/zh_CN.json5
-rw-r--r--core/l10n/zh_TW.js4
-rw-r--r--core/l10n/zh_TW.json4
-rw-r--r--core/register_command.php1
-rw-r--r--core/templates/404.php2
-rw-r--r--core/templates/internalmail.php2
-rw-r--r--core/templates/mail.php2
-rw-r--r--core/templates/untrustedDomain.php2
-rw-r--r--core/vendor/.gitignore2
-rw-r--r--core/vendor/base64/.bower.json29
-rw-r--r--core/vendor/base64/LICENSE14
-rw-r--r--core/vendor/base64/base64.js61
-rw-r--r--issue_template.md12
-rw-r--r--lib/base.php29
-rw-r--r--lib/l10n/es.js2
-rw-r--r--lib/l10n/es.json2
-rw-r--r--lib/l10n/et_EE.js1
-rw-r--r--lib/l10n/et_EE.json1
-rw-r--r--lib/l10n/fi_FI.js1
-rw-r--r--lib/l10n/fi_FI.json1
-rw-r--r--lib/l10n/it.js1
-rw-r--r--lib/l10n/it.json1
-rw-r--r--lib/l10n/ja.js7
-rw-r--r--lib/l10n/ja.json7
-rw-r--r--lib/l10n/nl.js1
-rw-r--r--lib/l10n/nl.json1
-rw-r--r--lib/l10n/pt_BR.js1
-rw-r--r--lib/l10n/pt_BR.json1
-rw-r--r--lib/l10n/sq.js1
-rw-r--r--lib/l10n/sq.json1
-rw-r--r--lib/l10n/th_TH.js2
-rw-r--r--lib/l10n/th_TH.json2
-rw-r--r--lib/private/app.php28
-rw-r--r--lib/private/app/appmanager.php7
-rw-r--r--lib/private/app/infoparser.php1
-rw-r--r--lib/private/app/platform.php2
-rw-r--r--lib/private/appframework/app.php2
-rw-r--r--lib/private/appframework/dependencyinjection/dicontainer.php4
-rw-r--r--lib/private/appframework/http/request.php2
-rw-r--r--lib/private/appframework/middleware/security/securitymiddleware.php1
-rw-r--r--lib/private/appframework/utility/controllermethodreflector.php22
-rw-r--r--lib/private/archive/tar.php2
-rw-r--r--lib/private/avatar.php69
-rw-r--r--lib/private/backgroundjob/job.php1
-rw-r--r--lib/private/backgroundjob/joblist.php176
-rw-r--r--lib/private/comments/comment.php357
-rw-r--r--lib/private/comments/manager.php549
-rw-r--r--lib/private/comments/managerfactory.php23
-rw-r--r--lib/private/console/application.php21
-rw-r--r--lib/private/db/querybuilder/querybuilder.php28
-rw-r--r--lib/private/defaults.php2
-rw-r--r--lib/private/eventsource.php2
-rw-r--r--lib/private/files/fileinfo.php8
-rw-r--r--lib/private/files/objectstore/objectstorestorage.php4
-rw-r--r--lib/private/files/storage/common.php8
-rw-r--r--lib/private/files/storage/dav.php22
-rw-r--r--lib/private/files/storage/localtempfiletrait.php2
-rw-r--r--lib/private/files/storage/temporary.php2
-rw-r--r--lib/private/files/storage/wrapper/availability.php1
-rw-r--r--lib/private/files/type/detection.php2
-rw-r--r--lib/private/files/view.php4
-rw-r--r--lib/private/helper.php178
-rw-r--r--lib/private/installer.php12
-rw-r--r--lib/private/json.php2
-rw-r--r--lib/private/legacy/config.php94
-rw-r--r--lib/private/lock/abstractlockingprovider.php2
-rw-r--r--lib/private/lock/dblockingprovider.php8
-rw-r--r--lib/private/lock/memcachelockingprovider.php9
-rw-r--r--lib/private/log.php2
-rw-r--r--lib/private/log/owncloud.php5
-rw-r--r--lib/private/memcache/apcu.php101
-rw-r--r--lib/private/memcache/redis.php8
-rw-r--r--lib/private/ocs/cloud.php2
-rw-r--r--lib/private/ocsclient.php1
-rw-r--r--lib/private/preview.php10
-rw-r--r--lib/private/preview/movie.php4
-rw-r--r--lib/private/route/router.php2
-rw-r--r--lib/private/security/crypto.php2
-rw-r--r--lib/private/security/hasher.php2
-rw-r--r--lib/private/security/securerandom.php45
-rw-r--r--lib/private/security/stringutils.php60
-rw-r--r--lib/private/server.php23
-rw-r--r--lib/private/servercontainer.php89
-rw-r--r--lib/private/setup.php38
-rw-r--r--lib/private/setup/mysql.php25
-rw-r--r--lib/private/share/helper.php34
-rw-r--r--lib/private/share/mailnotifications.php6
-rw-r--r--lib/private/share/share.php20
-rw-r--r--lib/private/systemconfig.php17
-rw-r--r--lib/private/template.php3
-rw-r--r--lib/private/template/functions.php6
-rw-r--r--lib/private/templatelayout.php18
-rw-r--r--lib/private/updater.php12
-rw-r--r--lib/private/user.php124
-rw-r--r--lib/private/user/user.php2
-rw-r--r--lib/private/util.php70
-rw-r--r--lib/public/backgroundjob/ijob.php19
-rw-r--r--lib/public/backgroundjob/ijoblist.php8
-rw-r--r--lib/public/comments/icomment.php21
-rw-r--r--lib/public/comments/icommentsmanager.php22
-rw-r--r--lib/public/comments/icommentsmanagerfactory.php23
-rw-r--r--lib/public/iavatar.php11
-rw-r--r--lib/public/imemcachettl.php38
-rw-r--r--lib/public/iservercontainer.php6
-rw-r--r--lib/public/security/isecurerandom.php11
-rw-r--r--lib/public/security/stringutils.php3
-rw-r--r--lib/public/util.php19
-rw-r--r--settings/changepassword/controller.php4
-rw-r--r--settings/controller/appsettingscontroller.php8
-rw-r--r--settings/help.php8
-rw-r--r--settings/js/personal.js5
-rw-r--r--settings/js/users/users.js12
-rw-r--r--settings/l10n/ar.js7
-rw-r--r--settings/l10n/ar.json7
-rw-r--r--settings/l10n/ast.js7
-rw-r--r--settings/l10n/ast.json7
-rw-r--r--settings/l10n/az.js7
-rw-r--r--settings/l10n/az.json7
-rw-r--r--settings/l10n/bg_BG.js7
-rw-r--r--settings/l10n/bg_BG.json7
-rw-r--r--settings/l10n/bn_BD.js5
-rw-r--r--settings/l10n/bn_BD.json5
-rw-r--r--settings/l10n/bs.js7
-rw-r--r--settings/l10n/bs.json7
-rw-r--r--settings/l10n/ca.js7
-rw-r--r--settings/l10n/ca.json7
-rw-r--r--settings/l10n/cs_CZ.js8
-rw-r--r--settings/l10n/cs_CZ.json8
-rw-r--r--settings/l10n/cy_GB.js2
-rw-r--r--settings/l10n/cy_GB.json2
-rw-r--r--settings/l10n/da.js8
-rw-r--r--settings/l10n/da.json8
-rw-r--r--settings/l10n/de.js1
-rw-r--r--settings/l10n/de.json1
-rw-r--r--settings/l10n/de_DE.js1
-rw-r--r--settings/l10n/de_DE.json1
-rw-r--r--settings/l10n/el.js8
-rw-r--r--settings/l10n/el.json8
-rw-r--r--settings/l10n/en_GB.js7
-rw-r--r--settings/l10n/en_GB.json7
-rw-r--r--settings/l10n/eo.js7
-rw-r--r--settings/l10n/eo.json7
-rw-r--r--settings/l10n/es.js8
-rw-r--r--settings/l10n/es.json8
-rw-r--r--settings/l10n/es_AR.js1
-rw-r--r--settings/l10n/es_AR.json1
-rw-r--r--settings/l10n/es_MX.js7
-rw-r--r--settings/l10n/es_MX.json7
-rw-r--r--settings/l10n/et_EE.js12
-rw-r--r--settings/l10n/et_EE.json12
-rw-r--r--settings/l10n/eu.js7
-rw-r--r--settings/l10n/eu.json7
-rw-r--r--settings/l10n/fa.js7
-rw-r--r--settings/l10n/fa.json7
-rw-r--r--settings/l10n/fi_FI.js7
-rw-r--r--settings/l10n/fi_FI.json7
-rw-r--r--settings/l10n/fr.js2
-rw-r--r--settings/l10n/fr.json2
-rw-r--r--settings/l10n/gl.js7
-rw-r--r--settings/l10n/gl.json7
-rw-r--r--settings/l10n/he.js3
-rw-r--r--settings/l10n/he.json3
-rw-r--r--settings/l10n/hr.js7
-rw-r--r--settings/l10n/hr.json7
-rw-r--r--settings/l10n/hu_HU.js7
-rw-r--r--settings/l10n/hu_HU.json7
-rw-r--r--settings/l10n/id.js8
-rw-r--r--settings/l10n/id.json8
-rw-r--r--settings/l10n/is.js3
-rw-r--r--settings/l10n/is.json3
-rw-r--r--settings/l10n/it.js8
-rw-r--r--settings/l10n/it.json8
-rw-r--r--settings/l10n/ja.js4
-rw-r--r--settings/l10n/ja.json4
-rw-r--r--settings/l10n/ka_GE.js3
-rw-r--r--settings/l10n/ka_GE.json3
-rw-r--r--settings/l10n/km.js3
-rw-r--r--settings/l10n/km.json3
-rw-r--r--settings/l10n/kn.js6
-rw-r--r--settings/l10n/kn.json6
-rw-r--r--settings/l10n/ko.js8
-rw-r--r--settings/l10n/ko.json8
-rw-r--r--settings/l10n/lb.js2
-rw-r--r--settings/l10n/lb.json2
-rw-r--r--settings/l10n/lo.js4
-rw-r--r--settings/l10n/lo.json4
-rw-r--r--settings/l10n/lt_LT.js7
-rw-r--r--settings/l10n/lt_LT.json7
-rw-r--r--settings/l10n/lv.js7
-rw-r--r--settings/l10n/lv.json7
-rw-r--r--settings/l10n/mk.js33
-rw-r--r--settings/l10n/mk.json33
-rw-r--r--settings/l10n/mn.js6
-rw-r--r--settings/l10n/mn.json6
-rw-r--r--settings/l10n/ms_MY.js2
-rw-r--r--settings/l10n/ms_MY.json2
-rw-r--r--settings/l10n/my_MM.js2
-rw-r--r--settings/l10n/my_MM.json2
-rw-r--r--settings/l10n/nb_NO.js8
-rw-r--r--settings/l10n/nb_NO.json8
-rw-r--r--settings/l10n/nl.js4
-rw-r--r--settings/l10n/nl.json4
-rw-r--r--settings/l10n/nn_NO.js3
-rw-r--r--settings/l10n/nn_NO.json3
-rw-r--r--settings/l10n/oc.js8
-rw-r--r--settings/l10n/oc.json8
-rw-r--r--settings/l10n/pl.js7
-rw-r--r--settings/l10n/pl.json7
-rw-r--r--settings/l10n/pt_BR.js19
-rw-r--r--settings/l10n/pt_BR.json19
-rw-r--r--settings/l10n/pt_PT.js7
-rw-r--r--settings/l10n/pt_PT.json7
-rw-r--r--settings/l10n/ro.js7
-rw-r--r--settings/l10n/ro.json7
-rw-r--r--settings/l10n/ru.js8
-rw-r--r--settings/l10n/ru.json8
-rw-r--r--settings/l10n/si_LK.js2
-rw-r--r--settings/l10n/si_LK.json2
-rw-r--r--settings/l10n/sk_SK.js7
-rw-r--r--settings/l10n/sk_SK.json7
-rw-r--r--settings/l10n/sl.js1
-rw-r--r--settings/l10n/sl.json1
-rw-r--r--settings/l10n/sq.js9
-rw-r--r--settings/l10n/sq.json9
-rw-r--r--settings/l10n/sr.js7
-rw-r--r--settings/l10n/sr.json7
-rw-r--r--settings/l10n/sr@latin.js2
-rw-r--r--settings/l10n/sr@latin.json2
-rw-r--r--settings/l10n/sv.js1
-rw-r--r--settings/l10n/sv.json1
-rw-r--r--settings/l10n/ta_LK.js3
-rw-r--r--settings/l10n/ta_LK.json3
-rw-r--r--settings/l10n/th_TH.js2
-rw-r--r--settings/l10n/th_TH.json2
-rw-r--r--settings/l10n/tr.js8
-rw-r--r--settings/l10n/tr.json8
-rw-r--r--settings/l10n/ug.js2
-rw-r--r--settings/l10n/ug.json2
-rw-r--r--settings/l10n/uk.js7
-rw-r--r--settings/l10n/uk.json7
-rw-r--r--settings/l10n/vi.js7
-rw-r--r--settings/l10n/vi.json7
-rw-r--r--settings/l10n/zh_CN.js2
-rw-r--r--settings/l10n/zh_CN.json2
-rw-r--r--settings/l10n/zh_TW.js8
-rw-r--r--settings/l10n/zh_TW.json8
-rw-r--r--settings/templates/admin.php8
-rw-r--r--settings/templates/email.new_user.php2
-rw-r--r--settings/templates/personal.php4
-rw-r--r--settings/users.php2
-rw-r--r--status.php2
-rw-r--r--tests/core/avatar/avatarcontrollertest.php42
-rw-r--r--tests/lib/allconfig.php16
-rw-r--r--tests/lib/app/dependencyanalyzer.php3
-rw-r--r--tests/lib/app/infoparser.php3
-rw-r--r--tests/lib/app/manager.php3
-rw-r--r--tests/lib/appframework/utility/ControllerMethodReflectorTest.php23
-rw-r--r--tests/lib/avatartest.php15
-rw-r--r--tests/lib/backgroundjob/job.php11
-rw-r--r--tests/lib/backgroundjob/joblist.php13
-rw-r--r--tests/lib/cache/file.php2
-rw-r--r--tests/lib/comments/comment.php112
-rw-r--r--tests/lib/comments/fakefactory.php13
-rw-r--r--tests/lib/comments/fakemanager.php33
-rw-r--r--tests/lib/comments/manager.php564
-rw-r--r--tests/lib/configtests.php2
-rw-r--r--tests/lib/db/querybuilder/querybuildertest.php22
-rw-r--r--tests/lib/files/cache/cache.php5
-rw-r--r--tests/lib/files/cache/homecache.php2
-rw-r--r--tests/lib/files/cache/updaterlegacy.php7
-rw-r--r--tests/lib/files/etagtest.php2
-rw-r--r--tests/lib/files/filesystem.php26
-rw-r--r--tests/lib/files/node/file.php10
-rw-r--r--tests/lib/files/node/folder.php10
-rw-r--r--tests/lib/files/node/node.php10
-rw-r--r--tests/lib/files/objectstore/swift.php8
-rw-r--r--tests/lib/files/storage/commontest.php2
-rw-r--r--tests/lib/files/storage/home.php2
-rw-r--r--tests/lib/files/storage/homestoragequota.php10
-rw-r--r--tests/lib/files/storage/local.php2
-rw-r--r--tests/lib/files/storage/storage.php13
-rw-r--r--tests/lib/files/storage/wrapper/quota.php2
-rw-r--r--tests/lib/files/storage/wrapper/wrapper.php2
-rw-r--r--tests/lib/files/view.php2
-rw-r--r--tests/lib/group.php6
-rw-r--r--tests/lib/helper.php199
-rw-r--r--tests/lib/helperstorage.php5
-rw-r--r--tests/lib/installer.php6
-rw-r--r--tests/lib/lock/dblockingprovider.php8
-rw-r--r--tests/lib/security/certificatemanager.php5
-rw-r--r--tests/lib/security/securerandom.php7
-rw-r--r--tests/lib/security/stringutils.php38
-rw-r--r--tests/lib/server.php16
-rw-r--r--tests/lib/setup.php13
-rw-r--r--tests/lib/share/MailNotificationsTest.php4
-rw-r--r--tests/lib/share/helper.php37
-rw-r--r--tests/lib/share/share.php38
-rw-r--r--tests/lib/streamwrappers.php4
-rw-r--r--tests/lib/tags.php4
-rw-r--r--tests/lib/testcase.php28
-rw-r--r--tests/lib/updater.php2
-rw-r--r--tests/lib/user.php27
-rw-r--r--tests/lib/util.php2
-rw-r--r--tests/lib/utilcheckserver.php10
-rw-r--r--tests/phpunit-autotest-external.xml1
-rw-r--r--tests/startsessionlistener.php3
651 files changed, 10956 insertions, 2700 deletions
diff --git a/.htaccess b/.htaccess
index 5b0ec05825c..c841f67861e 100644
--- a/.htaccess
+++ b/.htaccess
@@ -1,4 +1,3 @@
-# Version: 9.0.0
<IfModule mod_headers.c>
<IfModule mod_fcgid.c>
<IfModule mod_setenvif.c>
@@ -51,9 +50,6 @@
# Rewrite rules for `front_controller_active`
Options -MultiViews
- <IfModule mod_dir.c>
- DirectorySlash off
- </IfModule>
RewriteRule ^core/js/oc.js$ index.php/core/js/oc.js [PT,E=PATH_INFO:$1]
RewriteRule ^core/preview.png$ index.php/core/preview.png [PT,E=PATH_INFO:$1]
RewriteCond %{REQUEST_FILENAME} !\.(css|js|svg|gif|png|html|ttf|woff)$
diff --git a/.mailmap b/.mailmap
index ec69fc5318e..7d6e6c7ee5d 100644
--- a/.mailmap
+++ b/.mailmap
@@ -305,7 +305,8 @@ Robin Appelman <icewind@owncloud.com> Robin <robin@Amaya.(none)>
Robin Appelman <icewind@owncloud.com> Robin Appelman <icewind1991@gmail.com>
Robin Appelman <icewind@owncloud.com> Robin Appelman <icewind1991@gmail>
Robin Appelman <icewind@owncloud.com> Robin Appelman <robin@icewind.nl>
-Robin McCorkell <rmccorkell@karoshi.org.uk> Robin McCorkell <rmccorkell@owncloud.com>
+Robin McCorkell <robin@mccorkell.me.uk> Robin McCorkell <rmccorkell@karoshi.org.uk>
+Robin McCorkell <robin@mccorkell.me.uk> Robin McCorkell <rmccorkell@owncloud.com>
Rodrigo Hjort <rodrigo.hjort@gmail.com>
Roeland Jago Douma <rullzer@owncloud.com> Roeland Jago Douma <roeland@famdouma.nl>
rok <brejktru@gmail.com>
diff --git a/.mention-bot b/.mention-bot
index b342edbd214..c805917bee0 100644
--- a/.mention-bot
+++ b/.mention-bot
@@ -5,7 +5,11 @@
{
"name": "DeepDiver1975",
"files": ["apps/dav/**"]
+ },
+ {
+ "name": "Xenopathic",
+ "files": ["apps/files_external/**"]
}
],
- "userBlacklist": ["owncloud-bot"]
+ "userBlacklist": ["owncloud-bot", "scrutinizer-auto-fixer"]
}
diff --git a/.travis.yml b/.travis.yml
index c599a0c192b..4f79311c33c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -25,22 +25,22 @@ before_install:
install:
- sh -c "if [ '$TEST_DAV' = '1' ]; then bash tests/travis/install.sh $DB; fi"
+ - sh -c "if [ '$TEST_DAV' = '1' ]; then bash apps/dav/tests/travis/$TC/install.sh; fi"
+
script:
- sh -c "if [ '$TEST_DAV' != '1' ]; then echo \"Not testing DAV\"; fi"
- sh -c "if [ '$TEST_DAV' = '1' ]; then echo \"Testing DAV\"; fi"
- - sh -c "if [ '$TEST_DAV' = '1' ]; then bash apps/dav/tests/travis/$TC.sh; fi"
+ - sh -c "if [ '$TEST_DAV' = '1' ]; then bash apps/dav/tests/travis/$TC/script.sh; fi"
matrix:
include:
- php: 5.4
env: DB=pgsql;TC=litmus-v1
- php: 5.4
- env: DB=sqlite;TC=carddavtester
-# - php: 5.4
-# env: DB=pgsql;TC=carddavtester
-# - php: 5.4
-# env: DB=mysql;TC=caldavtester
+ env: DB=sqlite;TC=carddav
+ - php: 5.4
+ env: DB=sqlite;TC=caldav
fast_finish: true
diff --git a/3rdparty b/3rdparty
-Subproject a7b34d6f831c8fa363f389d27acd0150128fc0b
+Subproject a5b2a3cdb03cbf5a7246c6185cd4d473f697803
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index ecd2b1e49e5..66d54c61e98 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -18,20 +18,8 @@ If you have questions about how to install or use ownCloud, please direct these
- [iOS client](https://github.com/owncloud/ios/issues)
- [Desktop client](https://github.com/owncloud/client/issues)
- [Documentation](https://github.com/owncloud/documentation/issues)
- - Apps:
- - [Activity](https://github.com/owncloud/activity/issues)
- - [Bookmarks](https://github.com/owncloud/bookmarks/issues)
- - [Calendar](https://github.com/owncloud/calendar/issues)
- - [Contacts](https://github.com/owncloud/contacts/issues)
- - [Documents](https://github.com/owncloud/documents/issues)
- - [Gallery](https://github.com/owncloud/gallery/issues)
- - [Mail](https://github.com/owncloud/mail/issues)
- - [Music](https://github.com/owncloud/music/issues)
- - [News](https://github.com/owncloud/news/issues)
- - [Notes](https://github.com/owncloud/notes/issues)
- - [Shorty](https://github.com/owncloud/shorty/issues)
- - [Tasks](https://github.com/owncloud/tasks/issues)
- - [All other apps](https://github.com/owncloud/apps/issues)
+ - [ownCloud apps](https://github.com/owncloud/core/wiki/Maintainers#apps-repo)
+
* Report the issue using our [template][template], it includes all the information we need to track down the issue.
Help us to maximize the effort we can spend fixing issues and adding new features, by not reporting duplicate issues.
diff --git a/README.md b/README.md
index 1e8f6e828a8..c1a9043ce70 100644
--- a/README.md
+++ b/README.md
@@ -27,10 +27,14 @@ https://doc.owncloud.org/server/9.0/developer_manual/app/index.html
## Contribution Guidelines
https://owncloud.org/contribute/
+## Support
+Learn about the diffrent ways you can get support for ownCloud: https://owncloud.org/support/
+
## Get in touch
* :clipboard: [Forum](https://forum.owncloud.org)
* :envelope: [Mailing list](https://mailman.owncloud.org/mailman/listinfo)
-* :busts_in_silhouette: [IRC channel](https://webchat.freenode.net/?channels=owncloud)
+* :hash: [IRC channel](https://webchat.freenode.net/?channels=owncloud)
+* :busts_in_silhouette: [Facebook] (https://facebook.com/ownclouders)
* :hatching_chick: [Twitter](https://twitter.com/ownClouders)
## Important notice on translations
diff --git a/apps/dav/appinfo/app.php b/apps/dav/appinfo/app.php
new file mode 100644
index 00000000000..950754ee941
--- /dev/null
+++ b/apps/dav/appinfo/app.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+$cm = \OC::$server->getContactsManager();
+$cm->register(function() use ($cm) {
+ $db = \OC::$server->getDatabaseConnection();
+ $userId = \OC::$server->getUserSession()->getUser()->getUID();
+ $principal = new \OCA\DAV\Connector\Sabre\Principal(
+ \OC::$server->getConfig(),
+ \OC::$server->getUserManager()
+ );
+ $cardDav = new \OCA\DAV\CardDAV\CardDavBackend($db, $principal, \OC::$server->getLogger());
+ $addressBooks = $cardDav->getAddressBooksForUser("principals/$userId");
+ foreach ($addressBooks as $addressBookInfo) {
+ $addressBook = new \OCA\DAV\CardDAV\AddressBook($cardDav, $addressBookInfo);
+ $cm->registerAddressBook(
+ new OCA\DAV\CardDAV\AddressBookImpl(
+ $addressBook,
+ $addressBookInfo,
+ $cardDav
+ )
+ );
+ }
+});
diff --git a/apps/dav/appinfo/database.xml b/apps/dav/appinfo/database.xml
index 48641c2be6f..50c8aa7d8ca 100644
--- a/apps/dav/appinfo/database.xml
+++ b/apps/dav/appinfo/database.xml
@@ -572,6 +572,78 @@ CREATE TABLE calendarobjects (
</table>
<table>
+ <name>*dbprefix*cards_properties</name>
+ <declaration>
+ <field>
+ <name>id</name>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <autoincrement>1</autoincrement>
+ <unsigned>true</unsigned>
+ <length>11</length>
+ </field>
+ <field>
+ <name>addressbookid</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>11</length>
+ </field>
+ <field>
+ <name>cardid</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>true</notnull>
+ <unsigned>true</unsigned>
+ <length>11</length>
+ </field>
+ <field>
+ <name>name</name>
+ <type>text</type>
+ <default></default>
+ <notnull>false</notnull>
+ <length>64</length>
+ </field>
+ <field>
+ <name>value</name>
+ <type>text</type>
+ <default></default>
+ <notnull>false</notnull>
+ <length>255</length>
+ </field>
+ <field>
+ <name>preferred</name>
+ <type>integer</type>
+ <default>1</default>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
+ <index>
+ <name>card_contactid_index</name>
+ <field>
+ <name>cardid</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+ <index>
+ <name>card_name_index</name>
+ <field>
+ <name>name</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+ <index>
+ <name>card_value_index</name>
+ <field>
+ <name>value</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+ </declaration>
+ </table>
+
+ <table>
<name>*dbprefix*dav_shares</name>
<declaration>
<field>
diff --git a/apps/dav/appinfo/register_command.php b/apps/dav/appinfo/register_command.php
index af41036cddc..603832e0c48 100644
--- a/apps/dav/appinfo/register_command.php
+++ b/apps/dav/appinfo/register_command.php
@@ -8,8 +8,9 @@ $config = \OC::$server->getConfig();
$dbConnection = \OC::$server->getDatabaseConnection();
$userManager = OC::$server->getUserManager();
$config = \OC::$server->getConfig();
+$logger = \OC::$server->getLogger();
/** @var Symfony\Component\Console\Application $application */
-$application->add(new CreateAddressBook($userManager, $dbConnection, $config));
+$application->add(new CreateAddressBook($userManager, $dbConnection, $config, $logger));
$application->add(new CreateCalendar($userManager, $dbConnection));
$application->add(new SyncSystemAddressBook($userManager, $dbConnection, $config));
diff --git a/apps/dav/command/createaddressbook.php b/apps/dav/command/createaddressbook.php
index ea89e7aa0a8..7b70cea7f80 100644
--- a/apps/dav/command/createaddressbook.php
+++ b/apps/dav/command/createaddressbook.php
@@ -6,6 +6,7 @@ use OCA\DAV\CardDAV\CardDavBackend;
use OCA\DAV\Connector\Sabre\Principal;
use OCP\IConfig;
use OCP\IDBConnection;
+use OCP\ILogger;
use OCP\IUserManager;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
@@ -23,15 +24,25 @@ class CreateAddressBook extends Command {
/** @var IConfig */
private $config;
+ /** @var ILogger */
+ private $logger;
+
/**
* @param IUserManager $userManager
* @param IDBConnection $dbConnection
+ * @param IConfig $config
+ * @param ILogger $logger
*/
- function __construct(IUserManager $userManager, IDBConnection $dbConnection, IConfig $config) {
+ function __construct(IUserManager $userManager,
+ IDBConnection $dbConnection,
+ IConfig $config,
+ ILogger $logger
+ ) {
parent::__construct();
$this->userManager = $userManager;
$this->dbConnection = $dbConnection;
$this->config = $config;
+ $this->logger = $logger;
}
protected function configure() {
diff --git a/apps/dav/lib/carddav/addressbookimpl.php b/apps/dav/lib/carddav/addressbookimpl.php
new file mode 100644
index 00000000000..838ef5aec65
--- /dev/null
+++ b/apps/dav/lib/carddav/addressbookimpl.php
@@ -0,0 +1,219 @@
+<?php
+/**
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Björn Schießle <schiessle@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\DAV\CardDAV;
+
+use OCP\Constants;
+use OCP\IAddressBook;
+use Sabre\VObject\Component\VCard;
+use Sabre\VObject\Property\Text;
+use Sabre\VObject\Reader;
+use Sabre\VObject\UUIDUtil;
+
+class AddressBookImpl implements IAddressBook {
+
+ /** @var CardDavBackend */
+ private $backend;
+
+ /** @var array */
+ private $addressBookInfo;
+
+ /** @var AddressBook */
+ private $addressBook;
+
+ /**
+ * AddressBookImpl constructor.
+ *
+ * @param AddressBook $addressBook
+ * @param array $addressBookInfo
+ * @param CardDavBackend $backend
+ */
+ public function __construct(
+ AddressBook $addressBook,
+ array $addressBookInfo,
+ CardDavBackend $backend) {
+
+ $this->addressBook = $addressBook;
+ $this->addressBookInfo = $addressBookInfo;
+ $this->backend = $backend;
+ }
+
+ /**
+ * @return string defining the technical unique key
+ * @since 5.0.0
+ */
+ public function getKey() {
+ return $this->addressBookInfo['id'];
+ }
+
+ /**
+ * In comparison to getKey() this function returns a human readable (maybe translated) name
+ *
+ * @return mixed
+ * @since 5.0.0
+ */
+ public function getDisplayName() {
+ return $this->addressBookInfo['{DAV:}displayname'];
+ }
+
+ /**
+ * @param string $pattern which should match within the $searchProperties
+ * @param array $searchProperties defines the properties within the query pattern should match
+ * @param array $options - for future use. One should always have options!
+ * @return array an array of contacts which are arrays of key-value-pairs
+ * @since 5.0.0
+ */
+ public function search($pattern, $searchProperties, $options) {
+ $result = $this->backend->search($this->getKey(), $pattern, $searchProperties);
+
+ $vCards = [];
+ foreach ($result as $cardData) {
+ $vCards[] = $this->vCard2Array($this->readCard($cardData));
+ }
+
+ return $vCards;
+ }
+
+ /**
+ * @param array $properties this array if key-value-pairs defines a contact
+ * @return array an array representing the contact just created or updated
+ * @since 5.0.0
+ */
+ public function createOrUpdate($properties) {
+ $update = false;
+ if (!isset($properties['UID'])) { // create a new contact
+ $uid = $this->createUid();
+ $uri = $uid . '.vcf';
+ $vCard = $this->createEmptyVCard($uid);
+ } else { // update existing contact
+ $uid = $properties['UID'];
+ $uri = $uid . '.vcf';
+ $vCardData = $this->backend->getCard($this->getKey(), $uri);
+ $vCard = $this->readCard($vCardData['carddata']);
+ $update = true;
+ }
+
+ foreach ($properties as $key => $value) {
+ $vCard->$key = $vCard->createProperty($key, $value);
+ }
+
+ if ($update) {
+ $this->backend->updateCard($this->getKey(), $uri, $vCard->serialize());
+ } else {
+ $this->backend->createCard($this->getKey(), $uri, $vCard->serialize());
+ }
+
+ return $this->vCard2Array($vCard);
+
+ }
+
+ /**
+ * @return mixed
+ * @since 5.0.0
+ */
+ public function getPermissions() {
+ $permissions = $this->addressBook->getACL();
+ $result = 0;
+ foreach ($permissions as $permission) {
+ switch($permission['privilege']) {
+ case '{DAV:}read':
+ $result |= Constants::PERMISSION_READ;
+ break;
+ case '{DAV:}write':
+ $result |= Constants::PERMISSION_CREATE;
+ $result |= Constants::PERMISSION_UPDATE;
+ break;
+ case '{DAV:}all':
+ $result |= Constants::PERMISSION_ALL;
+ break;
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * @param object $id the unique identifier to a contact
+ * @return bool successful or not
+ * @since 5.0.0
+ */
+ public function delete($id) {
+ $uri = $this->backend->getCardUri($id);
+ return $this->backend->deleteCard($this->addressBookInfo['id'], $uri);
+ }
+
+ /**
+ * read vCard data into a vCard object
+ *
+ * @param string $cardData
+ * @return VCard
+ */
+ protected function readCard($cardData) {
+ return Reader::read($cardData);
+ }
+
+ /**
+ * create UID for contact
+ *
+ * @return string
+ */
+ protected function createUid() {
+ do {
+ $uid = $this->getUid();
+ } while (!empty($this->backend->getContact($uid . '.vcf')));
+
+ return $uid;
+ }
+
+ /**
+ * getUid is only there for testing, use createUid instead
+ */
+ protected function getUid() {
+ return UUIDUtil::getUUID();
+ }
+
+ /**
+ * create empty vcard
+ *
+ * @param string $uid
+ * @return VCard
+ */
+ protected function createEmptyVCard($uid) {
+ $vCard = new VCard();
+ $vCard->add(new Text($vCard, 'UID', $uid));
+ return $vCard;
+ }
+
+ /**
+ * create array with all vCard properties
+ *
+ * @param VCard $vCard
+ * @return array
+ */
+ protected function vCard2Array(VCard $vCard) {
+ $result = [];
+ foreach ($vCard->children as $property) {
+ $result[$property->name] = $property->getValue();
+ }
+ return $result;
+ }
+}
diff --git a/apps/dav/lib/carddav/carddavbackend.php b/apps/dav/lib/carddav/carddavbackend.php
index 29b056672b4..95175b20d1b 100644
--- a/apps/dav/lib/carddav/carddavbackend.php
+++ b/apps/dav/lib/carddav/carddavbackend.php
@@ -23,19 +23,48 @@
namespace OCA\DAV\CardDAV;
use OCA\DAV\Connector\Sabre\Principal;
+use OCP\IDBConnection;
+use OCP\ILogger;
use Sabre\CardDAV\Backend\BackendInterface;
use Sabre\CardDAV\Backend\SyncSupport;
use Sabre\CardDAV\Plugin;
use Sabre\DAV\Exception\BadRequest;
+use Sabre\VObject\Component\VCard;
+use Sabre\VObject\Reader;
class CardDavBackend implements BackendInterface, SyncSupport {
/** @var Principal */
private $principalBackend;
- public function __construct(\OCP\IDBConnection $db, Principal $principalBackend) {
+ /** @var ILogger */
+ private $logger;
+
+ /** @var string */
+ private $dbCardsTable = 'cards';
+
+ /** @var string */
+ private $dbCardsPropertiesTable = 'cards_properties';
+
+ /** @var IDBConnection */
+ private $db;
+
+ /** @var array properties to index */
+ public static $indexProperties = array(
+ 'BDAY', 'UID', 'N', 'FN', 'TITLE', 'ROLE', 'NOTE', 'NICKNAME',
+ 'ORG', 'CATEGORIES', 'EMAIL', 'TEL', 'IMPP', 'ADR', 'URL', 'GEO', 'CLOUD');
+
+ /**
+ * CardDavBackend constructor.
+ *
+ * @param IDBConnection $db
+ * @param Principal $principalBackend
+ * @param ILogger $logger
+ */
+ public function __construct(IDBConnection $db, Principal $principalBackend, ILogger $logger) {
$this->db = $db;
$this->principalBackend = $principalBackend;
+ $this->logger = $logger;
}
/**
@@ -263,6 +292,11 @@ class CardDavBackend implements BackendInterface, SyncSupport {
->where($query->expr()->eq('resourceid', $query->createNamedParameter($addressBookId)))
->andWhere($query->expr()->eq('type', $query->createNamedParameter('addressbook')))
->execute();
+
+ $query->delete($this->dbCardsPropertiesTable)
+ ->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)))
+ ->execute();
+
}
/**
@@ -398,7 +432,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
$query = $this->db->getQueryBuilder();
$query->insert('cards')
->values([
- 'carddata' => $query->createNamedParameter($cardData),
+ 'carddata' => $query->createNamedParameter($cardData, \PDO::PARAM_LOB),
'uri' => $query->createNamedParameter($cardUri),
'lastmodified' => $query->createNamedParameter(time()),
'addressbookid' => $query->createNamedParameter($addressBookId),
@@ -408,6 +442,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
->execute();
$this->addChange($addressBookId, $cardUri, 1);
+ $this->updateProperties($addressBookId, $cardUri, $cardData);
return '"' . $etag . '"';
}
@@ -451,6 +486,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
->execute();
$this->addChange($addressBookId, $cardUri, 2);
+ $this->updateProperties($addressBookId, $cardUri, $cardData);
return '"' . $etag . '"';
}
@@ -463,6 +499,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
* @return bool
*/
function deleteCard($addressBookId, $cardUri) {
+ $cardId = $this->getCardId($cardUri);
$query = $this->db->getQueryBuilder();
$ret = $query->delete('cards')
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)))
@@ -471,7 +508,12 @@ class CardDavBackend implements BackendInterface, SyncSupport {
$this->addChange($addressBookId, $cardUri, 3);
- return $ret === 1;
+ if ($ret === 1) {
+ $this->purgeProperties($addressBookId, $cardId);
+ return true;
+ }
+
+ return false;
}
/**
@@ -638,6 +680,87 @@ class CardDavBackend implements BackendInterface, SyncSupport {
}
/**
+ * search contact
+ *
+ * @param int $addressBookId
+ * @param string $pattern which should match within the $searchProperties
+ * @param array $searchProperties defines the properties within the query pattern should match
+ * @return array an array of contacts which are arrays of key-value-pairs
+ */
+ public function search($addressBookId, $pattern, $searchProperties) {
+ $query = $this->db->getQueryBuilder();
+ $query2 = $this->db->getQueryBuilder();
+ $query2->selectDistinct('cp.cardid')->from($this->dbCardsPropertiesTable, 'cp');
+ foreach ($searchProperties as $property) {
+ $query2->orWhere(
+ $query2->expr()->andX(
+ $query2->expr()->eq('cp.name', $query->createNamedParameter($property)),
+ $query2->expr()->like('cp.value', $query->createNamedParameter('%' . $this->db->escapeLikeParameter($pattern) . '%'))
+ )
+ );
+ }
+ $query2->andWhere($query2->expr()->eq('cp.addressbookid', $query->createNamedParameter($addressBookId)));
+
+ $query->select('c.carddata')->from($this->dbCardsTable, 'c')
+ ->where($query->expr()->in('c.id', $query->createFunction($query2->getSQL())));
+
+ $result = $query->execute();
+ $cards = $result->fetchAll();
+
+ $result->closeCursor();
+
+ return array_map(function($array) {return $this->readBlob($array['carddata']);}, $cards);
+
+ }
+
+ /**
+ * get URI from a given contact
+ *
+ * @param int $id
+ * @return string
+ */
+ public function getCardUri($id) {
+ $query = $this->db->getQueryBuilder();
+ $query->select('uri')->from($this->dbCardsTable)
+ ->where($query->expr()->eq('id', $query->createParameter('id')))
+ ->setParameter('id', $id);
+
+ $result = $query->execute();
+ $uri = $result->fetch();
+ $result->closeCursor();
+
+ if (!isset($uri['uri'])) {
+ throw new \InvalidArgumentException('Card does not exists: ' . $id);
+ }
+
+ return $uri['uri'];
+ }
+
+ /**
+ * return contact with the given URI
+ *
+ * @param string $uri
+ * @returns array
+ */
+ public function getContact($uri) {
+ $result = [];
+ $query = $this->db->getQueryBuilder();
+ $query->select('*')->from($this->dbCardsTable)
+ ->where($query->expr()->eq('uri', $query->createParameter('uri')))
+ ->setParameter('uri', $uri);
+ $queryResult = $query->execute();
+ $contact = $queryResult->fetch();
+ $queryResult->closeCursor();
+
+ if (is_array($contact)) {
+ $result = $contact;
+ }
+
+ return $result;
+ }
+
+
+ /**
* @param string $addressBookUri
* @param string $element
*/
@@ -658,7 +781,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
}
// remove the share if it already exists
- $this->unshare($addressBookUri, $element);
+ $this->unshare($addressBookUri, $element['href']);
$query = $this->db->getQueryBuilder();
$query->insert('dav_shares')
@@ -677,8 +800,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
* @param string $element
*/
private function unshare($addressBookUri, $element) {
- $user = $element['href'];
- $parts = explode(':', $user, 2);
+ $parts = explode(':', $element, 2);
if ($parts[0] !== 'principal') {
return;
}
@@ -734,4 +856,93 @@ class CardDavBackend implements BackendInterface, SyncSupport {
return $shares;
}
+
+ /**
+ * update properties table
+ *
+ * @param int $addressBookId
+ * @param string $cardUri
+ * @param string $vCardSerialized
+ */
+ protected function updateProperties($addressBookId, $cardUri, $vCardSerialized) {
+ $cardId = $this->getCardId($cardUri);
+ $vCard = $this->readCard($vCardSerialized);
+
+ $this->purgeProperties($addressBookId, $cardId);
+
+ $query = $this->db->getQueryBuilder();
+ $query->insert($this->dbCardsPropertiesTable)
+ ->values(
+ [
+ 'addressbookid' => $query->createNamedParameter($addressBookId),
+ 'cardid' => $query->createNamedParameter($cardId),
+ 'name' => $query->createParameter('name'),
+ 'value' => $query->createParameter('value'),
+ 'preferred' => $query->createParameter('preferred')
+ ]
+ );
+
+ foreach ($vCard->children as $property) {
+ if(!in_array($property->name, self::$indexProperties)) {
+ continue;
+ }
+ $preferred = 0;
+ foreach($property->parameters as $parameter) {
+ if ($parameter->name == 'TYPE' && strtoupper($parameter->getValue()) == 'PREF') {
+ $preferred = 1;
+ break;
+ }
+ }
+ $query->setParameter('name', $property->name);
+ $query->setParameter('value', substr($property->getValue(), 0, 254));
+ $query->setParameter('preferred', $preferred);
+ $query->execute();
+ }
+ }
+
+ /**
+ * read vCard data into a vCard object
+ *
+ * @param string $cardData
+ * @return VCard
+ */
+ protected function readCard($cardData) {
+ return Reader::read($cardData);
+ }
+
+ /**
+ * delete all properties from a given card
+ *
+ * @param int $addressBookId
+ * @param int $cardId
+ */
+ protected function purgeProperties($addressBookId, $cardId) {
+ $query = $this->db->getQueryBuilder();
+ $query->delete($this->dbCardsPropertiesTable)
+ ->where($query->expr()->eq('cardid', $query->createNamedParameter($cardId)))
+ ->andWhere($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)));
+ $query->execute();
+ }
+
+ /**
+ * get ID from a given contact
+ *
+ * @param string $uri
+ * @return int
+ */
+ protected function getCardId($uri) {
+ $query = $this->db->getQueryBuilder();
+ $query->select('id')->from($this->dbCardsTable)
+ ->where($query->expr()->eq('uri', $query->createNamedParameter($uri)));
+
+ $result = $query->execute();
+ $cardIds = $result->fetch();
+ $result->closeCursor();
+
+ if (!isset($cardIds['id'])) {
+ throw new \InvalidArgumentException('Card does not exists: ' . $uri);
+ }
+
+ return (int)$cardIds['id'];
+ }
}
diff --git a/apps/dav/lib/carddav/sharing/plugin.php b/apps/dav/lib/carddav/sharing/plugin.php
index 99c6f8f912c..fd415b4566b 100644
--- a/apps/dav/lib/carddav/sharing/plugin.php
+++ b/apps/dav/lib/carddav/sharing/plugin.php
@@ -9,11 +9,24 @@ use Sabre\DAV\Exception\NotFound;
use Sabre\DAV\Server;
use Sabre\DAV\ServerPlugin;
use Sabre\DAV\XMLUtil;
+use Sabre\DAVACL\IACL;
use Sabre\HTTP\RequestInterface;
use Sabre\HTTP\ResponseInterface;
class Plugin extends ServerPlugin {
+ /** @var Auth */
+ private $auth;
+
+ /** @var IRequest */
+ private $request;
+
+ /**
+ * Plugin constructor.
+ *
+ * @param Auth $authBackEnd
+ * @param IRequest $request
+ */
public function __construct(Auth $authBackEnd, IRequest $request) {
$this->auth = $authBackEnd;
$this->request = $request;
@@ -68,6 +81,7 @@ class Plugin extends ServerPlugin {
function initialize(Server $server) {
$this->server = $server;
$server->resourceTypeMapping['OCA\\DAV\CardDAV\\ISharedAddressbook'] = '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}shared';
+ $this->server->xml->elementMap['{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}share'] = 'OCA\\DAV\\CardDAV\\Sharing\\Xml\\ShareRequest';
$this->server->on('method:POST', [$this, 'httpPost']);
}
@@ -109,9 +123,7 @@ class Plugin extends ServerPlugin {
// re-populated the request body with the existing data.
$request->setBody($requestBody);
- $dom = XMLUtil::loadDOMDocument($requestBody);
-
- $documentType = XMLUtil::toClarkNotation($dom->firstChild);
+ $message = $this->server->xml->parse($requestBody, $request->getUrl(), $documentType);
switch ($documentType) {
@@ -124,19 +136,18 @@ class Plugin extends ServerPlugin {
return;
}
- $this->server->transactionType = 'post-calendar-share';
+ $this->server->transactionType = 'post-oc-addressbook-share';
// Getting ACL info
$acl = $this->server->getPlugin('acl');
// If there's no ACL support, we allow everything
if ($acl) {
+ /** @var \Sabre\DAVACL\Plugin $acl */
$acl->checkPrivileges($path, '{DAV:}write');
}
- $mutations = $this->parseShareRequest($dom);
-
- $node->updateShares($mutations[0], $mutations[1]);
+ $node->updateShares($message->set, $message->remove);
$response->setStatus(200);
// Adding this because sending a response body may cause issues,
@@ -148,59 +159,6 @@ class Plugin extends ServerPlugin {
}
}
- /**
- * Parses the 'share' POST request.
- *
- * This method returns an array, containing two arrays.
- * The first array is a list of new sharees. Every element is a struct
- * containing a:
- * * href element. (usually a mailto: address)
- * * commonName element (often a first and lastname, but can also be
- * false)
- * * readOnly (true or false)
- * * summary (A description of the share, can also be false)
- *
- * The second array is a list of sharees that are to be removed. This is
- * just a simple array with 'hrefs'.
- *
- * @param \DOMDocument $dom
- * @return array
- */
- function parseShareRequest(\DOMDocument $dom) {
-
- $xpath = new \DOMXPath($dom);
- $xpath->registerNamespace('cs', \Sabre\CardDAV\Plugin::NS_CARDDAV);
- $xpath->registerNamespace('d', 'urn:DAV');
-
- $set = [];
- $elems = $xpath->query('cs:set');
-
- for ($i = 0; $i < $elems->length; $i++) {
-
- $xset = $elems->item($i);
- $set[] = [
- 'href' => $xpath->evaluate('string(d:href)', $xset),
- 'commonName' => $xpath->evaluate('string(cs:common-name)', $xset),
- 'summary' => $xpath->evaluate('string(cs:summary)', $xset),
- 'readOnly' => $xpath->evaluate('boolean(cs:read)', $xset) !== false
- ];
-
- }
-
- $remove = [];
- $elems = $xpath->query('cs:remove');
-
- for ($i = 0; $i < $elems->length; $i++) {
-
- $xremove = $elems->item($i);
- $remove[] = $xpath->evaluate('string(d:href)', $xremove);
-
- }
-
- return [$set, $remove];
-
- }
-
private function protectAgainstCSRF() {
$user = $this->auth->getCurrentUser();
if ($this->auth->isDavAuthenticated($user)) {
diff --git a/apps/dav/lib/carddav/sharing/xml/sharerequest.php b/apps/dav/lib/carddav/sharing/xml/sharerequest.php
new file mode 100644
index 00000000000..175c5ffc306
--- /dev/null
+++ b/apps/dav/lib/carddav/sharing/xml/sharerequest.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace OCA\DAV\CardDAV\Sharing\Xml;
+
+use Sabre\Xml\Reader;
+use Sabre\Xml\XmlDeserializable;
+
+class ShareRequest implements XmlDeserializable {
+
+ public $set = [];
+
+ public $remove = [];
+
+ /**
+ * Constructor
+ *
+ * @param array $set
+ * @param array $remove
+ */
+ function __construct(array $set, array $remove) {
+
+ $this->set = $set;
+ $this->remove = $remove;
+
+ }
+
+ static function xmlDeserialize(Reader $reader) {
+
+ $elems = $reader->parseInnerTree([
+ '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV. '}set' => 'Sabre\\Xml\\Element\\KeyValue',
+ '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}remove' => 'Sabre\\Xml\\Element\\KeyValue',
+ ]);
+
+ $set = [];
+ $remove = [];
+
+ foreach ($elems as $elem) {
+ switch ($elem['name']) {
+
+ case '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}set' :
+ $sharee = $elem['value'];
+
+ $sumElem = '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}summary';
+ $commonName = '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}common-name';
+
+ $set[] = [
+ 'href' => $sharee['{DAV:}href'],
+ 'commonName' => isset($sharee[$commonName]) ? $sharee[$commonName] : null,
+ 'summary' => isset($sharee[$sumElem]) ? $sharee[$sumElem] : null,
+ 'readOnly' => !array_key_exists('{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}read-write', $sharee),
+ ];
+ break;
+
+ case '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}remove' :
+ $remove[] = $elem['value']['{DAV:}href'];
+ break;
+
+ }
+ }
+
+ return new self($set, $remove);
+
+ }
+
+}
diff --git a/apps/dav/lib/connector/sabre/auth.php b/apps/dav/lib/connector/sabre/auth.php
index 4f319770234..7f4f4a531b1 100644
--- a/apps/dav/lib/connector/sabre/auth.php
+++ b/apps/dav/lib/connector/sabre/auth.php
@@ -160,7 +160,7 @@ class Auth extends AbstractBasic {
return [true, $this->principalPrefix . $user];
}
- if (!$this->userSession->isLoggedIn() && $request->getHeader('X-Requested-With') === 'XMLHttpRequest') {
+ if (!$this->userSession->isLoggedIn() && in_array('XMLHttpRequest', explode(',', $request->getHeader('X-Requested-With')))) {
// do not re-authenticate over ajax, use dummy auth name to prevent browser popup
$response->addHeader('WWW-Authenticate','DummyBasic realm="' . $this->realm . '"');
$response->setStatus(401);
diff --git a/apps/dav/lib/connector/sabre/file.php b/apps/dav/lib/connector/sabre/file.php
index c66f627c0a3..6a0a39d04e7 100644
--- a/apps/dav/lib/connector/sabre/file.php
+++ b/apps/dav/lib/connector/sabre/file.php
@@ -329,7 +329,7 @@ class File extends Node implements IFile {
if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'PROPFIND') {
return $mimeType;
}
- return \OC_Helper::getSecureMimeType($mimeType);
+ return \OC::$server->getMimeTypeDetector()->getSecureMimeType($mimeType);
}
/**
diff --git a/apps/dav/lib/connector/sabre/filesplugin.php b/apps/dav/lib/connector/sabre/filesplugin.php
index 1c78e9dc845..aa756281745 100644
--- a/apps/dav/lib/connector/sabre/filesplugin.php
+++ b/apps/dav/lib/connector/sabre/filesplugin.php
@@ -31,6 +31,7 @@ use \Sabre\DAV\PropFind;
use \Sabre\DAV\PropPatch;
use \Sabre\HTTP\RequestInterface;
use \Sabre\HTTP\ResponseInterface;
+use OCP\Files\StorageNotAvailableException;
class FilesPlugin extends \Sabre\DAV\ServerPlugin {
@@ -225,9 +226,13 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
if ($node instanceof \OCA\DAV\Connector\Sabre\File) {
$propFind->handle(self::DOWNLOADURL_PROPERTYNAME, function() use ($node) {
/** @var $node \OCA\DAV\Connector\Sabre\File */
- $directDownloadUrl = $node->getDirectDownload();
- if (isset($directDownloadUrl['url'])) {
- return $directDownloadUrl['url'];
+ try {
+ $directDownloadUrl = $node->getDirectDownload();
+ if (isset($directDownloadUrl['url'])) {
+ return $directDownloadUrl['url'];
+ }
+ } catch (StorageNotAvailableException $e) {
+ return false;
}
return false;
});
diff --git a/apps/dav/lib/connector/sabre/objecttree.php b/apps/dav/lib/connector/sabre/objecttree.php
index 2e9c1b9916c..809d202aea4 100644
--- a/apps/dav/lib/connector/sabre/objecttree.php
+++ b/apps/dav/lib/connector/sabre/objecttree.php
@@ -190,7 +190,7 @@ class ObjectTree extends \Sabre\DAV\Tree {
$targetNodeExists = $this->nodeExists($destinationPath);
$sourceNode = $this->getNodeForPath($sourcePath);
if ($sourceNode instanceof \Sabre\DAV\ICollection && $targetNodeExists) {
- throw new \Sabre\DAV\Exception\Forbidden('Could not copy directory ' . $sourceNode . ', target exists');
+ throw new \Sabre\DAV\Exception\Forbidden('Could not copy directory ' . $sourceNode->getName() . ', target exists');
}
list($sourceDir,) = \Sabre\HTTP\URLUtil::splitPath($sourcePath);
list($destinationDir,) = \Sabre\HTTP\URLUtil::splitPath($destinationPath);
diff --git a/apps/dav/lib/rootcollection.php b/apps/dav/lib/rootcollection.php
index 9ee32822bbd..96cc2bbc46a 100644
--- a/apps/dav/lib/rootcollection.php
+++ b/apps/dav/lib/rootcollection.php
@@ -41,11 +41,11 @@ class RootCollection extends SimpleCollection {
\OC::$server->getSystemTagObjectMapper()
);
- $usersCardDavBackend = new CardDavBackend($db, $principalBackend);
+ $usersCardDavBackend = new CardDavBackend($db, $principalBackend, \OC::$server->getLogger());
$usersAddressBookRoot = new AddressBookRoot($principalBackend, $usersCardDavBackend, 'principals/users');
$usersAddressBookRoot->disableListing = $disableListing;
- $systemCardDavBackend = new CardDavBackend($db, $principalBackend);
+ $systemCardDavBackend = new CardDavBackend($db, $principalBackend, \OC::$server->getLogger());
$systemAddressBookRoot = new AddressBookRoot(new SystemPrincipalBackend(), $systemCardDavBackend, 'principals/system');
$systemAddressBookRoot->disableListing = $disableListing;
diff --git a/apps/dav/lib/systemtag/systemtagsbyidcollection.php b/apps/dav/lib/systemtag/systemtagsbyidcollection.php
index e7b7b6d0acc..974d04efa5f 100644
--- a/apps/dav/lib/systemtag/systemtagsbyidcollection.php
+++ b/apps/dav/lib/systemtag/systemtagsbyidcollection.php
@@ -46,14 +46,25 @@ class SystemTagsByIdCollection implements ICollection {
$this->tagManager = $tagManager;
}
+ /**
+ * @param string $name
+ * @param resource|string $data Initial payload
+ * @throws Forbidden
+ */
function createFile($name, $data = null) {
throw new Forbidden('Cannot create tags by id');
}
+ /**
+ * @param string $name
+ */
function createDirectory($name) {
throw new Forbidden('Permission denied to create collections');
}
+ /**
+ * @param string $name
+ */
function getChild($name) {
try {
$tags = $this->tagManager->getTagsByIds([$name]);
@@ -72,6 +83,9 @@ class SystemTagsByIdCollection implements ICollection {
}, $tags);
}
+ /**
+ * @param string $name
+ */
function childExists($name) {
try {
$this->tagManager->getTagsByIds([$name]);
diff --git a/apps/dav/lib/systemtag/systemtagsobjecttypecollection.php b/apps/dav/lib/systemtag/systemtagsobjecttypecollection.php
index e544073613f..2a28b9c83aa 100644
--- a/apps/dav/lib/systemtag/systemtagsobjecttypecollection.php
+++ b/apps/dav/lib/systemtag/systemtagsobjecttypecollection.php
@@ -61,14 +61,25 @@ class SystemTagsObjectTypeCollection implements ICollection {
$this->objectType = $objectType;
}
+ /**
+ * @param string $name
+ * @param resource|string $data Initial payload
+ * @throws Forbidden
+ */
function createFile($name, $data = null) {
throw new Forbidden('Permission denied to create nodes');
}
+ /**
+ * @param string $name
+ */
function createDirectory($name) {
throw new Forbidden('Permission denied to create collections');
}
+ /**
+ * @param string $objectId
+ */
function getChild($objectId) {
return new SystemTagsObjectMappingCollection(
$objectId,
@@ -83,6 +94,9 @@ class SystemTagsObjectTypeCollection implements ICollection {
throw new MethodNotAllowed();
}
+ /**
+ * @param string $name
+ */
function childExists($name) {
return true;
}
@@ -95,6 +109,9 @@ class SystemTagsObjectTypeCollection implements ICollection {
return $this->objectType;
}
+ /**
+ * @param string $name
+ */
function setName($name) {
throw new Forbidden('Permission denied to rename this collection');
}
diff --git a/apps/dav/tests/travis/caldav/install.sh b/apps/dav/tests/travis/caldav/install.sh
new file mode 100644
index 00000000000..e836e37f86f
--- /dev/null
+++ b/apps/dav/tests/travis/caldav/install.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+SCRIPT=`realpath $0`
+SCRIPTPATH=`dirname $SCRIPT`
+
+
+if [ ! -f CalDAVTester/run.py ]; then
+ cd "$SCRIPTPATH"
+ git clone https://github.com/DeepDiver1975/CalDAVTester.git
+ cd "$SCRIPTPATH/CalDAVTester"
+ python run.py -s
+ cd "$SCRIPTPATH"
+fi
+
+# create test user
+cd "$SCRIPTPATH/../../../../../"
+OC_PASS=user01 php occ user:add --password-from-env user01
+php occ dav:create-calendar user01 calendar
+OC_PASS=user02 php occ user:add --password-from-env user02
+php occ dav:create-calendar user02 calendar
+cd "$SCRIPTPATH/../../../../../"
diff --git a/apps/dav/tests/travis/caldav/script.sh b/apps/dav/tests/travis/caldav/script.sh
new file mode 100644
index 00000000000..9a818b553f7
--- /dev/null
+++ b/apps/dav/tests/travis/caldav/script.sh
@@ -0,0 +1,18 @@
+#!/usr/bin/env bash
+SCRIPT=`realpath $0`
+SCRIPTPATH=`dirname $SCRIPT`
+
+# start the server
+php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." &
+
+sleep 30
+
+# run the tests
+cd "$SCRIPTPATH/CalDAVTester"
+PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail -s "$SCRIPTPATH/../caldavtest/config/serverinfo.xml" -o cdt.txt \
+ "$SCRIPTPATH/../caldavtest/tests/CalDAV/current-user-principal.xml"
+RESULT=$?
+
+tail "$/../../../../../data-autotest/owncloud.log"
+
+exit $RESULT
diff --git a/apps/dav/tests/travis/caldavtest/tests/CalDAV/current-user-principal.xml b/apps/dav/tests/travis/caldavtest/tests/CalDAV/current-user-principal.xml
new file mode 100644
index 00000000000..d01058fee0a
--- /dev/null
+++ b/apps/dav/tests/travis/caldavtest/tests/CalDAV/current-user-principal.xml
@@ -0,0 +1,151 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2015 Apple Inc. All rights reserved.
+
+ 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.
+ -->
+
+<caldavtest>
+ <description>Test DAV:current-user-principal support</description>
+
+ <require-feature>
+ <feature>caldav</feature>
+ <feature>current-user-principal</feature>
+ </require-feature>
+
+ <start/>
+
+ <test-suite name='Check for the property on /'>
+ <require-feature>
+ <feature>own-root</feature>
+ </require-feature>
+ <test name='1'>
+ <description>Check for authenticated property on /</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$root:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/current-user-principal/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value><![CDATA[{DAV:}current-user-principal$<href xmlns="DAV:">$principaluri1:</href>]]></value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>Check for authenticated property on / (user02)</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>PROPFIND</method>
+ <ruri>$root:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/current-user-principal/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value><![CDATA[{DAV:}current-user-principal$<href xmlns="DAV:">$principaluri2:</href>]]></value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Check for the property on /principals/'>
+ <test name='1'>
+ <description>Check for authenticated property on /</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principalcollection:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/current-user-principal/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value><![CDATA[{DAV:}current-user-principal$<href xmlns="DAV:">$principaluri1:</href>]]></value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>Check for unauthenticated property on /</description>
+ <request auth="no">
+ <method>PROPFIND</method>
+ <ruri>$principals_users:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/current-user-principal/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>401</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>Check for authenticated property on / (user02)</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>PROPFIND</method>
+ <ruri>$principalcollection:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/current-user-principal/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value><![CDATA[{DAV:}current-user-principal$<href xmlns="DAV:">$principaluri2:</href>]]></value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <end/>
+</caldavtest>
diff --git a/apps/dav/tests/travis/caldavtest/tests/CalDAV/sync-report.xml b/apps/dav/tests/travis/caldavtest/tests/CalDAV/sync-report.xml
new file mode 100644
index 00000000000..c675af82065
--- /dev/null
+++ b/apps/dav/tests/travis/caldavtest/tests/CalDAV/sync-report.xml
@@ -0,0 +1,3512 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2015 Apple Inc. All rights reserved.
+
+ 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.
+ -->
+
+<caldavtest>
+ <require-feature>
+ <feature>caldav</feature>
+ <feature>sync-report</feature>
+ </require-feature>
+
+ <start>
+ <request end-delete="yes">
+ <method>MKCALENDAR</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ </request>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar1/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/1.txt</filepath>
+ </data>
+ </request>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar1/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/2.txt</filepath>
+ </data>
+ </request>
+ <request end-delete="yes">
+ <method>MKCALENDAR</method>
+ <ruri>$calendarhome1:/synccalendar2/</ruri>
+ </request>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar2/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/4.txt</filepath>
+ </data>
+ </request>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar2/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/5.txt</filepath>
+ </data>
+ </request>
+ </start>
+
+ <test-suite name='support-report-set/sync-token property'>
+ <test name='1'>
+ <description>Not on calendars</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$calendars:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}supported-report-set</value>
+ </arg>
+ <arg>
+ <name>badprops</name>
+ <value>{DAV:}sync-token</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>On calendar-home</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/1.xml</filepath>
+ </data>
+ <verify>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection</value>
+ <value>$verify-property-prefix:/{DAV:}sync-token[+data:,]</value>
+ </arg>
+ </verify>
+ <verify>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}supported-report-set</value>
+ <value>{DAV:}sync-token</value>
+ </arg>
+ </verify>
+ <verify>
+ <exclude-feature>
+ <feature>sync-report-home</feature>
+ </exclude-feature>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection</value>
+ </arg>
+ </verify>
+ <verify>
+ <exclude-feature>
+ <feature>sync-report-home</feature>
+ </exclude-feature>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}supported-report-set</value>
+ </arg>
+ <arg>
+ <name>badprops</name>
+ <value>{DAV:}sync-token</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>On calendar</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection</value>
+ <value>$verify-property-prefix:/{DAV:}sync-token[+data:,]</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}supported-report-set</value>
+ <value>{DAV:}sync-token</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>On inbox</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$inboxpath1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}supported-report-set</value>
+ <value>{DAV:}sync-token</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>Look for options header tag on principal</description>
+ <request>
+ <method>OPTIONS</method>
+ <ruri>$principal1:</ruri>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>header</name>
+ <value>*DAV$.*calendarserver-home-sync[^-]*</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='simple reports - sync-level'>
+ <test name='1'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>sync-level:1, depth:0</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/8.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar2/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>sync-level:1, depth:1</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/8.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar2/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>sync-level:1, depth:infinity</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/8.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar2/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>sync-level:infinity, depth:0</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/9.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar1/1.ics</value>
+ <value>synccalendar1/2.ics</value>
+ <value>synccalendar2/</value>
+ <value>synccalendar2/1.ics</value>
+ <value>synccalendar2/2.ics</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>sync-level:infinity, depth:1</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/9.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar1/1.ics</value>
+ <value>synccalendar1/2.ics</value>
+ <value>synccalendar2/</value>
+ <value>synccalendar2/1.ics</value>
+ <value>synccalendar2/2.ics</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>sync-level:infinity, depth:infinity</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/9.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar1/1.ics</value>
+ <value>synccalendar1/2.ics</value>
+ <value>synccalendar2/</value>
+ <value>synccalendar2/1.ics</value>
+ <value>synccalendar2/2.ics</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='7'>
+ <description>sync-level:1, depth:0</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/8.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='8'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>sync-level:1, depth:1</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/8.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='9'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>sync-level:1, depth:infinity</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/8.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='10'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>sync-level:infinity, depth:0</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/9.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='11'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>sync-level:infinity, depth:1</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/9.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='12'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>sync-level:infinity, depth:infinity</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/9.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='13'>
+ <description>Bad sync-level</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/10.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='simple reports - empty token - no props'>
+ <test name='1'>
+ <description>initial query - calendar collection depth:1</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>initial query - home depth:1</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar2/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>initial query - home depth:infinity</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar1/1.ics</value>
+ <value>synccalendar1/2.ics</value>
+ <value>synccalendar2/</value>
+ <value>synccalendar2/1.ics</value>
+ <value>synccalendar2/2.ics</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>add new resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar1/3.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/3.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <description>new resource - calendar collection depth:1</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ <value>3.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>new resource - home depth:1</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar2/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='7'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>new resource - home depth:infinity</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar1/1.ics</value>
+ <value>synccalendar1/2.ics</value>
+ <value>synccalendar1/3.ics</value>
+ <value>synccalendar2/</value>
+ <value>synccalendar2/1.ics</value>
+ <value>synccalendar2/2.ics</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='8'>
+ <description>remove new resource</description>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar1/3.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='9'>
+ <description>remove new resource - calendar collection depth:1</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='10'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>remove new resource - home depth:1</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar2/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='11'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>remove new resource - home depth:infinity</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar1/1.ics</value>
+ <value>synccalendar1/2.ics</value>
+ <value>synccalendar2/</value>
+ <value>synccalendar2/1.ics</value>
+ <value>synccalendar2/2.ics</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='12'>
+ <description>changed resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar1/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/1.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='13'>
+ <description>changed resource - calendar collection depth:1</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='14'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>changed resource - home depth:1</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar2/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='15'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <description>changed resource - home depth:infinity</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar1/</value>
+ <value>synccalendar1/1.ics</value>
+ <value>synccalendar1/2.ics</value>
+ <value>synccalendar2/</value>
+ <value>synccalendar2/1.ics</value>
+ <value>synccalendar2/2.ics</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='simple reports - diff token - no props - calendar depth:1'>
+ <test name='1'>
+ <description>initial query - grab token</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2'>
+ <description>new resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar1/3.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/3.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>3.ics</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='3'>
+ <description>remove resource (treated as new)</description>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar1/3.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>badhrefs</name>
+ <value>3.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>remove resource (treated as old)</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>badhrefs</name>
+ <value>3.ics</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='5'>
+ <description>changed resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar1/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/1.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>1.ics</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='6'>
+ <description>no change</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='simple reports - empty token - props'>
+ <test name='1'>
+ <description>initial query</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar2/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/5.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>new resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar2/3.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/6.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar2/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/5.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ <value>3.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>remove resource new resource</description>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar2/3.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar2/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/5.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>changed resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar2/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/4.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar2/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/5.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='simple reports - diff token - props'>
+ <test name='1'>
+ <description>initial query - grab token</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar2/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/5.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ <value>1.ics</value>
+ <value>2.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2'>
+ <description>new resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar2/3.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/6.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar2/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>3.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='3'>
+ <description>remove resource (treated as new)</description>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar2/3.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar2/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>badhrefs</name>
+ <value>3.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>remove resource (treated as old)</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar2/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/7.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>badhrefs</name>
+ <value>3.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='5'>
+ <description>changed resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar2/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/4.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar2/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>1.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='6'>
+ <description>no change</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/synccalendar2/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='simple reports - diff token - no props - home depth:infinity'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <test name='1'>
+ <description>Initialize</description>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ </request>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar2/</ruri>
+ </request>
+ <request end-delete="yes">
+ <method>MKCALENDAR</method>
+ <ruri>$calendarhome1:/synccalendar3/</ruri>
+ </request>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar3/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/7.txt</filepath>
+ </data>
+ </request>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar3/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/8.txt</filepath>
+ </data>
+ </request>
+ <request end-delete="yes">
+ <method>MKCALENDAR</method>
+ <ruri>$calendarhome1:/synccalendar4/</ruri>
+ </request>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar4/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/10.txt</filepath>
+ </data>
+ </request>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar4/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/11.txt</filepath>
+ </data>
+ </request>
+ </test>
+ <test name='2'>
+ <description>initial query - grab token</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar3/</value>
+ <value>synccalendar3/1.ics</value>
+ <value>synccalendar3/2.ics</value>
+ <value>synccalendar4/</value>
+ <value>synccalendar4/1.ics</value>
+ <value>synccalendar4/2.ics</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='3'>
+ <description>new resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar3/3.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/9.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ <value>synccalendar3/3.ics</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='4'>
+ <description>remove resource (treated as new)</description>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar3/3.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>synccalendar3/3.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <description>remove resource (treated as old)</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>synccalendar3/3.ics</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='6'>
+ <description>changed resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar3/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/7.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ <value>synccalendar3/1.ics</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='7'>
+ <description>no change</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='simple reports - diff token - props - home depth:infinity'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <test name='1'>
+ <description>initial query - grab token</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/5.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar3/</value>
+ <value>synccalendar3/1.ics</value>
+ <value>synccalendar3/2.ics</value>
+ <value>synccalendar4/</value>
+ <value>synccalendar4/1.ics</value>
+ <value>synccalendar4/2.ics</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>ignore</name>
+ <value>$calendarhome1:/$outbox:/</value>
+ <value>$calendarhome1:/$freebusy:</value>
+ <value>$calendarhome1:/$notification:/</value>
+ <value>$calendarhome1:/$dropbox:/</value>
+ </arg>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2'>
+ <description>new resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar4/3.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/12.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar4/</value>
+ <value>synccalendar4/3.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='3'>
+ <description>remove resource (treated as new)</description>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar4/3.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar4/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>synccalendar4/3.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>remove resource (treated as old)</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/7.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar4/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>synccalendar4/3.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>count</name>
+ <value>2</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='5'>
+ <description>changed resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar4/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/10.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar4/</value>
+ <value>synccalendar4/1.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='6'>
+ <description>no change</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='simple reports - diff token - delete/create calendar - home depth:infinity'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <test name='1'>
+ <description>initial query - grab token</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar3/</value>
+ <value>synccalendar3/1.ics</value>
+ <value>synccalendar3/2.ics</value>
+ <value>synccalendar4/</value>
+ <value>synccalendar4/1.ics</value>
+ <value>synccalendar4/2.ics</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2'>
+ <description>remove resource then calendar</description>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar3/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar3/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>badhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='3'>
+ <description>add calendar - test last sync</description>
+ <request>
+ <method>MKCALENDAR</method>
+ <ruri>$calendarhome1:/synccalendar3/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>add calendar - test previous sync</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='simple reports - diff token - no props - home depth:1'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <test name='1'>
+ <description>Initialize</description>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar1/</ruri>
+ </request>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar2/</ruri>
+ </request>
+ <request end-delete="yes">
+ <method>MKCALENDAR</method>
+ <ruri>$calendarhome1:/synccalendar3/</ruri>
+ </request>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar3/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/7.txt</filepath>
+ </data>
+ </request>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar3/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/8.txt</filepath>
+ </data>
+ </request>
+ <request end-delete="yes">
+ <method>MKCALENDAR</method>
+ <ruri>$calendarhome1:/synccalendar4/</ruri>
+ </request>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar4/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/10.txt</filepath>
+ </data>
+ </request>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar4/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/11.txt</filepath>
+ </data>
+ </request>
+ </test>
+ <test name='2'>
+ <description>initial query - grab token</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/8.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar3/</value>
+ <value>synccalendar4/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='3'>
+ <description>new resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar3/3.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/9.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/12.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='4'>
+ <description>remove resource (treated as new)</description>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar3/3.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/12.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <description>remove resource (treated as old)</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/13.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='6'>
+ <description>changed resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar3/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/7.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/12.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='7'>
+ <description>no change</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/12.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='simple reports - diff token - props - home depth:1'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <test name='1'>
+ <description>initial query - grab token</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/14.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar3/</value>
+ <value>synccalendar4/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>ignore</name>
+ <value>$calendarhome1:/$outbox:/</value>
+ <value>$calendarhome1:/$freebusy:</value>
+ <value>$calendarhome1:/$notification:/</value>
+ <value>$calendarhome1:/$dropbox:/</value>
+ </arg>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2'>
+ <description>new resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar4/3.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/12.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/15.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar4/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='3'>
+ <description>remove resource (treated as new)</description>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar4/3.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/15.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar4/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>remove resource (treated as old)</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/16.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar4/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>count</name>
+ <value>1</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='5'>
+ <description>changed resource</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarhome1:/synccalendar4/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/put/10.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/15.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar4/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='6'>
+ <description>no change</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/15.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ </verify>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}getcontenttype</value>
+ <value>{DAV:}getetag</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='simple reports - diff token - delete/create calendar - home depth:1'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <test name='1'>
+ <description>initial query - grab token</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/8.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar3/</value>
+ <value>synccalendar4/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2'>
+ <description>remove resource then calendar</description>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar3/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>DELETE</method>
+ <ruri>$calendarhome1:/synccalendar3/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/12.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>badhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='3'>
+ <description>add calendar - test last sync</description>
+ <request>
+ <method>MKCALENDAR</method>
+ <ruri>$calendarhome1:/synccalendar3/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/13.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>add calendar - test previous sync</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/12.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='simple reports - empty inbox'>
+ <test name='1'>
+ <description>initial query</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$inboxpath1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_sync_extra_items:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='simple reports - valid token'>
+ <test name='1'>
+ <description>initial query</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarpath1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/11.xml</filepath>
+ </data>
+ <verify>
+ <callback>prepostcondition</callback>
+ <arg>
+ <name>error</name>
+ <value>{DAV:}valid-sync-token</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='calendar webdav property change - home depth:infinity'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <test name='1'>
+ <description>initial query - grab token</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar3/</value>
+ <value>synccalendar4/</value>
+ <value>synccalendar4/1.ics</value>
+ <value>synccalendar4/2.ics</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2'>
+ <description>Change a property</description>
+ <request>
+ <method>PROPPATCH</method>
+ <ruri>$calendarhome1:/synccalendar3/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/17.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:]</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='3'>
+ <description>Remove a property</description>
+ <request>
+ <method>PROPPATCH</method>
+ <ruri>$calendarhome1:/synccalendar3/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/18.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:]</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='calendar webdav property change - home depth:1'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <test name='1'>
+ <description>initial query - grab token</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/8.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar3/</value>
+ <value>synccalendar4/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2'>
+ <description>Change a property</description>
+ <request>
+ <method>PROPPATCH</method>
+ <ruri>$calendarhome1:/synccalendar3/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/17.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/12.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:]</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='3'>
+ <description>Remove a property</description>
+ <request>
+ <method>PROPPATCH</method>
+ <ruri>$calendarhome1:/synccalendar3/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/18.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/12.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>synccalendar3/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:]</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ </test-suite>
+
+
+ <test-suite name='default calendar property change - home depth:1'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <test name='1'>
+ <description>initial query - grab token</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/8.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar3/</value>
+ <value>synccalendar4/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2'>
+ <description>Change property on Inbox</description>
+ <request>
+ <method>PROPPATCH</method>
+ <ruri>$inboxpath1:/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/19.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL</value>
+ </arg>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/12.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$inbox:/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:]</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='3'>
+ <description>Reset the property</description>
+ <request>
+ <method>PROPPATCH</method>
+ <ruri>$inboxpath1:/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/20.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL</value>
+ </arg>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/12.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$inbox:/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:]</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ </test-suite>
+
+
+ <test-suite name='schedule-calendar-transp in response - home depth:1'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <test name='1'>
+ <description>initial query - grab token</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/22.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar_home_items_initial_sync:</value>
+ <value>synccalendar3/</value>
+ <value>synccalendar4/</value>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$dropbox:/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>dataString</callback>
+ <arg>
+ <name>contains</name>
+ <value>opaque</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2'>
+ <description>Change property on calendar</description>
+ <request>
+ <method>PROPPATCH</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPPATCH/calendar-transp-transparent.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp</value>
+ </arg>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/23.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar:/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:]</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>dataString</callback>
+ <arg>
+ <name>contains</name>
+ <value>transparent</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='3'>
+ <description>Reset the property</description>
+ <request>
+ <method>PROPPATCH</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPPATCH/calendar-transp-opaque.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp</value>
+ </arg>
+ </verify>
+ </request>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/23.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>okhrefs</name>
+ <value>$calendar:/</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:]</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>dataString</callback>
+ <arg>
+ <name>contains</name>
+ <value>opaque</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>/{DAV:}multistatus/{DAV:}sync-token</name>
+ <variable>$synctoken1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ </test-suite>
+
+
+
+ <test-suite name='Prefer:return=minimal - home depth:1'>
+ <require-feature>
+ <feature>sync-report-home</feature>
+ </require-feature>
+ <test name='1'>
+ <description>initial query - no minimal</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/24.xml</filepath>
+ </data>
+ <verify>
+ <callback>dataString</callback>
+ <arg>
+ <name>contains</name>
+ <value>foobar</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>initial query - with minimal</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>infinity</value>
+ </header>
+ <header>
+ <name>Prefer</name>
+ <value>return=minimal</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/24.xml</filepath>
+ </data>
+ <verify>
+ <callback>dataString</callback>
+ <arg>
+ <name>notcontains</name>
+ <value>foobar</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+
+ <test-suite name='limited reports'>
+ <test name='1'>
+ <exclude-feature>
+ <feature>sync-report-limit</feature>
+ </exclude-feature>
+ <description>Limit not allowed</description>
+ <request>
+ <method>REPORT</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/reports/sync/21.xml</filepath>
+ </data>
+ <verify>
+ <callback>prepostcondition</callback>
+ <arg>
+ <name>error</name>
+ <value>{DAV:}number-of-matches-within-limits</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <end/>
+
+</caldavtest>
diff --git a/apps/dav/tests/travis/carddav/install.sh b/apps/dav/tests/travis/carddav/install.sh
new file mode 100644
index 00000000000..fa5d141ce0d
--- /dev/null
+++ b/apps/dav/tests/travis/carddav/install.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+SCRIPT=`realpath $0`
+SCRIPTPATH=`dirname $SCRIPT`
+
+
+if [ ! -f CalDAVTester/run.py ]; then
+ cd "$SCRIPTPATH"
+ git clone https://github.com/DeepDiver1975/CalDAVTester.git
+ cd "$SCRIPTPATH/CalDAVTester"
+ python run.py -s
+ cd "$SCRIPTPATH"
+fi
+
+# create test user
+cd "$SCRIPTPATH/../../../../../"
+OC_PASS=user01 php occ user:add --password-from-env user01
+php occ dav:create-addressbook user01 addressbook
+OC_PASS=user02 php occ user:add --password-from-env user02
+php occ dav:create-addressbook user02 addressbook
+cd "$SCRIPTPATH/../../../../../"
diff --git a/apps/dav/tests/travis/carddav/script.sh b/apps/dav/tests/travis/carddav/script.sh
new file mode 100644
index 00000000000..46a6a98e273
--- /dev/null
+++ b/apps/dav/tests/travis/carddav/script.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+SCRIPT=`realpath $0`
+SCRIPTPATH=`dirname $SCRIPT`
+
+# start the server
+php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." &
+
+sleep 30
+
+# run the tests
+cd "$SCRIPTPATH/CalDAVTester"
+PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail -s "$SCRIPTPATH/../caldavtest/config/serverinfo.xml" -o cdt.txt \
+ "$SCRIPTPATH/../caldavtest/tests/CardDAV/current-user-principal.xml" \
+ "$SCRIPTPATH/../caldavtest/tests/CardDAV/sync-report.xml"
+RESULT=$?
+
+tail "$/../../../../../data-autotest/owncloud.log"
+
+exit $RESULT
diff --git a/apps/dav/tests/travis/carddavtester.sh b/apps/dav/tests/travis/carddavtester.sh
deleted file mode 100644
index 17f7e8eb4a8..00000000000
--- a/apps/dav/tests/travis/carddavtester.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env bash
-SCRIPT=`realpath $0`
-SCRIPTPATH=`dirname $SCRIPT`
-
-
-# start the server
-php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../.." &
-
-
-if [ ! -f CalDAVTester/run.py ]; then
- cd "$SCRIPTPATH"
- git clone https://github.com/DeepDiver1975/CalDAVTester.git
- cd "$SCRIPTPATH/CalDAVTester"
- python run.py -s
- cd "$SCRIPTPATH"
-fi
-
-# create test user
-cd "$SCRIPTPATH/../../../../"
-OC_PASS=user01 php occ user:add --password-from-env user01
-php occ dav:create-addressbook user01 addressbook
-OC_PASS=user02 php occ user:add --password-from-env user02
-php occ dav:create-addressbook user02 addressbook
-cd "$SCRIPTPATH/../../../../"
-
-# run the tests
-cd "$SCRIPTPATH/CalDAVTester"
-PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail -s "$SCRIPTPATH/caldavtest/config/serverinfo.xml" -o cdt.txt \
- "$SCRIPTPATH/caldavtest/tests/CardDAV/current-user-principal.xml" \
- "$SCRIPTPATH/caldavtest/tests/CardDAV/sync-report.xml"
-RESULT=$?
-
-tail "$SCRIPTPATH/../../../../data-autotest/owncloud.log"
-
-exit $RESULT
diff --git a/apps/dav/tests/travis/litmus-v1.sh b/apps/dav/tests/travis/litmus-v1/install.sh
index ab0690f392e..0ee2cb08d82 100644
--- a/apps/dav/tests/travis/litmus-v1.sh
+++ b/apps/dav/tests/travis/litmus-v1/install.sh
@@ -1,11 +1,4 @@
#!/usr/bin/env bash
-SCRIPT=`realpath $0`
-SCRIPTPATH=`dirname $SCRIPT`
-
-
-# start the server
-php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../.." &
-
# compile litmus
if [ ! -f /tmp/litmus/litmus-0.13.tar.gz ]; then
@@ -17,7 +10,3 @@ if [ ! -f /tmp/litmus/litmus-0.13.tar.gz ]; then
./configure
make
fi
-
-# run the tests
-cd /tmp/litmus/litmus-0.13
-make URL=http://127.0.0.1:8888/remote.php/webdav CREDS="admin admin" TESTS="basic copymove props locks" check
diff --git a/apps/dav/tests/travis/litmus-v1/script.sh b/apps/dav/tests/travis/litmus-v1/script.sh
new file mode 100644
index 00000000000..cba305683b2
--- /dev/null
+++ b/apps/dav/tests/travis/litmus-v1/script.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+SCRIPT=`realpath $0`
+SCRIPTPATH=`dirname $SCRIPT`
+
+
+# start the server
+php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." &
+
+sleep 30
+
+# run the tests
+cd /tmp/litmus/litmus-0.13
+make URL=http://127.0.0.1:8888/remote.php/webdav CREDS="admin admin" TESTS="basic copymove props locks" check
diff --git a/apps/dav/tests/travis/litmus-v2.sh b/apps/dav/tests/travis/litmus-v2/install.sh
index 892ad327d3b..0ee2cb08d82 100644
--- a/apps/dav/tests/travis/litmus-v2.sh
+++ b/apps/dav/tests/travis/litmus-v2/install.sh
@@ -1,11 +1,4 @@
#!/usr/bin/env bash
-SCRIPT=`realpath $0`
-SCRIPTPATH=`dirname $SCRIPT`
-
-
-# start the server
-php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../.." &
-
# compile litmus
if [ ! -f /tmp/litmus/litmus-0.13.tar.gz ]; then
@@ -17,7 +10,3 @@ if [ ! -f /tmp/litmus/litmus-0.13.tar.gz ]; then
./configure
make
fi
-
-# run the tests
-cd /tmp/litmus/litmus-0.13
-make URL=http://127.0.0.1:8888/remote.php/dav/files/admin CREDS="admin admin" TESTS="basic copymove props locks" check
diff --git a/apps/dav/tests/travis/litmus-v2/script.sh b/apps/dav/tests/travis/litmus-v2/script.sh
new file mode 100644
index 00000000000..966ed5a2052
--- /dev/null
+++ b/apps/dav/tests/travis/litmus-v2/script.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+SCRIPT=`realpath $0`
+SCRIPTPATH=`dirname $SCRIPT`
+
+
+# start the server
+php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." &
+
+sleep 30
+
+# run the tests
+cd /tmp/litmus/litmus-0.13
+make URL=http://127.0.0.1:8888/remote.php/dav/files/admin CREDS="admin admin" TESTS="basic copymove props locks" check
diff --git a/apps/dav/tests/unit/carddav/addressbookimpltest.php b/apps/dav/tests/unit/carddav/addressbookimpltest.php
new file mode 100644
index 00000000000..73053888b9d
--- /dev/null
+++ b/apps/dav/tests/unit/carddav/addressbookimpltest.php
@@ -0,0 +1,287 @@
+<?php
+/**
+ * @author Björn Schießle <schiessle@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+
+namespace OCA\DAV\Tests\Unit\CardDAV;
+
+
+use OCA\DAV\CardDAV\AddressBook;
+use OCA\DAV\CardDAV\AddressBookImpl;
+use OCA\DAV\CardDAV\CardDavBackend;
+use Sabre\VObject\Component\VCard;
+use Sabre\VObject\Property\Text;
+use Test\TestCase;
+
+class AddressBookImplTest extends TestCase {
+
+ /** @var AddressBookImpl */
+ private $addressBookImpl;
+
+ /** @var array */
+ private $addressBookInfo;
+
+ /** @var AddressBook | \PHPUnit_Framework_MockObject_MockObject */
+ private $addressBook;
+
+ /** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject */
+ private $backend;
+
+ /** @var VCard | \PHPUnit_Framework_MockObject_MockObject */
+ private $vCard;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->addressBookInfo = [
+ 'id' => 42,
+ '{DAV:}displayname' => 'display name'
+ ];
+ $this->addressBook = $this->getMockBuilder('OCA\DAV\CardDAV\AddressBook')
+ ->disableOriginalConstructor()->getMock();
+ $this->backend = $this->getMockBuilder('\OCA\DAV\CardDAV\CardDavBackend')
+ ->disableOriginalConstructor()->getMock();
+ $this->vCard = $this->getMock('Sabre\VObject\Component\VCard');
+
+ $this->addressBookImpl = new AddressBookImpl(
+ $this->addressBook,
+ $this->addressBookInfo,
+ $this->backend
+ );
+ }
+
+ public function testGetKey() {
+ $this->assertSame($this->addressBookInfo['id'],
+ $this->addressBookImpl->getKey());
+ }
+
+ public function testGetDisplayName() {
+ $this->assertSame($this->addressBookInfo['{DAV:}displayname'],
+ $this->addressBookImpl->getDisplayName());
+ }
+
+ public function testSearch() {
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | AddressBookImpl $addressBookImpl */
+ $addressBookImpl = $this->getMockBuilder('OCA\DAV\CardDAV\AddressBookImpl')
+ ->setConstructorArgs(
+ [
+ $this->addressBook,
+ $this->addressBookInfo,
+ $this->backend
+ ]
+ )
+ ->setMethods(['vCard2Array', 'readCard'])
+ ->getMock();
+
+ $pattern = 'pattern';
+ $searchProperties = 'properties';
+
+ $this->backend->expects($this->once())->method('search')
+ ->with($this->addressBookInfo['id'], $pattern, $searchProperties)
+ ->willReturn(
+ [
+ 'cardData1',
+ 'cardData2'
+ ]
+ );
+
+ $addressBookImpl->expects($this->exactly(2))->method('readCard')
+ ->willReturn($this->vCard);
+ $addressBookImpl->expects($this->exactly(2))->method('vCard2Array')
+ ->with($this->vCard)->willReturn('vCard');
+
+ $result = $addressBookImpl->search($pattern, $searchProperties, []);
+ $this->assertTrue((is_array($result)));
+ $this->assertSame(2, count($result));
+ }
+
+ /**
+ * @dataProvider dataTestCreate
+ *
+ * @param array $properties
+ */
+ public function testCreate($properties) {
+
+ $uid = 'uid';
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | AddressBookImpl $addressBookImpl */
+ $addressBookImpl = $this->getMockBuilder('OCA\DAV\CardDAV\AddressBookImpl')
+ ->setConstructorArgs(
+ [
+ $this->addressBook,
+ $this->addressBookInfo,
+ $this->backend
+ ]
+ )
+ ->setMethods(['vCard2Array', 'createUid', 'createEmptyVCard'])
+ ->getMock();
+
+ $addressBookImpl->expects($this->once())->method('createUid')
+ ->willReturn($uid);
+ $addressBookImpl->expects($this->once())->method('createEmptyVCard')
+ ->with($uid)->willReturn($this->vCard);
+ $this->vCard->expects($this->exactly(count($properties)))
+ ->method('createProperty');
+ $this->backend->expects($this->once())->method('createCard');
+ $this->backend->expects($this->never())->method('updateCard');
+ $this->backend->expects($this->never())->method('getCard');
+ $addressBookImpl->expects($this->once())->method('vCard2Array')
+ ->with($this->vCard)->willReturn(true);
+
+ $this->assertTrue($addressBookImpl->createOrUpdate($properties));
+ }
+
+ public function dataTestCreate() {
+ return [
+ [[]],
+ [['FN' => 'John Doe']]
+ ];
+ }
+
+ public function testUpdate() {
+
+ $uid = 'uid';
+ $properties = ['UID' => $uid, 'FN' => 'John Doe'];
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | AddressBookImpl $addressBookImpl */
+ $addressBookImpl = $this->getMockBuilder('OCA\DAV\CardDAV\AddressBookImpl')
+ ->setConstructorArgs(
+ [
+ $this->addressBook,
+ $this->addressBookInfo,
+ $this->backend
+ ]
+ )
+ ->setMethods(['vCard2Array', 'createUid', 'createEmptyVCard', 'readCard'])
+ ->getMock();
+
+ $addressBookImpl->expects($this->never())->method('createUid');
+ $addressBookImpl->expects($this->never())->method('createEmptyVCard');
+ $this->backend->expects($this->once())->method('getCard')
+ ->with($this->addressBookInfo['id'], $uid . '.vcf')
+ ->willReturn(['carddata' => 'data']);
+ $addressBookImpl->expects($this->once())->method('readCard')
+ ->with('data')->willReturn($this->vCard);
+ $this->vCard->expects($this->exactly(count($properties)))
+ ->method('createProperty');
+ $this->backend->expects($this->never())->method('createCard');
+ $this->backend->expects($this->once())->method('updateCard');
+ $addressBookImpl->expects($this->once())->method('vCard2Array')
+ ->with($this->vCard)->willReturn(true);
+
+ $this->assertTrue($addressBookImpl->createOrUpdate($properties));
+ }
+
+ /**
+ * @dataProvider dataTestGetPermissions
+ *
+ * @param array $permissions
+ * @param int $expected
+ */
+ public function testGetPermissions($permissions, $expected) {
+ $this->addressBook->expects($this->once())->method('getACL')
+ ->willReturn($permissions);
+
+ $this->assertSame($expected,
+ $this->addressBookImpl->getPermissions()
+ );
+ }
+
+ public function dataTestGetPermissions() {
+ return [
+ [[], 0],
+ [[['privilege' => '{DAV:}read']], 1],
+ [[['privilege' => '{DAV:}write']], 6],
+ [[['privilege' => '{DAV:}all']], 31],
+ [[['privilege' => '{DAV:}read'],['privilege' => '{DAV:}write']], 7],
+ [[['privilege' => '{DAV:}read'],['privilege' => '{DAV:}all']], 31],
+ [[['privilege' => '{DAV:}all'],['privilege' => '{DAV:}write']], 31],
+ [[['privilege' => '{DAV:}read'],['privilege' => '{DAV:}write'],['privilege' => '{DAV:}all']], 31],
+ [[['privilege' => '{DAV:}all'],['privilege' => '{DAV:}read'],['privilege' => '{DAV:}write']], 31],
+ ];
+ }
+
+ public function testDelete() {
+ $cardId = 1;
+ $cardUri = 'cardUri';
+ $this->backend->expects($this->once())->method('getCardUri')
+ ->with($cardId)->willReturn($cardUri);
+ $this->backend->expects($this->once())->method('deleteCard')
+ ->with($this->addressBookInfo['id'], $cardUri)
+ ->willReturn(true);
+
+ $this->assertTrue($this->addressBookImpl->delete($cardId));
+ }
+
+ public function testReadCard() {
+ $vCard = new VCard();
+ $vCard->add(new Text($vCard, 'UID', 'uid'));
+ $vCardSerialized = $vCard->serialize();
+
+ $result = $this->invokePrivate($this->addressBookImpl, 'readCard', [$vCardSerialized]);
+ $resultSerialized = $result->serialize();
+
+ $this->assertSame($vCardSerialized, $resultSerialized);
+ }
+
+ public function testCreateUid() {
+ /** @var \PHPUnit_Framework_MockObject_MockObject | AddressBookImpl $addressBookImpl */
+ $addressBookImpl = $this->getMockBuilder('OCA\DAV\CardDAV\AddressBookImpl')
+ ->setConstructorArgs(
+ [
+ $this->addressBook,
+ $this->addressBookInfo,
+ $this->backend
+ ]
+ )
+ ->setMethods(['getUid'])
+ ->getMock();
+
+ $addressBookImpl->expects($this->at(0))->method('getUid')->willReturn('uid0');
+ $addressBookImpl->expects($this->at(1))->method('getUid')->willReturn('uid1');
+
+ // simulate that 'uid0' already exists, so the second uid will be returned
+ $this->backend->expects($this->exactly(2))->method('getContact')
+ ->willReturnCallback(
+ function($uid) {
+ return ($uid === 'uid0.vcf');
+ }
+ );
+
+ $this->assertSame('uid1',
+ $this->invokePrivate($addressBookImpl, 'createUid', [])
+ );
+
+ }
+
+ public function testCreateEmptyVCard() {
+ $uid = 'uid';
+ $expectedVCard = new VCard();
+ $expectedVCard->add(new Text($expectedVCard, 'UID', $uid));
+ $expectedVCardSerialized = $expectedVCard->serialize();
+
+ $result = $this->invokePrivate($this->addressBookImpl, 'createEmptyVCard', [$uid]);
+ $resultSerialized = $result->serialize();
+
+ $this->assertSame($expectedVCardSerialized, $resultSerialized);
+ }
+
+}
diff --git a/apps/dav/tests/unit/carddav/carddavbackendtest.php b/apps/dav/tests/unit/carddav/carddavbackendtest.php
index dd5e205242a..fe01aa65cca 100644
--- a/apps/dav/tests/unit/carddav/carddavbackendtest.php
+++ b/apps/dav/tests/unit/carddav/carddavbackendtest.php
@@ -20,8 +20,14 @@
*/
namespace OCA\DAV\Tests\Unit\CardDAV;
+use InvalidArgumentException;
use OCA\DAV\CardDAV\CardDavBackend;
+use OCA\DAV\Connector\Sabre\Principal;
+use OCP\IDBConnection;
+use OCP\ILogger;
use Sabre\DAV\PropPatch;
+use Sabre\VObject\Component\VCard;
+use Sabre\VObject\Property\Text;
use Test\TestCase;
/**
@@ -36,22 +42,46 @@ class CardDavBackendTest extends TestCase {
/** @var CardDavBackend */
private $backend;
+ /** @var Principal | \PHPUnit_Framework_MockObject_MockObject */
+ private $principal;
+
+ /** @var ILogger | \PHPUnit_Framework_MockObject_MockObject */
+ private $logger;
+
+ /** @var IDBConnection */
+ private $db;
+
+ /** @var string */
+ private $dbCardsTable = 'cards';
+
+ /** @var string */
+ private $dbCardsPropertiesTable = 'cards_properties';
+
const UNIT_TEST_USER = 'carddav-unit-test';
public function setUp() {
parent::setUp();
- $principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal')
+ $this->principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal')
->disableOriginalConstructor()
->setMethods(['getPrincipalByPath'])
->getMock();
- $principal->method('getPrincipalByPath')
+ $this->principal->method('getPrincipalByPath')
->willReturn([
'uri' => 'principals/best-friend'
]);
+ $this->logger = $this->getMock('\OCP\ILogger');
+
+ $this->db = \OC::$server->getDatabaseConnection();
+
+ $this->backend = new CardDavBackend($this->db, $this->principal, $this->logger);
+
+ // start every test with a empty cards_properties and cards table
+ $query = $this->db->getQueryBuilder();
+ $query->delete('cards_properties')->execute();
+ $query = $this->db->getQueryBuilder();
+ $query->delete('cards')->execute();
- $db = \OC::$server->getDatabaseConnection();
- $this->backend = new CardDavBackend($db, $principal);
$this->tearDown();
}
@@ -96,23 +126,32 @@ class CardDavBackendTest extends TestCase {
}
public function testCardOperations() {
+
+ /** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject $backend */
+ $backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend')
+ ->setConstructorArgs([$this->db, $this->principal, $this->logger])
+ ->setMethods(['updateProperties', 'purgeProperties'])->getMock();
+
// create a new address book
- $this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []);
- $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER);
+ $backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []);
+ $books = $backend->getAddressBooksForUser(self::UNIT_TEST_USER);
$this->assertEquals(1, count($books));
$bookId = $books[0]['id'];
- // create a card
$uri = $this->getUniqueID('card');
- $this->backend->createCard($bookId, $uri, '');
+ // updateProperties is expected twice, once for createCard and once for updateCard
+ $backend->expects($this->at(0))->method('updateProperties')->with($bookId, $uri, '');
+ $backend->expects($this->at(1))->method('updateProperties')->with($bookId, $uri, '***');
+ // create a card
+ $backend->createCard($bookId, $uri, '');
// get all the cards
- $cards = $this->backend->getCards($bookId);
+ $cards = $backend->getCards($bookId);
$this->assertEquals(1, count($cards));
$this->assertEquals('', $cards[0]['carddata']);
// get the cards
- $card = $this->backend->getCard($bookId, $uri);
+ $card = $backend->getCard($bookId, $uri);
$this->assertNotNull($card);
$this->assertArrayHasKey('id', $card);
$this->assertArrayHasKey('uri', $card);
@@ -122,17 +161,23 @@ class CardDavBackendTest extends TestCase {
$this->assertEquals('', $card['carddata']);
// update the card
- $this->backend->updateCard($bookId, $uri, '***');
- $card = $this->backend->getCard($bookId, $uri);
+ $backend->updateCard($bookId, $uri, '***');
+ $card = $backend->getCard($bookId, $uri);
$this->assertEquals('***', $card['carddata']);
// delete the card
- $this->backend->deleteCard($bookId, $uri);
- $cards = $this->backend->getCards($bookId);
+ $backend->expects($this->once())->method('purgeProperties')->with($bookId, $card['id']);
+ $backend->deleteCard($bookId, $uri);
+ $cards = $backend->getCards($bookId);
$this->assertEquals(0, count($cards));
}
public function testMultiCard() {
+
+ $this->backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend')
+ ->setConstructorArgs([$this->db, $this->principal, $this->logger])
+ ->setMethods(['updateProperties'])->getMock();
+
// create a new address book
$this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []);
$books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER);
@@ -175,6 +220,11 @@ class CardDavBackendTest extends TestCase {
}
public function testSyncSupport() {
+
+ $this->backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend')
+ ->setConstructorArgs([$this->db, $this->principal, $this->logger])
+ ->setMethods(['updateProperties'])->getMock();
+
// create a new address book
$this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []);
$books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER);
@@ -213,7 +263,7 @@ class CardDavBackendTest extends TestCase {
$books = $this->backend->getAddressBooksForUser('principals/best-friend');
$this->assertEquals(1, count($books));
- $this->backend->updateShares('Example', [], [['href' => 'principal:principals/best-friend']]);
+ $this->backend->updateShares('Example', [], ['principal:principals/best-friend']);
$shares = $this->backend->getShares('Example');
$this->assertEquals(0, count($shares));
@@ -221,4 +271,273 @@ class CardDavBackendTest extends TestCase {
$books = $this->backend->getAddressBooksForUser('principals/best-friend');
$this->assertEquals(0, count($books));
}
+
+ public function testUpdateProperties() {
+
+ $bookId = 42;
+ $cardUri = 'card-uri';
+ $cardId = 2;
+
+ $backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend')
+ ->setConstructorArgs([$this->db, $this->principal, $this->logger])
+ ->setMethods(['getCardId'])->getMock();
+
+ $backend->expects($this->any())->method('getCardId')->willReturn($cardId);
+
+ // add properties for new vCard
+ $vCard = new VCard();
+ $vCard->add(new Text($vCard, 'UID', $cardUri));
+ $vCard->add(new Text($vCard, 'FN', 'John Doe'));
+ $this->invokePrivate($backend, 'updateProperties', [$bookId, $cardUri, $vCard->serialize()]);
+
+ $query = $this->db->getQueryBuilder();
+ $result = $query->select('*')->from('cards_properties')->execute()->fetchAll();
+
+ $this->assertSame(2, count($result));
+
+ $this->assertSame('UID', $result[0]['name']);
+ $this->assertSame($cardUri, $result[0]['value']);
+ $this->assertSame($bookId, (int)$result[0]['addressbookid']);
+ $this->assertSame($cardId, (int)$result[0]['cardid']);
+
+ $this->assertSame('FN', $result[1]['name']);
+ $this->assertSame('John Doe', $result[1]['value']);
+ $this->assertSame($bookId, (int)$result[1]['addressbookid']);
+ $this->assertSame($cardId, (int)$result[1]['cardid']);
+
+ // update properties for existing vCard
+ $vCard = new VCard();
+ $vCard->add(new Text($vCard, 'FN', 'John Doe'));
+ $this->invokePrivate($backend, 'updateProperties', [$bookId, $cardUri, $vCard->serialize()]);
+
+ $query = $this->db->getQueryBuilder();
+ $result = $query->select('*')->from('cards_properties')->execute()->fetchAll();
+
+ $this->assertSame(1, count($result));
+
+ $this->assertSame('FN', $result[0]['name']);
+ $this->assertSame('John Doe', $result[0]['value']);
+ $this->assertSame($bookId, (int)$result[0]['addressbookid']);
+ $this->assertSame($cardId, (int)$result[0]['cardid']);
+ }
+
+ public function testPurgeProperties() {
+
+ $query = $this->db->getQueryBuilder();
+ $query->insert('cards_properties')
+ ->values(
+ [
+ 'addressbookid' => $query->createNamedParameter(1),
+ 'cardid' => $query->createNamedParameter(1),
+ 'name' => $query->createNamedParameter('name1'),
+ 'value' => $query->createNamedParameter('value1'),
+ 'preferred' => $query->createNamedParameter(0)
+ ]
+ );
+ $query->execute();
+
+ $query = $this->db->getQueryBuilder();
+ $query->insert('cards_properties')
+ ->values(
+ [
+ 'addressbookid' => $query->createNamedParameter(1),
+ 'cardid' => $query->createNamedParameter(2),
+ 'name' => $query->createNamedParameter('name2'),
+ 'value' => $query->createNamedParameter('value2'),
+ 'preferred' => $query->createNamedParameter(0)
+ ]
+ );
+ $query->execute();
+
+ $this->invokePrivate($this->backend, 'purgeProperties', [1, 1]);
+
+ $query = $this->db->getQueryBuilder();
+ $result = $query->select('*')->from('cards_properties')->execute()->fetchAll();
+ $this->assertSame(1, count($result));
+ $this->assertSame(1 ,(int)$result[0]['addressbookid']);
+ $this->assertSame(2 ,(int)$result[0]['cardid']);
+
+ }
+
+ public function testGetCardId() {
+ $query = $this->db->getQueryBuilder();
+
+ $query->insert('cards')
+ ->values(
+ [
+ 'addressbookid' => $query->createNamedParameter(1),
+ 'carddata' => $query->createNamedParameter(''),
+ 'uri' => $query->createNamedParameter('uri'),
+ 'lastmodified' => $query->createNamedParameter(4738743),
+ 'etag' => $query->createNamedParameter('etag'),
+ 'size' => $query->createNamedParameter(120)
+ ]
+ );
+ $query->execute();
+ $id = $query->getLastInsertId();
+
+ $this->assertSame($id,
+ $this->invokePrivate($this->backend, 'getCardId', ['uri']));
+ }
+
+ /**
+ * @expectedException InvalidArgumentException
+ */
+ public function testGetCardIdFailed() {
+ $this->invokePrivate($this->backend, 'getCardId', ['uri']);
+ }
+
+ /**
+ * @dataProvider dataTestSearch
+ *
+ * @param string $pattern
+ * @param array $expected
+ */
+ public function testSearch($pattern, $properties, $expected) {
+ /** @var VCard $vCards */
+ $vCards = [];
+ $vCards[0] = new VCard();
+ $vCards[0]->add(new Text($vCards[0], 'UID', 'uid'));
+ $vCards[0]->add(new Text($vCards[0], 'FN', 'John Doe'));
+ $vCards[0]->add(new Text($vCards[0], 'CLOUD', 'john@owncloud.org'));
+ $vCards[1] = new VCard();
+ $vCards[1]->add(new Text($vCards[1], 'UID', 'uid'));
+ $vCards[1]->add(new Text($vCards[1], 'FN', 'John M. Doe'));
+
+ $vCardIds = [];
+ $query = $this->db->getQueryBuilder();
+ for($i=0; $i<2; $i++) {
+ $query->insert($this->dbCardsTable)
+ ->values(
+ [
+ 'addressbookid' => $query->createNamedParameter(0),
+ 'carddata' => $query->createNamedParameter($vCards[$i]->serialize(), \PDO::PARAM_LOB),
+ 'uri' => $query->createNamedParameter('uri' . $i),
+ 'lastmodified' => $query->createNamedParameter(time()),
+ 'etag' => $query->createNamedParameter('etag' . $i),
+ 'size' => $query->createNamedParameter(120),
+ ]
+ );
+ $query->execute();
+ $vCardIds[] = $query->getLastInsertId();
+ }
+
+ $query->insert($this->dbCardsPropertiesTable)
+ ->values(
+ [
+ 'addressbookid' => $query->createNamedParameter(0),
+ 'cardid' => $query->createNamedParameter($vCardIds[0]),
+ 'name' => $query->createNamedParameter('FN'),
+ 'value' => $query->createNamedParameter('John Doe'),
+ 'preferred' => $query->createNamedParameter(0)
+ ]
+ );
+ $query->execute();
+ $query->insert($this->dbCardsPropertiesTable)
+ ->values(
+ [
+ 'addressbookid' => $query->createNamedParameter(0),
+ 'cardid' => $query->createNamedParameter($vCardIds[0]),
+ 'name' => $query->createNamedParameter('CLOUD'),
+ 'value' => $query->createNamedParameter('John@owncloud.org'),
+ 'preferred' => $query->createNamedParameter(0)
+ ]
+ );
+ $query->execute();
+ $query->insert($this->dbCardsPropertiesTable)
+ ->values(
+ [
+ 'addressbookid' => $query->createNamedParameter(0),
+ 'cardid' => $query->createNamedParameter($vCardIds[1]),
+ 'name' => $query->createNamedParameter('FN'),
+ 'value' => $query->createNamedParameter('John M. Doe'),
+ 'preferred' => $query->createNamedParameter(0)
+ ]
+ );
+ $query->execute();
+
+ $result = $this->backend->search(0, $pattern, $properties);
+
+ // check result
+ $this->assertSame(count($expected), count($result));
+ $found = [];
+ foreach ($result as $r) {
+ foreach ($expected as $exp) {
+ if (strpos($r, $exp) > 0) {
+ $found[$exp] = true;
+ break;
+ }
+ }
+ }
+
+ $this->assertSame(count($expected), count($found));
+ }
+
+ public function dataTestSearch() {
+ return [
+ ['John', ['FN'], ['John Doe', 'John M. Doe']],
+ ['M. Doe', ['FN'], ['John M. Doe']],
+ ['Do', ['FN'], ['John Doe', 'John M. Doe']],
+ // check if duplicates are handled correctly
+ ['John', ['FN', 'CLOUD'], ['John Doe', 'John M. Doe']],
+ ];
+ }
+
+ public function testGetCardUri() {
+ $query = $this->db->getQueryBuilder();
+ $query->insert($this->dbCardsTable)
+ ->values(
+ [
+ 'addressbookid' => $query->createNamedParameter(1),
+ 'carddata' => $query->createNamedParameter('carddata', \PDO::PARAM_LOB),
+ 'uri' => $query->createNamedParameter('uri'),
+ 'lastmodified' => $query->createNamedParameter(5489543),
+ 'etag' => $query->createNamedParameter('etag'),
+ 'size' => $query->createNamedParameter(120),
+ ]
+ );
+ $query->execute();
+
+ $id = $query->getLastInsertId();
+
+ $this->assertSame('uri', $this->backend->getCardUri($id));
+ }
+
+ /**
+ * @expectedException InvalidArgumentException
+ */
+ public function testGetCardUriFailed() {
+ $this->backend->getCardUri(1);
+ }
+
+ public function testGetContact() {
+ $query = $this->db->getQueryBuilder();
+ for($i=0; $i<2; $i++) {
+ $query->insert($this->dbCardsTable)
+ ->values(
+ [
+ 'addressbookid' => $query->createNamedParameter($i),
+ 'carddata' => $query->createNamedParameter('carddata' . $i, \PDO::PARAM_LOB),
+ 'uri' => $query->createNamedParameter('uri' . $i),
+ 'lastmodified' => $query->createNamedParameter(5489543),
+ 'etag' => $query->createNamedParameter('etag' . $i),
+ 'size' => $query->createNamedParameter(120),
+ ]
+ );
+ $query->execute();
+ }
+
+ $result = $this->backend->getContact('uri0');
+ $this->assertSame(7, count($result));
+ $this->assertSame(0, (int)$result['addressbookid']);
+ $this->assertSame('uri0', $result['uri']);
+ $this->assertSame(5489543, (int)$result['lastmodified']);
+ $this->assertSame('etag0', $result['etag']);
+ $this->assertSame(120, (int)$result['size']);
+ }
+
+ public function testGetContactFail() {
+ $this->assertEmpty($this->backend->getContact('uri'));
+ }
+
}
diff --git a/apps/dav/tests/unit/carddav/sharing/plugintest.php b/apps/dav/tests/unit/carddav/sharing/plugintest.php
new file mode 100644
index 00000000000..e9532acbe3b
--- /dev/null
+++ b/apps/dav/tests/unit/carddav/sharing/plugintest.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\DAV\Tests\Unit\CardDAV;
+
+
+use OCA\DAV\CardDAV\Sharing\IShareableAddressBook;
+use OCA\DAV\CardDAV\Sharing\Plugin;
+use OCA\DAV\Connector\Sabre\Auth;
+use OCP\IRequest;
+use Sabre\DAV\Server;
+use Sabre\DAV\SimpleCollection;
+use Sabre\HTTP\Request;
+use Sabre\HTTP\Response;
+use Test\TestCase;
+
+class PluginTest extends TestCase {
+
+ /** @var Plugin */
+ private $plugin;
+ /** @var Server */
+ private $server;
+ /** @var IShareableAddressBook | \PHPUnit_Framework_MockObject_MockObject */
+ private $book;
+
+ public function setUp() {
+ parent::setUp();
+
+ /** @var Auth | \PHPUnit_Framework_MockObject_MockObject $authBackend */
+ $authBackend = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Auth')->disableOriginalConstructor()->getMock();
+ $authBackend->method('isDavAuthenticated')->willReturn(true);
+
+ /** @var IRequest $request */
+ $request = $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock();
+ $this->plugin = new Plugin($authBackend, $request);
+
+ $root = new SimpleCollection('root');
+ $this->server = new \Sabre\DAV\Server($root);
+ /** @var SimpleCollection $node */
+ $this->book = $this->getMockBuilder('OCA\DAV\CardDAV\Sharing\IShareableAddressBook')->disableOriginalConstructor()->getMock();
+ $this->book->method('getName')->willReturn('addressbook1.vcf');
+ $root->addChild($this->book);
+ $this->plugin->initialize($this->server);
+ }
+
+ public function testSharing() {
+
+ $this->book->expects($this->once())->method('updateShares')->with([[
+ 'href' => 'principal:principals/admin',
+ 'commonName' => null,
+ 'summary' => null,
+ 'readOnly' => false
+ ]], ['mailto:wilfredo@example.com']);
+
+ // setup request
+ $request = new Request();
+ $request->addHeader('Content-Type', 'application/xml');
+ $request->setUrl('addressbook1.vcf');
+ $request->setBody('<?xml version="1.0" encoding="utf-8" ?><CS:share xmlns:D="DAV:" xmlns:CS="urn:ietf:params:xml:ns:carddav"><CS:set><D:href>principal:principals/admin</D:href><CS:read-write/></CS:set> <CS:remove><D:href>mailto:wilfredo@example.com</D:href></CS:remove></CS:share>');
+ $response = new Response();
+ $this->plugin->httpPost($request, $response);
+ }
+}
diff --git a/apps/dav/tests/unit/connector/sabre/file.php b/apps/dav/tests/unit/connector/sabre/file.php
index 2a6cf46ef16..ad4c1d29ed4 100644
--- a/apps/dav/tests/unit/connector/sabre/file.php
+++ b/apps/dav/tests/unit/connector/sabre/file.php
@@ -48,6 +48,14 @@ class File extends \Test\TestCase {
parent::tearDown();
}
+ private function getMockStorage() {
+ $storage = $this->getMock('\OCP\Files\Storage');
+ $storage->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue('home::someuser'));
+ return $storage;
+ }
+
/**
* @param string $string
*/
@@ -149,7 +157,7 @@ class File extends \Test\TestCase {
->method('getRelativePath')
->will($this->returnArgument(0));
- $info = new \OC\Files\FileInfo('/test.txt', null, null, array(
+ $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array(
'permissions' => \OCP\Constants::PERMISSION_ALL
), null);
@@ -209,7 +217,7 @@ class File extends \Test\TestCase {
$_SERVER['HTTP_OC_CHUNKED'] = true;
- $info = new \OC\Files\FileInfo('/test.txt-chunking-12345-2-0', null, null, [
+ $info = new \OC\Files\FileInfo('/test.txt-chunking-12345-2-0', $this->getMockStorage(), null, [
'permissions' => \OCP\Constants::PERMISSION_ALL
], null);
$file = new \OCA\DAV\Connector\Sabre\File($view, $info);
@@ -219,7 +227,7 @@ class File extends \Test\TestCase {
$this->assertNull($file->put('test data one'));
$file->releaseLock(ILockingProvider::LOCK_SHARED);
- $info = new \OC\Files\FileInfo('/test.txt-chunking-12345-2-1', null, null, [
+ $info = new \OC\Files\FileInfo('/test.txt-chunking-12345-2-1', $this->getMockStorage(), null, [
'permissions' => \OCP\Constants::PERMISSION_ALL
], null);
$file = new \OCA\DAV\Connector\Sabre\File($view, $info);
@@ -261,7 +269,7 @@ class File extends \Test\TestCase {
$info = new \OC\Files\FileInfo(
$viewRoot . '/' . ltrim($path, '/'),
- null,
+ $this->getMockStorage(),
null,
['permissions' => \OCP\Constants::PERMISSION_ALL],
null
@@ -450,7 +458,7 @@ class File extends \Test\TestCase {
$_SERVER['CONTENT_LENGTH'] = 123456;
$_SERVER['REQUEST_METHOD'] = 'PUT';
- $info = new \OC\Files\FileInfo('/test.txt', null, null, array(
+ $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array(
'permissions' => \OCP\Constants::PERMISSION_ALL
), null);
@@ -483,7 +491,7 @@ class File extends \Test\TestCase {
// simulate situation where the target file is locked
$view->lockFile('/test.txt', ILockingProvider::LOCK_EXCLUSIVE);
- $info = new \OC\Files\FileInfo('/' . $this->user . '/files/test.txt', null, null, array(
+ $info = new \OC\Files\FileInfo('/' . $this->user . '/files/test.txt', $this->getMockStorage(), null, array(
'permissions' => \OCP\Constants::PERMISSION_ALL
), null);
@@ -518,7 +526,7 @@ class File extends \Test\TestCase {
$_SERVER['HTTP_OC_CHUNKED'] = true;
- $info = new \OC\Files\FileInfo('/' . $this->user . '/files/test.txt-chunking-12345-2-0', null, null, [
+ $info = new \OC\Files\FileInfo('/' . $this->user . '/files/test.txt-chunking-12345-2-0', $this->getMockStorage(), null, [
'permissions' => \OCP\Constants::PERMISSION_ALL
], null);
$file = new \OCA\DAV\Connector\Sabre\File($view, $info);
@@ -526,7 +534,7 @@ class File extends \Test\TestCase {
$this->assertNull($file->put('test data one'));
$file->releaseLock(ILockingProvider::LOCK_SHARED);
- $info = new \OC\Files\FileInfo('/' . $this->user . '/files/test.txt-chunking-12345-2-1', null, null, [
+ $info = new \OC\Files\FileInfo('/' . $this->user . '/files/test.txt-chunking-12345-2-1', $this->getMockStorage(), null, [
'permissions' => \OCP\Constants::PERMISSION_ALL
], null);
$file = new \OCA\DAV\Connector\Sabre\File($view, $info);
@@ -555,7 +563,7 @@ class File extends \Test\TestCase {
->method('getRelativePath')
->will($this->returnArgument(0));
- $info = new \OC\Files\FileInfo('/*', null, null, array(
+ $info = new \OC\Files\FileInfo('/*', $this->getMockStorage(), null, array(
'permissions' => \OCP\Constants::PERMISSION_ALL
), null);
$file = new \OCA\DAV\Connector\Sabre\File($view, $info);
@@ -591,7 +599,7 @@ class File extends \Test\TestCase {
->method('getRelativePath')
->will($this->returnArgument(0));
- $info = new \OC\Files\FileInfo('/*', null, null, array(
+ $info = new \OC\Files\FileInfo('/*', $this->getMockStorage(), null, array(
'permissions' => \OCP\Constants::PERMISSION_ALL
), null);
$file = new \OCA\DAV\Connector\Sabre\File($view, $info);
@@ -618,7 +626,7 @@ class File extends \Test\TestCase {
$_SERVER['CONTENT_LENGTH'] = 12345;
$_SERVER['REQUEST_METHOD'] = 'PUT';
- $info = new \OC\Files\FileInfo('/test.txt', null, null, array(
+ $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array(
'permissions' => \OCP\Constants::PERMISSION_ALL
), null);
@@ -654,7 +662,7 @@ class File extends \Test\TestCase {
->method('unlink')
->will($this->returnValue(true));
- $info = new \OC\Files\FileInfo('/test.txt', null, null, array(
+ $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array(
'permissions' => \OCP\Constants::PERMISSION_ALL
), null);
@@ -672,7 +680,7 @@ class File extends \Test\TestCase {
$view = $this->getMock('\OC\Files\View',
array());
- $info = new \OC\Files\FileInfo('/test.txt', null, null, array(
+ $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array(
'permissions' => 0
), null);
@@ -695,7 +703,7 @@ class File extends \Test\TestCase {
->method('unlink')
->will($this->returnValue(false));
- $info = new \OC\Files\FileInfo('/test.txt', null, null, array(
+ $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array(
'permissions' => \OCP\Constants::PERMISSION_ALL
), null);
@@ -718,7 +726,7 @@ class File extends \Test\TestCase {
->method('unlink')
->willThrowException(new ForbiddenException('', true));
- $info = new \OC\Files\FileInfo('/test.txt', null, null, array(
+ $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array(
'permissions' => \OCP\Constants::PERMISSION_ALL
), null);
@@ -753,7 +761,7 @@ class File extends \Test\TestCase {
$path = 'test-locking.txt';
$info = new \OC\Files\FileInfo(
'/' . $this->user . '/files/' . $path,
- null,
+ $this->getMockStorage(),
null,
['permissions' => \OCP\Constants::PERMISSION_ALL],
null
@@ -865,7 +873,7 @@ class File extends \Test\TestCase {
->method('fopen')
->will($this->returnValue(false));
- $info = new \OC\Files\FileInfo('/test.txt', null, null, array(
+ $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array(
'permissions' => \OCP\Constants::PERMISSION_ALL
), null);
@@ -883,7 +891,7 @@ class File extends \Test\TestCase {
->method('fopen')
->willThrowException(new ForbiddenException('', true));
- $info = new \OC\Files\FileInfo('/test.txt', null, null, array(
+ $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array(
'permissions' => \OCP\Constants::PERMISSION_ALL
), null);
diff --git a/apps/dav/tests/unit/connector/sabre/filesplugin.php b/apps/dav/tests/unit/connector/sabre/filesplugin.php
index b33c8340f72..642fc3258cd 100644
--- a/apps/dav/tests/unit/connector/sabre/filesplugin.php
+++ b/apps/dav/tests/unit/connector/sabre/filesplugin.php
@@ -2,6 +2,8 @@
namespace OCA\DAV\Tests\Unit\Connector\Sabre;
+use OCP\Files\StorageNotAvailableException;
+
/**
* Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
@@ -143,6 +145,29 @@ class FilesPlugin extends \Test\TestCase {
$this->assertEquals(array(self::SIZE_PROPERTYNAME), $propFind->get404Properties());
}
+ public function testGetPropertiesStorageNotAvailable() {
+ $node = $this->createTestNode('\OCA\DAV\Connector\Sabre\File');
+
+ $propFind = new \Sabre\DAV\PropFind(
+ '/dummyPath',
+ array(
+ self::DOWNLOADURL_PROPERTYNAME,
+ ),
+ 0
+ );
+
+ $node->expects($this->once())
+ ->method('getDirectDownload')
+ ->will($this->throwException(new StorageNotAvailableException()));
+
+ $this->plugin->handleGetProperties(
+ $propFind,
+ $node
+ );
+
+ $this->assertEquals(null, $propFind->get(self::DOWNLOADURL_PROPERTYNAME));
+ }
+
public function testGetPublicPermissions() {
$this->plugin = new \OCA\DAV\Connector\Sabre\FilesPlugin($this->tree, $this->view, true);
$this->plugin->initialize($this->server);
diff --git a/apps/dav/tests/unit/connector/sabre/objecttree.php b/apps/dav/tests/unit/connector/sabre/objecttree.php
index 1cea4ff0b69..6164b96c986 100644
--- a/apps/dav/tests/unit/connector/sabre/objecttree.php
+++ b/apps/dav/tests/unit/connector/sabre/objecttree.php
@@ -294,4 +294,45 @@ class ObjectTree extends \Test\TestCase {
$this->assertInstanceOf('\Sabre\DAV\INode', $tree->getNodeForPath($path));
}
+
+ /**
+ * @expectedException \Sabre\DAV\Exception\Forbidden
+ * @expectedExceptionMessage Could not copy directory nameOfSourceNode, target exists
+ */
+ public function testFailingMove() {
+ $source = 'a/b';
+ $destination = 'b/b';
+ $updatables = array('a' => true, 'a/b' => true, 'b' => true, 'b/b' => false);
+ $deletables = array('a/b' => true);
+
+ $view = new TestDoubleFileView($updatables, $deletables);
+
+ $info = new FileInfo('', null, null, array(), null);
+
+ $rootDir = new \OCA\DAV\Connector\Sabre\Directory($view, $info);
+ $objectTree = $this->getMock('\OCA\DAV\Connector\Sabre\ObjectTree',
+ array('nodeExists', 'getNodeForPath'),
+ array($rootDir, $view));
+
+ $sourceNode = $this->getMockBuilder('\Sabre\DAV\ICollection')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $sourceNode->expects($this->once())
+ ->method('getName')
+ ->will($this->returnValue('nameOfSourceNode'));
+
+ $objectTree->expects($this->once())
+ ->method('nodeExists')
+ ->with($this->identicalTo($destination))
+ ->will($this->returnValue(true));
+ $objectTree->expects($this->once())
+ ->method('getNodeForPath')
+ ->with($this->identicalTo($source))
+ ->will($this->returnValue($sourceNode));
+
+ /** @var $objectTree \OCA\DAV\Connector\Sabre\ObjectTree */
+ $mountManager = \OC\Files\Filesystem::getMountManager();
+ $objectTree->init($rootDir, $view, $mountManager);
+ $objectTree->move($source, $destination);
+ }
}
diff --git a/apps/dav/tests/unit/systemtag/systemtagmappingnode.php b/apps/dav/tests/unit/systemtag/systemtagmappingnode.php
index 849f7c2fa54..aef62a1acb2 100644
--- a/apps/dav/tests/unit/systemtag/systemtagmappingnode.php
+++ b/apps/dav/tests/unit/systemtag/systemtagmappingnode.php
@@ -9,12 +9,8 @@
namespace OCA\DAV\Tests\Unit\SystemTag;
use Sabre\DAV\Exception\NotFound;
-use Sabre\DAV\Exception\MethodNotAllowed;
-use Sabre\DAV\Exception\Conflict;
-
use OC\SystemTag\SystemTag;
use OCP\SystemTag\TagNotFoundException;
-use OCP\SystemTag\TagAlreadyExistsException;
class SystemTagMappingNode extends SystemTagNode {
diff --git a/apps/dav/tests/unit/systemtag/systemtagsbyidcollection.php b/apps/dav/tests/unit/systemtag/systemtagsbyidcollection.php
index 104ce366034..fa9e42d04f9 100644
--- a/apps/dav/tests/unit/systemtag/systemtagsbyidcollection.php
+++ b/apps/dav/tests/unit/systemtag/systemtagsbyidcollection.php
@@ -11,7 +11,6 @@ namespace OCA\DAV\Tests\Unit\SystemTag;
use OC\SystemTag\SystemTag;
use OCP\SystemTag\TagNotFoundException;
-use OCP\SystemTag\TagAlreadyExistsException;
class SystemTagsByIdCollection extends \Test\TestCase {
diff --git a/apps/dav/tests/unit/systemtag/systemtagsobjectmappingcollection.php b/apps/dav/tests/unit/systemtag/systemtagsobjectmappingcollection.php
index 6e15bb78e7c..a9b34f5ae19 100644
--- a/apps/dav/tests/unit/systemtag/systemtagsobjectmappingcollection.php
+++ b/apps/dav/tests/unit/systemtag/systemtagsobjectmappingcollection.php
@@ -11,7 +11,6 @@ namespace OCA\DAV\Tests\Unit\SystemTag;
use OC\SystemTag\SystemTag;
use OCP\SystemTag\TagNotFoundException;
-use OCP\SystemTag\TagAlreadyExistsException;
class SystemTagsObjectMappingCollection extends \Test\TestCase {
diff --git a/apps/encryption/l10n/es.js b/apps/encryption/l10n/es.js
index 6b49b3917fd..1dadb88064a 100644
--- a/apps/encryption/l10n/es.js
+++ b/apps/encryption/l10n/es.js
@@ -32,6 +32,7 @@ OC.L10N.register(
"The share will expire on %s." : "El objeto dejará de ser compartido el %s.",
"Cheers!" : "¡Saludos!",
"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 \"ownCloud 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>" : "Hola,\n<br><br>\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: <strong>%s</strong>\n<br><br>\nPor favor, identifíquese en la interfaz web, vaya a la sección 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la nueva en su correspondiente campo.<br><br>",
+ "Encrypt the home storage" : "Encriptar el almacenamiento personal",
"Enable recovery key" : "Activa la clave de recuperación",
"Disable recovery key" : "Desactiva la clave de recuperación",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar ficheros. Permite la recuperación de los ficheros de un usuario si él o ella olvida su contraseña.",
diff --git a/apps/encryption/l10n/es.json b/apps/encryption/l10n/es.json
index 3f21b4c09a0..5cf2b12ce5f 100644
--- a/apps/encryption/l10n/es.json
+++ b/apps/encryption/l10n/es.json
@@ -30,6 +30,7 @@
"The share will expire on %s." : "El objeto dejará de ser compartido el %s.",
"Cheers!" : "¡Saludos!",
"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 \"ownCloud 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>" : "Hola,\n<br><br>\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: <strong>%s</strong>\n<br><br>\nPor favor, identifíquese en la interfaz web, vaya a la sección 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la nueva en su correspondiente campo.<br><br>",
+ "Encrypt the home storage" : "Encriptar el almacenamiento personal",
"Enable recovery key" : "Activa la clave de recuperación",
"Disable recovery key" : "Desactiva la clave de recuperación",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar ficheros. Permite la recuperación de los ficheros de un usuario si él o ella olvida su contraseña.",
diff --git a/apps/encryption/l10n/et_EE.js b/apps/encryption/l10n/et_EE.js
index 501772c2808..3a29b24cc54 100644
--- a/apps/encryption/l10n/et_EE.js
+++ b/apps/encryption/l10n/et_EE.js
@@ -34,6 +34,7 @@ OC.L10N.register(
"New recovery key password" : "Uus taastevõtme parool",
"Repeat new recovery key password" : "Korda uut taastevõtme parooli",
"Change Password" : "Muuda parooli",
+ "ownCloud basic encryption module" : "ownCloud peamine küpteerimismoodul",
"Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.",
"Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.",
" If you don't remember your old password you can ask your administrator to recover your files." : "Kui sa ei mäleta oma vana parooli, siis palu oma süsteemihalduril taastada ligipääs failidele.",
diff --git a/apps/encryption/l10n/et_EE.json b/apps/encryption/l10n/et_EE.json
index 14d4c59f9fc..916bc0667ad 100644
--- a/apps/encryption/l10n/et_EE.json
+++ b/apps/encryption/l10n/et_EE.json
@@ -32,6 +32,7 @@
"New recovery key password" : "Uus taastevõtme parool",
"Repeat new recovery key password" : "Korda uut taastevõtme parooli",
"Change Password" : "Muuda parooli",
+ "ownCloud basic encryption module" : "ownCloud peamine küpteerimismoodul",
"Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.",
"Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.",
" If you don't remember your old password you can ask your administrator to recover your files." : "Kui sa ei mäleta oma vana parooli, siis palu oma süsteemihalduril taastada ligipääs failidele.",
diff --git a/apps/encryption/l10n/pt_BR.js b/apps/encryption/l10n/pt_BR.js
index 334bbf05282..80c35dea495 100644
--- a/apps/encryption/l10n/pt_BR.js
+++ b/apps/encryption/l10n/pt_BR.js
@@ -30,7 +30,7 @@ OC.L10N.register(
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo, provavelmente este é um arquivo compartilhado. Por favor, pergunte o dono do arquivo para recompartilhar o arquivo com você.",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.\n\n",
"The share will expire on %s." : "O compartilhamento irá expirar em %s.",
- "Cheers!" : "Saúde!",
+ "Cheers!" : "Saudações!",
"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 \"ownCloud 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>" : "Olá,<br><br>o administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha <strong>%s</strong>.<br><br>Por favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login..<br><br>",
"Encrypt the home storage" : "Criptografar a pasta de armazenamento home",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ativar essa opção de criptografia para todos os arquivos armazenados no armazenamento principal, caso contrário, apenas arquivos no armazenamento externo serão criptografados",
diff --git a/apps/encryption/l10n/pt_BR.json b/apps/encryption/l10n/pt_BR.json
index 794eb478c74..b3ce8c7238e 100644
--- a/apps/encryption/l10n/pt_BR.json
+++ b/apps/encryption/l10n/pt_BR.json
@@ -28,7 +28,7 @@
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo, provavelmente este é um arquivo compartilhado. Por favor, pergunte o dono do arquivo para recompartilhar o arquivo com você.",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.\n\n",
"The share will expire on %s." : "O compartilhamento irá expirar em %s.",
- "Cheers!" : "Saúde!",
+ "Cheers!" : "Saudações!",
"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 \"ownCloud 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>" : "Olá,<br><br>o administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha <strong>%s</strong>.<br><br>Por favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login..<br><br>",
"Encrypt the home storage" : "Criptografar a pasta de armazenamento home",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ativar essa opção de criptografia para todos os arquivos armazenados no armazenamento principal, caso contrário, apenas arquivos no armazenamento externo serão criptografados",
diff --git a/apps/encryption/lib/crypto/crypt.php b/apps/encryption/lib/crypto/crypt.php
index dbc0364a157..12e9008545a 100644
--- a/apps/encryption/lib/crypto/crypt.php
+++ b/apps/encryption/lib/crypto/crypt.php
@@ -30,7 +30,6 @@ use OC\Encryption\Exceptions\DecryptionFailedException;
use OC\Encryption\Exceptions\EncryptionFailedException;
use OCA\Encryption\Exceptions\MultiKeyDecryptException;
use OCA\Encryption\Exceptions\MultiKeyEncryptException;
-use OCA\Encryption\Vendor\PBKDF2Fallback;
use OCP\Encryption\Exceptions\GenericEncryptionException;
use OCP\IConfig;
use OCP\ILogger;
@@ -293,28 +292,14 @@ class Crypt {
$salt = hash('sha256', $uid . $instanceId . $instanceSecret, true);
$keySize = $this->getKeySize($cipher);
- if (function_exists('hash_pbkdf2')) {
- $hash = hash_pbkdf2(
- 'sha256',
- $password,
- $salt,
- 100000,
- $keySize,
- true
- );
- } else {
- // fallback to 3rdparty lib for PHP <= 5.4.
- // FIXME: Can be removed as soon as support for PHP 5.4 was dropped
- $fallback = new PBKDF2Fallback();
- $hash = $fallback->pbkdf2(
- 'sha256',
- $password,
- $salt,
- 100000,
- $keySize,
- true
- );
- }
+ $hash = hash_pbkdf2(
+ 'sha256',
+ $password,
+ $salt,
+ 100000,
+ $keySize,
+ true
+ );
return $hash;
}
diff --git a/apps/encryption/tests/lib/MigrationTest.php b/apps/encryption/tests/lib/MigrationTest.php
index fc3d014345b..6df72ac1bf6 100644
--- a/apps/encryption/tests/lib/MigrationTest.php
+++ b/apps/encryption/tests/lib/MigrationTest.php
@@ -43,15 +43,18 @@ class MigrationTest extends \Test\TestCase {
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
- \OC_User::createUser(self::TEST_ENCRYPTION_MIGRATION_USER1, 'foo');
- \OC_User::createUser(self::TEST_ENCRYPTION_MIGRATION_USER2, 'foo');
- \OC_User::createUser(self::TEST_ENCRYPTION_MIGRATION_USER3, 'foo');
+ \OC::$server->getUserManager()->createUser(self::TEST_ENCRYPTION_MIGRATION_USER1, 'foo');
+ \OC::$server->getUserManager()->createUser(self::TEST_ENCRYPTION_MIGRATION_USER2, 'foo');
+ \OC::$server->getUserManager()->createUser(self::TEST_ENCRYPTION_MIGRATION_USER3, 'foo');
}
public static function tearDownAfterClass() {
- \OC_User::deleteUser(self::TEST_ENCRYPTION_MIGRATION_USER1);
- \OC_User::deleteUser(self::TEST_ENCRYPTION_MIGRATION_USER2);
- \OC_User::deleteUser(self::TEST_ENCRYPTION_MIGRATION_USER3);
+ $user = \OC::$server->getUserManager()->get(self::TEST_ENCRYPTION_MIGRATION_USER1);
+ if ($user !== null) { $user->delete(); }
+ $user = \OC::$server->getUserManager()->get(self::TEST_ENCRYPTION_MIGRATION_USER2);
+ if ($user !== null) { $user->delete(); }
+ $user = \OC::$server->getUserManager()->get(self::TEST_ENCRYPTION_MIGRATION_USER3);
+ if ($user !== null) { $user->delete(); }
parent::tearDownAfterClass();
}
diff --git a/apps/encryption/vendor/pbkdf2fallback.php b/apps/encryption/vendor/pbkdf2fallback.php
deleted file mode 100644
index ca579f8e7dc..00000000000
--- a/apps/encryption/vendor/pbkdf2fallback.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-/* Note; This class can be removed as soon as we drop PHP 5.4 support.
- *
- *
- * Password Hashing With PBKDF2 (http://crackstation.net/hashing-security.htm).
- * Copyright (c) 2013, Taylor Hornby
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-namespace OCA\Encryption\Vendor;
-
-class PBKDF2Fallback {
-
- /*
- * PBKDF2 key derivation function as defined by RSA's PKCS #5: https://www.ietf.org/rfc/rfc2898.txt
- * $algorithm - The hash algorithm to use. Recommended: SHA256
- * $password - The password.
- * $salt - A salt that is unique to the password.
- * $count - Iteration count. Higher is better, but slower. Recommended: At least 1000.
- * $key_length - The length of the derived key in bytes.
- * $raw_output - If true, the key is returned in raw binary format. Hex encoded otherwise.
- * Returns: A $key_length-byte key derived from the password and salt.
- *
- * Test vectors can be found here: https://www.ietf.org/rfc/rfc6070.txt
- *
- * This implementation of PBKDF2 was originally created by https://defuse.ca
- * With improvements by http://www.variations-of-shadow.com
- */
- public function pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output = false) {
- $algorithm = strtolower($algorithm);
- if (!in_array($algorithm, hash_algos(), true))
- trigger_error('PBKDF2 ERROR: Invalid hash algorithm.', E_USER_ERROR);
- if ($count <= 0 || $key_length <= 0)
- trigger_error('PBKDF2 ERROR: Invalid parameters.', E_USER_ERROR);
-
- if (function_exists("hash_pbkdf2")) {
- // The output length is in NIBBLES (4-bits) if $raw_output is false!
- if (!$raw_output) {
- $key_length = $key_length * 2;
- }
- return hash_pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output);
- }
-
- $hash_length = strlen(hash($algorithm, "", true));
- $block_count = ceil($key_length / $hash_length);
-
- $output = "";
- for ($i = 1; $i <= $block_count; $i++) {
- // $i encoded as 4 bytes, big endian.
- $last = $salt . pack("N", $i);
- // first iteration
- $last = $xorsum = hash_hmac($algorithm, $last, $password, true);
- // perform the other $count - 1 iterations
- for ($j = 1; $j < $count; $j++) {
- $xorsum ^= ($last = hash_hmac($algorithm, $last, $password, true));
- }
- $output .= $xorsum;
- }
-
- if ($raw_output)
- return substr($output, 0, $key_length);
- else
- return bin2hex(substr($output, 0, $key_length));
- }
-}
diff --git a/apps/federation/api/ocsauthapi.php b/apps/federation/api/ocsauthapi.php
index 42d7113820d..b94550fd4f2 100644
--- a/apps/federation/api/ocsauthapi.php
+++ b/apps/federation/api/ocsauthapi.php
@@ -26,6 +26,7 @@ use OCA\Federation\DbHandler;
use OCA\Federation\TrustedServers;
use OCP\AppFramework\Http;
use OCP\BackgroundJob\IJobList;
+use OCP\ILogger;
use OCP\IRequest;
use OCP\Security\ISecureRandom;
use OCP\Security\StringUtils;
@@ -54,6 +55,9 @@ class OCSAuthAPI {
/** @var DbHandler */
private $dbHandler;
+ /** @var ILogger */
+ private $logger;
+
/**
* OCSAuthAPI constructor.
*
@@ -62,19 +66,22 @@ class OCSAuthAPI {
* @param IJobList $jobList
* @param TrustedServers $trustedServers
* @param DbHandler $dbHandler
+ * @param ILogger $logger
*/
public function __construct(
IRequest $request,
ISecureRandom $secureRandom,
IJobList $jobList,
TrustedServers $trustedServers,
- DbHandler $dbHandler
+ DbHandler $dbHandler,
+ ILogger $logger
) {
$this->request = $request;
$this->secureRandom = $secureRandom;
$this->jobList = $jobList;
$this->trustedServers = $trustedServers;
$this->dbHandler = $dbHandler;
+ $this->logger = $logger;
}
/**
@@ -88,6 +95,7 @@ class OCSAuthAPI {
$token = $this->request->getParam('token');
if ($this->trustedServers->isTrustedServer($url) === false) {
+ $this->logger->log(\OCP\Util::ERROR, 'remote server not trusted (' . $url . ') while requesting shared secret');
return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN);
}
@@ -95,6 +103,7 @@ class OCSAuthAPI {
// token wins
$localToken = $this->dbHandler->getToken($url);
if (strcmp($localToken, $token) > 0) {
+ $this->logger->log(\OCP\Util::ERROR, 'remote server (' . $url . ') presented lower token');
return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN);
}
@@ -120,10 +129,13 @@ class OCSAuthAPI {
$url = $this->request->getParam('url');
$token = $this->request->getParam('token');
- if (
- $this->trustedServers->isTrustedServer($url) === false
- || $this->isValidToken($url, $token) === false
- ) {
+ if ($this->trustedServers->isTrustedServer($url) === false) {
+ $this->logger->log(\OCP\Util::ERROR, 'remote server not trusted (' . $url . ') while getting shared secret');
+ return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN);
+ }
+
+ if ($this->isValidToken($url, $token) === false) {
+ $this->logger->log(\OCP\Util::ERROR, 'remote server (' . $url . ') didn\'t send a valid token (got ' . $token . ') while getting shared secret');
return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN);
}
@@ -139,7 +151,7 @@ class OCSAuthAPI {
protected function isValidToken($url, $token) {
$storedToken = $this->dbHandler->getToken($url);
- return StringUtils::equals($storedToken, $token);
+ return hash_equals($storedToken, $token);
}
}
diff --git a/apps/federation/appinfo/application.php b/apps/federation/appinfo/application.php
index 172283536b4..45d88548b70 100644
--- a/apps/federation/appinfo/application.php
+++ b/apps/federation/appinfo/application.php
@@ -108,7 +108,8 @@ class Application extends \OCP\AppFramework\App {
$server->getSecureRandom(),
$server->getJobList(),
$container->query('TrustedServers'),
- $container->query('DbHandler')
+ $container->query('DbHandler'),
+ $server->getLogger()
);
diff --git a/apps/federation/backgroundjob/getsharedsecret.php b/apps/federation/backgroundjob/getsharedsecret.php
index eb55fa2d6ab..8aa8a08e07b 100644
--- a/apps/federation/backgroundjob/getsharedsecret.php
+++ b/apps/federation/backgroundjob/getsharedsecret.php
@@ -91,7 +91,7 @@ class GetSharedSecret extends QueuedJob{
$this->trustedServers = new TrustedServers(
$this->dbHandler,
\OC::$server->getHTTPClientService(),
- \OC::$server->getLogger(),
+ $this->logger,
$this->jobList,
\OC::$server->getSecureRandom(),
\OC::$server->getConfig()
@@ -148,6 +148,7 @@ class GetSharedSecret extends QueuedJob{
} catch (ClientException $e) {
$status = $e->getCode();
+ $this->logger->logException($e);
}
// if we received a unexpected response we try again later
diff --git a/apps/federation/backgroundjob/requestsharedsecret.php b/apps/federation/backgroundjob/requestsharedsecret.php
index 24d8adada11..a1906d20823 100644
--- a/apps/federation/backgroundjob/requestsharedsecret.php
+++ b/apps/federation/backgroundjob/requestsharedsecret.php
@@ -60,6 +60,9 @@ class RequestSharedSecret extends QueuedJob {
private $endPoint = '/ocs/v2.php/apps/federation/api/v1/request-shared-secret?format=json';
+ /** @var ILogger */
+ private $logger;
+
/**
* RequestSharedSecret constructor.
*
@@ -80,13 +83,14 @@ class RequestSharedSecret extends QueuedJob {
$this->jobList = $jobList ? $jobList : \OC::$server->getJobList();
$this->urlGenerator = $urlGenerator ? $urlGenerator : \OC::$server->getURLGenerator();
$this->dbHandler = $dbHandler ? $dbHandler : new DbHandler(\OC::$server->getDatabaseConnection(), \OC::$server->getL10N('federation'));
+ $this->logger = \OC::$server->getLogger();
if ($trustedServers) {
$this->trustedServers = $trustedServers;
} else {
$this->trustedServers = new TrustedServers(
$this->dbHandler,
\OC::$server->getHTTPClientService(),
- \OC::$server->getLogger(),
+ $this->logger,
$this->jobList,
\OC::$server->getSecureRandom(),
\OC::$server->getConfig()
@@ -142,6 +146,7 @@ class RequestSharedSecret extends QueuedJob {
} catch (ClientException $e) {
$status = $e->getCode();
+ $this->logger->logException($e);
}
// if we received a unexpected response we try again later
diff --git a/apps/federation/tests/api/ocsauthapitest.php b/apps/federation/tests/api/ocsauthapitest.php
index a334686c24e..e6a95af8585 100644
--- a/apps/federation/tests/api/ocsauthapitest.php
+++ b/apps/federation/tests/api/ocsauthapitest.php
@@ -28,6 +28,7 @@ use OCA\Federation\API\OCSAuthAPI;
use OCA\Federation\DbHandler;
use OCA\Federation\TrustedServers;
use OCP\AppFramework\Http;
+use OCP\ILogger;
use OCP\IRequest;
use OCP\Security\ISecureRandom;
use Test\TestCase;
@@ -49,6 +50,9 @@ class OCSAuthAPITest extends TestCase {
/** @var \PHPUnit_Framework_MockObject_MockObject | DbHandler */
private $dbHandler;
+ /** @var \PHPUnit_Framework_MockObject_MockObject | ILogger */
+ private $logger;
+
/** @var OCSAuthApi */
private $ocsAuthApi;
@@ -63,13 +67,16 @@ class OCSAuthAPITest extends TestCase {
->disableOriginalConstructor()->getMock();
$this->jobList = $this->getMockBuilder('OC\BackgroundJob\JobList')
->disableOriginalConstructor()->getMock();
+ $this->logger = $this->getMockBuilder('OCP\ILogger')
+ ->disableOriginalConstructor()->getMock();
$this->ocsAuthApi = new OCSAuthAPI(
$this->request,
$this->secureRandom,
$this->jobList,
$this->trustedServers,
- $this->dbHandler
+ $this->dbHandler,
+ $this->logger
);
}
@@ -136,7 +143,8 @@ class OCSAuthAPITest extends TestCase {
$this->secureRandom,
$this->jobList,
$this->trustedServers,
- $this->dbHandler
+ $this->dbHandler,
+ $this->logger
]
)->setMethods(['isValidToken'])->getMock();
diff --git a/apps/files/admin.php b/apps/files/admin.php
index f23f9b52698..a2092c600a7 100644
--- a/apps/files/admin.php
+++ b/apps/files/admin.php
@@ -33,7 +33,7 @@ $htaccessWorking=(getenv('htaccessWorking')=='true');
$upload_max_filesize = OC::$server->getIniWrapper()->getBytes('upload_max_filesize');
$post_max_size = OC::$server->getIniWrapper()->getBytes('post_max_size');
$maxUploadFilesize = OCP\Util::humanFileSize(min($upload_max_filesize, $post_max_size));
-if($_POST && OC_Util::isCallRegistered()) {
+if($_POST && \OC::$server->getRequest()->passesCSRFCheck()) {
if(isset($_POST['maxUploadSize'])) {
if(($setMaxSize = OC_Files::setUploadLimit(OCP\Util::computerFileSize($_POST['maxUploadSize']))) !== false) {
$maxUploadFilesize = OCP\Util::humanFileSize($setMaxSize);
diff --git a/apps/files/appinfo/register_command.php b/apps/files/appinfo/register_command.php
index 3042c259872..7e541ca26f2 100644
--- a/apps/files/appinfo/register_command.php
+++ b/apps/files/appinfo/register_command.php
@@ -20,5 +20,5 @@
*
*/
-$application->add(new OCA\Files\Command\Scan(OC_User::getManager()));
+$application->add(new OCA\Files\Command\Scan(\OC::$server->getUserManager()));
$application->add(new OCA\Files\Command\DeleteOrphanedFiles(\OC::$server->getDatabaseConnection()));
diff --git a/apps/files/command/scan.php b/apps/files/command/scan.php
index 31ae555e041..7e00d8a2312 100644
--- a/apps/files/command/scan.php
+++ b/apps/files/command/scan.php
@@ -32,6 +32,7 @@ use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Helper\Table;
class Scan extends Command {
@@ -39,6 +40,15 @@ class Scan extends Command {
* @var \OC\User\Manager $userManager
*/
private $userManager;
+ /** @var float */
+ protected $execTime = 0;
+ /** @var int */
+ protected $foldersCounter = 0;
+ /** @var int */
+ protected $filesCounter = 0;
+ /** @var bool */
+ protected $interrupted = false;
+
public function __construct(\OC\User\Manager $userManager) {
$this->userManager = $userManager;
@@ -64,7 +74,13 @@ class Scan extends Command {
'quiet',
'q',
InputOption::VALUE_NONE,
- 'suppress output'
+ 'suppress any output'
+ )
+ ->addOption(
+ 'verbose',
+ '-v|vv|vvv',
+ InputOption::VALUE_NONE,
+ 'verbose the output'
)
->addOption(
'all',
@@ -74,19 +90,31 @@ class Scan extends Command {
);
}
- protected function scanFiles($user, $path, $quiet, OutputInterface $output) {
+ protected function scanFiles($user, $path, $verbose, OutputInterface $output) {
$scanner = new \OC\Files\Utils\Scanner($user, \OC::$server->getDatabaseConnection(), \OC::$server->getLogger());
- if (!$quiet) {
+ # printout and count
+ if ($verbose) {
$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) {
$output->writeln("Scanning file <info>$path</info>");
+ $this->filesCounter += 1;
});
$scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) {
$output->writeln("Scanning folder <info>$path</info>");
+ $this->foldersCounter += 1;
});
$scanner->listen('\OC\Files\Utils\Scanner', 'StorageNotAvailable', function (StorageNotAvailableException $e) use ($output) {
$output->writeln("Error while scanning, storage not available (" . $e->getMessage() . ")");
});
+ # count only
+ } else {
+ $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) {
+ $this->filesCounter += 1;
+ });
+ $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) {
+ $this->foldersCounter += 1;
+ });
}
+
try {
$scanner->scan($path);
} catch (ForbiddenException $e) {
@@ -95,6 +123,7 @@ class Scan extends Command {
}
}
+
protected function execute(InputInterface $input, OutputInterface $output) {
$inputPath = $input->getOption('path');
if ($inputPath) {
@@ -106,24 +135,173 @@ class Scan extends Command {
} else {
$users = $input->getArgument('user_id');
}
- $quiet = $input->getOption('quiet');
-
if (count($users) === 0) {
$output->writeln("<error>Please specify the user id to scan, \"--all\" to scan for all users or \"--path=...\"</error>");
return;
}
+ # no messaging level option means: no full printout but statistics
+ # $quiet means no print at all
+ # $verbose means full printout including statistics
+ # -q -v full stat
+ # 0 0 no yes
+ # 0 1 yes yes
+ # 1 -- no no (quiet overrules verbose)
+ $verbose = $input->getOption('verbose');
+ $quiet = $input->getOption('quiet');
+ # restrict the verbosity level to VERBOSITY_VERBOSE
+ if ($output->getVerbosity()>OutputInterface::VERBOSITY_VERBOSE) {
+ $output->setVerbosity(OutputInterface::VERBOSITY_VERBOSE);
+ }
+ if ($quiet) {
+ $verbose = false;
+ }
+
+ $this->initTools();
+
foreach ($users as $user) {
if (is_object($user)) {
$user = $user->getUID();
}
$path = $inputPath ? $inputPath : '/' . $user;
if ($this->userManager->userExists($user)) {
- $this->scanFiles($user, $path, $quiet, $output);
+ # full: printout data if $verbose was set
+ $this->scanFiles($user, $path, $verbose, $output);
} else {
$output->writeln("<error>Unknown user $user</error>");
}
}
+
+ # stat: printout statistics if $quiet was not set
+ if (!$quiet) {
+ $this->presentStats($output);
+ }
+
+ }
+
+
+ /**
+ * Checks if the command was interrupted by ctrl-c
+ */
+ protected function checkForInterruption($output) {
+ if ($this->hasBeenInterrupted()) {
+ $this->presentResults($output);
+ exit;
+ }
+ }
+
+
+ /**
+ * Initialises some useful tools for the Command
+ */
+ protected function initTools() {
+ // Start the timer
+ $this->execTime = -microtime(true);
+ // Convert PHP errors to exceptions
+ set_error_handler([$this, 'exceptionErrorHandler'], E_ALL);
+
+ // Collect interrupts and notify the running command
+ pcntl_signal(SIGTERM, [$this, 'cancelOperation']);
+ pcntl_signal(SIGINT, [$this, 'cancelOperation']);
+ }
+
+
+ /**
+ * Changes the status of the command to "interrupted"
+ *
+ * Gives a chance to the command to properly terminate what it's doing
+ */
+ private function cancelOperation() {
+ $this->interrupted = true;
+ }
+
+
+ /**
+ * Processes PHP errors as exceptions in order to be able to keep track of problems
+ *
+ * @see https://secure.php.net/manual/en/function.set-error-handler.php
+ *
+ * @param int $severity the level of the error raised
+ * @param string $message
+ * @param string $file the filename that the error was raised in
+ * @param int $line the line number the error was raised
+ *
+ * @throws \ErrorException
+ */
+ public function exceptionErrorHandler($severity, $message, $file, $line) {
+ if (!(error_reporting() & $severity)) {
+ // This error code is not included in error_reporting
+ return;
+ }
+ throw new \ErrorException($message, 0, $severity, $file, $line);
}
+
+
+ /**
+ * @return bool
+ */
+ protected function hasBeenInterrupted() {
+ $cancelled = false;
+ pcntl_signal_dispatch();
+ if ($this->interrupted) {
+ $cancelled = true;
+ }
+
+ return $cancelled;
+ }
+
+
+ /**
+ * @param OutputInterface $output
+ */
+ protected function presentStats(OutputInterface $output) {
+ // Stop the timer
+ $this->execTime += microtime(true);
+ $output->writeln("");
+
+ $headers = [
+ 'Folders', 'Files', 'Elapsed time'
+ ];
+
+ $this->showSummary($headers, null, $output);
+ }
+
+
+ /**
+ * Shows a summary of operations
+ *
+ * @param string[] $headers
+ * @param string[] $rows
+ * @param OutputInterface $output
+ */
+ protected function showSummary($headers, $rows, OutputInterface $output) {
+ $niceDate = $this->formatExecTime();
+ if (!$rows) {
+ $rows = [
+ $this->foldersCounter,
+ $this->filesCounter,
+ $niceDate,
+ ];
+ }
+ $table = new Table($output);
+ $table
+ ->setHeaders($headers)
+ ->setRows([$rows]);
+ $table->render();
+ }
+
+
+ /**
+ * Formats microtime into a human readable format
+ *
+ * @return string
+ */
+ protected function formatExecTime() {
+ list($secs, $tens) = explode('.', sprintf("%.1f", ($this->execTime)));
+ $niceDate = date('H:i:s', $secs) . '.' . $tens;
+
+ return $niceDate;
+ }
+
}
diff --git a/apps/files/download.php b/apps/files/download.php
index b0628e394be..b058f0ebf5b 100644
--- a/apps/files/download.php
+++ b/apps/files/download.php
@@ -39,7 +39,7 @@ if(!\OC\Files\Filesystem::file_exists($filename)) {
exit;
}
-$ftype=\OC_Helper::getSecureMimeType(\OC\Files\Filesystem::getMimeType( $filename ));
+$ftype=\OC::$server->getMimeTypeDetector()->getSecureMimeType(\OC\Files\Filesystem::getMimeType( $filename ));
header('Content-Type:'.$ftype);
OCP\Response::setContentDispositionHeader(basename($filename), 'attachment');
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index 871a2149c88..67125f1570f 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -617,7 +617,16 @@
this.registerAction({
name: 'Delete',
- displayName: t('files', 'Delete'),
+ displayName: function(context) {
+ var mountType = context.$file.attr('data-mounttype');
+ var deleteTitle = t('files', 'Delete');
+ if (mountType === 'external-root') {
+ deleteTitle = t('files', 'Disconnect storage');
+ } else if (mountType === 'shared-root') {
+ deleteTitle = t('files', 'Unshare');
+ }
+ return deleteTitle;
+ },
mime: 'all',
order: 1000,
// permission is READ because we show a hint instead if there is no permission
@@ -668,8 +677,9 @@
* @typedef {Object} OCA.Files.FileAction
*
* @property {String} name identifier of the action
- * @property {String} displayName display name of the action, defaults
- * to the name given in name property
+ * @property {(String|OCA.Files.FileActions~displayNameFunction)} displayName
+ * display name string for the action, or function that returns the display name.
+ * Defaults to the name given in name property
* @property {String} mime mime type
* @property {int} permissions permissions
* @property {(Function|String)} icon icon path to the icon or function
@@ -703,6 +713,16 @@
*/
/**
+ * Display name function for actions.
+ * The function returns the display name of the action using
+ * the given context information..
+ *
+ * @callback OCA.Files.FileActions~displayNameFunction
+ * @param {OCA.Files.FileActionContext} context action context
+ * @return {String} display name
+ */
+
+ /**
* Action handler function for file actions
*
* @callback OCA.Files.FileActions~actionHandler
diff --git a/apps/files/js/fileactionsmenu.js b/apps/files/js/fileactionsmenu.js
index 67cbb48c965..9e51d8f1f1f 100644
--- a/apps/files/js/fileactionsmenu.js
+++ b/apps/files/js/fileactionsmenu.js
@@ -81,6 +81,7 @@
* Renders the menu with the currently set items
*/
render: function() {
+ var self = this;
var fileActions = this._context.fileActions;
var actions = fileActions.getActions(
fileActions.getCurrentMimeType(),
@@ -100,6 +101,13 @@
(!defaultAction || actionSpec.name !== defaultAction.name)
);
});
+ items = _.map(items, function(item) {
+ if (_.isFunction(item.displayName)) {
+ item = _.extend({}, item);
+ item.displayName = item.displayName(self._context);
+ }
+ return item;
+ });
items = items.sort(function(actionA, actionB) {
var orderA = actionA.order || 0;
var orderB = actionB.order || 0;
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 672c39a8bb1..0dbf4f938bb 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -990,13 +990,16 @@
}
if (fileData.mountType) {
- // FIXME: HACK: detect shared-root
- if (fileData.mountType === 'shared' && this.dirInfo.mountType !== 'shared') {
- // if parent folder isn't share, assume the displayed folder is a share root
- fileData.mountType = 'shared-root';
- } else if (fileData.mountType === 'external' && this.dirInfo.mountType !== 'external') {
- // if parent folder isn't external, assume the displayed folder is the external storage root
- fileData.mountType = 'external-root';
+ // dirInfo (parent) only exist for the "real" file list
+ if (this.dirInfo.id) {
+ // FIXME: HACK: detect shared-root
+ if (fileData.mountType === 'shared' && this.dirInfo.mountType !== 'shared' && this.dirInfo.mountType !== 'shared-root') {
+ // if parent folder isn't share, assume the displayed folder is a share root
+ fileData.mountType = 'shared-root';
+ } else if (fileData.mountType === 'external' && this.dirInfo.mountType !== 'external' && this.dirInfo.mountType !== 'external-root') {
+ // if parent folder isn't external, assume the displayed folder is the external storage root
+ fileData.mountType = 'external-root';
+ }
}
tr.attr('data-mounttype', fileData.mountType);
}
@@ -1065,7 +1068,7 @@
nameSpan.tooltip({placement: 'right'});
}
// dirs can show the number of uploaded files
- if (mime !== 'httpd/unix-directory') {
+ if (mime === 'httpd/unix-directory') {
linkElem.append($('<span></span>').attr({
'class': 'uploadtext',
'currentUploads': 0
@@ -1380,7 +1383,7 @@
* Returns list of webdav properties to request
*/
_getWebdavProperties: function() {
- return this.filesClient.getPropfindProperties();
+ return [].concat(this.filesClient.getPropfindProperties());
},
/**
@@ -2069,7 +2072,7 @@
*/
showFileBusyState: function(files, state) {
var self = this;
- if (!_.isArray(files)) {
+ if (!_.isArray(files) && !files.is) {
files = [files];
}
@@ -2077,10 +2080,13 @@
state = true;
}
- _.each(files, function($tr) {
+ _.each(files, function(fileName) {
// jquery element already ?
- if (!$tr.is) {
- $tr = self.findFileEl($tr);
+ var $tr;
+ if (_.isString(fileName)) {
+ $tr = self.findFileEl(fileName);
+ } else {
+ $tr = $(fileName);
}
var $thumbEl = $tr.find('.thumbnail');
@@ -2465,6 +2471,7 @@
}
});
fileUploadStart.on('fileuploadadd', function(e, data) {
+ console.log('XXXXXXX');
OC.Upload.log('filelist handle fileuploadadd', e, data);
//finish delete if we are uploading a deleted file
@@ -2484,8 +2491,7 @@
var translatedText = n('files', 'Uploading %n file', 'Uploading %n files', currentUploads);
if (currentUploads === 1) {
- var img = OC.imagePath('core', 'loading.gif');
- data.context.find('.thumbnail').css('background-image', 'url(' + img + ')');
+ self.showFileBusyState(uploadText.closest('tr'), true);
uploadText.text(translatedText);
uploadText.show();
} else {
@@ -2523,8 +2529,7 @@
uploadText.attr('currentUploads', currentUploads);
var translatedText = n('files', 'Uploading %n file', 'Uploading %n files', currentUploads);
if (currentUploads === 0) {
- var img = OC.imagePath('core', 'filetypes/folder');
- data.context.find('.thumbnail').css('background-image', 'url(' + img + ')');
+ self.showFileBusyState(uploadText.closest('tr'), false);
uploadText.text(translatedText);
uploadText.hide();
} else {
@@ -2601,18 +2606,15 @@
}
}
});
- fileUploadStart.on('fileuploadstop', function(e, data) {
- OC.Upload.log('filelist handle fileuploadstop', e, data);
+ fileUploadStart.on('fileuploadstop', function() {
+ OC.Upload.log('filelist handle fileuploadstop');
+
+ //cleanup uploading to a dir
+ var uploadText = self.$fileList.find('tr .uploadtext');
+ self.showFileBusyState(uploadText.closest('tr'), false);
+ uploadText.fadeOut();
+ uploadText.attr('currentUploads', 0);
- //if user pressed cancel hide upload chrome
- if (data.errorThrown === 'abort') {
- //cleanup uploading to a dir
- var uploadText = $('tr .uploadtext');
- var img = OC.imagePath('core', 'filetypes/folder');
- uploadText.parents('td.filename').find('.thumbnail').css('background-image', 'url(' + img + ')');
- uploadText.fadeOut();
- uploadText.attr('currentUploads', 0);
- }
self.updateStorageStatistics();
});
fileUploadStart.on('fileuploadfail', function(e, data) {
@@ -2621,9 +2623,8 @@
//if user pressed cancel hide upload chrome
if (data.errorThrown === 'abort') {
//cleanup uploading to a dir
- var uploadText = $('tr .uploadtext');
- var img = OC.imagePath('core', 'filetypes/folder');
- uploadText.parents('td.filename').find('.thumbnail').css('background-image', 'url(' + img + ')');
+ var uploadText = self.$fileList.find('tr .uploadtext');
+ self.showFileBusyState(uploadText.closest('tr'), false);
uploadText.fadeOut();
uploadText.attr('currentUploads', 0);
}
diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js
index 953267393b2..021c6b52b32 100644
--- a/apps/files/l10n/ar.js
+++ b/apps/files/l10n/ar.js
@@ -34,6 +34,7 @@ OC.L10N.register(
"Download" : "تحميل",
"Rename" : "إعادة التسمية",
"Delete" : "حذف ",
+ "Unshare" : "إلغاء المشاركة",
"Details" : "تفاصيل",
"Select" : "اختار",
"Pending" : "قيد الانتظار",
diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json
index 245fe9a0b9e..53385598c24 100644
--- a/apps/files/l10n/ar.json
+++ b/apps/files/l10n/ar.json
@@ -32,6 +32,7 @@
"Download" : "تحميل",
"Rename" : "إعادة التسمية",
"Delete" : "حذف ",
+ "Unshare" : "إلغاء المشاركة",
"Details" : "تفاصيل",
"Select" : "اختار",
"Pending" : "قيد الانتظار",
diff --git a/apps/files/l10n/ast.js b/apps/files/l10n/ast.js
index 8fc63c1ac35..637adcebc75 100644
--- a/apps/files/l10n/ast.js
+++ b/apps/files/l10n/ast.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Descargar",
"Rename" : "Renomar",
"Delete" : "Desaniciar",
+ "Disconnect storage" : "Desconeutar almacenamientu",
+ "Unshare" : "Dexar de compartir",
"Details" : "Detalles",
"Select" : "Esbillar",
"Pending" : "Pendiente",
diff --git a/apps/files/l10n/ast.json b/apps/files/l10n/ast.json
index 33c119771f7..352fbd9fac3 100644
--- a/apps/files/l10n/ast.json
+++ b/apps/files/l10n/ast.json
@@ -32,6 +32,8 @@
"Download" : "Descargar",
"Rename" : "Renomar",
"Delete" : "Desaniciar",
+ "Disconnect storage" : "Desconeutar almacenamientu",
+ "Unshare" : "Dexar de compartir",
"Details" : "Detalles",
"Select" : "Esbillar",
"Pending" : "Pendiente",
diff --git a/apps/files/l10n/az.js b/apps/files/l10n/az.js
index cf7d81063ce..302bb051407 100644
--- a/apps/files/l10n/az.js
+++ b/apps/files/l10n/az.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Yüklə",
"Rename" : "Adı dəyiş",
"Delete" : "Sil",
+ "Disconnect storage" : "Daşıyıcını ayır",
+ "Unshare" : "Paylaşımı durdur",
"Details" : "Detallar",
"Select" : "Seç",
"Pending" : "Gözləmə",
diff --git a/apps/files/l10n/az.json b/apps/files/l10n/az.json
index f2c45fda2f7..b213c86cb2f 100644
--- a/apps/files/l10n/az.json
+++ b/apps/files/l10n/az.json
@@ -32,6 +32,8 @@
"Download" : "Yüklə",
"Rename" : "Adı dəyiş",
"Delete" : "Sil",
+ "Disconnect storage" : "Daşıyıcını ayır",
+ "Unshare" : "Paylaşımı durdur",
"Details" : "Detallar",
"Select" : "Seç",
"Pending" : "Gözləmə",
diff --git a/apps/files/l10n/bn_BD.js b/apps/files/l10n/bn_BD.js
index b968a225da7..0ee56888df0 100644
--- a/apps/files/l10n/bn_BD.js
+++ b/apps/files/l10n/bn_BD.js
@@ -26,6 +26,7 @@ OC.L10N.register(
"Download" : "ডাউনলোড",
"Rename" : "পূনঃনামকরণ",
"Delete" : "মুছে",
+ "Unshare" : "ভাগাভাগি বাতিল ",
"Details" : "বিস্তারিত",
"Pending" : "মুলতুবি",
"Name" : "রাম",
diff --git a/apps/files/l10n/bn_BD.json b/apps/files/l10n/bn_BD.json
index bed559330ad..15ec2b4b826 100644
--- a/apps/files/l10n/bn_BD.json
+++ b/apps/files/l10n/bn_BD.json
@@ -24,6 +24,7 @@
"Download" : "ডাউনলোড",
"Rename" : "পূনঃনামকরণ",
"Delete" : "মুছে",
+ "Unshare" : "ভাগাভাগি বাতিল ",
"Details" : "বিস্তারিত",
"Pending" : "মুলতুবি",
"Name" : "রাম",
diff --git a/apps/files/l10n/bs.js b/apps/files/l10n/bs.js
index 9da51ece871..278b6371771 100644
--- a/apps/files/l10n/bs.js
+++ b/apps/files/l10n/bs.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Preuzmi",
"Rename" : "Preimenuj",
"Delete" : "Izbriši",
+ "Disconnect storage" : "Diskonektuj pohranu",
+ "Unshare" : "Prestani dijeliti",
"Select" : "Izaberi",
"Pending" : "Na čekanju",
"Unable to determine date" : "Nemoguće odrediti datum",
diff --git a/apps/files/l10n/bs.json b/apps/files/l10n/bs.json
index 095fe47048d..678bedcbe36 100644
--- a/apps/files/l10n/bs.json
+++ b/apps/files/l10n/bs.json
@@ -32,6 +32,8 @@
"Download" : "Preuzmi",
"Rename" : "Preimenuj",
"Delete" : "Izbriši",
+ "Disconnect storage" : "Diskonektuj pohranu",
+ "Unshare" : "Prestani dijeliti",
"Select" : "Izaberi",
"Pending" : "Na čekanju",
"Unable to determine date" : "Nemoguće odrediti datum",
diff --git a/apps/files/l10n/de_AT.js b/apps/files/l10n/de_AT.js
index d7a77f9ee40..783ff4aaa6b 100644
--- a/apps/files/l10n/de_AT.js
+++ b/apps/files/l10n/de_AT.js
@@ -5,6 +5,7 @@ OC.L10N.register(
"Files" : "Dateien",
"Download" : "Herunterladen",
"Delete" : "Löschen",
+ "Unshare" : "Teilung zurücknehmen",
"Details" : "Details",
"New folder" : "Neuer Ordner",
"Upload" : "Hochladen",
diff --git a/apps/files/l10n/de_AT.json b/apps/files/l10n/de_AT.json
index 7381a96665a..2d54751bdf6 100644
--- a/apps/files/l10n/de_AT.json
+++ b/apps/files/l10n/de_AT.json
@@ -3,6 +3,7 @@
"Files" : "Dateien",
"Download" : "Herunterladen",
"Delete" : "Löschen",
+ "Unshare" : "Teilung zurücknehmen",
"Details" : "Details",
"New folder" : "Neuer Ordner",
"Upload" : "Hochladen",
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index d65d062c75d..517799c1bcb 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Herunterladen",
"Rename" : "Umbenennen",
"Delete" : "Löschen",
+ "Disconnect storage" : "Speicher trennen",
+ "Unshare" : "Freigabe aufheben",
"Details" : "Details",
"Select" : "Auswählen",
"Pending" : "Ausstehend",
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index 79467fc7642..90e499bec2f 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -32,6 +32,8 @@
"Download" : "Herunterladen",
"Rename" : "Umbenennen",
"Delete" : "Löschen",
+ "Disconnect storage" : "Speicher trennen",
+ "Unshare" : "Freigabe aufheben",
"Details" : "Details",
"Select" : "Auswählen",
"Pending" : "Ausstehend",
diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js
index f60e842199f..265381cd670 100644
--- a/apps/files/l10n/el.js
+++ b/apps/files/l10n/el.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Λήψη",
"Rename" : "Μετονομασία",
"Delete" : "Διαγραφή",
+ "Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος",
+ "Unshare" : "Διακοπή διαμοιρασμού",
"Details" : "Λεπτομέρειες",
"Select" : "Επιλογή",
"Pending" : "Εκκρεμεί",
diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json
index 15cb56c87d1..1f0d997b3da 100644
--- a/apps/files/l10n/el.json
+++ b/apps/files/l10n/el.json
@@ -32,6 +32,8 @@
"Download" : "Λήψη",
"Rename" : "Μετονομασία",
"Delete" : "Διαγραφή",
+ "Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος",
+ "Unshare" : "Διακοπή διαμοιρασμού",
"Details" : "Λεπτομέρειες",
"Select" : "Επιλογή",
"Pending" : "Εκκρεμεί",
diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js
index a190c45e846..96c5acf9170 100644
--- a/apps/files/l10n/en_GB.js
+++ b/apps/files/l10n/en_GB.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Download",
"Rename" : "Rename",
"Delete" : "Delete",
+ "Disconnect storage" : "Disconnect storage",
+ "Unshare" : "Unshare",
"Details" : "Details",
"Select" : "Select",
"Pending" : "Pending",
diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json
index ca8a60ec73b..4b0762f8b70 100644
--- a/apps/files/l10n/en_GB.json
+++ b/apps/files/l10n/en_GB.json
@@ -32,6 +32,8 @@
"Download" : "Download",
"Rename" : "Rename",
"Delete" : "Delete",
+ "Disconnect storage" : "Disconnect storage",
+ "Unshare" : "Unshare",
"Details" : "Details",
"Select" : "Select",
"Pending" : "Pending",
diff --git a/apps/files/l10n/eo.js b/apps/files/l10n/eo.js
index dbdd0422911..398d2f669b0 100644
--- a/apps/files/l10n/eo.js
+++ b/apps/files/l10n/eo.js
@@ -28,6 +28,7 @@ OC.L10N.register(
"Download" : "Elŝuti",
"Rename" : "Alinomigi",
"Delete" : "Forigi",
+ "Unshare" : "Malkunhavigi",
"Details" : "Detaloj",
"Select" : "Elekti",
"Pending" : "Traktotaj",
diff --git a/apps/files/l10n/eo.json b/apps/files/l10n/eo.json
index b858ccece4d..2a76d0ab2c9 100644
--- a/apps/files/l10n/eo.json
+++ b/apps/files/l10n/eo.json
@@ -26,6 +26,7 @@
"Download" : "Elŝuti",
"Rename" : "Alinomigi",
"Delete" : "Forigi",
+ "Unshare" : "Malkunhavigi",
"Details" : "Detaloj",
"Select" : "Elekti",
"Pending" : "Traktotaj",
diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js
index 7bc628b8f9b..4b0ddbb7265 100644
--- a/apps/files/l10n/es.js
+++ b/apps/files/l10n/es.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Descargar",
"Rename" : "Renombrar",
"Delete" : "Eliminar",
+ "Disconnect storage" : "Desconectar almacenamiento",
+ "Unshare" : "Dejar de compartir",
"Details" : "Detalles",
"Select" : "Seleccionar",
"Pending" : "Pendiente",
@@ -97,6 +99,7 @@ OC.L10N.register(
"Maximum upload size" : "Tamaño máximo de subida",
"max. possible: " : "máx. posible:",
"Save" : "Guardar",
+ "Missing permissions to edit from here." : "Faltan permisos para poder editar desde aquí.",
"Settings" : "Ajustes",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use esta URL <a href=\"%s\" target=\"_blank\">para acceder via WebDAV</a>",
diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json
index 27ebcb1da46..09411bc5b2a 100644
--- a/apps/files/l10n/es.json
+++ b/apps/files/l10n/es.json
@@ -32,6 +32,8 @@
"Download" : "Descargar",
"Rename" : "Renombrar",
"Delete" : "Eliminar",
+ "Disconnect storage" : "Desconectar almacenamiento",
+ "Unshare" : "Dejar de compartir",
"Details" : "Detalles",
"Select" : "Seleccionar",
"Pending" : "Pendiente",
@@ -95,6 +97,7 @@
"Maximum upload size" : "Tamaño máximo de subida",
"max. possible: " : "máx. posible:",
"Save" : "Guardar",
+ "Missing permissions to edit from here." : "Faltan permisos para poder editar desde aquí.",
"Settings" : "Ajustes",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use esta URL <a href=\"%s\" target=\"_blank\">para acceder via WebDAV</a>",
diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js
index 0e4dbddeda9..9d4924d1d50 100644
--- a/apps/files/l10n/es_MX.js
+++ b/apps/files/l10n/es_MX.js
@@ -28,6 +28,7 @@ OC.L10N.register(
"Download" : "Descargar",
"Rename" : "Renombrar",
"Delete" : "Eliminar",
+ "Unshare" : "Dejar de compartir",
"Details" : "Detalles",
"Pending" : "Pendiente",
"Name" : "Nombre",
diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json
index cb903ddd9dc..9abf30f0c7c 100644
--- a/apps/files/l10n/es_MX.json
+++ b/apps/files/l10n/es_MX.json
@@ -26,6 +26,7 @@
"Download" : "Descargar",
"Rename" : "Renombrar",
"Delete" : "Eliminar",
+ "Unshare" : "Dejar de compartir",
"Details" : "Detalles",
"Pending" : "Pendiente",
"Name" : "Nombre",
diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js
index f136bd300b1..f577fa663fc 100644
--- a/apps/files/l10n/et_EE.js
+++ b/apps/files/l10n/et_EE.js
@@ -34,12 +34,19 @@ OC.L10N.register(
"Download" : "Lae alla",
"Rename" : "Nimeta ümber",
"Delete" : "Kustuta",
+ "Disconnect storage" : "Ühenda andmehoidla lahti.",
+ "Unshare" : "Lõpeta jagamine",
"Details" : "Üksikasjad",
"Select" : "Vali",
"Pending" : "Ootel",
"Unable to determine date" : "Kuupäeva tuvastamine ei õnnestunud",
"This operation is forbidden" : "See toiming on keelatud",
"This directory is unavailable, please check the logs or contact the administrator" : "See kaust pole saadaval. Palun kontrolli logifaile või võta ühendust administraatoriga",
+ "Could not move \"{file}\"" : "\"{file}\" liigutamine ebaõnnestus",
+ "{newName} already exists" : "{newName} on juba olemas",
+ "Could not rename \"{fileName}\"" : "\"{fileName}\" ümbernimetamine ebaõnnestus",
+ "Could not create file \"{file}\"" : "Faili \"{file}\" loomine ebaõnnestus",
+ "Error deleting file \"{fileName}\"." : "Tõrge faili \"{fileName}\" kustutamisel.",
"No entries in this folder match '{filter}'" : "Ükski sissekanne ei kattu filtriga '{filter}'",
"Name" : "Nimi",
"Size" : "Suurus",
@@ -62,6 +69,7 @@ OC.L10N.register(
"Favorite" : "Lemmik",
"Folder" : "Kaust",
"New folder" : "Uus kaust",
+ "{newname} already exists" : "{newname} on juba olemas",
"Upload" : "Lae üles",
"An error occurred while trying to update the tags" : "Siltide uuendamisel tekkis tõrge",
"A new file or folder has been <strong>created</strong>" : "Uus fail või kataloog on <strong>loodud</strong>",
@@ -96,6 +104,7 @@ OC.L10N.register(
"Currently scanning" : "Praegu skännimisel",
"No favorites" : "Lemmikuid pole",
"Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks",
- "Text file" : "Tekstifail"
+ "Text file" : "Tekstifail",
+ "New text file.txt" : "Uus tekstifail.txt"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json
index 6e1961770c9..078b8d2d6d7 100644
--- a/apps/files/l10n/et_EE.json
+++ b/apps/files/l10n/et_EE.json
@@ -32,12 +32,19 @@
"Download" : "Lae alla",
"Rename" : "Nimeta ümber",
"Delete" : "Kustuta",
+ "Disconnect storage" : "Ühenda andmehoidla lahti.",
+ "Unshare" : "Lõpeta jagamine",
"Details" : "Üksikasjad",
"Select" : "Vali",
"Pending" : "Ootel",
"Unable to determine date" : "Kuupäeva tuvastamine ei õnnestunud",
"This operation is forbidden" : "See toiming on keelatud",
"This directory is unavailable, please check the logs or contact the administrator" : "See kaust pole saadaval. Palun kontrolli logifaile või võta ühendust administraatoriga",
+ "Could not move \"{file}\"" : "\"{file}\" liigutamine ebaõnnestus",
+ "{newName} already exists" : "{newName} on juba olemas",
+ "Could not rename \"{fileName}\"" : "\"{fileName}\" ümbernimetamine ebaõnnestus",
+ "Could not create file \"{file}\"" : "Faili \"{file}\" loomine ebaõnnestus",
+ "Error deleting file \"{fileName}\"." : "Tõrge faili \"{fileName}\" kustutamisel.",
"No entries in this folder match '{filter}'" : "Ükski sissekanne ei kattu filtriga '{filter}'",
"Name" : "Nimi",
"Size" : "Suurus",
@@ -60,6 +67,7 @@
"Favorite" : "Lemmik",
"Folder" : "Kaust",
"New folder" : "Uus kaust",
+ "{newname} already exists" : "{newname} on juba olemas",
"Upload" : "Lae üles",
"An error occurred while trying to update the tags" : "Siltide uuendamisel tekkis tõrge",
"A new file or folder has been <strong>created</strong>" : "Uus fail või kataloog on <strong>loodud</strong>",
@@ -94,6 +102,7 @@
"Currently scanning" : "Praegu skännimisel",
"No favorites" : "Lemmikuid pole",
"Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks",
- "Text file" : "Tekstifail"
+ "Text file" : "Tekstifail",
+ "New text file.txt" : "Uus tekstifail.txt"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js
index 9add1516c46..d7b9935ac5e 100644
--- a/apps/files/l10n/eu.js
+++ b/apps/files/l10n/eu.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Deskargatu",
"Rename" : "Berrizendatu",
"Delete" : "Ezabatu",
+ "Disconnect storage" : "Deskonektatu biltegia",
+ "Unshare" : "Ez elkarbanatu",
"Details" : "Xehetasunak",
"Select" : "hautatu",
"Pending" : "Zain",
diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json
index 96943f33a9a..71dc13b5741 100644
--- a/apps/files/l10n/eu.json
+++ b/apps/files/l10n/eu.json
@@ -32,6 +32,8 @@
"Download" : "Deskargatu",
"Rename" : "Berrizendatu",
"Delete" : "Ezabatu",
+ "Disconnect storage" : "Deskonektatu biltegia",
+ "Unshare" : "Ez elkarbanatu",
"Details" : "Xehetasunak",
"Select" : "hautatu",
"Pending" : "Zain",
diff --git a/apps/files/l10n/fa.js b/apps/files/l10n/fa.js
index 46cbbc376ab..5f6c49e742a 100644
--- a/apps/files/l10n/fa.js
+++ b/apps/files/l10n/fa.js
@@ -34,6 +34,7 @@ OC.L10N.register(
"Download" : "دانلود",
"Rename" : "تغییرنام",
"Delete" : "حذف",
+ "Unshare" : "لغو اشتراک",
"Details" : "جزئیات",
"Select" : "انتخاب",
"Pending" : "در انتظار",
diff --git a/apps/files/l10n/fa.json b/apps/files/l10n/fa.json
index b9e32d69e37..a4d0add25ba 100644
--- a/apps/files/l10n/fa.json
+++ b/apps/files/l10n/fa.json
@@ -32,6 +32,7 @@
"Download" : "دانلود",
"Rename" : "تغییرنام",
"Delete" : "حذف",
+ "Unshare" : "لغو اشتراک",
"Details" : "جزئیات",
"Select" : "انتخاب",
"Pending" : "در انتظار",
diff --git a/apps/files/l10n/fi_FI.js b/apps/files/l10n/fi_FI.js
index 8bebb81fd35..5e1327f7556 100644
--- a/apps/files/l10n/fi_FI.js
+++ b/apps/files/l10n/fi_FI.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Lataa",
"Rename" : "Nimeä uudelleen",
"Delete" : "Poista",
+ "Disconnect storage" : "Katkaise yhteys tallennustilaan",
+ "Unshare" : "Peru jakaminen",
"Details" : "Tiedot",
"Select" : "Valitse",
"Pending" : "Odottaa",
diff --git a/apps/files/l10n/fi_FI.json b/apps/files/l10n/fi_FI.json
index 64b0a886b73..baf6c5d4499 100644
--- a/apps/files/l10n/fi_FI.json
+++ b/apps/files/l10n/fi_FI.json
@@ -32,6 +32,8 @@
"Download" : "Lataa",
"Rename" : "Nimeä uudelleen",
"Delete" : "Poista",
+ "Disconnect storage" : "Katkaise yhteys tallennustilaan",
+ "Unshare" : "Peru jakaminen",
"Details" : "Tiedot",
"Select" : "Valitse",
"Pending" : "Odottaa",
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index 6af58e93094..16f95572933 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Télécharger",
"Rename" : "Renommer",
"Delete" : "Supprimer",
+ "Disconnect storage" : "Déconnecter ce support de stockage",
+ "Unshare" : "Ne plus partager",
"Details" : "Détails",
"Select" : "Sélectionner",
"Pending" : "En attente",
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index ba25b77e3df..3f8cdf95538 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -32,6 +32,8 @@
"Download" : "Télécharger",
"Rename" : "Renommer",
"Delete" : "Supprimer",
+ "Disconnect storage" : "Déconnecter ce support de stockage",
+ "Unshare" : "Ne plus partager",
"Details" : "Détails",
"Select" : "Sélectionner",
"Pending" : "En attente",
diff --git a/apps/files/l10n/ia.js b/apps/files/l10n/ia.js
index a1548e6b732..8310334287f 100644
--- a/apps/files/l10n/ia.js
+++ b/apps/files/l10n/ia.js
@@ -10,6 +10,7 @@ OC.L10N.register(
"Close" : "Clauder",
"Download" : "Discargar",
"Delete" : "Deler",
+ "Unshare" : "Leva compartir",
"Name" : "Nomine",
"Size" : "Dimension",
"Modified" : "Modificate",
diff --git a/apps/files/l10n/ia.json b/apps/files/l10n/ia.json
index bbc3f4bc02a..eee4980e34a 100644
--- a/apps/files/l10n/ia.json
+++ b/apps/files/l10n/ia.json
@@ -8,6 +8,7 @@
"Close" : "Clauder",
"Download" : "Discargar",
"Delete" : "Deler",
+ "Unshare" : "Leva compartir",
"Name" : "Nomine",
"Size" : "Dimension",
"Modified" : "Modificate",
diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js
index 93ec698cfa4..07b33195d48 100644
--- a/apps/files/l10n/id.js
+++ b/apps/files/l10n/id.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Unduh",
"Rename" : "Ubah nama",
"Delete" : "Hapus",
+ "Disconnect storage" : "Memutuskan penyimpaan",
+ "Unshare" : "Batalkan berbagi",
"Details" : "Rincian",
"Select" : "Pilih",
"Pending" : "Tertunda",
diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json
index dca3e7bd163..efe7c4559e7 100644
--- a/apps/files/l10n/id.json
+++ b/apps/files/l10n/id.json
@@ -32,6 +32,8 @@
"Download" : "Unduh",
"Rename" : "Ubah nama",
"Delete" : "Hapus",
+ "Disconnect storage" : "Memutuskan penyimpaan",
+ "Unshare" : "Batalkan berbagi",
"Details" : "Rincian",
"Select" : "Pilih",
"Pending" : "Tertunda",
diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js
index 967e205145f..68b0ad573a5 100644
--- a/apps/files/l10n/is.js
+++ b/apps/files/l10n/is.js
@@ -17,6 +17,7 @@ OC.L10N.register(
"Download" : "Niðurhal",
"Rename" : "Endurskýra",
"Delete" : "Eyða",
+ "Unshare" : "Hætta deilingu",
"Select" : "Velja",
"Pending" : "Bíður",
"Name" : "Nafn",
diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json
index caff3b037d5..44153e94106 100644
--- a/apps/files/l10n/is.json
+++ b/apps/files/l10n/is.json
@@ -15,6 +15,7 @@
"Download" : "Niðurhal",
"Rename" : "Endurskýra",
"Delete" : "Eyða",
+ "Unshare" : "Hætta deilingu",
"Select" : "Velja",
"Pending" : "Bíður",
"Name" : "Nafn",
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js
index 93a013492a2..d3a567e1d18 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Scarica",
"Rename" : "Rinomina",
"Delete" : "Elimina",
+ "Disconnect storage" : "Disconnetti archiviazione",
+ "Unshare" : "Rimuovi condivisione",
"Details" : "Dettagli",
"Select" : "Seleziona",
"Pending" : "In corso",
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index 25d3834b0a3..611de295147 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -32,6 +32,8 @@
"Download" : "Scarica",
"Rename" : "Rinomina",
"Delete" : "Elimina",
+ "Disconnect storage" : "Disconnetti archiviazione",
+ "Unshare" : "Rimuovi condivisione",
"Details" : "Dettagli",
"Select" : "Seleziona",
"Pending" : "In corso",
diff --git a/apps/files/l10n/km.js b/apps/files/l10n/km.js
index f03aa9c4693..55080926fc3 100644
--- a/apps/files/l10n/km.js
+++ b/apps/files/l10n/km.js
@@ -10,6 +10,7 @@ OC.L10N.register(
"Download" : "ទាញយក",
"Rename" : "ប្ដូរ​ឈ្មោះ",
"Delete" : "លុប",
+ "Unshare" : "លែង​ចែក​រំលែក",
"Details" : "ព័ត៌មាន​លម្អិត",
"Pending" : "កំពុង​រង់ចាំ",
"Name" : "ឈ្មោះ",
diff --git a/apps/files/l10n/km.json b/apps/files/l10n/km.json
index f050b00b795..c1e9159ee88 100644
--- a/apps/files/l10n/km.json
+++ b/apps/files/l10n/km.json
@@ -8,6 +8,7 @@
"Download" : "ទាញយក",
"Rename" : "ប្ដូរ​ឈ្មោះ",
"Delete" : "លុប",
+ "Unshare" : "លែង​ចែក​រំលែក",
"Details" : "ព័ត៌មាន​លម្អិត",
"Pending" : "កំពុង​រង់ចាំ",
"Name" : "ឈ្មោះ",
diff --git a/apps/files/l10n/kn.js b/apps/files/l10n/kn.js
index 840837bdad3..f9fb8977f93 100644
--- a/apps/files/l10n/kn.js
+++ b/apps/files/l10n/kn.js
@@ -25,6 +25,8 @@ OC.L10N.register(
"Download" : "ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ",
"Rename" : "ಮರುಹೆಸರಿಸು",
"Delete" : "ಅಳಿಸಿ",
+ "Disconnect storage" : "ಸಂಗ್ರಹ ಸಾಧನವನ್ನು ತೆಗೆದುಹಾಕಿ",
+ "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ",
"Select" : "ಆಯ್ಕೆ ಮಾಡಿ",
"Pending" : "ಬಾಕಿ ಇದೆ",
"Unable to determine date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕ ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
diff --git a/apps/files/l10n/kn.json b/apps/files/l10n/kn.json
index d6345be732c..12446a3f8b4 100644
--- a/apps/files/l10n/kn.json
+++ b/apps/files/l10n/kn.json
@@ -23,6 +23,8 @@
"Download" : "ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ",
"Rename" : "ಮರುಹೆಸರಿಸು",
"Delete" : "ಅಳಿಸಿ",
+ "Disconnect storage" : "ಸಂಗ್ರಹ ಸಾಧನವನ್ನು ತೆಗೆದುಹಾಕಿ",
+ "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ",
"Select" : "ಆಯ್ಕೆ ಮಾಡಿ",
"Pending" : "ಬಾಕಿ ಇದೆ",
"Unable to determine date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕ ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js
index 13e917e3cfa..e6d0f0a1b89 100644
--- a/apps/files/l10n/ko.js
+++ b/apps/files/l10n/ko.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "다운로드",
"Rename" : "이름 바꾸기",
"Delete" : "삭제",
+ "Disconnect storage" : "저장소 연결 해제",
+ "Unshare" : "공유 해제",
"Details" : "자세한 정보",
"Select" : "선택",
"Pending" : "대기 중",
diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json
index 1e77ab1b9bc..e695b9cd42c 100644
--- a/apps/files/l10n/ko.json
+++ b/apps/files/l10n/ko.json
@@ -32,6 +32,8 @@
"Download" : "다운로드",
"Rename" : "이름 바꾸기",
"Delete" : "삭제",
+ "Disconnect storage" : "저장소 연결 해제",
+ "Unshare" : "공유 해제",
"Details" : "자세한 정보",
"Select" : "선택",
"Pending" : "대기 중",
diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js
index b4001e0c8ea..e93fb079d56 100644
--- a/apps/files/l10n/lt_LT.js
+++ b/apps/files/l10n/lt_LT.js
@@ -40,6 +40,17 @@ OC.L10N.register(
"Unable to determine date" : "Nepavyksta nustatyti datos",
"This operation is forbidden" : "Ši operacija yra uždrausta",
"This directory is unavailable, please check the logs or contact the administrator" : "Katalogas nepasiekiamas, prašome peržiūrėti žurnalo įrašus arba susisiekti su administratoriumi",
+ "Could not move \"{file}\", target exists" : "Nepavyko perkelti \"{file}\", toks jau egzistuoja",
+ "Could not move \"{file}\"" : "Nepavyko perkelti \"{file}\"",
+ "{newName} already exists" : "{newName} jau egzistuoja",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Nepavyko pervadinti failo \"{fileName}\", nes jis jau nebeegzistuoja",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Pavadinimas \"{targetName}\" jau naudojamas aplanke \"{dir}\". Prašome pasirinkti kitokį pavadinimą.",
+ "Could not rename \"{fileName}\"" : "Nepavyko pervadinti failo \"{fileName}\"",
+ "Could not create file \"{file}\"" : "Nepavyko sukurti failo \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "Nepavyko sukurti failo \"{file}\" - failas su tokiu pavadinimu jau egzistuoja",
+ "Could not create folder \"{dir}\"" : "Nepavyko sukurti aplanko \"{dir}\"",
+ "Could not create folder \"{dir}\" because it already exists" : "Nepavyko sukurti aplanko \"{dir}\"- aplankas su tokiu pavadinimu jau egzistuoja",
+ "Error deleting file \"{fileName}\"." : "Klaida trinant failą \"{fileName}\".",
"No entries in this folder match '{filter}'" : "Nėra įrašų šiame aplanko atitikmeniui „{filter}“",
"Name" : "Pavadinimas",
"Size" : "Dydis",
diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json
index ba8610da86b..e6724be98cf 100644
--- a/apps/files/l10n/lt_LT.json
+++ b/apps/files/l10n/lt_LT.json
@@ -38,6 +38,17 @@
"Unable to determine date" : "Nepavyksta nustatyti datos",
"This operation is forbidden" : "Ši operacija yra uždrausta",
"This directory is unavailable, please check the logs or contact the administrator" : "Katalogas nepasiekiamas, prašome peržiūrėti žurnalo įrašus arba susisiekti su administratoriumi",
+ "Could not move \"{file}\", target exists" : "Nepavyko perkelti \"{file}\", toks jau egzistuoja",
+ "Could not move \"{file}\"" : "Nepavyko perkelti \"{file}\"",
+ "{newName} already exists" : "{newName} jau egzistuoja",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Nepavyko pervadinti failo \"{fileName}\", nes jis jau nebeegzistuoja",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Pavadinimas \"{targetName}\" jau naudojamas aplanke \"{dir}\". Prašome pasirinkti kitokį pavadinimą.",
+ "Could not rename \"{fileName}\"" : "Nepavyko pervadinti failo \"{fileName}\"",
+ "Could not create file \"{file}\"" : "Nepavyko sukurti failo \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "Nepavyko sukurti failo \"{file}\" - failas su tokiu pavadinimu jau egzistuoja",
+ "Could not create folder \"{dir}\"" : "Nepavyko sukurti aplanko \"{dir}\"",
+ "Could not create folder \"{dir}\" because it already exists" : "Nepavyko sukurti aplanko \"{dir}\"- aplankas su tokiu pavadinimu jau egzistuoja",
+ "Error deleting file \"{fileName}\"." : "Klaida trinant failą \"{fileName}\".",
"No entries in this folder match '{filter}'" : "Nėra įrašų šiame aplanko atitikmeniui „{filter}“",
"Name" : "Pavadinimas",
"Size" : "Dydis",
diff --git a/apps/files/l10n/mk.js b/apps/files/l10n/mk.js
index 92616a372a3..7a387afee66 100644
--- a/apps/files/l10n/mk.js
+++ b/apps/files/l10n/mk.js
@@ -54,6 +54,7 @@ OC.L10N.register(
"Settings" : "Подесувања",
"WebDAV" : "WebDAV",
"Cancel upload" : "Откажи прикачување",
+ "No entries found in this folder" : "Нема ништо во оваа папка",
"Upload too large" : "Фајлот кој се вчитува е преголем",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Датотеките кои се обидувате да ги подигнете ја надминуваат максималната големина за подигнување датотеки на овој сервер.",
"Files are being scanned, please wait." : "Се скенираат датотеки, ве молам почекајте.",
diff --git a/apps/files/l10n/mk.json b/apps/files/l10n/mk.json
index 147707256c6..acf8f546d73 100644
--- a/apps/files/l10n/mk.json
+++ b/apps/files/l10n/mk.json
@@ -52,6 +52,7 @@
"Settings" : "Подесувања",
"WebDAV" : "WebDAV",
"Cancel upload" : "Откажи прикачување",
+ "No entries found in this folder" : "Нема ништо во оваа папка",
"Upload too large" : "Фајлот кој се вчитува е преголем",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Датотеките кои се обидувате да ги подигнете ја надминуваат максималната големина за подигнување датотеки на овој сервер.",
"Files are being scanned, please wait." : "Се скенираат датотеки, ве молам почекајте.",
diff --git a/apps/files/l10n/nb_NO.js b/apps/files/l10n/nb_NO.js
index 9d01ad626b7..7f933c2e6a0 100644
--- a/apps/files/l10n/nb_NO.js
+++ b/apps/files/l10n/nb_NO.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Last ned",
"Rename" : "Gi nytt navn",
"Delete" : "Slett",
+ "Disconnect storage" : "Koble fra lagring",
+ "Unshare" : "Avslutt deling",
"Details" : "Detaljer",
"Select" : "Velg",
"Pending" : "Ventende",
diff --git a/apps/files/l10n/nb_NO.json b/apps/files/l10n/nb_NO.json
index 32eb320296c..ca895007f62 100644
--- a/apps/files/l10n/nb_NO.json
+++ b/apps/files/l10n/nb_NO.json
@@ -32,6 +32,8 @@
"Download" : "Last ned",
"Rename" : "Gi nytt navn",
"Delete" : "Slett",
+ "Disconnect storage" : "Koble fra lagring",
+ "Unshare" : "Avslutt deling",
"Details" : "Detaljer",
"Select" : "Velg",
"Pending" : "Ventende",
diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js
index 4169c053269..d64dc68c474 100644
--- a/apps/files/l10n/nl.js
+++ b/apps/files/l10n/nl.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Downloaden",
"Rename" : "Naam wijzigen",
"Delete" : "Verwijderen",
+ "Disconnect storage" : "Verbinding met opslag verbreken",
+ "Unshare" : "Stop met delen",
"Details" : "Details",
"Select" : "Selecteer",
"Pending" : "In behandeling",
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index 07210b13829..1268cc10863 100644
--- a/apps/files/l10n/nl.json
+++ b/apps/files/l10n/nl.json
@@ -32,6 +32,8 @@
"Download" : "Downloaden",
"Rename" : "Naam wijzigen",
"Delete" : "Verwijderen",
+ "Disconnect storage" : "Verbinding met opslag verbreken",
+ "Unshare" : "Stop met delen",
"Details" : "Details",
"Select" : "Selecteer",
"Pending" : "In behandeling",
diff --git a/apps/files/l10n/nn_NO.js b/apps/files/l10n/nn_NO.js
index efe3707c213..519387d6baf 100644
--- a/apps/files/l10n/nn_NO.js
+++ b/apps/files/l10n/nn_NO.js
@@ -28,6 +28,7 @@ OC.L10N.register(
"Download" : "Last ned",
"Rename" : "Endra namn",
"Delete" : "Slett",
+ "Unshare" : "Udel",
"Details" : "Detaljar",
"Pending" : "Under vegs",
"Name" : "Namn",
diff --git a/apps/files/l10n/nn_NO.json b/apps/files/l10n/nn_NO.json
index 929f8c0d7fe..a29e272ebac 100644
--- a/apps/files/l10n/nn_NO.json
+++ b/apps/files/l10n/nn_NO.json
@@ -26,6 +26,7 @@
"Download" : "Last ned",
"Rename" : "Endra namn",
"Delete" : "Slett",
+ "Unshare" : "Udel",
"Details" : "Detaljar",
"Pending" : "Under vegs",
"Name" : "Namn",
diff --git a/apps/files/l10n/oc.js b/apps/files/l10n/oc.js
index a3088b663fd..a6f59679a18 100644
--- a/apps/files/l10n/oc.js
+++ b/apps/files/l10n/oc.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Telecargar",
"Rename" : "Renomenar",
"Delete" : "Suprimir",
+ "Disconnect storage" : "Desconnectar aqueste supòrt d'emmagazinatge",
+ "Unshare" : "Partejar pas",
"Details" : "Detalhs",
"Select" : "Seleccionar",
"Pending" : "En espèra",
diff --git a/apps/files/l10n/oc.json b/apps/files/l10n/oc.json
index c6048605696..61caa1724b5 100644
--- a/apps/files/l10n/oc.json
+++ b/apps/files/l10n/oc.json
@@ -32,6 +32,8 @@
"Download" : "Telecargar",
"Rename" : "Renomenar",
"Delete" : "Suprimir",
+ "Disconnect storage" : "Desconnectar aqueste supòrt d'emmagazinatge",
+ "Unshare" : "Partejar pas",
"Details" : "Detalhs",
"Select" : "Seleccionar",
"Pending" : "En espèra",
diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js
index 6478fbe5eb4..de1d8581243 100644
--- a/apps/files/l10n/pl.js
+++ b/apps/files/l10n/pl.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Pobierz",
"Rename" : "Zmień nazwę",
"Delete" : "Usuń",
+ "Disconnect storage" : "Odłącz magazyn",
+ "Unshare" : "Zatrzymaj współdzielenie",
"Details" : "Szczegóły",
"Select" : "Wybierz",
"Pending" : "Oczekujące",
diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json
index 98a0592cc75..491991c6f61 100644
--- a/apps/files/l10n/pl.json
+++ b/apps/files/l10n/pl.json
@@ -32,6 +32,8 @@
"Download" : "Pobierz",
"Rename" : "Zmień nazwę",
"Delete" : "Usuń",
+ "Disconnect storage" : "Odłącz magazyn",
+ "Unshare" : "Zatrzymaj współdzielenie",
"Details" : "Szczegóły",
"Select" : "Wybierz",
"Pending" : "Oczekujące",
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index 6619da366e9..2cf4a3dbc80 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -34,12 +34,25 @@ OC.L10N.register(
"Download" : "Baixar",
"Rename" : "Renomear",
"Delete" : "Excluir",
+ "Disconnect storage" : "Desconectar armazenamento",
+ "Unshare" : "Descompartilhar",
"Details" : "Detalhes",
"Select" : "Selecionar",
"Pending" : "Pendente",
"Unable to determine date" : "Impossível determinar a data",
"This operation is forbidden" : "Esta operação é proibida",
"This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador",
+ "Could not move \"{file}\", target exists" : "Não foi possível mover o \"{file}\", o alvo já existe",
+ "Could not move \"{file}\"" : "Não foi possível mover \"{file}\"",
+ "{newName} already exists" : "{newName} já existe",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Não foi possível renomear \"{fileName}\", ele já não existe",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{targetName}\" já está sendo usado na pasta \"{dir}\". Por favor escolha um outro nome.",
+ "Could not rename \"{fileName}\"" : "Não foi possível renomear \"{fileName}\"",
+ "Could not create file \"{file}\"" : "Não foi possível criar o arquivo \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "Não foi possível criar o arquivo \"{file}\" porque ele já existe",
+ "Could not create folder \"{dir}\"" : "Não foi possível criar a pasta \"{dir}\"",
+ "Could not create folder \"{dir}\" because it already exists" : "Não foi possível criar a pasta \"{dir}\" porque ela já existe",
+ "Error deleting file \"{fileName}\"." : "Ocorreu um erro ao apagar o arquivo \"{fileName}\".",
"No entries in this folder match '{filter}'" : "Nenhuma entrada nesta pasta coincide com '{filter}'",
"Name" : "Nome",
"Size" : "Tamanho",
@@ -68,7 +81,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas",
"A new file or folder has been <strong>created</strong>" : "Um novo arquivo ou pasta foi <strong>criado</strong>",
"A file or folder has been <strong>changed</strong>" : "Um arquivo ou pasta foi <strong>modificado</strong>",
- "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite de notificações sobre a criação e alterações em seus <strong>arquivos favoritos</strong> <em>(Stream apenas)</em>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite de notificações sobre a criação e alterações em seus <strong>arquivos favoritos</strong> <em>(apenas Stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Um arquivo ou pasta foi <strong>excluído</strong>",
"A file or folder has been <strong>restored</strong>" : "Um arquivo ou pasta foi <strong>restautado</strong>",
"You created %1$s" : "Você criou %1$s",
@@ -103,7 +116,7 @@ OC.L10N.register(
"Files are being scanned, please wait." : "Arquivos sendo escaneados, por favor aguarde.",
"Currently scanning" : "Atualmente escaneando",
"No favorites" : "Sem favoritos",
- "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favorito são mostrados aqui",
+ "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favoritos são mostrados aqui",
"Text file" : "Arquivo texto",
"New text file.txt" : "Novo texto file.txt"
},
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index e656d9e0079..be96373df6a 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -32,12 +32,25 @@
"Download" : "Baixar",
"Rename" : "Renomear",
"Delete" : "Excluir",
+ "Disconnect storage" : "Desconectar armazenamento",
+ "Unshare" : "Descompartilhar",
"Details" : "Detalhes",
"Select" : "Selecionar",
"Pending" : "Pendente",
"Unable to determine date" : "Impossível determinar a data",
"This operation is forbidden" : "Esta operação é proibida",
"This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador",
+ "Could not move \"{file}\", target exists" : "Não foi possível mover o \"{file}\", o alvo já existe",
+ "Could not move \"{file}\"" : "Não foi possível mover \"{file}\"",
+ "{newName} already exists" : "{newName} já existe",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Não foi possível renomear \"{fileName}\", ele já não existe",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{targetName}\" já está sendo usado na pasta \"{dir}\". Por favor escolha um outro nome.",
+ "Could not rename \"{fileName}\"" : "Não foi possível renomear \"{fileName}\"",
+ "Could not create file \"{file}\"" : "Não foi possível criar o arquivo \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "Não foi possível criar o arquivo \"{file}\" porque ele já existe",
+ "Could not create folder \"{dir}\"" : "Não foi possível criar a pasta \"{dir}\"",
+ "Could not create folder \"{dir}\" because it already exists" : "Não foi possível criar a pasta \"{dir}\" porque ela já existe",
+ "Error deleting file \"{fileName}\"." : "Ocorreu um erro ao apagar o arquivo \"{fileName}\".",
"No entries in this folder match '{filter}'" : "Nenhuma entrada nesta pasta coincide com '{filter}'",
"Name" : "Nome",
"Size" : "Tamanho",
@@ -66,7 +79,7 @@
"An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas",
"A new file or folder has been <strong>created</strong>" : "Um novo arquivo ou pasta foi <strong>criado</strong>",
"A file or folder has been <strong>changed</strong>" : "Um arquivo ou pasta foi <strong>modificado</strong>",
- "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite de notificações sobre a criação e alterações em seus <strong>arquivos favoritos</strong> <em>(Stream apenas)</em>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite de notificações sobre a criação e alterações em seus <strong>arquivos favoritos</strong> <em>(apenas Stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Um arquivo ou pasta foi <strong>excluído</strong>",
"A file or folder has been <strong>restored</strong>" : "Um arquivo ou pasta foi <strong>restautado</strong>",
"You created %1$s" : "Você criou %1$s",
@@ -101,7 +114,7 @@
"Files are being scanned, please wait." : "Arquivos sendo escaneados, por favor aguarde.",
"Currently scanning" : "Atualmente escaneando",
"No favorites" : "Sem favoritos",
- "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favorito são mostrados aqui",
+ "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favoritos são mostrados aqui",
"Text file" : "Arquivo texto",
"New text file.txt" : "Novo texto file.txt"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
diff --git a/apps/files/l10n/ro.js b/apps/files/l10n/ro.js
index 54e7c505c9a..e9114f5531e 100644
--- a/apps/files/l10n/ro.js
+++ b/apps/files/l10n/ro.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Descarcă",
"Rename" : "Redenumește",
"Delete" : "Șterge",
+ "Disconnect storage" : "Deconectează stocarea",
+ "Unshare" : "Nu mai partaja",
"Details" : "Detalii",
"Select" : "Alege",
"Pending" : "În așteptare",
diff --git a/apps/files/l10n/ro.json b/apps/files/l10n/ro.json
index 3fe8ba180bb..ed4bf8e3851 100644
--- a/apps/files/l10n/ro.json
+++ b/apps/files/l10n/ro.json
@@ -32,6 +32,8 @@
"Download" : "Descarcă",
"Rename" : "Redenumește",
"Delete" : "Șterge",
+ "Disconnect storage" : "Deconectează stocarea",
+ "Unshare" : "Nu mai partaja",
"Details" : "Detalii",
"Select" : "Alege",
"Pending" : "În așteptare",
diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js
index f4b71563e6e..a6fb70944ec 100644
--- a/apps/files/l10n/ru.js
+++ b/apps/files/l10n/ru.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Скачать",
"Rename" : "Переименовать",
"Delete" : "Удалить",
+ "Disconnect storage" : "Отсоединить хранилище",
+ "Unshare" : "Закрыть доступ",
"Details" : "Подробно",
"Select" : "Выбрать",
"Pending" : "Ожидание",
diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json
index 81dbf53184e..964a819535b 100644
--- a/apps/files/l10n/ru.json
+++ b/apps/files/l10n/ru.json
@@ -32,6 +32,8 @@
"Download" : "Скачать",
"Rename" : "Переименовать",
"Delete" : "Удалить",
+ "Disconnect storage" : "Отсоединить хранилище",
+ "Unshare" : "Закрыть доступ",
"Details" : "Подробно",
"Select" : "Выбрать",
"Pending" : "Ожидание",
diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js
index 240bce73af1..103b4861206 100644
--- a/apps/files/l10n/sl.js
+++ b/apps/files/l10n/sl.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Prejmi",
"Rename" : "Preimenuj",
"Delete" : "Izbriši",
+ "Disconnect storage" : "Odklopi shrambo",
+ "Unshare" : "Prekini souporabo",
"Details" : "Podrobnosti",
"Select" : "Izberi",
"Pending" : "V čakanju ...",
diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json
index 64ad90f56bd..ef5720b8be3 100644
--- a/apps/files/l10n/sl.json
+++ b/apps/files/l10n/sl.json
@@ -32,6 +32,8 @@
"Download" : "Prejmi",
"Rename" : "Preimenuj",
"Delete" : "Izbriši",
+ "Disconnect storage" : "Odklopi shrambo",
+ "Unshare" : "Prekini souporabo",
"Details" : "Podrobnosti",
"Select" : "Izberi",
"Pending" : "V čakanju ...",
diff --git a/apps/files/l10n/sq.js b/apps/files/l10n/sq.js
index 6811dc5791f..5a95ea92e3d 100644
--- a/apps/files/l10n/sq.js
+++ b/apps/files/l10n/sq.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Shkarkoje",
"Rename" : "Riemërtojeni",
"Delete" : "Fshije",
+ "Disconnect storage" : "Shkëput hapësirën e memorizimit",
+ "Unshare" : "Hiqe ndarjen",
"Details" : "Hollësi",
"Select" : "Përzgjidhe",
"Pending" : "Në pritje",
diff --git a/apps/files/l10n/sq.json b/apps/files/l10n/sq.json
index 45b9d6acb61..e70fffe8e5b 100644
--- a/apps/files/l10n/sq.json
+++ b/apps/files/l10n/sq.json
@@ -32,6 +32,8 @@
"Download" : "Shkarkoje",
"Rename" : "Riemërtojeni",
"Delete" : "Fshije",
+ "Disconnect storage" : "Shkëput hapësirën e memorizimit",
+ "Unshare" : "Hiqe ndarjen",
"Details" : "Hollësi",
"Select" : "Përzgjidhe",
"Pending" : "Në pritje",
diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js
index 80f81b1e028..6a97b5f282f 100644
--- a/apps/files/l10n/sr.js
+++ b/apps/files/l10n/sr.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Преузми",
"Rename" : "Преименуј",
"Delete" : "Обриши",
+ "Disconnect storage" : "Искључи складиште",
+ "Unshare" : "Не дели",
"Details" : "Подаци",
"Select" : "Изабери",
"Pending" : "На чекању",
diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json
index f878b9c14d4..7f319f6ab48 100644
--- a/apps/files/l10n/sr.json
+++ b/apps/files/l10n/sr.json
@@ -32,6 +32,8 @@
"Download" : "Преузми",
"Rename" : "Преименуј",
"Delete" : "Обриши",
+ "Disconnect storage" : "Искључи складиште",
+ "Unshare" : "Не дели",
"Details" : "Подаци",
"Select" : "Изабери",
"Pending" : "На чекању",
diff --git a/apps/files/l10n/sr@latin.js b/apps/files/l10n/sr@latin.js
index d7017005a17..ed166f5ee87 100644
--- a/apps/files/l10n/sr@latin.js
+++ b/apps/files/l10n/sr@latin.js
@@ -33,6 +33,8 @@ OC.L10N.register(
"Download" : "Preuzmi",
"Rename" : "Preimenuj",
"Delete" : "Obriši",
+ "Disconnect storage" : "Isključi skladište",
+ "Unshare" : "Ne deli",
"Details" : "Detaljnije",
"Select" : "Izaberi",
"Pending" : "Na čekanju",
diff --git a/apps/files/l10n/sr@latin.json b/apps/files/l10n/sr@latin.json
index 98356e441d6..a58df8712a7 100644
--- a/apps/files/l10n/sr@latin.json
+++ b/apps/files/l10n/sr@latin.json
@@ -31,6 +31,8 @@
"Download" : "Preuzmi",
"Rename" : "Preimenuj",
"Delete" : "Obriši",
+ "Disconnect storage" : "Isključi skladište",
+ "Unshare" : "Ne deli",
"Details" : "Detaljnije",
"Select" : "Izaberi",
"Pending" : "Na čekanju",
diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js
index f5e81760b0f..f6df4ee16d0 100644
--- a/apps/files/l10n/sv.js
+++ b/apps/files/l10n/sv.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Ladda ner",
"Rename" : "Byt namn",
"Delete" : "Radera",
+ "Disconnect storage" : "Koppla bort lagring",
+ "Unshare" : "Sluta dela",
"Details" : "Detaljer",
"Select" : "Välj",
"Pending" : "Väntar",
diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json
index c624c34029c..143e35a1e0a 100644
--- a/apps/files/l10n/sv.json
+++ b/apps/files/l10n/sv.json
@@ -32,6 +32,8 @@
"Download" : "Ladda ner",
"Rename" : "Byt namn",
"Delete" : "Radera",
+ "Disconnect storage" : "Koppla bort lagring",
+ "Unshare" : "Sluta dela",
"Details" : "Detaljer",
"Select" : "Välj",
"Pending" : "Väntar",
diff --git a/apps/files/l10n/ug.js b/apps/files/l10n/ug.js
index 55985f6a655..b587b590632 100644
--- a/apps/files/l10n/ug.js
+++ b/apps/files/l10n/ug.js
@@ -17,6 +17,7 @@ OC.L10N.register(
"Download" : "چۈشۈر",
"Rename" : "ئات ئۆزگەرت",
"Delete" : "ئۆچۈر",
+ "Unshare" : "ھەمبەھىرلىمە",
"Pending" : "كۈتۈۋاتىدۇ",
"Name" : "ئاتى",
"Size" : "چوڭلۇقى",
diff --git a/apps/files/l10n/ug.json b/apps/files/l10n/ug.json
index 716bf62afb9..dd2e9c98ee5 100644
--- a/apps/files/l10n/ug.json
+++ b/apps/files/l10n/ug.json
@@ -15,6 +15,7 @@
"Download" : "چۈشۈر",
"Rename" : "ئات ئۆزگەرت",
"Delete" : "ئۆچۈر",
+ "Unshare" : "ھەمبەھىرلىمە",
"Pending" : "كۈتۈۋاتىدۇ",
"Name" : "ئاتى",
"Size" : "چوڭلۇقى",
diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js
index 8d43949d8ff..7da8b160afd 100644
--- a/apps/files/l10n/uk.js
+++ b/apps/files/l10n/uk.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "Завантажити",
"Rename" : "Перейменувати",
"Delete" : "Видалити",
+ "Disconnect storage" : "Від’єднати сховище",
+ "Unshare" : "Закрити спільний доступ",
"Details" : "Деталі",
"Select" : "Оберіть",
"Pending" : "Очікування",
diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json
index d7381e0cfa7..15dabf456f8 100644
--- a/apps/files/l10n/uk.json
+++ b/apps/files/l10n/uk.json
@@ -32,6 +32,8 @@
"Download" : "Завантажити",
"Rename" : "Перейменувати",
"Delete" : "Видалити",
+ "Disconnect storage" : "Від’єднати сховище",
+ "Unshare" : "Закрити спільний доступ",
"Details" : "Деталі",
"Select" : "Оберіть",
"Pending" : "Очікування",
diff --git a/apps/files/l10n/ur_PK.js b/apps/files/l10n/ur_PK.js
index bac2c3b614b..094511db425 100644
--- a/apps/files/l10n/ur_PK.js
+++ b/apps/files/l10n/ur_PK.js
@@ -5,6 +5,7 @@ OC.L10N.register(
"Close" : "بند ",
"Download" : "ڈاؤن لوڈ،",
"Delete" : "حذف کریں",
+ "Unshare" : "شئیرنگ ختم کریں",
"Name" : "اسم",
"Save" : "حفظ",
"Settings" : "ترتیبات"
diff --git a/apps/files/l10n/ur_PK.json b/apps/files/l10n/ur_PK.json
index be36293b913..3c859bb452d 100644
--- a/apps/files/l10n/ur_PK.json
+++ b/apps/files/l10n/ur_PK.json
@@ -3,6 +3,7 @@
"Close" : "بند ",
"Download" : "ڈاؤن لوڈ،",
"Delete" : "حذف کریں",
+ "Unshare" : "شئیرنگ ختم کریں",
"Name" : "اسم",
"Save" : "حفظ",
"Settings" : "ترتیبات"
diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js
index 4af893ab66a..83dd03f48f8 100644
--- a/apps/files/l10n/vi.js
+++ b/apps/files/l10n/vi.js
@@ -30,6 +30,7 @@ OC.L10N.register(
"Download" : "Tải về",
"Rename" : "Sửa tên",
"Delete" : "Xóa",
+ "Unshare" : "Bỏ chia sẻ",
"Details" : "Chi tiết",
"Select" : "Chọn",
"Pending" : "Đang chờ",
diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json
index ebffb827525..abc83963873 100644
--- a/apps/files/l10n/vi.json
+++ b/apps/files/l10n/vi.json
@@ -28,6 +28,7 @@
"Download" : "Tải về",
"Rename" : "Sửa tên",
"Delete" : "Xóa",
+ "Unshare" : "Bỏ chia sẻ",
"Details" : "Chi tiết",
"Select" : "Chọn",
"Pending" : "Đang chờ",
diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js
index 09829db3bcc..0283c91b656 100644
--- a/apps/files/l10n/zh_TW.js
+++ b/apps/files/l10n/zh_TW.js
@@ -34,6 +34,8 @@ OC.L10N.register(
"Download" : "下載",
"Rename" : "重新命名",
"Delete" : "刪除",
+ "Disconnect storage" : "斷開儲存空間連接",
+ "Unshare" : "取消分享",
"Details" : "詳細資料",
"Select" : "選擇",
"Pending" : "等候中",
diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json
index 6f2c396ad18..4969b3d5bfb 100644
--- a/apps/files/l10n/zh_TW.json
+++ b/apps/files/l10n/zh_TW.json
@@ -32,6 +32,8 @@
"Download" : "下載",
"Rename" : "重新命名",
"Delete" : "刪除",
+ "Disconnect storage" : "斷開儲存空間連接",
+ "Unshare" : "取消分享",
"Details" : "詳細資料",
"Select" : "選擇",
"Pending" : "等候中",
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index 9a4e8d59786..4f960518839 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -66,15 +66,15 @@ class Helper {
*/
public static function determineIcon($file) {
if($file['type'] === 'dir') {
- $icon = \OC_Helper::mimetypeIcon('dir');
+ $icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon('dir');
// TODO: move this part to the client side, using mountType
if ($file->isShared()) {
- $icon = \OC_Helper::mimetypeIcon('dir-shared');
+ $icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon('dir-shared');
} elseif ($file->isMounted()) {
- $icon = \OC_Helper::mimetypeIcon('dir-external');
+ $icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon('dir-external');
}
}else{
- $icon = \OC_Helper::mimetypeIcon($file->getMimetype());
+ $icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon($file->getMimetype());
}
return substr($icon, 0, -3) . 'svg';
diff --git a/apps/files/tests/backgroundjob/ScanFilesTest.php b/apps/files/tests/backgroundjob/ScanFilesTest.php
index 907cad64f9e..087696f0cfc 100644
--- a/apps/files/tests/backgroundjob/ScanFilesTest.php
+++ b/apps/files/tests/backgroundjob/ScanFilesTest.php
@@ -24,7 +24,6 @@ use Test\TestCase;
use OCP\IConfig;
use OCP\IUserManager;
use OCA\Files\BackgroundJob\ScanFiles;
-use OCP\ILogger;
/**
* Class ScanFilesTest
diff --git a/apps/files/tests/controller/apicontrollertest.php b/apps/files/tests/controller/apicontrollertest.php
index fb728d5eff0..bc66e4641b9 100644
--- a/apps/files/tests/controller/apicontrollertest.php
+++ b/apps/files/tests/controller/apicontrollertest.php
@@ -92,6 +92,7 @@ class ApiControllerTest extends TestCase {
[
'mtime' => 55,
'mimetype' => 'application/pdf',
+ 'permissions' => 31,
'size' => 1234,
'etag' => 'MyEtag',
],
@@ -111,7 +112,7 @@ class ApiControllerTest extends TestCase {
'parentId' => null,
'mtime' => 55000,
'name' => 'root.txt',
- 'permissions' => null,
+ 'permissions' => 31,
'mimetype' => 'application/pdf',
'size' => 1234,
'type' => 'file',
@@ -139,6 +140,7 @@ class ApiControllerTest extends TestCase {
[
'mtime' => 55,
'mimetype' => 'application/pdf',
+ 'permissions' => 31,
'size' => 1234,
'etag' => 'MyEtag',
],
@@ -155,6 +157,7 @@ class ApiControllerTest extends TestCase {
[
'mtime' => 999,
'mimetype' => 'application/binary',
+ 'permissions' => 31,
'size' => 9876,
'etag' => 'SubEtag',
],
@@ -174,7 +177,7 @@ class ApiControllerTest extends TestCase {
'parentId' => null,
'mtime' => 55000,
'name' => 'root.txt',
- 'permissions' => null,
+ 'permissions' => 31,
'mimetype' => 'application/pdf',
'size' => 1234,
'type' => 'file',
@@ -191,7 +194,7 @@ class ApiControllerTest extends TestCase {
'parentId' => null,
'mtime' => 999000,
'name' => 'root.txt',
- 'permissions' => null,
+ 'permissions' => 31,
'mimetype' => 'application/binary',
'size' => 9876,
'type' => 'file',
diff --git a/apps/files/tests/js/fileactionsmenuSpec.js b/apps/files/tests/js/fileactionsmenuSpec.js
index 747a746a602..3028db2b3ac 100644
--- a/apps/files/tests/js/fileactionsmenuSpec.js
+++ b/apps/files/tests/js/fileactionsmenuSpec.js
@@ -20,7 +20,7 @@
*/
describe('OCA.Files.FileActionsMenu tests', function() {
- var fileList, fileActions, menu, actionStub, $tr;
+ var fileList, fileActions, menu, actionStub, menuContext, $tr;
beforeEach(function() {
// init horrible parameters
@@ -80,7 +80,7 @@ describe('OCA.Files.FileActionsMenu tests', function() {
};
$tr = fileList.add(fileData);
- var menuContext = {
+ menuContext = {
$file: $tr,
fileList: fileList,
fileActions: fileActions,
@@ -189,6 +189,22 @@ describe('OCA.Files.FileActionsMenu tests', function() {
var yactionIndex = menu.$el.find('a[data-action=Yaction]').closest('li').index();
expect(wactionIndex).toBeLessThan(yactionIndex);
});
+ it('calls displayName function', function() {
+ var displayNameStub = sinon.stub().returns('Test');
+
+ fileActions.registerAction({
+ name: 'Something',
+ displayName: displayNameStub,
+ mime: 'text/plain',
+ permissions: OC.PERMISSION_ALL
+ });
+
+ menu.render();
+
+ expect(displayNameStub.calledOnce).toEqual(true);
+ expect(displayNameStub.calledWith(menuContext)).toEqual(true);
+ expect(menu.$el.find('a[data-action=Something]').text()).toEqual('Test');
+ });
});
describe('action handler', function() {
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index 9f7ad50bc60..9dfcdfead7f 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -2402,6 +2402,21 @@ describe('OCA.Files.FileList tests', function() {
expect(ev.result).not.toEqual(false);
expect(uploadData.targetDir).toEqual('/a/b');
});
+ it('renders upload indicator element for folders only', function() {
+ fileList.add({
+ name: 'afolder',
+ type: 'dir',
+ mime: 'httpd/unix-directory'
+ });
+ fileList.add({
+ name: 'afile.txt',
+ type: 'file',
+ mime: 'text/plain'
+ });
+
+ expect(fileList.findFileEl('afolder').find('.uploadtext').length).toEqual(1);
+ expect(fileList.findFileEl('afile.txt').find('.uploadtext').length).toEqual(0);
+ });
});
});
describe('Handling errors', function () {
@@ -2534,4 +2549,34 @@ describe('OCA.Files.FileList tests', function() {
expect(newFileMenuStub.notCalled).toEqual(true);
});
});
+ describe('mount type detection', function() {
+ function testMountType(dirInfoId, dirInfoMountType, inputMountType, expectedMountType) {
+ var $tr;
+ fileList.dirInfo.id = dirInfoId;
+ fileList.dirInfo.mountType = dirInfoMountType;
+ $tr = fileList.add({
+ type: 'dir',
+ mimetype: 'httpd/unix-directory',
+ name: 'test dir',
+ mountType: inputMountType
+ });
+
+ expect($tr.attr('data-mounttype')).toEqual(expectedMountType);
+ }
+
+ it('leaves mount type as is if no parent exists', function() {
+ testMountType(null, null, 'external', 'external');
+ testMountType(null, null, 'shared', 'shared');
+ });
+ it('detects share root if parent exists', function() {
+ testMountType(123, null, 'shared', 'shared-root');
+ testMountType(123, 'shared', 'shared', 'shared');
+ testMountType(123, 'shared-root', 'shared', 'shared');
+ });
+ it('detects external storage root if parent exists', function() {
+ testMountType(123, null, 'external', 'external-root');
+ testMountType(123, 'external', 'external', 'external');
+ testMountType(123, 'external-root', 'external', 'external');
+ });
+ });
});
diff --git a/apps/files/tests/service/tagservice.php b/apps/files/tests/service/tagservice.php
index 36da3edc61e..b93dedd0efd 100644
--- a/apps/files/tests/service/tagservice.php
+++ b/apps/files/tests/service/tagservice.php
@@ -54,7 +54,7 @@ class TagServiceTest extends \Test\TestCase {
protected function setUp() {
parent::setUp();
$this->user = $this->getUniqueId('user');
- \OC_User::createUser($this->user, 'test');
+ \OC::$server->getUserManager()->createUser($this->user, 'test');
\OC_User::setUserId($this->user);
\OC_Util::setupFS($this->user);
/**
@@ -82,7 +82,8 @@ class TagServiceTest extends \Test\TestCase {
protected function tearDown() {
\OC_User::setUserId('');
- \OC_User::deleteUser($this->user);
+ $user = \OC::$server->getUserManager()->get($this->user);
+ if ($user !== null) { $user->delete(); }
}
public function testUpdateFileTags() {
diff --git a/apps/files_external/appinfo/database.xml b/apps/files_external/appinfo/database.xml
index 27918bf9819..2c3615a4d4c 100644
--- a/apps/files_external/appinfo/database.xml
+++ b/apps/files_external/appinfo/database.xml
@@ -80,14 +80,12 @@
<length>64</length>
</field>
<index>
- <name>mount_id_app_index</name>
<field>
<name>mount_id</name>
<sorting>ascending</sorting>
</field>
</index>
<index>
- <name>applicable_value_index</name>
<field>
<name>type</name>
<sorting>ascending</sorting>
@@ -98,7 +96,6 @@
</field>
</index>
<index>
- <name>applicable_value_mount_index</name>
<unique>true</unique>
<field>
<name>type</name>
@@ -147,14 +144,12 @@
</field>
<index>
- <name>config_mount_id</name>
<field>
<name>mount_id</name>
<sorting>ascending</sorting>
</field>
</index>
<index>
- <name>config_mount_key</name>
<unique>true</unique>
<field>
<name>mount_id</name>
@@ -199,7 +194,6 @@
</field>
<index>
- <name>option_mount_id</name>
<field>
<name>mount_id</name>
<sorting>ascending</sorting>
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml
index f6d583d0a5a..355d9feb4b9 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -14,7 +14,7 @@
<admin>admin-external-storage</admin>
</documentation>
<rememberlogin>false</rememberlogin>
- <version>0.5.0</version>
+ <version>0.5.1</version>
<types>
<filesystem/>
</types>
diff --git a/apps/files_external/l10n/cs_CZ.js b/apps/files_external/l10n/cs_CZ.js
index 94c8194e328..13ca22abcc9 100644
--- a/apps/files_external/l10n/cs_CZ.js
+++ b/apps/files_external/l10n/cs_CZ.js
@@ -36,6 +36,14 @@ OC.L10N.register(
"(group)" : "(skupina)",
"Admin defined" : "Nastaveno administrátorem",
"Saved" : "Uloženo",
+ "Empty response from the server" : "Prázdná odpověď serveru",
+ "Couldn't access. Please logout and login to activate this mount point" : "Nelze připojit. Pro aktivaci tohoto přípojného bodu se prosím odhlašte a znovu přihlašte",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Nelze obdržet informaci z ownCloud serveru: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Nelze obdržet seznam vzdálených přípojných bodů: {type}",
+ "There was an error with message: " : "Došlo k chybě s tímto hlášením:",
+ "External mount error" : "Chyba vzdáleného úložiště",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Nelze obdržet seznam síťových úložišť systému Windows: prázdná odpověď serveru",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Některá z nastavených vzdálených úložišť nejsou připojena. Pro více informací prosím klikněte na červenou šipku(y)",
"Access key" : "Přístupový klíč",
"Secret key" : "Tajný klíč",
"Builtin" : "Zabudované",
diff --git a/apps/files_external/l10n/cs_CZ.json b/apps/files_external/l10n/cs_CZ.json
index 4adba2f4d04..bfcd3a30f46 100644
--- a/apps/files_external/l10n/cs_CZ.json
+++ b/apps/files_external/l10n/cs_CZ.json
@@ -34,6 +34,14 @@
"(group)" : "(skupina)",
"Admin defined" : "Nastaveno administrátorem",
"Saved" : "Uloženo",
+ "Empty response from the server" : "Prázdná odpověď serveru",
+ "Couldn't access. Please logout and login to activate this mount point" : "Nelze připojit. Pro aktivaci tohoto přípojného bodu se prosím odhlašte a znovu přihlašte",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Nelze obdržet informaci z ownCloud serveru: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Nelze obdržet seznam vzdálených přípojných bodů: {type}",
+ "There was an error with message: " : "Došlo k chybě s tímto hlášením:",
+ "External mount error" : "Chyba vzdáleného úložiště",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Nelze obdržet seznam síťových úložišť systému Windows: prázdná odpověď serveru",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Některá z nastavených vzdálených úložišť nejsou připojena. Pro více informací prosím klikněte na červenou šipku(y)",
"Access key" : "Přístupový klíč",
"Secret key" : "Tajný klíč",
"Builtin" : "Zabudované",
diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js
index d4d00e7f83e..18f67db420f 100644
--- a/apps/files_external/l10n/de.js
+++ b/apps/files_external/l10n/de.js
@@ -10,10 +10,12 @@ OC.L10N.register(
"Storage with id \"%i\" not found" : "Der Speicher mit der ID „%i“ wurde nicht gefunden",
"Invalid mount point" : "Ungültiger mount point",
"Invalid storage backend \"%s\"" : "Ungültiges Speicher-Backend „%s“",
+ "%s" : "%s",
"Personal" : "Persönlich",
"System" : "System",
"Grant access" : "Zugriff gestatten",
"Access granted" : "Zugriff gestattet",
+ "Error configuring OAuth1" : "Fehler beim konfigurieren von OAuth1",
"Error configuring OAuth2" : "Fehler beim Einrichten von OAuth2",
"Generate keys" : "Schlüssel erzeugen",
"Error generating key pair" : "Fehler beim Erzeugen des Schlüsselpaares",
@@ -25,7 +27,9 @@ OC.L10N.register(
"Every time the filesystem is used" : "Immer, wenn das Dateisystem benutzt wird",
"All users. Type to select user or group." : "Alle Benutzer. Benutzer oder Gruppe zur Auswahl eingeben.",
"(group)" : "(group)",
+ "Admin defined" : "Administrator festlegen",
"Saved" : "Gespeichert",
+ "There was an error with message: " : "Es ist ein Fehler mit folgender Meldung aufgetreten:",
"Access key" : "Zugangsschlüssel",
"Secret key" : "Geheimer Schlüssel",
"None" : "Keine",
diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json
index a65f58b0fdb..cae7672260e 100644
--- a/apps/files_external/l10n/de.json
+++ b/apps/files_external/l10n/de.json
@@ -8,10 +8,12 @@
"Storage with id \"%i\" not found" : "Der Speicher mit der ID „%i“ wurde nicht gefunden",
"Invalid mount point" : "Ungültiger mount point",
"Invalid storage backend \"%s\"" : "Ungültiges Speicher-Backend „%s“",
+ "%s" : "%s",
"Personal" : "Persönlich",
"System" : "System",
"Grant access" : "Zugriff gestatten",
"Access granted" : "Zugriff gestattet",
+ "Error configuring OAuth1" : "Fehler beim konfigurieren von OAuth1",
"Error configuring OAuth2" : "Fehler beim Einrichten von OAuth2",
"Generate keys" : "Schlüssel erzeugen",
"Error generating key pair" : "Fehler beim Erzeugen des Schlüsselpaares",
@@ -23,7 +25,9 @@
"Every time the filesystem is used" : "Immer, wenn das Dateisystem benutzt wird",
"All users. Type to select user or group." : "Alle Benutzer. Benutzer oder Gruppe zur Auswahl eingeben.",
"(group)" : "(group)",
+ "Admin defined" : "Administrator festlegen",
"Saved" : "Gespeichert",
+ "There was an error with message: " : "Es ist ein Fehler mit folgender Meldung aufgetreten:",
"Access key" : "Zugangsschlüssel",
"Secret key" : "Geheimer Schlüssel",
"None" : "Keine",
diff --git a/apps/files_external/l10n/el.js b/apps/files_external/l10n/el.js
index 294ec9da6ff..6de2ebb2101 100644
--- a/apps/files_external/l10n/el.js
+++ b/apps/files_external/l10n/el.js
@@ -17,6 +17,7 @@ OC.L10N.register(
"Unsatisfied backend parameters" : "Ελλιπείς παράμετροι συστήματος",
"Unsatisfied authentication mechanism parameters" : "Ελλιπείς παράμετροι μηχανισμού πιστοποίησης",
"Insufficient data: %s" : "Μη επαρκή δεδομένα: %s",
+ "%s" : "%s",
"Personal" : "Προσωπικά",
"System" : "Σύστημα",
"Grant access" : "Παροχή πρόσβασης",
diff --git a/apps/files_external/l10n/el.json b/apps/files_external/l10n/el.json
index 431e81c3d7a..1c5d7fb6dfc 100644
--- a/apps/files_external/l10n/el.json
+++ b/apps/files_external/l10n/el.json
@@ -15,6 +15,7 @@
"Unsatisfied backend parameters" : "Ελλιπείς παράμετροι συστήματος",
"Unsatisfied authentication mechanism parameters" : "Ελλιπείς παράμετροι μηχανισμού πιστοποίησης",
"Insufficient data: %s" : "Μη επαρκή δεδομένα: %s",
+ "%s" : "%s",
"Personal" : "Προσωπικά",
"System" : "Σύστημα",
"Grant access" : "Παροχή πρόσβασης",
diff --git a/apps/files_external/l10n/es.js b/apps/files_external/l10n/es.js
index 6d8bf0d3139..5aaa3884fd0 100644
--- a/apps/files_external/l10n/es.js
+++ b/apps/files_external/l10n/es.js
@@ -1,8 +1,8 @@
OC.L10N.register(
"files_external",
{
- "Fetching request tokens failed. Verify that your app key and secret are correct." : "Fallo al acceder a los tokens solicitados. Verfique que su clave de app y la clave secreta son correctas.",
- "Fetching access tokens failed. Verify that your app key and secret are correct." : "Fallo al acceder a los tokens solicitados. Verfique que su clave de app y la clave secreta son correctas.",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Falló al acceder a los tokens solicitados. Verifique que su clave de app y la clave secreta sean correctas.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Falló al acceder a los tokens solicitados. Verifique que su clave de app y la clave secreta sean correctas.",
"Please provide a valid app key and secret." : "Por favor facilite una clave de app y una clave secreta válidas.",
"Step 1 failed. Exception: %s" : "El paso 1 falló. Excepción: %s",
"Step 2 failed. Exception: %s" : "El paso 2 falló. Excepción: %s",
@@ -36,6 +36,7 @@ OC.L10N.register(
"(group)" : "(grupo)",
"Admin defined" : "Admin definido",
"Saved" : "Guardado",
+ "There was an error with message: " : "Hubo un error con el mensaje:",
"Access key" : "Clave de acceso",
"Secret key" : "Clave secreta",
"None" : "Ninguno",
@@ -100,6 +101,7 @@ OC.L10N.register(
"Add storage" : "Añadir almacenamiento",
"Advanced settings" : "Configuración avanzada",
"Delete" : "Eliminar",
+ "Allow users to mount external storage" : "Permitir a los usuarios montar un almacenamiento externo",
"Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/es.json b/apps/files_external/l10n/es.json
index bf0624e96db..60722de1f41 100644
--- a/apps/files_external/l10n/es.json
+++ b/apps/files_external/l10n/es.json
@@ -1,6 +1,6 @@
{ "translations": {
- "Fetching request tokens failed. Verify that your app key and secret are correct." : "Fallo al acceder a los tokens solicitados. Verfique que su clave de app y la clave secreta son correctas.",
- "Fetching access tokens failed. Verify that your app key and secret are correct." : "Fallo al acceder a los tokens solicitados. Verfique que su clave de app y la clave secreta son correctas.",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Falló al acceder a los tokens solicitados. Verifique que su clave de app y la clave secreta sean correctas.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Falló al acceder a los tokens solicitados. Verifique que su clave de app y la clave secreta sean correctas.",
"Please provide a valid app key and secret." : "Por favor facilite una clave de app y una clave secreta válidas.",
"Step 1 failed. Exception: %s" : "El paso 1 falló. Excepción: %s",
"Step 2 failed. Exception: %s" : "El paso 2 falló. Excepción: %s",
@@ -34,6 +34,7 @@
"(group)" : "(grupo)",
"Admin defined" : "Admin definido",
"Saved" : "Guardado",
+ "There was an error with message: " : "Hubo un error con el mensaje:",
"Access key" : "Clave de acceso",
"Secret key" : "Clave secreta",
"None" : "Ninguno",
@@ -98,6 +99,7 @@
"Add storage" : "Añadir almacenamiento",
"Advanced settings" : "Configuración avanzada",
"Delete" : "Eliminar",
+ "Allow users to mount external storage" : "Permitir a los usuarios montar un almacenamiento externo",
"Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/et_EE.js b/apps/files_external/l10n/et_EE.js
index fa22b4c6591..e21ce7e39ae 100644
--- a/apps/files_external/l10n/et_EE.js
+++ b/apps/files_external/l10n/et_EE.js
@@ -7,10 +7,14 @@ OC.L10N.register(
"Storage with id \"%i\" not found" : "Salvestuskohta ID-ga \"%i\" ei leitud",
"Invalid mount point" : "Vigane ühenduspunkt",
"Invalid storage backend \"%s\"" : "Vigane salvestuskoha taustsüsteem \"%s\"",
+ "Unsatisfied backend parameters" : "Rahuldamata taustarakenduse parameetrid",
+ "%s" : "%s",
"Personal" : "Isiklik",
"System" : "Süsteem",
"Grant access" : "Anna ligipääs",
"Access granted" : "Ligipääs on antud",
+ "Error configuring OAuth1" : "OAuth1 seadistamise tõrge",
+ "Error configuring OAuth2" : "OAuth2 seadistamise tõrge",
"Generate keys" : "Loo võtmed",
"Error generating key pair" : "Viga võtmepaari loomisel",
"Enable encryption" : "Luba krüpteerimine",
@@ -21,18 +25,26 @@ OC.L10N.register(
"Every time the filesystem is used" : "Iga kord, kui failisüsteemi kasutatakse",
"All users. Type to select user or group." : "Kõik kasutajad. Kirjuta, et valida kasutaja või grupp.",
"(group)" : "(grupp)",
+ "Admin defined" : "Admini poolt määratud",
"Saved" : "Salvestatud",
+ "Couldn't get the list of external mount points: {type}" : "Välise ühenduspunkti hankimine ebaõnnestus: {type}",
+ "There was an error with message: " : "Sõnumiga tekkis tõrge:",
+ "External mount error" : "Välise seostamise tõrge",
+ "Access key" : "Ligipääsuvõti",
+ "Secret key" : "Salavõti",
"Builtin" : "Sisseehitatud",
"None" : "Pole",
"OAuth1" : "OAuth1",
"App key" : "Rakenduse võti",
"App secret" : "Rakenduse salasõna",
+ "OAuth2" : "OAuth2",
"Client ID" : "Kliendi ID",
"Client secret" : "Kliendi salasõna",
"OpenStack" : "OpenStack",
"Username" : "Kasutajanimi",
"Password" : "Parool",
"API key" : "API võti",
+ "RSA public key" : "RSA avalik võti",
"Public key" : "Avalik võti",
"Amazon S3" : "Amazon S3",
"Bucket" : "Korv",
diff --git a/apps/files_external/l10n/et_EE.json b/apps/files_external/l10n/et_EE.json
index 37e7cc282ce..ad7b8622be8 100644
--- a/apps/files_external/l10n/et_EE.json
+++ b/apps/files_external/l10n/et_EE.json
@@ -5,10 +5,14 @@
"Storage with id \"%i\" not found" : "Salvestuskohta ID-ga \"%i\" ei leitud",
"Invalid mount point" : "Vigane ühenduspunkt",
"Invalid storage backend \"%s\"" : "Vigane salvestuskoha taustsüsteem \"%s\"",
+ "Unsatisfied backend parameters" : "Rahuldamata taustarakenduse parameetrid",
+ "%s" : "%s",
"Personal" : "Isiklik",
"System" : "Süsteem",
"Grant access" : "Anna ligipääs",
"Access granted" : "Ligipääs on antud",
+ "Error configuring OAuth1" : "OAuth1 seadistamise tõrge",
+ "Error configuring OAuth2" : "OAuth2 seadistamise tõrge",
"Generate keys" : "Loo võtmed",
"Error generating key pair" : "Viga võtmepaari loomisel",
"Enable encryption" : "Luba krüpteerimine",
@@ -19,18 +23,26 @@
"Every time the filesystem is used" : "Iga kord, kui failisüsteemi kasutatakse",
"All users. Type to select user or group." : "Kõik kasutajad. Kirjuta, et valida kasutaja või grupp.",
"(group)" : "(grupp)",
+ "Admin defined" : "Admini poolt määratud",
"Saved" : "Salvestatud",
+ "Couldn't get the list of external mount points: {type}" : "Välise ühenduspunkti hankimine ebaõnnestus: {type}",
+ "There was an error with message: " : "Sõnumiga tekkis tõrge:",
+ "External mount error" : "Välise seostamise tõrge",
+ "Access key" : "Ligipääsuvõti",
+ "Secret key" : "Salavõti",
"Builtin" : "Sisseehitatud",
"None" : "Pole",
"OAuth1" : "OAuth1",
"App key" : "Rakenduse võti",
"App secret" : "Rakenduse salasõna",
+ "OAuth2" : "OAuth2",
"Client ID" : "Kliendi ID",
"Client secret" : "Kliendi salasõna",
"OpenStack" : "OpenStack",
"Username" : "Kasutajanimi",
"Password" : "Parool",
"API key" : "API võti",
+ "RSA public key" : "RSA avalik võti",
"Public key" : "Avalik võti",
"Amazon S3" : "Amazon S3",
"Bucket" : "Korv",
diff --git a/apps/files_external/l10n/fi_FI.js b/apps/files_external/l10n/fi_FI.js
index b56ad195ce6..c358a2b3260 100644
--- a/apps/files_external/l10n/fi_FI.js
+++ b/apps/files_external/l10n/fi_FI.js
@@ -25,6 +25,8 @@ OC.L10N.register(
"(group)" : "(ryhmä)",
"Admin defined" : "Ylläpitäjän määrittämä",
"Saved" : "Tallennettu",
+ "Empty response from the server" : "Tyhjä vastaus palvelimelta",
+ "There was an error with message: " : "Tapahtui virhe viestillä:",
"Builtin" : "Sisäänrakennettu",
"None" : "Ei mitään",
"OAuth1" : "OAuth1",
@@ -39,6 +41,7 @@ OC.L10N.register(
"Rackspace" : "Rackspace",
"API key" : "API-avain",
"Username and password" : "Käyttäjätunnus ja salasana",
+ "Session credentials" : "Istunnon tunnistetiedot",
"RSA public key" : "Julkinen RSA-avain",
"Public key" : "Julkinen avain",
"Amazon S3" : "Amazon S3",
diff --git a/apps/files_external/l10n/fi_FI.json b/apps/files_external/l10n/fi_FI.json
index 9ff2748b7f6..4e72d861d6f 100644
--- a/apps/files_external/l10n/fi_FI.json
+++ b/apps/files_external/l10n/fi_FI.json
@@ -23,6 +23,8 @@
"(group)" : "(ryhmä)",
"Admin defined" : "Ylläpitäjän määrittämä",
"Saved" : "Tallennettu",
+ "Empty response from the server" : "Tyhjä vastaus palvelimelta",
+ "There was an error with message: " : "Tapahtui virhe viestillä:",
"Builtin" : "Sisäänrakennettu",
"None" : "Ei mitään",
"OAuth1" : "OAuth1",
@@ -37,6 +39,7 @@
"Rackspace" : "Rackspace",
"API key" : "API-avain",
"Username and password" : "Käyttäjätunnus ja salasana",
+ "Session credentials" : "Istunnon tunnistetiedot",
"RSA public key" : "Julkinen RSA-avain",
"Public key" : "Julkinen avain",
"Amazon S3" : "Amazon S3",
diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js
index 8d5f7e911b7..eb99f0aaeba 100644
--- a/apps/files_external/l10n/fr.js
+++ b/apps/files_external/l10n/fr.js
@@ -36,6 +36,14 @@ OC.L10N.register(
"(group)" : "(groupe)",
"Admin defined" : "Défini par l'administrateur",
"Saved" : "Sauvegardé",
+ "Empty response from the server" : "Réponse vide du serveur",
+ "Couldn't access. Please logout and login to activate this mount point" : "Impossible d'accéder. Veuillez vous déconnecter et vous reconnecter pour activer ce point de montage.",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossible d'obtenir l'information depuis le serveur ownCloud : {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Impossible de récupérer la liste des points de montage externes : {type}",
+ "There was an error with message: " : "Il y a eu une erreur avec le message :",
+ "External mount error" : "Erreur de montage externe",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Impossible d'obtenir la liste des points de montage des disques réseaux Windows : Réponse vide du serveur",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Certains points de montage externes configurés ne sont pas connectés. Veuillez cliquer sur la(les) ligne(s) rouge(s) pour plus d'informations",
"Access key" : "Clé d'accès",
"Secret key" : "Clé secrète",
"Builtin" : "Intégré",
diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json
index cae66119a4f..a399872c208 100644
--- a/apps/files_external/l10n/fr.json
+++ b/apps/files_external/l10n/fr.json
@@ -34,6 +34,14 @@
"(group)" : "(groupe)",
"Admin defined" : "Défini par l'administrateur",
"Saved" : "Sauvegardé",
+ "Empty response from the server" : "Réponse vide du serveur",
+ "Couldn't access. Please logout and login to activate this mount point" : "Impossible d'accéder. Veuillez vous déconnecter et vous reconnecter pour activer ce point de montage.",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossible d'obtenir l'information depuis le serveur ownCloud : {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Impossible de récupérer la liste des points de montage externes : {type}",
+ "There was an error with message: " : "Il y a eu une erreur avec le message :",
+ "External mount error" : "Erreur de montage externe",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Impossible d'obtenir la liste des points de montage des disques réseaux Windows : Réponse vide du serveur",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Certains points de montage externes configurés ne sont pas connectés. Veuillez cliquer sur la(les) ligne(s) rouge(s) pour plus d'informations",
"Access key" : "Clé d'accès",
"Secret key" : "Clé secrète",
"Builtin" : "Intégré",
diff --git a/apps/files_external/l10n/it.js b/apps/files_external/l10n/it.js
index daca1d3a896..85fb70cf1a7 100644
--- a/apps/files_external/l10n/it.js
+++ b/apps/files_external/l10n/it.js
@@ -36,6 +36,15 @@ OC.L10N.register(
"(group)" : "(gruppo)",
"Admin defined" : "Definito dall'amministratore",
"Saved" : "Salvato",
+ "Empty response from the server" : "Risposta vuota dal server",
+ "Couldn't access. Please logout and login to activate this mount point" : "Impossibile accedere. Termina la sessione e accedi nuovamente per attivare questo punto di mount",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossibile ottenere le informazioni dal server ownCloud: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Impossibile ottenere l'elenco dei punti di mount esterni: {type}",
+ "There was an error with message: " : "Si è verificato un errore con il messaggio:",
+ "External mount error" : "Errore di mount esterno",
+ "goto-external-storage" : "goto-external-storage",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Impossibile ottenere l'elenco dei punti di mount delle unità di rete Windows: risposta vuota dal server",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alcuni dei punti di mount esterni configurati non sono connessi. Fai clic sulle righe rosse per ulteriori informazioni",
"Access key" : "Chiave di accesso",
"Secret key" : "Chiave segreta",
"Builtin" : "Integrata",
diff --git a/apps/files_external/l10n/it.json b/apps/files_external/l10n/it.json
index 67f7fe3595b..08da52362d6 100644
--- a/apps/files_external/l10n/it.json
+++ b/apps/files_external/l10n/it.json
@@ -34,6 +34,15 @@
"(group)" : "(gruppo)",
"Admin defined" : "Definito dall'amministratore",
"Saved" : "Salvato",
+ "Empty response from the server" : "Risposta vuota dal server",
+ "Couldn't access. Please logout and login to activate this mount point" : "Impossibile accedere. Termina la sessione e accedi nuovamente per attivare questo punto di mount",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossibile ottenere le informazioni dal server ownCloud: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Impossibile ottenere l'elenco dei punti di mount esterni: {type}",
+ "There was an error with message: " : "Si è verificato un errore con il messaggio:",
+ "External mount error" : "Errore di mount esterno",
+ "goto-external-storage" : "goto-external-storage",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Impossibile ottenere l'elenco dei punti di mount delle unità di rete Windows: risposta vuota dal server",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alcuni dei punti di mount esterni configurati non sono connessi. Fai clic sulle righe rosse per ulteriori informazioni",
"Access key" : "Chiave di accesso",
"Secret key" : "Chiave segreta",
"Builtin" : "Integrata",
diff --git a/apps/files_external/l10n/ja.js b/apps/files_external/l10n/ja.js
index 5518f6afa78..d99eca69d2b 100644
--- a/apps/files_external/l10n/ja.js
+++ b/apps/files_external/l10n/ja.js
@@ -17,6 +17,7 @@ OC.L10N.register(
"Unsatisfied backend parameters" : "バックエンドのためのパラメーターが不十分です。",
"Unsatisfied authentication mechanism parameters" : "認証のためのパラメータが不十分です",
"Insufficient data: %s" : "データが不足しています: %s",
+ "%s" : "%s",
"Personal" : "個人",
"System" : "システム",
"Grant access" : "アクセスを許可",
@@ -35,6 +36,13 @@ OC.L10N.register(
"(group)" : "(グループ)",
"Admin defined" : "管理者設定済",
"Saved" : "保存されました",
+ "Empty response from the server" : "サーバーから空の応答がありました",
+ "Couldn't access. Please logout and login to activate this mount point" : "アクセス出来ませんでした。このマウントポイントを有効にするには一度ログアウトしてからログインしてください。",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud サーバーから情報を取得出来ませんでした。: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "外部マウントポイントのリストを取得出来ませんでした。: {type}",
+ "There was an error with message: " : "メッセージ付きのエラーが発生しました:",
+ "External mount error" : "外部マウントエラー",
+ "goto-external-storage" : "外部ストレージに行く",
"Access key" : "アクセスキー",
"Secret key" : "シークレットキー",
"Builtin" : "ビルトイン",
diff --git a/apps/files_external/l10n/ja.json b/apps/files_external/l10n/ja.json
index 8134ed16cd5..2675c3e18e5 100644
--- a/apps/files_external/l10n/ja.json
+++ b/apps/files_external/l10n/ja.json
@@ -15,6 +15,7 @@
"Unsatisfied backend parameters" : "バックエンドのためのパラメーターが不十分です。",
"Unsatisfied authentication mechanism parameters" : "認証のためのパラメータが不十分です",
"Insufficient data: %s" : "データが不足しています: %s",
+ "%s" : "%s",
"Personal" : "個人",
"System" : "システム",
"Grant access" : "アクセスを許可",
@@ -33,6 +34,13 @@
"(group)" : "(グループ)",
"Admin defined" : "管理者設定済",
"Saved" : "保存されました",
+ "Empty response from the server" : "サーバーから空の応答がありました",
+ "Couldn't access. Please logout and login to activate this mount point" : "アクセス出来ませんでした。このマウントポイントを有効にするには一度ログアウトしてからログインしてください。",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud サーバーから情報を取得出来ませんでした。: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "外部マウントポイントのリストを取得出来ませんでした。: {type}",
+ "There was an error with message: " : "メッセージ付きのエラーが発生しました:",
+ "External mount error" : "外部マウントエラー",
+ "goto-external-storage" : "外部ストレージに行く",
"Access key" : "アクセスキー",
"Secret key" : "シークレットキー",
"Builtin" : "ビルトイン",
diff --git a/apps/files_external/l10n/nl.js b/apps/files_external/l10n/nl.js
index 5051689216f..3200988ec2b 100644
--- a/apps/files_external/l10n/nl.js
+++ b/apps/files_external/l10n/nl.js
@@ -36,6 +36,15 @@ OC.L10N.register(
"(group)" : "(groep)",
"Admin defined" : "Beheerder gedefinieerd",
"Saved" : "Bewaard",
+ "Empty response from the server" : "Lege reactie van de server",
+ "Couldn't access. Please logout and login to activate this mount point" : "Geen toegang. Log uit en opnieuw in om dit koppelpunt te activeren",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Kon geen informatie van de ownCloud server krijgen: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Kon geen overzicht met externe koppelpunten krijgen: {type}",
+ "There was an error with message: " : "Er was een fout met de volgende melding:",
+ "External mount error" : "Extern koppelpunt fout",
+ "goto-external-storage" : "goto-external-storage",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Kon geen overzicht met Windows netwerk koppelpunten krijgen: lege reactie van de server",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Sommige van de geconfigureerde koppelpunten zijn niet verbonden. Klok op de rode rij(en) voor meer informatie",
"Access key" : "Access Key",
"Secret key" : "Geheime sleutel",
"Builtin" : "Ingebouwd",
diff --git a/apps/files_external/l10n/nl.json b/apps/files_external/l10n/nl.json
index d8a254bad1b..09b912445c1 100644
--- a/apps/files_external/l10n/nl.json
+++ b/apps/files_external/l10n/nl.json
@@ -34,6 +34,15 @@
"(group)" : "(groep)",
"Admin defined" : "Beheerder gedefinieerd",
"Saved" : "Bewaard",
+ "Empty response from the server" : "Lege reactie van de server",
+ "Couldn't access. Please logout and login to activate this mount point" : "Geen toegang. Log uit en opnieuw in om dit koppelpunt te activeren",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Kon geen informatie van de ownCloud server krijgen: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Kon geen overzicht met externe koppelpunten krijgen: {type}",
+ "There was an error with message: " : "Er was een fout met de volgende melding:",
+ "External mount error" : "Extern koppelpunt fout",
+ "goto-external-storage" : "goto-external-storage",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Kon geen overzicht met Windows netwerk koppelpunten krijgen: lege reactie van de server",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Sommige van de geconfigureerde koppelpunten zijn niet verbonden. Klok op de rode rij(en) voor meer informatie",
"Access key" : "Access Key",
"Secret key" : "Geheime sleutel",
"Builtin" : "Ingebouwd",
diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js
index 0d4f04ae226..296d51836ca 100644
--- a/apps/files_external/l10n/pt_BR.js
+++ b/apps/files_external/l10n/pt_BR.js
@@ -17,6 +17,7 @@ OC.L10N.register(
"Unsatisfied backend parameters" : "Parâmetros de back-end não-atendidos",
"Unsatisfied authentication mechanism parameters" : "Parâmetros de mecanismos de autenticação não satisfeitos",
"Insufficient data: %s" : "Dados insuficientes: %s",
+ "%s" : "%s",
"Personal" : "Pessoal",
"System" : "Sistema",
"Grant access" : "Permitir acesso",
@@ -35,6 +36,15 @@ OC.L10N.register(
"(group)" : "(grupo)",
"Admin defined" : "Definido pelo administrador",
"Saved" : "Salvo",
+ "Empty response from the server" : "Resposta vazia a partir do servidor",
+ "Couldn't access. Please logout and login to activate this mount point" : "Não foi possível acessar. Por favor, desconectar e conectar novamente para ativar este ponto de montagem",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Não foi possível obter as informações do servidor ownCloud: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Não foi possível obter a lista de pontos de montagem externos: {type}",
+ "There was an error with message: " : "Houve um erro com a mensagem:",
+ "External mount error" : "Erro de montagem externa",
+ "goto-external-storage" : "ir-montagem-externa",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Não foi possível obter a lista unidades de pontos de montagem da rede do Windows: resposta vazia a partir do servidor",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alguns dos pontos de montagem externos configurados não estão conectados. Por favor clique na linha vermelha(s) para mais informações",
"Access key" : "Chave da acesso",
"Secret key" : "Chave secreta",
"Builtin" : "Construídas em",
diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json
index d49e818ea0f..5e4aed0b191 100644
--- a/apps/files_external/l10n/pt_BR.json
+++ b/apps/files_external/l10n/pt_BR.json
@@ -15,6 +15,7 @@
"Unsatisfied backend parameters" : "Parâmetros de back-end não-atendidos",
"Unsatisfied authentication mechanism parameters" : "Parâmetros de mecanismos de autenticação não satisfeitos",
"Insufficient data: %s" : "Dados insuficientes: %s",
+ "%s" : "%s",
"Personal" : "Pessoal",
"System" : "Sistema",
"Grant access" : "Permitir acesso",
@@ -33,6 +34,15 @@
"(group)" : "(grupo)",
"Admin defined" : "Definido pelo administrador",
"Saved" : "Salvo",
+ "Empty response from the server" : "Resposta vazia a partir do servidor",
+ "Couldn't access. Please logout and login to activate this mount point" : "Não foi possível acessar. Por favor, desconectar e conectar novamente para ativar este ponto de montagem",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Não foi possível obter as informações do servidor ownCloud: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Não foi possível obter a lista de pontos de montagem externos: {type}",
+ "There was an error with message: " : "Houve um erro com a mensagem:",
+ "External mount error" : "Erro de montagem externa",
+ "goto-external-storage" : "ir-montagem-externa",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Não foi possível obter a lista unidades de pontos de montagem da rede do Windows: resposta vazia a partir do servidor",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alguns dos pontos de montagem externos configurados não estão conectados. Por favor clique na linha vermelha(s) para mais informações",
"Access key" : "Chave da acesso",
"Secret key" : "Chave secreta",
"Builtin" : "Construídas em",
diff --git a/apps/files_external/l10n/sq.js b/apps/files_external/l10n/sq.js
index a708bca92d0..3e2de744b15 100644
--- a/apps/files_external/l10n/sq.js
+++ b/apps/files_external/l10n/sq.js
@@ -36,6 +36,14 @@ OC.L10N.register(
"(group)" : "(grup)",
"Admin defined" : "Përcaktuar nga përgjegjësi",
"Saved" : "U ruajt",
+ "Empty response from the server" : "Përgjigje e zbrazët prej shërbyesit",
+ "Couldn't access. Please logout and login to activate this mount point" : "S’fut dot. Ju lutemi, dilni dhe hyni që të aktivizohet kjo pikë montimi",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "S’u morën dot të dhëna nga shërbyesi ownCloud: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "S’u mor dot lista e pikave të jashtme të montimit: {type}",
+ "There was an error with message: " : "Pati një gabim me këtë mesazh:",
+ "External mount error" : "Gabim i jashtëm montimi",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "S’u mor dot lista e pikave të montimit Windows network drive: përgjigje e zbrazët nga shërbyesi",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Disa nga pikat e jashtme të formësuara të montimit s’janë të lidhura. Ju lutemi, klikoni në shigjetën(at) e kuqe për më tepër të dhëna",
"Access key" : "Kyç hyrjesh",
"Secret key" : "Kyç i fshehtë",
"Builtin" : "I brendshëm",
diff --git a/apps/files_external/l10n/sq.json b/apps/files_external/l10n/sq.json
index 655a419c389..f184caf061e 100644
--- a/apps/files_external/l10n/sq.json
+++ b/apps/files_external/l10n/sq.json
@@ -34,6 +34,14 @@
"(group)" : "(grup)",
"Admin defined" : "Përcaktuar nga përgjegjësi",
"Saved" : "U ruajt",
+ "Empty response from the server" : "Përgjigje e zbrazët prej shërbyesit",
+ "Couldn't access. Please logout and login to activate this mount point" : "S’fut dot. Ju lutemi, dilni dhe hyni që të aktivizohet kjo pikë montimi",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "S’u morën dot të dhëna nga shërbyesi ownCloud: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "S’u mor dot lista e pikave të jashtme të montimit: {type}",
+ "There was an error with message: " : "Pati një gabim me këtë mesazh:",
+ "External mount error" : "Gabim i jashtëm montimi",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "S’u mor dot lista e pikave të montimit Windows network drive: përgjigje e zbrazët nga shërbyesi",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Disa nga pikat e jashtme të formësuara të montimit s’janë të lidhura. Ju lutemi, klikoni në shigjetën(at) e kuqe për më tepër të dhëna",
"Access key" : "Kyç hyrjesh",
"Secret key" : "Kyç i fshehtë",
"Builtin" : "I brendshëm",
diff --git a/apps/files_external/l10n/th_TH.js b/apps/files_external/l10n/th_TH.js
index bb9c2dc909d..97a64e78e40 100644
--- a/apps/files_external/l10n/th_TH.js
+++ b/apps/files_external/l10n/th_TH.js
@@ -36,6 +36,13 @@ OC.L10N.register(
"(group)" : "(กลุ่ม)",
"Admin defined" : "ถูกกำหนดโดยผู้ดูแลระบบ",
"Saved" : "บันทึกแล้ว",
+ "Empty response from the server" : "ไม่มีการตอบสนองจากเซิร์ฟเวอร์",
+ "Couldn't access. Please logout and login to activate this mount point" : "ไม่สามารถเข้าถึง กรุณออกจากระบบและาเข้าสู่ระบบใหม่เพื่อเปิดใช้งานจุดเชื่อมต่อนี้",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "ไม่สามารถรับข้อมูลจากเซิร์ฟเวอร์ ownCloud: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "ไม่สามารถรับรายชื่อของจุดเชื่อมต่อภายนอก: {type}",
+ "There was an error with message: " : "มีข้อความแสดงข้อผิดพลาด",
+ "External mount error" : "การติดจากตั้งภายนอกเกิดข้อผิดพลาด",
+ "goto-external-storage" : "ไปยังพื้นที่จัดเก็บข้อมูลภายนอก",
"Access key" : "คีย์การเข้าถึง",
"Secret key" : "คีย์ลับ",
"Builtin" : "ในตัว",
diff --git a/apps/files_external/l10n/th_TH.json b/apps/files_external/l10n/th_TH.json
index f38d99ae88b..de569c9d61f 100644
--- a/apps/files_external/l10n/th_TH.json
+++ b/apps/files_external/l10n/th_TH.json
@@ -34,6 +34,13 @@
"(group)" : "(กลุ่ม)",
"Admin defined" : "ถูกกำหนดโดยผู้ดูแลระบบ",
"Saved" : "บันทึกแล้ว",
+ "Empty response from the server" : "ไม่มีการตอบสนองจากเซิร์ฟเวอร์",
+ "Couldn't access. Please logout and login to activate this mount point" : "ไม่สามารถเข้าถึง กรุณออกจากระบบและาเข้าสู่ระบบใหม่เพื่อเปิดใช้งานจุดเชื่อมต่อนี้",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "ไม่สามารถรับข้อมูลจากเซิร์ฟเวอร์ ownCloud: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "ไม่สามารถรับรายชื่อของจุดเชื่อมต่อภายนอก: {type}",
+ "There was an error with message: " : "มีข้อความแสดงข้อผิดพลาด",
+ "External mount error" : "การติดจากตั้งภายนอกเกิดข้อผิดพลาด",
+ "goto-external-storage" : "ไปยังพื้นที่จัดเก็บข้อมูลภายนอก",
"Access key" : "คีย์การเข้าถึง",
"Secret key" : "คีย์ลับ",
"Builtin" : "ในตัว",
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index 7a869847a63..f29e08dad25 100644
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -90,6 +90,7 @@ class OC_Mount_Config {
$userStoragesService->setUser($user);
foreach ($userGlobalStoragesService->getStorages() as $storage) {
+ /** @var \OCA\Files_external\Lib\StorageConfig $storage */
$mountPoint = '/'.$uid.'/files'.$storage->getMountPoint();
$mountEntry = self::prepareMountPointEntry($storage, false);
foreach ($mountEntry['options'] as &$option) {
@@ -267,26 +268,6 @@ class OC_Mount_Config {
}
/**
- * Write the mount points to the config file
- *
- * @param string|null $user If not null, personal for $user, otherwise system
- * @param array $data Mount points
- */
- public static function writeData($user, $data) {
- if (isset($user)) {
- $file = \OC::$server->getUserManager()->get($user)->getHome() . '/mount.json';
- } else {
- $config = \OC::$server->getConfig();
- $datadir = $config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data/');
- $file = $config->getSystemValue('mount_file', $datadir . '/mount.json');
- }
-
- $content = json_encode($data, JSON_PRETTY_PRINT);
- @file_put_contents($file, $content);
- @chmod($file, 0640);
- }
-
- /**
* Get backend dependency message
* TODO: move into AppFramework along with templates
*
@@ -397,39 +378,9 @@ class OC_Mount_Config {
}
/**
- * Merges mount points
- *
- * @param array $data Existing mount points
- * @param array $mountPoint New mount point
- * @param string $mountType
- * @return array
- */
- private static function mergeMountPoints($data, $mountPoint, $mountType) {
- $applicable = key($mountPoint);
- $mountPath = key($mountPoint[$applicable]);
- if (isset($data[$mountType])) {
- if (isset($data[$mountType][$applicable])) {
- // Merge priorities
- if (isset($data[$mountType][$applicable][$mountPath])
- && isset($data[$mountType][$applicable][$mountPath]['priority'])
- && !isset($mountPoint[$applicable][$mountPath]['priority'])
- ) {
- $mountPoint[$applicable][$mountPath]['priority']
- = $data[$mountType][$applicable][$mountPath]['priority'];
- }
- $data[$mountType][$applicable]
- = array_merge($data[$mountType][$applicable], $mountPoint[$applicable]);
- } else {
- $data[$mountType] = array_merge($data[$mountType], $mountPoint);
- }
- } else {
- $data[$mountType] = $mountPoint;
- }
- return $data;
- }
-
- /**
* Returns the encryption cipher
+ *
+ * @return AES
*/
private static function getCipher() {
$cipher = new AES(AES::MODE_CBC);
@@ -441,6 +392,9 @@ class OC_Mount_Config {
* Computes a hash based on the given configuration.
* This is mostly used to find out whether configurations
* are the same.
+ *
+ * @param array $config
+ * @return string
*/
public static function makeConfigHash($config) {
$data = json_encode(
diff --git a/apps/files_external/lib/config/configadapter.php b/apps/files_external/lib/config/configadapter.php
index 4e37e6a4004..4f68c3c7fde 100644
--- a/apps/files_external/lib/config/configadapter.php
+++ b/apps/files_external/lib/config/configadapter.php
@@ -114,7 +114,7 @@ class ConfigAdapter implements IMountProvider {
* @return \OCP\Files\Mount\IMountPoint[]
*/
public function getMountsForUser(IUser $user, IStorageFactory $loader) {
- $this->migrator->migrateUser();
+ $this->migrator->migrateUser($user);
$mounts = [];
diff --git a/apps/files_external/lib/personalmount.php b/apps/files_external/lib/personalmount.php
index 26f68ba32db..34ae516ea5e 100644
--- a/apps/files_external/lib/personalmount.php
+++ b/apps/files_external/lib/personalmount.php
@@ -35,12 +35,12 @@ class PersonalMount extends MountPoint implements MoveableMount {
protected $storagesService;
/** @var int */
- protected $storageId;
+ protected $numericStorageId;
/**
* @param UserStoragesService $storagesService
* @param int $storageId
- * @param string|\OC\Files\Storage\Storage $storage
+ * @param \OCP\Files\Storage $storage
* @param string $mountpoint
* @param array $arguments (optional) configuration for the storage backend
* @param \OCP\Files\Storage\IStorageFactory $loader
@@ -57,7 +57,7 @@ class PersonalMount extends MountPoint implements MoveableMount {
) {
parent::__construct($storage, $mountpoint, $arguments, $loader, $mountOptions);
$this->storagesService = $storagesService;
- $this->storageId = $storageId;
+ $this->numericStorageId = $storageId;
}
/**
@@ -67,7 +67,7 @@ class PersonalMount extends MountPoint implements MoveableMount {
* @return bool
*/
public function moveMount($target) {
- $storage = $this->storagesService->getStorage($this->storageId);
+ $storage = $this->storagesService->getStorage($this->numericStorageId);
// remove "/$user/files" prefix
$targetParts = explode('/', trim($target, '/'), 3);
$storage->setMountPoint($targetParts[2]);
@@ -82,7 +82,7 @@ class PersonalMount extends MountPoint implements MoveableMount {
* @return bool
*/
public function removeMount() {
- $this->storagesService->removeStorage($this->storageId);
+ $this->storagesService->removeStorage($this->numericStorageId);
return true;
}
}
diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php
index a94840ead59..80b44a4cbdf 100644
--- a/apps/files_external/lib/smb.php
+++ b/apps/files_external/lib/smb.php
@@ -33,6 +33,7 @@ use Icewind\SMB\Exception\Exception;
use Icewind\SMB\Exception\NotFoundException;
use Icewind\SMB\NativeServer;
use Icewind\SMB\Server;
+use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\IteratorDirectory;
use OC\Files\Filesystem;
@@ -189,7 +190,10 @@ class SMB extends Common {
return $this->share->read($fullPath);
case 'w':
case 'wb':
- return $this->share->write($fullPath);
+ $source = $this->share->write($fullPath);
+ return CallBackWrapper::wrap($source, null, null, function () use ($fullPath) {
+ unset($this->statCache[$fullPath]);
+ });
case 'a':
case 'ab':
case 'r+':
@@ -219,7 +223,8 @@ class SMB extends Common {
}
$source = fopen($tmpFile, $mode);
$share = $this->share;
- return CallBackWrapper::wrap($source, null, null, function () use ($tmpFile, $fullPath, $share) {
+ return CallbackWrapper::wrap($source, null, null, function () use ($tmpFile, $fullPath, $share) {
+ unset($this->statCache[$fullPath]);
$share->put($tmpFile, $fullPath);
unlink($tmpFile);
});
diff --git a/apps/files_external/migration/dummyusersession.php b/apps/files_external/migration/dummyusersession.php
new file mode 100644
index 00000000000..9ffbfd6309f
--- /dev/null
+++ b/apps/files_external/migration/dummyusersession.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * @author Robin Appelman <icewind@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\Files_external\Migration;
+
+use OCP\IUser;
+use OCP\IUserSession;
+
+class DummyUserSession implements IUserSession {
+
+ /**
+ * @var IUser
+ */
+ private $user;
+
+ public function login($user, $password) {
+ }
+
+ public function logout() {
+ }
+
+ public function setUser($user) {
+ $this->user = $user;
+ }
+
+ public function getUser() {
+ return $this->user;
+ }
+
+ public function isLoggedIn() {
+ return !is_null($this->user);
+ }
+}
diff --git a/apps/files_external/migration/storagemigrator.php b/apps/files_external/migration/storagemigrator.php
index c8e323121ea..b469205ac55 100644
--- a/apps/files_external/migration/storagemigrator.php
+++ b/apps/files_external/migration/storagemigrator.php
@@ -32,6 +32,7 @@ use OCA\Files_external\Service\UserStoragesService;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\ILogger;
+use OCP\IUser;
use OCP\IUserSession;
/**
@@ -49,11 +50,6 @@ class StorageMigrator {
private $dbConfig;
/**
- * @var IUserSession
- */
- private $userSession;
-
- /**
* @var IConfig
*/
private $config;
@@ -73,7 +69,6 @@ class StorageMigrator {
*
* @param BackendService $backendService
* @param DBConfigService $dbConfig
- * @param IUserSession $userSession
* @param IConfig $config
* @param IDBConnection $connection
* @param ILogger $logger
@@ -81,14 +76,12 @@ class StorageMigrator {
public function __construct(
BackendService $backendService,
DBConfigService $dbConfig,
- IUserSession $userSession,
IConfig $config,
IDBConnection $connection,
ILogger $logger
) {
$this->backendService = $backendService;
$this->dbConfig = $dbConfig;
- $this->userSession = $userSession;
$this->config = $config;
$this->connection = $connection;
$this->logger = $logger;
@@ -121,14 +114,18 @@ class StorageMigrator {
/**
* Migrate personal storages configured by the current user
+ *
+ * @param IUser $user
*/
- public function migrateUser() {
- $userId = $this->userSession->getUser()->getUID();
+ public function migrateUser(IUser $user) {
+ $dummySession = new DummyUserSession();
+ $dummySession->setUser($user);
+ $userId = $user->getUID();
$userVersion = $this->config->getUserValue($userId, 'files_external', 'config_version', '0.0.0');
if (version_compare($userVersion, '0.5.0', '<')) {
$this->config->setUserValue($userId, 'files_external', 'config_version', '0.5.0');
- $legacyService = new UserLegacyStoragesService($this->backendService, $this->userSession);
- $storageService = new UserStoragesService($this->backendService, $this->dbConfig, $this->userSession);
+ $legacyService = new UserLegacyStoragesService($this->backendService, $dummySession);
+ $storageService = new UserStoragesService($this->backendService, $this->dbConfig, $dummySession);
$this->migrate($legacyService, $storageService);
}
diff --git a/apps/files_external/service/storagesservice.php b/apps/files_external/service/storagesservice.php
index 9be6498435c..97f79c13324 100644
--- a/apps/files_external/service/storagesservice.php
+++ b/apps/files_external/service/storagesservice.php
@@ -185,6 +185,9 @@ abstract class StoragesService {
*/
abstract public function getVisibilityType();
+ /**
+ * @return integer
+ */
protected function getType() {
return DBConfigService::MOUNT_TYPE_ADMIN;
}
diff --git a/apps/files_external/service/userglobalstoragesservice.php b/apps/files_external/service/userglobalstoragesservice.php
index cb49f0f6726..e58815f8a79 100644
--- a/apps/files_external/service/userglobalstoragesservice.php
+++ b/apps/files_external/service/userglobalstoragesservice.php
@@ -89,6 +89,9 @@ class UserGlobalStoragesService extends GlobalStoragesService {
throw new \DomainException('UserGlobalStoragesService writing disallowed');
}
+ /**
+ * @param integer $id
+ */
public function removeStorage($id) {
throw new \DomainException('UserGlobalStoragesService writing disallowed');
}
diff --git a/apps/files_external/tests/env/entrypoint.sh b/apps/files_external/tests/env/entrypoint.sh
new file mode 100755
index 00000000000..6dd6ef23fb6
--- /dev/null
+++ b/apps/files_external/tests/env/entrypoint.sh
@@ -0,0 +1,274 @@
+#!/bin/bash
+set -e
+
+: ${CLUSTER:=ceph}
+: ${RGW_NAME:=$(hostname -s)}
+: ${MON_NAME:=$(hostname -s)}
+: ${RGW_CIVETWEB_PORT:=80}
+: ${OSD_SIZE:=100}
+
+: ${KEYSTONE_ADMIN_TOKEN:=admin}
+: ${KEYSTONE_ADMIN_PORT:=35357}
+: ${KEYSTONE_PUBLIC_PORT:=5001}
+
+: ${KEYSTONE_SERVICE:=${CLUSTER}}
+: ${KEYSTONE_ENDPOINT_REGION:=region}
+
+: ${KEYSTONE_ADMIN_USER:=admin}
+: ${KEYSTONE_ADMIN_TENANT:=admin}
+: ${KEYSTONE_ADMIN_PASS:=admin}
+
+ip_address=$(head -n1 /etc/hosts | cut -d" " -f1)
+: ${MON_IP:=${ip_address}}
+subnet=$(ip route | grep "src ${ip_address}" | cut -d" " -f1)
+: ${CEPH_NETWORK:=${subnet}}
+
+#######
+# MON #
+#######
+
+if [ ! -n "$CEPH_NETWORK" ]; then
+ echo "ERROR- CEPH_NETWORK must be defined as the name of the network for the OSDs"
+ exit 1
+fi
+
+if [ ! -n "$MON_IP" ]; then
+ echo "ERROR- MON_IP must be defined as the IP address of the monitor"
+ exit 1
+fi
+
+# bootstrap MON
+if [ ! -e /etc/ceph/ceph.conf ]; then
+ fsid=$(uuidgen)
+ cat <<ENDHERE >/etc/ceph/${CLUSTER}.conf
+[global]
+fsid = $fsid
+mon initial members = ${MON_NAME}
+mon host = ${MON_IP}
+auth cluster required = cephx
+auth service required = cephx
+auth client required = cephx
+osd crush chooseleaf type = 0
+osd journal size = 100
+osd pool default pg num = 8
+osd pool default pgp num = 8
+osd pool default size = 1
+public network = ${CEPH_NETWORK}
+cluster network = ${CEPH_NETWORK}
+debug ms = 1
+
+[mon]
+debug mon = 20
+debug paxos = 20
+debug auth = 20
+
+[osd]
+debug osd = 20
+debug filestore = 20
+debug journal = 20
+debug monc = 20
+
+[mds]
+debug mds = 20
+debug mds balancer = 20
+debug mds log = 20
+debug mds migrator = 20
+
+[client.radosgw.gateway]
+rgw keystone url = http://${MON_IP}:${KEYSTONE_ADMIN_PORT}
+rgw keystone admin token = ${KEYSTONE_ADMIN_TOKEN}
+rgw keystone accepted roles = _member_
+ENDHERE
+
+ # Generate administrator key
+ ceph-authtool /etc/ceph/${CLUSTER}.client.admin.keyring --create-keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow'
+
+ # Generate the mon. key
+ ceph-authtool /etc/ceph/${CLUSTER}.mon.keyring --create-keyring --gen-key -n mon. --cap mon 'allow *'
+
+ # Generate initial monitor map
+ monmaptool --create --add ${MON_NAME} ${MON_IP} --fsid ${fsid} /etc/ceph/monmap
+fi
+
+# If we don't have a monitor keyring, this is a new monitor
+if [ ! -e /var/lib/ceph/mon/${CLUSTER}-${MON_NAME}/keyring ]; then
+
+ if [ ! -e /etc/ceph/${CLUSTER}.client.admin.keyring ]; then
+ echo "ERROR- /etc/ceph/${CLUSTER}.client.admin.keyring must exist; get it from your existing mon"
+ exit 2
+ fi
+
+ if [ ! -e /etc/ceph/${CLUSTER}.mon.keyring ]; then
+ echo "ERROR- /etc/ceph/${CLUSTER}.mon.keyring must exist. You can extract it from your current monitor by running 'ceph auth get mon. -o /tmp/${CLUSTER}.mon.keyring'"
+ exit 3
+ fi
+
+ if [ ! -e /etc/ceph/monmap ]; then
+ echo "ERROR- /etc/ceph/monmap must exist. You can extract it from your current monitor by running 'ceph mon getmap -o /tmp/monmap'"
+ exit 4
+ fi
+
+ # Import the client.admin keyring and the monitor keyring into a new, temporary one
+ ceph-authtool /tmp/${CLUSTER}.mon.keyring --create-keyring --import-keyring /etc/ceph/${CLUSTER}.client.admin.keyring
+ ceph-authtool /tmp/${CLUSTER}.mon.keyring --import-keyring /etc/ceph/${CLUSTER}.mon.keyring
+
+ # Make the monitor directory
+ mkdir -p /var/lib/ceph/mon/${CLUSTER}-${MON_NAME}
+
+ # Prepare the monitor daemon's directory with the map and keyring
+ ceph-mon --mkfs -i ${MON_NAME} --monmap /etc/ceph/monmap --keyring /tmp/${CLUSTER}.mon.keyring
+
+ # Clean up the temporary key
+ rm /tmp/${CLUSTER}.mon.keyring
+fi
+
+# start MON
+ceph-mon -i ${MON_NAME} --public-addr ${MON_IP}:6789
+
+# change replica size
+ceph osd pool set rbd size 1
+
+
+#######
+# OSD #
+#######
+
+if [ ! -e /var/lib/ceph/osd/${CLUSTER}-0/keyring ]; then
+ # bootstrap OSD
+ mkdir -p /var/lib/ceph/osd/${CLUSTER}-0
+ # skip btrfs HACK if btrfs is already in place
+ if [ "$(stat -f /var/lib/ceph/osd/${CLUSTER}-0 2>/dev/null | grep btrfs | wc -l)" == "0" ]; then
+ # HACK create btrfs loopback device
+ echo "creating osd storage image"
+ dd if=/dev/zero of=/tmp/osddata bs=1M count=${OSD_SIZE}
+ mkfs.btrfs /tmp/osddata
+ echo "mounting via loopback"
+ mount -o loop /tmp/osddata /var/lib/ceph/osd/${CLUSTER}-0
+ echo "now mounted:"
+ mount
+ # end HACK
+ fi
+ echo "creating osd"
+ ceph osd create
+ echo "creating osd filesystem"
+ ceph-osd -i 0 --mkfs
+ echo "creating osd keyring"
+ ceph auth get-or-create osd.0 osd 'allow *' mon 'allow profile osd' -o /var/lib/ceph/osd/${CLUSTER}-0/keyring
+ echo "configuring osd crush"
+ ceph osd crush add 0 1 root=default host=$(hostname -s)
+ echo "adding osd keyring"
+ ceph-osd -i 0 -k /var/lib/ceph/osd/${CLUSTER}-0/keyring
+fi
+
+# start OSD
+echo "starting osd"
+ceph-osd --cluster=${CLUSTER} -i 0
+
+#sleep 10
+
+#######
+# MDS #
+#######
+
+if [ ! -e /var/lib/ceph/mds/${CLUSTER}-0/keyring ]; then
+ # create ceph filesystem
+ echo "creating osd pool"
+ ceph osd pool create cephfs_data 8
+ echo "creating osd pool metadata"
+ ceph osd pool create cephfs_metadata 8
+ echo "creating cephfs"
+ ceph fs new cephfs cephfs_metadata cephfs_data
+
+ # bootstrap MDS
+ mkdir -p /var/lib/ceph/mds/${CLUSTER}-0
+ echo "creating mds auth"
+ ceph auth get-or-create mds.0 mds 'allow' osd 'allow *' mon 'allow profile mds' > /var/lib/ceph/mds/${CLUSTER}-0/keyring
+fi
+
+# start MDS
+echo "starting mds"
+ceph-mds --cluster=${CLUSTER} -i 0
+
+#sleep 10
+
+
+#######
+# RGW #
+#######
+
+if [ ! -e /var/lib/ceph/radosgw/${RGW_NAME}/keyring ]; then
+ # bootstrap RGW
+ mkdir -p /var/lib/ceph/radosgw/${RGW_NAME}
+ echo "creating rgw auth"
+ ceph auth get-or-create client.radosgw.gateway osd 'allow rwx' mon 'allow rw' -o /var/lib/ceph/radosgw/${RGW_NAME}/keyring
+fi
+
+# start RGW
+echo "starting rgw"
+radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway -k /var/lib/ceph/radosgw/${RGW_NAME}/keyring --rgw-socket-path="" --rgw-frontends="civetweb port=${RGW_CIVETWEB_PORT}"
+
+
+#######
+# API #
+#######
+
+# start ceph-rest-api
+echo "starting rest api"
+ceph-rest-api -n client.admin &
+
+############
+# Keystone #
+############
+
+if [ ! -e /etc/keystone/${CLUSTER}.conf ]; then
+ cat <<ENDHERE > /etc/keystone/${CLUSTER}.conf
+[DEFAULT]
+admin_token=${KEYSTONE_ADMIN_TOKEN}
+admin_port=${KEYSTONE_ADMIN_PORT}
+public_port=${KEYSTONE_PUBLIC_PORT}
+
+[database]
+connection = sqlite:////var/lib/keystone/keystone.db
+ENDHERE
+
+ # start Keystone
+ echo "starting keystone"
+ keystone-all --config-file /etc/keystone/${CLUSTER}.conf &
+
+ # wait until up
+ while ! nc ${MON_IP} ${KEYSTONE_ADMIN_PORT} </dev/null; do
+ sleep 1
+ done
+
+ export OS_SERVICE_TOKEN=${KEYSTONE_ADMIN_TOKEN}
+ export OS_SERVICE_ENDPOINT=http://${MON_IP}:${KEYSTONE_ADMIN_PORT}/v2.0
+
+ echo "creating keystone service ${KEYSTONE_SERVICE}"
+ keystone service-create --name ${KEYSTONE_SERVICE} --type object-store
+ echo "creating keystone endpoint ${KEYSTONE_SERVICE}"
+ keystone endpoint-create --service ${KEYSTONE_SERVICE} \
+ --region ${KEYSTONE_ENDPOINT_REGION} \
+ --publicurl http://${MON_IP}:${RGW_CIVETWEB_PORT}/swift/v1 \
+ --internalurl http://${MON_IP}:${RGW_CIVETWEB_PORT}/swift/v1 \
+ --adminurl http://${MON_IP}:${RGW_CIVETWEB_PORT}/swift/v1
+
+ echo "creating keystone user ${KEYSTONE_ADMIN_USER}"
+ keystone user-create --name=${KEYSTONE_ADMIN_USER} --pass=${KEYSTONE_ADMIN_PASS} --email=dev@null.com
+ echo "creating keystone tenant ${KEYSTONE_ADMIN_TENANT}"
+ keystone tenant-create --name=${KEYSTONE_ADMIN_TENANT} --description=admin
+ echo "adding keystone role _member_"
+ keystone user-role-add --user=${KEYSTONE_ADMIN_USER} --tenant=${KEYSTONE_ADMIN_TENANT} --role=_member_
+
+ echo "creating keystone role admin"
+ keystone role-create --name=admin
+ echo "adding keystone role admin"
+ keystone user-role-add --user=${KEYSTONE_ADMIN_USER} --tenant=${KEYSTONE_ADMIN_TENANT} --role=admin
+fi
+
+
+#########
+# WATCH #
+#########
+
+echo "watching ceph"
+exec ceph -w
diff --git a/apps/files_external/tests/env/start-smb-windows.sh b/apps/files_external/tests/env/start-smb-windows.sh
index 9453b4eb3e7..a23c879dd96 100755
--- a/apps/files_external/tests/env/start-smb-windows.sh
+++ b/apps/files_external/tests/env/start-smb-windows.sh
@@ -19,7 +19,7 @@ user=smb-test
password=!owncloud123
host=WIN-9GTFAS08C15
-if ! "$thisFolder"/env/wait-for-connection ${host} 445 0; then
+if ! "$thisFolder"/env/wait-for-connection ${host} 445; then
echo "[ERROR] Server not reachable" >&2
exit 1
fi
diff --git a/apps/files_external/tests/env/start-swift-ceph.sh b/apps/files_external/tests/env/start-swift-ceph.sh
index 936bb667e94..f3707aa39f6 100755
--- a/apps/files_external/tests/env/start-swift-ceph.sh
+++ b/apps/files_external/tests/env/start-swift-ceph.sh
@@ -25,7 +25,7 @@ echo "Fetch recent ${docker_image} docker image"
docker pull ${docker_image}
# retrieve current folder to place the config in the parent folder
-thisFolder=`echo $0 | replace "env/start-swift-ceph.sh" ""`
+thisFolder=`echo $0 | sed 's#env/start-swift-ceph\.sh##'`
if [ -z "$thisFolder" ]; then
thisFolder="."
@@ -38,6 +38,7 @@ pass=testing
tenant=testenant
region=testregion
service=testceph
+endpointFolder="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
container=`docker run -d \
-e KEYSTONE_PUBLIC_PORT=${port} \
@@ -46,7 +47,10 @@ container=`docker run -d \
-e KEYSTONE_ADMIN_TENANT=${tenant} \
-e KEYSTONE_ENDPOINT_REGION=${region} \
-e KEYSTONE_SERVICE=${service} \
- ${docker_image}`
+ -e OSD_SIZE=300 \
+ -v ${endpointFolder}/entrypoint.sh:/entrypoint.sh \
+ --privileged \
+ --entrypoint /entrypoint.sh ${docker_image}`
host=`docker inspect --format="{{.NetworkSettings.IPAddress}}" $container`
@@ -57,8 +61,9 @@ echo "${docker_image} container: $container"
echo $container >> $thisFolder/dockerContainerCeph.$EXECUTOR_NUMBER.swift
echo -n "Waiting for ceph initialization"
-if ! "$thisFolder"/env/wait-for-connection ${host} 80 60; then
- echo "[ERROR] Waited 60 seconds, no response" >&2
+if ! "$thisFolder"/env/wait-for-connection ${host} 80 600; then
+ echo "[ERROR] Waited 600 seconds, no response" >&2
+ docker logs $container
exit 1
fi
sleep 1
diff --git a/apps/files_external/tests/personalmounttest.php b/apps/files_external/tests/personalmounttest.php
new file mode 100644
index 00000000000..b56d69aa9be
--- /dev/null
+++ b/apps/files_external/tests/personalmounttest.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * @author Robin Appelman <icewind@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\Files_external\Tests;
+
+use OC\Files\Mount\Manager;
+use OCA\Files_External\Lib\PersonalMount;
+use Test\TestCase;
+
+class PersonalMountTest extends TestCase {
+ public function testFindByStorageId() {
+ /** @var \OCA\Files_External\Service\UserStoragesService $storageService */
+ $storageService = $this->getMockBuilder('\OCA\Files_External\Service\UserStoragesService')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $storage = $this->getMockBuilder('\OC\Files\Storage\Storage')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $storage->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue('dummy'));
+
+ $mount = new PersonalMount($storageService, 10, $storage, '/foo');
+
+ $mountManager = new Manager();
+ $mountManager->addMount($mount);
+
+ $this->assertEquals([$mount], $mountManager->findByStorageId('dummy'));
+ }
+}
diff --git a/apps/files_external/tests/service/globalstoragesservicetest.php b/apps/files_external/tests/service/globalstoragesservicetest.php
index 7c77616563c..e620b05a51e 100644
--- a/apps/files_external/tests/service/globalstoragesservicetest.php
+++ b/apps/files_external/tests/service/globalstoragesservicetest.php
@@ -23,7 +23,6 @@ namespace OCA\Files_external\Tests\Service;
use \OC\Files\Filesystem;
-use OCA\Files_External\Service\DBConfigService;
use \OCA\Files_external\Service\GlobalStoragesService;
use \OCA\Files_external\NotFoundException;
use \OCA\Files_external\Lib\StorageConfig;
diff --git a/apps/files_sharing/ajax/external.php b/apps/files_sharing/ajax/external.php
index 0f8a3d56cf0..2ba1cb470c2 100644
--- a/apps/files_sharing/ajax/external.php
+++ b/apps/files_sharing/ajax/external.php
@@ -40,6 +40,7 @@ if (OCA\Files_Sharing\Helper::isIncomingServer2serverShareEnabled() === false) {
$token = $_POST['token'];
$remote = $_POST['remote'];
$owner = $_POST['owner'];
+$ownerDisplayName = $_POST['ownerDisplayName'];
$name = $_POST['name'];
$password = $_POST['password'];
@@ -49,6 +50,14 @@ if(!\OCP\Util::isValidFileName($name)) {
exit();
}
+$currentUser = \OC::$server->getUserSession()->getUser()->getUID();
+$currentServer = \OC::$server->getURLGenerator()->getAbsoluteURL('/');
+if (\OC\Share\Helper::isSameUserOnSameServer($owner, $remote, $currentUser, $currentServer )) {
+ \OCP\JSON::error(array('data' => array('message' => $l->t('Not allowed to create a federated share with the same user server'))));
+ exit();
+}
+
+
$externalManager = new \OCA\Files_Sharing\External\Manager(
\OC::$server->getDatabaseConnection(),
\OC\Files\Filesystem::getMountManager(),
@@ -68,7 +77,7 @@ if (substr($remote, 0, 5) === 'https') {
}
}
-$mount = $externalManager->addShare($remote, $token, $password, $name, $owner, true);
+$mount = $externalManager->addShare($remote, $token, $password, $name, $ownerDisplayName, true);
/**
* @var \OCA\Files_Sharing\External\Storage $storage
diff --git a/apps/files_sharing/api/local.php b/apps/files_sharing/api/local.php
index aaafafb269f..5b2f2e06e75 100644
--- a/apps/files_sharing/api/local.php
+++ b/apps/files_sharing/api/local.php
@@ -64,9 +64,10 @@ class Local {
if ($shares === false) {
return new \OC_OCS_Result(null, 404, 'could not get shares');
} else {
+ $mimetypeDetector = \OC::$server->getMimeTypeDetector();
foreach ($shares as &$share) {
if ($share['item_type'] === 'file' && isset($share['path'])) {
- $share['mimetype'] = \OC_Helper::getFileNameMimeType($share['path']);
+ $share['mimetype'] = $mimetypeDetector->detectPath($share['path']);
if (\OC::$server->getPreviewManager()->isMimeSupported($share['mimetype'])) {
$share['isPreviewAvailable'] = true;
}
@@ -227,9 +228,10 @@ class Local {
private static function getFilesSharedWithMe() {
try {
$shares = \OCP\Share::getItemsSharedWith('file');
+ $mimetypeDetector = \OC::$server->getMimeTypeDetector();
foreach ($shares as &$share) {
if ($share['item_type'] === 'file') {
- $share['mimetype'] = \OC_Helper::getFileNameMimeType($share['file_target']);
+ $share['mimetype'] = $mimetypeDetector->detectPath($share['file_target']);
if (\OC::$server->getPreviewManager()->isMimeSupported($share['mimetype'])) {
$share['isPreviewAvailable'] = true;
}
diff --git a/apps/files_sharing/js/external.js b/apps/files_sharing/js/external.js
index f658de307ab..45a6ef02758 100644
--- a/apps/files_sharing/js/external.js
+++ b/apps/files_sharing/js/external.js
@@ -19,7 +19,7 @@
*/
OCA.Sharing.showAddExternalDialog = function (share, passwordProtected, callback) {
var remote = share.remote;
- var owner = share.owner;
+ var owner = share.ownerDisplayName || share.owner;
var name = share.name;
var remoteClean = (remote.substr(0, 8) === 'https://') ? remote.substr(8) : remote.substr(7);
@@ -92,6 +92,7 @@
remote: share.remote,
token: share.token,
owner: share.owner,
+ ownerDisplayName: share.ownerDisplayName || share.owner,
name: share.name,
password: password}, function(result) {
if (result.status === 'error') {
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index 70c1ba5c0c2..af808447381 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -242,9 +242,10 @@ OCA.Sharing.PublicApp = {
var remote = $(this).find('input[type="text"]').val();
var token = $('#sharingToken').val();
var owner = $('#save').data('owner');
+ var ownerDisplayName = $('#save').data('owner-display-name');
var name = $('#save').data('name');
var isProtected = $('#save').data('protected') ? 1 : 0;
- OCA.Sharing.PublicApp._saveToOwnCloud(remote, token, owner, name, isProtected);
+ OCA.Sharing.PublicApp._saveToOwnCloud(remote, token, owner, ownerDisplayName, name, isProtected);
});
$('#remote_address').on("keyup paste", function() {
@@ -291,7 +292,7 @@ OCA.Sharing.PublicApp = {
this.fileList.changeDirectory(params.path || params.dir, false, true);
},
- _saveToOwnCloud: function (remote, token, owner, name, isProtected) {
+ _saveToOwnCloud: function (remote, token, owner, ownerDisplayName, name, isProtected) {
var location = window.location.protocol + '//' + window.location.host + OC.webroot;
if(remote.substr(-1) !== '/') {
@@ -299,7 +300,7 @@ OCA.Sharing.PublicApp = {
};
var url = remote + 'index.php/apps/files#' + 'remote=' + encodeURIComponent(location) // our location is the remote for the other server
- + "&token=" + encodeURIComponent(token) + "&owner=" + encodeURIComponent(owner) + "&name=" + encodeURIComponent(name) + "&protected=" + isProtected;
+ + "&token=" + encodeURIComponent(token) + "&owner=" + encodeURIComponent(owner) +"&ownerDisplayName=" + encodeURIComponent(ownerDisplayName) + "&name=" + encodeURIComponent(name) + "&protected=" + isProtected;
if (remote.indexOf('://') > 0) {
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index 3d105f283d8..f8d89828f4d 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -45,6 +45,9 @@
if (fileData.type === 'file') {
// files can't be shared with delete permissions
sharePermissions = sharePermissions & ~OC.PERMISSION_DELETE;
+
+ // create permissions don't mean anything for files
+ sharePermissions = sharePermissions & ~OC.PERMISSION_CREATE;
}
tr.attr('data-share-permissions', sharePermissions);
if (fileData.shareOwner) {
diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js
index 650fb5c524a..e77c4b974f7 100644
--- a/apps/files_sharing/l10n/es.js
+++ b/apps/files_sharing/l10n/es.js
@@ -52,6 +52,7 @@ OC.L10N.register(
"Shared by %2$s" : "Compartido por %2$s",
"Shared via public link" : "Compartido vía enlace público",
"Shares" : "Compartidos",
+ "You received %2$s as a remote share from %1$s" : "Ha recibido %2$s como un recurso compartido de %1$s",
"Accept" : "Aceptar",
"Decline" : "Denegar",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartirlo conmigo a través de mi ID Nube Federada #ownCloud, ver %s",
diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json
index 6f963ab8fee..96fb368f76b 100644
--- a/apps/files_sharing/l10n/es.json
+++ b/apps/files_sharing/l10n/es.json
@@ -50,6 +50,7 @@
"Shared by %2$s" : "Compartido por %2$s",
"Shared via public link" : "Compartido vía enlace público",
"Shares" : "Compartidos",
+ "You received %2$s as a remote share from %1$s" : "Ha recibido %2$s como un recurso compartido de %1$s",
"Accept" : "Aceptar",
"Decline" : "Denegar",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartirlo conmigo a través de mi ID Nube Federada #ownCloud, ver %s",
diff --git a/apps/files_sharing/l10n/et_EE.js b/apps/files_sharing/l10n/et_EE.js
index 6d02bdd6ced..2fcce251407 100644
--- a/apps/files_sharing/l10n/et_EE.js
+++ b/apps/files_sharing/l10n/et_EE.js
@@ -30,6 +30,8 @@ OC.L10N.register(
"You shared %1$s with group %2$s" : "Jagasid %1$s %2$s grupiga",
"%2$s shared %1$s with you" : "%2$s jagas sinuga %1$s",
"You shared %1$s via link" : "Jagasid %1$s lingiga",
+ "Downloaded via public link" : "Alla laetud avalikult lingilt",
+ "Shared with %2$s" : "Jagatud kasutajaga %2$s",
"Shares" : "Jagamised",
"Accept" : "Nõustu",
"Decline" : "Lükka tagasi",
diff --git a/apps/files_sharing/l10n/et_EE.json b/apps/files_sharing/l10n/et_EE.json
index 481a75210ee..34ddd9f1b15 100644
--- a/apps/files_sharing/l10n/et_EE.json
+++ b/apps/files_sharing/l10n/et_EE.json
@@ -28,6 +28,8 @@
"You shared %1$s with group %2$s" : "Jagasid %1$s %2$s grupiga",
"%2$s shared %1$s with you" : "%2$s jagas sinuga %1$s",
"You shared %1$s via link" : "Jagasid %1$s lingiga",
+ "Downloaded via public link" : "Alla laetud avalikult lingilt",
+ "Shared with %2$s" : "Jagatud kasutajaga %2$s",
"Shares" : "Jagamised",
"Accept" : "Nõustu",
"Decline" : "Lükka tagasi",
diff --git a/apps/files_sharing/l10n/fi_FI.js b/apps/files_sharing/l10n/fi_FI.js
index a87d6156d40..accd43020ff 100644
--- a/apps/files_sharing/l10n/fi_FI.js
+++ b/apps/files_sharing/l10n/fi_FI.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Server to server sharing is not enabled on this server" : "Palvelimelta-palvelimelle-jakaminen ei ole käytössä tällä palvelimella",
"The mountpoint name contains invalid characters." : "Liitospisteen nimi sisältää virheellisiä merkkejä.",
+ "Not allowed to create a federated share with the same user server" : "Saman käyttäjäpalvelimen kanssa ei ole sallittua luoda federoitua jakoa",
"Invalid or untrusted SSL certificate" : "Virheellinen tai ei-luotettu SSL-varmenne",
"Could not authenticate to remote share, password might be wrong" : "Tunnistautuminen etäjakoa kohtaan epäonnistui. Salasana saattaa olla väärä",
"Storage not valid" : "Tallennustila ei ole kelvollinen",
diff --git a/apps/files_sharing/l10n/fi_FI.json b/apps/files_sharing/l10n/fi_FI.json
index 172b8476092..e321d64732f 100644
--- a/apps/files_sharing/l10n/fi_FI.json
+++ b/apps/files_sharing/l10n/fi_FI.json
@@ -1,6 +1,7 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "Palvelimelta-palvelimelle-jakaminen ei ole käytössä tällä palvelimella",
"The mountpoint name contains invalid characters." : "Liitospisteen nimi sisältää virheellisiä merkkejä.",
+ "Not allowed to create a federated share with the same user server" : "Saman käyttäjäpalvelimen kanssa ei ole sallittua luoda federoitua jakoa",
"Invalid or untrusted SSL certificate" : "Virheellinen tai ei-luotettu SSL-varmenne",
"Could not authenticate to remote share, password might be wrong" : "Tunnistautuminen etäjakoa kohtaan epäonnistui. Salasana saattaa olla väärä",
"Storage not valid" : "Tallennustila ei ole kelvollinen",
diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js
index 8cd66b34d24..39f7ced4bbd 100644
--- a/apps/files_sharing/l10n/it.js
+++ b/apps/files_sharing/l10n/it.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Server to server sharing is not enabled on this server" : "La condivisione tra server non è abilitata su questo server",
"The mountpoint name contains invalid characters." : "Il nome del punto di mount contiene caratteri non validi.",
+ "Not allowed to create a federated share with the same user server" : "Non è consentito creare una condivisione federata con lo stesso server dell'utente",
"Invalid or untrusted SSL certificate" : "Certificato SSL non valido o non attendibile",
"Could not authenticate to remote share, password might be wrong" : "Impossibile autenticarsi sulla condivisione remota, la password potrebbe essere errata",
"Storage not valid" : "Archiviazione non valida",
diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json
index b93dafd7555..f40fbb4b232 100644
--- a/apps/files_sharing/l10n/it.json
+++ b/apps/files_sharing/l10n/it.json
@@ -1,6 +1,7 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "La condivisione tra server non è abilitata su questo server",
"The mountpoint name contains invalid characters." : "Il nome del punto di mount contiene caratteri non validi.",
+ "Not allowed to create a federated share with the same user server" : "Non è consentito creare una condivisione federata con lo stesso server dell'utente",
"Invalid or untrusted SSL certificate" : "Certificato SSL non valido o non attendibile",
"Could not authenticate to remote share, password might be wrong" : "Impossibile autenticarsi sulla condivisione remota, la password potrebbe essere errata",
"Storage not valid" : "Archiviazione non valida",
diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js
index e40acc0104a..e3427ea1f7b 100644
--- a/apps/files_sharing/l10n/ja.js
+++ b/apps/files_sharing/l10n/ja.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Server to server sharing is not enabled on this server" : "このサーバーでは、サーバー間の共有が有効ではありません",
"The mountpoint name contains invalid characters." : "マウントポイント名 に不正な文字列が含まれています。",
+ "Not allowed to create a federated share with the same user server" : "同じユーザーのサーバーでフェデレーション共有を作成することは出来ません",
"Invalid or untrusted SSL certificate" : "無効または信頼できないSSL証明書",
"Could not authenticate to remote share, password might be wrong" : "リモート共有が認証できませんでした,パスワードが間違っているかもしれません",
"Storage not valid" : "ストレージが無効です",
diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json
index 989a723b2a8..9dc64e2b3ec 100644
--- a/apps/files_sharing/l10n/ja.json
+++ b/apps/files_sharing/l10n/ja.json
@@ -1,6 +1,7 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "このサーバーでは、サーバー間の共有が有効ではありません",
"The mountpoint name contains invalid characters." : "マウントポイント名 に不正な文字列が含まれています。",
+ "Not allowed to create a federated share with the same user server" : "同じユーザーのサーバーでフェデレーション共有を作成することは出来ません",
"Invalid or untrusted SSL certificate" : "無効または信頼できないSSL証明書",
"Could not authenticate to remote share, password might be wrong" : "リモート共有が認証できませんでした,パスワードが間違っているかもしれません",
"Storage not valid" : "ストレージが無効です",
diff --git a/apps/files_sharing/l10n/lt_LT.js b/apps/files_sharing/l10n/lt_LT.js
index 93848326605..517cc0915be 100644
--- a/apps/files_sharing/l10n/lt_LT.js
+++ b/apps/files_sharing/l10n/lt_LT.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Server to server sharing is not enabled on this server" : "Serveris - serveris dalinimasis neįjungtas šiame serveryje",
"The mountpoint name contains invalid characters." : "Prijungimo taškas su neleistinais simboliais.",
+ "Not allowed to create a federated share with the same user server" : "Neleidžiama dalintis tarp serverių, nes vartotojas tame pačiame serveryje.",
"Invalid or untrusted SSL certificate" : "Netinkamas arba nepatikimas SSL sertifikatas",
"Could not authenticate to remote share, password might be wrong" : "Nepavyko identifikuotis serveryje, gal netinkamas slaptažodis",
"Storage not valid" : "Talpykla negalioja",
diff --git a/apps/files_sharing/l10n/lt_LT.json b/apps/files_sharing/l10n/lt_LT.json
index 6d777024052..923971c336b 100644
--- a/apps/files_sharing/l10n/lt_LT.json
+++ b/apps/files_sharing/l10n/lt_LT.json
@@ -1,6 +1,7 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "Serveris - serveris dalinimasis neįjungtas šiame serveryje",
"The mountpoint name contains invalid characters." : "Prijungimo taškas su neleistinais simboliais.",
+ "Not allowed to create a federated share with the same user server" : "Neleidžiama dalintis tarp serverių, nes vartotojas tame pačiame serveryje.",
"Invalid or untrusted SSL certificate" : "Netinkamas arba nepatikimas SSL sertifikatas",
"Could not authenticate to remote share, password might be wrong" : "Nepavyko identifikuotis serveryje, gal netinkamas slaptažodis",
"Storage not valid" : "Talpykla negalioja",
diff --git a/apps/files_sharing/l10n/mk.js b/apps/files_sharing/l10n/mk.js
index a5de7fb5c09..5be22894b99 100644
--- a/apps/files_sharing/l10n/mk.js
+++ b/apps/files_sharing/l10n/mk.js
@@ -1,20 +1,44 @@
OC.L10N.register(
"files_sharing",
{
+ "Server to server sharing is not enabled on this server" : "Не е овозможено споделувањето од сервер на сервер на вашиот сервер",
+ "Invalid or untrusted SSL certificate" : "SSL сертификат кој е невалиден или недоверлив",
+ "Could not authenticate to remote share, password might be wrong" : "Не можам да се автентицирам на оддалеченото споделевање, веројатно лозинката не е исправна",
+ "Storage not valid" : "Сториџот не е валиден",
+ "Couldn't add remote share" : "Не можам да додадам оддалечено споделување",
"Shared with you" : "Споделено со тебе",
"Shared with others" : "Сподели со останатите",
"Shared by link" : "Споделено со врска",
+ "Nothing shared with you yet" : "Сеуште ништо не е споделено со вас",
+ "Nothing shared yet" : "Уште ништо не е споделено",
+ "No shared links" : "Нема споделени врски/линкови",
+ "Remote share" : "Оддалечено споделување",
+ "Remote share password" : "Лозинка за оддалечаното споделување",
"Cancel" : "Откажи",
+ "Add remote share" : "Додади оддалечно споделување",
+ "You can upload into this folder" : "Можете да прикачите во оваа папка",
+ "Invalid ownCloud url" : "Неисправен ownCloud url",
"Shared by" : "Споделено од",
"Sharing" : "Споделување",
"A file or folder has been <strong>shared</strong>" : "Датотека или фолдер беше <strong>споделен</strong>",
"You shared %1$s with %2$s" : "Вие споделивте %1$s со %2$s",
"You shared %1$s with group %2$s" : "Вие споделивте %1$s со групата %2$s",
"%2$s shared %1$s with you" : "%2$s споделено %1$s со вас",
+ "Downloaded via public link" : "Преземи преку јавен линк",
+ "Shared with %2$s" : "Споделено со %2$s",
+ "Shared with group %2$s" : "Споделено со група %2$s",
+ "Shared with %3$s by %2$s" : "Споделено со %3$s од %2$s",
+ "Shared with group %3$s by %2$s" : "Споделено со група %3$s од %2$s",
+ "Shared via link by %2$s" : "Споделено со врска/линк од %2$s",
+ "Shared by %2$s" : "Споделено од %2$s",
+ "Shared via public link" : "Споделено со јавна врска/линк",
"Shares" : "Споделувања",
+ "Accept" : "Прифати",
+ "Decline" : "Одбиј",
"This share is password-protected" : "Ова споделување е заштитено со лозинка",
"The password is wrong. Try again." : "Лозинката е грешна. Обиди се повторно.",
"Password" : "Лозинка",
+ "No entries found in this folder" : "Нема ништо во оваа папка",
"Name" : "Име",
"Share time" : "Сподели време",
"Sorry, this link doesn’t seem to work anymore." : "Извенете, но овој линк изгледа дека повеќе не функционира.",
@@ -23,8 +47,17 @@ OC.L10N.register(
"the link expired" : "времетраењето на линкот е изминато",
"sharing is disabled" : "споделувањето не е дозволено",
"For more info, please ask the person who sent this link." : "За повеќе информации, прашајте го лицето кое ви ја испратила врската.",
+ "Add to your ownCloud" : "Додади во вашиот ownCloud",
"Download" : "Преземи",
"Download %s" : "Преземи %s",
- "Direct link" : "Директна врска"
+ "Direct link" : "Директна врска",
+ "Federated Cloud Sharing" : "Федерирано клауд споделување",
+ "Open documentation" : "Отвори ја документацијата",
+ "Federated Cloud" : "Федериран клауд",
+ "Your Federated Cloud ID:" : "Вашиот федериран Cloud ID:",
+ "Share it:" : "Сподели го:",
+ "Add to your website" : "Додади на твојот веб сајт",
+ "Share with me via ownCloud" : "Сподели со мене преку ownCloud",
+ "HTML Code:" : "HTML код:"
},
"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;");
diff --git a/apps/files_sharing/l10n/mk.json b/apps/files_sharing/l10n/mk.json
index ad7eff6078b..40bcf9f8bde 100644
--- a/apps/files_sharing/l10n/mk.json
+++ b/apps/files_sharing/l10n/mk.json
@@ -1,18 +1,42 @@
{ "translations": {
+ "Server to server sharing is not enabled on this server" : "Не е овозможено споделувањето од сервер на сервер на вашиот сервер",
+ "Invalid or untrusted SSL certificate" : "SSL сертификат кој е невалиден или недоверлив",
+ "Could not authenticate to remote share, password might be wrong" : "Не можам да се автентицирам на оддалеченото споделевање, веројатно лозинката не е исправна",
+ "Storage not valid" : "Сториџот не е валиден",
+ "Couldn't add remote share" : "Не можам да додадам оддалечено споделување",
"Shared with you" : "Споделено со тебе",
"Shared with others" : "Сподели со останатите",
"Shared by link" : "Споделено со врска",
+ "Nothing shared with you yet" : "Сеуште ништо не е споделено со вас",
+ "Nothing shared yet" : "Уште ништо не е споделено",
+ "No shared links" : "Нема споделени врски/линкови",
+ "Remote share" : "Оддалечено споделување",
+ "Remote share password" : "Лозинка за оддалечаното споделување",
"Cancel" : "Откажи",
+ "Add remote share" : "Додади оддалечно споделување",
+ "You can upload into this folder" : "Можете да прикачите во оваа папка",
+ "Invalid ownCloud url" : "Неисправен ownCloud url",
"Shared by" : "Споделено од",
"Sharing" : "Споделување",
"A file or folder has been <strong>shared</strong>" : "Датотека или фолдер беше <strong>споделен</strong>",
"You shared %1$s with %2$s" : "Вие споделивте %1$s со %2$s",
"You shared %1$s with group %2$s" : "Вие споделивте %1$s со групата %2$s",
"%2$s shared %1$s with you" : "%2$s споделено %1$s со вас",
+ "Downloaded via public link" : "Преземи преку јавен линк",
+ "Shared with %2$s" : "Споделено со %2$s",
+ "Shared with group %2$s" : "Споделено со група %2$s",
+ "Shared with %3$s by %2$s" : "Споделено со %3$s од %2$s",
+ "Shared with group %3$s by %2$s" : "Споделено со група %3$s од %2$s",
+ "Shared via link by %2$s" : "Споделено со врска/линк од %2$s",
+ "Shared by %2$s" : "Споделено од %2$s",
+ "Shared via public link" : "Споделено со јавна врска/линк",
"Shares" : "Споделувања",
+ "Accept" : "Прифати",
+ "Decline" : "Одбиј",
"This share is password-protected" : "Ова споделување е заштитено со лозинка",
"The password is wrong. Try again." : "Лозинката е грешна. Обиди се повторно.",
"Password" : "Лозинка",
+ "No entries found in this folder" : "Нема ништо во оваа папка",
"Name" : "Име",
"Share time" : "Сподели време",
"Sorry, this link doesn’t seem to work anymore." : "Извенете, но овој линк изгледа дека повеќе не функционира.",
@@ -21,8 +45,17 @@
"the link expired" : "времетраењето на линкот е изминато",
"sharing is disabled" : "споделувањето не е дозволено",
"For more info, please ask the person who sent this link." : "За повеќе информации, прашајте го лицето кое ви ја испратила врската.",
+ "Add to your ownCloud" : "Додади во вашиот ownCloud",
"Download" : "Преземи",
"Download %s" : "Преземи %s",
- "Direct link" : "Директна врска"
+ "Direct link" : "Директна врска",
+ "Federated Cloud Sharing" : "Федерирано клауд споделување",
+ "Open documentation" : "Отвори ја документацијата",
+ "Federated Cloud" : "Федериран клауд",
+ "Your Federated Cloud ID:" : "Вашиот федериран Cloud ID:",
+ "Share it:" : "Сподели го:",
+ "Add to your website" : "Додади на твојот веб сајт",
+ "Share with me via ownCloud" : "Сподели со мене преку ownCloud",
+ "HTML Code:" : "HTML код:"
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js
index 7b31b7c73e2..523213f6d9b 100644
--- a/apps/files_sharing/l10n/nl.js
+++ b/apps/files_sharing/l10n/nl.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Server to server sharing is not enabled on this server" : "Server met server delen is niet geactiveerd op deze server",
"The mountpoint name contains invalid characters." : "De naam van het mountpoint bevat ongeldige karakters.",
+ "Not allowed to create a federated share with the same user server" : "Het is niet toegestaan om een gefedereerde share met dezelfde gebruikersserver te maken",
"Invalid or untrusted SSL certificate" : "Ongeldig of onvertrouwd SSL-certificaat",
"Could not authenticate to remote share, password might be wrong" : "Kon niet authenticeren bij externe share, misschien verkeerd wachtwoord",
"Storage not valid" : "Opslag ongeldig",
diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json
index 92ba1c04268..e6501e874ea 100644
--- a/apps/files_sharing/l10n/nl.json
+++ b/apps/files_sharing/l10n/nl.json
@@ -1,6 +1,7 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "Server met server delen is niet geactiveerd op deze server",
"The mountpoint name contains invalid characters." : "De naam van het mountpoint bevat ongeldige karakters.",
+ "Not allowed to create a federated share with the same user server" : "Het is niet toegestaan om een gefedereerde share met dezelfde gebruikersserver te maken",
"Invalid or untrusted SSL certificate" : "Ongeldig of onvertrouwd SSL-certificaat",
"Could not authenticate to remote share, password might be wrong" : "Kon niet authenticeren bij externe share, misschien verkeerd wachtwoord",
"Storage not valid" : "Opslag ongeldig",
diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js
index d2dac6d5955..2faf1455480 100644
--- a/apps/files_sharing/l10n/pt_BR.js
+++ b/apps/files_sharing/l10n/pt_BR.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Server to server sharing is not enabled on this server" : "Compartilhamento de servidor para servidor não está habilitado no servidor",
"The mountpoint name contains invalid characters." : "O nome do ponto de montagem contém caracteres inválidos.",
+ "Not allowed to create a federated share with the same user server" : "Não permitido para criar um compartilhamento associado com o mesmo servidor do usuário",
"Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não confiável",
"Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticação com o compartilhamento remoto, a senha deve estar errada",
"Storage not valid" : "Armazenamento não válido",
@@ -27,8 +28,8 @@ OC.L10N.register(
"Shared by" : "Compartilhado por",
"Sharing" : "Compartilhamento",
"A file or folder has been <strong>shared</strong>" : "Um arquivo ou pasta foi <strong>compartilhado</strong> ",
- "A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhada a partir de <strong>outro servidor</strong>",
- "A public shared file or folder was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhada publicamente foi <strong>baixado</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhado a partir de <strong>outro servidor</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhado publicamente foi <strong>baixado</strong>",
"You received a new remote share %2$s from %1$s" : "Você recebeu um novo conpartilhamento remoto %2$s de %1$s",
"You received a new remote share from %s" : "Você recebeu um novo compartilhamento remoto de %s",
"%1$s accepted remote share %2$s" : "%1$s aceitou o compartilhamento remoto %2$s",
@@ -55,14 +56,14 @@ OC.L10N.register(
"You received %2$s as a remote share from %1$s" : "Você recebeu %2$s como um compartilhamento remoto de %1$s",
"Accept" : "Aceitar",
"Decline" : "Rejeitar",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID, veja %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #ownCloud Nuvem ID Associada, veja %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Compartilhe comigo através do meu #ownCloud Nuvem ID Associada",
"This share is password-protected" : "Este compartilhamento esta protegido por senha",
"The password is wrong. Try again." : "Senha incorreta. Tente novamente.",
"Password" : "Senha",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Name" : "Nome",
- "Share time" : "Tempo de compartilhamento",
+ "Share time" : "Data compartilhado",
"Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não mais funcionar.",
"Reasons might be:" : "As razões podem ser:",
"the item was removed" : "o item foi removido",
@@ -73,12 +74,12 @@ OC.L10N.register(
"Download" : "Baixar",
"Download %s" : "Baixar %s",
"Direct link" : "Link direto",
- "Federated Cloud Sharing" : "Compartilhamento de Nuvem Conglomerada",
+ "Federated Cloud Sharing" : "Compartilhamento de Nuvem Associada",
"Open documentation" : "Abrir documentação",
"Allow users on this server to send shares to other servers" : "Permitir que os usuários deste servidor enviem compartilhamentos para outros servidores",
"Allow users on this server to receive shares from other servers" : "Permitir que os usuários nesse servidor recebam compartilhamentos de outros servidores",
- "Federated Cloud" : "Nuvem Conglomerada",
- "Your Federated Cloud ID:" : "Seu Federados Nuvem ID:",
+ "Federated Cloud" : "Nuvem Associada",
+ "Your Federated Cloud ID:" : "Sua ID na Nuvem Associada:",
"Share it:" : "Compartilhe:",
"Add to your website" : "Adicione ao seu website",
"Share with me via ownCloud" : "Compartilhe comigo via ownCloud",
diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json
index e64c07ff8e0..51e6e9e6f0a 100644
--- a/apps/files_sharing/l10n/pt_BR.json
+++ b/apps/files_sharing/l10n/pt_BR.json
@@ -1,6 +1,7 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "Compartilhamento de servidor para servidor não está habilitado no servidor",
"The mountpoint name contains invalid characters." : "O nome do ponto de montagem contém caracteres inválidos.",
+ "Not allowed to create a federated share with the same user server" : "Não permitido para criar um compartilhamento associado com o mesmo servidor do usuário",
"Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não confiável",
"Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticação com o compartilhamento remoto, a senha deve estar errada",
"Storage not valid" : "Armazenamento não válido",
@@ -25,8 +26,8 @@
"Shared by" : "Compartilhado por",
"Sharing" : "Compartilhamento",
"A file or folder has been <strong>shared</strong>" : "Um arquivo ou pasta foi <strong>compartilhado</strong> ",
- "A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhada a partir de <strong>outro servidor</strong>",
- "A public shared file or folder was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhada publicamente foi <strong>baixado</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhado a partir de <strong>outro servidor</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhado publicamente foi <strong>baixado</strong>",
"You received a new remote share %2$s from %1$s" : "Você recebeu um novo conpartilhamento remoto %2$s de %1$s",
"You received a new remote share from %s" : "Você recebeu um novo compartilhamento remoto de %s",
"%1$s accepted remote share %2$s" : "%1$s aceitou o compartilhamento remoto %2$s",
@@ -53,14 +54,14 @@
"You received %2$s as a remote share from %1$s" : "Você recebeu %2$s como um compartilhamento remoto de %1$s",
"Accept" : "Aceitar",
"Decline" : "Rejeitar",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID, veja %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #ownCloud Nuvem ID Associada, veja %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Compartilhe comigo através do meu #ownCloud Nuvem ID Associada",
"This share is password-protected" : "Este compartilhamento esta protegido por senha",
"The password is wrong. Try again." : "Senha incorreta. Tente novamente.",
"Password" : "Senha",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Name" : "Nome",
- "Share time" : "Tempo de compartilhamento",
+ "Share time" : "Data compartilhado",
"Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não mais funcionar.",
"Reasons might be:" : "As razões podem ser:",
"the item was removed" : "o item foi removido",
@@ -71,12 +72,12 @@
"Download" : "Baixar",
"Download %s" : "Baixar %s",
"Direct link" : "Link direto",
- "Federated Cloud Sharing" : "Compartilhamento de Nuvem Conglomerada",
+ "Federated Cloud Sharing" : "Compartilhamento de Nuvem Associada",
"Open documentation" : "Abrir documentação",
"Allow users on this server to send shares to other servers" : "Permitir que os usuários deste servidor enviem compartilhamentos para outros servidores",
"Allow users on this server to receive shares from other servers" : "Permitir que os usuários nesse servidor recebam compartilhamentos de outros servidores",
- "Federated Cloud" : "Nuvem Conglomerada",
- "Your Federated Cloud ID:" : "Seu Federados Nuvem ID:",
+ "Federated Cloud" : "Nuvem Associada",
+ "Your Federated Cloud ID:" : "Sua ID na Nuvem Associada:",
"Share it:" : "Compartilhe:",
"Add to your website" : "Adicione ao seu website",
"Share with me via ownCloud" : "Compartilhe comigo via ownCloud",
diff --git a/apps/files_sharing/l10n/sq.js b/apps/files_sharing/l10n/sq.js
index 413214d58de..e25c170df9c 100644
--- a/apps/files_sharing/l10n/sq.js
+++ b/apps/files_sharing/l10n/sq.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Server to server sharing is not enabled on this server" : "Ndarja mes shërbyesish s’është e aktivizuar në këtë shërbyes",
"The mountpoint name contains invalid characters." : "Emri i pikës së montimit përmban shenja të pavlefshme.",
+ "Not allowed to create a federated share with the same user server" : "Nuk i lejohet të krijojë një ndarje të federuar me të njëjtin shërbyes përdoruesi",
"Invalid or untrusted SSL certificate" : "Dëshmi SSL e pavlefshme ose e pabesuar",
"Could not authenticate to remote share, password might be wrong" : "S’bëri dot mirëfilltësimin te ndarja e largët, fjalëkalimi mund të jetë i gabuar",
"Storage not valid" : "Depozitë jo e vlefshme",
@@ -33,6 +34,7 @@ OC.L10N.register(
"You received a new remote share from %s" : "Morët një ndarje të largët nga %s",
"%1$s accepted remote share %2$s" : "%1$s pranoi ndarjen e largët %2$s",
"%1$s declined remote share %2$s" : "%1$s hodhi tej ndarjen e largët %2$s",
+ "%1$s unshared %2$s from you" : "%1$s shndau me ju %2$s",
"Public shared folder %1$s was downloaded" : "U shkarkua dosja e ndarë publikisht %1$s",
"Public shared file %1$s was downloaded" : "U shkarkua kartela e ndarë publikisht %1$s",
"You shared %1$s with %2$s" : "Ndatë %1$s me %2$s",
@@ -72,9 +74,11 @@ OC.L10N.register(
"Download" : "Shkarko",
"Download %s" : "Shkarko %s",
"Direct link" : "Lidhje e drejtpërdrejtë",
+ "Federated Cloud Sharing" : "Ndarje Në Re e Federuar ",
"Open documentation" : "Hap dokumentimin",
"Allow users on this server to send shares to other servers" : "Lejoju përdoruesve në këtë shërbyes të dërgojnë ndarje në shërbyes të tjerë",
"Allow users on this server to receive shares from other servers" : "Lejoju përdoruesve në këtë shërbyes të marrin ndarje nga shërbyes të tjerë",
+ "Federated Cloud" : "Ndarje e Federuar",
"Your Federated Cloud ID:" : "ID-ja juaj Federated Cloud:",
"Share it:" : "Ndajeni:",
"Add to your website" : "Shtojeni te sajti juaj",
diff --git a/apps/files_sharing/l10n/sq.json b/apps/files_sharing/l10n/sq.json
index 8722966f5da..d16d1710a55 100644
--- a/apps/files_sharing/l10n/sq.json
+++ b/apps/files_sharing/l10n/sq.json
@@ -1,6 +1,7 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "Ndarja mes shërbyesish s’është e aktivizuar në këtë shërbyes",
"The mountpoint name contains invalid characters." : "Emri i pikës së montimit përmban shenja të pavlefshme.",
+ "Not allowed to create a federated share with the same user server" : "Nuk i lejohet të krijojë një ndarje të federuar me të njëjtin shërbyes përdoruesi",
"Invalid or untrusted SSL certificate" : "Dëshmi SSL e pavlefshme ose e pabesuar",
"Could not authenticate to remote share, password might be wrong" : "S’bëri dot mirëfilltësimin te ndarja e largët, fjalëkalimi mund të jetë i gabuar",
"Storage not valid" : "Depozitë jo e vlefshme",
@@ -31,6 +32,7 @@
"You received a new remote share from %s" : "Morët një ndarje të largët nga %s",
"%1$s accepted remote share %2$s" : "%1$s pranoi ndarjen e largët %2$s",
"%1$s declined remote share %2$s" : "%1$s hodhi tej ndarjen e largët %2$s",
+ "%1$s unshared %2$s from you" : "%1$s shndau me ju %2$s",
"Public shared folder %1$s was downloaded" : "U shkarkua dosja e ndarë publikisht %1$s",
"Public shared file %1$s was downloaded" : "U shkarkua kartela e ndarë publikisht %1$s",
"You shared %1$s with %2$s" : "Ndatë %1$s me %2$s",
@@ -70,9 +72,11 @@
"Download" : "Shkarko",
"Download %s" : "Shkarko %s",
"Direct link" : "Lidhje e drejtpërdrejtë",
+ "Federated Cloud Sharing" : "Ndarje Në Re e Federuar ",
"Open documentation" : "Hap dokumentimin",
"Allow users on this server to send shares to other servers" : "Lejoju përdoruesve në këtë shërbyes të dërgojnë ndarje në shërbyes të tjerë",
"Allow users on this server to receive shares from other servers" : "Lejoju përdoruesve në këtë shërbyes të marrin ndarje nga shërbyes të tjerë",
+ "Federated Cloud" : "Ndarje e Federuar",
"Your Federated Cloud ID:" : "ID-ja juaj Federated Cloud:",
"Share it:" : "Ndajeni:",
"Add to your website" : "Shtojeni te sajti juaj",
diff --git a/apps/files_sharing/l10n/th_TH.js b/apps/files_sharing/l10n/th_TH.js
index b1400469af8..b0022e9d959 100644
--- a/apps/files_sharing/l10n/th_TH.js
+++ b/apps/files_sharing/l10n/th_TH.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Server to server sharing is not enabled on this server" : "เซิร์ฟเวอร์ไปยังแชร์เซิร์ฟเวอร์ไม่ได้เปิดใช้งานบนเซิร์ฟเวอร์นี้",
"The mountpoint name contains invalid characters." : "ชื่อจุดเชื่อมต่อมีตัวอักษรที่ไม่ถูกต้อง",
+ "Not allowed to create a federated share with the same user server" : "ไม่อนุญาตให้สร้างแชร์ในเครือกับเซิร์ฟเวอร์ที่มีผู้ใช้เดียวกัน",
"Invalid or untrusted SSL certificate" : "ใบรับรอง SSL ไม่ถูกต้องหรือไม่น่าเชื่อถือ",
"Could not authenticate to remote share, password might be wrong" : "ไม่สามารถรับรองความถูกต้องจากการแชร์ระยะไกลรหัสผ่านอาจจะผิด",
"Storage not valid" : "การจัดเก็บข้อมูลไม่ถูกต้อง",
diff --git a/apps/files_sharing/l10n/th_TH.json b/apps/files_sharing/l10n/th_TH.json
index a9ee8d6eb53..d973ad6ba19 100644
--- a/apps/files_sharing/l10n/th_TH.json
+++ b/apps/files_sharing/l10n/th_TH.json
@@ -1,6 +1,7 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "เซิร์ฟเวอร์ไปยังแชร์เซิร์ฟเวอร์ไม่ได้เปิดใช้งานบนเซิร์ฟเวอร์นี้",
"The mountpoint name contains invalid characters." : "ชื่อจุดเชื่อมต่อมีตัวอักษรที่ไม่ถูกต้อง",
+ "Not allowed to create a federated share with the same user server" : "ไม่อนุญาตให้สร้างแชร์ในเครือกับเซิร์ฟเวอร์ที่มีผู้ใช้เดียวกัน",
"Invalid or untrusted SSL certificate" : "ใบรับรอง SSL ไม่ถูกต้องหรือไม่น่าเชื่อถือ",
"Could not authenticate to remote share, password might be wrong" : "ไม่สามารถรับรองความถูกต้องจากการแชร์ระยะไกลรหัสผ่านอาจจะผิด",
"Storage not valid" : "การจัดเก็บข้อมูลไม่ถูกต้อง",
diff --git a/apps/files_sharing/lib/controllers/sharecontroller.php b/apps/files_sharing/lib/controllers/sharecontroller.php
index fe7b159449c..e28019c358c 100644
--- a/apps/files_sharing/lib/controllers/sharecontroller.php
+++ b/apps/files_sharing/lib/controllers/sharecontroller.php
@@ -181,6 +181,7 @@ class ShareController extends Controller {
$shareTmpl = [];
$shareTmpl['displayName'] = User::getDisplayName($shareOwner);
+ $shareTmpl['owner'] = $shareOwner;
$shareTmpl['filename'] = $file;
$shareTmpl['directory_path'] = $linkItem['file_target'];
$shareTmpl['mimetype'] = Filesystem::getMimeType($originalSharePath);
diff --git a/apps/files_sharing/lib/external/storage.php b/apps/files_sharing/lib/external/storage.php
index 2a0d827e064..36ff4f0c226 100644
--- a/apps/files_sharing/lib/external/storage.php
+++ b/apps/files_sharing/lib/external/storage.php
@@ -265,4 +265,12 @@ class Storage extends DAV implements ISharedStorage {
list(, $remote) = explode('://', $this->remote, 2);
return $this->remoteUser . '@' . $remote;
}
+
+ public function isSharable($path) {
+ if (\OCP\Util::isSharingDisabledForUser() || !\OC\Share\Share::isResharingAllowed()) {
+ return false;
+ }
+ return ($this->getPermissions($path) & \OCP\Constants::PERMISSION_SHARE);
+ }
+
}
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index cda3f564d5f..38f79762dc6 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -257,7 +257,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
}
public function isSharable($path) {
- if (\OCP\Util::isSharingDisabledForUser()) {
+ if (\OCP\Util::isSharingDisabledForUser() || !\OC\Share\Share::isResharingAllowed()) {
return false;
}
return ($this->getPermissions($path) & \OCP\Constants::PERMISSION_SHARE);
diff --git a/apps/files_sharing/lib/updater.php b/apps/files_sharing/lib/updater.php
index 26044cc1c8e..2d165a5df04 100644
--- a/apps/files_sharing/lib/updater.php
+++ b/apps/files_sharing/lib/updater.php
@@ -58,6 +58,47 @@ class Shared_Updater {
*/
static public function renameHook($params) {
self::renameChildren($params['oldpath'], $params['newpath']);
+ self::moveShareToShare($params['newpath']);
+ }
+
+ /**
+ * Fix for https://github.com/owncloud/core/issues/20769
+ *
+ * The owner is allowed to move their files (if they are shared) into a receiving folder
+ * In this case we need to update the parent of the moved share. Since they are
+ * effectively handing over ownership of the file the rest of the code needs to know
+ * they need to build up the reshare tree.
+ *
+ * @param string $path
+ */
+ static private function moveShareToShare($path) {
+ $userFolder = \OC::$server->getUserFolder();
+ $src = $userFolder->get($path);
+
+ $type = $src instanceof \OCP\Files\File ? 'file' : 'folder';
+ $shares = \OCP\Share::getItemShared($type, $src->getId());
+
+ // If the path we move is not a share we don't care
+ if (empty($shares)) {
+ return;
+ }
+
+ // Check if the destination is inside a share
+ $mountManager = \OC::$server->getMountManager();
+ $dstMount = $mountManager->find($src->getPath());
+ if (!($dstMount instanceof \OCA\Files_Sharing\SharedMount)) {
+ return;
+ }
+
+ $parenShare = $dstMount->getShare();
+
+ foreach ($shares as $share) {
+ $qb = \OC::$server->getDatabaseConnection()->getQueryBuilder();
+ $qb->update('share')
+ ->set('parent', $qb->createNamedParameter($parenShare['id']))
+ ->where($qb->expr()->eq('id', $qb->createNamedParameter($share['id'])))
+ ->execute();
+ }
}
/**
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index b5dd653d718..aa1f926ea35 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -41,7 +41,7 @@ $thumbSize = 1024;
<input type="hidden" name="filename" value="<?php p($_['filename']) ?>" id="filename">
<input type="hidden" name="mimetype" value="<?php p($_['mimetype']) ?>" id="mimetype">
<input type="hidden" name="previewSupported" value="<?php p($_['previewSupported'] ? 'true' : 'false'); ?>" id="previewSupported">
-<input type="hidden" name="mimetypeIcon" value="<?php p(OC_Helper::mimetypeIcon($_['mimetype'])); ?>" id="mimetypeIcon">
+<input type="hidden" name="mimetypeIcon" value="<?php p(\OC::$server->getMimeTypeDetector()->mimeTypeIcon($_['mimetype'])); ?>" id="mimetypeIcon">
<input type="hidden" name="filesize" value="<?php p($_['nonHumanFileSize']); ?>" id="filesize">
<input type="hidden" name="maxSizeAnimateGif" value="<?php p($_['maxSizeAnimateGif']); ?>" id="maxSizeAnimateGif">
@@ -72,7 +72,7 @@ $thumbSize = 1024;
if ($_['server2serversharing']) {
?>
<span id="save" data-protected="<?php p($_['protected']) ?>"
- data-owner="<?php p($_['displayName']) ?>" data-name="<?php p($_['filename']) ?>">
+ 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 ownCloud')) ?></button>
<form class="save-form hidden" action="#">
<input type="text" id="remote_address" placeholder="example.com/owncloud"/>
diff --git a/apps/files_sharing/tests/controller/sharecontroller.php b/apps/files_sharing/tests/controller/sharecontroller.php
index ccef4263c2b..398538f0943 100644
--- a/apps/files_sharing/tests/controller/sharecontroller.php
+++ b/apps/files_sharing/tests/controller/sharecontroller.php
@@ -78,7 +78,7 @@ class ShareControllerTest extends \Test\TestCase {
// Create a dummy user
$this->user = \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(12, ISecureRandom::CHAR_LOWER);
- \OC_User::createUser($this->user, $this->user);
+ \OC::$server->getUserManager()->createUser($this->user, $this->user);
\OC_Util::tearDownFS();
$this->loginAsUser($this->user);
@@ -98,7 +98,8 @@ class ShareControllerTest extends \Test\TestCase {
\OC_Util::tearDownFS();
\OC_User::setUserId('');
Filesystem::tearDown();
- \OC_User::deleteUser($this->user);
+ $user = \OC::$server->getUserManager()->get($this->user);
+ if ($user !== null) { $user->delete(); }
\OC_User::setIncognitoMode(false);
\OC::$server->getSession()->set('public_link_authenticated', '');
@@ -168,6 +169,7 @@ class ShareControllerTest extends \Test\TestCase {
$response = $this->shareController->showShare($this->token);
$sharedTmplParams = array(
'displayName' => $this->user,
+ 'owner' => $this->user,
'filename' => 'file1.txt',
'directory_path' => '/file1.txt',
'mimetype' => 'text/plain',
diff --git a/apps/files_sharing/tests/etagpropagation.php b/apps/files_sharing/tests/etagpropagation.php
index de9ce565394..5a917fd1c67 100644
--- a/apps/files_sharing/tests/etagpropagation.php
+++ b/apps/files_sharing/tests/etagpropagation.php
@@ -34,31 +34,7 @@ use OC\Files\View;
*
* @package OCA\Files_sharing\Tests
*/
-class EtagPropagation extends TestCase {
- /**
- * @var \OC\Files\View
- */
- private $rootView;
- protected $fileIds = []; // [$user=>[$path=>$id]]
- protected $fileEtags = []; // [$id=>$etag]
-
- public static function setUpBeforeClass() {
- parent::setUpBeforeClass();
- \OCA\Files_Sharing\Helper::registerHooks();
- }
-
- protected function setUp() {
- parent::setUp();
- $this->setUpShares();
- }
-
- protected function tearDown() {
- \OC_Hook::clear('OC_Filesystem', 'post_write');
- \OC_Hook::clear('OC_Filesystem', 'post_delete');
- \OC_Hook::clear('OC_Filesystem', 'post_rename');
- \OC_Hook::clear('OCP\Share', 'post_update_permissions');
- parent::tearDown();
- }
+class EtagPropagation extends PropagationTestCase {
/**
* "user1" is the admin who shares a folder "sub1/sub2/folder" with "user2" and "user3"
@@ -67,7 +43,7 @@ class EtagPropagation extends TestCase {
* "user2" reshares the subdir "sub1/sub2/folder/inside" with "user4"
* "user4" puts the received "inside" folder into "sub1/sub2/inside" (this is to check if it propagates across multiple subfolders)
*/
- private function setUpShares() {
+ protected function setUpShares() {
$this->fileIds[self::TEST_FILES_SHARING_API_USER1] = [];
$this->fileIds[self::TEST_FILES_SHARING_API_USER2] = [];
$this->fileIds[self::TEST_FILES_SHARING_API_USER3] = [];
@@ -136,58 +112,6 @@ class EtagPropagation extends TestCase {
}
}
- /**
- * @param string[] $users
- * @param string $subPath
- */
- private function assertEtagsChanged($users, $subPath = '') {
- $oldUser = \OC::$server->getUserSession()->getUser();
- foreach ($users as $user) {
- $this->loginAsUser($user);
- $id = $this->fileIds[$user][$subPath];
- $path = $this->rootView->getPath($id);
- $etag = $this->rootView->getFileInfo($path)->getEtag();
- $this->assertNotEquals($this->fileEtags[$id], $etag, 'Failed asserting that the etag for "' . $subPath . '" of user ' . $user . ' has changed');
- $this->fileEtags[$id] = $etag;
- }
- $this->loginAsUser($oldUser->getUID());
- }
-
- /**
- * @param string[] $users
- * @param string $subPath
- */
- private function assertEtagsNotChanged($users, $subPath = '') {
- $oldUser = \OC::$server->getUserSession()->getUser();
- foreach ($users as $user) {
- $this->loginAsUser($user);
- $id = $this->fileIds[$user][$subPath];
- $path = $this->rootView->getPath($id);
- $etag = $this->rootView->getFileInfo($path)->getEtag();
- $this->assertEquals($this->fileEtags[$id], $etag, 'Failed asserting that the etag for "' . $subPath . '" of user ' . $user . ' has not changed');
- $this->fileEtags[$id] = $etag;
- }
- $this->loginAsUser($oldUser->getUID());
- }
-
- /**
- * Assert that the etags for the root, /sub1 and /sub1/sub2 have changed
- *
- * @param string[] $users
- */
- private function assertEtagsForFoldersChanged($users) {
- $this->assertEtagsChanged($users);
-
- $this->assertEtagsChanged($users, 'sub1');
- $this->assertEtagsChanged($users, 'sub1/sub2');
- }
-
- private function assertAllUnchanged() {
- $users = [self::TEST_FILES_SHARING_API_USER1, self::TEST_FILES_SHARING_API_USER2,
- self::TEST_FILES_SHARING_API_USER3, self::TEST_FILES_SHARING_API_USER4];
- $this->assertEtagsNotChanged($users);
- }
-
public function testOwnerWritesToShare() {
$this->loginAsUser(self::TEST_FILES_SHARING_API_USER1);
Filesystem::file_put_contents('/sub1/sub2/folder/asd.txt', 'bar');
diff --git a/apps/files_sharing/tests/groupetagpropagation.php b/apps/files_sharing/tests/groupetagpropagation.php
new file mode 100644
index 00000000000..804d064eadb
--- /dev/null
+++ b/apps/files_sharing/tests/groupetagpropagation.php
@@ -0,0 +1,104 @@
+<?php
+/**
+ * @author Robin Appelman <icewind@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\Files_sharing\Tests;
+
+use OC\Files\Filesystem;
+use OC\Files\View;
+
+/**
+ * @group DB
+ *
+ * @package OCA\Files_sharing\Tests
+ */
+class GroupEtagPropagation extends PropagationTestCase {
+ /**
+ * "user1" creates /test, /test/sub and shares with group1
+ * "user2" (in group1) reshares /test with group2 and reshared /test/sub with group3
+ * "user3" (in group 2)
+ * "user4" (in group 3)
+ */
+ protected function setUpShares() {
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER1] = [];
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER2] = [];
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER3] = [];
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER4] = [];
+
+ $this->rootView = new View('');
+ $this->loginAsUser(self::TEST_FILES_SHARING_API_USER1);
+ $view1 = new View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files');
+ $view1->mkdir('/test/sub');
+ $folderInfo = $view1->getFileInfo('/test');
+ \OCP\Share::shareItem('folder', $folderInfo->getId(), \OCP\Share::SHARE_TYPE_GROUP, 'group1', 31);
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER1][''] = $view1->getFileInfo('')->getId();
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER1]['test'] = $view1->getFileInfo('test')->getId();
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER1]['test/sub'] = $view1->getFileInfo('test/sub')->getId();
+
+ $this->loginAsUser(self::TEST_FILES_SHARING_API_USER2);
+ $view2 = new View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files');
+ $folderInfo = $view2->getFileInfo('/test');
+ $subFolderInfo = $view2->getFileInfo('/test/sub');
+ \OCP\Share::shareItem('folder', $folderInfo->getId(), \OCP\Share::SHARE_TYPE_GROUP, 'group2', 31);
+ \OCP\Share::shareItem('folder', $subFolderInfo->getId(), \OCP\Share::SHARE_TYPE_GROUP, 'group3', 31);
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER2][''] = $view2->getFileInfo('')->getId();
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER2]['test'] = $view2->getFileInfo('test')->getId();
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER2]['test/sub'] = $view2->getFileInfo('test/sub')->getId();
+
+ $this->loginAsUser(self::TEST_FILES_SHARING_API_USER3);
+ $view3 = new View('/' . self::TEST_FILES_SHARING_API_USER3 . '/files');
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER3][''] = $view3->getFileInfo('')->getId();
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER3]['test'] = $view3->getFileInfo('test')->getId();
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER3]['test/sub'] = $view3->getFileInfo('test/sub')->getId();
+
+ $this->loginAsUser(self::TEST_FILES_SHARING_API_USER4);
+ $view4 = new View('/' . self::TEST_FILES_SHARING_API_USER4 . '/files');
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER4][''] = $view4->getFileInfo('')->getId();
+ $this->fileIds[self::TEST_FILES_SHARING_API_USER4]['sub'] = $view4->getFileInfo('sub')->getId();
+
+ foreach ($this->fileIds as $user => $ids) {
+ $this->loginAsUser($user);
+ foreach ($ids as $id) {
+ $path = $this->rootView->getPath($id);
+ $this->fileEtags[$id] = $this->rootView->getFileInfo($path)->getEtag();
+ }
+ }
+ }
+
+ public function testGroupReShareRecipientWrites() {
+ $this->loginAsUser(self::TEST_FILES_SHARING_API_USER3);
+
+ Filesystem::file_put_contents('/test/sub/file.txt', 'asd');
+
+ $this->assertEtagsChanged([self::TEST_FILES_SHARING_API_USER1, self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_USER3, self::TEST_FILES_SHARING_API_USER4]);
+
+ $this->assertAllUnchanged();
+ }
+
+ public function testGroupReShareSubFolderRecipientWrites() {
+ $this->loginAsUser(self::TEST_FILES_SHARING_API_USER4);
+
+ Filesystem::file_put_contents('/sub/file.txt', 'asd');
+
+ $this->assertEtagsChanged([self::TEST_FILES_SHARING_API_USER1, self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_USER3, self::TEST_FILES_SHARING_API_USER4]);
+
+ $this->assertAllUnchanged();
+ }
+}
diff --git a/apps/files_sharing/tests/js/externalSpec.js b/apps/files_sharing/tests/js/externalSpec.js
index 255f0fc3a48..362df49252b 100644
--- a/apps/files_sharing/tests/js/externalSpec.js
+++ b/apps/files_sharing/tests/js/externalSpec.js
@@ -67,6 +67,7 @@ describe('OCA.Sharing external tests', function() {
remote: 'http://example.com/owncloud',
token: 'abcdefg',
owner: 'theowner',
+ ownerDisplayName: 'The Generous Owner',
name: 'the share name'
};
});
@@ -88,6 +89,7 @@ describe('OCA.Sharing external tests', function() {
remote: 'http://example.com/owncloud',
token: 'abcdefg',
owner: 'theowner',
+ ownerDisplayName: 'The Generous Owner',
name: 'the share name',
password: ''
});
@@ -104,6 +106,7 @@ describe('OCA.Sharing external tests', function() {
remote: 'http://example.com/owncloud',
token: 'abcdefg',
owner: 'theowner',
+ ownerDisplayName: 'The Generous Owner',
name: 'the share name',
password: 'thepassword'
});
@@ -148,6 +151,7 @@ describe('OCA.Sharing external tests', function() {
remote: 'http://example.com/owncloud',
token: 'abcdefg',
owner: 'theowner',
+ ownerDisplayName: 'The Generous Owner',
name: 'the share name'
};
});
diff --git a/apps/files_sharing/tests/js/publicAppSpec.js b/apps/files_sharing/tests/js/publicAppSpec.js
index 74f008025e1..2aaf758f3e3 100644
--- a/apps/files_sharing/tests/js/publicAppSpec.js
+++ b/apps/files_sharing/tests/js/publicAppSpec.js
@@ -89,7 +89,8 @@ describe('OCA.Sharing.PublicApp tests', function() {
it('Uses public webdav endpoint', function() {
expect(fakeServer.requests.length).toEqual(1);
expect(fakeServer.requests[0].method).toEqual('PROPFIND');
- expect(fakeServer.requests[0].url).toEqual('https://sh4tok@example.com/owncloud/public.php/webdav/subdir');
+ expect(fakeServer.requests[0].url).toEqual('https://example.com/owncloud/public.php/webdav/subdir');
+ expect(fakeServer.requests[0].requestHeaders.Authorization).toEqual('Basic c2g0dG9rOm51bGw=');
});
describe('Download Url', function() {
diff --git a/apps/files_sharing/tests/js/sharedfilelistSpec.js b/apps/files_sharing/tests/js/sharedfilelistSpec.js
index fdc9de49c17..0b0676a19e6 100644
--- a/apps/files_sharing/tests/js/sharedfilelistSpec.js
+++ b/apps/files_sharing/tests/js/sharedfilelistSpec.js
@@ -712,7 +712,7 @@ describe('OCA.Sharing.FileList tests', function() {
$tr = fileList.$el.find('tr:first');
expect(parseInt($tr.attr('data-share-permissions'), 10))
- .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_SHARE - OC.PERMISSION_DELETE);
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_SHARE - OC.PERMISSION_DELETE - OC.PERMISSION_CREATE);
});
});
});
diff --git a/apps/files_sharing/tests/propagationtestcase.php b/apps/files_sharing/tests/propagationtestcase.php
new file mode 100644
index 00000000000..f397c1fb7a0
--- /dev/null
+++ b/apps/files_sharing/tests/propagationtestcase.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * @author Robin Appelman <icewind@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\Files_sharing\Tests;
+
+abstract class PropagationTestCase extends TestCase {
+ /**
+ * @var \OC\Files\View
+ */
+ protected $rootView;
+ protected $fileIds = []; // [$user=>[$path=>$id]]
+ protected $fileEtags = []; // [$id=>$etag]
+
+ public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+ \OCA\Files_Sharing\Helper::registerHooks();
+ }
+
+ protected function setUp() {
+ parent::setUp();
+ $this->setUpShares();
+ }
+
+ protected function tearDown() {
+ \OC_Hook::clear('OC_Filesystem', 'post_write');
+ \OC_Hook::clear('OC_Filesystem', 'post_delete');
+ \OC_Hook::clear('OC_Filesystem', 'post_rename');
+ \OC_Hook::clear('OCP\Share', 'post_update_permissions');
+ parent::tearDown();
+ }
+
+ abstract protected function setUpShares();
+
+ /**
+ * @param string[] $users
+ * @param string $subPath
+ */
+ protected function assertEtagsChanged($users, $subPath = '') {
+ $oldUser = \OC::$server->getUserSession()->getUser();
+ foreach ($users as $user) {
+ $this->loginAsUser($user);
+ $id = $this->fileIds[$user][$subPath];
+ $path = $this->rootView->getPath($id);
+ $etag = $this->rootView->getFileInfo($path)->getEtag();
+ $this->assertNotEquals($this->fileEtags[$id], $etag, 'Failed asserting that the etag for "' . $subPath . '" of user ' . $user . ' has changed');
+ $this->fileEtags[$id] = $etag;
+ }
+ $this->loginAsUser($oldUser->getUID());
+ }
+
+ /**
+ * @param string[] $users
+ * @param string $subPath
+ */
+ protected function assertEtagsNotChanged($users, $subPath = '') {
+ $oldUser = \OC::$server->getUserSession()->getUser();
+ foreach ($users as $user) {
+ $this->loginAsUser($user);
+ $id = $this->fileIds[$user][$subPath];
+ $path = $this->rootView->getPath($id);
+ $etag = $this->rootView->getFileInfo($path)->getEtag();
+ $this->assertEquals($this->fileEtags[$id], $etag, 'Failed asserting that the etag for "' . $subPath . '" of user ' . $user . ' has not changed');
+ $this->fileEtags[$id] = $etag;
+ }
+ $this->loginAsUser($oldUser->getUID());
+ }
+
+ /**
+ * Assert that the etags for the root, /sub1 and /sub1/sub2 have changed
+ *
+ * @param string[] $users
+ */
+ protected function assertEtagsForFoldersChanged($users) {
+ $this->assertEtagsChanged($users);
+
+ $this->assertEtagsChanged($users, 'sub1');
+ $this->assertEtagsChanged($users, 'sub1/sub2');
+ }
+
+ protected function assertAllUnchanged() {
+ $users = [self::TEST_FILES_SHARING_API_USER1, self::TEST_FILES_SHARING_API_USER2,
+ self::TEST_FILES_SHARING_API_USER3, self::TEST_FILES_SHARING_API_USER4];
+ $this->assertEtagsNotChanged($users);
+ }
+}
diff --git a/apps/files_sharing/tests/testcase.php b/apps/files_sharing/tests/testcase.php
index dc5b8ed79d9..c4037c7c42e 100644
--- a/apps/files_sharing/tests/testcase.php
+++ b/apps/files_sharing/tests/testcase.php
@@ -84,9 +84,15 @@ abstract class TestCase extends \Test\TestCase {
$groupBackend = new \OC_Group_Dummy();
$groupBackend->createGroup(self::TEST_FILES_SHARING_API_GROUP1);
$groupBackend->createGroup('group');
+ $groupBackend->createGroup('group1');
+ $groupBackend->createGroup('group2');
+ $groupBackend->createGroup('group3');
$groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER1, 'group');
$groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, 'group');
$groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER3, 'group');
+ $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, 'group1');
+ $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER3, 'group2');
+ $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER4, 'group3');
$groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_GROUP1);
\OC_Group::useBackend($groupBackend);
@@ -111,9 +117,12 @@ abstract class TestCase extends \Test\TestCase {
public static function tearDownAfterClass() {
// cleanup users
- \OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER1);
- \OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER2);
- \OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER3);
+ $user = \OC::$server->getUserManager()->get(self::TEST_FILES_SHARING_API_USER1);
+ if ($user !== null) { $user->delete(); }
+ $user = \OC::$server->getUserManager()->get(self::TEST_FILES_SHARING_API_USER2);
+ if ($user !== null) { $user->delete(); }
+ $user = \OC::$server->getUserManager()->get(self::TEST_FILES_SHARING_API_USER3);
+ if ($user !== null) { $user->delete(); }
// delete group
\OC_Group::deleteGroup(self::TEST_FILES_SHARING_API_GROUP1);
@@ -143,7 +152,7 @@ abstract class TestCase extends \Test\TestCase {
}
if ($create) {
- \OC_User::createUser($user, $password);
+ \OC::$server->getUserManager()->createUser($user, $password);
\OC_Group::createGroup('group');
\OC_Group::addToGroup($user, 'group');
}
diff --git a/apps/files_trashbin/ajax/preview.php b/apps/files_trashbin/ajax/preview.php
index 49d6d93f574..ecb4971253f 100644
--- a/apps/files_trashbin/ajax/preview.php
+++ b/apps/files_trashbin/ajax/preview.php
@@ -62,7 +62,7 @@ try{
$fileName = substr($fileName, 0, $i);
}
}
- $mimetype = \OC_Helper::getFileNameMimeType($fileName);
+ $mimetype = \OC::$server->getMimeTypeDetector()->detectPath($fileName);
}
$preview->setMimetype($mimetype);
$preview->setMaxX($maxX);
diff --git a/apps/files_trashbin/l10n/mk.js b/apps/files_trashbin/l10n/mk.js
index 6acb933aa80..8a4b16c52d8 100644
--- a/apps/files_trashbin/l10n/mk.js
+++ b/apps/files_trashbin/l10n/mk.js
@@ -9,6 +9,7 @@ OC.L10N.register(
"Delete permanently" : "Трајно избришани",
"Error" : "Грешка",
"restored" : "повратени",
+ "No entries found in this folder" : "Нема ништо во оваа папка",
"Name" : "Име",
"Deleted" : "Избришан"
},
diff --git a/apps/files_trashbin/l10n/mk.json b/apps/files_trashbin/l10n/mk.json
index a9948f49ff6..2ec0b3c9500 100644
--- a/apps/files_trashbin/l10n/mk.json
+++ b/apps/files_trashbin/l10n/mk.json
@@ -7,6 +7,7 @@
"Delete permanently" : "Трајно избришани",
"Error" : "Грешка",
"restored" : "повратени",
+ "No entries found in this folder" : "Нема ништо во оваа папка",
"Name" : "Име",
"Deleted" : "Избришан"
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
diff --git a/apps/files_trashbin/l10n/pt_BR.js b/apps/files_trashbin/l10n/pt_BR.js
index b1a3768a3bd..806200ea651 100644
--- a/apps/files_trashbin/l10n/pt_BR.js
+++ b/apps/files_trashbin/l10n/pt_BR.js
@@ -11,8 +11,8 @@ OC.L10N.register(
"This operation is forbidden" : "Esta operação é proibida",
"This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador",
"restored" : "restaurado",
- "No deleted files" : "Aquivos não removidos",
- "You will be able to recover deleted files from here" : "Você pode recuperar arquivos removidos daqui",
+ "No deleted files" : "Nenhum arquivo excluído",
+ "You will be able to recover deleted files from here" : "Neste local, você será capaz de recuperar arquivos excluídos",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Select all" : "Selecionar tudo",
"Name" : "Nome",
diff --git a/apps/files_trashbin/l10n/pt_BR.json b/apps/files_trashbin/l10n/pt_BR.json
index db2dc331d5d..177a377bdfd 100644
--- a/apps/files_trashbin/l10n/pt_BR.json
+++ b/apps/files_trashbin/l10n/pt_BR.json
@@ -9,8 +9,8 @@
"This operation is forbidden" : "Esta operação é proibida",
"This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador",
"restored" : "restaurado",
- "No deleted files" : "Aquivos não removidos",
- "You will be able to recover deleted files from here" : "Você pode recuperar arquivos removidos daqui",
+ "No deleted files" : "Nenhum arquivo excluído",
+ "You will be able to recover deleted files from here" : "Neste local, você será capaz de recuperar arquivos excluídos",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Select all" : "Selecionar tudo",
"Name" : "Nome",
diff --git a/apps/files_trashbin/lib/helper.php b/apps/files_trashbin/lib/helper.php
index d14e97285c5..0ccf15cd2bc 100644
--- a/apps/files_trashbin/lib/helper.php
+++ b/apps/files_trashbin/lib/helper.php
@@ -87,7 +87,7 @@ class Helper
$i = array(
'name' => $id,
'mtime' => $timestamp,
- 'mimetype' => $view->is_dir($dir . '/' . $entryName) ? 'httpd/unix-directory' : \OC_Helper::getFileNameMimeType($id),
+ 'mimetype' => $view->is_dir($dir . '/' . $entryName) ? 'httpd/unix-directory' : \OC::$server->getMimeTypeDetector()->detectPath($id),
'type' => $view->is_dir($dir . '/' . $entryName) ? 'dir' : 'file',
'directory' => ($dir === '/') ? '' : $dir,
'size' => $size,
diff --git a/apps/files_trashbin/lib/storage.php b/apps/files_trashbin/lib/storage.php
index 0e42df1e967..becde5e635b 100644
--- a/apps/files_trashbin/lib/storage.php
+++ b/apps/files_trashbin/lib/storage.php
@@ -26,6 +26,7 @@ namespace OCA\Files_Trashbin;
use OC\Files\Filesystem;
use OC\Files\Storage\Wrapper\Wrapper;
+use OC\Files\View;
use OCP\IUserManager;
class Storage extends Wrapper {
@@ -151,8 +152,8 @@ class Storage extends Wrapper {
$normalized = Filesystem::normalizePath($this->mountPoint . '/' . $path);
$result = true;
- if (!isset($this->deletedFiles[$normalized])) {
- $view = Filesystem::getView();
+ $view = Filesystem::getView();
+ if (!isset($this->deletedFiles[$normalized]) && $view instanceof View) {
$this->deletedFiles[$normalized] = $normalized;
if ($filesPath = $view->getRelativePath($normalized)) {
$filesPath = trim($filesPath, '/');
diff --git a/apps/files_trashbin/tests/storage.php b/apps/files_trashbin/tests/storage.php
index 3ebbbc3ec9d..30735fe7bc3 100644
--- a/apps/files_trashbin/tests/storage.php
+++ b/apps/files_trashbin/tests/storage.php
@@ -75,7 +75,8 @@ class Storage extends \Test\TestCase {
protected function tearDown() {
\OC\Files\Filesystem::getLoader()->removeStorageWrapper('oc_trashbin');
$this->logout();
- \OC_User::deleteUser($this->user);
+ $user = \OC::$server->getUserManager()->get($this->user);
+ if ($user !== null) { $user->delete(); }
\OC_Hook::clear();
parent::tearDown();
}
@@ -531,4 +532,17 @@ class Storage extends \Test\TestCase {
['/schiesbn/', '/test.txt', false, false],
];
}
+
+ /**
+ * Test that deleting a file doesn't error when nobody is logged in
+ */
+ public function testSingleStorageDeleteFileLoggedOut() {
+ $this->logout();
+
+ if (!$this->userView->file_exists('test.txt')) {
+ $this->markTestSkipped('Skipping since the current home storage backend requires the user to logged in');
+ } else {
+ $this->userView->unlink('test.txt');
+ }
+ }
}
diff --git a/apps/files_trashbin/tests/trashbin.php b/apps/files_trashbin/tests/trashbin.php
index db7e7e6e840..9c19b67a904 100644
--- a/apps/files_trashbin/tests/trashbin.php
+++ b/apps/files_trashbin/tests/trashbin.php
@@ -88,7 +88,8 @@ class Test_Trashbin extends \Test\TestCase {
public static function tearDownAfterClass() {
// cleanup test user
- \OC_User::deleteUser(self::TEST_TRASHBIN_USER1);
+ $user = \OC::$server->getUserManager()->get(self::TEST_TRASHBIN_USER1);
+ if ($user !== null) { $user->delete(); }
\OC::$server->getConfig()->setSystemValue('trashbin_retention_obligation', self::$rememberRetentionObligation);
@@ -636,7 +637,7 @@ class Test_Trashbin extends \Test\TestCase {
public static function loginHelper($user, $create = false) {
if ($create) {
try {
- \OC_User::createUser($user, $user);
+ \OC::$server->getUserManager()->createUser($user, $user);
} catch(\Exception $e) { // catch username is already being used from previous aborted runs
}
diff --git a/apps/files_versions/ajax/preview.php b/apps/files_versions/ajax/preview.php
index 0da518f3eaa..f21911abc9b 100644
--- a/apps/files_versions/ajax/preview.php
+++ b/apps/files_versions/ajax/preview.php
@@ -48,7 +48,7 @@ if($maxX === 0 || $maxY === 0) {
try {
list($user, $file) = \OCA\Files_Versions\Storage::getUidAndFilename($file);
$preview = new \OC\Preview($user, 'files_versions', $file.'.v'.$version);
- $mimetype = \OC_Helper::getFileNameMimeType($file);
+ $mimetype = \OC::$server->getMimeTypeDetector()->detectPath($file);
$preview->setMimetype($mimetype);
$preview->setMaxX($maxX);
$preview->setMaxY($maxY);
diff --git a/apps/files_versions/command/expire.php b/apps/files_versions/command/expire.php
index 5db33f38772..88723690603 100644
--- a/apps/files_versions/command/expire.php
+++ b/apps/files_versions/command/expire.php
@@ -35,16 +35,6 @@ class Expire implements ICommand {
private $fileName;
/**
- * @var int|null
- */
- private $versionsSize;
-
- /**
- * @var int
- */
- private $neededSpace = 0;
-
- /**
* @var string
*/
private $user;
@@ -52,14 +42,10 @@ class Expire implements ICommand {
/**
* @param string $user
* @param string $fileName
- * @param int|null $versionsSize
- * @param int $neededSpace
*/
- function __construct($user, $fileName, $versionsSize = null, $neededSpace = 0) {
+ function __construct($user, $fileName) {
$this->user = $user;
$this->fileName = $fileName;
- $this->versionsSize = $versionsSize;
- $this->neededSpace = $neededSpace;
}
@@ -71,7 +57,7 @@ class Expire implements ICommand {
}
\OC_Util::setupFS($this->user);
- Storage::expire($this->fileName, $this->versionsSize, $this->neededSpace);
+ Storage::expire($this->fileName);
\OC_Util::tearDownFS();
}
}
diff --git a/apps/files_versions/download.php b/apps/files_versions/download.php
index 22a218f472a..d3c38f3d4e1 100644
--- a/apps/files_versions/download.php
+++ b/apps/files_versions/download.php
@@ -35,7 +35,7 @@ $versionName = '/'.$uid.'/files_versions/'.$filename.'.v'.$revision;
$view = new OC\Files\View('/');
-$ftype = \OC_Helper::getSecureMimeType($view->getMimeType('/'.$uid.'/files/'.$filename));
+$ftype = \OC::$server->getMimeTypeDetector()->getSecureMimeType($view->getMimeType('/'.$uid.'/files/'.$filename));
header('Content-Type:'.$ftype);
OCP\Response::setContentDispositionHeader(basename($filename), 'attachment');
diff --git a/apps/files_versions/lib/storage.php b/apps/files_versions/lib/storage.php
index 29876b3e38a..21b5e9e0e7b 100644
--- a/apps/files_versions/lib/storage.php
+++ b/apps/files_versions/lib/storage.php
@@ -168,14 +168,7 @@ class Storage {
// create all parent folders
self::createMissingDirectories($filename, $users_view);
- $versionsSize = self::getVersionsSize($uid);
-
- // assumption: we need filesize($filename) for the new version +
- // some more free space for the modified file which might be
- // 1.5 times as large as the current version -> 2.5
- $neededSpace = $files_view->filesize($filename) * 2.5;
-
- self::scheduleExpire($uid, $filename, $versionsSize, $neededSpace);
+ self::scheduleExpire($uid, $filename);
// store a new version of a file
$mtime = $users_view->filemtime('files/' . $filename);
@@ -634,14 +627,12 @@ class Storage {
*
* @param string $uid owner of the file
* @param string $fileName file/folder for which to schedule expiration
- * @param int|null $versionsSize current versions size
- * @param int $neededSpace requested versions size
*/
- private static function scheduleExpire($uid, $fileName, $versionsSize = null, $neededSpace = 0) {
+ private static function scheduleExpire($uid, $fileName) {
// let the admin disable auto expire
$expiration = self::getExpiration();
if ($expiration->isEnabled()) {
- $command = new Expire($uid, $fileName, $versionsSize, $neededSpace);
+ $command = new Expire($uid, $fileName);
\OC::$server->getCommandBus()->push($command);
}
}
@@ -650,11 +641,9 @@ class Storage {
* Expire versions which exceed the quota
*
* @param string $filename
- * @param int|null $versionsSize
- * @param int $offset
* @return bool|int|null
*/
- public static function expire($filename, $versionsSize = null, $offset = 0) {
+ public static function expire($filename) {
$config = \OC::$server->getConfig();
$expiration = self::getExpiration();
@@ -680,9 +669,7 @@ class Storage {
}
// make sure that we have the current size of the version history
- if ( $versionsSize === null ) {
- $versionsSize = self::getVersionsSize($uid);
- }
+ $versionsSize = self::getVersionsSize($uid);
// calculate available space for version history
// subtract size of files and current versions size from quota
@@ -692,12 +679,12 @@ class Storage {
$rootInfo = $files_view->getFileInfo('/', false);
$free = $quota - $rootInfo['size']; // remaining free space for user
if ($free > 0) {
- $availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - ($versionsSize + $offset); // how much space can be used for versions
+ $availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - $versionsSize; // how much space can be used for versions
} else {
- $availableSpace = $free - $versionsSize - $offset;
+ $availableSpace = $free - $versionsSize;
}
} else {
- $availableSpace = $quota - $offset;
+ $availableSpace = $quota;
}
} else {
$availableSpace = PHP_INT_MAX;
diff --git a/apps/files_versions/tests/versions.php b/apps/files_versions/tests/versions.php
index ffc98c2e98c..ee4978ff784 100644
--- a/apps/files_versions/tests/versions.php
+++ b/apps/files_versions/tests/versions.php
@@ -61,8 +61,10 @@ class Test_Files_Versioning extends \Test\TestCase {
public static function tearDownAfterClass() {
// cleanup test user
- \OC_User::deleteUser(self::TEST_VERSIONS_USER);
- \OC_User::deleteUser(self::TEST_VERSIONS_USER2);
+ $user = \OC::$server->getUserManager()->get(self::TEST_VERSIONS_USER);
+ if ($user !== null) { $user->delete(); }
+ $user = \OC::$server->getUserManager()->get(self::TEST_VERSIONS_USER2);
+ if ($user !== null) { $user->delete(); }
parent::tearDownAfterClass();
}
diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php
index 7d358e5b268..7a61101f578 100644
--- a/apps/user_ldap/appinfo/update.php
+++ b/apps/user_ldap/appinfo/update.php
@@ -21,21 +21,5 @@
*
*/
-$installedVersion = \OC::$server->getConfig()->getAppValue('user_ldap', 'installed_version');
-
-if (version_compare($installedVersion, '0.6.1', '<')) {
- \OC::$server->getConfig()->setAppValue('user_ldap', 'enforce_home_folder_naming_rule', false);
-}
-
-if(version_compare($installedVersion, '0.6.2', '<')) {
- // Remove LDAP case insensitive setting from DB as it is no longer beeing used.
- $helper = new \OCA\user_ldap\lib\Helper();
- $prefixes = $helper->getServerConfigurationPrefixes();
-
- foreach($prefixes as $prefix) {
- \OC::$server->getConfig()->deleteAppValue('user_ldap', $prefix . "ldap_nocase");
- }
-}
-
OCP\Backgroundjob::registerJob('OCA\user_ldap\lib\Jobs');
OCP\Backgroundjob::registerJob('\OCA\User_LDAP\Jobs\CleanUp');
diff --git a/apps/user_ldap/js/wizard/wizardTabGeneric.js b/apps/user_ldap/js/wizard/wizardTabGeneric.js
index 60e7cd2ad9e..8940a8468a0 100644
--- a/apps/user_ldap/js/wizard/wizardTabGeneric.js
+++ b/apps/user_ldap/js/wizard/wizardTabGeneric.js
@@ -198,9 +198,13 @@ OCA = OCA || {};
return;
}
- // deal with text area
+ // special cases: deal with text area and multiselect
if ($element.is('textarea') && $.isArray(value)) {
value = value.join("\n");
+ } else if($element.hasClass(this.multiSelectPluginClass)) {
+ if(!_.isArray(value)) {
+ value = value.split("\n");
+ }
}
if ($element.is('span')) {
diff --git a/apps/user_ldap/l10n/et_EE.js b/apps/user_ldap/l10n/et_EE.js
index aa0727c9bc1..649950716b6 100644
--- a/apps/user_ldap/l10n/et_EE.js
+++ b/apps/user_ldap/l10n/et_EE.js
@@ -18,18 +18,22 @@ OC.L10N.register(
"Select groups" : "Vali grupid",
"Select object classes" : "Vali objekti klassid",
"Please check the credentials, they seem to be wrong." : "Palu nkontrolli kasutajaandmeid, need näivad olevat valed.",
+ "Could not detect Base DN, please enter it manually." : "BaasDN-i tuvastamine ebaõnnestus. Palun sisesta see käsitsi.",
"{nthServer}. Server" : "{nthServer}. Server",
"Do you really want to delete the current Server Configuration?" : "Oled kindel, et tahad kustutada praegust serveri seadistust?",
"Confirm Deletion" : "Kinnita kustutamine",
+ "Error while clearing the mappings." : "Tõrgeseose eemaldamisel.",
"Mode switch" : "Režiimi lüliti",
"Select attributes" : "Vali atribuudid",
"User found and settings verified." : "Kasutaja leiti ja seaded on kontrollitud.",
+ "Please provide a login name to test against" : "Palun sisesta kasutajanimi, mida testida",
"_%s group found_::_%s groups found_" : ["%s grupp leitud","%s gruppi leitud"],
"_%s user found_::_%s users found_" : ["%s kasutaja leitud","%s kasutajat leitud"],
"Could not find the desired feature" : "Ei suuda leida soovitud funktsioonaalsust",
"Invalid Host" : "Vigane server",
"Server" : "Server",
"Users" : "Kasutajad",
+ "Login Attributes" : "Sisselogimise andmed",
"Groups" : "Grupid",
"Test Configuration" : "Testi seadistust",
"Help" : "Abiinfo",
@@ -43,6 +47,8 @@ OC.L10N.register(
"LDAP Filter:" : "LDAP filter:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filter määrab millised LDAP grupid saavad ligipääsu sellele %s instantsile.",
"Verify settings and count groups" : "Kontrolli seadeid ja loe grupid üle",
+ "LDAP / AD Username:" : "LDAP / AD kasutajanimi:",
+ "LDAP / AD Email Address:" : "LDAP / AD e-posti aadress:",
"Other Attributes:" : "Muud atribuudid:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Määrab sisselogimisel kasutatava filtri. %%uid asendab sisselogimistegevuses kasutajanime. Näide: \"uid=%%uid\"",
"Test Loginname" : "Testi kasutajanime",
diff --git a/apps/user_ldap/l10n/et_EE.json b/apps/user_ldap/l10n/et_EE.json
index 5d8fbe2f81b..04b22459b18 100644
--- a/apps/user_ldap/l10n/et_EE.json
+++ b/apps/user_ldap/l10n/et_EE.json
@@ -16,18 +16,22 @@
"Select groups" : "Vali grupid",
"Select object classes" : "Vali objekti klassid",
"Please check the credentials, they seem to be wrong." : "Palu nkontrolli kasutajaandmeid, need näivad olevat valed.",
+ "Could not detect Base DN, please enter it manually." : "BaasDN-i tuvastamine ebaõnnestus. Palun sisesta see käsitsi.",
"{nthServer}. Server" : "{nthServer}. Server",
"Do you really want to delete the current Server Configuration?" : "Oled kindel, et tahad kustutada praegust serveri seadistust?",
"Confirm Deletion" : "Kinnita kustutamine",
+ "Error while clearing the mappings." : "Tõrgeseose eemaldamisel.",
"Mode switch" : "Režiimi lüliti",
"Select attributes" : "Vali atribuudid",
"User found and settings verified." : "Kasutaja leiti ja seaded on kontrollitud.",
+ "Please provide a login name to test against" : "Palun sisesta kasutajanimi, mida testida",
"_%s group found_::_%s groups found_" : ["%s grupp leitud","%s gruppi leitud"],
"_%s user found_::_%s users found_" : ["%s kasutaja leitud","%s kasutajat leitud"],
"Could not find the desired feature" : "Ei suuda leida soovitud funktsioonaalsust",
"Invalid Host" : "Vigane server",
"Server" : "Server",
"Users" : "Kasutajad",
+ "Login Attributes" : "Sisselogimise andmed",
"Groups" : "Grupid",
"Test Configuration" : "Testi seadistust",
"Help" : "Abiinfo",
@@ -41,6 +45,8 @@
"LDAP Filter:" : "LDAP filter:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filter määrab millised LDAP grupid saavad ligipääsu sellele %s instantsile.",
"Verify settings and count groups" : "Kontrolli seadeid ja loe grupid üle",
+ "LDAP / AD Username:" : "LDAP / AD kasutajanimi:",
+ "LDAP / AD Email Address:" : "LDAP / AD e-posti aadress:",
"Other Attributes:" : "Muud atribuudid:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Määrab sisselogimisel kasutatava filtri. %%uid asendab sisselogimistegevuses kasutajanime. Näide: \"uid=%%uid\"",
"Test Loginname" : "Testi kasutajanime",
diff --git a/apps/user_ldap/l10n/ko.js b/apps/user_ldap/l10n/ko.js
index c08dd0e2a93..0ed95377acb 100644
--- a/apps/user_ldap/l10n/ko.js
+++ b/apps/user_ldap/l10n/ko.js
@@ -24,6 +24,7 @@ OC.L10N.register(
"Could not detect Base DN, please enter it manually." : "기본 DN을 자동으로 감지할 수 없습니다. 직접 입력하십시오.",
"{nthServer}. Server" : "{nthServer}. 서버",
"No object found in the given Base DN. Please revise." : "입력한 기본 DN에서 객체를 찾을 수 없습니다. 다시 입력하십시오.",
+ "More than 1,000 directory entries available." : "디렉터리 항목이 1,000개 이상 존재합니다.",
" entries available within the provided Base DN" : "개(지정한 DN의 기본 항목 수)",
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "오류가 발생했습니다. 기본 DN, 연결 설정, 인증 정보를 확인하십시오.",
"Do you really want to delete the current Server Configuration?" : "현재 서버 설정을 지우시겠습니까?",
diff --git a/apps/user_ldap/l10n/ko.json b/apps/user_ldap/l10n/ko.json
index 59037ab0a2b..3fccad0577c 100644
--- a/apps/user_ldap/l10n/ko.json
+++ b/apps/user_ldap/l10n/ko.json
@@ -22,6 +22,7 @@
"Could not detect Base DN, please enter it manually." : "기본 DN을 자동으로 감지할 수 없습니다. 직접 입력하십시오.",
"{nthServer}. Server" : "{nthServer}. 서버",
"No object found in the given Base DN. Please revise." : "입력한 기본 DN에서 객체를 찾을 수 없습니다. 다시 입력하십시오.",
+ "More than 1,000 directory entries available." : "디렉터리 항목이 1,000개 이상 존재합니다.",
" entries available within the provided Base DN" : "개(지정한 DN의 기본 항목 수)",
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "오류가 발생했습니다. 기본 DN, 연결 설정, 인증 정보를 확인하십시오.",
"Do you really want to delete the current Server Configuration?" : "현재 서버 설정을 지우시겠습니까?",
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index 667f1076235..693a420a74d 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -1277,6 +1277,54 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
+ * reverse lookup of a DN given a known UUID
+ *
+ * @param string $uuid
+ * @return string
+ * @throws \Exception
+ */
+ public function getUserDnByUuid($uuid) {
+ $uuidOverride = $this->connection->ldapExpertUUIDUserAttr;
+ $filter = $this->connection->ldapUserFilter;
+ $base = $this->connection->ldapBaseUsers;
+
+ if($this->connection->ldapUuidUserAttribute === 'auto' && empty($uuidOverride)) {
+ // Sacrebleu! The UUID attribute is unknown :( We need first an
+ // existing DN to be able to reliably detect it.
+ $result = $this->search($filter, $base, ['dn'], 1);
+ if(!isset($result[0]) || !isset($result[0]['dn'])) {
+ throw new \Exception('Cannot determine UUID attribute');
+ }
+ $dn = $result[0]['dn'][0];
+ if(!$this->detectUuidAttribute($dn, true)) {
+ throw new \Exception('Cannot determine UUID attribute');
+ }
+ } else {
+ // The UUID attribute is either known or an override is given.
+ // By calling this method we ensure that $this->connection->$uuidAttr
+ // is definitely set
+ if(!$this->detectUuidAttribute('', true)) {
+ throw new \Exception('Cannot determine UUID attribute');
+ }
+ }
+
+ $uuidAttr = $this->connection->ldapUuidUserAttribute;
+ if($uuidAttr === 'guid' || $uuidAttr === 'objectguid') {
+ $uuid = $this->formatGuid2ForFilterUser($uuid);
+ }
+
+ $filter = $uuidAttr . '=' . $uuid;
+ $result = $this->searchUsers($filter, ['dn'], 2);
+ if(is_array($result) && isset($result[0]) && isset($result[0]['dn']) && count($result) === 1) {
+ // we put the count into account to make sure that this is
+ // really unique
+ return $result[0]['dn'][0];
+ }
+
+ throw new \Exception('Cannot determine UUID attribute');
+ }
+
+ /**
* auto-detects the directory's UUID attribute
* @param string $dn a known DN used to check against
* @param bool $isUser
@@ -1379,6 +1427,53 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
+ * the first three blocks of the string-converted GUID happen to be in
+ * reverse order. In order to use it in a filter, this needs to be
+ * corrected. Furthermore the dashes need to be replaced and \\ preprended
+ * to every two hax figures.
+ *
+ * If an invalid string is passed, it will be returned without change.
+ *
+ * @param string $guid
+ * @return string
+ */
+ public function formatGuid2ForFilterUser($guid) {
+ if(!is_string($guid)) {
+ throw new \InvalidArgumentException('String expected');
+ }
+ $blocks = explode('-', $guid);
+ if(count($blocks) !== 5) {
+ /*
+ * Why not throw an Exception instead? This method is a utility
+ * called only when trying to figure out whether a "missing" known
+ * LDAP user was or was not renamed on the LDAP server. And this
+ * even on the use case that a reverse lookup is needed (UUID known,
+ * not DN), i.e. when finding users (search dialog, users page,
+ * login, …) this will not be fired. This occurs only if shares from
+ * a users are supposed to be mounted who cannot be found. Throwing
+ * an exception here would kill the experience for a valid, acting
+ * user. Instead we write a log message.
+ */
+ \OC::$server->getLogger()->info(
+ 'Passed string does not resemble a valid GUID. Known UUID ' .
+ '({uuid}) probably does not match UUID configuration.',
+ [ 'app' => 'user_ldap', 'uuid' => $guid ]
+ );
+ return $guid;
+ }
+ for($i=0; $i < 3; $i++) {
+ $pairs = str_split($blocks[$i], 2);
+ $pairs = array_reverse($pairs);
+ $blocks[$i] = implode('', $pairs);
+ }
+ for($i=0; $i < 5; $i++) {
+ $pairs = str_split($blocks[$i], 2);
+ $blocks[$i] = '\\' . implode('\\', $pairs);
+ }
+ return implode('', $blocks);
+ }
+
+ /**
* gets a SID of the domain of the given dn
* @param string $dn
* @return string|bool
diff --git a/apps/user_ldap/lib/mapping/abstractmapping.php b/apps/user_ldap/lib/mapping/abstractmapping.php
index f0f0f6df75e..c3d38ce8b71 100644
--- a/apps/user_ldap/lib/mapping/abstractmapping.php
+++ b/apps/user_ldap/lib/mapping/abstractmapping.php
@@ -158,7 +158,7 @@ abstract class AbstractMapping {
}
/**
- * Gets the name based on the provided LDAP DN.
+ * Gets the name based on the provided LDAP UUID.
* @param string $uuid
* @return string|false
*/
@@ -167,6 +167,16 @@ abstract class AbstractMapping {
}
/**
+ * Gets the UUID based on the provided LDAP DN
+ * @param string $dn
+ * @return false|string
+ * @throws \Exception
+ */
+ public function getUUIDByDN($dn) {
+ return $this->getXbyY('directory_uuid', 'ldap_dn', $dn);
+ }
+
+ /**
* gets a piece of the mapping list
* @param int $offset
* @param int $limit
diff --git a/apps/user_ldap/tests/user_ldap.php b/apps/user_ldap/tests/user_ldap.php
index 7593371d85d..3aec2a5ce57 100644
--- a/apps/user_ldap/tests/user_ldap.php
+++ b/apps/user_ldap/tests/user_ldap.php
@@ -70,14 +70,26 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
array($lw, null, null));
$this->configMock = $this->getMock('\OCP\IConfig');
- $um = new \OCA\user_ldap\lib\user\Manager(
+
+ $offlineUser = $this->getMockBuilder('\OCA\user_ldap\lib\user\OfflineUser')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $um = $this->getMockBuilder('\OCA\user_ldap\lib\user\Manager')
+ ->setMethods(['getDeletedUser'])
+ ->setConstructorArgs([
$this->configMock,
$this->getMock('\OCA\user_ldap\lib\FilesystemHelper'),
$this->getMock('\OCA\user_ldap\lib\LogWrapper'),
$this->getMock('\OCP\IAvatarManager'),
$this->getMock('\OCP\Image'),
$this->getMock('\OCP\IDBConnection')
- );
+ ])
+ ->getMock();
+
+ $um->expects($this->any())
+ ->method('getDeletedUser')
+ ->will($this->returnValue($offlineUser));
$access = $this->getMock('\OCA\user_ldap\lib\Access',
$accMethods,
@@ -661,6 +673,44 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
$this->assertFalse($result);
}
+ /**
+ * @expectedException \OC\User\NoUserException
+ */
+ public function testGetHomeDeletedUser() {
+ $access = $this->getAccessMock();
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
+ $this->prepareMockForUserExists($access);
+
+ $access->connection->expects($this->any())
+ ->method('__get')
+ ->will($this->returnCallback(function($name) {
+ if($name === 'homeFolderNamingRule') {
+ return 'attr:testAttribute';
+ }
+ return null;
+ }));
+
+ $access->expects($this->any())
+ ->method('readAttribute')
+ ->will($this->returnValue([]));
+
+ $userMapper = $this->getMockBuilder('\OCA\User_LDAP\Mapping\UserMapping')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $access->expects($this->any())
+ ->method('getUserMapper')
+ ->will($this->returnValue($userMapper));
+
+ $this->configMock->expects($this->any())
+ ->method('getUserValue')
+ ->will($this->returnValue(true));
+
+ //no path at all – triggers OC default behaviour
+ $result = $backend->getHome('newyorker');
+ $this->assertFalse($result);
+ }
+
private function prepareAccessForGetDisplayName(&$access) {
$access->connection->expects($this->any())
->method('__get')
@@ -686,6 +736,14 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
return false;
}
}));
+
+ $userMapper = $this->getMockBuilder('\OCA\User_LDAP\Mapping\UserMapping')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $access->expects($this->any())
+ ->method('getUserMapper')
+ ->will($this->returnValue($userMapper));
}
public function testGetDisplayName() {
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index 0097dda89b5..a266be7b7f7 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -30,6 +30,7 @@
namespace OCA\user_ldap;
+use OC\User\NoUserException;
use OCA\user_ldap\lib\BackendUtility;
use OCA\user_ldap\lib\Access;
use OCA\user_ldap\lib\user\OfflineUser;
@@ -190,15 +191,18 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
/**
* checks whether a user is still available on LDAP
+ *
* @param string|\OCA\User_LDAP\lib\user\User $user either the ownCloud user
* name or an instance of that user
* @return bool
+ * @throws \Exception
+ * @throws \OC\ServerNotAvailableException
*/
public function userExistsOnLDAP($user) {
if(is_string($user)) {
$user = $this->access->userManager->get($user);
}
- if(!$user instanceof User) {
+ if(is_null($user)) {
return false;
}
@@ -209,7 +213,22 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
if(is_null($lcr)) {
throw new \Exception('No LDAP Connection to server ' . $this->access->connection->ldapHost);
}
- return false;
+
+ try {
+ $uuid = $this->access->getUserMapper()->getUUIDByDN($dn);
+ if(!$uuid) {
+ return false;
+ }
+ $newDn = $this->access->getUserDnByUuid($uuid);
+ $this->access->getUserMapper()->setDNbyUUID($newDn, $uuid);
+ return true;
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ if($user instanceof OfflineUser) {
+ $user->unmark();
}
return true;
@@ -274,10 +293,13 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
}
/**
- * get the user's home directory
- * @param string $uid the username
- * @return string|bool
- */
+ * get the user's home directory
+ *
+ * @param string $uid the username
+ * @return bool|string
+ * @throws NoUserException
+ * @throws \Exception
+ */
public function getHome($uid) {
if(isset($this->homesToKill[$uid]) && !empty($this->homesToKill[$uid])) {
//a deleted user who needs some clean up
@@ -295,6 +317,15 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
}
$user = $this->access->userManager->get($uid);
+ if(is_null($user) || ($user instanceof OfflineUser && !$this->userExistsOnLDAP($user->getOCName()))) {
+ throw new NoUserException($uid . ' is not a valid user anymore');
+ }
+ if($user instanceof OfflineUser) {
+ // apparently this user survived the userExistsOnLDAP check,
+ // we request the user instance again in order to retrieve a User
+ // instance instead
+ $user = $this->access->userManager->get($uid);
+ }
$path = $user->getHomePath();
$this->access->cacheUserHome($uid, $path);
diff --git a/autotest-external.sh b/autotest-external.sh
index 86fb796627c..6128f68136f 100755
--- a/autotest-external.sh
+++ b/autotest-external.sh
@@ -193,7 +193,8 @@ EOF
echo "name: $name"
# execute start file
- if ./$FILES_EXTERNAL_BACKEND_ENV_PATH/$startFile; then
+ ./$FILES_EXTERNAL_BACKEND_ENV_PATH/$startFile
+ if [ $? -eq 0 ]; then
# getting backend to test from filename
# it's the part between the dots startSomething.TestToRun.sh
testToRun=`echo $startFile | cut -d '-' -f 2`
@@ -209,6 +210,8 @@ EOF
"$PHPUNIT" --configuration phpunit-autotest-external.xml --log-junit "autotest-external-results-$1-$name.xml" "$FILES_EXTERNAL_BACKEND_PATH/$testToRun.php"
RESULT=$?
fi
+ else
+ DOEXIT=1
fi
# calculate stop file
@@ -218,6 +221,10 @@ EOF
# execute stop file if existant
./$FILES_EXTERNAL_BACKEND_ENV_PATH/$stopFile
fi
+ if [ "$DOEXIT" ]; then
+ echo "Error during start file execution ... terminating"
+ exit $DOEXIT
+ fi
done;
}
diff --git a/bower.json b/bower.json
index eb8d1ce0b7f..ae9575249c9 100644
--- a/bower.json
+++ b/bower.json
@@ -29,6 +29,7 @@
"bootstrap": "~3.3.6",
"backbone": "~1.2.3",
"davclient.js": "https://github.com/evert/davclient.js.git",
- "es6-promise": "https://github.com/jakearchibald/es6-promise.git#~2.3.0"
+ "es6-promise": "https://github.com/jakearchibald/es6-promise.git#~2.3.0",
+ "base64": "~0.3.0"
}
}
diff --git a/build/integration/features/bootstrap/CapabilitiesContext.php b/build/integration/features/bootstrap/CapabilitiesContext.php
index 4e200bdf421..1b0015dce73 100644
--- a/build/integration/features/bootstrap/CapabilitiesContext.php
+++ b/build/integration/features/bootstrap/CapabilitiesContext.php
@@ -2,8 +2,6 @@
use Behat\Behat\Context\Context;
use Behat\Behat\Context\SnippetAcceptingContext;
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\ResponseInterface;
require __DIR__ . '/../../vendor/autoload.php';
diff --git a/build/integration/features/bootstrap/WebDav.php b/build/integration/features/bootstrap/WebDav.php
index a682467f52d..49cd565cf26 100644
--- a/build/integration/features/bootstrap/WebDav.php
+++ b/build/integration/features/bootstrap/WebDav.php
@@ -97,6 +97,15 @@ trait WebDav{
PHPUnit_Framework_Assert::assertEquals($content, (string)$this->response->getBody());
}
+ /**
+ * @Then /^Downloaded content when downloading file "([^"]*)" with range "([^"]*)" should be "([^"]*)"$/
+ */
+ public function downloadedContentWhenDownloadindShouldBe($fileSource, $range, $content){
+ $this->downloadFileWithRange($fileSource, $range);
+ $this->downloadedContentShouldBe($content);
+ }
+
+
/*Returns the elements of a propfind, $folderDepth requires 1 to see elements without children*/
public function listFolder($user, $path, $folderDepth){
$fullUrl = substr($this->baseUrl, 0, -4);
@@ -126,7 +135,7 @@ trait WebDav{
* @param \Behat\Gherkin\Node\TableNode|null $expectedElements
*/
public function checkElementList($user, $expectedElements){
- $elementList = $this->listFolder($user, '/', 2);
+ $elementList = $this->listFolder($user, '/', 3);
if ($expectedElements instanceof \Behat\Gherkin\Node\TableNode) {
$elementRows = $expectedElements->getRows();
$elementsSimplified = $this->simplifyArray($elementRows);
@@ -153,5 +162,17 @@ trait WebDav{
}
}
+ /**
+ * @Given User :user created a folder :destination
+ */
+ public function userCreatedAFolder($user, $destination){
+ try {
+ $this->response = $this->makeDavRequest($user, "MKCOL", $destination, []);
+ } catch (\GuzzleHttp\Exception\ServerException $e) {
+ // 4xx and 5xx responses cause an exception
+ $this->response = $e->getResponse();
+ }
+ }
+
}
diff --git a/build/integration/features/sharing-v1.feature b/build/integration/features/sharing-v1.feature
index e00fd47baeb..31ba0d4ad7f 100644
--- a/build/integration/features/sharing-v1.feature
+++ b/build/integration/features/sharing-v1.feature
@@ -379,6 +379,47 @@ Feature: sharing
| /CHILD/child.txt |
And the HTTP status code should be "200"
+ Scenario: Share a file by multiple channels
+ Given As an "admin"
+ And user "user0" exists
+ And user "user1" exists
+ And user "user2" exists
+ And group "group0" exists
+ And user "user1" belongs to group "group0"
+ And user "user2" belongs to group "group0"
+ And user "user0" created a folder "/common"
+ And user "user0" created a folder "/common/sub"
+ And file "common" of user "user0" is shared with group "group0"
+ And file "textfile0.txt" of user "user1" is shared with user "user2"
+ And User "user1" moved file "/textfile0.txt" to "/common/textfile0.txt"
+ And User "user1" moved file "/common/textfile0.txt" to "/common/sub/textfile0.txt"
+ And As an "user2"
+ When Downloading file "/common/sub/textfile0.txt" with range "bytes=9-17"
+ Then Downloaded content should be "test text"
+ And Downloaded content when downloading file "/textfile0.txt" with range "bytes=9-17" should be "test text"
+ And user "user2" should see following elements
+ | /common/sub/textfile0.txt |
+
+ Scenario: Share a file by multiple channels
+ Given As an "admin"
+ And user "user0" exists
+ And user "user1" exists
+ And user "user2" exists
+ And group "group0" exists
+ And user "user1" belongs to group "group0"
+ And user "user2" belongs to group "group0"
+ And user "user0" created a folder "/common"
+ And user "user0" created a folder "/common/sub"
+ And file "common" of user "user0" is shared with group "group0"
+ And file "textfile0.txt" of user "user1" is shared with user "user2"
+ And User "user1" moved file "/textfile0.txt" to "/common/textfile0.txt"
+ And User "user1" moved file "/common/textfile0.txt" to "/common/sub/textfile0.txt"
+ And As an "user2"
+ When Downloading file "/textfile0.txt" with range "bytes=9-17"
+ Then Downloaded content should be "test text"
+ And user "user2" should see following elements
+ | /common/sub/textfile0.txt |
+
Scenario: Delete all group shares
Given As an "admin"
And user "user0" exists
diff --git a/config/config.sample.php b/config/config.sample.php
index c3abe3a2b87..6e823e3968d 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -799,20 +799,17 @@ $CONFIG = array(
'ldapUserCleanupInterval' => 51,
/**
- * Enforce the existence of the home folder naming rule for all users
- *
- * Following scenario:
- * * a home folder naming rule is set in LDAP advanced settings
- * * a user doesn't have the home folder naming rule attribute set
- *
- * If this is set to **true** (default) it will NOT fallback to the core's
- * default naming rule of using the internal user ID as home folder name.
- *
- * If this is set to **false** it will fallback for the users without the
- * attribute set to naming the home folder like the internal user ID.
+ * Comments
*
+ * Global settings for the Comments infrastructure
+ */
+
+/**
+ * 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.
*/
-'enforce_home_folder_naming_rule' => true,
+'comments.managerFactory' => '\OC\Comments\ManagerFactory',
/**
* Maintenance
diff --git a/console.php b/console.php
index 8bfbabf2a03..ab845aced50 100644
--- a/console.php
+++ b/console.php
@@ -64,6 +64,16 @@ try {
}
}
+ $oldWorkingDir = getcwd();
+ if ($oldWorkingDir === false) {
+ echo "This script can be run from the ownCloud root directory only." . PHP_EOL;
+ echo "Can't determine current working dir - the script will continue to work but be aware of the above fact." . PHP_EOL;
+ } else if ($oldWorkingDir !== __DIR__ && !chdir(__DIR__)) {
+ echo "This script can be run from the ownCloud root directory only." . PHP_EOL;
+ echo "Can't change to ownCloud root diretory." . PHP_EOL;
+ exit(1);
+ }
+
$application = new Application(\OC::$server->getConfig());
$application->loadCommands(new ConsoleOutput());
$application->run();
diff --git a/core/avatar/avatarcontroller.php b/core/avatar/avatarcontroller.php
index 6c0321e6b5e..e8139aa50ae 100644
--- a/core/avatar/avatarcontroller.php
+++ b/core/avatar/avatarcontroller.php
@@ -30,6 +30,7 @@ use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Http\DataDisplayResponse;
+use OCP\Files\NotFoundException;
use OCP\IAvatarManager;
use OCP\ILogger;
use OCP\IL10N;
@@ -112,20 +113,23 @@ class AvatarController extends Controller {
$size = 64;
}
- $avatar = $this->avatarManager->getAvatar($userId);
- $image = $avatar->get($size);
-
- if ($image instanceof \OCP\IImage) {
- $resp = new DataDisplayResponse($image->data(),
+ try {
+ $avatar = $this->avatarManager->getAvatar($userId)->getFile($size);
+ $resp = new DataDisplayResponse($avatar->getContent(),
Http::STATUS_OK,
- ['Content-Type' => $image->mimeType()]);
- $resp->setETag(crc32($image->data()));
- } else {
+ ['Content-Type' => $avatar->getMimeType()]);
+ $resp->setETag($avatar->getEtag());
+ } catch (NotFoundException $e) {
$user = $this->userManager->get($userId);
- $userName = $user ? $user->getDisplayName() : '';
$resp = new DataResponse([
'data' => [
- 'displayname' => $userName,
+ 'displayname' => $user->getDisplayName(),
+ ],
+ ]);
+ } catch (\Exception $e) {
+ $resp = new DataResponse([
+ 'data' => [
+ 'displayname' => '',
],
]);
}
diff --git a/core/command/app/getpath.php b/core/command/app/getpath.php
new file mode 100644
index 00000000000..7cfa01d48af
--- /dev/null
+++ b/core/command/app/getpath.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * @author Victor Dubiniuk <dubiniuk@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OC\Core\Command\App;
+
+use OC\Core\Command\Base;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class GetPath extends Base {
+ protected function configure() {
+ parent::configure();
+
+ $this
+ ->setName('app:getpath')
+ ->setDescription('Get an absolute path to the app directory')
+ ->addArgument(
+ 'app',
+ InputArgument::REQUIRED,
+ 'Name of the app'
+ )
+ ;
+ }
+
+ /**
+ * Executes the current command.
+ *
+ * @param InputInterface $input An InputInterface instance
+ * @param OutputInterface $output An OutputInterface instance
+ * @return null|int null or 0 if everything went fine, or an error code
+ */
+ protected function execute(InputInterface $input, OutputInterface $output) {
+ $appName = $input->getArgument('app');
+ $path = \OC_App::getAppPath($appName);
+ if ($path !== false) {
+ $output->writeln($path);
+ return 0;
+ }
+
+ // App not found, exit with non-zero
+ return 1;
+ }
+}
diff --git a/core/command/maintenance/install.php b/core/command/maintenance/install.php
index b0235c518ec..d4ef72c9fc8 100644
--- a/core/command/maintenance/install.php
+++ b/core/command/maintenance/install.php
@@ -68,7 +68,12 @@ class Install extends Command {
$errors = $sysInfo['errors'];
if (count($errors) > 0) {
$this->printErrors($output, $errors);
- return 1;
+
+ // ignore the OS X setup warning
+ if(count($errors) !== 1 ||
+ (string)($errors[0]['error']) !== 'Mac OS X is not supported and ownCloud will not work properly on this platform. Use it at your own risk! ') {
+ return 1;
+ }
}
// validate user input
diff --git a/core/command/status.php b/core/command/status.php
index 2eb58525d3e..c2a28ff822f 100644
--- a/core/command/status.php
+++ b/core/command/status.php
@@ -39,7 +39,7 @@ class Status extends Base {
protected function execute(InputInterface $input, OutputInterface $output) {
$values = array(
'installed' => (bool) \OC::$server->getConfig()->getSystemValue('installed', false),
- 'version' => implode('.', \OC_Util::getVersion()),
+ 'version' => implode('.', \OCP\Util::getVersion()),
'versionstring' => \OC_Util::getVersionString(),
'edition' => \OC_Util::getEditionString(),
);
diff --git a/core/css/styles.css b/core/css/styles.css
index 62161d69273..ce2cfa37c64 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -254,6 +254,10 @@ body {
width: 22em;
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;
@@ -291,6 +295,10 @@ body {
#body-login form fieldset {
margin-bottom: 20px;
text-align: left;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
}
#body-login form #sqliteInformation {
margin-top: -20px;
@@ -348,6 +356,10 @@ body {
.groupmiddle,
.groupbottom {
position: relative;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
}
#body-login .grouptop input,
.grouptop input {
@@ -385,6 +397,10 @@ label.infield {
padding: 14px;
padding-left: 28px;
vertical-align: middle;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
}
html.ie8 #body-login form input[type="checkbox"]+label {
margin-left: -28px;
diff --git a/core/js/avatar.js b/core/js/avatar.js
deleted file mode 100644
index 8ff136d67ca..00000000000
--- a/core/js/avatar.js
+++ /dev/null
@@ -1,10 +0,0 @@
-$(document).ready(function(){
- if (OC.currentUser) {
- // Personal settings
- $('#avatar .avatardiv').avatar(OC.currentUser, 128);
- }
- // User settings
- $.each($('td.avatar .avatardiv'), function(i, element) {
- $(element).avatar($(element).parent().parent().data('uid'), 32);
- });
-});
diff --git a/core/js/config.php b/core/js/config.php
index e51ae903729..c975c6db2dc 100644
--- a/core/js/config.php
+++ b/core/js/config.php
@@ -138,7 +138,7 @@ $array = array(
array(
'session_lifetime' => min(\OCP\Config::getSystemValue('session_lifetime', OC::$server->getIniWrapper()->getNumeric('session.gc_maxlifetime')), OC::$server->getIniWrapper()->getNumeric('session.gc_maxlifetime')),
'session_keepalive' => \OCP\Config::getSystemValue('session_keepalive', true),
- 'version' => implode('.', OC_Util::getVersion()),
+ 'version' => implode('.', \OCP\Util::getVersion()),
'versionstring' => OC_Util::getVersionString(),
'enable_avatars' => \OC::$server->getConfig()->getSystemValue('enable_avatars', true),
'lost_password_link'=> \OC::$server->getConfig()->getSystemValue('lost_password_link', null),
diff --git a/core/js/files/client.js b/core/js/files/client.js
index 82cf3ff5121..3d31f974ff8 100644
--- a/core/js/files/client.js
+++ b/core/js/files/client.js
@@ -35,27 +35,25 @@
if (options.useHTTPS) {
url = 'https://';
}
- var credentials = '';
- if (options.userName) {
- credentials += encodeURIComponent(options.userName);
- }
- if (options.password) {
- credentials += ':' + encodeURIComponent(options.password);
- }
- if (credentials.length > 0) {
- url += credentials + '@';
- }
url += options.host + this._root;
this._defaultHeaders = options.defaultHeaders || {'X-Requested-With': 'XMLHttpRequest'};
this._baseUrl = url;
- this._client = new dav.Client({
+
+ var clientOptions = {
baseUrl: this._baseUrl,
xmlNamespaces: {
'DAV:': 'd',
'http://owncloud.org/ns': 'oc'
}
- });
+ };
+ if (options.userName) {
+ clientOptions.userName = options.userName;
+ }
+ if (options.password) {
+ clientOptions.password = options.password;
+ }
+ this._client = new dav.Client(clientOptions);
this._client.xhrProvider = _.bind(this._xhrProvider, this);
};
@@ -253,7 +251,7 @@
id: props['{' + Client.NS_OWNCLOUD + '}fileid'],
path: OC.dirname(path) || '/',
name: OC.basename(path),
- mtime: new Date(props['{' + Client.NS_DAV + '}getlastmodified'])
+ mtime: (new Date(props['{' + Client.NS_DAV + '}getlastmodified'])).getTime()
};
var etagProp = props['{' + Client.NS_DAV + '}getetag'];
@@ -303,10 +301,6 @@
}
break;
case 'W':
- if (isFile) {
- // also add create permissions
- data.permissions |= OC.PERMISSION_CREATE;
- }
data.permissions |= OC.PERMISSION_UPDATE;
break;
case 'D':
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index fe93d0ea657..b77063a9eae 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -753,6 +753,7 @@ var OCdialogs = {
var sorted = dirs.concat(others);
$.each(sorted, function(idx, entry) {
+ entry.icon = OC.MimeType.getIconUrl(entry.mimetype);
var $li = self.$listTmpl.octemplate({
type: entry.type,
dir: dir,
diff --git a/core/js/placeholder.js b/core/js/placeholder.js
index 74bb9b1881d..5fb5b5b8f80 100644
--- a/core/js/placeholder.js
+++ b/core/js/placeholder.js
@@ -47,16 +47,20 @@
*/
(function ($) {
- $.fn.imageplaceholder = function(seed, text) {
+ $.fn.imageplaceholder = function(seed, text, size) {
// set optional argument "text" to value of "seed" if undefined
text = text || seed;
- var hash = md5(seed),
- maxRange = parseInt('ffffffffffffffffffffffffffffffff', 16),
+ var hash = md5(seed).substring(0, 4),
+ maxRange = parseInt('ffff', 16),
hue = parseInt(hash, 16) / maxRange * 256,
- height = this.height();
+ height = this.height() || size || 32;
this.css('background-color', 'hsl(' + hue + ', 90%, 65%)');
+ // Placeholders are square
+ this.height(height);
+ this.width(height);
+
// CSS rules
this.css('color', '#fff');
this.css('font-weight', 'normal');
diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js
index 5ac1945da73..8763ec1c71b 100644
--- a/core/js/setupchecks.js
+++ b/core/js/setupchecks.js
@@ -70,13 +70,13 @@
}
if(!data.isMemcacheConfigured) {
messages.push({
- msg: t('core', 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href="{docLink}">documentation</a>.', {docLink: data.memcacheDocs}),
+ msg: t('core', 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target="_blank" href="{docLink}">documentation</a>.', {docLink: data.memcacheDocs}),
type: OC.SetupChecks.MESSAGE_TYPE_INFO
});
}
if(!data.isUrandomAvailable) {
messages.push({
- msg: t('core', '/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href="{docLink}">documentation</a>.', {docLink: data.securityDocs}),
+ msg: t('core', '/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target="_blank" href="{docLink}">documentation</a>.', {docLink: data.securityDocs}),
type: OC.SetupChecks.MESSAGE_TYPE_WARNING
});
}
@@ -88,19 +88,19 @@
}
if(data.phpSupported && data.phpSupported.eol) {
messages.push({
- msg: t('core', 'Your PHP version ({version}) is no longer <a href="{phpLink}">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP.', {version: data.phpSupported.version, phpLink: 'https://secure.php.net/supported-versions.php'}),
+ msg: t('core', 'Your PHP version ({version}) is no longer <a target="_blank" href="{phpLink}">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP.', {version: data.phpSupported.version, phpLink: 'https://secure.php.net/supported-versions.php'}),
type: OC.SetupChecks.MESSAGE_TYPE_INFO
});
}
if(!data.forwardedForHeadersWorking) {
messages.push({
- msg: t('core', '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 href="{docLink}">documentation</a>.', {docLink: data.reverseProxyDocs}),
+ msg: t('core', '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" href="{docLink}">documentation</a>.', {docLink: data.reverseProxyDocs}),
type: OC.SetupChecks.MESSAGE_TYPE_WARNING
});
}
if(!data.isCorrectMemcachedPHPModuleInstalled) {
messages.push({
- msg: t('core', 'Memcached is configured as distributed cache, but the wrong PHP module "memcache" is installed. \\OC\\Memcache\\Memcached only supports "memcached" and not "memcache". See the <a href="{wikiLink}">memcached wiki about both modules</a>.', {wikiLink: 'https://code.google.com/p/memcached/wiki/PHPClientComparison'}),
+ msg: t('core', 'Memcached is configured as distributed cache, but the wrong PHP module "memcache" is installed. \\OC\\Memcache\\Memcached only supports "memcached" and not "memcache". See the <a target="_blank" href="{wikiLink}">memcached wiki about both modules</a>.', {wikiLink: 'https://code.google.com/p/memcached/wiki/PHPClientComparison'}),
type: OC.SetupChecks.MESSAGE_TYPE_WARNING
});
}
@@ -108,7 +108,7 @@
messages.push({
msg: t(
'core',
- 'Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href="{docLink}">documentation</a>. (<a href="{codeIntegrityDownloadEndpoint}">List of invalid files…</a> / <a href="{rescanEndpoint}">Rescan…</a>)',
+ 'Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target="_blank" href="{docLink}">documentation</a>. (<a href="{codeIntegrityDownloadEndpoint}">List of invalid files…</a> / <a href="{rescanEndpoint}">Rescan…</a>)',
{
docLink: data.codeIntegrityCheckerDocumentation,
codeIntegrityDownloadEndpoint: OC.generateUrl('/settings/integrity/failed'),
diff --git a/core/js/tests/specs/files/clientSpec.js b/core/js/tests/specs/files/clientSpec.js
index 3a3181d8426..61cff0a66ec 100644
--- a/core/js/tests/specs/files/clientSpec.js
+++ b/core/js/tests/specs/files/clientSpec.js
@@ -252,7 +252,7 @@ describe('OC.Files.Client tests', function() {
expect(info.name).toEqual('One.txt');
expect(info.permissions).toEqual(31);
expect(info.size).toEqual(250);
- expect(info.mtime.getTime()).toEqual(1436535485000);
+ expect(info.mtime).toEqual(1436535485000);
expect(info.mimetype).toEqual('text/plain');
expect(info.etag).toEqual('559fcabd79a38');
@@ -264,7 +264,7 @@ describe('OC.Files.Client tests', function() {
expect(info.name).toEqual('sub');
expect(info.permissions).toEqual(31);
expect(info.size).toEqual(100);
- expect(info.mtime.getTime()).toEqual(1436536800000);
+ expect(info.mtime).toEqual(1436536800000);
expect(info.mimetype).toEqual('httpd/unix-directory');
expect(info.etag).toEqual('66cfcabd79abb');
});
@@ -295,7 +295,7 @@ describe('OC.Files.Client tests', function() {
expect(info.name).toEqual('文件夹');
expect(info.permissions).toEqual(31);
expect(info.size).toEqual(120);
- expect(info.mtime.getTime()).toEqual(1436522405000);
+ expect(info.mtime).toEqual(1436522405000);
expect(info.mimetype).toEqual('httpd/unix-directory');
expect(info.etag).toEqual('56cfcabd79abb');
@@ -376,7 +376,7 @@ describe('OC.Files.Client tests', function() {
expect(info.name).toEqual('文件夹');
expect(info.permissions).toEqual(31);
expect(info.size).toEqual(120);
- expect(info.mtime.getTime()).toEqual(1436522405000);
+ expect(info.mtime).toEqual(1436522405000);
expect(info.mimetype).toEqual('httpd/unix-directory');
expect(info.etag).toEqual('56cfcabd79abb');
});
@@ -425,7 +425,7 @@ describe('OC.Files.Client tests', function() {
expect(info.name).toEqual('in root');
expect(info.permissions).toEqual(31);
expect(info.size).toEqual(120);
- expect(info.mtime.getTime()).toEqual(1436522405000);
+ expect(info.mtime).toEqual(1436522405000);
expect(info.mimetype).toEqual('httpd/unix-directory');
expect(info.etag).toEqual('56cfcabd79abb');
});
diff --git a/core/js/tests/specs/setupchecksSpec.js b/core/js/tests/specs/setupchecksSpec.js
index 4bad893cf37..c5f1aa5effe 100644
--- a/core/js/tests/specs/setupchecksSpec.js
+++ b/core/js/tests/specs/setupchecksSpec.js
@@ -88,7 +88,7 @@ describe('OC.SetupChecks tests', function() {
msg: 'Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.',
type: OC.SetupChecks.MESSAGE_TYPE_ERROR
}, {
- msg: 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href="https://doc.owncloud.org/server/go.php?to=admin-performance">documentation</a>.',
+ msg: 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target="_blank" href="https://doc.owncloud.org/server/go.php?to=admin-performance">documentation</a>.',
type: OC.SetupChecks.MESSAGE_TYPE_INFO
}]);
done();
@@ -125,7 +125,7 @@ describe('OC.SetupChecks tests', function() {
type: OC.SetupChecks.MESSAGE_TYPE_ERROR
},
{
- msg: 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href="https://doc.owncloud.org/server/go.php?to=admin-performance">documentation</a>.',
+ msg: 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target="_blank" href="https://doc.owncloud.org/server/go.php?to=admin-performance">documentation</a>.',
type: OC.SetupChecks.MESSAGE_TYPE_INFO
}]);
done();
@@ -187,7 +187,7 @@ describe('OC.SetupChecks tests', function() {
async.done(function( data, s, x ){
expect(data).toEqual([{
- msg: '/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href="https://docs.owncloud.org/myDocs.html">documentation</a>.',
+ msg: '/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target="_blank" href="https://docs.owncloud.org/myDocs.html">documentation</a>.',
type: OC.SetupChecks.MESSAGE_TYPE_WARNING
}]);
done();
@@ -216,7 +216,7 @@ describe('OC.SetupChecks tests', function() {
async.done(function( data, s, x ){
expect(data).toEqual([{
- msg: 'Memcached is configured as distributed cache, but the wrong PHP module "memcache" is installed. \\OC\\Memcache\\Memcached only supports "memcached" and not "memcache". See the <a href="https://code.google.com/p/memcached/wiki/PHPClientComparison">memcached wiki about both modules</a>.',
+ msg: 'Memcached is configured as distributed cache, but the wrong PHP module "memcache" is installed. \\OC\\Memcache\\Memcached only supports "memcached" and not "memcache". See the <a target="_blank" href="https://code.google.com/p/memcached/wiki/PHPClientComparison">memcached wiki about both modules</a>.',
type: OC.SetupChecks.MESSAGE_TYPE_WARNING
}]);
done();
@@ -245,7 +245,7 @@ describe('OC.SetupChecks tests', function() {
async.done(function( data, s, x ){
expect(data).toEqual([{
- msg: '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 href="https://docs.owncloud.org/foo/bar.html">documentation</a>.',
+ msg: '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" href="https://docs.owncloud.org/foo/bar.html">documentation</a>.',
type: OC.SetupChecks.MESSAGE_TYPE_WARNING
}]);
done();
@@ -295,7 +295,7 @@ describe('OC.SetupChecks tests', function() {
async.done(function( data, s, x ){
expect(data).toEqual([{
- msg: 'Your PHP version (5.4.0) is no longer <a href="https://secure.php.net/supported-versions.php">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP.',
+ msg: 'Your PHP version (5.4.0) is no longer <a target="_blank" href="https://secure.php.net/supported-versions.php">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP.',
type: OC.SetupChecks.MESSAGE_TYPE_INFO
}]);
done();
diff --git a/core/l10n/ca.js b/core/l10n/ca.js
index 90b5c697de5..6af8618f1ec 100644
--- a/core/l10n/ca.js
+++ b/core/l10n/ca.js
@@ -102,9 +102,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament.",
"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." : "Aquest servidor no té connexió a internet. Això significa que algunes de les característiques com el muntatge d'emmagatzemament extern, les notificacions quant a actualitzacions o la instal·lació d'aplicacions de tercers no funcionarà. L'accés remot a fitxers i l'enviament de correus electrònics podria tampoc no funcionar. Us suggerim que habiliteu la connexió a internet per aquest servidor si voleu tenir totes les característiques.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La carpeta de dades i els vostres fitxers probablement són accessibles des d'Internet. El fitxer .htaccess no funciona. Us recomanem que configureu el servidor web de tal manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de l'arrel de documents del servidor web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "No hi ha configurada cap memòria cau. Per millorar el rendiment configureu una memòria cau si està disponible. Podeu trobar més informació a la <a href=\"{docLink}\">documentació</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP no pot llegir /dev/urandom, cosa poc recomanable per raons de seguretat. Podeu trobar més informació a la <a href=\"{docLink}\">documentació</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La versió de PHP ({version}) ja no està <a href=\"{phpLink}\">mantinguda per PHP</a>. Us recomanem que actualitzeu la versió per gaudir de les millores de rendiment i seguretat proporcionades per PHP.",
"Error occurred while checking server setup" : "Hi ha hagut un error en comprovar la configuració del servidor",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Esteu accedint aquesta web a través de HTTP. Us recomanem que configureu el servidor per requerir HTTPS tal i com es descriu als <a href=\"{docUrl}\">consells de seguretat</a>",
"Shared" : "Compartit",
diff --git a/core/l10n/ca.json b/core/l10n/ca.json
index eaa7fe37e82..e2fb2d41a1f 100644
--- a/core/l10n/ca.json
+++ b/core/l10n/ca.json
@@ -100,9 +100,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament.",
"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." : "Aquest servidor no té connexió a internet. Això significa que algunes de les característiques com el muntatge d'emmagatzemament extern, les notificacions quant a actualitzacions o la instal·lació d'aplicacions de tercers no funcionarà. L'accés remot a fitxers i l'enviament de correus electrònics podria tampoc no funcionar. Us suggerim que habiliteu la connexió a internet per aquest servidor si voleu tenir totes les característiques.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La carpeta de dades i els vostres fitxers probablement són accessibles des d'Internet. El fitxer .htaccess no funciona. Us recomanem que configureu el servidor web de tal manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de l'arrel de documents del servidor web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "No hi ha configurada cap memòria cau. Per millorar el rendiment configureu una memòria cau si està disponible. Podeu trobar més informació a la <a href=\"{docLink}\">documentació</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP no pot llegir /dev/urandom, cosa poc recomanable per raons de seguretat. Podeu trobar més informació a la <a href=\"{docLink}\">documentació</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La versió de PHP ({version}) ja no està <a href=\"{phpLink}\">mantinguda per PHP</a>. Us recomanem que actualitzeu la versió per gaudir de les millores de rendiment i seguretat proporcionades per PHP.",
"Error occurred while checking server setup" : "Hi ha hagut un error en comprovar la configuració del servidor",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Esteu accedint aquesta web a través de HTTP. Us recomanem que configureu el servidor per requerir HTTPS tal i com es descriu als <a href=\"{docUrl}\">consells de seguretat</a>",
"Shared" : "Compartit",
diff --git a/core/l10n/cs_CZ.js b/core/l10n/cs_CZ.js
index 94fe0489390..b8998470e8b 100644
--- a/core/l10n/cs_CZ.js
+++ b/core/l10n/cs_CZ.js
@@ -114,12 +114,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server ještě není správně nastaven pro umožnění synchronizace souborů, protože rozhraní WebDAV je pravděpodobně rozbité.",
"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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z Internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nebyla nakonfigurována paměťová cache. Pro zlepšení výkonu a dostupnosti ji prosím nakonfigurujte. Další informace lze nalézt v naší <a href=\"{docLink}\">dokumentaci</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP nemá práva pro čtení v /dev/urandom, to je ale z bezpečnostních důvodů velmi doporučováno. Více informací lze nalézt v <a href=\"{docLink}\">dokumentaci</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Vaše verze PHP ({version}) již není <a href=\"{phpLink}\">podporována</a>. Doporučujeme aktualizovat na poslední verzi PHP pro využití vylepšení výkonu a bezpečnosti.",
- "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 href=\"{docLink}\">documentation</a>." : "Konfigurace hlaviček zpětné proxy není správná nebo přistupujete na ownCloud přes důvěryhodnou proxy. Pokud přistupujete na ownCloud přes nedůvěryhodnou proxy je toto považováno za bezpečnostní problém který může útočníkovi umožnit záměnu IP adresy viděné ownCloudem. Více informací lze nalézt v naší <a href=\"{docLink}\">dokumentaci</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached je nakonfigurován jako distribuovaná cache, ale je nainstalován nesprávný PHP modul \"memcache\". \\OC\\Memcache\\Memcached podporuje pouze \"memcached\" a ne \"memcache\". Projděte si <a href=\"{wikiLink}\">memcached wiki popisující oba moduly</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Některé soubory neprošly kontrolou integrity. Více informací o tom jak tento problém vyřešit, lze nalézt v naší <a href=\"{docLink}\">dokumentaci</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Seznam neplatných souborů…</a> / <a href=\"{rescanEndpoint}\">Znovu ověřit…</a>)",
"Error occurred while checking server setup" : "Při ověřování nastavení serveru došlo k chybě",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP hlavička \"{header}\" není nakonfigurována ve shodě s \"{expected}\". To značí možné ohrožení bezpečnosti a soukromí a je doporučeno toto nastavení upravit.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimum \"{seconds}\" sekund. Pro vylepšení bezpečnosti doporučujeme povolit HSTS dle popisu v našich <a href=\"{docUrl}\">bezpečnostních tipech</a>.",
@@ -266,6 +260,7 @@ OC.L10N.register(
"Please try again or contact your administrator." : "Prosím zkuste to znovu nebo kontaktujte vašeho správce.",
"Log in" : "Přihlásit",
"Wrong password. Reset it?" : "Nesprávné heslo. Resetovat?",
+ "Wrong password." : "Chybné heslo.",
"Stay logged in" : "Neodhlašovat",
"Alternative Logins" : "Alternativní přihlášení",
"This ownCloud instance is currently in single user mode." : "Tato instalace ownCloudu je momentálně v jednouživatelském módu.",
diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json
index 08c93b63888..112eee4e841 100644
--- a/core/l10n/cs_CZ.json
+++ b/core/l10n/cs_CZ.json
@@ -112,12 +112,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server ještě není správně nastaven pro umožnění synchronizace souborů, protože rozhraní WebDAV je pravděpodobně rozbité.",
"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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z Internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nebyla nakonfigurována paměťová cache. Pro zlepšení výkonu a dostupnosti ji prosím nakonfigurujte. Další informace lze nalézt v naší <a href=\"{docLink}\">dokumentaci</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP nemá práva pro čtení v /dev/urandom, to je ale z bezpečnostních důvodů velmi doporučováno. Více informací lze nalézt v <a href=\"{docLink}\">dokumentaci</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Vaše verze PHP ({version}) již není <a href=\"{phpLink}\">podporována</a>. Doporučujeme aktualizovat na poslední verzi PHP pro využití vylepšení výkonu a bezpečnosti.",
- "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 href=\"{docLink}\">documentation</a>." : "Konfigurace hlaviček zpětné proxy není správná nebo přistupujete na ownCloud přes důvěryhodnou proxy. Pokud přistupujete na ownCloud přes nedůvěryhodnou proxy je toto považováno za bezpečnostní problém který může útočníkovi umožnit záměnu IP adresy viděné ownCloudem. Více informací lze nalézt v naší <a href=\"{docLink}\">dokumentaci</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached je nakonfigurován jako distribuovaná cache, ale je nainstalován nesprávný PHP modul \"memcache\". \\OC\\Memcache\\Memcached podporuje pouze \"memcached\" a ne \"memcache\". Projděte si <a href=\"{wikiLink}\">memcached wiki popisující oba moduly</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Některé soubory neprošly kontrolou integrity. Více informací o tom jak tento problém vyřešit, lze nalézt v naší <a href=\"{docLink}\">dokumentaci</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Seznam neplatných souborů…</a> / <a href=\"{rescanEndpoint}\">Znovu ověřit…</a>)",
"Error occurred while checking server setup" : "Při ověřování nastavení serveru došlo k chybě",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP hlavička \"{header}\" není nakonfigurována ve shodě s \"{expected}\". To značí možné ohrožení bezpečnosti a soukromí a je doporučeno toto nastavení upravit.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimum \"{seconds}\" sekund. Pro vylepšení bezpečnosti doporučujeme povolit HSTS dle popisu v našich <a href=\"{docUrl}\">bezpečnostních tipech</a>.",
@@ -264,6 +258,7 @@
"Please try again or contact your administrator." : "Prosím zkuste to znovu nebo kontaktujte vašeho správce.",
"Log in" : "Přihlásit",
"Wrong password. Reset it?" : "Nesprávné heslo. Resetovat?",
+ "Wrong password." : "Chybné heslo.",
"Stay logged in" : "Neodhlašovat",
"Alternative Logins" : "Alternativní přihlášení",
"This ownCloud instance is currently in single user mode." : "Tato instalace ownCloudu je momentálně v jednouživatelském módu.",
diff --git a/core/l10n/da.js b/core/l10n/da.js
index 21dd4627814..870a287db4c 100644
--- a/core/l10n/da.js
+++ b/core/l10n/da.js
@@ -111,10 +111,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Din webserver er endnu ikke sat korrekt op til at tillade filsynkronisering, fordi WebDAV-grænsefladen ser ud til at være i stykker.",
"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 ownCloud-server har ikke en fungerende forbindelse til internettet. Det betyder, at visse funktioner som montering af eksterne drev, oplysninger om opdatering eller installation af applikationer fra tredjepart ikke fungerer. Det vil sandsynligvis heller ikke være muligt at tilgå filer fra eksterne drev eller afsendelse af e-mail med notifikationer virker sandsynligvis heller ikke. Vi opfordrer til at etablere forbindelse til internettet for denne server, såfremt du ønsker samtlige funktioner.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. Filen .htaccess fungerer ikke. Vi anbefaler på det kraftigste, at du konfigurerer din webserver således at datamappen ikke længere er tilgængelig, eller at du flytter datamappen uden for webserverens dokumentrod. ",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Der er ikke konfigureret et hukommelsesmellemlager. For at forbedre din ydelse, skal du konfigurere et mellemlager, hvis den er tilgængelig. Du finder mere information i din <a href=\"{docLink}\">dokumentation</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom kan ikke læses af PHP, hvilket stærkt frarådes af sikkerhedsmæssige årsager. Der fås mere information i vores <a href=\"{docLink}\">dokumentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Din version af PHP ({version}) bliver ikke længere <a href=\"{phpLink}\">understøttet af PHP</a>. Vi opfordrer dig til at opgradere din PHP-version, for at opnå fordelene i ydelse og sikkerhed gennem opdateringerne som fås fra PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "Den omvendte konnfiguration af proxyen er ikke korrekt, eller også tilgår du ownCloud fra en proxy som der er tillid til. Hvis ikke tilgår ownCloud fra en proxy som der er tillid til, så er der er et sikkerhedsproblem, hvilket kan tillade at en angriber kan forfalske deres IP-adresse som synlig for ownCloud. Mere information fås i vores <a href=\"{docLink}\">dokumentation</a>.",
"Error occurred while checking server setup" : "Der opstod fejl under tjek af serveropsætningen",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-hovedet \"{header}\" er ikke konfigureret til at være lig med \"{expected}\". Dette er en potentiel sikkerhedsrisiko, og vi anbefaler at du justerer denne indstilling.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP-hovedet \"Strict-Transport-Security\" er ikke konfigureret til mindst \"{seconds}\" sekunder. For udvidet sikkerhed anbefaler vi at aktivere HSTS, som foreskrevet i vores <a href=\"{docUrl}\">sikkerhedstips</a>.",
diff --git a/core/l10n/da.json b/core/l10n/da.json
index 84cd2e09ed7..2da2042bacd 100644
--- a/core/l10n/da.json
+++ b/core/l10n/da.json
@@ -109,10 +109,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Din webserver er endnu ikke sat korrekt op til at tillade filsynkronisering, fordi WebDAV-grænsefladen ser ud til at være i stykker.",
"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 ownCloud-server har ikke en fungerende forbindelse til internettet. Det betyder, at visse funktioner som montering af eksterne drev, oplysninger om opdatering eller installation af applikationer fra tredjepart ikke fungerer. Det vil sandsynligvis heller ikke være muligt at tilgå filer fra eksterne drev eller afsendelse af e-mail med notifikationer virker sandsynligvis heller ikke. Vi opfordrer til at etablere forbindelse til internettet for denne server, såfremt du ønsker samtlige funktioner.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. Filen .htaccess fungerer ikke. Vi anbefaler på det kraftigste, at du konfigurerer din webserver således at datamappen ikke længere er tilgængelig, eller at du flytter datamappen uden for webserverens dokumentrod. ",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Der er ikke konfigureret et hukommelsesmellemlager. For at forbedre din ydelse, skal du konfigurere et mellemlager, hvis den er tilgængelig. Du finder mere information i din <a href=\"{docLink}\">dokumentation</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom kan ikke læses af PHP, hvilket stærkt frarådes af sikkerhedsmæssige årsager. Der fås mere information i vores <a href=\"{docLink}\">dokumentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Din version af PHP ({version}) bliver ikke længere <a href=\"{phpLink}\">understøttet af PHP</a>. Vi opfordrer dig til at opgradere din PHP-version, for at opnå fordelene i ydelse og sikkerhed gennem opdateringerne som fås fra PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "Den omvendte konnfiguration af proxyen er ikke korrekt, eller også tilgår du ownCloud fra en proxy som der er tillid til. Hvis ikke tilgår ownCloud fra en proxy som der er tillid til, så er der er et sikkerhedsproblem, hvilket kan tillade at en angriber kan forfalske deres IP-adresse som synlig for ownCloud. Mere information fås i vores <a href=\"{docLink}\">dokumentation</a>.",
"Error occurred while checking server setup" : "Der opstod fejl under tjek af serveropsætningen",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-hovedet \"{header}\" er ikke konfigureret til at være lig med \"{expected}\". Dette er en potentiel sikkerhedsrisiko, og vi anbefaler at du justerer denne indstilling.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP-hovedet \"Strict-Transport-Security\" er ikke konfigureret til mindst \"{seconds}\" sekunder. For udvidet sikkerhed anbefaler vi at aktivere HSTS, som foreskrevet i vores <a href=\"{docUrl}\">sikkerhedstips</a>.",
diff --git a/core/l10n/de.js b/core/l10n/de.js
index 79527a46e0b..d0dfc56bb2f 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -109,9 +109,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Dein Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.",
"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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Deinen Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Du es aus dem Document-Root-Verzeichnis des Webservers herausverschiebst.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ist für PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest Du in unserer <a href=\"{docLink}\">Dokumentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Deine PHP Version ({version}) wird nicht länger <a href=\"{phpLink}\">unterstützt</a>. Wir empfehlen ein Upgrade deiner PHP Version, um die volle Performance und Sicherheit zu gewährleisten.",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> erläutert ist.",
@@ -172,6 +169,7 @@ OC.L10N.register(
"Hello {name}" : "Hallo {name}",
"_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"],
"{version} is available. Get more information on how to update." : "{version} ist verfügbar. Hole weitere Informationen zu Aktualisierungen ein.",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Update läuft gerade. Das Verlassen dieser Seite könnte den Update Prozess in einigen Umgebungen unterbrechen.",
"Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}. Dies könnte eine Weile dauern.",
"An error occurred." : "Es ist ein Fehler aufgetreten.",
"Please reload the page." : "Bitte lade die Seite neu.",
@@ -181,6 +179,7 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden",
"Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist",
"Couldn't send reset email. Please make sure your username is correct." : "E-Mail zum Zurücksetzen kann nicht versendet werden. Bitte stelle sicher, dass Dein Benutzername korrekt ist.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Es konnte keine E-Mail verschickt werden um das Passwort zurückzusetzten, da keine E-Mail im Benutzerkonto hinterlegt ist. Bitte kontaktiere den Administrator.",
"%s password reset" : "%s-Passwort zurücksetzen",
"Use the following link to reset your password: {link}" : "Benutze den folgenden Link, um Dein Passwort zurückzusetzen: {link}",
"New password" : "Neues Passwort",
@@ -255,6 +254,7 @@ OC.L10N.register(
"Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere Deinen Administrator.",
"Log in" : "Anmelden",
"Wrong password. Reset it?" : "Falsches Passwort. Soll es zurückgesetzt werden?",
+ "Wrong password." : "Falsches Passwort.",
"Stay logged in" : "Angemeldet bleiben",
"Alternative Logins" : "Alternative Logins",
"This ownCloud instance is currently in single user mode." : "Diese ownClound-Instanz befindet sich derzeit im Einzelbenutzermodus.",
diff --git a/core/l10n/de.json b/core/l10n/de.json
index b567d209a49..4be7fe80cc2 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -107,9 +107,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Dein Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.",
"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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Deinen Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Du es aus dem Document-Root-Verzeichnis des Webservers herausverschiebst.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ist für PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest Du in unserer <a href=\"{docLink}\">Dokumentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Deine PHP Version ({version}) wird nicht länger <a href=\"{phpLink}\">unterstützt</a>. Wir empfehlen ein Upgrade deiner PHP Version, um die volle Performance und Sicherheit zu gewährleisten.",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> erläutert ist.",
@@ -170,6 +167,7 @@
"Hello {name}" : "Hallo {name}",
"_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"],
"{version} is available. Get more information on how to update." : "{version} ist verfügbar. Hole weitere Informationen zu Aktualisierungen ein.",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Update läuft gerade. Das Verlassen dieser Seite könnte den Update Prozess in einigen Umgebungen unterbrechen.",
"Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}. Dies könnte eine Weile dauern.",
"An error occurred." : "Es ist ein Fehler aufgetreten.",
"Please reload the page." : "Bitte lade die Seite neu.",
@@ -179,6 +177,7 @@
"Couldn't reset password because the token is invalid" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden",
"Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist",
"Couldn't send reset email. Please make sure your username is correct." : "E-Mail zum Zurücksetzen kann nicht versendet werden. Bitte stelle sicher, dass Dein Benutzername korrekt ist.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Es konnte keine E-Mail verschickt werden um das Passwort zurückzusetzten, da keine E-Mail im Benutzerkonto hinterlegt ist. Bitte kontaktiere den Administrator.",
"%s password reset" : "%s-Passwort zurücksetzen",
"Use the following link to reset your password: {link}" : "Benutze den folgenden Link, um Dein Passwort zurückzusetzen: {link}",
"New password" : "Neues Passwort",
@@ -253,6 +252,7 @@
"Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere Deinen Administrator.",
"Log in" : "Anmelden",
"Wrong password. Reset it?" : "Falsches Passwort. Soll es zurückgesetzt werden?",
+ "Wrong password." : "Falsches Passwort.",
"Stay logged in" : "Angemeldet bleiben",
"Alternative Logins" : "Alternative Logins",
"This ownCloud instance is currently in single user mode." : "Diese ownClound-Instanz befindet sich derzeit im Einzelbenutzermodus.",
diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js
index 404a2b3dd03..fac380bf61d 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -107,9 +107,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.",
"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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ihre PHP Version ({version}) wird nicht länger <a href=\"{phpLink}\">unterstützt</a>. Wir empfehlen ein Upgrade ihrer PHP Version, um die volle Performance und Sicherheit zu gewährleisten.",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> erläutert ist.",
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index ab1839fa890..c9024cc3bc2 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -105,9 +105,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.",
"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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ihre PHP Version ({version}) wird nicht länger <a href=\"{phpLink}\">unterstützt</a>. Wir empfehlen ein Upgrade ihrer PHP Version, um die volle Performance und Sicherheit zu gewährleisten.",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> erläutert ist.",
diff --git a/core/l10n/el.js b/core/l10n/el.js
index e075b123a57..20008993e5f 100644
--- a/core/l10n/el.js
+++ b/core/l10n/el.js
@@ -111,11 +111,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν είναι κατεστραμμένη.",
"This server has no working Internet connection. 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ων δεν θα είναι διαθέσιμες. Η πρόσβαση απομακρυσμένων αρχείων και η αποστολή ειδοποιήσεων μέσω ηλεκτρονικού ταχυδρομείου μπορεί επίσης να μην είναι διαθέσιμες. Προτείνουμε να ενεργοποιήσετε την πρόσβαση στο διαδίκτυο για αυτόν το διακομιστή εάν θέλετε να χρησιμοποιήσετε όλες τις υπηρεσίες.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανόν διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess δεν λειτουργεί. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων εκτός του καταλόγου της ρίζας εγγράφων-document root του διακομιστή.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Δεν έχει οριστεί προσωρινή μνήμη. Για να βελτιώσετε την απόδοσή σας παρακαλούμε να διαμορφώσετε ένα χώρο προσωρινής αποθήκευσης εάν υπάρχει διαθέσιμος. Περαιτέρω πληροφορίες μπορείτε να βρείτε στην <a href=\"{docLink}\">τεκμηρίωση</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Το /dev/urandom δεν είναι αναγνώσιμο από την PHP, το οποίο δεν συνίσταται για λόγους ασφαλείας. Περισσότερες πληροφορίες υπάρχουν στην <a href=\"{docLink}\">τεκμηρίωσή</a> μας.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Η έκδοσή σας της PHP ({version}) <a href=\"{phpLink}\">δεν υποστηρίζεται πια από την PHP</a>. Σας παροτρύνουμε να αναβαθμίσετε την PHP για να επωφεληθείτε από την απόδοση και την ασφάλεια που παρέχει η PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "Η διαμόρφωση των reverse proxy headers δεν είναι σωστή ή συνδέεστε στο ownCloud από ένα έμπιστο διαμεσολαβητή. Αν δεν συνδέεστε στο ownCloud από έμπιστο διαμεσολαβητή, αυτό είναι ένα θέμα ασφαλείας και μπορεί να επιτρέψει σε έναν επιτιθέμενο να μασκαρέψει τη διεύθυνση IP του ως ορατή στο ownCloud. Περισσότερες πληροφορίες υπάρχουν στην <a href=\"{docLink}\">τεκμηρίωση</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Το Memcached είναι ρυθμισμένο ως κατανεμημένη cache, αλλά είναι εγκατεστημένη η λάθος μονάδα \"memcache\" της PHP. Το \\OC\\Memcache\\Memcached υποστηρίζει μόνο τη \"memcached\" και όχι τη \"memcache\". Δείτε τη <a href=\"{wikiLink}\">memcached wiki και για τις δύο μονάδες</a>.",
"Error occurred while checking server setup" : "Παρουσιάστηκε σφάλμα κατά τον έλεγχο της εγκατάστασης με το διακομιστή",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "H \"{header}\" κεφαλίδα HTTP δεν έχει ρυθμιστεί ώστε να ισούται με \"{expected}\". Αυτό αποτελεί ενδεχόμενο κίνδυνο ασφάλειας ή ιδιωτικότητας και συστήνουμε τη διόρθωση αυτής της ρύθμισης.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Η «Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις <a href=\"{docUrl}\">προτάσεις ασφαλείας</a> μας.",
diff --git a/core/l10n/el.json b/core/l10n/el.json
index 7c203945b5e..2ab6bc6eab8 100644
--- a/core/l10n/el.json
+++ b/core/l10n/el.json
@@ -109,11 +109,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν είναι κατεστραμμένη.",
"This server has no working Internet connection. 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ων δεν θα είναι διαθέσιμες. Η πρόσβαση απομακρυσμένων αρχείων και η αποστολή ειδοποιήσεων μέσω ηλεκτρονικού ταχυδρομείου μπορεί επίσης να μην είναι διαθέσιμες. Προτείνουμε να ενεργοποιήσετε την πρόσβαση στο διαδίκτυο για αυτόν το διακομιστή εάν θέλετε να χρησιμοποιήσετε όλες τις υπηρεσίες.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανόν διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess δεν λειτουργεί. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων εκτός του καταλόγου της ρίζας εγγράφων-document root του διακομιστή.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Δεν έχει οριστεί προσωρινή μνήμη. Για να βελτιώσετε την απόδοσή σας παρακαλούμε να διαμορφώσετε ένα χώρο προσωρινής αποθήκευσης εάν υπάρχει διαθέσιμος. Περαιτέρω πληροφορίες μπορείτε να βρείτε στην <a href=\"{docLink}\">τεκμηρίωση</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Το /dev/urandom δεν είναι αναγνώσιμο από την PHP, το οποίο δεν συνίσταται για λόγους ασφαλείας. Περισσότερες πληροφορίες υπάρχουν στην <a href=\"{docLink}\">τεκμηρίωσή</a> μας.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Η έκδοσή σας της PHP ({version}) <a href=\"{phpLink}\">δεν υποστηρίζεται πια από την PHP</a>. Σας παροτρύνουμε να αναβαθμίσετε την PHP για να επωφεληθείτε από την απόδοση και την ασφάλεια που παρέχει η PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "Η διαμόρφωση των reverse proxy headers δεν είναι σωστή ή συνδέεστε στο ownCloud από ένα έμπιστο διαμεσολαβητή. Αν δεν συνδέεστε στο ownCloud από έμπιστο διαμεσολαβητή, αυτό είναι ένα θέμα ασφαλείας και μπορεί να επιτρέψει σε έναν επιτιθέμενο να μασκαρέψει τη διεύθυνση IP του ως ορατή στο ownCloud. Περισσότερες πληροφορίες υπάρχουν στην <a href=\"{docLink}\">τεκμηρίωση</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Το Memcached είναι ρυθμισμένο ως κατανεμημένη cache, αλλά είναι εγκατεστημένη η λάθος μονάδα \"memcache\" της PHP. Το \\OC\\Memcache\\Memcached υποστηρίζει μόνο τη \"memcached\" και όχι τη \"memcache\". Δείτε τη <a href=\"{wikiLink}\">memcached wiki και για τις δύο μονάδες</a>.",
"Error occurred while checking server setup" : "Παρουσιάστηκε σφάλμα κατά τον έλεγχο της εγκατάστασης με το διακομιστή",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "H \"{header}\" κεφαλίδα HTTP δεν έχει ρυθμιστεί ώστε να ισούται με \"{expected}\". Αυτό αποτελεί ενδεχόμενο κίνδυνο ασφάλειας ή ιδιωτικότητας και συστήνουμε τη διόρθωση αυτής της ρύθμισης.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Η «Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις <a href=\"{docUrl}\">προτάσεις ασφαλείας</a> μας.",
diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js
index d51892019d0..82e17dc59a1 100644
--- a/core/l10n/en_GB.js
+++ b/core/l10n/en_GB.js
@@ -90,8 +90,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Your web server is not yet set up properly to allow file synchronisation because the WebDAV interface seems to be broken.",
"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." : "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 enabling the Internet connection for this server.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>.",
"Error occurred while checking server setup" : "Error occurred whilst checking server setup",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting.",
"Shared" : "Shared",
diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json
index 9042f4d0c00..a9129acaa83 100644
--- a/core/l10n/en_GB.json
+++ b/core/l10n/en_GB.json
@@ -88,8 +88,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Your web server is not yet set up properly to allow file synchronisation because the WebDAV interface seems to be broken.",
"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." : "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 enabling the Internet connection for this server.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>.",
"Error occurred while checking server setup" : "Error occurred whilst checking server setup",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting.",
"Shared" : "Shared",
diff --git a/core/l10n/es.js b/core/l10n/es.js
index fd8df5f6c2f..8f5d4657938 100644
--- a/core/l10n/es.js
+++ b/core/l10n/es.js
@@ -8,13 +8,20 @@ OC.L10N.register(
"Maintenance mode is kept active" : "El modo mantenimiento aún está activo.",
"Updating database schema" : "Actualizando el esquema del base de datos",
"Updated database" : "Base de datos actualizada",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Comprobar si se puede actualizar el esquema de la base de datos (esto puede tardar bastante tiempo, dependiendo del tamaño de la base de datos)",
"Checked database schema update" : "Actualización del esquema de base de datos revisado",
+ "Checking updates of apps" : "Comprobar actualizaciones de apps",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Comprobar si se puede actualizar el esquema de la base de datos %s (esto puede tardar bastante tiempo, dependiendo del tamaño de la base de datos)",
"Checked database schema update for apps" : "Comprobada la actualización del esquema de la base de datos para aplicaciones",
"Updated \"%s\" to %s" : "Se ha actualizado \"%s\" a %s",
"Repair warning: " : "Advertencia de reparación:",
"Repair error: " : "Error que reparar:",
"Set log level to debug - current level: \"%s\"" : "Establecer nivel de registro para depurar - nivel actual: \"%s\"",
"Reset log level to \"%s\"" : "Restablecer nivel de registro a \"%s\"",
+ "Starting code integrity check" : "Comenzando comprobación de integridad de código",
+ "Finished code integrity check" : "Terminando comprobación de integridad de código",
+ "%s (3rdparty)" : "%s (tercer parte)",
+ "%s (incompatible)" : "%s (incompatible)",
"Following apps have been disabled: %s" : "Siguiendo aplicaciones ha sido deshabilitado: %s",
"Already up to date" : "Ya actualizado",
"File is too big" : "El archivo es demasiado grande",
@@ -107,11 +114,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.",
"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 funcionan. 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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Su directorio de datos y sus archivos probablemente sean accesibles desde Internet. El archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos ya no sea accesible o que mueva el directorio de datos fuera de la raíz de documentos del servidor web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "La memoria caché no ha sido configurada. Para aumentar su performance por favor configure memcache si está disponible. Más información puede ser encontrada en nuestra <a href=\"{docLink}\">documentación</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom no es legible por PHP el mismo es altamente desalentado por razones de seguridad. Más información puede ser encontrada en nuestra <a href=\"{docLink}\">documentación</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Su versión PHP ({version}) ya no es <a href=\"{phpLink}\">respaldada por PHP</a>. Recomendamos actualizar su versión de PHP para aprovechar las actualizaciones de rendimiento y seguridad proporcionadas por PHP.",
- "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 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 href=\"{docLink}\">documentación</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "memcached es un sistema de cache distribuido. pero ha sido instalado por error el modulo PHP memcache.\nConsulte <a href=\"{wikiLink}\">memcached wiki acerca de ambos modulos</a>",
"Error occurred while checking server setup" : "Ha ocurrido un error al revisar la configuración del servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "La \"{header}\" cabecera HTTP no está configurado para ser igual a \"{expected}\". Esto puede suponer un riesgo para la seguridad o la privacidad, por lo que se recomienda ajustar esta opción.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "La cabecera HTTP \"Strict-Transport-Security\" no está configurada en al menos \"{segundos}\" segundos. Para una mejor seguridad recomendamos que habilite HSTS como es descripta en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
@@ -256,6 +258,7 @@ OC.L10N.register(
"Please try again or contact your administrator." : "Por favor reintente nuevamente o contáctese con su administrador.",
"Log in" : "Ingresar",
"Wrong password. Reset it?" : "Contraseña incorrecta. ¿Restablecerla?",
+ "Wrong password." : "Contraseña incorrecta.",
"Stay logged in" : "Permanecer autenticado",
"Alternative Logins" : "Inicios de sesión alternativos",
"This ownCloud instance is currently in single user mode." : "Esta instalación de ownCloud se encuentra en modo de usuario único.",
diff --git a/core/l10n/es.json b/core/l10n/es.json
index a3ad1e2a9a4..fc88108dc30 100644
--- a/core/l10n/es.json
+++ b/core/l10n/es.json
@@ -6,13 +6,20 @@
"Maintenance mode is kept active" : "El modo mantenimiento aún está activo.",
"Updating database schema" : "Actualizando el esquema del base de datos",
"Updated database" : "Base de datos actualizada",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Comprobar si se puede actualizar el esquema de la base de datos (esto puede tardar bastante tiempo, dependiendo del tamaño de la base de datos)",
"Checked database schema update" : "Actualización del esquema de base de datos revisado",
+ "Checking updates of apps" : "Comprobar actualizaciones de apps",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Comprobar si se puede actualizar el esquema de la base de datos %s (esto puede tardar bastante tiempo, dependiendo del tamaño de la base de datos)",
"Checked database schema update for apps" : "Comprobada la actualización del esquema de la base de datos para aplicaciones",
"Updated \"%s\" to %s" : "Se ha actualizado \"%s\" a %s",
"Repair warning: " : "Advertencia de reparación:",
"Repair error: " : "Error que reparar:",
"Set log level to debug - current level: \"%s\"" : "Establecer nivel de registro para depurar - nivel actual: \"%s\"",
"Reset log level to \"%s\"" : "Restablecer nivel de registro a \"%s\"",
+ "Starting code integrity check" : "Comenzando comprobación de integridad de código",
+ "Finished code integrity check" : "Terminando comprobación de integridad de código",
+ "%s (3rdparty)" : "%s (tercer parte)",
+ "%s (incompatible)" : "%s (incompatible)",
"Following apps have been disabled: %s" : "Siguiendo aplicaciones ha sido deshabilitado: %s",
"Already up to date" : "Ya actualizado",
"File is too big" : "El archivo es demasiado grande",
@@ -105,11 +112,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.",
"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 funcionan. 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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Su directorio de datos y sus archivos probablemente sean accesibles desde Internet. El archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos ya no sea accesible o que mueva el directorio de datos fuera de la raíz de documentos del servidor web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "La memoria caché no ha sido configurada. Para aumentar su performance por favor configure memcache si está disponible. Más información puede ser encontrada en nuestra <a href=\"{docLink}\">documentación</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom no es legible por PHP el mismo es altamente desalentado por razones de seguridad. Más información puede ser encontrada en nuestra <a href=\"{docLink}\">documentación</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Su versión PHP ({version}) ya no es <a href=\"{phpLink}\">respaldada por PHP</a>. Recomendamos actualizar su versión de PHP para aprovechar las actualizaciones de rendimiento y seguridad proporcionadas por PHP.",
- "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 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 href=\"{docLink}\">documentación</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "memcached es un sistema de cache distribuido. pero ha sido instalado por error el modulo PHP memcache.\nConsulte <a href=\"{wikiLink}\">memcached wiki acerca de ambos modulos</a>",
"Error occurred while checking server setup" : "Ha ocurrido un error al revisar la configuración del servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "La \"{header}\" cabecera HTTP no está configurado para ser igual a \"{expected}\". Esto puede suponer un riesgo para la seguridad o la privacidad, por lo que se recomienda ajustar esta opción.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "La cabecera HTTP \"Strict-Transport-Security\" no está configurada en al menos \"{segundos}\" segundos. Para una mejor seguridad recomendamos que habilite HSTS como es descripta en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
@@ -254,6 +256,7 @@
"Please try again or contact your administrator." : "Por favor reintente nuevamente o contáctese con su administrador.",
"Log in" : "Ingresar",
"Wrong password. Reset it?" : "Contraseña incorrecta. ¿Restablecerla?",
+ "Wrong password." : "Contraseña incorrecta.",
"Stay logged in" : "Permanecer autenticado",
"Alternative Logins" : "Inicios de sesión alternativos",
"This ownCloud instance is currently in single user mode." : "Esta instalación de ownCloud se encuentra en modo de usuario único.",
diff --git a/core/l10n/et_EE.js b/core/l10n/et_EE.js
index 7cb375149ac..b3dc78ba16d 100644
--- a/core/l10n/et_EE.js
+++ b/core/l10n/et_EE.js
@@ -5,12 +5,15 @@ OC.L10N.register(
"Preparing update" : "Uuendamise ettevalmistamine",
"Turned on maintenance mode" : "Haldusrežiimis sisse lülitatud",
"Turned off maintenance mode" : "Haldusrežiimis välja lülitatud",
+ "Maintenance mode is kept active" : "Hooldusrežiim on aktiivne",
"Updated database" : "Uuendatud andmebaas",
"Checked database schema update" : "Andmebaasi skeemi uuendus kontrollitud",
"Checked database schema update for apps" : "Andmebaasi skeemi uuendus rakendustele on kontrollitud",
"Updated \"%s\" to %s" : "Uuendatud \"%s\" -> %s",
"Repair warning: " : "Paranda hoiatus:",
"Repair error: " : "Paranda viga:",
+ "%s (3rdparty)" : "%s (3nda osapoole arendaja)",
+ "%s (incompatible)" : "%s (pole ühilduv)",
"Following apps have been disabled: %s" : "Järgnevad rakendused on välja lülitatud: %s",
"Already up to date" : "On juba ajakohane",
"File is too big" : "Fail on liiga suur",
@@ -18,6 +21,7 @@ OC.L10N.register(
"No image or file provided" : "Ühtegi pilti või faili pole pakutud",
"Unknown filetype" : "Tundmatu failitüüp",
"Invalid image" : "Vigane pilt",
+ "An error occurred. Please contact your admin." : "Tekkis tõrge. Palun võta ühendust administraatoriga.",
"No temporary profile picture available, try again" : "Ühtegi ajutist profiili pilti pole saadaval, proovi uuesti",
"No crop data provided" : "Lõikeandmeid ei leitud",
"Crop is not square" : "Lõikamine pole ruudukujuline",
@@ -138,6 +142,7 @@ OC.L10N.register(
"Share with users or groups …" : "Jaga kasutajate või gruppidega ...",
"Share with users, groups or remote users …" : "Jaga kasutajate, gruppide või eemal olevate kasutajatega ...",
"Warning" : "Hoiatus",
+ "Error while sending notification" : "Tõrge teavituse saatmisel",
"The object type is not specified." : "Objekti tüüp pole määratletud.",
"Enter new" : "Sisesta uus",
"Delete" : "Kustuta",
@@ -226,6 +231,9 @@ OC.L10N.register(
"An internal error occured." : "Tekkis sisemine tõrge.",
"Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma administraatoriga.",
"Log in" : "Logi sisse",
+ "Wrong password. Reset it?" : "Vale parool. Kas vajad parooli taastamist?",
+ "Wrong password." : "Vale parool.",
+ "Stay logged in" : "Püsi sisselogituna",
"Alternative Logins" : "Alternatiivsed sisselogimisviisid",
"This ownCloud instance is currently in single user mode." : "See ownCloud on momendil seadistatud ühe kasutaja jaoks.",
"This means only administrators can use the instance." : "See tähendab, et seda saavad kasutada ainult administraatorid.",
diff --git a/core/l10n/et_EE.json b/core/l10n/et_EE.json
index d10decffc5d..1c1ed60244b 100644
--- a/core/l10n/et_EE.json
+++ b/core/l10n/et_EE.json
@@ -3,12 +3,15 @@
"Preparing update" : "Uuendamise ettevalmistamine",
"Turned on maintenance mode" : "Haldusrežiimis sisse lülitatud",
"Turned off maintenance mode" : "Haldusrežiimis välja lülitatud",
+ "Maintenance mode is kept active" : "Hooldusrežiim on aktiivne",
"Updated database" : "Uuendatud andmebaas",
"Checked database schema update" : "Andmebaasi skeemi uuendus kontrollitud",
"Checked database schema update for apps" : "Andmebaasi skeemi uuendus rakendustele on kontrollitud",
"Updated \"%s\" to %s" : "Uuendatud \"%s\" -> %s",
"Repair warning: " : "Paranda hoiatus:",
"Repair error: " : "Paranda viga:",
+ "%s (3rdparty)" : "%s (3nda osapoole arendaja)",
+ "%s (incompatible)" : "%s (pole ühilduv)",
"Following apps have been disabled: %s" : "Järgnevad rakendused on välja lülitatud: %s",
"Already up to date" : "On juba ajakohane",
"File is too big" : "Fail on liiga suur",
@@ -16,6 +19,7 @@
"No image or file provided" : "Ühtegi pilti või faili pole pakutud",
"Unknown filetype" : "Tundmatu failitüüp",
"Invalid image" : "Vigane pilt",
+ "An error occurred. Please contact your admin." : "Tekkis tõrge. Palun võta ühendust administraatoriga.",
"No temporary profile picture available, try again" : "Ühtegi ajutist profiili pilti pole saadaval, proovi uuesti",
"No crop data provided" : "Lõikeandmeid ei leitud",
"Crop is not square" : "Lõikamine pole ruudukujuline",
@@ -136,6 +140,7 @@
"Share with users or groups …" : "Jaga kasutajate või gruppidega ...",
"Share with users, groups or remote users …" : "Jaga kasutajate, gruppide või eemal olevate kasutajatega ...",
"Warning" : "Hoiatus",
+ "Error while sending notification" : "Tõrge teavituse saatmisel",
"The object type is not specified." : "Objekti tüüp pole määratletud.",
"Enter new" : "Sisesta uus",
"Delete" : "Kustuta",
@@ -224,6 +229,9 @@
"An internal error occured." : "Tekkis sisemine tõrge.",
"Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma administraatoriga.",
"Log in" : "Logi sisse",
+ "Wrong password. Reset it?" : "Vale parool. Kas vajad parooli taastamist?",
+ "Wrong password." : "Vale parool.",
+ "Stay logged in" : "Püsi sisselogituna",
"Alternative Logins" : "Alternatiivsed sisselogimisviisid",
"This ownCloud instance is currently in single user mode." : "See ownCloud on momendil seadistatud ühe kasutaja jaoks.",
"This means only administrators can use the instance." : "See tähendab, et seda saavad kasutada ainult administraatorid.",
diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js
index f167292ec13..078682a7b75 100644
--- a/core/l10n/fi_FI.js
+++ b/core/l10n/fi_FI.js
@@ -114,12 +114,12 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "HTTP-palvelinta ei ole määritetty oikein tiedostojen synkronointia varten, koska WebDAV-liittymä vaikuttaa olevan rikki.",
"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 ownCloudin ominaisuuksia.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datahakemistosi ja tiedostosi ovat luultavasti käytettävissä suoraan internetistä. .htaccess-tiedosto ei toimi oikein. Suosittelemme määrittämään http-palvelimen asetukset siten, ettei datahakemisto ole suoraan käytettävissä internetistä, tai siirtämään datahakemiston http-palvelimen juurihakemiston ulkopuolelle.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Muistissa toimivaa cachea ei ole määritetty. Paranna suorituskykyä ottamalla memcache käyttöön. Lisätietoja on saatavilla <a href=\"{docLink}\">dokumentaatiosta</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ei ole luettavissa PHP:n toimesta. Turvallisuussyistä tämä ei ole suositeltava asetus. Lisätietoja on tarjolla <a href=\"{docLink}\">dokumentaatiossa</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Käytössäsi oleva PHP-versio ({version}) ei ole enää <a href=\"{phpLink}\">PHP:n tukema</a>. Päivitä PHP:n versio, jotta hyödyt suorituskykyyn ja tietoturvaan vaikuttavista päivityksistä.",
- "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 href=\"{docLink}\">documentation</a>." : "Käänteisen välityspalvelimen otsakkaiden asetukset ovat väärin, tai vaihtoehtoisesti käytät ownCloudia luotetun välityspalvelimen kautta. Jos et käytä ownCloudia luotetun välityspalvelimen kautta, kyseessä on tietoturvaongelma, joka mahdollistaa hyökkääjän väärentää ownCloudille näkyvän IP-osoitteen. Lisätietoja on saatavilla <a href=\"{docLink}\">dokumentaatiosta</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached on määritelty hajautetuksi välimuistiksi, mutta väärä PHP-moduuli \"memcache\" on asennettuna. \\OC\\Memcache\\Memcached tukee vain \"memcached\":ia, ei \"memcache\":a. Lisätietoja <a href=\"{wikiLink}\">memcachedin wikissä molemmista moduuleista</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Jotkin tiedostot eivät läpäisseet eheystarkistusta. Lisätietoja ongelman selvittämiseksi on saatavilla <a href=\"{docLink}\">dokumentaation kautta</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Luettelo virheellisistä tiedostoista…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Välimuistia ei ole määritetty. Paranna suorituskykyä ottamalla memcache käyttöön. Lisätietoja on saatavilla <a target=\"_blank\" href=\"{docLink}\">dokumentaatiossa</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom ei ole PHP:n luettavissa, eikä tätä missään tapauksessa suositella tietoturvasyistä. Lisätietoja on saatavilla <a target=\"_blank\" href=\"{docLink}\">dokumentaatiossa</a>.",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "PHP-versiosi ({version}) ei ole enää tuettu <a target=\"_blank\" href=\"{phpLink}\"> PHP:n toimesta</a>. Suosittelemme päivittämään PHP:n version, jotta hyödyt suorituskykyparannuksista sekä tietoturvakorjauksista.",
+ "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\" href=\"{docLink}\">documentation</a>." : "Käänteisen välityspalvelimen otsakemääritykset ovat väärin, tai olet yhteydessä ownCloudiin luotetun välityspalvelimen kautta. Jos et ole yhteydessä luotetun välityspalvelimen kautta, kyseessä on tietoturvaongelma, joka mahdollistaa hyökkääjän väärentävän ownCloudille näkyvän IP-osoitteen. Lisätietoja on saatavilla <a target=\"_blank\" href=\"{docLink}\">dokumentaatiossa</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached on määritetty hajautetuksi välimuistiksi, mutta väärä PHP-moduuli \"memcache\" on asennettu. \\OC\\Memcache\\Memcached tukee vain moduulia \"memcached\", ei moduulia \"memcache\". Lisätietoja <a target=\"_blank\" href=\"{wikiLink}\">memcachedin wikissä molemmista moduuleista</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Jotkin tiedostot eivät läpäisseet eheystarkistusta. Lisätietoja ongelman selvittämiseksi on saatavilla <a target=\"_blank\" href=\"{docLink}\">dokumentaatiossa</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Luettelo virheellisistä tiedostoista…</a> / <a href=\"{rescanEndpoint}\">Tarkista uudelleen…</a>)",
"Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-otsaketta \"{header}\" ei ole määritetty vastaamaan arvoa \"{expected}\". Kyseessä on mahdollinen tietoturvaan tai -suojaan liittyvä riski, joten suosittelemme muuttamaan asetuksen arvoa.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritetty vähintään \"{seconds}\" sekuntiin. Suosittelemme HSTS:n käyttöä paremman tietoturvan vuoksi, kuten <a href=\"{docUrl}\">tietoturvavinkeissä</a> neuvotaan.",
@@ -266,6 +266,7 @@ OC.L10N.register(
"Please try again or contact your administrator." : "Yritä uudestaan tai ota yhteys ylläpitäjään.",
"Log in" : "Kirjaudu sisään",
"Wrong password. Reset it?" : "Väärä salasana. Haluatko palauttaa salasanan?",
+ "Wrong password." : "Väärä salasana.",
"Stay logged in" : "Pysy sisäänkirjautuneena",
"Alternative Logins" : "Vaihtoehtoiset kirjautumiset",
"This ownCloud instance is currently in single user mode." : "Tämä ownCloud-asennus on parhaillaan single user -tilassa.",
diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json
index d98473c9f59..b890a36d8e7 100644
--- a/core/l10n/fi_FI.json
+++ b/core/l10n/fi_FI.json
@@ -112,12 +112,12 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "HTTP-palvelinta ei ole määritetty oikein tiedostojen synkronointia varten, koska WebDAV-liittymä vaikuttaa olevan rikki.",
"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 ownCloudin ominaisuuksia.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datahakemistosi ja tiedostosi ovat luultavasti käytettävissä suoraan internetistä. .htaccess-tiedosto ei toimi oikein. Suosittelemme määrittämään http-palvelimen asetukset siten, ettei datahakemisto ole suoraan käytettävissä internetistä, tai siirtämään datahakemiston http-palvelimen juurihakemiston ulkopuolelle.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Muistissa toimivaa cachea ei ole määritetty. Paranna suorituskykyä ottamalla memcache käyttöön. Lisätietoja on saatavilla <a href=\"{docLink}\">dokumentaatiosta</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ei ole luettavissa PHP:n toimesta. Turvallisuussyistä tämä ei ole suositeltava asetus. Lisätietoja on tarjolla <a href=\"{docLink}\">dokumentaatiossa</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Käytössäsi oleva PHP-versio ({version}) ei ole enää <a href=\"{phpLink}\">PHP:n tukema</a>. Päivitä PHP:n versio, jotta hyödyt suorituskykyyn ja tietoturvaan vaikuttavista päivityksistä.",
- "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 href=\"{docLink}\">documentation</a>." : "Käänteisen välityspalvelimen otsakkaiden asetukset ovat väärin, tai vaihtoehtoisesti käytät ownCloudia luotetun välityspalvelimen kautta. Jos et käytä ownCloudia luotetun välityspalvelimen kautta, kyseessä on tietoturvaongelma, joka mahdollistaa hyökkääjän väärentää ownCloudille näkyvän IP-osoitteen. Lisätietoja on saatavilla <a href=\"{docLink}\">dokumentaatiosta</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached on määritelty hajautetuksi välimuistiksi, mutta väärä PHP-moduuli \"memcache\" on asennettuna. \\OC\\Memcache\\Memcached tukee vain \"memcached\":ia, ei \"memcache\":a. Lisätietoja <a href=\"{wikiLink}\">memcachedin wikissä molemmista moduuleista</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Jotkin tiedostot eivät läpäisseet eheystarkistusta. Lisätietoja ongelman selvittämiseksi on saatavilla <a href=\"{docLink}\">dokumentaation kautta</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Luettelo virheellisistä tiedostoista…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Välimuistia ei ole määritetty. Paranna suorituskykyä ottamalla memcache käyttöön. Lisätietoja on saatavilla <a target=\"_blank\" href=\"{docLink}\">dokumentaatiossa</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom ei ole PHP:n luettavissa, eikä tätä missään tapauksessa suositella tietoturvasyistä. Lisätietoja on saatavilla <a target=\"_blank\" href=\"{docLink}\">dokumentaatiossa</a>.",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "PHP-versiosi ({version}) ei ole enää tuettu <a target=\"_blank\" href=\"{phpLink}\"> PHP:n toimesta</a>. Suosittelemme päivittämään PHP:n version, jotta hyödyt suorituskykyparannuksista sekä tietoturvakorjauksista.",
+ "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\" href=\"{docLink}\">documentation</a>." : "Käänteisen välityspalvelimen otsakemääritykset ovat väärin, tai olet yhteydessä ownCloudiin luotetun välityspalvelimen kautta. Jos et ole yhteydessä luotetun välityspalvelimen kautta, kyseessä on tietoturvaongelma, joka mahdollistaa hyökkääjän väärentävän ownCloudille näkyvän IP-osoitteen. Lisätietoja on saatavilla <a target=\"_blank\" href=\"{docLink}\">dokumentaatiossa</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached on määritetty hajautetuksi välimuistiksi, mutta väärä PHP-moduuli \"memcache\" on asennettu. \\OC\\Memcache\\Memcached tukee vain moduulia \"memcached\", ei moduulia \"memcache\". Lisätietoja <a target=\"_blank\" href=\"{wikiLink}\">memcachedin wikissä molemmista moduuleista</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Jotkin tiedostot eivät läpäisseet eheystarkistusta. Lisätietoja ongelman selvittämiseksi on saatavilla <a target=\"_blank\" href=\"{docLink}\">dokumentaatiossa</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Luettelo virheellisistä tiedostoista…</a> / <a href=\"{rescanEndpoint}\">Tarkista uudelleen…</a>)",
"Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-otsaketta \"{header}\" ei ole määritetty vastaamaan arvoa \"{expected}\". Kyseessä on mahdollinen tietoturvaan tai -suojaan liittyvä riski, joten suosittelemme muuttamaan asetuksen arvoa.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritetty vähintään \"{seconds}\" sekuntiin. Suosittelemme HSTS:n käyttöä paremman tietoturvan vuoksi, kuten <a href=\"{docUrl}\">tietoturvavinkeissä</a> neuvotaan.",
@@ -264,6 +264,7 @@
"Please try again or contact your administrator." : "Yritä uudestaan tai ota yhteys ylläpitäjään.",
"Log in" : "Kirjaudu sisään",
"Wrong password. Reset it?" : "Väärä salasana. Haluatko palauttaa salasanan?",
+ "Wrong password." : "Väärä salasana.",
"Stay logged in" : "Pysy sisäänkirjautuneena",
"Alternative Logins" : "Vaihtoehtoiset kirjautumiset",
"This ownCloud instance is currently in single user mode." : "Tämä ownCloud-asennus on parhaillaan single user -tilassa.",
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index 4bb7aa82c97..d6663c09aa9 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -114,12 +114,12 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour la synchronisation de fichiers : l'interface WebDAV semble ne pas fonctionner.",
"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 mail 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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou de le déplacer hors de la racine du serveur web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Aucun cache de la mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la <a href=\"{docLink}\">documentation</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom n'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Plus d'informations peuvent être trouvées dans notre <a href=\"{docLink}\">documentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La version de PHP utilisée ({version}) <a href=\"{phpLink}\">n'est plus prise en charge par les créateurs de PHP</a>. Nous vous recommandons de mettre à niveau votre installation de PHP pour bénéficier de meilleures performances et des mises à jour de sécurité fournies par PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "La configuration des headers du reverse proxy 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. <a href=\"{docLink}\">Plus d'info dans la documentation.</a>",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "\"memcached\" est configuré comme cache distribué, mais le module installé est \"memcache\". \\OC\\Memcache\\Memcached ne prend en charge que \"memcached\" et non \"memcache\". <a href=\"{wikiLink}\">Consulter le wiki memcached parlant de ces deux modules.</a>",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Des fichiers n'ont pas réussi à passer la vérification d’intégrité. Plus d'information sur comment résoudre ce problème dans notre <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste des fichiers invalides…</a> / <a href=\"{rescanEndpoint}\">Relancer…</a>)",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Aucun cache de la mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la <a target=\"_blank\" href=\"{docLink}\">documentation</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom n'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Plus d'informations peuvent être trouvées dans notre <a target=\"_blank\" href=\"{docLink}\">documentation</a>.",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La version de PHP utilisée ({version}) <a target=\"_blank\" href=\"{phpLink}\">n'est plus prise en charge par les créateurs de PHP</a>. Nous vous recommandons de mettre à niveau votre installation de PHP pour bénéficier de meilleures performances et des mises à jour de sécurité fournies par PHP.",
+ "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\" href=\"{docLink}\">documentation</a>." : "La configuration des headers du reverse proxy 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. <a target=\"_blank\" href=\"{docLink}\">Plus d'info dans la documentation.</a>",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "\"memcached\" est configuré comme cache distribué, mais le module installé est \"memcache\". \\OC\\Memcache\\Memcached ne prend en charge que \"memcached\" et non \"memcache\". <a target=\"_blank\" href=\"{wikiLink}\">Consulter le wiki memcached parlant de ces deux modules.</a>",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Des fichiers n'ont pas réussi à passer la vérification d’intégrité. Plus d'information sur comment résoudre ce problème dans notre <a href=\"{docLink}\">documentation</a>. (<a target=\"_blank\" href=\"{codeIntegrityDownloadEndpoint}\">Liste des fichiers invalides…</a> / <a href=\"{rescanEndpoint}\">Relancer…</a>)",
"Error occurred while checking server setup" : "Une erreur s'est produite lors de la vérification de la configuration du serveur",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'en-tête HTTP \"{header}\" n'est pas configurée pour être égale à \"{expected}\" créant potentiellement un risque relié à la sécurité et à la vie privée. Il est donc recommandé d'ajuster ce paramètre.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée à \"{seconds}\" secondes. Pour renforcer la sécurité nous recommandons d'activer HSTS comme décrit dans notre <a href=\"{docUrl}\">Guide pour le renforcement et la sécurité</a>.",
@@ -266,6 +266,7 @@ OC.L10N.register(
"Please try again or contact your administrator." : "Veuillez réessayer ou contacter votre administrateur.",
"Log in" : "Se connecter",
"Wrong password. Reset it?" : "Mot de passe incorrect. Réinitialiser ?",
+ "Wrong password." : "Mot de passe incorrect.",
"Stay logged in" : "Rester connecté",
"Alternative Logins" : "Identifiants alternatifs",
"This ownCloud instance is currently in single user mode." : "Cette instance de ownCloud est actuellement en mode utilisateur unique.",
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index 02347de1707..841d99bea1a 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -112,12 +112,12 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour la synchronisation de fichiers : l'interface WebDAV semble ne pas fonctionner.",
"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 mail 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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou de le déplacer hors de la racine du serveur web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Aucun cache de la mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la <a href=\"{docLink}\">documentation</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom n'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Plus d'informations peuvent être trouvées dans notre <a href=\"{docLink}\">documentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La version de PHP utilisée ({version}) <a href=\"{phpLink}\">n'est plus prise en charge par les créateurs de PHP</a>. Nous vous recommandons de mettre à niveau votre installation de PHP pour bénéficier de meilleures performances et des mises à jour de sécurité fournies par PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "La configuration des headers du reverse proxy 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. <a href=\"{docLink}\">Plus d'info dans la documentation.</a>",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "\"memcached\" est configuré comme cache distribué, mais le module installé est \"memcache\". \\OC\\Memcache\\Memcached ne prend en charge que \"memcached\" et non \"memcache\". <a href=\"{wikiLink}\">Consulter le wiki memcached parlant de ces deux modules.</a>",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Des fichiers n'ont pas réussi à passer la vérification d’intégrité. Plus d'information sur comment résoudre ce problème dans notre <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste des fichiers invalides…</a> / <a href=\"{rescanEndpoint}\">Relancer…</a>)",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Aucun cache de la mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la <a target=\"_blank\" href=\"{docLink}\">documentation</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom n'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Plus d'informations peuvent être trouvées dans notre <a target=\"_blank\" href=\"{docLink}\">documentation</a>.",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La version de PHP utilisée ({version}) <a target=\"_blank\" href=\"{phpLink}\">n'est plus prise en charge par les créateurs de PHP</a>. Nous vous recommandons de mettre à niveau votre installation de PHP pour bénéficier de meilleures performances et des mises à jour de sécurité fournies par PHP.",
+ "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\" href=\"{docLink}\">documentation</a>." : "La configuration des headers du reverse proxy 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. <a target=\"_blank\" href=\"{docLink}\">Plus d'info dans la documentation.</a>",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "\"memcached\" est configuré comme cache distribué, mais le module installé est \"memcache\". \\OC\\Memcache\\Memcached ne prend en charge que \"memcached\" et non \"memcache\". <a target=\"_blank\" href=\"{wikiLink}\">Consulter le wiki memcached parlant de ces deux modules.</a>",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Des fichiers n'ont pas réussi à passer la vérification d’intégrité. Plus d'information sur comment résoudre ce problème dans notre <a href=\"{docLink}\">documentation</a>. (<a target=\"_blank\" href=\"{codeIntegrityDownloadEndpoint}\">Liste des fichiers invalides…</a> / <a href=\"{rescanEndpoint}\">Relancer…</a>)",
"Error occurred while checking server setup" : "Une erreur s'est produite lors de la vérification de la configuration du serveur",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'en-tête HTTP \"{header}\" n'est pas configurée pour être égale à \"{expected}\" créant potentiellement un risque relié à la sécurité et à la vie privée. Il est donc recommandé d'ajuster ce paramètre.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée à \"{seconds}\" secondes. Pour renforcer la sécurité nous recommandons d'activer HSTS comme décrit dans notre <a href=\"{docUrl}\">Guide pour le renforcement et la sécurité</a>.",
@@ -264,6 +264,7 @@
"Please try again or contact your administrator." : "Veuillez réessayer ou contacter votre administrateur.",
"Log in" : "Se connecter",
"Wrong password. Reset it?" : "Mot de passe incorrect. Réinitialiser ?",
+ "Wrong password." : "Mot de passe incorrect.",
"Stay logged in" : "Rester connecté",
"Alternative Logins" : "Identifiants alternatifs",
"This ownCloud instance is currently in single user mode." : "Cette instance de ownCloud est actuellement en mode utilisateur unique.",
diff --git a/core/l10n/gl.js b/core/l10n/gl.js
index eaef574eef3..d0a5468a235 100644
--- a/core/l10n/gl.js
+++ b/core/l10n/gl.js
@@ -100,8 +100,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "O servidor aínda non está configurado correctamente para permitir a sincronización de ficheiros, semella que a interface WebDAV non está a funcionar.",
"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 non ten conexión activa a Internet. Isto significa que algunhas características como a montaxe do almacenamento externo, as notificacións sobre actualizacións ou a instalación de engadidos de terceiros non funcionarán. Así mesmo, o acceso remoto a ficheiros e enviar correos de notificación poderían non funcionar. Suxerímoslle que active a conexión a Internet para este servidor se quere ter todos estes servizos.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O directorio de datos e os seus ficheiros probabelmente son accesíbeis desde a Internet. O ficheiro .htaccess non funciona. Recomendámoslle que configure o seu servidor web de xeito que o directorio de datos non sexa accesíbel ou que mova o directorio de datos fora do directorio root do servidor web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Non foi configurada a memoria cache. Para mellorar o rendemento configure unha «memcache», se está dispoñíbel. Pode atopar máis información na nosa <a href=\"{docLink}\">documentación</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom non é lexíbel por PHP xa que esta absolutamente desaconsellado por razóns de seguridade. Pode atopar máis información na nosa <a href=\"{docLink}\">documentación</a>.",
"Error occurred while checking server setup" : "Aconteceu un erro mentras se comprobaba a configuración do servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "A cabeceira HTTP «{header}» non está configurada como igual a «{expected}». Isto é un posíbel risco para a seguridade ou a intimidade, recomendámoslle que axuste esta opción.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "A cabeceira HTTP «Strict-Transport-Security» non está configurada para menos de «{seconds}» segundos . Para mellorar a seguridade, recomendámoslle que active o uso de HTTPS, tal e como se describe nos <a href=\"{docUrl}\">consellos de seguridade</a>.",
diff --git a/core/l10n/gl.json b/core/l10n/gl.json
index f72db710e89..823b08c4d14 100644
--- a/core/l10n/gl.json
+++ b/core/l10n/gl.json
@@ -98,8 +98,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "O servidor aínda non está configurado correctamente para permitir a sincronización de ficheiros, semella que a interface WebDAV non está a funcionar.",
"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 non ten conexión activa a Internet. Isto significa que algunhas características como a montaxe do almacenamento externo, as notificacións sobre actualizacións ou a instalación de engadidos de terceiros non funcionarán. Así mesmo, o acceso remoto a ficheiros e enviar correos de notificación poderían non funcionar. Suxerímoslle que active a conexión a Internet para este servidor se quere ter todos estes servizos.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O directorio de datos e os seus ficheiros probabelmente son accesíbeis desde a Internet. O ficheiro .htaccess non funciona. Recomendámoslle que configure o seu servidor web de xeito que o directorio de datos non sexa accesíbel ou que mova o directorio de datos fora do directorio root do servidor web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Non foi configurada a memoria cache. Para mellorar o rendemento configure unha «memcache», se está dispoñíbel. Pode atopar máis información na nosa <a href=\"{docLink}\">documentación</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom non é lexíbel por PHP xa que esta absolutamente desaconsellado por razóns de seguridade. Pode atopar máis información na nosa <a href=\"{docLink}\">documentación</a>.",
"Error occurred while checking server setup" : "Aconteceu un erro mentras se comprobaba a configuración do servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "A cabeceira HTTP «{header}» non está configurada como igual a «{expected}». Isto é un posíbel risco para a seguridade ou a intimidade, recomendámoslle que axuste esta opción.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "A cabeceira HTTP «Strict-Transport-Security» non está configurada para menos de «{seconds}» segundos . Para mellorar a seguridade, recomendámoslle que active o uso de HTTPS, tal e como se describe nos <a href=\"{docUrl}\">consellos de seguridade</a>.",
diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js
index a9b84b6bcf9..d3a577e60ab 100644
--- a/core/l10n/hu_HU.js
+++ b/core/l10n/hu_HU.js
@@ -111,11 +111,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "A webszerver nincs megfelelően beállítva a fájl szinkronizációhoz, mert a WebDAV interfész nem működik.",
"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 tulajdonság, mint pl. külső tárolók felcsatolása, frissítési értesítések, vagy egyéb applikációk nem működnek. A fájlok távoli elérése és az email értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden tulajdonságot használni akar.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Az adat könyvtára és a fáljai valószínűleg elérhetőek az internetről. A .htaccess fájl nem működik. Erősen ajánlott, hogy úgy állítsa be a webszerverét, hogy az adatkönyvtár ne legyen elérhető az internetről, vagy mogassa ki az adatokat a webszerver gyökérkönyvtárából.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nem lett gyorsítótár memória beállítva. A teljesítmény növeléséhez kérem állítson be gyorsítótárat, ha lehetséges. További információ található az alábbi <a href=\"{docLink}\">dokumentációban</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "a /dev/urandom eszköz nem elérhető PHP-ből, ami nagyon nagy biztonsági problémát jelent. További információ található az alábbi <a href=\"{docLink}\">dokumentációban</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A PHP verziód ({version}) már nem <a href=\"{phpLink}\">támogatott a PHP által</a>. Javasoljuk, hogy frissítsd a PHP verziót, hogy kihasználd a teljesítménybeli és biztonsági javításokat.",
- "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 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. További információ található a <a href=\"{docLink}\">dokumentációban</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached be van konfigurálva gyorsítótárnak, de rossz \"memcache\" PHP modul van telepítve. \\OC\\Memcache\\Memcached csak a \"memcached\"-t támogatja, és nem a \"memcache\"-t. Kérjük, nézd meg a <a href=\"{wikiLink}\">memcached wiki oldalt a modulokkal kapcsolatban</a>.",
"Error occurred while checking server setup" : "Hiba történt a szerver beállítások ellenőrzése közben",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "A \"{header}\" HTTP fejléc nincs beállítva, hogy megegyezzen az elvárttal \"{expected}\". Ez egy potenciális biztonsági kockázat és kérjük, hogy változtassa meg a beállításokat.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "A \"Strict-Transport-Security\" HTTP fejléc nincs beállítva hogy \"{seconds}\" másodpercig tartson. Biztonsági okokból ajánljuk, hogy engedélyezze a HSTS, ahogyan ezt részletezzük a <a href=\"{docUrl}\">biztonsági tippek</a> dokumentációban.",
diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json
index 991851b5beb..1729c081244 100644
--- a/core/l10n/hu_HU.json
+++ b/core/l10n/hu_HU.json
@@ -109,11 +109,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "A webszerver nincs megfelelően beállítva a fájl szinkronizációhoz, mert a WebDAV interfész nem működik.",
"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 tulajdonság, mint pl. külső tárolók felcsatolása, frissítési értesítések, vagy egyéb applikációk nem működnek. A fájlok távoli elérése és az email értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden tulajdonságot használni akar.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Az adat könyvtára és a fáljai valószínűleg elérhetőek az internetről. A .htaccess fájl nem működik. Erősen ajánlott, hogy úgy állítsa be a webszerverét, hogy az adatkönyvtár ne legyen elérhető az internetről, vagy mogassa ki az adatokat a webszerver gyökérkönyvtárából.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nem lett gyorsítótár memória beállítva. A teljesítmény növeléséhez kérem állítson be gyorsítótárat, ha lehetséges. További információ található az alábbi <a href=\"{docLink}\">dokumentációban</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "a /dev/urandom eszköz nem elérhető PHP-ből, ami nagyon nagy biztonsági problémát jelent. További információ található az alábbi <a href=\"{docLink}\">dokumentációban</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A PHP verziód ({version}) már nem <a href=\"{phpLink}\">támogatott a PHP által</a>. Javasoljuk, hogy frissítsd a PHP verziót, hogy kihasználd a teljesítménybeli és biztonsági javításokat.",
- "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 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. További információ található a <a href=\"{docLink}\">dokumentációban</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached be van konfigurálva gyorsítótárnak, de rossz \"memcache\" PHP modul van telepítve. \\OC\\Memcache\\Memcached csak a \"memcached\"-t támogatja, és nem a \"memcache\"-t. Kérjük, nézd meg a <a href=\"{wikiLink}\">memcached wiki oldalt a modulokkal kapcsolatban</a>.",
"Error occurred while checking server setup" : "Hiba történt a szerver beállítások ellenőrzése közben",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "A \"{header}\" HTTP fejléc nincs beállítva, hogy megegyezzen az elvárttal \"{expected}\". Ez egy potenciális biztonsági kockázat és kérjük, hogy változtassa meg a beállításokat.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "A \"Strict-Transport-Security\" HTTP fejléc nincs beállítva hogy \"{seconds}\" másodpercig tartson. Biztonsági okokból ajánljuk, hogy engedélyezze a HSTS, ahogyan ezt részletezzük a <a href=\"{docUrl}\">biztonsági tippek</a> dokumentációban.",
diff --git a/core/l10n/id.js b/core/l10n/id.js
index fb0fb7f4330..1c7325e1206 100644
--- a/core/l10n/id.js
+++ b/core/l10n/id.js
@@ -111,11 +111,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Server web Anda belum diatur dengan benar untuk mengizinkan sinkronisasi berkas karena antarmuka WebDAV nampaknya rusak.",
"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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Direktori data dan berkas Anda kemungkinan dapat diakses dari Internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan Anda untuk mengkonfigurasi server web agar direktori data tidak lagi dapat diakses atau pindahkan direktori data Anda di luar root dokumen server web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Tembolok memori tidak dikonfigurasi. Untuk meningkatkan kinerja, mohon konfigurasi memcache jika tersedia. Informasi lebih lanjut dapat ditemukan di <a href=\"{docLink}\">dokumentasi</a> kami.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom tidak terbaca oleh PHP sangat disarankan untuk alasan keamanan. Informasi lebih lanjut dapat ditemukan di <a href=\"{docLink}\">dokumentasi</a> kami.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Versi PHP Anda ({version}) tidak lagi <a href=\"{phpLink}\">didukung oleh PHP</a>. Kami menyarankan Anda untuk meningkatkan versi PHP Anda agar mendapatkan keuntungan pembaruan kinerja dan keamanan yang disediakan oleh PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "Konfigurasi header reverse proxy tidak benar atau Anda mengakses ownCloud dari proxy yang tidak terpercaya. Jika Anda tidak mengakses ownCloud dari proxy yang terpercaya, ini merupakan masalah keamanan dan memungkinkan peretas dapat memalsukan alamat IP mereka yang terlihat pada ownCloud. Informasi lebih lanjut dapat ditemukan pada <a href=\"{docLink}\">dokumentasi</a> kami.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached diatur sebagai cache terdistribusi, namun modul PHP \"memcache\" yang dipasang salah. \\OC\\Memcache\\Memcached hanya mendukung \"memcached\" bukan \"memcache\". Lihat <a href=\"{wikiLink}\">wiki memcached tentang kedua modul</a>.",
"Error occurred while checking server setup" : "Kesalahan tidak terduga saat memeriksa setelan server",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Header HTTP \"{header}\" tidak dikonfigurasi sama dengan \"{expected}\". Hal ini berpotensi pada resiko keamanan dan privasi. Kami sarankan untuk menyesuaikan pengaturan ini.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP header \"Strict-Transport-Security\" tidak diatur kurang dari \"{seconds}\" detik. Untuk peningkatan keamanan, kami menyarankan untuk mengaktifkan HSTS seperti yang dijelaskan di <a href=\"{docUrl}\">tips keamanan</a>.",
diff --git a/core/l10n/id.json b/core/l10n/id.json
index 2edd1f8b362..16b0e0e0df8 100644
--- a/core/l10n/id.json
+++ b/core/l10n/id.json
@@ -109,11 +109,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Server web Anda belum diatur dengan benar untuk mengizinkan sinkronisasi berkas karena antarmuka WebDAV nampaknya rusak.",
"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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Direktori data dan berkas Anda kemungkinan dapat diakses dari Internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan Anda untuk mengkonfigurasi server web agar direktori data tidak lagi dapat diakses atau pindahkan direktori data Anda di luar root dokumen server web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Tembolok memori tidak dikonfigurasi. Untuk meningkatkan kinerja, mohon konfigurasi memcache jika tersedia. Informasi lebih lanjut dapat ditemukan di <a href=\"{docLink}\">dokumentasi</a> kami.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom tidak terbaca oleh PHP sangat disarankan untuk alasan keamanan. Informasi lebih lanjut dapat ditemukan di <a href=\"{docLink}\">dokumentasi</a> kami.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Versi PHP Anda ({version}) tidak lagi <a href=\"{phpLink}\">didukung oleh PHP</a>. Kami menyarankan Anda untuk meningkatkan versi PHP Anda agar mendapatkan keuntungan pembaruan kinerja dan keamanan yang disediakan oleh PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "Konfigurasi header reverse proxy tidak benar atau Anda mengakses ownCloud dari proxy yang tidak terpercaya. Jika Anda tidak mengakses ownCloud dari proxy yang terpercaya, ini merupakan masalah keamanan dan memungkinkan peretas dapat memalsukan alamat IP mereka yang terlihat pada ownCloud. Informasi lebih lanjut dapat ditemukan pada <a href=\"{docLink}\">dokumentasi</a> kami.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached diatur sebagai cache terdistribusi, namun modul PHP \"memcache\" yang dipasang salah. \\OC\\Memcache\\Memcached hanya mendukung \"memcached\" bukan \"memcache\". Lihat <a href=\"{wikiLink}\">wiki memcached tentang kedua modul</a>.",
"Error occurred while checking server setup" : "Kesalahan tidak terduga saat memeriksa setelan server",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Header HTTP \"{header}\" tidak dikonfigurasi sama dengan \"{expected}\". Hal ini berpotensi pada resiko keamanan dan privasi. Kami sarankan untuk menyesuaikan pengaturan ini.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP header \"Strict-Transport-Security\" tidak diatur kurang dari \"{seconds}\" detik. Untuk peningkatan keamanan, kami menyarankan untuk mengaktifkan HSTS seperti yang dijelaskan di <a href=\"{docUrl}\">tips keamanan</a>.",
diff --git a/core/l10n/is.js b/core/l10n/is.js
index 47f52e49d02..f965ef064a9 100644
--- a/core/l10n/is.js
+++ b/core/l10n/is.js
@@ -102,10 +102,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vefþjónninn er ekki enn sett upp á réttan hátt til að leyfa skráar samstillingu því WebDAV viðmótið virðist vera brotinn.",
"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 miðlari hefur ekki virka nettengingu. Þetta þýðir að sumir eginleikar eins og virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á foritum þriðja aðila mun ekki virka. Fjar aðgangur af skrám og senda tilkynningar í tölvupósti vika líklega ekki heldur. Við leggjum til að virkja internet tengingu fyrir þennan vefþjóni ef þú vilt hafa alla eiginleika.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Gagnamappa og skrá eru líklega aðgengilegar af internetinu vegna þess að .htaccess skrá er ekki virk. Við mælum eindregið með að þú stillir vefþjón þinn á þann hátt að gagnamappa er ekki lengur aðgengileg eða þú færir gagnamöppu út fyrir rót vefþjóns.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Ekkert skyndiminni hefur verið stillt. Til að auka afköst skaltu stilla skyndiminni ef í boði. Nánari upplýsingar má finna á <a href=\\\"{docLink}\\\">documentation</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom er ekki læsileg af PHP, Sterklega er mælt með því að leyfa PHP að lesa /dev/urandom af öryggisástæðum. Nánari upplýsingar má finna á <a href=\\\"{docLink}\\\">documentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "PHP útgáfan þín ({version}) er ekki lengur <a href=\\\"{phpLink}\\\">supported by PHP</a>. Við hvetjum þig til að uppfæra PHP útgáfuna til að nýta afkasta og öryggis nýjungar hjá PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "Gagnstæður proxy haus stilling er röng, eða þú ert að tengjast ownCloud frá traustum proxy. Ef þú ert ekki að tengjast ownCloud frá traustum proxy, þetta er öryggismál og getur leyft árásir að skopstæling IP tölu þeirra sem sýnilega ownCloud. Nánari upplýsingar má finna á <a href=\\\"{docLink}\\\">documentation</a>.",
"Error occurred while checking server setup" : "Villa kom upp við athugun á uppsetingu miðlara",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\\\"{header}\\\" HTTP haus er ekki stilltur til jafns við \\\"{expected}\\\". Þetta er mögulegur öryggis eða næðis áhætta, við mælum með því að aðlaga þessa stillingu.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\\\"Strangt-Transport-Security\\\" HTTP haus er ekki stilltur á minst \\\"{seconds}\\\" sekúndur. Fyrir aukið öryggi mælum við með því að virkja HSTS eins og lýst er í <a href=\\\"{docUrl}\\\">security tips</a>.",
diff --git a/core/l10n/is.json b/core/l10n/is.json
index 04f1af7ab63..4e80bb75204 100644
--- a/core/l10n/is.json
+++ b/core/l10n/is.json
@@ -100,10 +100,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vefþjónninn er ekki enn sett upp á réttan hátt til að leyfa skráar samstillingu því WebDAV viðmótið virðist vera brotinn.",
"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 miðlari hefur ekki virka nettengingu. Þetta þýðir að sumir eginleikar eins og virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á foritum þriðja aðila mun ekki virka. Fjar aðgangur af skrám og senda tilkynningar í tölvupósti vika líklega ekki heldur. Við leggjum til að virkja internet tengingu fyrir þennan vefþjóni ef þú vilt hafa alla eiginleika.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Gagnamappa og skrá eru líklega aðgengilegar af internetinu vegna þess að .htaccess skrá er ekki virk. Við mælum eindregið með að þú stillir vefþjón þinn á þann hátt að gagnamappa er ekki lengur aðgengileg eða þú færir gagnamöppu út fyrir rót vefþjóns.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Ekkert skyndiminni hefur verið stillt. Til að auka afköst skaltu stilla skyndiminni ef í boði. Nánari upplýsingar má finna á <a href=\\\"{docLink}\\\">documentation</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom er ekki læsileg af PHP, Sterklega er mælt með því að leyfa PHP að lesa /dev/urandom af öryggisástæðum. Nánari upplýsingar má finna á <a href=\\\"{docLink}\\\">documentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "PHP útgáfan þín ({version}) er ekki lengur <a href=\\\"{phpLink}\\\">supported by PHP</a>. Við hvetjum þig til að uppfæra PHP útgáfuna til að nýta afkasta og öryggis nýjungar hjá PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "Gagnstæður proxy haus stilling er röng, eða þú ert að tengjast ownCloud frá traustum proxy. Ef þú ert ekki að tengjast ownCloud frá traustum proxy, þetta er öryggismál og getur leyft árásir að skopstæling IP tölu þeirra sem sýnilega ownCloud. Nánari upplýsingar má finna á <a href=\\\"{docLink}\\\">documentation</a>.",
"Error occurred while checking server setup" : "Villa kom upp við athugun á uppsetingu miðlara",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\\\"{header}\\\" HTTP haus er ekki stilltur til jafns við \\\"{expected}\\\". Þetta er mögulegur öryggis eða næðis áhætta, við mælum með því að aðlaga þessa stillingu.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\\\"Strangt-Transport-Security\\\" HTTP haus er ekki stilltur á minst \\\"{seconds}\\\" sekúndur. Fyrir aukið öryggi mælum við með því að virkja HSTS eins og lýst er í <a href=\\\"{docUrl}\\\">security tips</a>.",
diff --git a/core/l10n/it.js b/core/l10n/it.js
index c6cfb7d78d2..29189b403a0 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -114,12 +114,12 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata.",
"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à.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o di spostare la cartella fuori dalla radice del server web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La tua versione ({version}) di PHP non è più <a href=\"{phpLink}\">supportata da PHP</a>. Ti esortiamo ad aggiornare la versione di PHP per trarre vantaggio dagli aggiornamenti in termini di prestazioni e sicurezza forniti da PHP.",
- "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 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, rendendo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il <a href=\"{wikiLink}\">wiki di memcached per informazioni su entrambi i moduli</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alcuni file non hanno superato il controllo di integrità. Ulteriori informazioni su come risolvere questo problema sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Elenco dei file non validi…</a> / <a href=\"{rescanEndpoint}\">Nuova scansione…</a>)",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni, configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>.",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La tua versione ({version}) di PHP non è più <a target=\"_blank\" href=\"{phpLink}\">supportata da PHP</a>. Ti consigliamo di aggiornare la versione di PHP per trarre vantaggio dagli aggiornamenti in termini di prestazioni e sicurezza forniti da PHP.",
+ "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\" 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, rendendo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il <a target=\"_blank\" href=\"{wikiLink}\">wiki di memcached per informazioni su entrambi i moduli</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alcuni file non hanno superato il controllo di integrità. Ulteriori informazioni su come risolvere questo problema sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Elenco dei file non validi…</a> / <a href=\"{rescanEndpoint}\">Nuova scansione…</a>)",
"Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'intestazione HTTP \"{header}\" non è configurata come \"{expected}\". \nQuesto è un potenziale rischio di sicurezza o di riservatezza dei dati e noi consigliamo di modificare questa impostazione.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore almeno di \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.",
@@ -266,6 +266,7 @@ OC.L10N.register(
"Please try again or contact your administrator." : "Prova ancora o contatta il tuo amministratore.",
"Log in" : "Accedi",
"Wrong password. Reset it?" : "Password errata. Vuoi reimpostarla?",
+ "Wrong password." : "Password errata.",
"Stay logged in" : "Rimani collegato",
"Alternative Logins" : "Accessi alternativi",
"This ownCloud instance is currently in single user mode." : "Questa istanza di ownCloud è in modalità utente singolo.",
diff --git a/core/l10n/it.json b/core/l10n/it.json
index 4f3bc172318..c5c068e4dac 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -112,12 +112,12 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata.",
"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à.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o di spostare la cartella fuori dalla radice del server web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La tua versione ({version}) di PHP non è più <a href=\"{phpLink}\">supportata da PHP</a>. Ti esortiamo ad aggiornare la versione di PHP per trarre vantaggio dagli aggiornamenti in termini di prestazioni e sicurezza forniti da PHP.",
- "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 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, rendendo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il <a href=\"{wikiLink}\">wiki di memcached per informazioni su entrambi i moduli</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alcuni file non hanno superato il controllo di integrità. Ulteriori informazioni su come risolvere questo problema sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Elenco dei file non validi…</a> / <a href=\"{rescanEndpoint}\">Nuova scansione…</a>)",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni, configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>.",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La tua versione ({version}) di PHP non è più <a target=\"_blank\" href=\"{phpLink}\">supportata da PHP</a>. Ti consigliamo di aggiornare la versione di PHP per trarre vantaggio dagli aggiornamenti in termini di prestazioni e sicurezza forniti da PHP.",
+ "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\" 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, rendendo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il <a target=\"_blank\" href=\"{wikiLink}\">wiki di memcached per informazioni su entrambi i moduli</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alcuni file non hanno superato il controllo di integrità. Ulteriori informazioni su come risolvere questo problema sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Elenco dei file non validi…</a> / <a href=\"{rescanEndpoint}\">Nuova scansione…</a>)",
"Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'intestazione HTTP \"{header}\" non è configurata come \"{expected}\". \nQuesto è un potenziale rischio di sicurezza o di riservatezza dei dati e noi consigliamo di modificare questa impostazione.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore almeno di \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.",
@@ -264,6 +264,7 @@
"Please try again or contact your administrator." : "Prova ancora o contatta il tuo amministratore.",
"Log in" : "Accedi",
"Wrong password. Reset it?" : "Password errata. Vuoi reimpostarla?",
+ "Wrong password." : "Password errata.",
"Stay logged in" : "Rimani collegato",
"Alternative Logins" : "Accessi alternativi",
"This ownCloud instance is currently in single user mode." : "Questa istanza di ownCloud è in modalità utente singolo.",
diff --git a/core/l10n/ja.js b/core/l10n/ja.js
index 375b8c8a789..57bb7c9ee83 100644
--- a/core/l10n/ja.js
+++ b/core/l10n/ja.js
@@ -18,6 +18,8 @@ OC.L10N.register(
"Repair error: " : "修復エラー:",
"Set log level to debug - current level: \"%s\"" : "ログレベルをデバッグにセットします - 現在のレベル: \"%s\"",
"Reset log level to \"%s\"" : "ログレベルを \"%s\" にリセットします。",
+ "Starting code integrity check" : "コード整合性の確認を開始",
+ "Finished code integrity check" : "コード整合性の確認が終了",
"%s (3rdparty)" : "%s (サードパーティー)",
"%s (incompatible)" : "%s (非互換)",
"Following apps have been disabled: %s" : "以下のアプリが無効にされています: %s",
@@ -77,6 +79,7 @@ OC.L10N.register(
"Oct." : "10月",
"Nov." : "11月",
"Dec." : "12月",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">コード整合性の確認で問題が発生しました。詳しくはこちら…</a>",
"Settings" : "設定",
"Saving..." : "保存中...",
"seconds ago" : "数秒前",
@@ -111,11 +114,10 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAVインターフェースが動作していないようです。Webサーバーは、ファイルの同期を許可するよう適切に設定されていません。",
"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." : "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティ製のアプリ、といった一部の機能が利用できません。また、リモート接続でのファイルアクセス、通知メールの送信のような機能も利用できないことがあります。すべての機能を利用するには、このサーバーのインターネット接続を有効にすることをお勧めします。",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "データディレクトリとファイルがインターネットからアクセス可能になっている可能性があります。.htaccessファイルが機能していません。データディレクトリがアクセスされないようにWebサーバーを設定するか、Webサーバーのドキュメントルートからデータディレクトリを移動するように強くお勧めします。",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "メモリキャッシュが設定されていません。パフォーマンスを向上するために、可能であれば memcache を設定してください。 より詳しい情報については、<a href=\"{docLink}\">documentation</a> を参照してください。",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom は PHP から読み取ることができず、この状態はセキュリティの観点からおすすめできません。より詳しい情報については、<a href=\"{docLink}\">documentation</a> を参照ください。",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "ご利用のPHPのバージョン ({version}) は、<a href=\"{phpLink}\">PHPでサポート</a> されていません。 我々は、PHPから提供されている新しいバージョンにアップグレードし、それによるセキュリティの確保とパフォーマンスのメリットを受けられることを強くお勧めします。",
- "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 href=\"{docLink}\">documentation</a>." : "リバースプロキシーのヘッダー設定が間違っているか、または信頼されたプロキシーからownCloudにアクセスしていません。もし、信頼されたプロキシーからアクセスしているのでないなら、セキュリティに問題があり、ownCloudを詐称したIPアドレスから攻撃者に対して見えるよう許可していることになります。詳細な情報は、<a href=\"{docLink}\">ドキュメント</a>を確認してください。",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached は分散キャッシュとして設定されていますが、間違った\"memcache\"のPHPモジュールがインストールされています。 \\OC\\Memcache\\Memcached は、\"memcached\" のみをサポートしていますが、\"memcache\" ではありません。<a href=\"{wikiLink}\">memcached wiki で両方のモジュール</a> を見てください。",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "メモリキャッシュが設定されていません。パフォーマンスを向上するために、可能であれば memcache を設定してください。 より詳しい情報については、<a target=\"_blank\" href=\"{docLink}\">ドキュメント</a> を参照してください。",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom は PHP から読み取ることができず、この状態はセキュリティの観点からおすすめできません。より詳しい情報については、<a target=\"_blank\" href=\"{docLink}\">ドキュメント</a> を参照ください。",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "ご利用のPHPのバージョン ({version}) は、<a target=\"_blank\" href=\"{phpLink}\">PHPでサポート</a> されていません。セキュリティ確保とパフォーマンス向上のために、PHPから提供されている新しいバージョンにアップグレードすることを強くお勧めします。",
+ "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\" href=\"{docLink}\">documentation</a>." : "リバースプロキシのヘッダー設定が間違っているか、または信頼されたプロキシからownCloudにアクセスしていません。もし、信頼されたプロキシからアクセスしているのでないなら、セキュリティに問題があり、ownCloudを詐称したIPアドレスから攻撃者に対して見えるよう許可していることになります。詳細な情報は、 <a target=\"_blank\" href=\"{docLink}\">ドキュメント</a>を確認してください。",
"Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP ヘッダは \"{expected}\" に設定されていません。これは潜在的なセキュリティリスクもしくはプライバシーリスクとなる可能性があるため、この設定を見直すことをおすすめします。",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP ヘッダが最小値の \"{seconds}\" 秒に設定されていません。 セキュリティを強化するため、<a href=\"{docUrl}\">security tips</a>を参照して、HSTS を有効にすることをおすすめします。",
@@ -187,6 +189,7 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "トークンが無効なため、パスワードをリセットできませんでした",
"Couldn't reset password because the token is expired" : "トークンが期限切れのため、パスワードをリセットできませんでした",
"Couldn't send reset email. Please make sure your username is correct." : "リセットメールを送信できませんでした。ユーザー名が正しいことを確認してください。",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "このユーザー名に紐付けられたメールアドレスがないため、リセットメールを送信できませんでした。管理者に問い合わせてください。",
"%s password reset" : "%s パスワードリセット",
"Use the following link to reset your password: {link}" : "パスワードをリセットするには次のリンクをクリックしてください: {link}",
"New password" : "新しいパスワードを入力",
@@ -261,6 +264,7 @@ OC.L10N.register(
"Please try again or contact your administrator." : "もう一度試してみるか、管理者に問い合わせてください。",
"Log in" : "ログイン",
"Wrong password. Reset it?" : "パスワードが間違っています。リセットしますか?",
+ "Wrong password." : "パスワードが間違っています。",
"Stay logged in" : "ログインしたままにする",
"Alternative Logins" : "代替ログイン",
"This ownCloud instance is currently in single user mode." : "このownCloudインスタンスは、現在シングルユーザーモードです。",
diff --git a/core/l10n/ja.json b/core/l10n/ja.json
index 337358d57f7..b5cb09d44af 100644
--- a/core/l10n/ja.json
+++ b/core/l10n/ja.json
@@ -16,6 +16,8 @@
"Repair error: " : "修復エラー:",
"Set log level to debug - current level: \"%s\"" : "ログレベルをデバッグにセットします - 現在のレベル: \"%s\"",
"Reset log level to \"%s\"" : "ログレベルを \"%s\" にリセットします。",
+ "Starting code integrity check" : "コード整合性の確認を開始",
+ "Finished code integrity check" : "コード整合性の確認が終了",
"%s (3rdparty)" : "%s (サードパーティー)",
"%s (incompatible)" : "%s (非互換)",
"Following apps have been disabled: %s" : "以下のアプリが無効にされています: %s",
@@ -75,6 +77,7 @@
"Oct." : "10月",
"Nov." : "11月",
"Dec." : "12月",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">コード整合性の確認で問題が発生しました。詳しくはこちら…</a>",
"Settings" : "設定",
"Saving..." : "保存中...",
"seconds ago" : "数秒前",
@@ -109,11 +112,10 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAVインターフェースが動作していないようです。Webサーバーは、ファイルの同期を許可するよう適切に設定されていません。",
"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." : "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティ製のアプリ、といった一部の機能が利用できません。また、リモート接続でのファイルアクセス、通知メールの送信のような機能も利用できないことがあります。すべての機能を利用するには、このサーバーのインターネット接続を有効にすることをお勧めします。",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "データディレクトリとファイルがインターネットからアクセス可能になっている可能性があります。.htaccessファイルが機能していません。データディレクトリがアクセスされないようにWebサーバーを設定するか、Webサーバーのドキュメントルートからデータディレクトリを移動するように強くお勧めします。",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "メモリキャッシュが設定されていません。パフォーマンスを向上するために、可能であれば memcache を設定してください。 より詳しい情報については、<a href=\"{docLink}\">documentation</a> を参照してください。",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom は PHP から読み取ることができず、この状態はセキュリティの観点からおすすめできません。より詳しい情報については、<a href=\"{docLink}\">documentation</a> を参照ください。",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "ご利用のPHPのバージョン ({version}) は、<a href=\"{phpLink}\">PHPでサポート</a> されていません。 我々は、PHPから提供されている新しいバージョンにアップグレードし、それによるセキュリティの確保とパフォーマンスのメリットを受けられることを強くお勧めします。",
- "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 href=\"{docLink}\">documentation</a>." : "リバースプロキシーのヘッダー設定が間違っているか、または信頼されたプロキシーからownCloudにアクセスしていません。もし、信頼されたプロキシーからアクセスしているのでないなら、セキュリティに問題があり、ownCloudを詐称したIPアドレスから攻撃者に対して見えるよう許可していることになります。詳細な情報は、<a href=\"{docLink}\">ドキュメント</a>を確認してください。",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached は分散キャッシュとして設定されていますが、間違った\"memcache\"のPHPモジュールがインストールされています。 \\OC\\Memcache\\Memcached は、\"memcached\" のみをサポートしていますが、\"memcache\" ではありません。<a href=\"{wikiLink}\">memcached wiki で両方のモジュール</a> を見てください。",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "メモリキャッシュが設定されていません。パフォーマンスを向上するために、可能であれば memcache を設定してください。 より詳しい情報については、<a target=\"_blank\" href=\"{docLink}\">ドキュメント</a> を参照してください。",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom は PHP から読み取ることができず、この状態はセキュリティの観点からおすすめできません。より詳しい情報については、<a target=\"_blank\" href=\"{docLink}\">ドキュメント</a> を参照ください。",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "ご利用のPHPのバージョン ({version}) は、<a target=\"_blank\" href=\"{phpLink}\">PHPでサポート</a> されていません。セキュリティ確保とパフォーマンス向上のために、PHPから提供されている新しいバージョンにアップグレードすることを強くお勧めします。",
+ "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\" href=\"{docLink}\">documentation</a>." : "リバースプロキシのヘッダー設定が間違っているか、または信頼されたプロキシからownCloudにアクセスしていません。もし、信頼されたプロキシからアクセスしているのでないなら、セキュリティに問題があり、ownCloudを詐称したIPアドレスから攻撃者に対して見えるよう許可していることになります。詳細な情報は、 <a target=\"_blank\" href=\"{docLink}\">ドキュメント</a>を確認してください。",
"Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP ヘッダは \"{expected}\" に設定されていません。これは潜在的なセキュリティリスクもしくはプライバシーリスクとなる可能性があるため、この設定を見直すことをおすすめします。",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP ヘッダが最小値の \"{seconds}\" 秒に設定されていません。 セキュリティを強化するため、<a href=\"{docUrl}\">security tips</a>を参照して、HSTS を有効にすることをおすすめします。",
@@ -185,6 +187,7 @@
"Couldn't reset password because the token is invalid" : "トークンが無効なため、パスワードをリセットできませんでした",
"Couldn't reset password because the token is expired" : "トークンが期限切れのため、パスワードをリセットできませんでした",
"Couldn't send reset email. Please make sure your username is correct." : "リセットメールを送信できませんでした。ユーザー名が正しいことを確認してください。",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "このユーザー名に紐付けられたメールアドレスがないため、リセットメールを送信できませんでした。管理者に問い合わせてください。",
"%s password reset" : "%s パスワードリセット",
"Use the following link to reset your password: {link}" : "パスワードをリセットするには次のリンクをクリックしてください: {link}",
"New password" : "新しいパスワードを入力",
@@ -259,6 +262,7 @@
"Please try again or contact your administrator." : "もう一度試してみるか、管理者に問い合わせてください。",
"Log in" : "ログイン",
"Wrong password. Reset it?" : "パスワードが間違っています。リセットしますか?",
+ "Wrong password." : "パスワードが間違っています。",
"Stay logged in" : "ログインしたままにする",
"Alternative Logins" : "代替ログイン",
"This ownCloud instance is currently in single user mode." : "このownCloudインスタンスは、現在シングルユーザーモードです。",
diff --git a/core/l10n/ko.js b/core/l10n/ko.js
index f8d131fca29..54dc3cc77a0 100644
--- a/core/l10n/ko.js
+++ b/core/l10n/ko.js
@@ -111,11 +111,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAV 서비스가 올바르게 작동하지 않아서 웹 서버에서 파일 동기화를 사용할 수 없습니다.",
"This server has no working Internet connection. 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자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "인터넷에서 데이터 디렉터리와 파일에 접근할 수 있습니다. .htaccess 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 직접 접근할 수 없도록 하거나, 데이터 디렉터리를 웹 서버 문서 경로 바깥에 두십시오.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "메모리 캐시가 설정되지 않았습니다. 성능을 향상시키려면 사용 가능한 경우 메모리 캐시를 설정하십시오. 더 많은 정보를 보려면 <a href=\"{docLink}\">문서</a>를 참고하십시오.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP에서 /dev/urandom을 읽을 수 없으며, 보안상의 이유로 권장되지 않습니다. 더 많은 정보를 보려면 <a href=\"{docLink}\">문서</a>를 참고하십시오.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "사용하고 있는 PHP 버전({version})은 더 이상 <a href=\"{phpLink}\">PHP에서 지원하지 않습니다.</a> PHP를 업그레이드하여 성능 및 보안 개선을 누리십시오.",
- "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 href=\"{docLink}\">documentation</a>." : "역방향 프록시 헤더 설정이 잘못되었거나, 신뢰할 수 있는 프록시에서 ownCloud에 접근하고 있습니다. 신뢰할 수 있는 프록시에서 ownCloud에 접근하는 것이 아니라면, 이 상황은 보안 문제이며 공격자가 ownCloud에 접근하는 IP 주소를 속일 수 있습니다. 더 많은 정보를 보려면 <a href=\"{docLink}\">문서</a>를 참고하십시오.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "분산 캐시로 Memcached가 설정되었으나, 잘못된 PHP 모듈 \"memcache\"가 설치되어 있습니다. \\OC\\Memcache\\Memcached는 \"memcached\"를 지원하며, \"memcache\"를 지원하지 않습니다. <a href=\"{wikiLink}\">memcached 위키의 두 모듈에 관한 정보</a>를 참조하십시오.",
"Error occurred while checking server setup" : "서버 설정을 확인하는 중 오류 발생",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 헤더가 \"{expected}\"와(과) 같이 설정되지 않았습니다. 잠재적인 보안 위협이 될 수 있으므로 설정을 변경하는 것을 추천합니다.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP 헤더 \"Strict-Transport-Security\"가 최소한 \"{seconds}\"초 이상으로 설정되어야 합니다. 강화된 보안을 위해서 <a href=\"{docUrl}\">보안 팁</a>에 나타난 것처럼 HSTS를 활성화하는 것을 추천합니다.",
diff --git a/core/l10n/ko.json b/core/l10n/ko.json
index 64aec1d9d97..075a7eb64a1 100644
--- a/core/l10n/ko.json
+++ b/core/l10n/ko.json
@@ -109,11 +109,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAV 서비스가 올바르게 작동하지 않아서 웹 서버에서 파일 동기화를 사용할 수 없습니다.",
"This server has no working Internet connection. 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자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "인터넷에서 데이터 디렉터리와 파일에 접근할 수 있습니다. .htaccess 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 직접 접근할 수 없도록 하거나, 데이터 디렉터리를 웹 서버 문서 경로 바깥에 두십시오.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "메모리 캐시가 설정되지 않았습니다. 성능을 향상시키려면 사용 가능한 경우 메모리 캐시를 설정하십시오. 더 많은 정보를 보려면 <a href=\"{docLink}\">문서</a>를 참고하십시오.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP에서 /dev/urandom을 읽을 수 없으며, 보안상의 이유로 권장되지 않습니다. 더 많은 정보를 보려면 <a href=\"{docLink}\">문서</a>를 참고하십시오.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "사용하고 있는 PHP 버전({version})은 더 이상 <a href=\"{phpLink}\">PHP에서 지원하지 않습니다.</a> PHP를 업그레이드하여 성능 및 보안 개선을 누리십시오.",
- "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 href=\"{docLink}\">documentation</a>." : "역방향 프록시 헤더 설정이 잘못되었거나, 신뢰할 수 있는 프록시에서 ownCloud에 접근하고 있습니다. 신뢰할 수 있는 프록시에서 ownCloud에 접근하는 것이 아니라면, 이 상황은 보안 문제이며 공격자가 ownCloud에 접근하는 IP 주소를 속일 수 있습니다. 더 많은 정보를 보려면 <a href=\"{docLink}\">문서</a>를 참고하십시오.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "분산 캐시로 Memcached가 설정되었으나, 잘못된 PHP 모듈 \"memcache\"가 설치되어 있습니다. \\OC\\Memcache\\Memcached는 \"memcached\"를 지원하며, \"memcache\"를 지원하지 않습니다. <a href=\"{wikiLink}\">memcached 위키의 두 모듈에 관한 정보</a>를 참조하십시오.",
"Error occurred while checking server setup" : "서버 설정을 확인하는 중 오류 발생",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 헤더가 \"{expected}\"와(과) 같이 설정되지 않았습니다. 잠재적인 보안 위협이 될 수 있으므로 설정을 변경하는 것을 추천합니다.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP 헤더 \"Strict-Transport-Security\"가 최소한 \"{seconds}\"초 이상으로 설정되어야 합니다. 강화된 보안을 위해서 <a href=\"{docUrl}\">보안 팁</a>에 나타난 것처럼 HSTS를 활성화하는 것을 추천합니다.",
diff --git a/core/l10n/mk.js b/core/l10n/mk.js
index e09dd51f6b8..0fd2666320c 100644
--- a/core/l10n/mk.js
+++ b/core/l10n/mk.js
@@ -89,7 +89,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Вашиот веб опслужувач сеуште не е точно подесен да овозможува синхронизација на датотеки бидејќи интерфејсот за WebDAV изгледа дека е расипан. ",
"This server has no working Internet connection. 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-ти лица нема да работат. Пристапот на датотеки од далечина и праќање на пораки за известувања може исто така да не работат. Ви советуваме да овозможите Интернет врска за овој опслужувач ако сакате да ги имате сите опции. ",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Вашата папка за податоци и вашите датотеки се најверојатно достапни од интернет. Датотеката .htaccess не работи. Строго ви препорачуваме да го подесите вашиот веб опслужувач на начин на кој вашата папка за податоци не е веќе достапна од интернет или да ја преместите папката за податоци надвор од коренот на веб опслужувачот.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Не еконфигуриран кеш за меморијата. За да ги подобрите перформансите ве молам конфигурирајте memcache ако е достапно. Дополнителни информации можат да се најдат во нашата <a href=\"{docLink}\">документација</a>.",
"Error occurred while checking server setup" : "Се случи грешка при проверката на подесувањата на опслужувачот",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заглавието \"{header}\" не е конфигурирано да биде еднакво на \"{expected}\". Ова е потенцијално сигурносен ризик и препорачуваме да прилагодат подесувањата.",
"Shared" : "Споделен",
diff --git a/core/l10n/mk.json b/core/l10n/mk.json
index d5002b8ffe9..24c43253248 100644
--- a/core/l10n/mk.json
+++ b/core/l10n/mk.json
@@ -87,7 +87,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Вашиот веб опслужувач сеуште не е точно подесен да овозможува синхронизација на датотеки бидејќи интерфејсот за WebDAV изгледа дека е расипан. ",
"This server has no working Internet connection. 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-ти лица нема да работат. Пристапот на датотеки од далечина и праќање на пораки за известувања може исто така да не работат. Ви советуваме да овозможите Интернет врска за овој опслужувач ако сакате да ги имате сите опции. ",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Вашата папка за податоци и вашите датотеки се најверојатно достапни од интернет. Датотеката .htaccess не работи. Строго ви препорачуваме да го подесите вашиот веб опслужувач на начин на кој вашата папка за податоци не е веќе достапна од интернет или да ја преместите папката за податоци надвор од коренот на веб опслужувачот.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Не еконфигуриран кеш за меморијата. За да ги подобрите перформансите ве молам конфигурирајте memcache ако е достапно. Дополнителни информации можат да се најдат во нашата <a href=\"{docLink}\">документација</a>.",
"Error occurred while checking server setup" : "Се случи грешка при проверката на подесувањата на опслужувачот",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заглавието \"{header}\" не е конфигурирано да биде еднакво на \"{expected}\". Ова е потенцијално сигурносен ризик и препорачуваме да прилагодат подесувањата.",
"Shared" : "Споделен",
diff --git a/core/l10n/nb_NO.js b/core/l10n/nb_NO.js
index d6a613ab48e..d01f93dd57d 100644
--- a/core/l10n/nb_NO.js
+++ b/core/l10n/nb_NO.js
@@ -111,11 +111,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web-serveren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.",
"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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Intet minne-cache er konfigurert. For å forbedre ytelsen, installer et minne-cache hvis tilgjengelig. Mer informasjon finnes i <a href=\"{docLink}\">dokumentasjonen</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom kan ikke leses av PHP, noe som er sterkt frarådet av sikkerhetshensyn. Mer informasjon finnes i <a href=\"{docLink}\">dokumentasjonen</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Din PHP-versjon ({version}) er ikke <a href=\"{phpLink}\">støttet av PHP</a> lenger. Vi oppfordrer deg til å oppgradere din PHP-versjon for å nyte fordel av ytelses- og sikkerhetsoppdateringer som tilbys av PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "Konfigurasjon av reverse proxy-headers er ikke korrekt, eller du aksesserer ownCloud fra en \"trusted proxy\". Hvis du ikke aksesserer ownCloud fra en \"trusted proxy\", er dette en sikkerhetsrisiko som kan la en angriper forfalske IP-addressen sin slik den oppfattes av ownCloud. Mer informasjon i <a href=\"{docLink}\">dokumentasjonen</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached er konfigurert som distribuert cache, men feil PHP-module \"memcache\" er installert. \\OC\\Memcache\\Memcached støtter bare \"memcached\" og ikke \"memcache\". Se <a href=\"{wikiLink}\">memcached wiki om begge modulene</a>.",
"Error occurred while checking server setup" : "Feil oppstod ved sjekking av server-oppsett",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke konfigurert lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP header \"Strict-Transport-Security\" er ikke konfigurert til minst \"{seconds}\" sekunder. For beste sikkerhet anbefaler vi at HSTS aktiveres som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.",
diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json
index 58cad24f1a2..77f2fa0acfc 100644
--- a/core/l10n/nb_NO.json
+++ b/core/l10n/nb_NO.json
@@ -109,11 +109,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web-serveren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.",
"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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Intet minne-cache er konfigurert. For å forbedre ytelsen, installer et minne-cache hvis tilgjengelig. Mer informasjon finnes i <a href=\"{docLink}\">dokumentasjonen</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom kan ikke leses av PHP, noe som er sterkt frarådet av sikkerhetshensyn. Mer informasjon finnes i <a href=\"{docLink}\">dokumentasjonen</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Din PHP-versjon ({version}) er ikke <a href=\"{phpLink}\">støttet av PHP</a> lenger. Vi oppfordrer deg til å oppgradere din PHP-versjon for å nyte fordel av ytelses- og sikkerhetsoppdateringer som tilbys av PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "Konfigurasjon av reverse proxy-headers er ikke korrekt, eller du aksesserer ownCloud fra en \"trusted proxy\". Hvis du ikke aksesserer ownCloud fra en \"trusted proxy\", er dette en sikkerhetsrisiko som kan la en angriper forfalske IP-addressen sin slik den oppfattes av ownCloud. Mer informasjon i <a href=\"{docLink}\">dokumentasjonen</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached er konfigurert som distribuert cache, men feil PHP-module \"memcache\" er installert. \\OC\\Memcache\\Memcached støtter bare \"memcached\" og ikke \"memcache\". Se <a href=\"{wikiLink}\">memcached wiki om begge modulene</a>.",
"Error occurred while checking server setup" : "Feil oppstod ved sjekking av server-oppsett",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke konfigurert lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP header \"Strict-Transport-Security\" er ikke konfigurert til minst \"{seconds}\" sekunder. For beste sikkerhet anbefaler vi at HSTS aktiveres som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.",
diff --git a/core/l10n/nl.js b/core/l10n/nl.js
index 9e2bc2d345e..30fd49ad567 100644
--- a/core/l10n/nl.js
+++ b/core/l10n/nl.js
@@ -114,12 +114,12 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Uw webserver is nog niet goed ingesteld voor bestandssynchronisatie omdat de WebDAV interface verstoord lijkt.",
"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 emails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Uw data folder en uw bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om uw webserver zodanig te configureren, dat de datadirectory niet bereikbaar is vanaf het internet of om uw datadirectory te verplaatsen naar een locatie buiten de document root van de webserver.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kunt u de memcache configureren als die beschikbaar is. Meer informatie vind u in onze <a href=\"{docLink}\">documentatie</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze <a href=\"{docLink}\">documentatie</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "UwPHP versie ({version}) wordt niet langer <a href=\"{phpLink}\">ondersteund door PHP</a>. We adviseren u om uw PHP versie te upgraden voor betere prestaties en security updates geleverd door PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of u hebt toegang tot ownCloud via een vertrouwde proxy. Als u ownCloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat ownCloud ziet kan spoofen. Meer informatie is te vinden in onze <a href=\"{docLink}\">documentatie</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached is geconfigureerd als gedistribueerde cache, maar de verkeerde PHP module \"memcache\" is geïnstalleerd. \\OC\\Memcache\\Memcached ondersteunt alleen \"memcached\" en niet \"memcache\". Zie de <a href=\"{wikiLink}\">memcached wiki over beide modules</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Sommige bestanden kwamen niet door de code betrouwbaarheidscontrole. Meer informatie over het oplossen van dit probleem kan worden gevonden in onze <a href=\"{docLink}\">documentatie</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lijst met ongeldige bestanden…</a> / <a href=\"{rescanEndpoint}\">Opnieuw…</a>)",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kunt u de memcache configureren als die beschikbaar is. Meer informatie vind u in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>.",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "UwPHP versie ({version}) wordt niet langer <a target=\"_blank\" href=\"{phpLink}\">ondersteund door PHP</a>. We adviseren u om uw PHP versie te upgraden voor betere prestaties en security updates geleverd door PHP.",
+ "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\" href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of u hebt toegang tot ownCloud via een vertrouwde proxy. Als u ownCloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat ownCloud ziet kan spoofen. Meer informatie is te vinden in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached is geconfigureerd als gedistribueerde cache, maar de verkeerde PHP module \"memcache\" is geïnstalleerd. \\OC\\Memcache\\Memcached ondersteunt alleen \"memcached\" en niet \"memcache\". Zie de <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki over beide modules</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Sommige bestanden kwamen niet door de code betrouwbaarheidscontrole. Meer informatie over het oplossen van dit probleem kan worden gevonden in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lijst met ongeldige bestanden…</a> / <a href=\"{rescanEndpoint}\">Opnieuw…</a>)",
"Error occurred while checking server setup" : "Een fout trad op bij checken serverconfiguratie",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "De \"{header}\" HTTP header is niet overeenkomstig met \"{expected}\" geconfigureerd. Dit is een potentieel security of privacy risico en we adviseren om deze instelling te wijzigen.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "De \"Strict-Transport-Security\" HTTP header is niet geconfigureerd als minimaal \"{seconds}\" seconden. Voor verbeterde beveiliging adviseren we HSTS in te schakelen zoals beschreven in onze <a href=\"{docUrl}\">security tips</a>.",
@@ -266,6 +266,7 @@ OC.L10N.register(
"Please try again or contact your administrator." : "Probeer het opnieuw of neem contact op met uw beheerder.",
"Log in" : "Meld u aan",
"Wrong password. Reset it?" : "Onjuist wachtwoord. Resetten?",
+ "Wrong password." : "Onjuist wachtwoord.",
"Stay logged in" : "Ingelogd blijven",
"Alternative Logins" : "Alternatieve inlogs",
"This ownCloud instance is currently in single user mode." : "Deze ownCloud werkt momenteel in enkele gebruiker modus.",
diff --git a/core/l10n/nl.json b/core/l10n/nl.json
index d565545ce38..c919cc43255 100644
--- a/core/l10n/nl.json
+++ b/core/l10n/nl.json
@@ -112,12 +112,12 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Uw webserver is nog niet goed ingesteld voor bestandssynchronisatie omdat de WebDAV interface verstoord lijkt.",
"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 emails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Uw data folder en uw bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om uw webserver zodanig te configureren, dat de datadirectory niet bereikbaar is vanaf het internet of om uw datadirectory te verplaatsen naar een locatie buiten de document root van de webserver.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kunt u de memcache configureren als die beschikbaar is. Meer informatie vind u in onze <a href=\"{docLink}\">documentatie</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze <a href=\"{docLink}\">documentatie</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "UwPHP versie ({version}) wordt niet langer <a href=\"{phpLink}\">ondersteund door PHP</a>. We adviseren u om uw PHP versie te upgraden voor betere prestaties en security updates geleverd door PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of u hebt toegang tot ownCloud via een vertrouwde proxy. Als u ownCloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat ownCloud ziet kan spoofen. Meer informatie is te vinden in onze <a href=\"{docLink}\">documentatie</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached is geconfigureerd als gedistribueerde cache, maar de verkeerde PHP module \"memcache\" is geïnstalleerd. \\OC\\Memcache\\Memcached ondersteunt alleen \"memcached\" en niet \"memcache\". Zie de <a href=\"{wikiLink}\">memcached wiki over beide modules</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Sommige bestanden kwamen niet door de code betrouwbaarheidscontrole. Meer informatie over het oplossen van dit probleem kan worden gevonden in onze <a href=\"{docLink}\">documentatie</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lijst met ongeldige bestanden…</a> / <a href=\"{rescanEndpoint}\">Opnieuw…</a>)",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kunt u de memcache configureren als die beschikbaar is. Meer informatie vind u in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>.",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "UwPHP versie ({version}) wordt niet langer <a target=\"_blank\" href=\"{phpLink}\">ondersteund door PHP</a>. We adviseren u om uw PHP versie te upgraden voor betere prestaties en security updates geleverd door PHP.",
+ "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\" href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of u hebt toegang tot ownCloud via een vertrouwde proxy. Als u ownCloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat ownCloud ziet kan spoofen. Meer informatie is te vinden in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached is geconfigureerd als gedistribueerde cache, maar de verkeerde PHP module \"memcache\" is geïnstalleerd. \\OC\\Memcache\\Memcached ondersteunt alleen \"memcached\" en niet \"memcache\". Zie de <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki over beide modules</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Sommige bestanden kwamen niet door de code betrouwbaarheidscontrole. Meer informatie over het oplossen van dit probleem kan worden gevonden in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lijst met ongeldige bestanden…</a> / <a href=\"{rescanEndpoint}\">Opnieuw…</a>)",
"Error occurred while checking server setup" : "Een fout trad op bij checken serverconfiguratie",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "De \"{header}\" HTTP header is niet overeenkomstig met \"{expected}\" geconfigureerd. Dit is een potentieel security of privacy risico en we adviseren om deze instelling te wijzigen.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "De \"Strict-Transport-Security\" HTTP header is niet geconfigureerd als minimaal \"{seconds}\" seconden. Voor verbeterde beveiliging adviseren we HSTS in te schakelen zoals beschreven in onze <a href=\"{docUrl}\">security tips</a>.",
@@ -264,6 +264,7 @@
"Please try again or contact your administrator." : "Probeer het opnieuw of neem contact op met uw beheerder.",
"Log in" : "Meld u aan",
"Wrong password. Reset it?" : "Onjuist wachtwoord. Resetten?",
+ "Wrong password." : "Onjuist wachtwoord.",
"Stay logged in" : "Ingelogd blijven",
"Alternative Logins" : "Alternatieve inlogs",
"This ownCloud instance is currently in single user mode." : "Deze ownCloud werkt momenteel in enkele gebruiker modus.",
diff --git a/core/l10n/oc.js b/core/l10n/oc.js
index f9fdb8bea11..8f25978f9c9 100644
--- a/core/l10n/oc.js
+++ b/core/l10n/oc.js
@@ -111,11 +111,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vòstre servidor web es pas corrèctament configurat per la sincronizacion de fichièrs : sembla que l'interfàcia WebDAV fonciona pas.",
"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." : "Aqueste servidor se pòt pas connectar a internet. Aquò significa que certanas foncionalitats, talas coma lo montatge de supòrts d'emmagazinatge distants, las notificacions de mesas a jorn o l'installacion d'aplicacions tèrças foncionaràn pas. L'accès als fichièrs a distància, e tanben las notificacions per mail pòdon tanben èsser indisponiblas. Es recomandat d'activar la connexion internet per aqueste servidor se volètz dispausar de l'ensemble de las foncionalitats ofèrtas.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Vòstre dorsièr de donadas e vòstres fichièrs son probablament accessibles dempuèi internet. Lo fichièr .htaccess fonciona pas. Vos recomandam bravament de configurar vòstre servidor web de manièra qu'aqueste dorsièr de donadas siá pas mai accessible, o de lo desplaçar en defòra de la raiç del servidor web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Cap d'escondedor de la memòria es pas configurat. Se possible, configuratz un \"memcache\" per aumentar las performàncias. Per mai d'information consultatz la <a href=\"{docLink}\">documentacion</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom es pas legible per PHP, aquò es bravament desconselhat per de rasons de seguretat. Mai d'informacions pòdon èsser trobadas dins nòstra <a href=\"{docLink}\">documentacion</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La version de PHP utilizada ({version}) <a href=\"{phpLink}\">es pas mai presa en carga pels creators de PHP</a>. Vos recomandam de metre a nivèl vòstra installacion de PHP per beneficiar de performàncias melhoras e de las mesas a jorn de seguretat provesidas per PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "La configuracion dels headers del reverse proxy es incorrècta, o accedissètz a ownCloud dempuèi un proxy fisable. Se sètz pas a accedir a ownCloud dempuèi un proxy fisable, aquò es un problèma de seguretat que pòt permetre a un atacant d'amagar sa vertadièra adreça IP. <a href=\"{docLink}\">Mai d'info dins la documentacion.</a>",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "\"memcached\" es configurat coma escondedor distribuit, mas lo modul installat es \"memcache\". \\OC\\Memcache\\Memcached pren pas en carga que \"memcached\" e non pas \"memcache\". <a href=\"{wikiLink}\">Consultar lo wiki memcached que parla d'aquestes dos moduls.</a>",
"Error occurred while checking server setup" : "Una error s'es produsida al moment de la verificacion de la configuracion del servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'entèsta HTTP \"{header}\" es pas configurada per èsser egala a \"{expected}\" en creant potencialament un risc religat a la seguretat e a la vida privada. Es doncas recomandat d'ajustar aqueste paramètre.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "L'entèsta HTTP \"Strict-Transport-Security\" es pas configurada a \"{seconds}\" segondas. Per renforçar la seguretat, recomandam d'activar HSTS coma descrich dins nòstre <a href=\"{docUrl}\">Guida pel renfortiment e la seguretat</a>.",
diff --git a/core/l10n/oc.json b/core/l10n/oc.json
index bd34013f9e7..e19930b78db 100644
--- a/core/l10n/oc.json
+++ b/core/l10n/oc.json
@@ -109,11 +109,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vòstre servidor web es pas corrèctament configurat per la sincronizacion de fichièrs : sembla que l'interfàcia WebDAV fonciona pas.",
"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." : "Aqueste servidor se pòt pas connectar a internet. Aquò significa que certanas foncionalitats, talas coma lo montatge de supòrts d'emmagazinatge distants, las notificacions de mesas a jorn o l'installacion d'aplicacions tèrças foncionaràn pas. L'accès als fichièrs a distància, e tanben las notificacions per mail pòdon tanben èsser indisponiblas. Es recomandat d'activar la connexion internet per aqueste servidor se volètz dispausar de l'ensemble de las foncionalitats ofèrtas.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Vòstre dorsièr de donadas e vòstres fichièrs son probablament accessibles dempuèi internet. Lo fichièr .htaccess fonciona pas. Vos recomandam bravament de configurar vòstre servidor web de manièra qu'aqueste dorsièr de donadas siá pas mai accessible, o de lo desplaçar en defòra de la raiç del servidor web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Cap d'escondedor de la memòria es pas configurat. Se possible, configuratz un \"memcache\" per aumentar las performàncias. Per mai d'information consultatz la <a href=\"{docLink}\">documentacion</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom es pas legible per PHP, aquò es bravament desconselhat per de rasons de seguretat. Mai d'informacions pòdon èsser trobadas dins nòstra <a href=\"{docLink}\">documentacion</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La version de PHP utilizada ({version}) <a href=\"{phpLink}\">es pas mai presa en carga pels creators de PHP</a>. Vos recomandam de metre a nivèl vòstra installacion de PHP per beneficiar de performàncias melhoras e de las mesas a jorn de seguretat provesidas per PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "La configuracion dels headers del reverse proxy es incorrècta, o accedissètz a ownCloud dempuèi un proxy fisable. Se sètz pas a accedir a ownCloud dempuèi un proxy fisable, aquò es un problèma de seguretat que pòt permetre a un atacant d'amagar sa vertadièra adreça IP. <a href=\"{docLink}\">Mai d'info dins la documentacion.</a>",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "\"memcached\" es configurat coma escondedor distribuit, mas lo modul installat es \"memcache\". \\OC\\Memcache\\Memcached pren pas en carga que \"memcached\" e non pas \"memcache\". <a href=\"{wikiLink}\">Consultar lo wiki memcached que parla d'aquestes dos moduls.</a>",
"Error occurred while checking server setup" : "Una error s'es produsida al moment de la verificacion de la configuracion del servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'entèsta HTTP \"{header}\" es pas configurada per èsser egala a \"{expected}\" en creant potencialament un risc religat a la seguretat e a la vida privada. Es doncas recomandat d'ajustar aqueste paramètre.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "L'entèsta HTTP \"Strict-Transport-Security\" es pas configurada a \"{seconds}\" segondas. Per renforçar la seguretat, recomandam d'activar HSTS coma descrich dins nòstre <a href=\"{docUrl}\">Guida pel renfortiment e la seguretat</a>.",
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index 23963477f55..8d774176b1a 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -114,17 +114,17 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Seu servidor web ainda não está configurado corretamente para permitir a sincronização de arquivos, pois a interface WebDAV parece ser desconfigurada.",
"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. Isto significa que algumas das características como a montagem de 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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O seu diretório de dados e os arquivos estão, provavelmente, acessíveis a partir da Internet. O arquivo .htaccess não está funcionando. Nós sugerimos que você configure o servidor web de uma forma que o diretório de dados não seja acessível ou mova o diretório de dados para fora do diretório raiz de documentos do servidor web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nenhum cache de memória foi configurado. Para melhorar o seu desempenho, por favor configurar um cache de memória, se disponível. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\"> documentação </a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom não pode ser lido por PHP o que é altamente desencorajado por razões de segurança. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\">documentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão do PHP ({version}) não é <a href=\"{phpLink}\">suportada pela PHP</a>. Nós o incentivamos a atualizar sua versão do PHP para tirar proveito de atualizações de desempenho e de segurança fornecidos pela PHP.",
- "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 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 está acessando ownCloud de um proxy confiável, esta é uma questão de segurança e pode permitir a um invasor falsificar seu endereço IP como visível para ownCloud. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\">documentação</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como cache distribuído, mas o módulo PHP errado \"memcache\" está instalado. \\OC\\Memcache\\Memcached somente suporta \"memcached\" e não \"memcache\". Veja o <a href=\"{wikiLink}\">memcached wiki sobre esse módulo</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alguns arquivos não passaram na verificação de integridade. Mais informações sobre como resolver este problema podem ser encontradas na nossa <a href=\"{docLink}\">documentação</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista de arquivos inválidos…</a> / <a href=\"{rescanEndpoint}\">Reexaminar…</a>)",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Nenhuma memória cache foi configurada. Para melhorar o seu desempenho, por favor configure um cache de memória, se disponível. Mais informação podem ser encontradas em nossa <a target=\"_blank\" href=\"{docLink}\">documentação</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom não pode ser lido pelo PHP o que é altamente desencorajado por razões de segurança. Mais informações podem ser encontradas na nossa <a target=\"_blank\" href=\"{docLink}\">documentação</a>.",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão do PHP ({version}) não é mais <a target=\"_blank\" href=\"{phpLink}\">suportada pelo PHP</a>. Nós o incentivamos a atualizar sua versão do PHP para tirar proveito de atualizações de desempenho e de segurança fornecidas pelo PHP.",
+ "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\" 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 está acessando ownCloud de um proxy confiável, esta é uma questão de segurança e pode permitir a um invasor falsificar seu endereço IP como visível para ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" href=\"{docLink}\">documentação</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como cache distribuído, mas o módulo PHP \"memcache\" errado está instalado. \\OC\\Memcache\\Memcached suporta apenas \"memcached\" e não \"memcache\". Veja a <a target=\"_blank\" href=\"{wikiLink}\">o wiki sobre memcached sobre ambos os módulos</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alguns arquivos não passaram na verificação de integridade. Mais informações sobre como resolver este problema podem ser encontradas na nossa <a target=\"_blank\" href=\"{docLink}\">documentação</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista de arquivos inválidos…</a> / <a href=\"{rescanEndpoint}\">Reexaminar…</a>)",
"Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O \"{header}\" cabeçalho HTTP não está configurado igual ao \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "O cabeçalho \"Transporte-de-Segurança-Restrita\"HTTP não está configurada para menos de \"{seconds}\" segundos. Para uma maior segurança recomendamos a ativação HSTS conforme descrito em nossas <a href=\"{docUrl}\">dicas de segurança</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Você está acessando este site via HTTP. Nós fortemente sugerimos que você ao invéz, configure o servidor para exigir o uso de HTTPS como descrito em nossas <a href=\"{docUrl}\">dicas de segurança</a>.",
- "Shared" : "Compartilhados",
+ "Shared" : "Compartilhado",
"Shared with {recipients}" : "Compartilhado com {recipients}",
"Error" : "Erro",
"Error while sharing" : "Erro ao compartilhar",
@@ -191,6 +191,7 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido",
"Couldn't reset password because the token is expired" : "Não foi possível redefinir a senha porque o token expirou",
"Couldn't send reset email. Please make sure your username is correct." : "Não foi possível enviar e-mail de redefinição. Verifique se o seu nome de usuário está correto.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar email de redefinição porque não há nenhum endereço de e-mail para este nome de usuário. Entre em contato com o administrador.",
"%s password reset" : "%s redefinir senha",
"Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}",
"New password" : "Nova senha",
@@ -217,7 +218,7 @@ OC.L10N.register(
"You can click here to return to %s." : "Você pode clicar aqui para retornar para %s.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Olá,\n\ngostaria que você soubesse que %s compartilhou %s com você.\nVeja isto: %s\n\n",
"The share will expire on %s." : "O compartilhamento irá expirar em %s.",
- "Cheers!" : "Saúde!",
+ "Cheers!" : "Saudações!",
"Internal Server Error" : "Erro Interno do Servidor",
"The server encountered an internal error and was unable to complete your request." : "O servidor encontrou um erro interno e não conseguiu concluir o seu pedido.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Entre em contato com o administrador do servidor se este erro reaparece várias vezes, por favor, inclua os detalhes técnicos abaixo em seu relatório.",
@@ -255,7 +256,7 @@ OC.L10N.register(
"Finishing …" : "Finalizando ...",
"Need help?" : "Precisa de ajuda?",
"See the documentation" : "Veja a documentação",
- "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Olá,<br><br>só para seu conhecimento que %s compartilhou <strong>%s</strong> com você. <br><a href=\"%s\">Verificar!</a><br><br> ",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Olá,<br><br>só para seu conhecimento que %s compartilhou <strong>%s</strong> com você. <br><a href=\"%s\">Visualize-o!</a><br><br> ",
"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",
@@ -265,6 +266,7 @@ OC.L10N.register(
"Please try again or contact your administrator." : "Por favor tente novamente ou faça contato com o seu administrador.",
"Log in" : "Entrar",
"Wrong password. Reset it?" : "Senha incorreta. Redefini-la?",
+ "Wrong password." : "Senha errada",
"Stay logged in" : "Permaneça logado",
"Alternative Logins" : "Logins Alternativos",
"This ownCloud instance is currently in single user mode." : "Nesta instância ownCloud está em modo de usuário único.",
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 966ec449947..e458367e890 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -112,17 +112,17 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Seu servidor web ainda não está configurado corretamente para permitir a sincronização de arquivos, pois a interface WebDAV parece ser desconfigurada.",
"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. Isto significa que algumas das características como a montagem de 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.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O seu diretório de dados e os arquivos estão, provavelmente, acessíveis a partir da Internet. O arquivo .htaccess não está funcionando. Nós sugerimos que você configure o servidor web de uma forma que o diretório de dados não seja acessível ou mova o diretório de dados para fora do diretório raiz de documentos do servidor web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nenhum cache de memória foi configurado. Para melhorar o seu desempenho, por favor configurar um cache de memória, se disponível. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\"> documentação </a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom não pode ser lido por PHP o que é altamente desencorajado por razões de segurança. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\">documentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão do PHP ({version}) não é <a href=\"{phpLink}\">suportada pela PHP</a>. Nós o incentivamos a atualizar sua versão do PHP para tirar proveito de atualizações de desempenho e de segurança fornecidos pela PHP.",
- "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 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 está acessando ownCloud de um proxy confiável, esta é uma questão de segurança e pode permitir a um invasor falsificar seu endereço IP como visível para ownCloud. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\">documentação</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como cache distribuído, mas o módulo PHP errado \"memcache\" está instalado. \\OC\\Memcache\\Memcached somente suporta \"memcached\" e não \"memcache\". Veja o <a href=\"{wikiLink}\">memcached wiki sobre esse módulo</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alguns arquivos não passaram na verificação de integridade. Mais informações sobre como resolver este problema podem ser encontradas na nossa <a href=\"{docLink}\">documentação</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista de arquivos inválidos…</a> / <a href=\"{rescanEndpoint}\">Reexaminar…</a>)",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Nenhuma memória cache foi configurada. Para melhorar o seu desempenho, por favor configure um cache de memória, se disponível. Mais informação podem ser encontradas em nossa <a target=\"_blank\" href=\"{docLink}\">documentação</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom não pode ser lido pelo PHP o que é altamente desencorajado por razões de segurança. Mais informações podem ser encontradas na nossa <a target=\"_blank\" href=\"{docLink}\">documentação</a>.",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão do PHP ({version}) não é mais <a target=\"_blank\" href=\"{phpLink}\">suportada pelo PHP</a>. Nós o incentivamos a atualizar sua versão do PHP para tirar proveito de atualizações de desempenho e de segurança fornecidas pelo PHP.",
+ "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\" 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 está acessando ownCloud de um proxy confiável, esta é uma questão de segurança e pode permitir a um invasor falsificar seu endereço IP como visível para ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" href=\"{docLink}\">documentação</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como cache distribuído, mas o módulo PHP \"memcache\" errado está instalado. \\OC\\Memcache\\Memcached suporta apenas \"memcached\" e não \"memcache\". Veja a <a target=\"_blank\" href=\"{wikiLink}\">o wiki sobre memcached sobre ambos os módulos</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alguns arquivos não passaram na verificação de integridade. Mais informações sobre como resolver este problema podem ser encontradas na nossa <a target=\"_blank\" href=\"{docLink}\">documentação</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista de arquivos inválidos…</a> / <a href=\"{rescanEndpoint}\">Reexaminar…</a>)",
"Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O \"{header}\" cabeçalho HTTP não está configurado igual ao \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "O cabeçalho \"Transporte-de-Segurança-Restrita\"HTTP não está configurada para menos de \"{seconds}\" segundos. Para uma maior segurança recomendamos a ativação HSTS conforme descrito em nossas <a href=\"{docUrl}\">dicas de segurança</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Você está acessando este site via HTTP. Nós fortemente sugerimos que você ao invéz, configure o servidor para exigir o uso de HTTPS como descrito em nossas <a href=\"{docUrl}\">dicas de segurança</a>.",
- "Shared" : "Compartilhados",
+ "Shared" : "Compartilhado",
"Shared with {recipients}" : "Compartilhado com {recipients}",
"Error" : "Erro",
"Error while sharing" : "Erro ao compartilhar",
@@ -189,6 +189,7 @@
"Couldn't reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido",
"Couldn't reset password because the token is expired" : "Não foi possível redefinir a senha porque o token expirou",
"Couldn't send reset email. Please make sure your username is correct." : "Não foi possível enviar e-mail de redefinição. Verifique se o seu nome de usuário está correto.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar email de redefinição porque não há nenhum endereço de e-mail para este nome de usuário. Entre em contato com o administrador.",
"%s password reset" : "%s redefinir senha",
"Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}",
"New password" : "Nova senha",
@@ -215,7 +216,7 @@
"You can click here to return to %s." : "Você pode clicar aqui para retornar para %s.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Olá,\n\ngostaria que você soubesse que %s compartilhou %s com você.\nVeja isto: %s\n\n",
"The share will expire on %s." : "O compartilhamento irá expirar em %s.",
- "Cheers!" : "Saúde!",
+ "Cheers!" : "Saudações!",
"Internal Server Error" : "Erro Interno do Servidor",
"The server encountered an internal error and was unable to complete your request." : "O servidor encontrou um erro interno e não conseguiu concluir o seu pedido.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Entre em contato com o administrador do servidor se este erro reaparece várias vezes, por favor, inclua os detalhes técnicos abaixo em seu relatório.",
@@ -253,7 +254,7 @@
"Finishing …" : "Finalizando ...",
"Need help?" : "Precisa de ajuda?",
"See the documentation" : "Veja a documentação",
- "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Olá,<br><br>só para seu conhecimento que %s compartilhou <strong>%s</strong> com você. <br><a href=\"%s\">Verificar!</a><br><br> ",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Olá,<br><br>só para seu conhecimento que %s compartilhou <strong>%s</strong> com você. <br><a href=\"%s\">Visualize-o!</a><br><br> ",
"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",
@@ -263,6 +264,7 @@
"Please try again or contact your administrator." : "Por favor tente novamente ou faça contato com o seu administrador.",
"Log in" : "Entrar",
"Wrong password. Reset it?" : "Senha incorreta. Redefini-la?",
+ "Wrong password." : "Senha errada",
"Stay logged in" : "Permaneça logado",
"Alternative Logins" : "Logins Alternativos",
"This ownCloud instance is currently in single user mode." : "Nesta instância ownCloud está em modo de usuário único.",
diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js
index 0d28361a2c7..d3b7e55ca0e 100644
--- a/core/l10n/pt_PT.js
+++ b/core/l10n/pt_PT.js
@@ -107,9 +107,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "O seu servidor da Web não está configurado corretamente para permitir a sincronização de ficheiro, porque a interface WebDAV parece estar com problemas.",
"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 ownCloud não tem uma ligação de Internet a funcionar. Isto significa que algumas funcionalidades como o acesso a locais externos, notificações sobre actualizações, ou a instalação de aplicações de terceiros não irá funcionar. Aceder aos ficheiros remotamente e enviar notificações de email poderão não funcionar também. Sugerimos que active uma ligação à Internet se pretende obter todas as funcionalidades do ownCloud.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir das internet. O seu ficheiro .htaccess não está a funcionar corretamente. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nenhuma memória de cache foi configurada. Se possível configure-a de forma a optimizar o desempenho. Mais informações podem ser encontradas na <a href=\"{docLink}\">documentação</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom não é legível pelo PHP, o que é altamente desanimador por motivos de segurança. Pode ser encontrada mais informação na <a href=\"{docLink}\">documentação</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão ({version}) do PHP já não é <a href=\"{phpLink}\">suportada pelo PHP</a>. Nós encorajamos-lo a atualizar a sua versão do PHP para aproveitar o desempenho e as atualizações de segurança fornecidas pelo PHP.´«",
"Error occurred while checking server setup" : "Ocorreu um erro durante a verificação da configuração do servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O cabeçalho HTTP \"{header}\" não está configurado para igualar \"{expected}\". Isto é um potencial risco de segurança ou privacidade e recomendamos que o corrija.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Está a aceder a este site via HTTP. Nós recomendamos vivamente que configure o seu servidor para requerer a utilização de HTTPS, em vez do que está descrito nas nossas <a href=\"{docUrl}\">dicas de segurança</a>.",
diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json
index e9cf78ce9a1..fe8c66967fa 100644
--- a/core/l10n/pt_PT.json
+++ b/core/l10n/pt_PT.json
@@ -105,9 +105,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "O seu servidor da Web não está configurado corretamente para permitir a sincronização de ficheiro, porque a interface WebDAV parece estar com problemas.",
"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 ownCloud não tem uma ligação de Internet a funcionar. Isto significa que algumas funcionalidades como o acesso a locais externos, notificações sobre actualizações, ou a instalação de aplicações de terceiros não irá funcionar. Aceder aos ficheiros remotamente e enviar notificações de email poderão não funcionar também. Sugerimos que active uma ligação à Internet se pretende obter todas as funcionalidades do ownCloud.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir das internet. O seu ficheiro .htaccess não está a funcionar corretamente. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nenhuma memória de cache foi configurada. Se possível configure-a de forma a optimizar o desempenho. Mais informações podem ser encontradas na <a href=\"{docLink}\">documentação</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom não é legível pelo PHP, o que é altamente desanimador por motivos de segurança. Pode ser encontrada mais informação na <a href=\"{docLink}\">documentação</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão ({version}) do PHP já não é <a href=\"{phpLink}\">suportada pelo PHP</a>. Nós encorajamos-lo a atualizar a sua versão do PHP para aproveitar o desempenho e as atualizações de segurança fornecidas pelo PHP.´«",
"Error occurred while checking server setup" : "Ocorreu um erro durante a verificação da configuração do servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O cabeçalho HTTP \"{header}\" não está configurado para igualar \"{expected}\". Isto é um potencial risco de segurança ou privacidade e recomendamos que o corrija.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Está a aceder a este site via HTTP. Nós recomendamos vivamente que configure o seu servidor para requerer a utilização de HTTPS, em vez do que está descrito nas nossas <a href=\"{docUrl}\">dicas de segurança</a>.",
diff --git a/core/l10n/ru.js b/core/l10n/ru.js
index 90a07917555..a9f3994eb2d 100644
--- a/core/l10n/ru.js
+++ b/core/l10n/ru.js
@@ -111,11 +111,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер еще не настроен должным образом, чтобы позволить синхронизацию файлов, потому что интерфейс WebDAV, кажется, испорчен.",
"This server has no working Internet connection. 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." : "Этот сервер не имеет подключения к Интернету. Это означает, что некоторые из функций, таких как внешнее хранилище, уведомления об обновлениях и установки сторонних приложений не будут работать. Доступ к файлам удаленно и отправки уведомлений по почте могут не работать. Мы предлагаем включить подключение к Интернету для этого сервера, если вы хотите, чтобы все функции работали.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог данных и ваши файлы возможно доступны из интернете. .htaccess файл не работает. Мы настоятельно рекомендуем вам настроить ваш веб сервер таким образом, что-бы каталог данных не был больше доступен или переместите каталог данных за пределы корня веб сервера.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробную информацию, вы можете посмотреть в нашей <a href=\"{docLink}\">документации</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom не может быть прочитан PHP, что крайне нежелательно по причинам безопасности. Дополнительную информацию можно найти в a href=\"{docLink}\">документации</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ваша версия PHP ({version}) более не <a href=\"{phpLink}\">поддерживается PHP</a>. Мы советуем Вам обновить Вашу версию PHP для получения обновлений производительности и безопасности, предоставляемых PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "Конфигурация заголовков обратного прокси сервера некорректна, либо Вы заходите в ownCloud через доверенный прокси. Если Вы не заходите в ownCloud через доверенный прокси, это может быть небезопасно, так как злоумышленник может подменить видимые Owncloud IP-адреса. Более подробную информацию можно найти в нашей <a href=\"{docLink}\">документации</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached настроен на распределенный кеш, но установлен не поддерживаемый модуль PHP \"memcache\". \\OC\\Memcache\\Memcached поддерживает только модуль \"memcached\"! Информацию о модулях читайте на странице <a href=\"{wikiLink}\">memcached</a>.",
"Error occurred while checking server setup" : "Произошла ошибка при проверке настроек сервера",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Заголовок HTTP \"{header}\" не настроен на ожидаемый \"{expected}\". Это потенциальная проблема безопасности и мы рекомендуем изменить эти настройки.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Заголовок HTTP \"Strict-Transport-Security\" должен быть настроен хотя бы на \"{seconds}\" секунд. Для улучшения безопасности мы рекомендуем включить HSTS согласно нашим <a href=\"{docUrl}\">подсказкам по безопасности</a>.",
diff --git a/core/l10n/ru.json b/core/l10n/ru.json
index 93b8ce53dab..4589f151c5f 100644
--- a/core/l10n/ru.json
+++ b/core/l10n/ru.json
@@ -109,11 +109,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер еще не настроен должным образом, чтобы позволить синхронизацию файлов, потому что интерфейс WebDAV, кажется, испорчен.",
"This server has no working Internet connection. 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." : "Этот сервер не имеет подключения к Интернету. Это означает, что некоторые из функций, таких как внешнее хранилище, уведомления об обновлениях и установки сторонних приложений не будут работать. Доступ к файлам удаленно и отправки уведомлений по почте могут не работать. Мы предлагаем включить подключение к Интернету для этого сервера, если вы хотите, чтобы все функции работали.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог данных и ваши файлы возможно доступны из интернете. .htaccess файл не работает. Мы настоятельно рекомендуем вам настроить ваш веб сервер таким образом, что-бы каталог данных не был больше доступен или переместите каталог данных за пределы корня веб сервера.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробную информацию, вы можете посмотреть в нашей <a href=\"{docLink}\">документации</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom не может быть прочитан PHP, что крайне нежелательно по причинам безопасности. Дополнительную информацию можно найти в a href=\"{docLink}\">документации</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ваша версия PHP ({version}) более не <a href=\"{phpLink}\">поддерживается PHP</a>. Мы советуем Вам обновить Вашу версию PHP для получения обновлений производительности и безопасности, предоставляемых PHP.",
- "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 href=\"{docLink}\">documentation</a>." : "Конфигурация заголовков обратного прокси сервера некорректна, либо Вы заходите в ownCloud через доверенный прокси. Если Вы не заходите в ownCloud через доверенный прокси, это может быть небезопасно, так как злоумышленник может подменить видимые Owncloud IP-адреса. Более подробную информацию можно найти в нашей <a href=\"{docLink}\">документации</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached настроен на распределенный кеш, но установлен не поддерживаемый модуль PHP \"memcache\". \\OC\\Memcache\\Memcached поддерживает только модуль \"memcached\"! Информацию о модулях читайте на странице <a href=\"{wikiLink}\">memcached</a>.",
"Error occurred while checking server setup" : "Произошла ошибка при проверке настроек сервера",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Заголовок HTTP \"{header}\" не настроен на ожидаемый \"{expected}\". Это потенциальная проблема безопасности и мы рекомендуем изменить эти настройки.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Заголовок HTTP \"Strict-Transport-Security\" должен быть настроен хотя бы на \"{seconds}\" секунд. Для улучшения безопасности мы рекомендуем включить HSTS согласно нашим <a href=\"{docUrl}\">подсказкам по безопасности</a>.",
diff --git a/core/l10n/sk_SK.js b/core/l10n/sk_SK.js
index af5e6ce415a..e170b1adb8e 100644
--- a/core/l10n/sk_SK.js
+++ b/core/l10n/sk_SK.js
@@ -111,7 +111,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server nie je zatiaľ správne nastavený, aby umožnil synchronizáciu súborov, pretože rozhranie WebDAV sa zdá byť nefunkčné.",
"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 nemá funkčné pripojenie k internetu. Niektoré moduly ako napr. externé úložisko, oznámenie o dostupných aktualizáciách alebo inštalácia aplikácií tretích strán nebudú fungovať. Vzdialený prístup k súborom a odosielanie oznamovacích emailov tiež nemusí fungovať. Ak chcete využívať všetky funkcie, odporúčame povoliť tomuto serveru pripojenie k internetu.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš priečinok s dátami aj vaše súbory sú pravdepodobne prístupné z internetu. Súbor .htaccess nefunguje. Dôrazne odporúčame nakonfigurovať webový server tak, aby priečinok s dátami nebol naďalej prístupný alebo presunúť priečinok s dátami mimo priestoru, ktorý webový server sprístupňuje.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP nedokáže čítať z /dev/urandom, čo sa z bezpečnostných dôvodov dôrazne neodporúča. Ďalšie informácie nájdete v našej <a href=\"{docLink}\">dokumentácii</a>.",
"Error occurred while checking server setup" : "Počas kontroly nastavenia serveru sa stala chyba",
"Shared" : "Zdieľané",
"Shared with {recipients}" : "Zdieľa s {recipients}",
diff --git a/core/l10n/sk_SK.json b/core/l10n/sk_SK.json
index 77b7ea8b89b..2309fd4dc47 100644
--- a/core/l10n/sk_SK.json
+++ b/core/l10n/sk_SK.json
@@ -109,7 +109,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server nie je zatiaľ správne nastavený, aby umožnil synchronizáciu súborov, pretože rozhranie WebDAV sa zdá byť nefunkčné.",
"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 nemá funkčné pripojenie k internetu. Niektoré moduly ako napr. externé úložisko, oznámenie o dostupných aktualizáciách alebo inštalácia aplikácií tretích strán nebudú fungovať. Vzdialený prístup k súborom a odosielanie oznamovacích emailov tiež nemusí fungovať. Ak chcete využívať všetky funkcie, odporúčame povoliť tomuto serveru pripojenie k internetu.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš priečinok s dátami aj vaše súbory sú pravdepodobne prístupné z internetu. Súbor .htaccess nefunguje. Dôrazne odporúčame nakonfigurovať webový server tak, aby priečinok s dátami nebol naďalej prístupný alebo presunúť priečinok s dátami mimo priestoru, ktorý webový server sprístupňuje.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP nedokáže čítať z /dev/urandom, čo sa z bezpečnostných dôvodov dôrazne neodporúča. Ďalšie informácie nájdete v našej <a href=\"{docLink}\">dokumentácii</a>.",
"Error occurred while checking server setup" : "Počas kontroly nastavenia serveru sa stala chyba",
"Shared" : "Zdieľané",
"Shared with {recipients}" : "Zdieľa s {recipients}",
diff --git a/core/l10n/sq.js b/core/l10n/sq.js
index 4f88093c46d..d9c07f39da3 100644
--- a/core/l10n/sq.js
+++ b/core/l10n/sq.js
@@ -114,12 +114,12 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Shërbyesi juaj web ende s’është rregulluar për të lejuar njëkohësim kartelash, ngaqë ndërfaqja WebDAV duket se është e dëmtuar.",
"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 që funksionon. Kjo do të thotë që disa prej veçorive, të tilla si montimi i depozitave të jashtme, njoftimet mbi përditësime apo instalim aplikacionesh nga palë të treta, s’do të funksionojnë. Edhe hyrja në kartela së largëti, apo dërgimi i email-eve për njoftime mund të mos funksionojnë. Këshillojmë të aktivizoni për këtë shërbyes lidhjen në Internet, nëse doni t’i keni krejt këto veçori.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Drejtoria juaj e të dhënave dhe kartelat tuaja ka shumë mundësi të jenë të arritshme që nga interneti. Kartela .htaccess s’funksionon. Këshillojmë me forcë që ta formësoni shërbyesin tuaj web në një mënyrë që drejtoria e të dhënave të mos lejojë më hyrje, ose ta zhvendosni drejtorinë e të dhënave jashtë rrënjës së dokumenteve të shërbyesit web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "S’ka të formësuar fshehtinë kujtese. Që të shtoni suksesshmërinë e shërbyesit tuaj, ju lutemi, formësoni një memcache, në mundet. Të dhëna të mëtejshme mund të gjenden te <a href=\"{docLink}\">dokumentimi</a> ynë.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom s’është i lexueshëm nga PHP-ja, çka shkëshillohet me forcë, për arsye sigurie. Më tepër informacion mund të gjendet te <a href=\"{docLink}\">dokumentimi</a> ynë.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Versioni juaj i PHP -së ({version}) nuk <a href=\"{phpLink}\">mbulohet më nga PHP-ja</a>. Ju nxisim ta përmirësoni PHP-në me një version të ri që të përfitoni nga përditësimi i punimit dhe sigurisë të ofruara nga PHP-ja.",
- "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 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 href=\"{docLink}\">dokumentimi</a> ynë.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached është formësuar si fshehtinë e shpërndarë, por është instaluar moduli i gabuar PHP \"memcache\". \\OC\\Memcache\\Memcached mbulon vetëm \"memcached\" dhe jo \"memcache\". Shihni <a href=\"{wikiLink}\">memcached wiki për të dy modulet</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Disa prej kartelave s’e kaluan dot kontrollin e integritetit. Si si mund të zgjidhet ky problem mund ta shihni më në thellësi te <a href=\"{docLink}\">dokumentimi ynë</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listë e kartelave të pavlefshme…</a> / <a href=\"{rescanEndpoint}\">Rikontrolloji…</a>)",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "S’është formësuar ndonjë fshehtinë kujtese. Që të përmirësohet punimi juaj, ju lutemi, formësoni një fshehtinë kujtese, në pastë. Të dhëna të mëtejshme mund të gjenden te <a target=\"_blank\" href=\"{docLink}\">dokumentimi</a> ynë.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom s’është i lexueshëm nga PHP-ja, çka shkëshillohet me forcë, për arsye sigurie. Më tepër informacion mund të gjendet te <a target=\"_blank\" href=\"{docLink}\">dokumentimi</a> ynë.",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Versioni juaj i PHP-së ({version}) nuk <a target=\"_blank\" href=\"{phpLink}\">mbulohet më nga PHP-ja</a>. Ju nxisim ta përmirësoni versionin tuaj të PHP-së që të përfitoni nga përditësimet e funksionimit dhe sigurisë të ofruara nga PHP-ja.",
+ "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\" 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\" href=\"{docLink}\">dokumentimi</a> ynë.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached është formësuar si fshehtinë e shpërndarë, por është instaluar moduli i gabuar PHP \"memcache\". \\OC\\Memcache\\Memcached mbulon vetëm \"memcached\" dhe jo \"memcache\". Shihni <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki për të dy modulet</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Disa prej kartelave s’e kaluan dot kontrollin e integritetit. Si si mund të zgjidhet ky problem mund ta shihni më në thellësi te <a target=\"_blank\" href=\"{docLink}\">dokumentimi ynë</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listë e kartelave të pavlefshme…</a> / <a href=\"{rescanEndpoint}\">Rikontrolloji…</a>)",
"Error occurred while checking server setup" : "Ndodhi një gabim gjatë kontrollit të rregullimit të shërbyesit",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Kryet HTTP \"{header}\" s’është formësuar të jetë i njëjtë me \"{expected}\". Ky është një rrezik potencial sigurie dhe privatësie dhe këshillojmë të ndreqet ky rregullim.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Kryet HTTP \"Strict-Transport-Security\" s’është formësuar të paktën \"{seconds}\". Për siguri të thelluar këshillojmë aktivizimin e HSTS-së, siç përshkruhet te <a href=\"{docUrl}\">këshillat tona mbi sigurinë</a>.",
@@ -266,6 +266,7 @@ OC.L10N.register(
"Please try again or contact your administrator." : "Ju lutemi, riprovoni ose lidhuni me përgjegjësin tuaj.",
"Log in" : "Hyni",
"Wrong password. Reset it?" : "Fjalëkalim i gabuar. Të ricaktohet?",
+ "Wrong password." : "Fjalëkalim i gabuar.",
"Stay logged in" : "Qëndro i futur",
"Alternative Logins" : "Hyrje Alternative",
"This ownCloud instance is currently in single user mode." : "Kjo instancë ownCloud është aktualisht në gjendje me përdorues të vetëm.",
diff --git a/core/l10n/sq.json b/core/l10n/sq.json
index 748e0221e90..4653279c624 100644
--- a/core/l10n/sq.json
+++ b/core/l10n/sq.json
@@ -112,12 +112,12 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Shërbyesi juaj web ende s’është rregulluar për të lejuar njëkohësim kartelash, ngaqë ndërfaqja WebDAV duket se është e dëmtuar.",
"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 që funksionon. Kjo do të thotë që disa prej veçorive, të tilla si montimi i depozitave të jashtme, njoftimet mbi përditësime apo instalim aplikacionesh nga palë të treta, s’do të funksionojnë. Edhe hyrja në kartela së largëti, apo dërgimi i email-eve për njoftime mund të mos funksionojnë. Këshillojmë të aktivizoni për këtë shërbyes lidhjen në Internet, nëse doni t’i keni krejt këto veçori.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Drejtoria juaj e të dhënave dhe kartelat tuaja ka shumë mundësi të jenë të arritshme që nga interneti. Kartela .htaccess s’funksionon. Këshillojmë me forcë që ta formësoni shërbyesin tuaj web në një mënyrë që drejtoria e të dhënave të mos lejojë më hyrje, ose ta zhvendosni drejtorinë e të dhënave jashtë rrënjës së dokumenteve të shërbyesit web.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "S’ka të formësuar fshehtinë kujtese. Që të shtoni suksesshmërinë e shërbyesit tuaj, ju lutemi, formësoni një memcache, në mundet. Të dhëna të mëtejshme mund të gjenden te <a href=\"{docLink}\">dokumentimi</a> ynë.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom s’është i lexueshëm nga PHP-ja, çka shkëshillohet me forcë, për arsye sigurie. Më tepër informacion mund të gjendet te <a href=\"{docLink}\">dokumentimi</a> ynë.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Versioni juaj i PHP -së ({version}) nuk <a href=\"{phpLink}\">mbulohet më nga PHP-ja</a>. Ju nxisim ta përmirësoni PHP-në me një version të ri që të përfitoni nga përditësimi i punimit dhe sigurisë të ofruara nga PHP-ja.",
- "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 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 href=\"{docLink}\">dokumentimi</a> ynë.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached është formësuar si fshehtinë e shpërndarë, por është instaluar moduli i gabuar PHP \"memcache\". \\OC\\Memcache\\Memcached mbulon vetëm \"memcached\" dhe jo \"memcache\". Shihni <a href=\"{wikiLink}\">memcached wiki për të dy modulet</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Disa prej kartelave s’e kaluan dot kontrollin e integritetit. Si si mund të zgjidhet ky problem mund ta shihni më në thellësi te <a href=\"{docLink}\">dokumentimi ynë</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listë e kartelave të pavlefshme…</a> / <a href=\"{rescanEndpoint}\">Rikontrolloji…</a>)",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "S’është formësuar ndonjë fshehtinë kujtese. Që të përmirësohet punimi juaj, ju lutemi, formësoni një fshehtinë kujtese, në pastë. Të dhëna të mëtejshme mund të gjenden te <a target=\"_blank\" href=\"{docLink}\">dokumentimi</a> ynë.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom s’është i lexueshëm nga PHP-ja, çka shkëshillohet me forcë, për arsye sigurie. Më tepër informacion mund të gjendet te <a target=\"_blank\" href=\"{docLink}\">dokumentimi</a> ynë.",
+ "Your PHP version ({version}) is no longer <a target=\"_blank\" href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Versioni juaj i PHP-së ({version}) nuk <a target=\"_blank\" href=\"{phpLink}\">mbulohet më nga PHP-ja</a>. Ju nxisim ta përmirësoni versionin tuaj të PHP-së që të përfitoni nga përditësimet e funksionimit dhe sigurisë të ofruara nga PHP-ja.",
+ "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\" 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\" href=\"{docLink}\">dokumentimi</a> ynë.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached është formësuar si fshehtinë e shpërndarë, por është instaluar moduli i gabuar PHP \"memcache\". \\OC\\Memcache\\Memcached mbulon vetëm \"memcached\" dhe jo \"memcache\". Shihni <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki për të dy modulet</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Disa prej kartelave s’e kaluan dot kontrollin e integritetit. Si si mund të zgjidhet ky problem mund ta shihni më në thellësi te <a target=\"_blank\" href=\"{docLink}\">dokumentimi ynë</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listë e kartelave të pavlefshme…</a> / <a href=\"{rescanEndpoint}\">Rikontrolloji…</a>)",
"Error occurred while checking server setup" : "Ndodhi një gabim gjatë kontrollit të rregullimit të shërbyesit",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Kryet HTTP \"{header}\" s’është formësuar të jetë i njëjtë me \"{expected}\". Ky është një rrezik potencial sigurie dhe privatësie dhe këshillojmë të ndreqet ky rregullim.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Kryet HTTP \"Strict-Transport-Security\" s’është formësuar të paktën \"{seconds}\". Për siguri të thelluar këshillojmë aktivizimin e HSTS-së, siç përshkruhet te <a href=\"{docUrl}\">këshillat tona mbi sigurinë</a>.",
@@ -264,6 +264,7 @@
"Please try again or contact your administrator." : "Ju lutemi, riprovoni ose lidhuni me përgjegjësin tuaj.",
"Log in" : "Hyni",
"Wrong password. Reset it?" : "Fjalëkalim i gabuar. Të ricaktohet?",
+ "Wrong password." : "Fjalëkalim i gabuar.",
"Stay logged in" : "Qëndro i futur",
"Alternative Logins" : "Hyrje Alternative",
"This ownCloud instance is currently in single user mode." : "Kjo instancë ownCloud është aktualisht në gjendje me përdorues të vetëm.",
diff --git a/core/l10n/sr.js b/core/l10n/sr.js
index 6a918528512..d3e4830e27b 100644
--- a/core/l10n/sr.js
+++ b/core/l10n/sr.js
@@ -101,8 +101,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш сервер није правилно подешен да омогући синхронизацију фајлова. Изгледа да је ВебДАВ сучеље покварено.",
"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." : "Овај сервер нема везу са интернетом. То значи да неке могућности, попут монтирања спољашњег складишта, обавештења о ажурирању или инсталација апликација треће стране, неће радити. Даљински приступ и слање е-поште, такође неће радити. Предлажемо да омогућите интернет везу за овај сервер ако желите да имате све могућности.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш директоријум са подацима и ваши фајлови су вероватно доступни са интернета. Фајл .htaccess не ради. Предлажемо да подесите ваш веб сервер на начин да директоријум са подацима не буде доступан или га изместите изван кореног директоријума веб сервера.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Није подешен меморијски кеш. Да бисте побољшали перформансе подесите „memcache“ ако је доступан. Више информација можете наћи у <a href=\"{docLink}\">документацији</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ПХП не може да чита што није добро из безбедносних разлога. Информације о томе можете наћи у нашој <a href=\"{docLink}\">дукументацији</a>.",
"Error occurred while checking server setup" : "Дошло је до грешке при провери поставки сервера",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "ХТТП заглавље „{header}“ није подешено као „{expected}“. Ово потенцијално угрожава безбедност и приватност и препоручујемо да подесите ову поставку.",
"Shared" : "Дељено",
diff --git a/core/l10n/sr.json b/core/l10n/sr.json
index 6e66b1f770e..a25a96de7c1 100644
--- a/core/l10n/sr.json
+++ b/core/l10n/sr.json
@@ -99,8 +99,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш сервер није правилно подешен да омогући синхронизацију фајлова. Изгледа да је ВебДАВ сучеље покварено.",
"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." : "Овај сервер нема везу са интернетом. То значи да неке могућности, попут монтирања спољашњег складишта, обавештења о ажурирању или инсталација апликација треће стране, неће радити. Даљински приступ и слање е-поште, такође неће радити. Предлажемо да омогућите интернет везу за овај сервер ако желите да имате све могућности.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш директоријум са подацима и ваши фајлови су вероватно доступни са интернета. Фајл .htaccess не ради. Предлажемо да подесите ваш веб сервер на начин да директоријум са подацима не буде доступан или га изместите изван кореног директоријума веб сервера.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Није подешен меморијски кеш. Да бисте побољшали перформансе подесите „memcache“ ако је доступан. Више информација можете наћи у <a href=\"{docLink}\">документацији</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ПХП не може да чита што није добро из безбедносних разлога. Информације о томе можете наћи у нашој <a href=\"{docLink}\">дукументацији</a>.",
"Error occurred while checking server setup" : "Дошло је до грешке при провери поставки сервера",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "ХТТП заглавље „{header}“ није подешено као „{expected}“. Ово потенцијално угрожава безбедност и приватност и препоручујемо да подесите ову поставку.",
"Shared" : "Дељено",
diff --git a/core/l10n/th_TH.js b/core/l10n/th_TH.js
index 33816cc7075..3daabec936b 100644
--- a/core/l10n/th_TH.js
+++ b/core/l10n/th_TH.js
@@ -114,12 +114,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "เว็บเซิร์ฟเวอร์ของคุณยังไม่ถูกติดตั้งอย่างถูกต้องเพื่ออนุญาตให้ประสานข้อมูลให้ตรงกัน เนื่องจากอินเตอร์เฟซ WebDAV อาจเสียหาย",
"This server has no working Internet connection. 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." : "เซิร์ฟเวอร์นี้ไม่มีการเชื่อมต่ออินเทอร์เน็ตซึ่งหมายความว่าบางส่วนของคุณสมบัติ เช่น การจัดเก็บข้อมูลภายนอก การแจ้งเตือนเกี่ยวกับการปรับปรุงหรือการติดตั้งแอพพลิเคชันของบุคคลที่สามจะไม่ทำงาน การเข้าถึงไฟล์จากระยะไกลและการส่งอีเมล์แจ้งเตือนอาจจะไม่ทำงาน เราขอแนะนำให้เปิดใช้งานการเชื่อมต่ออินเทอร์เน็ตสำหรับเซิร์ฟเวอร์นี้ถ้าคุณต้องการใช้งานคุณสมบัติทั้งหมด",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "ข้อมูลไดเรกทอรีและไฟล์ของคุณอาจจะสามารถเข้าถึงได้จากอินเทอร์เน็ต ขณะที่ htaccess ไฟล์ไม่ทำงาน เราขอแนะนำให้คุณกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณในทางที่ข้อมูลไดเรกทอรีไม่สามารถเข้าถึงได้หรือคุณย้ายข้อมูลไดเรกทอรีไปยังนอกเว็บเซิร์ฟเวอร์หรือเอกสาร",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "ไม่ได้ตั้งค่าหน่วยความจำแคช เพื่อเพิ่มประสิทธิภาพกรุณาตั้งค่า Memcache ของคุณ สามารถดูข้อมูลเพิ่มเติมได้ที่ <a href=\"{docLink}\">เอกสาร</a>",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ไม่สามารถอ่านโดย PHP ซึ่งมีผลด้านความปลอดภัยเป็นอย่างมาก สามารถดูข้อมูลเพิ่มเติมได้ที่ <a href=\"{docLink}\">เอกสาร</a>",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "PHP รุ่น ({version}) ของคุณ จะไม่ได้รับ <a href=\"{phpLink}\">การสนับสนุนโดย PHP</a> เราขอแนะนำให้คุณอัพเกรดรุ่นของ PHP เพื่อความปลอดภัย",
- "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 href=\"{docLink}\">documentation</a>." : "การกำหนดค่าพร็อกซี่ไม่ถูกต้องหรือคุณกำลังเข้าถึง ownCloud จากพร็อกซี่ที่เชื่อถือได้ ถ้าคุณไม่ได้เข้าถึง ownCloud จากพร็อกซี่ที่เชื่อถือได้ นี้เป็นปัญหาด้านความปลอดภัย คุณอาจถูกโจมดีจากผู้ไม่หวังดี อ่านข้อมูลเพิ่มเติมได้ที่ <a href=\"{docLink}\">เอกสาร</a>",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached เป็นการกำหนดค่าแคช แต่มีโมดูล PHP ของ \"memcache\" ที่ผิดพลาดได้ถูกติดตั้ง \\OC\\Memcache\\Memcached สนับสนุนเฉพาะ \"memcached\" ไม่ใช่ \"memcache\" ดูได้ที่ <a href=\"{wikiLink}\">วิกิพีเดียเกี่ยวกับโมดูล Memcached</a>",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "บางไฟล์ยังไม่ได้ผ่านการตรวจสอบความสมบูรณ์ ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการแก้ไขปัญหานี้สามารถดูได้จาก <a href=\"{docLink}\">เอกสาร</a> (<a href=\"{codeIntegrityDownloadEndpoint}\">รายชื่อของไฟล์ที่ไม่ถูกต้อง...</a> / <a href=\"{rescanEndpoint}\">แสกนอีกครั้ง…</a>)",
"Error occurred while checking server setup" : "เกิดข้อผิดพลาดขณะที่ทำการตรวจสอบการติดตั้งเซิร์ฟเวอร์",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" ไม่ได้กำหนดค่าส่วนหัว Http ให้เท่ากับ \"{expected}\" นี่คือระบบการรักษาความปลอดภัยที่มีศักยภาพหรือลดความเสี่ยงที่จะเกิดขึ้นเราขอแนะนำให้ปรับการตั้งค่านี้",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" ส่วนหัว HTTP ไม่ได้กำหนดค่าให้น้อยกว่า \"{seconds}\" วินาที เพื่อความปลอดภัยที่เพิ่มขึ้นเราขอแนะนำให้เปิดใช้งาน HSTS ที่อธิบายไว้ใน <a href=\"{docUrl}\">เคล็ดลับการรักษาความปลอดภัย</a> ของเรา",
@@ -191,6 +185,7 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "ไม่สามารถตั้งรหัสผ่านใหม่เพราะโทเค็นไม่ถูกต้อง",
"Couldn't reset password because the token is expired" : "ไม่สามารถตั้งค่ารหัสผ่านเพราะโทเค็นหมดอายุ",
"Couldn't send reset email. Please make sure your username is correct." : "ไม่สามารถส่งการตั้งค่าอีเมลใหม่ กรุณาตรวจสอบชื่อผู้ใช้ของคุณให้ถูกต้อง",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "ไม่ควร",
"%s password reset" : "%s ตั้งรหัสผ่านใหม่",
"Use the following link to reset your password: {link}" : "ใช้ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่านของคุณใหม่: {link}",
"New password" : "รหัสผ่านใหม่",
diff --git a/core/l10n/th_TH.json b/core/l10n/th_TH.json
index aa2dbc993de..885cf348fdd 100644
--- a/core/l10n/th_TH.json
+++ b/core/l10n/th_TH.json
@@ -112,12 +112,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "เว็บเซิร์ฟเวอร์ของคุณยังไม่ถูกติดตั้งอย่างถูกต้องเพื่ออนุญาตให้ประสานข้อมูลให้ตรงกัน เนื่องจากอินเตอร์เฟซ WebDAV อาจเสียหาย",
"This server has no working Internet connection. 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." : "เซิร์ฟเวอร์นี้ไม่มีการเชื่อมต่ออินเทอร์เน็ตซึ่งหมายความว่าบางส่วนของคุณสมบัติ เช่น การจัดเก็บข้อมูลภายนอก การแจ้งเตือนเกี่ยวกับการปรับปรุงหรือการติดตั้งแอพพลิเคชันของบุคคลที่สามจะไม่ทำงาน การเข้าถึงไฟล์จากระยะไกลและการส่งอีเมล์แจ้งเตือนอาจจะไม่ทำงาน เราขอแนะนำให้เปิดใช้งานการเชื่อมต่ออินเทอร์เน็ตสำหรับเซิร์ฟเวอร์นี้ถ้าคุณต้องการใช้งานคุณสมบัติทั้งหมด",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "ข้อมูลไดเรกทอรีและไฟล์ของคุณอาจจะสามารถเข้าถึงได้จากอินเทอร์เน็ต ขณะที่ htaccess ไฟล์ไม่ทำงาน เราขอแนะนำให้คุณกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณในทางที่ข้อมูลไดเรกทอรีไม่สามารถเข้าถึงได้หรือคุณย้ายข้อมูลไดเรกทอรีไปยังนอกเว็บเซิร์ฟเวอร์หรือเอกสาร",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "ไม่ได้ตั้งค่าหน่วยความจำแคช เพื่อเพิ่มประสิทธิภาพกรุณาตั้งค่า Memcache ของคุณ สามารถดูข้อมูลเพิ่มเติมได้ที่ <a href=\"{docLink}\">เอกสาร</a>",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ไม่สามารถอ่านโดย PHP ซึ่งมีผลด้านความปลอดภัยเป็นอย่างมาก สามารถดูข้อมูลเพิ่มเติมได้ที่ <a href=\"{docLink}\">เอกสาร</a>",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "PHP รุ่น ({version}) ของคุณ จะไม่ได้รับ <a href=\"{phpLink}\">การสนับสนุนโดย PHP</a> เราขอแนะนำให้คุณอัพเกรดรุ่นของ PHP เพื่อความปลอดภัย",
- "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 href=\"{docLink}\">documentation</a>." : "การกำหนดค่าพร็อกซี่ไม่ถูกต้องหรือคุณกำลังเข้าถึง ownCloud จากพร็อกซี่ที่เชื่อถือได้ ถ้าคุณไม่ได้เข้าถึง ownCloud จากพร็อกซี่ที่เชื่อถือได้ นี้เป็นปัญหาด้านความปลอดภัย คุณอาจถูกโจมดีจากผู้ไม่หวังดี อ่านข้อมูลเพิ่มเติมได้ที่ <a href=\"{docLink}\">เอกสาร</a>",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached เป็นการกำหนดค่าแคช แต่มีโมดูล PHP ของ \"memcache\" ที่ผิดพลาดได้ถูกติดตั้ง \\OC\\Memcache\\Memcached สนับสนุนเฉพาะ \"memcached\" ไม่ใช่ \"memcache\" ดูได้ที่ <a href=\"{wikiLink}\">วิกิพีเดียเกี่ยวกับโมดูล Memcached</a>",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "บางไฟล์ยังไม่ได้ผ่านการตรวจสอบความสมบูรณ์ ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการแก้ไขปัญหานี้สามารถดูได้จาก <a href=\"{docLink}\">เอกสาร</a> (<a href=\"{codeIntegrityDownloadEndpoint}\">รายชื่อของไฟล์ที่ไม่ถูกต้อง...</a> / <a href=\"{rescanEndpoint}\">แสกนอีกครั้ง…</a>)",
"Error occurred while checking server setup" : "เกิดข้อผิดพลาดขณะที่ทำการตรวจสอบการติดตั้งเซิร์ฟเวอร์",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" ไม่ได้กำหนดค่าส่วนหัว Http ให้เท่ากับ \"{expected}\" นี่คือระบบการรักษาความปลอดภัยที่มีศักยภาพหรือลดความเสี่ยงที่จะเกิดขึ้นเราขอแนะนำให้ปรับการตั้งค่านี้",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" ส่วนหัว HTTP ไม่ได้กำหนดค่าให้น้อยกว่า \"{seconds}\" วินาที เพื่อความปลอดภัยที่เพิ่มขึ้นเราขอแนะนำให้เปิดใช้งาน HSTS ที่อธิบายไว้ใน <a href=\"{docUrl}\">เคล็ดลับการรักษาความปลอดภัย</a> ของเรา",
@@ -189,6 +183,7 @@
"Couldn't reset password because the token is invalid" : "ไม่สามารถตั้งรหัสผ่านใหม่เพราะโทเค็นไม่ถูกต้อง",
"Couldn't reset password because the token is expired" : "ไม่สามารถตั้งค่ารหัสผ่านเพราะโทเค็นหมดอายุ",
"Couldn't send reset email. Please make sure your username is correct." : "ไม่สามารถส่งการตั้งค่าอีเมลใหม่ กรุณาตรวจสอบชื่อผู้ใช้ของคุณให้ถูกต้อง",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "ไม่ควร",
"%s password reset" : "%s ตั้งรหัสผ่านใหม่",
"Use the following link to reset your password: {link}" : "ใช้ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่านของคุณใหม่: {link}",
"New password" : "รหัสผ่านใหม่",
diff --git a/core/l10n/tr.js b/core/l10n/tr.js
index 5cef8c0a89f..b71cf996a9e 100644
--- a/core/l10n/tr.js
+++ b/core/l10n/tr.js
@@ -111,11 +111,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web sunucunuz dosya transferi için düzgün bir şekilde yapılandırılmamış. WevDAV arabirimini sorunlu gözüküyor.",
"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." : "Bu sunucunun çalışan bir İnternet bağlantısı yok. Bu, harici depolama alanı bağlama, güncelleştirme bildirimleri veya üçüncü parti uygulama kurma gibi bazı özellikler çalışmayacak demektir. Uzak dosyalara erişim ve e-posta ile bildirim gönderme de çalışmayacaktır. Eğer bu özelliklerin tamamını kullanmak istiyorsanız, sunucu için İnternet bağlantısını etkinleştirmenizi öneriyoruz.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "data dizininiz ve dosyalarınız büyük ihtimalle İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak data dizinine erişimi kapatmanızı veya data dizinini web sunucu belge dizini dışına almanızı şiddetle tavsiye ederiz.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Hafıza önbelleği ayarlanmamış. Performansın artması için mümkünse lütfen bir memcache ayarlayın. Detaylı bilgiye <a href=\"{docLink}\">belgelendirmemizden</a> ulaşabilirsiniz.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Güvenlik sebepleri ile şiddetle kaçınılması gereken /dev/urandom PHP tarafından okunamıyor. Daha fazla bilgi <a href=\"{docLink}\">belgelendirmemizde</a> bulunabilir.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Kullandığınız PHP sürümü ({version}) artık <a href=\"{phpLink}\">PHP tarafından desteklenmiyor</a>. PHP tarafından sağlanan performans ve güvenlik güncellemelerinden faydalanmak için PHP sürümünüzü güncellemenizi öneririz.",
- "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 href=\"{docLink}\">documentation</a>." : "Ters vekil sunucu başlık yapılandırması hatalı veya ownCloud'a güvenilen bir vekil sunucusundan erişiyorsunuz. ownCloud'a güvenilen bir vekil sunucusundan erişmiyorsanız bu bir güvenlik problemidir ve bir saldırganın IP adresinizi taklit etmesine izin verebilir. Ayrıntılı bilgiyi <a href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached ayrılmış önbellek olarak yapılandırıldı, ancak yanlış PHP modülü \"memcache\" olarak yüklendi. \\OC\\Memcache\\Memcached sadece \"memcached\" olarak desteklenir, \"memcache\" olarak kullanamazsınız. <a href=\"{wikiLink}\">memcached wiki about both modules</a> linkine bakınız.",
"Error occurred while checking server setup" : "Sunucu yapılandırması denetlenirken hata oluştu",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP başlığı \"{expected}\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir güvenlik veya gizlilik riski olduğundan bu ayarı düzeltmenizi öneririz.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP başlığı en az \"{seconds}\" saniye olarak ayarlanmış. İyileştirilmiş güvenlik için <a href=\"{docUrl}\">güvenlik ipuçlarımızda</a> belirtilen HSTS etkinleştirmesini öneririz.",
diff --git a/core/l10n/tr.json b/core/l10n/tr.json
index 0be5d60d6d6..48acac9350c 100644
--- a/core/l10n/tr.json
+++ b/core/l10n/tr.json
@@ -109,11 +109,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web sunucunuz dosya transferi için düzgün bir şekilde yapılandırılmamış. WevDAV arabirimini sorunlu gözüküyor.",
"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." : "Bu sunucunun çalışan bir İnternet bağlantısı yok. Bu, harici depolama alanı bağlama, güncelleştirme bildirimleri veya üçüncü parti uygulama kurma gibi bazı özellikler çalışmayacak demektir. Uzak dosyalara erişim ve e-posta ile bildirim gönderme de çalışmayacaktır. Eğer bu özelliklerin tamamını kullanmak istiyorsanız, sunucu için İnternet bağlantısını etkinleştirmenizi öneriyoruz.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "data dizininiz ve dosyalarınız büyük ihtimalle İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak data dizinine erişimi kapatmanızı veya data dizinini web sunucu belge dizini dışına almanızı şiddetle tavsiye ederiz.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Hafıza önbelleği ayarlanmamış. Performansın artması için mümkünse lütfen bir memcache ayarlayın. Detaylı bilgiye <a href=\"{docLink}\">belgelendirmemizden</a> ulaşabilirsiniz.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Güvenlik sebepleri ile şiddetle kaçınılması gereken /dev/urandom PHP tarafından okunamıyor. Daha fazla bilgi <a href=\"{docLink}\">belgelendirmemizde</a> bulunabilir.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Kullandığınız PHP sürümü ({version}) artık <a href=\"{phpLink}\">PHP tarafından desteklenmiyor</a>. PHP tarafından sağlanan performans ve güvenlik güncellemelerinden faydalanmak için PHP sürümünüzü güncellemenizi öneririz.",
- "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 href=\"{docLink}\">documentation</a>." : "Ters vekil sunucu başlık yapılandırması hatalı veya ownCloud'a güvenilen bir vekil sunucusundan erişiyorsunuz. ownCloud'a güvenilen bir vekil sunucusundan erişmiyorsanız bu bir güvenlik problemidir ve bir saldırganın IP adresinizi taklit etmesine izin verebilir. Ayrıntılı bilgiyi <a href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached ayrılmış önbellek olarak yapılandırıldı, ancak yanlış PHP modülü \"memcache\" olarak yüklendi. \\OC\\Memcache\\Memcached sadece \"memcached\" olarak desteklenir, \"memcache\" olarak kullanamazsınız. <a href=\"{wikiLink}\">memcached wiki about both modules</a> linkine bakınız.",
"Error occurred while checking server setup" : "Sunucu yapılandırması denetlenirken hata oluştu",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP başlığı \"{expected}\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir güvenlik veya gizlilik riski olduğundan bu ayarı düzeltmenizi öneririz.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP başlığı en az \"{seconds}\" saniye olarak ayarlanmış. İyileştirilmiş güvenlik için <a href=\"{docUrl}\">güvenlik ipuçlarımızda</a> belirtilen HSTS etkinleştirmesini öneririz.",
diff --git a/core/l10n/uk.js b/core/l10n/uk.js
index 1b2d0e93f7b..8d8d09e37ea 100644
--- a/core/l10n/uk.js
+++ b/core/l10n/uk.js
@@ -102,9 +102,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер ще не налаштований належним чином, щоб дозволити синхронізацію файлів, тому що інтерфейс WebDAV, здається, зіпсований.",
"This server has no working Internet connection. 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." : "Цей сервер не має підключення до Інтернету. Це означає, що деякі з функцій, таких як зовнішнє сховище, повідомлення про оновлення та встановлення сторонніх додатків не будуть працювати. Доступ до файлів віддалено і надсилання повідомлень поштою можуть не працювати. Ми пропонуємо включити підключення до Інтернету для цього сервера, якщо ви хочете, щоб всі функції працювали.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог даних і ваші файли можливо доступні з інтернету. .htaccess файл не працює. Ми наполегливо рекомендуємо вам налаштувати ваш веб сервер таким чином, щоб каталог даних більше не був доступний або перемістіть каталог даних за межі кореня веб сервера.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Кеш пам'яті не налаштований. Задля покращення продуктивності, будь ласка, налаштуйте memcache, якщо є можливість. Додаткову інформацію шукайте у нашій <a href=\"{docLink}\">документації</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom не доступний для читання PHP, що вкрай небажано з міркувань безпеки. Додаткову інформацію шукайте у нашій <a href=\"{docLink}\">документації</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ваша версія PHP ({version}) більше <a href=\"{phpLink}\">не підтримується</a>. Ми рекомендуємо вам оновити версію PHP щоб отримати кращу продуктивність та оновлення безпеки.",
"Error occurred while checking server setup" : "При перевірці налаштувань серверу сталася помилка",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заголовок \"{header}\" не налаштований як \"{expected}\". Це потенційний ризик для безпеки чи приватності і ми радимо виправити це налаштування.",
"Shared" : "Опубліковано",
diff --git a/core/l10n/uk.json b/core/l10n/uk.json
index 8fc606244e2..e329ae9b175 100644
--- a/core/l10n/uk.json
+++ b/core/l10n/uk.json
@@ -100,9 +100,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер ще не налаштований належним чином, щоб дозволити синхронізацію файлів, тому що інтерфейс WebDAV, здається, зіпсований.",
"This server has no working Internet connection. 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." : "Цей сервер не має підключення до Інтернету. Це означає, що деякі з функцій, таких як зовнішнє сховище, повідомлення про оновлення та встановлення сторонніх додатків не будуть працювати. Доступ до файлів віддалено і надсилання повідомлень поштою можуть не працювати. Ми пропонуємо включити підключення до Інтернету для цього сервера, якщо ви хочете, щоб всі функції працювали.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог даних і ваші файли можливо доступні з інтернету. .htaccess файл не працює. Ми наполегливо рекомендуємо вам налаштувати ваш веб сервер таким чином, щоб каталог даних більше не був доступний або перемістіть каталог даних за межі кореня веб сервера.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Кеш пам'яті не налаштований. Задля покращення продуктивності, будь ласка, налаштуйте memcache, якщо є можливість. Додаткову інформацію шукайте у нашій <a href=\"{docLink}\">документації</a>.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom не доступний для читання PHP, що вкрай небажано з міркувань безпеки. Додаткову інформацію шукайте у нашій <a href=\"{docLink}\">документації</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ваша версія PHP ({version}) більше <a href=\"{phpLink}\">не підтримується</a>. Ми рекомендуємо вам оновити версію PHP щоб отримати кращу продуктивність та оновлення безпеки.",
"Error occurred while checking server setup" : "При перевірці налаштувань серверу сталася помилка",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заголовок \"{header}\" не налаштований як \"{expected}\". Це потенційний ризик для безпеки чи приватності і ми радимо виправити це налаштування.",
"Shared" : "Опубліковано",
diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js
index 9c2b8beb0f6..763501f066a 100644
--- a/core/l10n/zh_CN.js
+++ b/core/l10n/zh_CN.js
@@ -111,11 +111,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "由于 WebDAV 接口似乎被破坏,因此你的网页服务器没有正确地设置来允许文件同步。",
"This server has no working Internet connection. 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." : "此服务器上没有可用的因特网连接. 这意味着某些特性将无法工作,例如挂载外部存储器, 提醒更新或安装第三方应用等. 从远程访问文件和发送提醒电子邮件也可能无法工作. 如果你想要ownCloud的所有特性, 我们建议启用此服务器的因特网连接.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "你的数据目录和你的文件可能从互联网被访问到。.htaccess 文件不工作。我们强烈建议你配置你的网页服务器,使数据目录不再可访问,或者将数据目录移动到网页服务器根文档目录之外。",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "内存缓存未配置。如果可用,请配置 memcache 来增强性能。更多信息请查看我们的<a href=\"{docLink}\">文档</a> 。",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom 无法被 PHP 读取,处于安全原因,这是强烈不推荐的。请查看<a href=\"{docLink}\">文档</a>了解详情。",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "你的 PHP 版本 ({version}) 不再被 <a href=\"{phpLink}\"> PHP </a>支持。我们建议您升级您的PHP版本,以便获得 PHP 性能和安全提升。",
- "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 href=\"{docLink}\">documentation</a>." : "反向代理头配置不正确,或者您正从一个受信任的代理访问ownCloud。如果你不是通过受信任的代理访问 ownCloud,这将引发一个安全问题,可能由于 ownCloud IP 地址可见导致欺骗攻击。更多信息可以查看我们的 <a href=\"{docLink}\">文档</a>。",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached 配置为分布式缓存,但是已经安装的 PHP 模块是 \"memcache\" 。 \\OC\\Memcache\\Memcached 仅支持 \"memcached\" 而不是 \"memcache\"。点击 <a href=\"{wikiLink}\"> memcached wiki 了解两个模块的不同</a>.",
"Error occurred while checking server setup" : "当检查服务器启动时出错",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 头部没有配置和 \"{expected}\" 的一样。这是一个潜在的安全或者隐私风险,我们调整这项设置。",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP 严格传输安全(Strict-Transport-Security)报头未配置到至少“{seconds}”秒。处于增强安全性考虑,我们推荐按照<a href=\"{docUrl}\">安全提示</a>启用 HSTS。",
diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json
index aff40a4dc2d..aa24a672d77 100644
--- a/core/l10n/zh_CN.json
+++ b/core/l10n/zh_CN.json
@@ -109,11 +109,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "由于 WebDAV 接口似乎被破坏,因此你的网页服务器没有正确地设置来允许文件同步。",
"This server has no working Internet connection. 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." : "此服务器上没有可用的因特网连接. 这意味着某些特性将无法工作,例如挂载外部存储器, 提醒更新或安装第三方应用等. 从远程访问文件和发送提醒电子邮件也可能无法工作. 如果你想要ownCloud的所有特性, 我们建议启用此服务器的因特网连接.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "你的数据目录和你的文件可能从互联网被访问到。.htaccess 文件不工作。我们强烈建议你配置你的网页服务器,使数据目录不再可访问,或者将数据目录移动到网页服务器根文档目录之外。",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "内存缓存未配置。如果可用,请配置 memcache 来增强性能。更多信息请查看我们的<a href=\"{docLink}\">文档</a> 。",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom 无法被 PHP 读取,处于安全原因,这是强烈不推荐的。请查看<a href=\"{docLink}\">文档</a>了解详情。",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "你的 PHP 版本 ({version}) 不再被 <a href=\"{phpLink}\"> PHP </a>支持。我们建议您升级您的PHP版本,以便获得 PHP 性能和安全提升。",
- "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 href=\"{docLink}\">documentation</a>." : "反向代理头配置不正确,或者您正从一个受信任的代理访问ownCloud。如果你不是通过受信任的代理访问 ownCloud,这将引发一个安全问题,可能由于 ownCloud IP 地址可见导致欺骗攻击。更多信息可以查看我们的 <a href=\"{docLink}\">文档</a>。",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached 配置为分布式缓存,但是已经安装的 PHP 模块是 \"memcache\" 。 \\OC\\Memcache\\Memcached 仅支持 \"memcached\" 而不是 \"memcache\"。点击 <a href=\"{wikiLink}\"> memcached wiki 了解两个模块的不同</a>.",
"Error occurred while checking server setup" : "当检查服务器启动时出错",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 头部没有配置和 \"{expected}\" 的一样。这是一个潜在的安全或者隐私风险,我们调整这项设置。",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP 严格传输安全(Strict-Transport-Security)报头未配置到至少“{seconds}”秒。处于增强安全性考虑,我们推荐按照<a href=\"{docUrl}\">安全提示</a>启用 HSTS。",
diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js
index 9aecca34103..69a62cf8eb3 100644
--- a/core/l10n/zh_TW.js
+++ b/core/l10n/zh_TW.js
@@ -111,10 +111,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "您的網頁伺服器無法提供檔案同步功能,因為 WebDAV 界面有問題",
"This server has no working Internet connection. 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." : "伺服器沒有網際網路連線,有些功能,像是外部儲存、更新版通知將無法運作。從遠端存取資料或是寄送 email 通知可能也無法運作。建議您設定好網際網路連線以使用所有功能。",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "您的資料目錄和您的檔案可能從網路網路被存取,使.htaccess 檔案無法發揮效果,我們強烈建議您配置您的網頁伺服器讓資料目錄不再被訪問存取或者將您的資料目錄移出網頁伺服器根目錄。",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "記憶體快取目前尚未配置,如果可以,請配置memcache提升效能,更多訊息查看 <a href=\"{docLink}\">文件</a>。",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP目前無法讀取/dev/urandom,基於安全因素,強烈建議您改善,更多訊息查看 <a href=\"{docLink}\">文件</a>。",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "您的PHP版本 ({version}) 不再被<a href=\"{phpLink}\">PHP</a>支援,我們建議您升級您的PHP版本來提升效能以及安全性。",
- "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 href=\"{docLink}\">documentation</a>." : "反向代理伺服器標頭配置不正確或者您正從一個受信任的代理伺服器訪問ownCloud,如果您不是從受信任的代理伺服器訪問ownCloud,表示這是一個安全性問題,攻擊者可利用IP詐騙存取ownCloud,更多訊息查看 <a href=\"{docLink}\">文件</a>。",
"Error occurred while checking server setup" : "檢查伺服器設定時發生錯誤",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 標頭配置與 \"{expected}\"不一樣,這是一個潛在安全性或者隱私上的風險,因此我們建議您調整此設定。",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"強制安全傳輸\" HTTP標頭尚未配置至少 \"{seconds}\" 秒會重新定義成HTTPS,如我們的<a href=\"{docUrl}\">安全性提示</a>所述,為了加強安全性,我們建議啟動 HTTP強制安全傳輸。",
diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json
index 024aa29a4d5..66750009ba6 100644
--- a/core/l10n/zh_TW.json
+++ b/core/l10n/zh_TW.json
@@ -109,10 +109,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "您的網頁伺服器無法提供檔案同步功能,因為 WebDAV 界面有問題",
"This server has no working Internet connection. 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." : "伺服器沒有網際網路連線,有些功能,像是外部儲存、更新版通知將無法運作。從遠端存取資料或是寄送 email 通知可能也無法運作。建議您設定好網際網路連線以使用所有功能。",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "您的資料目錄和您的檔案可能從網路網路被存取,使.htaccess 檔案無法發揮效果,我們強烈建議您配置您的網頁伺服器讓資料目錄不再被訪問存取或者將您的資料目錄移出網頁伺服器根目錄。",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "記憶體快取目前尚未配置,如果可以,請配置memcache提升效能,更多訊息查看 <a href=\"{docLink}\">文件</a>。",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP目前無法讀取/dev/urandom,基於安全因素,強烈建議您改善,更多訊息查看 <a href=\"{docLink}\">文件</a>。",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "您的PHP版本 ({version}) 不再被<a href=\"{phpLink}\">PHP</a>支援,我們建議您升級您的PHP版本來提升效能以及安全性。",
- "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 href=\"{docLink}\">documentation</a>." : "反向代理伺服器標頭配置不正確或者您正從一個受信任的代理伺服器訪問ownCloud,如果您不是從受信任的代理伺服器訪問ownCloud,表示這是一個安全性問題,攻擊者可利用IP詐騙存取ownCloud,更多訊息查看 <a href=\"{docLink}\">文件</a>。",
"Error occurred while checking server setup" : "檢查伺服器設定時發生錯誤",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 標頭配置與 \"{expected}\"不一樣,這是一個潛在安全性或者隱私上的風險,因此我們建議您調整此設定。",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"強制安全傳輸\" HTTP標頭尚未配置至少 \"{seconds}\" 秒會重新定義成HTTPS,如我們的<a href=\"{docUrl}\">安全性提示</a>所述,為了加強安全性,我們建議啟動 HTTP強制安全傳輸。",
diff --git a/core/register_command.php b/core/register_command.php
index 16dda55878e..83e92a7e216 100644
--- a/core/register_command.php
+++ b/core/register_command.php
@@ -44,6 +44,7 @@ $application->add(new \OC\Core\Command\Integrity\SignCore(
if (\OC::$server->getConfig()->getSystemValue('installed', false)) {
$application->add(new OC\Core\Command\App\Disable());
$application->add(new OC\Core\Command\App\Enable());
+ $application->add(new OC\Core\Command\App\GetPath());
$application->add(new OC\Core\Command\App\ListApps());
$application->add(new OC\Core\Command\Background\Cron(\OC::$server->getConfig()));
diff --git a/core/templates/404.php b/core/templates/404.php
index c8d16e3e8f7..2b12b12cff7 100644
--- a/core/templates/404.php
+++ b/core/templates/404.php
@@ -16,7 +16,7 @@ if(!isset($_)) {//also provide standalone error page
<li class="error">
<?php p($l->t('File not found')); ?><br>
<p class="hint"><?php p($l->t('The specified document has not been found on the server.')); ?></p>
- <p class="hint"><a href="<?php p(OC_Helper::linkTo('', 'index.php')) ?>"><?php p($l->t('You can click here to return to %s.', array($theme->getName()))); ?></a></p>
+ <p class="hint"><a href="<?php p(\OC::$server->getURLGenerator()->linkTo('', 'index.php')) ?>"><?php p($l->t('You can click here to return to %s.', array($theme->getName()))); ?></a></p>
</li>
</ul>
<?php endif; ?>
diff --git a/core/templates/internalmail.php b/core/templates/internalmail.php
index 0e73a601857..c2d84184d38 100644
--- a/core/templates/internalmail.php
+++ b/core/templates/internalmail.php
@@ -4,7 +4,7 @@
<tr>
<td bgcolor="<?php p($theme->getMailHeaderColor());?>" width="20px">&nbsp;</td>
<td bgcolor="<?php p($theme->getMailHeaderColor());?>">
-<img src="<?php p(OC_Helper::makeURLAbsolute(image_path('', 'logo-mail.gif'))); ?>" alt="<?php p($theme->getName()); ?>"/>
+<img src="<?php p(\OC::$server->getURLGenerator()->getAbsoluteURL(image_path('', 'logo-mail.gif'))); ?>" alt="<?php p($theme->getName()); ?>"/>
</td>
</tr>
<tr><td colspan="2">&nbsp;</td></tr>
diff --git a/core/templates/mail.php b/core/templates/mail.php
index 0e73a601857..c2d84184d38 100644
--- a/core/templates/mail.php
+++ b/core/templates/mail.php
@@ -4,7 +4,7 @@
<tr>
<td bgcolor="<?php p($theme->getMailHeaderColor());?>" width="20px">&nbsp;</td>
<td bgcolor="<?php p($theme->getMailHeaderColor());?>">
-<img src="<?php p(OC_Helper::makeURLAbsolute(image_path('', 'logo-mail.gif'))); ?>" alt="<?php p($theme->getName()); ?>"/>
+<img src="<?php p(\OC::$server->getURLGenerator()->getAbsoluteURL(image_path('', 'logo-mail.gif'))); ?>" alt="<?php p($theme->getName()); ?>"/>
</td>
</tr>
<tr><td colspan="2">&nbsp;</td></tr>
diff --git a/core/templates/untrustedDomain.php b/core/templates/untrustedDomain.php
index 361495636cd..46bad216822 100644
--- a/core/templates/untrustedDomain.php
+++ b/core/templates/untrustedDomain.php
@@ -10,7 +10,7 @@
<?php p($l->t('Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain.')); ?>
<br><br>
<p style="text-align:center;">
- <a href="<?php print_unescaped(OC_Helper::makeURLAbsolute(\OCP\Util::linkToRoute('settings_admin'))); ?>?trustDomain=<?php p($_['domain']); ?>" class="button">
+ <a href="<?php print_unescaped(\OC::$server->getURLGenerator()->getAbsoluteURL(\OCP\Util::linkToRoute('settings_admin'))); ?>?trustDomain=<?php p($_['domain']); ?>" class="button">
<?php p($l->t('Add "%s" as trusted domain', array($_['domain']))); ?>
</a>
</p>
diff --git a/core/vendor/.gitignore b/core/vendor/.gitignore
index 09b6a47c72d..3560e8c8668 100644
--- a/core/vendor/.gitignore
+++ b/core/vendor/.gitignore
@@ -133,3 +133,5 @@ es6-promise/**
!es6-promise/LICENSE
!es6-promise/dist/es6-promise.js
+# base64
+base64/*min.js
diff --git a/core/vendor/base64/.bower.json b/core/vendor/base64/.bower.json
new file mode 100644
index 00000000000..43a7299706b
--- /dev/null
+++ b/core/vendor/base64/.bower.json
@@ -0,0 +1,29 @@
+{
+ "name": "base64",
+ "version": "0.3.0",
+ "description": "Base64 encoding and decoding",
+ "main": "./base64.js",
+ "license": "WTFPL",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/davidchambers/Base64.js.git"
+ },
+ "ignore": [
+ "**/.*",
+ "Makefile",
+ "coverage/",
+ "scripts/",
+ "test/"
+ ],
+ "homepage": "https://github.com/davidchambers/Base64.js",
+ "_release": "0.3.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "0.3.0",
+ "commit": "772df096a5ffe983f40202684ad45eed1e0e2d59"
+ },
+ "_source": "git://github.com/davidchambers/Base64.js.git",
+ "_target": "~0.3.0",
+ "_originalSource": "base64",
+ "_direct": true
+} \ No newline at end of file
diff --git a/core/vendor/base64/LICENSE b/core/vendor/base64/LICENSE
new file mode 100644
index 00000000000..483276716db
--- /dev/null
+++ b/core/vendor/base64/LICENSE
@@ -0,0 +1,14 @@
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ Version 2, December 2004
+
+ Copyright (c) 2011..2012 David Chambers <dc@hashify.me>
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
diff --git a/core/vendor/base64/base64.js b/core/vendor/base64/base64.js
new file mode 100644
index 00000000000..b82dded62c2
--- /dev/null
+++ b/core/vendor/base64/base64.js
@@ -0,0 +1,61 @@
+;(function () {
+
+ var object = typeof exports != 'undefined' ? exports : this; // #8: web workers
+ var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+ function InvalidCharacterError(message) {
+ this.message = message;
+ }
+ InvalidCharacterError.prototype = new Error;
+ InvalidCharacterError.prototype.name = 'InvalidCharacterError';
+
+ // encoder
+ // [https://gist.github.com/999166] by [https://github.com/nignag]
+ object.btoa || (
+ object.btoa = function (input) {
+ var str = String(input);
+ for (
+ // initialize result and counter
+ var block, charCode, idx = 0, map = chars, output = '';
+ // if the next str index does not exist:
+ // change the mapping table to "="
+ // check if d has no fractional digits
+ str.charAt(idx | 0) || (map = '=', idx % 1);
+ // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
+ output += map.charAt(63 & block >> 8 - idx % 1 * 8)
+ ) {
+ charCode = str.charCodeAt(idx += 3/4);
+ if (charCode > 0xFF) {
+ throw new InvalidCharacterError("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");
+ }
+ block = block << 8 | charCode;
+ }
+ return output;
+ });
+
+ // decoder
+ // [https://gist.github.com/1020396] by [https://github.com/atk]
+ object.atob || (
+ object.atob = function (input) {
+ var str = String(input).replace(/=+$/, '');
+ if (str.length % 4 == 1) {
+ throw new InvalidCharacterError("'atob' failed: The string to be decoded is not correctly encoded.");
+ }
+ for (
+ // initialize result and counters
+ var bc = 0, bs, buffer, idx = 0, output = '';
+ // get next character
+ buffer = str.charAt(idx++);
+ // character found in table? initialize bit storage and add its ascii value;
+ ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,
+ // and if not first of each 4 characters,
+ // convert the first 8 bits to one ascii character
+ bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
+ ) {
+ // try to find character in table (0-63, not found => -1)
+ buffer = chars.indexOf(buffer);
+ }
+ return output;
+ });
+
+}());
diff --git a/issue_template.md b/issue_template.md
index 3859ea1c414..0295eb9c336 100644
--- a/issue_template.md
+++ b/issue_template.md
@@ -34,7 +34,7 @@ from within your ownCloud installation folder
```
If you have access to your command line run e.g.:
-sudo -u www-data php occ config:list system --public
+sudo -u www-data php occ config:list system
from within your ownCloud installation folder
or
@@ -52,16 +52,14 @@ Insert your config.php content here
#### LDAP configuration (delete this part if not used)
```
-On ownCloud 7+ with access to your command line run e.g.:
+With access to your command line run e.g.:
sudo -u www-data php occ ldap:show-config
from within your ownCloud installation folder
-On ownCloud 6 with access to your command line run e.g.:
-sqlite3 data/owncloud.db or mysql -u root -p owncloud
-then execute: select * from oc_appconfig where appid='user_ldap';
-
Without access to your command line download the data/owncloud.db to your local
-computer or access your SQL server remotely and run the select query above.
+computer or access your SQL server remotely and run the select query:
+SELECT * FROM `oc_appconfig` WHERE `appid` = 'user_ldap';
+
Eventually replace sensitive data as the name/IP-address of your LDAP server or groups.
```
diff --git a/lib/base.php b/lib/base.php
index 038c259ecf6..34cbfe3066c 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -113,6 +113,11 @@ class OC {
public static $server = null;
/**
+ * @var \OC\Config
+ */
+ private static $config = null;
+
+ /**
* @throws \RuntimeException when the 3rdparty directory is missing or
* the app path list is empty or contains an invalid path
*/
@@ -124,7 +129,7 @@ class OC {
} else {
self::$configDir = OC::$SERVERROOT . '/config/';
}
- OC_Config::$object = new \OC\Config(self::$configDir);
+ self::$config = new \OC\Config(self::$configDir);
OC::$SUBURI = str_replace("\\", "/", substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen(OC::$SERVERROOT)));
/**
@@ -137,7 +142,7 @@ class OC {
'SCRIPT_FILENAME' => $_SERVER['SCRIPT_FILENAME'],
],
];
- $fakeRequest = new \OC\AppFramework\Http\Request($params, null, new \OC\AllConfig(new \OC\SystemConfig()));
+ $fakeRequest = new \OC\AppFramework\Http\Request($params, null, new \OC\AllConfig(new \OC\SystemConfig(self::$config)));
$scriptName = $fakeRequest->getScriptName();
if (substr($scriptName, -1) == '/') {
$scriptName .= 'index.php';
@@ -152,7 +157,7 @@ class OC {
if (OC::$CLI) {
- OC::$WEBROOT = OC_Config::getValue('overwritewebroot', '');
+ OC::$WEBROOT = self::$config->getValue('overwritewebroot', '');
} else {
if (substr($scriptName, 0 - strlen(OC::$SUBURI)) === OC::$SUBURI) {
OC::$WEBROOT = substr($scriptName, 0, 0 - strlen(OC::$SUBURI));
@@ -165,7 +170,7 @@ class OC {
// This most likely means that we are calling from CLI.
// However some cron jobs still need to generate
// a web URL, so we use overwritewebroot as a fallback.
- OC::$WEBROOT = OC_Config::getValue('overwritewebroot', '');
+ OC::$WEBROOT = self::$config->getValue('overwritewebroot', '');
}
// Resolve /owncloud to /owncloud/ to ensure to always have a trailing
@@ -178,8 +183,8 @@ class OC {
}
// search the 3rdparty folder
- OC::$THIRDPARTYROOT = OC_Config::getValue('3rdpartyroot', null);
- OC::$THIRDPARTYWEBROOT = OC_Config::getValue('3rdpartyurl', null);
+ OC::$THIRDPARTYROOT = self::$config->getValue('3rdpartyroot', null);
+ OC::$THIRDPARTYWEBROOT = self::$config->getValue('3rdpartyurl', null);
if (empty(OC::$THIRDPARTYROOT) && empty(OC::$THIRDPARTYWEBROOT)) {
if (file_exists(OC::$SERVERROOT . '/3rdparty')) {
@@ -197,7 +202,7 @@ class OC {
}
// search the apps folder
- $config_paths = OC_Config::getValue('apps_paths', array());
+ $config_paths = self::$config->getValue('apps_paths', array());
if (!empty($config_paths)) {
foreach ($config_paths as $paths) {
if (isset($paths['url']) && isset($paths['path'])) {
@@ -372,7 +377,7 @@ class OC {
// check whether this is a core update or apps update
$installedVersion = $systemConfig->getValue('version', '0.0.0');
- $currentVersion = implode('.', OC_Util::getVersion());
+ $currentVersion = implode('.', \OCP\Util::getVersion());
$appManager = \OC::$server->getAppManager();
@@ -387,7 +392,7 @@ class OC {
}
// get third party apps
- $ocVersion = OC_Util::getVersion();
+ $ocVersion = \OCP\Util::getVersion();
$tmpl->assign('appsToUpgrade', $appManager->getAppsNeedingUpgrade($ocVersion));
$tmpl->assign('incompatibleAppsList', $appManager->getIncompatibleApps($ocVersion));
$tmpl->assign('productName', 'ownCloud'); // for now
@@ -517,7 +522,7 @@ class OC {
}
// setup the basic server
- self::$server = new \OC\Server(\OC::$WEBROOT);
+ self::$server = new \OC\Server(\OC::$WEBROOT, self::$config);
\OC::$server->getEventLogger()->log('autoloader', 'Autoloader', $loaderStart, $loaderEnd);
\OC::$server->getEventLogger()->start('boot', 'Initialize');
@@ -875,7 +880,7 @@ class OC {
// Handle redirect URL for logged in users
if (isset($_REQUEST['redirect_url']) && OC_User::isLoggedIn()) {
- $location = OC_Helper::makeURLAbsolute(urldecode($_REQUEST['redirect_url']));
+ $location = \OC::$server->getURLGenerator()->getAbsoluteURL(urldecode($_REQUEST['redirect_url']));
// Deny the redirect if the URL contains a @
// This prevents unvalidated redirects like ?redirect_url=:user@domain.com
@@ -1055,7 +1060,7 @@ class OC {
return false;
}
- if(!OC_Util::isCallRegistered()) {
+ if(!(\OC::$server->getRequest()->passesCSRFCheck())) {
return false;
}
OC_App::loadApps();
diff --git a/lib/l10n/es.js b/lib/l10n/es.js
index 8f554001cfd..b37631114a0 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -147,6 +147,8 @@ OC.L10N.register(
"Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Verifique que el directorio de datos contiene un archivo \".ocdata\" en su directorio raíz.",
"Could not obtain lock type %d on \"%s\"." : "No se pudo realizar el bloqueo %d en \"%s\".",
+ "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s",
+ "Storage incomplete configuration. %s" : "Configuración de almacenamiento incompleta. %s",
"Storage not available" : "Almacenamiento no disponible"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index 94ff1d3db2c..9be893bbb60 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -145,6 +145,8 @@
"Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Verifique que el directorio de datos contiene un archivo \".ocdata\" en su directorio raíz.",
"Could not obtain lock type %d on \"%s\"." : "No se pudo realizar el bloqueo %d en \"%s\".",
+ "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s",
+ "Storage incomplete configuration. %s" : "Configuración de almacenamiento incompleta. %s",
"Storage not available" : "Almacenamiento no disponible"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/et_EE.js b/lib/l10n/et_EE.js
index eaf98861f23..ab56f6f920a 100644
--- a/lib/l10n/et_EE.js
+++ b/lib/l10n/et_EE.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"web services under your control" : "veebitenused sinu kontrolli all",
"Empty filename is not allowed" : "Tühi failinimi pole lubatud",
"Dot files are not allowed" : "Punktiga failid pole lubatud",
+ "File name is a reserved word" : "Failinimi sisaldab keelatud sõna",
"File name contains at least one invalid character" : "Faili nimesonvähemalt üks keelatud märk",
"File name is too long" : "Faili nimi on liiga pikk",
"Can't read file" : "Faili lugemine ebaõnnestus",
diff --git a/lib/l10n/et_EE.json b/lib/l10n/et_EE.json
index 7d28a75c59e..c67c0578626 100644
--- a/lib/l10n/et_EE.json
+++ b/lib/l10n/et_EE.json
@@ -31,6 +31,7 @@
"web services under your control" : "veebitenused sinu kontrolli all",
"Empty filename is not allowed" : "Tühi failinimi pole lubatud",
"Dot files are not allowed" : "Punktiga failid pole lubatud",
+ "File name is a reserved word" : "Failinimi sisaldab keelatud sõna",
"File name contains at least one invalid character" : "Faili nimesonvähemalt üks keelatud märk",
"File name is too long" : "Faili nimi on liiga pikk",
"Can't read file" : "Faili lugemine ebaõnnestus",
diff --git a/lib/l10n/fi_FI.js b/lib/l10n/fi_FI.js
index d4035633f08..16eacd0366a 100644
--- a/lib/l10n/fi_FI.js
+++ b/lib/l10n/fi_FI.js
@@ -87,6 +87,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Kohteen %s jakaminen epäonnistui, koska käyttäjä %s ei ole ryhmän %s jäsen",
"You need to provide a password to create a public link, only protected links are allowed" : "Anna salasana luodaksesi julkisen linkin. Vain suojatut linkit ovat sallittuja",
"Sharing %s failed, because sharing with links is not allowed" : "Kohteen %s jakaminen epäonnistui, koska jakaminen linkkejä käyttäen ei ole sallittu",
+ "Not allowed to create a federated share with the same user" : "Saman käyttäjän kanssa ei ole sallittua luoda federoitua jakoa",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Kohteen %s jakaminen epäonnistui, kohdetta %s ei löytynyt. Kenties palvelin ei ole juuri nyt tavoitettavissa.",
"Setting permissions for %s failed, because the item was not found" : "Kohteen %s oikeuksien asettaminen epäonnistui, koska kohdetta ei löytynyt",
"Cannot set expiration date. Expiration date is in the past" : "Vanhentumispäivää ei voi asettaa. Vanhentumispäivä on jo mennyt",
diff --git a/lib/l10n/fi_FI.json b/lib/l10n/fi_FI.json
index b961e6b862d..738ef893d72 100644
--- a/lib/l10n/fi_FI.json
+++ b/lib/l10n/fi_FI.json
@@ -85,6 +85,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Kohteen %s jakaminen epäonnistui, koska käyttäjä %s ei ole ryhmän %s jäsen",
"You need to provide a password to create a public link, only protected links are allowed" : "Anna salasana luodaksesi julkisen linkin. Vain suojatut linkit ovat sallittuja",
"Sharing %s failed, because sharing with links is not allowed" : "Kohteen %s jakaminen epäonnistui, koska jakaminen linkkejä käyttäen ei ole sallittu",
+ "Not allowed to create a federated share with the same user" : "Saman käyttäjän kanssa ei ole sallittua luoda federoitua jakoa",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Kohteen %s jakaminen epäonnistui, kohdetta %s ei löytynyt. Kenties palvelin ei ole juuri nyt tavoitettavissa.",
"Setting permissions for %s failed, because the item was not found" : "Kohteen %s oikeuksien asettaminen epäonnistui, koska kohdetta ei löytynyt",
"Cannot set expiration date. Expiration date is in the past" : "Vanhentumispäivää ei voi asettaa. Vanhentumispäivä on jo mennyt",
diff --git a/lib/l10n/it.js b/lib/l10n/it.js
index ed9f01c8a39..5c611b750f4 100644
--- a/lib/l10n/it.js
+++ b/lib/l10n/it.js
@@ -96,6 +96,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Condivisione di %s non riuscita, poiché %s non appartiene al gruppo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Devi fornire una password per creare un collegamento pubblico, sono consentiti solo i collegamenti protetti",
"Sharing %s failed, because sharing with links is not allowed" : "Condivisione di %s non riuscita, poiché i collegamenti non sono consentiti",
+ "Not allowed to create a federated share with the same user" : "Non è consentito creare una condivisione federata con lo stesso utente",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "La condivisione di %s non è riuscita, impossibile trovare %s, è probabile che il server non sia al momento raggiungibile.",
"Share type %s is not valid for %s" : "Il tipo di condivisione %s non è valido per %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Impostazione permessi per %s non riuscita, poiché i permessi superano i permessi accordati a %s",
diff --git a/lib/l10n/it.json b/lib/l10n/it.json
index 4a6735185d6..93d4c6a5c72 100644
--- a/lib/l10n/it.json
+++ b/lib/l10n/it.json
@@ -94,6 +94,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Condivisione di %s non riuscita, poiché %s non appartiene al gruppo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Devi fornire una password per creare un collegamento pubblico, sono consentiti solo i collegamenti protetti",
"Sharing %s failed, because sharing with links is not allowed" : "Condivisione di %s non riuscita, poiché i collegamenti non sono consentiti",
+ "Not allowed to create a federated share with the same user" : "Non è consentito creare una condivisione federata con lo stesso utente",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "La condivisione di %s non è riuscita, impossibile trovare %s, è probabile che il server non sia al momento raggiungibile.",
"Share type %s is not valid for %s" : "Il tipo di condivisione %s non è valido per %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Impostazione permessi per %s non riuscita, poiché i permessi superano i permessi accordati a %s",
diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js
index 21375b53925..a0619055f3a 100644
--- a/lib/l10n/ja.js
+++ b/lib/l10n/ja.js
@@ -96,6 +96,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "%s を共有できませんでした。%s は、グループ %s のメンバーではありません。",
"You need to provide a password to create a public link, only protected links are allowed" : "公開用リンクの作成にはパスワードの設定が必要です",
"Sharing %s failed, because sharing with links is not allowed" : "%s を共有できませんでした。リンクでの共有は許可されていません。",
+ "Not allowed to create a federated share with the same user" : "同じユーザーでフェデレーション共有を作成することは出来ません",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s を共有できませんでした。%s が見つかりませんでした。現在サーバーに接続できないようです。",
"Share type %s is not valid for %s" : "%s の共有方法は、%s には適用できません。",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "%s を共有できませんでした。%s に許可されている権限を越えています。",
@@ -147,6 +148,10 @@ OC.L10N.register(
"Data directory (%s) is invalid" : "データディレクトリ (%s) は無効です",
"Please check that the data directory contains a file \".ocdata\" in its root." : "データディレクトリに \".ocdata\" ファイルが含まれていることを確認してください。",
"Could not obtain lock type %d on \"%s\"." : "\"%s\" で %d タイプのロックを取得できませんでした。",
- "Storage not available" : "ストレージが利用できません"
+ "Storage unauthorized. %s" : "権限のないストレージです。 %s",
+ "Storage incomplete configuration. %s" : "設定が未完了のストレージです。 %s",
+ "Storage connection error. %s" : "ストレージへの接続エラー。 %s",
+ "Storage not available" : "ストレージが利用できません",
+ "Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json
index 204eb63787b..681b479ff23 100644
--- a/lib/l10n/ja.json
+++ b/lib/l10n/ja.json
@@ -94,6 +94,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "%s を共有できませんでした。%s は、グループ %s のメンバーではありません。",
"You need to provide a password to create a public link, only protected links are allowed" : "公開用リンクの作成にはパスワードの設定が必要です",
"Sharing %s failed, because sharing with links is not allowed" : "%s を共有できませんでした。リンクでの共有は許可されていません。",
+ "Not allowed to create a federated share with the same user" : "同じユーザーでフェデレーション共有を作成することは出来ません",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s を共有できませんでした。%s が見つかりませんでした。現在サーバーに接続できないようです。",
"Share type %s is not valid for %s" : "%s の共有方法は、%s には適用できません。",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "%s を共有できませんでした。%s に許可されている権限を越えています。",
@@ -145,6 +146,10 @@
"Data directory (%s) is invalid" : "データディレクトリ (%s) は無効です",
"Please check that the data directory contains a file \".ocdata\" in its root." : "データディレクトリに \".ocdata\" ファイルが含まれていることを確認してください。",
"Could not obtain lock type %d on \"%s\"." : "\"%s\" で %d タイプのロックを取得できませんでした。",
- "Storage not available" : "ストレージが利用できません"
+ "Storage unauthorized. %s" : "権限のないストレージです。 %s",
+ "Storage incomplete configuration. %s" : "設定が未完了のストレージです。 %s",
+ "Storage connection error. %s" : "ストレージへの接続エラー。 %s",
+ "Storage not available" : "ストレージが利用できません",
+ "Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js
index f4201778f7e..bb3bd551841 100644
--- a/lib/l10n/nl.js
+++ b/lib/l10n/nl.js
@@ -96,6 +96,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Delen van %s is mislukt, omdat %s geen lid is van groep %s",
"You need to provide a password to create a public link, only protected links are allowed" : "U moet een wachtwoord verstrekken om een openbare koppeling te maken, alleen beschermde links zijn toegestaan",
"Sharing %s failed, because sharing with links is not allowed" : "Delen van %s is mislukt, omdat het delen met links niet is toegestaan",
+ "Not allowed to create a federated share with the same user" : "Het is niet toegestaan om een gefedereerde share met dezelfde gebruikersserver te maken",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Delen van %s mislukt, kon %s niet vinden, misschien is de server niet bereikbaar.",
"Share type %s is not valid for %s" : "Delen van type %s is niet geldig voor %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Instellen van de permissies voor %s is mislukt, omdat de permissies hoger zijn dan de aan %s toegekende permissies",
diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json
index c8981f8fd4c..8388c0a502e 100644
--- a/lib/l10n/nl.json
+++ b/lib/l10n/nl.json
@@ -94,6 +94,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Delen van %s is mislukt, omdat %s geen lid is van groep %s",
"You need to provide a password to create a public link, only protected links are allowed" : "U moet een wachtwoord verstrekken om een openbare koppeling te maken, alleen beschermde links zijn toegestaan",
"Sharing %s failed, because sharing with links is not allowed" : "Delen van %s is mislukt, omdat het delen met links niet is toegestaan",
+ "Not allowed to create a federated share with the same user" : "Het is niet toegestaan om een gefedereerde share met dezelfde gebruikersserver te maken",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Delen van %s mislukt, kon %s niet vinden, misschien is de server niet bereikbaar.",
"Share type %s is not valid for %s" : "Delen van type %s is niet geldig voor %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Instellen van de permissies voor %s is mislukt, omdat de permissies hoger zijn dan de aan %s toegekende permissies",
diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js
index 2595d5dfd38..f4e52410ba1 100644
--- a/lib/l10n/pt_BR.js
+++ b/lib/l10n/pt_BR.js
@@ -96,6 +96,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Compartilhamento %s falhou, porque %s não é membro do grupo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Você precisa fornecer uma senha para criar um link público, apenas links protegidos são permitidos",
"Sharing %s failed, because sharing with links is not allowed" : "Compartilhamento %s falhou, porque compartilhamento com links não é permitido",
+ "Not allowed to create a federated share with the same user" : "Não é permitido criar um compartilhamento associado com o mesmo usuário",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou, porque não foi possível encontrar %s, talvez o servidor esteja inacessível.",
"Share type %s is not valid for %s" : "Tipo de compartilhamento %s não é válido para %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Definir permissões para %s falhou, porque as permissões excedem as permissões concedidas a %s",
diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json
index 0da54181b3f..80fad95147c 100644
--- a/lib/l10n/pt_BR.json
+++ b/lib/l10n/pt_BR.json
@@ -94,6 +94,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Compartilhamento %s falhou, porque %s não é membro do grupo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Você precisa fornecer uma senha para criar um link público, apenas links protegidos são permitidos",
"Sharing %s failed, because sharing with links is not allowed" : "Compartilhamento %s falhou, porque compartilhamento com links não é permitido",
+ "Not allowed to create a federated share with the same user" : "Não é permitido criar um compartilhamento associado com o mesmo usuário",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou, porque não foi possível encontrar %s, talvez o servidor esteja inacessível.",
"Share type %s is not valid for %s" : "Tipo de compartilhamento %s não é válido para %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Definir permissões para %s falhou, porque as permissões excedem as permissões concedidas a %s",
diff --git a/lib/l10n/sq.js b/lib/l10n/sq.js
index 386cd1adeff..3318d18ad38 100644
--- a/lib/l10n/sq.js
+++ b/lib/l10n/sq.js
@@ -96,6 +96,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Ndarja e %s me të tjerët dështoi, ngaqë %s s’është anëtar i grupit %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Lypset të jepni një fjalëkalim që të krijoni një lidhje publike, lejohen vetëm lidhje të mbrojtura",
"Sharing %s failed, because sharing with links is not allowed" : "Ndarja e %s me të tjerët dështoi, ngaqë nuk lejohet ndarja me lidhje",
+ "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",
"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.",
"Share type %s is not valid for %s" : "Lloji i ndarjes %s s’është i vlefshëm për %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Caktimi i lejeve për %s dështoi, ngaqë lejet tejkalojnë lejet e akorduara për %s",
diff --git a/lib/l10n/sq.json b/lib/l10n/sq.json
index 3cf25314937..d902d07ee1b 100644
--- a/lib/l10n/sq.json
+++ b/lib/l10n/sq.json
@@ -94,6 +94,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Ndarja e %s me të tjerët dështoi, ngaqë %s s’është anëtar i grupit %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Lypset të jepni një fjalëkalim që të krijoni një lidhje publike, lejohen vetëm lidhje të mbrojtura",
"Sharing %s failed, because sharing with links is not allowed" : "Ndarja e %s me të tjerët dështoi, ngaqë nuk lejohet ndarja me lidhje",
+ "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",
"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.",
"Share type %s is not valid for %s" : "Lloji i ndarjes %s s’është i vlefshëm për %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Caktimi i lejeve për %s dështoi, ngaqë lejet tejkalojnë lejet e akorduara për %s",
diff --git a/lib/l10n/th_TH.js b/lib/l10n/th_TH.js
index 4da409b7d88..da84e9758c3 100644
--- a/lib/l10n/th_TH.js
+++ b/lib/l10n/th_TH.js
@@ -147,6 +147,8 @@ OC.L10N.register(
"Data directory (%s) is invalid" : "ไดเรกทอรีข้อมูล (%s) ไม่ถูกต้อง",
"Please check that the data directory contains a file \".ocdata\" in its root." : "กรุณาตรวจสอบว่าไดเรกทอรีข้อมูลมีแฟ้ม \".ocdata\" อยู่ในราก",
"Could not obtain lock type %d on \"%s\"." : "ไม่สามารถรับล็อคชนิด %d บน \"%s\"",
+ "Storage unauthorized. %s" : "การจัดเก็บข้อมูลไม่ได้รับอนุญาต %s",
+ "Storage incomplete configuration. %s" : "การตั้งค่าการจัดเก็บข้อมูลไม่สำเร็จ %s",
"Storage not available" : "ไม่สามารถใช้พื้นที่จัดเก็บข้อมูลได้"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/th_TH.json b/lib/l10n/th_TH.json
index a21802be63a..8a951a1468d 100644
--- a/lib/l10n/th_TH.json
+++ b/lib/l10n/th_TH.json
@@ -145,6 +145,8 @@
"Data directory (%s) is invalid" : "ไดเรกทอรีข้อมูล (%s) ไม่ถูกต้อง",
"Please check that the data directory contains a file \".ocdata\" in its root." : "กรุณาตรวจสอบว่าไดเรกทอรีข้อมูลมีแฟ้ม \".ocdata\" อยู่ในราก",
"Could not obtain lock type %d on \"%s\"." : "ไม่สามารถรับล็อคชนิด %d บน \"%s\"",
+ "Storage unauthorized. %s" : "การจัดเก็บข้อมูลไม่ได้รับอนุญาต %s",
+ "Storage incomplete configuration. %s" : "การตั้งค่าการจัดเก็บข้อมูลไม่สำเร็จ %s",
"Storage not available" : "ไม่สามารถใช้พื้นที่จัดเก็บข้อมูลได้"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/private/app.php b/lib/private/app.php
index abf12264c58..5f6ca9596c8 100644
--- a/lib/private/app.php
+++ b/lib/private/app.php
@@ -96,7 +96,7 @@ class OC_App {
* if $types is set, only apps of those types will be loaded
*/
public static function loadApps($types = null) {
- if (OC_Config::getValue('maintenance', false)) {
+ if (\OC::$server->getSystemConfig()->getValue('maintenance', false)) {
return false;
}
// Load the enabled apps here
@@ -239,7 +239,7 @@ class OC_App {
* @return string[]
*/
public static function getEnabledApps($forceRefresh = false, $all = false) {
- if (!OC_Config::getValue('installed', false)) {
+ if (!\OC::$server->getSystemConfig()->getValue('installed', false)) {
return array();
}
// in incognito mode or when logged out, $user will be false,
@@ -318,8 +318,8 @@ class OC_App {
\OC::$server->getConfig(),
\OC::$server->getLogger()
);
- $appData = $ocsClient->getApplication($app, \OC_Util::getVersion());
- $download= $ocsClient->getApplicationDownload($app, \OC_Util::getVersion());
+ $appData = $ocsClient->getApplication($app, \OCP\Util::getVersion());
+ $download= $ocsClient->getApplicationDownload($app, \OCP\Util::getVersion());
if(isset($download['downloadlink']) and $download['downloadlink']!='') {
// Replace spaces in download link without encoding entire URL
$download['downloadlink'] = str_replace(' ', '%20', $download['downloadlink']);
@@ -374,13 +374,13 @@ class OC_App {
$settings = array();
// by default, settings only contain the help menu
if (OC_Util::getEditionString() === '' &&
- OC_Config::getValue('knowledgebaseenabled', true) == true
+ \OC::$server->getSystemConfig()->getValue('knowledgebaseenabled', true) == true
) {
$settings = array(
array(
"id" => "help",
"order" => 1000,
- "href" => OC_Helper::linkToRoute("settings_help"),
+ "href" => \OC::$server->getURLGenerator()->linkToRoute('settings_help'),
"name" => $l->t("Help"),
"icon" => OC_Helper::imagePath("settings", "help.svg")
)
@@ -393,7 +393,7 @@ class OC_App {
$settings[] = array(
"id" => "personal",
"order" => 1,
- "href" => OC_Helper::linkToRoute("settings_personal"),
+ "href" => \OC::$server->getURLGenerator()->linkToRoute('settings_personal'),
"name" => $l->t("Personal"),
"icon" => OC_Helper::imagePath("settings", "personal.svg")
);
@@ -409,7 +409,7 @@ class OC_App {
$settings[] = array(
"id" => "core_users",
"order" => 2,
- "href" => OC_Helper::linkToRoute("settings_users"),
+ "href" => \OC::$server->getURLGenerator()->linkToRoute('settings_users'),
"name" => $l->t("Users"),
"icon" => OC_Helper::imagePath("settings", "users.svg")
);
@@ -421,7 +421,7 @@ class OC_App {
$settings[] = array(
"id" => "admin",
"order" => 1000,
- "href" => OC_Helper::linkToRoute("settings_admin"),
+ "href" => \OC::$server->getURLGenerator()->linkToRoute('settings_admin'),
"name" => $l->t("Admin"),
"icon" => OC_Helper::imagePath("settings", "admin.svg")
);
@@ -455,7 +455,7 @@ class OC_App {
* @return string|false
*/
public static function getInstallPath() {
- if (OC_Config::getValue('appstoreenabled', true) == false) {
+ if (\OC::$server->getSystemConfig()->getValue('appstoreenabled', true) == false) {
return false;
}
@@ -880,7 +880,7 @@ class OC_App {
if (is_null($category)) {
- $categoryNames = $ocsClient->getCategories(\OC_Util::getVersion());
+ $categoryNames = $ocsClient->getCategories(\OCP\Util::getVersion());
if (is_array($categoryNames)) {
// Check that categories of apps were retrieved correctly
if (!$categories = array_keys($categoryNames)) {
@@ -892,7 +892,7 @@ class OC_App {
}
$page = 0;
- $remoteApps = $ocsClient->getApplications($categories, $page, $filter, \OC_Util::getVersion());
+ $remoteApps = $ocsClient->getApplications($categories, $page, $filter, \OCP\Util::getVersion());
$apps = [];
$i = 0;
$l = \OC::$server->getL10N('core');
@@ -1050,7 +1050,7 @@ class OC_App {
$config,
\OC::$server->getLogger()
);
- $appData = $ocsClient->getApplication($app, \OC_Util::getVersion());
+ $appData = $ocsClient->getApplication($app, \OCP\Util::getVersion());
// check if app is a shipped app or not. OCS apps have an integer as id, shipped apps use a string
if (!is_numeric($app)) {
@@ -1080,7 +1080,7 @@ class OC_App {
if ($app !== false) {
// check if the app is compatible with this version of ownCloud
$info = self::getAppInfo($app);
- $version = OC_Util::getVersion();
+ $version = \OCP\Util::getVersion();
if (!self::isAppCompatible($version, $info)) {
throw new \Exception(
$l->t('App "%s" cannot be installed because it is not compatible with this version of ownCloud.',
diff --git a/lib/private/app/appmanager.php b/lib/private/app/appmanager.php
index f826c8ba0c7..8ae93f98832 100644
--- a/lib/private/app/appmanager.php
+++ b/lib/private/app/appmanager.php
@@ -148,6 +148,13 @@ class AppManager implements IAppManager {
return false;
} else {
$groupIds = json_decode($enabled);
+
+ if (!is_array($groupIds)) {
+ $jsonError = json_last_error();
+ \OC::$server->getLogger()->warning('AppManger::checkAppForUser - can\'t decode group IDs: ' . print_r($enabled, true) . ' - json error code: ' . $jsonError, ['app' => 'lib']);
+ return false;
+ }
+
$userGroups = $this->groupManager->getUserGroupIds($user);
foreach ($userGroups as $groupId) {
if (array_search($groupId, $groupIds) !== false) {
diff --git a/lib/private/app/infoparser.php b/lib/private/app/infoparser.php
index 22f705884bc..a84163612e8 100644
--- a/lib/private/app/infoparser.php
+++ b/lib/private/app/infoparser.php
@@ -59,6 +59,7 @@ class InfoParser {
$xml = simplexml_load_file($file);
libxml_disable_entity_loader($loadEntities);
if ($xml == false) {
+ libxml_clear_errors();
return null;
}
$array = $this->xmlToArray($xml);
diff --git a/lib/private/app/platform.php b/lib/private/app/platform.php
index f433ecd9f9e..c16f050e13c 100644
--- a/lib/private/app/platform.php
+++ b/lib/private/app/platform.php
@@ -52,7 +52,7 @@ class Platform {
* @return string
*/
public function getOcVersion() {
- $v = OC_Util::getVersion();
+ $v = \OCP\Util::getVersion();
return join('.', $v);
}
diff --git a/lib/private/appframework/app.php b/lib/private/appframework/app.php
index 0188d221be1..5cad32bbd09 100644
--- a/lib/private/appframework/app.php
+++ b/lib/private/appframework/app.php
@@ -26,6 +26,7 @@
namespace OC\AppFramework;
+use OC\AppFramework\Http\Dispatcher;
use OC_App;
use OC\AppFramework\DependencyInjection\DIContainer;
use OCP\AppFramework\QueryException;
@@ -97,6 +98,7 @@ class App {
}
// initialize the dispatcher and run all the middleware before the controller
+ /** @var Dispatcher $dispatcher */
$dispatcher = $container['Dispatcher'];
list(
diff --git a/lib/private/appframework/dependencyinjection/dicontainer.php b/lib/private/appframework/dependencyinjection/dicontainer.php
index ce6523cc8a8..88ffc1c6f98 100644
--- a/lib/private/appframework/dependencyinjection/dicontainer.php
+++ b/lib/private/appframework/dependencyinjection/dicontainer.php
@@ -62,6 +62,10 @@ class DIContainer extends SimpleContainer implements IAppContainer {
$this['AppName'] = $appName;
$this['urlParams'] = $urlParams;
+ /** @var \OC\ServerContainer $server */
+ $server = $this->getServer();
+ $server->registerAppContainer($appName, $this);
+
// aliases
$this->registerAlias('appName', 'AppName');
$this->registerAlias('webRoot', 'WebRoot');
diff --git a/lib/private/appframework/http/request.php b/lib/private/appframework/http/request.php
index 2bbb70db0f8..6ba1d8f644d 100644
--- a/lib/private/appframework/http/request.php
+++ b/lib/private/appframework/http/request.php
@@ -447,7 +447,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
$deobfuscatedToken = base64_decode($obfuscatedToken) ^ $secret;
// Check if the token is valid
- if(\OCP\Security\StringUtils::equals($deobfuscatedToken, $this->items['requesttoken'])) {
+ if(hash_equals($deobfuscatedToken, $this->items['requesttoken'])) {
return true;
} else {
return false;
diff --git a/lib/private/appframework/middleware/security/securitymiddleware.php b/lib/private/appframework/middleware/security/securitymiddleware.php
index d0b7202a360..725ce689b48 100644
--- a/lib/private/appframework/middleware/security/securitymiddleware.php
+++ b/lib/private/appframework/middleware/security/securitymiddleware.php
@@ -27,7 +27,6 @@
namespace OC\AppFramework\Middleware\Security;
-use OC\AppFramework\Http;
use OC\Appframework\Middleware\Security\Exceptions\AppNotEnabledException;
use OC\Appframework\Middleware\Security\Exceptions\CrossSiteRequestForgeryException;
use OC\Appframework\Middleware\Security\Exceptions\NotAdminException;
diff --git a/lib/private/appframework/utility/controllermethodreflector.php b/lib/private/appframework/utility/controllermethodreflector.php
index 63cf5ac24f0..1118332f930 100644
--- a/lib/private/appframework/utility/controllermethodreflector.php
+++ b/lib/private/appframework/utility/controllermethodreflector.php
@@ -60,16 +60,18 @@ class ControllerMethodReflector implements IControllerMethodReflector{
// extract type parameter information
preg_match_all('/@param\h+(?P<type>\w+)\h+\$(?P<var>\w+)/', $docs, $matches);
- // this is just a fix for PHP 5.3 (array_combine raises warning if called with
- // two empty arrays
- if($matches['var'] === array() && $matches['type'] === array()) {
- $this->types = array();
- } else {
- $this->types = array_combine($matches['var'], $matches['type']);
- }
+ $this->types = array_combine($matches['var'], $matches['type']);
- // get method parameters
foreach ($reflection->getParameters() as $param) {
+ // extract type information from PHP 7 scalar types and prefer them
+ // over phpdoc annotations
+ if (method_exists($param, 'getType')) {
+ $type = $param->getType();
+ if ($type !== null) {
+ $this->types[$param->getName()] = (string) $type;
+ }
+ }
+
if($param->isOptional()) {
$default = $param->getDefaultValue();
} else {
@@ -82,9 +84,9 @@ class ControllerMethodReflector implements IControllerMethodReflector{
/**
* Inspects the PHPDoc parameters for types
- * @param string $parameter the parameter whose type comments should be
+ * @param string $parameter the parameter whose type comments should be
* parsed
- * @return string|null type in the type parameters (@param int $something)
+ * @return string|null type in the type parameters (@param int $something)
* would return int or null if not existing
*/
public function getType($parameter) {
diff --git a/lib/private/archive/tar.php b/lib/private/archive/tar.php
index 4448e56850d..4066e1d86c1 100644
--- a/lib/private/archive/tar.php
+++ b/lib/private/archive/tar.php
@@ -86,7 +86,7 @@ class OC_Archive_TAR extends OC_Archive {
* @return bool
*/
function addFolder($path) {
- $tmpBase = OC_Helper::tmpFolder();
+ $tmpBase = \OC::$server->getTempManager()->getTemporaryFolder();
if (substr($path, -1, 1) != '/') {
$path .= '/';
}
diff --git a/lib/private/avatar.php b/lib/private/avatar.php
index 37a813f3ff8..c87facd25da 100644
--- a/lib/private/avatar.php
+++ b/lib/private/avatar.php
@@ -31,6 +31,7 @@ namespace OC;
use OCP\Files\Folder;
use OCP\Files\File;
+use OCP\Files\NotFoundException;
use OCP\IL10N;
use OC_Image;
@@ -62,28 +63,14 @@ class Avatar implements \OCP\IAvatar {
* @return boolean|\OCP\IImage containing the avatar or false if there's no image
*/
public function get ($size = 64) {
- if ($this->folder->nodeExists('avatar.jpg')) {
- $ext = 'jpg';
- } elseif ($this->folder->nodeExists('avatar.png')) {
- $ext = 'png';
- } else {
+ try {
+ $file = $this->getFile($size);
+ } catch (NotFoundException $e) {
return false;
}
$avatar = new OC_Image();
- if ($this->folder->nodeExists('avatar.' . $size . '.' . $ext)) {
- /** @var File $node */
- $node = $this->folder->get('avatar.' . $size . '.' . $ext);
- $avatar->loadFromData($node->getContent());
- } else {
- /** @var File $node */
- $node = $this->folder->get('avatar.' . $ext);
- $avatar->loadFromData($node->getContent());
- if ($size > 0) {
- $avatar->resize($size);
- }
- $this->folder->newFile('avatar.' . $size . '.' . $ext)->putContent($avatar->data());
- }
+ $avatar->loadFromData($file->getContent());
return $avatar;
}
@@ -144,4 +131,50 @@ class Avatar implements \OCP\IAvatar {
$this->folder->get('avatar.png')->delete();
} catch (\OCP\Files\NotFoundException $e) {}
}
+
+ /**
+ * Get the File of an avatar of size $size.
+ *
+ * @param int $size
+ * @return File
+ * @throws NotFoundException
+ */
+ public function getFile($size) {
+ $ext = $this->getExtention();
+
+ $path = 'avatar.' . $size . '.' . $ext;
+
+ try {
+ $file = $this->folder->get($path);
+ } catch (NotFoundException $e) {
+ if ($size <= 0) {
+ throw new NotFoundException;
+ }
+
+ $avatar = new OC_Image();
+ /** @var File $file */
+ $file = $this->folder->get('avatar.' . $ext);
+ $avatar->loadFromData($file->getContent());
+ $avatar->resize($size);
+ $file = $this->folder->newFile($path);
+ $file->putContent($avatar->data());
+ }
+
+ return $file;
+ }
+
+ /**
+ * Get the extention of the avatar. If there is no avatar throw Exception
+ *
+ * @return string
+ * @throws NotFoundException
+ */
+ private function getExtention() {
+ if ($this->folder->nodeExists('avatar.jpg')) {
+ return 'jpg';
+ } elseif ($this->folder->nodeExists('avatar.png')) {
+ return 'png';
+ }
+ throw new NotFoundException;
+ }
}
diff --git a/lib/private/backgroundjob/job.php b/lib/private/backgroundjob/job.php
index 88682cd09bb..40a27491fe6 100644
--- a/lib/private/backgroundjob/job.php
+++ b/lib/private/backgroundjob/job.php
@@ -54,7 +54,6 @@ abstract class Job implements IJob {
if ($logger) {
$logger->error('Error while running background job: ' . $e->getMessage());
}
- $jobList->remove($this, $this->argument);
}
}
diff --git a/lib/private/backgroundjob/joblist.php b/lib/private/backgroundjob/joblist.php
index 03c9180ddb0..446de2fa1a4 100644
--- a/lib/private/backgroundjob/joblist.php
+++ b/lib/private/backgroundjob/joblist.php
@@ -24,134 +24,180 @@
namespace OC\BackgroundJob;
+use OCP\AppFramework\QueryException;
+use OCP\BackgroundJob\IJob;
use OCP\BackgroundJob\IJobList;
use OCP\AutoloadNotAllowedException;
class JobList implements IJobList {
- /**
- * @var \OCP\IDBConnection
- */
- private $conn;
+ /** @var \OCP\IDBConnection */
+ protected $connection;
/**
* @var \OCP\IConfig $config
*/
- private $config;
+ protected $config;
/**
- * @param \OCP\IDBConnection $conn
+ * @param \OCP\IDBConnection $connection
* @param \OCP\IConfig $config
*/
- public function __construct($conn, $config) {
- $this->conn = $conn;
+ public function __construct($connection, $config) {
+ $this->connection = $connection;
$this->config = $config;
}
/**
- * @param Job|string $job
+ * @param IJob|string $job
* @param mixed $argument
*/
public function add($job, $argument = null) {
if (!$this->has($job, $argument)) {
- if ($job instanceof Job) {
+ if ($job instanceof IJob) {
$class = get_class($job);
} else {
$class = $job;
}
+
$argument = json_encode($argument);
if (strlen($argument) > 4000) {
throw new \InvalidArgumentException('Background job arguments can\'t exceed 4000 characters (json encoded)');
}
- $query = $this->conn->prepare('INSERT INTO `*PREFIX*jobs`(`class`, `argument`, `last_run`) VALUES(?, ?, 0)');
- $query->execute(array($class, $argument));
+
+ $query = $this->connection->getQueryBuilder();
+ $query->insert('jobs')
+ ->values([
+ 'class' => $query->createNamedParameter($class),
+ 'argument' => $query->createNamedParameter($argument),
+ 'last_run' => $query->createNamedParameter(0, \PDO::PARAM_INT),
+ ]);
+ $query->execute();
}
}
/**
- * @param Job|string $job
+ * @param IJob|string $job
* @param mixed $argument
*/
public function remove($job, $argument = null) {
- if ($job instanceof Job) {
+ if ($job instanceof IJob) {
$class = get_class($job);
} else {
$class = $job;
}
+
+ $query = $this->connection->getQueryBuilder();
+ $query->delete('jobs')
+ ->where($query->expr()->eq('class', $query->createNamedParameter($class)));
if (!is_null($argument)) {
$argument = json_encode($argument);
- $query = $this->conn->prepare('DELETE FROM `*PREFIX*jobs` WHERE `class` = ? AND `argument` = ?');
- $query->execute(array($class, $argument));
- } else {
- $query = $this->conn->prepare('DELETE FROM `*PREFIX*jobs` WHERE `class` = ?');
- $query->execute(array($class));
+ $query->andWhere($query->expr()->eq('argument', $query->createNamedParameter($argument)));
}
+ $query->execute();
}
+ /**
+ * @param int $id
+ */
protected function removeById($id) {
- $query = $this->conn->prepare('DELETE FROM `*PREFIX*jobs` WHERE `id` = ?');
- $query->execute([$id]);
+ $query = $this->connection->getQueryBuilder();
+ $query->delete('jobs')
+ ->where($query->expr()->eq('id', $query->createNamedParameter($id, \PDO::PARAM_INT)));
+ $query->execute();
}
/**
* check if a job is in the list
*
- * @param Job|string $job
+ * @param IJob|string $job
* @param mixed $argument
* @return bool
*/
public function has($job, $argument) {
- if ($job instanceof Job) {
+ if ($job instanceof IJob) {
$class = get_class($job);
} else {
$class = $job;
}
$argument = json_encode($argument);
- $query = $this->conn->prepare('SELECT `id` FROM `*PREFIX*jobs` WHERE `class` = ? AND `argument` = ?');
- $query->execute(array($class, $argument));
- return (bool)$query->fetch();
+
+ $query = $this->connection->getQueryBuilder();
+ $query->select('id')
+ ->from('jobs')
+ ->where($query->expr()->eq('class', $query->createNamedParameter($class)))
+ ->andWhere($query->expr()->eq('argument', $query->createNamedParameter($argument)))
+ ->setMaxResults(1);
+
+ $result = $query->execute();
+ $row = $result->fetch();
+ $result->closeCursor();
+
+ return (bool) $row;
}
/**
* get all jobs in the list
*
- * @return Job[]
+ * @return IJob[]
*/
public function getAll() {
- $query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs`');
- $query->execute();
- $jobs = array();
- while ($row = $query->fetch()) {
+ $query = $this->connection->getQueryBuilder();
+ $query->select('*')
+ ->from('jobs');
+ $result = $query->execute();
+
+ $jobs = [];
+ while ($row = $result->fetch()) {
$job = $this->buildJob($row);
if ($job) {
$jobs[] = $job;
}
}
+ $result->closeCursor();
+
return $jobs;
}
/**
* get the next job in the list
*
- * @return Job
+ * @return IJob|null
*/
public function getNext() {
$lastId = $this->getLastJob();
- $query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs` WHERE `id` > ? ORDER BY `id` ASC', 1);
- $query->execute(array($lastId));
- if ($row = $query->fetch()) {
+
+ $query = $this->connection->getQueryBuilder();
+ $query->select('*')
+ ->from('jobs')
+ ->where($query->expr()->gt('id', $query->createNamedParameter($lastId, \PDO::PARAM_INT)))
+ ->orderBy('id', 'ASC')
+ ->setMaxResults(1);
+ $result = $query->execute();
+ $row = $result->fetch();
+ $result->closeCursor();
+
+ if ($row) {
$jobId = $row['id'];
$job = $this->buildJob($row);
} else {
//begin at the start of the queue
- $query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs` ORDER BY `id` ASC', 1);
- $query->execute();
- if ($row = $query->fetch()) {
+ $query = $this->connection->getQueryBuilder();
+ $query->select('*')
+ ->from('jobs')
+ ->orderBy('id', 'ASC')
+ ->setMaxResults(1);
+ $result = $query->execute();
+ $row = $result->fetch();
+ $result->closeCursor();
+
+ if ($row) {
$jobId = $row['id'];
$job = $this->buildJob($row);
} else {
return null; //empty job list
}
}
+
if (is_null($job)) {
$this->removeById($jobId);
return $this->getNext();
@@ -162,12 +208,18 @@ class JobList implements IJobList {
/**
* @param int $id
- * @return Job|null
+ * @return IJob|null
*/
public function getById($id) {
- $query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs` WHERE `id` = ?');
- $query->execute(array($id));
- if ($row = $query->fetch()) {
+ $query = $this->connection->getQueryBuilder();
+ $query->select('*')
+ ->from('jobs')
+ ->where($query->expr()->eq('id', $query->createNamedParameter($id, \PDO::PARAM_INT)));
+ $result = $query->execute();
+ $row = $result->fetch();
+ $result->closeCursor();
+
+ if ($row) {
return $this->buildJob($row);
} else {
return null;
@@ -178,33 +230,38 @@ class JobList implements IJobList {
* get the job object from a row in the db
*
* @param array $row
- * @return Job
+ * @return IJob|null
*/
private function buildJob($row) {
- $class = $row['class'];
- /**
- * @var Job $job
- */
try {
- if (!class_exists($class)) {
- // job from disabled app or old version of an app, no need to do anything
- return null;
+ try {
+ // Try to load the job as a service
+ /** @var IJob $job */
+ $job = \OC::$server->query($row['class']);
+ } catch (QueryException $e) {
+ if (class_exists($row['class'])) {
+ $class = $row['class'];
+ $job = new $class();
+ } else {
+ // job from disabled app or old version of an app, no need to do anything
+ return null;
+ }
}
- $job = new $class();
+
$job->setId($row['id']);
$job->setLastRun($row['last_run']);
$job->setArgument(json_decode($row['argument'], true));
return $job;
} catch (AutoloadNotAllowedException $e) {
// job is from a disabled app, ignore
+ return null;
}
- return null;
}
/**
* set the job that was last ran
*
- * @param Job $job
+ * @param IJob $job
*/
public function setLastJob($job) {
$this->config->setAppValue('backgroundjob', 'lastjob', $job->getId());
@@ -213,19 +270,22 @@ class JobList implements IJobList {
/**
* get the id of the last ran job
*
- * @return string
+ * @return int
*/
public function getLastJob() {
- return $this->config->getAppValue('backgroundjob', 'lastjob', 0);
+ return (int) $this->config->getAppValue('backgroundjob', 'lastjob', 0);
}
/**
* set the lastRun of $job to now
*
- * @param Job $job
+ * @param IJob $job
*/
public function setLastRun($job) {
- $query = $this->conn->prepare('UPDATE `*PREFIX*jobs` SET `last_run` = ? WHERE `id` = ?');
- $query->execute(array(time(), $job->getId()));
+ $query = $this->connection->getQueryBuilder();
+ $query->update('jobs')
+ ->set('last_run', $query->createNamedParameter(time(), \PDO::PARAM_INT))
+ ->where($query->expr()->eq('id', $query->createNamedParameter($job->getId(), \PDO::PARAM_INT)));
+ $query->execute();
}
}
diff --git a/lib/private/comments/comment.php b/lib/private/comments/comment.php
new file mode 100644
index 00000000000..219e7ec8e4b
--- /dev/null
+++ b/lib/private/comments/comment.php
@@ -0,0 +1,357 @@
+<?php
+
+namespace OC\Comments;
+
+use OCP\Comments\IComment;
+use OCP\Comments\IllegalIDChangeException;
+
+class Comment implements IComment {
+
+ protected $data = [
+ 'id' => '',
+ 'parentId' => '0',
+ 'topmostParentId' => '0',
+ 'childrenCount' => '0',
+ 'message' => '',
+ 'verb' => '',
+ 'actorType' => '',
+ 'actorId' => '',
+ 'objectType' => '',
+ 'objectId' => '',
+ 'creationDT' => null,
+ 'latestChildDT' => null,
+ ];
+
+ /**
+ * Comment constructor.
+ *
+ * @param [] $data optional, array with keys according to column names from
+ * the comments database scheme
+ */
+ public function __construct(array $data = null) {
+ if(is_array($data)) {
+ $this->fromArray($data);
+ }
+ }
+
+ /**
+ * returns the ID of the comment
+ *
+ * It may return an empty string, if the comment was not stored.
+ * It is expected that the concrete Comment implementation gives an ID
+ * by itself (e.g. after saving).
+ *
+ * @return string
+ * @since 9.0.0
+ */
+ public function getId() {
+ return $this->data['id'];
+ }
+
+ /**
+ * sets the ID of the comment and returns itself
+ *
+ * It is only allowed to set the ID only, if the current id is an empty
+ * string (which means it is not stored in a database, storage or whatever
+ * the concrete implementation does), or vice versa. Changing a given ID is
+ * not permitted and must result in an IllegalIDChangeException.
+ *
+ * @param string $id
+ * @return IComment
+ * @throws IllegalIDChangeException
+ * @since 9.0.0
+ */
+ public function setId($id) {
+ if(!is_string($id)) {
+ throw new \InvalidArgumentException('String expected.');
+ }
+
+ $id = trim($id);
+ if($this->data['id'] === '' || ($this->data['id'] !== '' && $id === '')) {
+ $this->data['id'] = $id;
+ return $this;
+ }
+
+ throw new IllegalIDChangeException('Not allowed to assign a new ID to an already saved comment.');
+ }
+
+ /**
+ * returns the parent ID of the comment
+ *
+ * @return string
+ * @since 9.0.0
+ */
+ public function getParentId() {
+ return $this->data['parentId'];
+ }
+
+ /**
+ * sets the parent ID and returns itself
+ *
+ * @param string $parentId
+ * @return IComment
+ * @since 9.0.0
+ */
+ public function setParentId($parentId) {
+ if(!is_string($parentId)) {
+ throw new \InvalidArgumentException('String expected.');
+ }
+ $this->data['parentId'] = trim($parentId);
+ return $this;
+ }
+
+ /**
+ * returns the topmost parent ID of the comment
+ *
+ * @return string
+ * @since 9.0.0
+ */
+ public function getTopmostParentId() {
+ return $this->data['topmostParentId'];
+ }
+
+
+ /**
+ * sets the topmost parent ID and returns itself
+ *
+ * @param string $id
+ * @return IComment
+ * @since 9.0.0
+ */
+ public function setTopmostParentId($id) {
+ if(!is_string($id)) {
+ throw new \InvalidArgumentException('String expected.');
+ }
+ $this->data['topmostParentId'] = trim($id);
+ return $this;
+ }
+
+ /**
+ * returns the number of children
+ *
+ * @return int
+ * @since 9.0.0
+ */
+ public function getChildrenCount() {
+ return $this->data['childrenCount'];
+ }
+
+ /**
+ * sets the number of children
+ *
+ * @param int $count
+ * @return IComment
+ * @since 9.0.0
+ */
+ public function setChildrenCount($count) {
+ if(!is_int($count)) {
+ throw new \InvalidArgumentException('Integer expected.');
+ }
+ $this->data['childrenCount'] = $count;
+ return $this;
+ }
+
+ /**
+ * returns the message of the comment
+ *
+ * @return string
+ * @since 9.0.0
+ */
+ public function getMessage() {
+ return $this->data['message'];
+ }
+
+ /**
+ * sets the message of the comment and returns itself
+ *
+ * @param string $message
+ * @return IComment
+ * @since 9.0.0
+ */
+ public function setMessage($message) {
+ if(!is_string($message)) {
+ throw new \InvalidArgumentException('String expected.');
+ }
+ $this->data['message'] = trim($message);
+ return $this;
+ }
+
+ /**
+ * returns the verb of the comment
+ *
+ * @return string
+ * @since 9.0.0
+ */
+ public function getVerb() {
+ return $this->data['verb'];
+ }
+
+ /**
+ * sets the verb of the comment, e.g. 'comment' or 'like'
+ *
+ * @param string $verb
+ * @return IComment
+ * @since 9.0.0
+ */
+ public function setVerb($verb) {
+ if(!is_string($verb) || !trim($verb)) {
+ throw new \InvalidArgumentException('Non-empty String expected.');
+ }
+ $this->data['verb'] = trim($verb);
+ return $this;
+ }
+
+ /**
+ * returns the actor type
+ *
+ * @return string
+ * @since 9.0.0
+ */
+ public function getActorType() {
+ return $this->data['actorType'];
+ }
+
+ /**
+ * returns the actor ID
+ *
+ * @return string
+ * @since 9.0.0
+ */
+ public function getActorId() {
+ return $this->data['actorId'];
+ }
+
+ /**
+ * sets (overwrites) the actor type and id
+ *
+ * @param string $actorType e.g. 'user'
+ * @param string $actorId e.g. 'zombie234'
+ * @return IComment
+ * @since 9.0.0
+ */
+ public function setActor($actorType, $actorId) {
+ if(
+ !is_string($actorType) || !trim($actorType)
+ || !is_string($actorId) || !trim($actorId)
+ ) {
+ throw new \InvalidArgumentException('String expected.');
+ }
+ $this->data['actorType'] = trim($actorType);
+ $this->data['actorId'] = trim($actorId);
+ return $this;
+ }
+
+ /**
+ * returns the creation date of the comment.
+ *
+ * If not explicitly set, it shall default to the time of initialization.
+ *
+ * @return \DateTime
+ * @since 9.0.0
+ */
+ public function getCreationDateTime() {
+ return $this->data['creationDT'];
+ }
+
+ /**
+ * sets the creation date of the comment and returns itself
+ *
+ * @param \DateTime $timestamp
+ * @return IComment
+ * @since 9.0.0
+ */
+ public function setCreationDateTime(\DateTime $timestamp) {
+ $this->data['creationDT'] = $timestamp;
+ return $this;
+ }
+
+ /**
+ * returns the timestamp of the most recent child
+ *
+ * @return int
+ * @since 9.0.0
+ */
+ public function getLatestChildDateTime() {
+ return $this->data['latestChildDT'];
+ }
+
+ /**
+ * sets the date of the most recent child
+ *
+ * @param \DateTime $dateTime
+ * @return IComment
+ * @since 9.0.0
+ */
+ public function setLatestChildDateTime(\DateTime $dateTime = null) {
+ $this->data['latestChildDT'] = $dateTime;
+ return $this;
+ }
+
+ /**
+ * returns the object type the comment is attached to
+ *
+ * @return string
+ * @since 9.0.0
+ */
+ public function getObjectType() {
+ return $this->data['objectType'];
+ }
+
+ /**
+ * returns the object id the comment is attached to
+ *
+ * @return string
+ * @since 9.0.0
+ */
+ public function getObjectId() {
+ return $this->data['objectId'];
+ }
+
+ /**
+ * sets (overwrites) the object of the comment
+ *
+ * @param string $objectType e.g. 'file'
+ * @param string $objectId e.g. '16435'
+ * @return IComment
+ * @since 9.0.0
+ */
+ public function setObject($objectType, $objectId) {
+ if(
+ !is_string($objectType) || !trim($objectType)
+ || !is_string($objectId) || !trim($objectId)
+ ) {
+ throw new \InvalidArgumentException('String expected.');
+ }
+ $this->data['objectType'] = trim($objectType);
+ $this->data['objectId'] = trim($objectId);
+ return $this;
+ }
+
+ /**
+ * sets the comment data based on an array with keys as taken from the
+ * database.
+ *
+ * @param [] $data
+ * @return IComment
+ */
+ protected function fromArray($data) {
+ foreach(array_keys($data) as $key) {
+ // translate DB keys to internal setter names
+ $setter = 'set' . str_replace('_', '', ucwords($key,'_'));
+ $setter = str_replace('Timestamp', 'DateTime', $setter);
+
+ if(method_exists($this, $setter)) {
+ $this->$setter($data[$key]);
+ }
+ }
+
+ foreach(['actor', 'object'] as $role) {
+ if(isset($data[$role . '_type']) && isset($data[$role . '_id'])) {
+ $setter = 'set' . ucfirst($role);
+ $this->$setter($data[$role . '_type'], $data[$role . '_id']);
+ }
+ }
+
+ return $this;
+ }
+}
diff --git a/lib/private/comments/manager.php b/lib/private/comments/manager.php
new file mode 100644
index 00000000000..09e59f28370
--- /dev/null
+++ b/lib/private/comments/manager.php
@@ -0,0 +1,549 @@
+<?php
+
+namespace OC\Comments;
+
+use Doctrine\DBAL\Exception\DriverException;
+use OCP\Comments\IComment;
+use OCP\Comments\ICommentsManager;
+use OCP\Comments\NotFoundException;
+use OCP\IDBConnection;
+use OCP\ILogger;
+
+class Manager implements ICommentsManager {
+
+ /** @var IDBConnection */
+ protected $dbConn;
+
+ /** @var ILogger */
+ protected $logger;
+
+ /** @var IComment[] */
+ protected $commentsCache = [];
+
+ public function __construct(
+ IDBConnection $dbConn,
+ ILogger $logger
+ ) {
+ $this->dbConn = $dbConn;
+ $this->logger = $logger;
+ }
+
+ /**
+ * converts data base data into PHP native, proper types as defined by
+ * IComment interface.
+ *
+ * @param array $data
+ * @return array
+ */
+ protected function normalizeDatabaseData(array $data) {
+ $data['id'] = strval($data['id']);
+ $data['parent_id'] = strval($data['parent_id']);
+ $data['topmost_parent_id'] = strval($data['topmost_parent_id']);
+ $data['creation_timestamp'] = new \DateTime($data['creation_timestamp']);
+ $data['latest_child_timestamp'] = new \DateTime($data['latest_child_timestamp']);
+ $data['children_count'] = intval($data['children_count']);
+ return $data;
+ }
+
+ /**
+ * prepares a comment for an insert or update operation after making sure
+ * all necessary fields have a value assigned.
+ *
+ * @param IComment $comment
+ * @return IComment returns the same updated IComment instance as provided
+ * by parameter for convenience
+ * @throws \UnexpectedValueException
+ */
+ protected function prepareCommentForDatabaseWrite(IComment $comment) {
+ if( !$comment->getActorType()
+ || !$comment->getActorId()
+ || !$comment->getObjectType()
+ || !$comment->getObjectId()
+ || !$comment->getVerb()
+ ) {
+ throw new \UnexpectedValueException('Actor, Object and Verb information must be provided for saving');
+ }
+
+ if($comment->getId() === '') {
+ $comment->setChildrenCount(0);
+ $comment->setLatestChildDateTime(new \DateTime('0000-00-00 00:00:00', new \DateTimeZone('UTC')));
+ $comment->setLatestChildDateTime(null);
+ }
+
+ if(is_null($comment->getCreationDateTime())) {
+ $comment->setCreationDateTime(new \DateTime());
+ }
+
+ if($comment->getParentId() !== '0') {
+ $comment->setTopmostParentId($this->determineTopmostParentId($comment->getParentId()));
+ } else {
+ $comment->setTopmostParentId('0');
+ }
+
+ $this->cache($comment);
+
+ return $comment;
+ }
+
+ /**
+ * returns the topmost parent id of a given comment identified by ID
+ *
+ * @param string $id
+ * @return string
+ * @throws NotFoundException
+ */
+ protected function determineTopmostParentId($id) {
+ $comment = $this->get($id);
+ if($comment->getParentId() === '0') {
+ return $comment->getId();
+ } else {
+ return $this->determineTopmostParentId($comment->getId());
+ }
+ }
+
+ /**
+ * updates child information of a comment
+ *
+ * @param string $id
+ * @param \DateTime $cDateTime the date time of the most recent child
+ * @throws NotFoundException
+ */
+ protected function updateChildrenInformation($id, \DateTime $cDateTime) {
+ $qb = $this->dbConn->getQueryBuilder();
+ $query = $qb->select($qb->createFunction('COUNT(`id`)'))
+ ->from('comments')
+ ->where($qb->expr()->eq('parent_id', $qb->createParameter('id')))
+ ->setParameter('id', $id);
+
+ $resultStatement = $query->execute();
+ $data = $resultStatement->fetch(\PDO::FETCH_NUM);
+ $resultStatement->closeCursor();
+ $children = intval($data[0]);
+
+ $comment = $this->get($id);
+ $comment->setChildrenCount($children);
+ $comment->setLatestChildDateTime($cDateTime);
+ $this->save($comment);
+ }
+
+ /**
+ * Tests whether actor or object type and id parameters are acceptable.
+ * Throws exception if not.
+ *
+ * @param string $role
+ * @param string $type
+ * @param string $id
+ * @throws \InvalidArgumentException
+ */
+ protected function checkRoleParameters($role, $type, $id) {
+ if(
+ !is_string($type) || empty($type)
+ || !is_string($id) || empty($id)
+ ) {
+ throw new \InvalidArgumentException($role . ' parameters must be string and not empty');
+ }
+ }
+
+ /**
+ * run-time caches a comment
+ *
+ * @param IComment $comment
+ */
+ protected function cache(IComment $comment) {
+ $id = $comment->getId();
+ if(empty($id)) {
+ return;
+ }
+ $this->commentsCache[strval($id)] = $comment;
+ }
+
+ /**
+ * removes an entry from the comments run time cache
+ *
+ * @param mixed $id the comment's id
+ */
+ protected function uncache($id) {
+ $id = strval($id);
+ if (isset($this->commentsCache[$id])) {
+ unset($this->commentsCache[$id]);
+ }
+ }
+
+ /**
+ * returns a comment instance
+ *
+ * @param string $id the ID of the comment
+ * @return IComment
+ * @throws NotFoundException
+ * @throws \InvalidArgumentException
+ * @since 9.0.0
+ */
+ public function get($id) {
+ if(intval($id) === 0) {
+ throw new \InvalidArgumentException('IDs must be translatable to a number in this implementation.');
+ }
+
+ if(isset($this->commentsCache[$id])) {
+ return $this->commentsCache[$id];
+ }
+
+ $qb = $this->dbConn->getQueryBuilder();
+ $resultStatement = $qb->select('*')
+ ->from('comments')
+ ->where($qb->expr()->eq('id', $qb->createParameter('id')))
+ ->setParameter('id', $id, \PDO::PARAM_INT)
+ ->execute();
+
+ $data = $resultStatement->fetch();
+ $resultStatement->closeCursor();
+ if(!$data) {
+ throw new NotFoundException();
+ }
+
+ $comment = new Comment($this->normalizeDatabaseData($data));
+ $this->cache($comment);
+ return $comment;
+ }
+
+ /**
+ * returns the comment specified by the id and all it's child comments.
+ * At this point of time, we do only support one level depth.
+ *
+ * @param string $id
+ * @param int $limit max number of entries to return, 0 returns all
+ * @param int $offset the start entry
+ * @return array
+ * @since 9.0.0
+ *
+ * The return array looks like this
+ * [
+ * 'comment' => IComment, // root comment
+ * 'replies' =>
+ * [
+ * 0 =>
+ * [
+ * 'comment' => IComment,
+ * 'replies' => []
+ * ]
+ * 1 =>
+ * [
+ * 'comment' => IComment,
+ * 'replies'=> []
+ * ],
+ * …
+ * ]
+ * ]
+ */
+ public function getTree($id, $limit = 0, $offset = 0) {
+ $tree = [];
+ $tree['comment'] = $this->get($id);
+ $tree['replies'] = [];
+
+ $qb = $this->dbConn->getQueryBuilder();
+ $query = $qb->select('*')
+ ->from('comments')
+ ->where($qb->expr()->eq('topmost_parent_id', $qb->createParameter('id')))
+ ->orderBy('creation_timestamp', 'DESC')
+ ->setParameter('id', $id);
+
+ if($limit > 0) {
+ $query->setMaxResults($limit);
+ }
+ if($offset > 0) {
+ $query->setFirstResult($offset);
+ }
+
+ $resultStatement = $query->execute();
+ while($data = $resultStatement->fetch()) {
+ $comment = new Comment($this->normalizeDatabaseData($data));
+ $this->cache($comment);
+ $tree['replies'][] = [
+ 'comment' => $comment,
+ 'replies' => []
+ ];
+ }
+ $resultStatement->closeCursor();
+
+ return $tree;
+ }
+
+ /**
+ * returns comments for a specific object (e.g. a file).
+ *
+ * The sort order is always newest to oldest.
+ *
+ * @param string $objectType the object type, e.g. 'files'
+ * @param string $objectId the id of the object
+ * @param int $limit optional, number of maximum comments to be returned. if
+ * not specified, all comments are returned.
+ * @param int $offset optional, starting point
+ * @param \DateTime $notOlderThan optional, timestamp of the oldest comments
+ * that may be returned
+ * @return IComment[]
+ * @since 9.0.0
+ */
+ public function getForObject(
+ $objectType,
+ $objectId,
+ $limit = 0,
+ $offset = 0,
+ \DateTime $notOlderThan = null
+ ) {
+ $comments = [];
+
+ $qb = $this->dbConn->getQueryBuilder();
+ $query = $qb->select('*')
+ ->from('comments')
+ ->where($qb->expr()->eq('object_type', $qb->createParameter('type')))
+ ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id')))
+ ->orderBy('creation_timestamp', 'DESC')
+ ->setParameter('type', $objectType)
+ ->setParameter('id', $objectId);
+
+ if($limit > 0) {
+ $query->setMaxResults($limit);
+ }
+ if($offset > 0) {
+ $query->setFirstResult($offset);
+ }
+ if(!is_null($notOlderThan)) {
+ $query
+ ->andWhere($qb->expr()->gt('creation_timestamp', $qb->createParameter('notOlderThan')))
+ ->setParameter('notOlderThan', $notOlderThan, 'datetime');
+ }
+
+ $resultStatement = $query->execute();
+ while($data = $resultStatement->fetch()) {
+ $comment = new Comment($this->normalizeDatabaseData($data));
+ $this->cache($comment);
+ $comments[] = $comment;
+ }
+ $resultStatement->closeCursor();
+
+ return $comments;
+ }
+
+ /**
+ * @param $objectType string the object type, e.g. 'files'
+ * @param $objectId string the id of the object
+ * @return Int
+ * @since 9.0.0
+ */
+ public function getNumberOfCommentsForObject($objectType, $objectId) {
+ $qb = $this->dbConn->getQueryBuilder();
+ $query = $qb->select($qb->createFunction('COUNT(`id`)'))
+ ->from('comments')
+ ->where($qb->expr()->eq('object_type', $qb->createParameter('type')))
+ ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id')))
+ ->setParameter('type', $objectType)
+ ->setParameter('id', $objectId);
+
+ $resultStatement = $query->execute();
+ $data = $resultStatement->fetch(\PDO::FETCH_NUM);
+ $resultStatement->closeCursor();
+ return intval($data[0]);
+ }
+
+ /**
+ * creates a new comment and returns it. At this point of time, it is not
+ * saved in the used data storage. Use save() after setting other fields
+ * of the comment (e.g. message or verb).
+ *
+ * @param string $actorType the actor type (e.g. 'user')
+ * @param string $actorId a user id
+ * @param string $objectType the object type the comment is attached to
+ * @param string $objectId the object id the comment is attached to
+ * @return IComment
+ * @since 9.0.0
+ */
+ public function create($actorType, $actorId, $objectType, $objectId) {
+ $comment = new Comment();
+ $comment
+ ->setActor($actorType, $actorId)
+ ->setObject($objectType, $objectId);
+ return $comment;
+ }
+
+ /**
+ * permanently deletes the comment specified by the ID
+ *
+ * When the comment has child comments, their parent ID will be changed to
+ * the parent ID of the item that is to be deleted.
+ *
+ * @param string $id
+ * @return bool
+ * @throws \InvalidArgumentException
+ * @since 9.0.0
+ */
+ public function delete($id) {
+ if(!is_string($id)) {
+ throw new \InvalidArgumentException('Parameter must be string');
+ }
+
+ $qb = $this->dbConn->getQueryBuilder();
+ $query = $qb->delete('comments')
+ ->where($qb->expr()->eq('id', $qb->createParameter('id')))
+ ->setParameter('id', $id);
+
+ try {
+ $affectedRows = $query->execute();
+ $this->uncache($id);
+ } catch (DriverException $e) {
+ $this->logger->logException($e, ['app' => 'core_comments']);
+ return false;
+ }
+ return ($affectedRows > 0);
+ }
+
+ /**
+ * saves the comment permanently and returns it
+ *
+ * if the supplied comment has an empty ID, a new entry comment will be
+ * saved and the instance updated with the new ID.
+ *
+ * Otherwise, an existing comment will be updated.
+ *
+ * Throws NotFoundException when a comment that is to be updated does not
+ * exist anymore at this point of time.
+ *
+ * @param IComment $comment
+ * @return bool
+ * @throws NotFoundException
+ * @since 9.0.0
+ */
+ public function save(IComment $comment) {
+ if($this->prepareCommentForDatabaseWrite($comment)->getId() === '') {
+ $result = $this->insert($comment);
+ } else {
+ $result = $this->update($comment);
+ }
+
+ if($result && !!$comment->getParentId()) {
+ $this->updateChildrenInformation(
+ $comment->getParentId(),
+ $comment->getCreationDateTime()
+ );
+ $this->cache($comment);
+ }
+
+ return $result;
+ }
+
+ /**
+ * inserts the provided comment in the database
+ *
+ * @param IComment $comment
+ * @return bool
+ */
+ protected function insert(IComment &$comment) {
+ $qb = $this->dbConn->getQueryBuilder();
+ $affectedRows = $qb
+ ->insert('comments')
+ ->values([
+ 'parent_id' => $qb->createNamedParameter($comment->getParentId()),
+ 'topmost_parent_id' => $qb->createNamedParameter($comment->getTopmostParentId()),
+ 'children_count' => $qb->createNamedParameter($comment->getChildrenCount()),
+ 'actor_type' => $qb->createNamedParameter($comment->getActorType()),
+ 'actor_id' => $qb->createNamedParameter($comment->getActorId()),
+ 'message' => $qb->createNamedParameter($comment->getMessage()),
+ 'verb' => $qb->createNamedParameter($comment->getVerb()),
+ 'creation_timestamp' => $qb->createNamedParameter($comment->getCreationDateTime(), 'datetime'),
+ 'latest_child_timestamp' => $qb->createNamedParameter($comment->getLatestChildDateTime(), 'datetime'),
+ 'object_type' => $qb->createNamedParameter($comment->getObjectType()),
+ 'object_id' => $qb->createNamedParameter($comment->getObjectId()),
+ ])
+ ->execute();
+
+ if ($affectedRows > 0) {
+ $comment->setId(strval($qb->getLastInsertId()));
+ }
+
+ return $affectedRows > 0;
+ }
+
+ /**
+ * updates a Comment data row
+ *
+ * @param IComment $comment
+ * @return bool
+ * @throws NotFoundException
+ */
+ protected function update(IComment $comment) {
+ $qb = $this->dbConn->getQueryBuilder();
+ $affectedRows = $qb
+ ->update('comments')
+ ->set('parent_id', $qb->createNamedParameter($comment->getParentId()))
+ ->set('topmost_parent_id', $qb->createNamedParameter($comment->getTopmostParentId()))
+ ->set('children_count', $qb->createNamedParameter($comment->getChildrenCount()))
+ ->set('actor_type', $qb->createNamedParameter($comment->getActorType()))
+ ->set('actor_id', $qb->createNamedParameter($comment->getActorId()))
+ ->set('message', $qb->createNamedParameter($comment->getMessage()))
+ ->set('verb', $qb->createNamedParameter($comment->getVerb()))
+ ->set('creation_timestamp', $qb->createNamedParameter($comment->getCreationDateTime(), 'datetime'))
+ ->set('latest_child_timestamp', $qb->createNamedParameter($comment->getLatestChildDateTime(), 'datetime'))
+ ->set('object_type', $qb->createNamedParameter($comment->getObjectType()))
+ ->set('object_id', $qb->createNamedParameter($comment->getObjectId()))
+ ->where($qb->expr()->eq('id', $qb->createParameter('id')))
+ ->setParameter('id', $comment->getId())
+ ->execute();
+
+ if($affectedRows === 0) {
+ throw new NotFoundException('Comment to update does ceased to exist');
+ }
+
+ return $affectedRows > 0;
+ }
+
+ /**
+ * removes references to specific actor (e.g. on user delete) of a comment.
+ * The comment itself must not get lost/deleted.
+ *
+ * @param string $actorType the actor type (e.g. 'user')
+ * @param string $actorId a user id
+ * @return boolean
+ * @since 9.0.0
+ */
+ public function deleteReferencesOfActor($actorType, $actorId) {
+ $this->checkRoleParameters('Actor', $actorType, $actorId);
+
+ $qb = $this->dbConn->getQueryBuilder();
+ $affectedRows = $qb
+ ->update('comments')
+ ->set('actor_type', $qb->createNamedParameter(ICommentsManager::DELETED_USER))
+ ->set('actor_id', $qb->createNamedParameter(ICommentsManager::DELETED_USER))
+ ->where($qb->expr()->eq('actor_type', $qb->createParameter('type')))
+ ->andWhere($qb->expr()->eq('actor_id', $qb->createParameter('id')))
+ ->setParameter('type', $actorType)
+ ->setParameter('id', $actorId)
+ ->execute();
+
+ $this->commentsCache = [];
+
+ return is_int($affectedRows);
+ }
+
+ /**
+ * deletes all comments made of a specific object (e.g. on file delete)
+ *
+ * @param string $objectType the object type (e.g. 'file')
+ * @param string $objectId e.g. the file id
+ * @return boolean
+ * @since 9.0.0
+ */
+ public function deleteCommentsAtObject($objectType, $objectId) {
+ $this->checkRoleParameters('Object', $objectType, $objectId);
+
+ $qb = $this->dbConn->getQueryBuilder();
+ $affectedRows = $qb
+ ->delete('comments')
+ ->where($qb->expr()->eq('object_type', $qb->createParameter('type')))
+ ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id')))
+ ->setParameter('type', $objectType)
+ ->setParameter('id', $objectId)
+ ->execute();
+
+ $this->commentsCache = [];
+
+ return is_int($affectedRows);
+ }
+}
diff --git a/lib/private/comments/managerfactory.php b/lib/private/comments/managerfactory.php
new file mode 100644
index 00000000000..41978d0cf4b
--- /dev/null
+++ b/lib/private/comments/managerfactory.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace OC\Comments;
+
+use OCP\Comments\ICommentsManager;
+use OCP\Comments\ICommentsManagerFactory;
+
+
+class ManagerFactory implements ICommentsManagerFactory {
+
+ /**
+ * creates and returns an instance of the ICommentsManager
+ *
+ * @return ICommentsManager
+ * @since 9.0.0
+ */
+ public function getManager() {
+ return new Manager(
+ \OC::$server->getDatabaseConnection(),
+ \OC::$server->getLogger()
+ );
+ }
+}
diff --git a/lib/private/console/application.php b/lib/private/console/application.php
index 55c817d497f..e6d8677b72e 100644
--- a/lib/private/console/application.php
+++ b/lib/private/console/application.php
@@ -48,25 +48,31 @@ class Application {
/**
* @param OutputInterface $output
+ * @throws \Exception
*/
public function loadCommands(OutputInterface $output) {
// $application is required to be defined in the register_command scripts
$application = $this->application;
- require_once \OC::$SERVERROOT . '/core/register_command.php';
+ require_once __DIR__ . '/../../../core/register_command.php';
if ($this->config->getSystemValue('installed', false)) {
- if (!\OCP\Util::needUpgrade()) {
+ if (\OCP\Util::needUpgrade()) {
+ $output->writeln("ownCloud or one of the apps require upgrade - only a limited number of commands are available");
+ $output->writeln("You may use your browser or the occ upgrade command to do the upgrade");
+ } elseif ($this->config->getSystemValue('maintenance', false)) {
+ $output->writeln("ownCloud is in maintenance mode - no app have been loaded");
+ } else {
OC_App::loadApps();
foreach (\OC::$server->getAppManager()->getInstalledApps() as $app) {
$appPath = \OC_App::getAppPath($app);
+ if($appPath === false) {
+ continue;
+ }
\OC::$loader->addValidRoot($appPath);
$file = $appPath . '/appinfo/register_command.php';
if (file_exists($file)) {
require $file;
}
}
- } else {
- $output->writeln("ownCloud or one of the apps require upgrade - only a limited number of commands are available");
- $output->writeln("You may use your browser or the occ upgrade command to do the upgrade");
}
} else {
$output->writeln("ownCloud is not installed - only a limited number of commands are available");
@@ -85,6 +91,11 @@ class Application {
}
}
+ /**
+ * Sets whether to automatically exit after a command execution or not.
+ *
+ * @param bool $boolean Whether to automatically exit after a command execution or not
+ */
public function setAutoExit($boolean) {
$this->application->setAutoExit($boolean);
}
diff --git a/lib/private/db/querybuilder/querybuilder.php b/lib/private/db/querybuilder/querybuilder.php
index 741da4efc27..a4cbb5abd76 100644
--- a/lib/private/db/querybuilder/querybuilder.php
+++ b/lib/private/db/querybuilder/querybuilder.php
@@ -40,6 +40,9 @@ class QueryBuilder implements IQueryBuilder {
/** @var bool */
private $automaticTablePrefix = true;
+ /** @var string */
+ protected $lastInsertedTable;
+
/**
* Initializes a new QueryBuilder.
*
@@ -445,6 +448,8 @@ class QueryBuilder implements IQueryBuilder {
$this->getTableName($insert)
);
+ $this->lastInsertedTable = $insert;
+
return $this;
}
@@ -1051,10 +1056,10 @@ class QueryBuilder implements IQueryBuilder {
* @throws \BadMethodCallException When being called before an insert query has been run.
*/
public function getLastInsertId() {
- $from = $this->getQueryPart('from');
-
- if ($this->getType() === \Doctrine\DBAL\Query\QueryBuilder::INSERT && !empty($from)) {
- return (int) $this->connection->lastInsertId($from['table']);
+ if ($this->getType() === \Doctrine\DBAL\Query\QueryBuilder::INSERT && $this->lastInsertedTable) {
+ // lastInsertId() needs the prefix but no quotes
+ $table = $this->prefixTableName($this->lastInsertedTable);
+ return (int) $this->connection->lastInsertId($table);
}
throw new \BadMethodCallException('Invalid call to getLastInsertId without using insert() before.');
@@ -1067,11 +1072,22 @@ class QueryBuilder implements IQueryBuilder {
* @return string
*/
public function getTableName($table) {
+ $table = $this->prefixTableName($table);
+ return $this->helper->quoteColumnName($table);
+ }
+
+ /**
+ * Returns the table name with database prefix as needed by the implementation
+ *
+ * @param string $table
+ * @return string
+ */
+ protected function prefixTableName($table) {
if ($this->automaticTablePrefix === false || strpos($table, '*PREFIX*') === 0) {
- return $this->helper->quoteColumnName($table);
+ return $table;
}
- return $this->helper->quoteColumnName('*PREFIX*' . $table);
+ return '*PREFIX*' . $table;
}
/**
diff --git a/lib/private/defaults.php b/lib/private/defaults.php
index 16f45943f54..23f0baad96e 100644
--- a/lib/private/defaults.php
+++ b/lib/private/defaults.php
@@ -49,7 +49,7 @@ class OC_Defaults {
function __construct() {
$this->l = \OC::$server->getL10N('lib');
- $version = OC_Util::getVersion();
+ $version = \OCP\Util::getVersion();
$this->defaultEntity = 'ownCloud'; /* e.g. company name, used for footers and copyright notices */
$this->defaultName = 'ownCloud'; /* short name, used when referring to the software */
diff --git a/lib/private/eventsource.php b/lib/private/eventsource.php
index c076b87ddd9..0e98bdc2628 100644
--- a/lib/private/eventsource.php
+++ b/lib/private/eventsource.php
@@ -76,7 +76,7 @@ class OC_EventSource implements \OCP\IEventSource {
} else {
header("Content-Type: text/event-stream");
}
- if (!OC_Util::isCallRegistered()) {
+ if (!(\OC::$server->getRequest()->passesCSRFCheck())) {
$this->send('error', 'Possible CSRF attack. Connection will be closed.');
$this->close();
exit();
diff --git a/lib/private/files/fileinfo.php b/lib/private/files/fileinfo.php
index 5b5e8697004..5ed65cd3795 100644
--- a/lib/private/files/fileinfo.php
+++ b/lib/private/files/fileinfo.php
@@ -100,6 +100,8 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
return $this->getType();
} else if ($offset === 'etag') {
return $this->getEtag();
+ } elseif ($offset === 'permissions') {
+ return $this->getPermissions();
} elseif (isset($this->data[$offset])) {
return $this->data[$offset];
} else {
@@ -193,7 +195,11 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
* @return int
*/
public function getPermissions() {
- return $this->data['permissions'];
+ $perms = $this->data['permissions'];
+ if (\OCP\Util::isSharingDisabledForUser() || ($this->isShared() && !\OC\Share\Share::isResharingAllowed())) {
+ $perms = $perms & ~\OCP\Constants::PERMISSION_SHARE;
+ }
+ return $perms;
}
/**
diff --git a/lib/private/files/objectstore/objectstorestorage.php b/lib/private/files/objectstore/objectstorestorage.php
index 5ec05a3529e..b34a6bdfb84 100644
--- a/lib/private/files/objectstore/objectstorestorage.php
+++ b/lib/private/files/objectstore/objectstorestorage.php
@@ -274,7 +274,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
} else {
$ext = '';
}
- $tmpFile = \OC_Helper::tmpFile($ext);
+ $tmpFile = \OC::$server->getTempManager()->getTemporaryFile($ext);
\OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'r');
@@ -329,7 +329,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
$stat['mtime'] = $mtime;
$this->getCache()->update($stat['fileid'], $stat);
} else {
- $mimeType = \OC_Helper::getFileNameMimeType($path);
+ $mimeType = \OC::$server->getMimeTypeDetector()->detectPath($path);
// create new file
$stat = array(
'etag' => $this->getETag($path),
diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php
index 0cd67e343ff..1e30d48f613 100644
--- a/lib/private/files/storage/common.php
+++ b/lib/private/files/storage/common.php
@@ -141,10 +141,6 @@ abstract class Common implements Storage {
}
public function isSharable($path) {
- if (\OCP\Util::isSharingDisabledForUser()) {
- return false;
- }
-
return $this->isReadable($path);
}
@@ -229,7 +225,7 @@ abstract class Common implements Storage {
if ($this->is_dir($path)) {
return 'httpd/unix-directory';
} elseif ($this->file_exists($path)) {
- return \OC_Helper::getFileNameMimeType($path);
+ return \OC::$server->getMimeTypeDetector()->detectPath($path);
} else {
return false;
}
@@ -252,7 +248,7 @@ abstract class Common implements Storage {
}
public function getLocalFolder($path) {
- $baseDir = \OC_Helper::tmpFolder();
+ $baseDir = \OC::$server->getTempManager()->getTemporaryFolder();
$this->addLocalFolder($path, $baseDir);
return $baseDir;
}
diff --git a/lib/private/files/storage/dav.php b/lib/private/files/storage/dav.php
index dda163e41a0..9afebab1dd7 100644
--- a/lib/private/files/storage/dav.php
+++ b/lib/private/files/storage/dav.php
@@ -34,6 +34,7 @@
namespace OC\Files\Storage;
use Exception;
+use GuzzleHttp\Exception\RequestException;
use OC\Files\Filesystem;
use OC\Files\Stream\Close;
use Icewind\Streams\IteratorDirectory;
@@ -339,15 +340,20 @@ class DAV extends Common {
switch ($mode) {
case 'r':
case 'rb':
- if (!$this->file_exists($path)) {
- return false;
+ try {
+ $response = $this->httpClientService
+ ->newClient()
+ ->get($this->createBaseUri() . $this->encodePath($path), [
+ 'auth' => [$this->user, $this->password],
+ 'stream' => true
+ ]);
+ } catch (RequestException $e) {
+ if ($e->getResponse()->getStatusCode() === 404) {
+ return false;
+ } else {
+ throw $e;
+ }
}
- $response = $this->httpClientService
- ->newClient()
- ->get($this->createBaseUri() . $this->encodePath($path), [
- 'auth' => [$this->user, $this->password],
- 'stream' => true
- ]);
if ($response->getStatusCode() !== Http::STATUS_OK) {
if ($response->getStatusCode() === Http::STATUS_LOCKED) {
diff --git a/lib/private/files/storage/localtempfiletrait.php b/lib/private/files/storage/localtempfiletrait.php
index 84331f49b19..8875c2c4493 100644
--- a/lib/private/files/storage/localtempfiletrait.php
+++ b/lib/private/files/storage/localtempfiletrait.php
@@ -70,7 +70,7 @@ trait LocalTempFileTrait {
} else {
$extension = '';
}
- $tmpFile = \OC_Helper::tmpFile($extension);
+ $tmpFile = \OC::$server->getTempManager()->getTemporaryFile($extension);
$target = fopen($tmpFile, 'w');
\OC_Helper::streamCopy($source, $target);
fclose($target);
diff --git a/lib/private/files/storage/temporary.php b/lib/private/files/storage/temporary.php
index c8b99a55637..8abc19929b0 100644
--- a/lib/private/files/storage/temporary.php
+++ b/lib/private/files/storage/temporary.php
@@ -29,7 +29,7 @@ namespace OC\Files\Storage;
*/
class Temporary extends Local{
public function __construct($arguments = null) {
- parent::__construct(array('datadir' => \OC_Helper::tmpFolder()));
+ parent::__construct(array('datadir' => \OC::$server->getTempManager()->getTemporaryFolder()));
}
public function cleanUp() {
diff --git a/lib/private/files/storage/wrapper/availability.php b/lib/private/files/storage/wrapper/availability.php
index d6ce78f6e44..d2fbbbacf75 100644
--- a/lib/private/files/storage/wrapper/availability.php
+++ b/lib/private/files/storage/wrapper/availability.php
@@ -399,7 +399,6 @@ class Availability extends Wrapper {
/** {@inheritdoc} */
public function getOwner($path) {
- $this->checkAvailability();
try {
return parent::getOwner($path);
} catch (\OCP\Files\StorageNotAvailableException $e) {
diff --git a/lib/private/files/type/detection.php b/lib/private/files/type/detection.php
index c102e739e04..0e2bab39e5b 100644
--- a/lib/private/files/type/detection.php
+++ b/lib/private/files/type/detection.php
@@ -238,7 +238,7 @@ class Detection implements IMimeTypeDetector {
$finfo = finfo_open(FILEINFO_MIME);
return finfo_buffer($finfo, $data);
} else {
- $tmpFile = \OC_Helper::tmpFile();
+ $tmpFile = \OC::$server->getTempManager()->getTemporaryFile();
$fh = fopen($tmpFile, 'wb');
fwrite($fh, $data, 8024);
fclose($fh);
diff --git a/lib/private/files/view.php b/lib/private/files/view.php
index 6abefff4198..fcea4828c49 100644
--- a/lib/private/files/view.php
+++ b/lib/private/files/view.php
@@ -912,7 +912,7 @@ class View {
$source = $this->fopen($path, 'r');
if ($source) {
$extension = pathinfo($path, PATHINFO_EXTENSION);
- $tmpFile = \OC_Helper::tmpFile($extension);
+ $tmpFile = \OC::$server->getTempManager()->getTemporaryFile($extension);
file_put_contents($tmpFile, $source);
return $tmpFile;
} else {
@@ -1253,7 +1253,7 @@ class View {
* @param boolean|string $includeMountPoints true to add mountpoint sizes,
* 'ext' to add only ext storage mount point sizes. Defaults to true.
* defaults to true
- * @return \OC\Files\FileInfo|bool False if file does not exist
+ * @return \OC\Files\FileInfo|false False if file does not exist
*/
public function getFileInfo($path, $includeMountPoints = true) {
$this->assertPathLength($path);
diff --git a/lib/private/helper.php b/lib/private/helper.php
index 78a567638ef..64952903712 100644
--- a/lib/private/helper.php
+++ b/lib/private/helper.php
@@ -54,88 +54,6 @@ class OC_Helper {
private static $templateManager;
/**
- * Creates an url using a defined route
- * @param string $route
- * @param array $parameters with param=>value, will be appended to the returned url
- * @return string the url
- * @deprecated Use \OC::$server->getURLGenerator()->linkToRoute($route, $parameters)
- *
- * Returns a url to the given app and file.
- */
- public static function linkToRoute($route, $parameters = array()) {
- return OC::$server->getURLGenerator()->linkToRoute($route, $parameters);
- }
-
- /**
- * Creates an url
- * @param string $app app
- * @param string $file file
- * @param array $args array with param=>value, will be appended to the returned url
- * The value of $args will be urlencoded
- * @return string the url
- * @deprecated Use \OC::$server->getURLGenerator()->linkTo($app, $file, $args)
- *
- * Returns a url to the given app and file.
- */
- public static function linkTo( $app, $file, $args = array() ) {
- return OC::$server->getURLGenerator()->linkTo($app, $file, $args);
- }
-
- /**
- * Creates an absolute url
- * @param string $app app
- * @param string $file file
- * @param array $args array with param=>value, will be appended to the returned url
- * The value of $args will be urlencoded
- * @return string the url
- *
- * Returns a absolute url to the given app and file.
- */
- public static function linkToAbsolute($app, $file, $args = array()) {
- return OC::$server->getURLGenerator()->getAbsoluteURL(
- self::linkTo($app, $file, $args)
- );
- }
-
- /**
- * Makes an $url absolute
- * @param string $url the url
- * @return string the absolute url
- * @deprecated Use \OC::$server->getURLGenerator()->getAbsoluteURL($url)
- *
- * Returns a absolute url to the given app and file.
- */
- public static function makeURLAbsolute($url) {
- return OC::$server->getURLGenerator()->getAbsoluteURL($url);
- }
-
- /**
- * Creates an url for remote use
- * @param string $service id
- * @return string the url
- *
- * Returns a url to the given service.
- */
- public static function linkToRemoteBase($service) {
- return self::linkTo('', 'remote.php') . '/' . $service;
- }
-
- /**
- * Creates an absolute url for remote use
- * @param string $service id
- * @param bool $add_slash
- * @return string the url
- *
- * Returns a absolute url to the given service.
- */
- public static function linkToRemote($service, $add_slash = true) {
- return OC::$server->getURLGenerator()->getAbsoluteURL(
- self::linkToRemoteBase($service)
- . (($add_slash && $service[strlen($service) - 1] != '/') ? '/' : '')
- );
- }
-
- /**
* Creates an absolute url for public use
* @param string $service id
* @param bool $add_slash
@@ -147,7 +65,7 @@ class OC_Helper {
if ($service === 'files') {
$url = OC::$server->getURLGenerator()->getAbsoluteURL('/s');
} else {
- $url = OC::$server->getURLGenerator()->getAbsoluteURL(self::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] != '/') ? '/' : '');
}
@@ -166,18 +84,6 @@ class OC_Helper {
}
/**
- * get path to icon of file type
- * @param string $mimetype mimetype
- * @return string the url
- *
- * Returns the path to the image of this file type.
- * @deprecated 8.2.0 Use \OC::$server->getMimeTypeDetector()->mimeTypeIcon($mimetype)
- */
- public static function mimetypeIcon($mimetype) {
- return \OC::$server->getMimeTypeDetector()->mimeTypeIcon($mimetype);
- }
-
- /**
* get path to preview of file
* @param string $path path
* @return string the url
@@ -185,21 +91,11 @@ class OC_Helper {
* Returns the path to the preview of the file.
*/
public static function previewIcon($path) {
- return self::linkToRoute( 'core_ajax_preview', array('x' => 32, 'y' => 32, 'file' => $path ));
+ return \OC::$server->getURLGenerator()->linkToRoute('core_ajax_preview', ['x' => 32, 'y' => 32, 'file' => $path]);
}
public static function publicPreviewIcon( $path, $token ) {
- return self::linkToRoute( 'core_ajax_public_preview', array('x' => 32, 'y' => 32, 'file' => $path, 't' => $token));
- }
-
- /**
- * shows whether the user has an avatar
- * @param string $user username
- * @return bool avatar set or not
- * @deprecated 9.0.0 Use \OC::$server->getAvatarManager()->getAvatar($user)->exists();
- **/
- public static function userAvatarSet($user) {
- return \OC::$server->getAvatarManager()->getAvatar($user)->exists();
+ return \OC::$server->getURLGenerator()->linkToRoute('core_ajax_public_preview', ['x' => 32, 'y' => 32, 'file' => $path, 't' => $token]);
}
/**
@@ -364,14 +260,6 @@ class OC_Helper {
}
/**
- * @return \OC\Files\Type\Detection
- * @deprecated 8.2.0 use \OC::$server->getMimeTypeDetector()
- */
- static public function getMimetypeDetector() {
- return \OC::$server->getMimeTypeDetector();
- }
-
- /**
* @return \OC\Files\Type\TemplateManager
*/
static public function getFileTemplateManager() {
@@ -382,39 +270,6 @@ class OC_Helper {
}
/**
- * Try to guess the mimetype based on filename
- *
- * @param string $path
- * @return string
- * @deprecated 8.2.0 Use \OC::$server->getMimeTypeDetector()->detectPath($path)
- */
- static public function getFileNameMimeType($path) {
- return \OC::$server->getMimeTypeDetector()->detectPath($path);
- }
-
- /**
- * Get a secure mimetype that won't expose potential XSS.
- *
- * @param string $mimeType
- * @return string
- * @deprecated 8.2.0 Use \OC::$server->getMimeTypeDetector()->getSecureMimeType($mimeType)
- */
- static function getSecureMimeType($mimeType) {
- return \OC::$server->getMimeTypeDetector()->getSecureMimeType($mimeType);
- }
-
- /**
- * get the mimetype form a data string
- *
- * @param string $data
- * @return string
- * @deprecated 8.2.0 Use \OC::$server->getMimeTypeDetector()->detectString($data)
- */
- static function getStringMimeType($data) {
- return \OC::$server->getMimeTypeDetector()->detectString($data);
- }
-
- /**
* detect if a given program is found in the search PATH
*
* @param string $name
@@ -493,31 +348,6 @@ class OC_Helper {
}
/**
- * create a temporary file with an unique filename
- *
- * @param string $postfix
- * @return string
- * @deprecated Use the TempManager instead
- *
- * temporary files are automatically cleaned up after the script is finished
- */
- public static function tmpFile($postfix = '') {
- return \OC::$server->getTempManager()->getTemporaryFile($postfix);
- }
-
- /**
- * create a temporary folder with an unique filename
- *
- * @return string
- * @deprecated Use the TempManager instead
- *
- * temporary files are automatically cleaned up after the script is finished
- */
- public static function tmpFolder() {
- return \OC::$server->getTempManager()->getTemporaryFolder();
- }
-
- /**
* Adds a suffix to the name in case the file exists
*
* @param string $path
@@ -782,7 +612,7 @@ class OC_Helper {
*/
public static function getStorageInfo($path, $rootInfo = null) {
// return storage info without adding mount points
- $includeExtStorage = \OC_Config::getValue('quota_include_external_storage', false);
+ $includeExtStorage = \OC::$server->getSystemConfig()->getValue('quota_include_external_storage', false);
if (!$rootInfo) {
$rootInfo = \OC\Files\Filesystem::getFileInfo($path, false);
diff --git a/lib/private/installer.php b/lib/private/installer.php
index fa9fc6704df..bbd976cda91 100644
--- a/lib/private/installer.php
+++ b/lib/private/installer.php
@@ -232,8 +232,8 @@ class OC_Installer{
\OC::$server->getConfig(),
\OC::$server->getLogger()
);
- $appData = $ocsClient->getApplication($ocsId, \OC_Util::getVersion());
- $download = $ocsClient->getApplicationDownload($ocsId, \OC_Util::getVersion());
+ $appData = $ocsClient->getApplication($ocsId, \OCP\Util::getVersion());
+ $download = $ocsClient->getApplicationDownload($ocsId, \OCP\Util::getVersion());
if (isset($download['downloadlink']) && trim($download['downloadlink']) !== '') {
$download['downloadlink'] = str_replace(' ', '%20', $download['downloadlink']);
@@ -264,7 +264,7 @@ class OC_Installer{
//download the file if necessary
if($data['source']=='http') {
$pathInfo = pathinfo($data['href']);
- $path=OC_Helper::tmpFile('.' . $pathInfo['extension']);
+ $path = \OC::$server->getTempManager()->getTemporaryFile('.' . $pathInfo['extension']);
if(!isset($data['href'])) {
throw new \Exception($l->t("No href specified when installing app from http"));
}
@@ -284,7 +284,7 @@ class OC_Installer{
}
//extract the archive in a temporary folder
- $extractDir=OC_Helper::tmpFolder();
+ $extractDir = \OC::$server->getTempManager()->getTemporaryFolder();
OC_Helper::rmdirr($extractDir);
mkdir($extractDir);
if($archive=OC_Archive::open($path)) {
@@ -342,7 +342,7 @@ class OC_Installer{
}
// check if the app is compatible with this version of ownCloud
- if(!OC_App::isAppCompatible(OC_Util::getVersion(), $info)) {
+ if(!OC_App::isAppCompatible(\OCP\Util::getVersion(), $info)) {
OC_Helper::rmdirr($extractDir);
throw new \Exception($l->t("App can't be installed because it is not compatible with this version of ownCloud"));
}
@@ -400,7 +400,7 @@ class OC_Installer{
\OC::$server->getConfig(),
\OC::$server->getLogger()
);
- $ocsdata = $ocsClient->getApplication($ocsid, \OC_Util::getVersion());
+ $ocsdata = $ocsClient->getApplication($ocsid, \OCP\Util::getVersion());
$ocsversion= (string) $ocsdata['version'];
$currentversion=OC_App::getAppVersion($app);
if (version_compare($ocsversion, $currentversion, '>')) {
diff --git a/lib/private/json.php b/lib/private/json.php
index eba374f4da2..0bf4e8bcd01 100644
--- a/lib/private/json.php
+++ b/lib/private/json.php
@@ -76,7 +76,7 @@ class OC_JSON{
* @deprecated Use annotation based CSRF checks from the AppFramework instead
*/
public static function callCheck() {
- if( !OC_Util::isCallRegistered()) {
+ if( !(\OC::$server->getRequest()->passesCSRFCheck())) {
$l = \OC::$server->getL10N('lib');
self::error(array( 'data' => array( 'message' => $l->t('Token expired. Please reload page.'), 'error' => 'token_expired' )));
exit();
diff --git a/lib/private/legacy/config.php b/lib/private/legacy/config.php
deleted file mode 100644
index 1835d4a4b1c..00000000000
--- a/lib/private/legacy/config.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-/**
- * @author Bart Visscher <bartv@thisnet.nl>
- * @author Joas Schilling <nickvergessen@owncloud.com>
- * @author Jörn Friedrich Dreyer <jfd@butonic.de>
- * @author Lukas Reschke <lukas@owncloud.com>
- * @author Michael Gapczynski <GapczynskiM@gmail.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin McCorkell <rmccorkell@karoshi.org.uk>
- *
- * @copyright Copyright (c) 2015, ownCloud, Inc.
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-/**
- * This class is responsible for reading and writing config.php, the very basic
- * configuration file of ownCloud.
- *
- * @deprecated use \OC::$server->getConfig() to get an \OCP\Config instance
- */
-class OC_Config {
-
- /** @var \OC\Config */
- public static $object;
-
- /**
- * Lists all available config keys
- * @return array an array of key names
- *
- * This function returns all keys saved in config.php. Please note that it
- * does not return the values.
- */
- public static function getKeys() {
- return self::$object->getKeys();
- }
-
- /**
- * Gets a value from config.php
- * @param string $key key
- * @param mixed $default = null default value
- * @return mixed the value or $default
- *
- * This function gets the value from config.php. If it does not exist,
- * $default will be returned.
- */
- public static function getValue($key, $default = null) {
- return self::$object->getValue($key, $default);
- }
-
- /**
- * Sets a value
- * @param string $key key
- * @param mixed $value value
- *
- * This function sets the value and writes the config.php.
- *
- */
- public static function setValue($key, $value) {
- self::$object->setValue($key, $value);
- }
-
- /**
- * Sets and deletes values and writes the config.php
- *
- * @param array $configs Associative array with `key => value` pairs
- * If value is null, the config key will be deleted
- */
- public static function setValues(array $configs) {
- self::$object->setValues($configs);
- }
-
- /**
- * Removes a key from the config
- * @param string $key key
- *
- * This function removes a key from the config.php.
- */
- public static function deleteKey($key) {
- self::$object->deleteKey($key);
- }
-}
diff --git a/lib/private/lock/abstractlockingprovider.php b/lib/private/lock/abstractlockingprovider.php
index c7a29380efe..db5f1c72dd7 100644
--- a/lib/private/lock/abstractlockingprovider.php
+++ b/lib/private/lock/abstractlockingprovider.php
@@ -28,6 +28,8 @@ use OCP\Lock\ILockingProvider;
* to release any left over locks at the end of the request
*/
abstract class AbstractLockingProvider implements ILockingProvider {
+ const TTL = 3600; // how long until we clear stray locks in seconds
+
protected $acquiredLocks = [
'shared' => [],
'exclusive' => []
diff --git a/lib/private/lock/dblockingprovider.php b/lib/private/lock/dblockingprovider.php
index 90657e6725f..1b5142a90d2 100644
--- a/lib/private/lock/dblockingprovider.php
+++ b/lib/private/lock/dblockingprovider.php
@@ -51,8 +51,6 @@ class DBLockingProvider extends AbstractLockingProvider {
private $sharedLocks = [];
- const TTL = 3600; // how long until we clear stray locks in seconds
-
/**
* Check if we have an open shared lock for a path
*
@@ -235,10 +233,10 @@ class DBLockingProvider extends AbstractLockingProvider {
/**
* cleanup empty locks
*/
- public function cleanEmptyLocks() {
+ public function cleanExpiredLocks() {
$expire = $this->timeFactory->getTime();
$this->connection->executeUpdate(
- 'DELETE FROM `*PREFIX*file_locks` WHERE `lock` = 0 AND `ttl` < ?',
+ 'DELETE FROM `*PREFIX*file_locks` WHERE `ttl` < ?',
[$expire]
);
}
@@ -262,7 +260,7 @@ class DBLockingProvider extends AbstractLockingProvider {
public function __destruct() {
try {
- $this->cleanEmptyLocks();
+ $this->cleanExpiredLocks();
} catch (\Exception $e) {
// If the table is missing, the clean up was successful
if ($this->connection->tableExists('file_locks')) {
diff --git a/lib/private/lock/memcachelockingprovider.php b/lib/private/lock/memcachelockingprovider.php
index e4158dcdfdf..af95200d159 100644
--- a/lib/private/lock/memcachelockingprovider.php
+++ b/lib/private/lock/memcachelockingprovider.php
@@ -21,6 +21,7 @@
namespace OC\Lock;
+use OCP\IMemcacheTTL;
use OCP\Lock\LockedException;
use OCP\IMemcache;
@@ -37,6 +38,12 @@ class MemcacheLockingProvider extends AbstractLockingProvider {
$this->memcache = $memcache;
}
+ private function setTTL($path) {
+ if ($this->memcache instanceof IMemcacheTTL) {
+ $this->memcache->setTTL($path, self::TTL);
+ }
+ }
+
/**
* @param string $path
* @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE
@@ -69,6 +76,7 @@ class MemcacheLockingProvider extends AbstractLockingProvider {
throw new LockedException($path);
}
}
+ $this->setTTL($path);
$this->markAcquire($path, $type);
}
@@ -106,6 +114,7 @@ class MemcacheLockingProvider extends AbstractLockingProvider {
throw new LockedException($path);
}
}
+ $this->setTTL($path);
$this->markChange($path, $targetType);
}
}
diff --git a/lib/private/log.php b/lib/private/log.php
index ee5d61e98df..a722243dc69 100644
--- a/lib/private/log.php
+++ b/lib/private/log.php
@@ -227,7 +227,7 @@ class Log implements ILogger {
$request = \OC::$server->getRequest();
// if token is found in the request change set the log condition to satisfied
- if($request && StringUtils::equals($request->getParam('log_secret'), $logCondition['shared_secret'])) {
+ if($request && hash_equals($logCondition['shared_secret'], $request->getParam('log_secret'))) {
$this->logConditionSatisfied = true;
}
}
diff --git a/lib/private/log/owncloud.php b/lib/private/log/owncloud.php
index f8a5f7534c5..e455824a8dd 100644
--- a/lib/private/log/owncloud.php
+++ b/lib/private/log/owncloud.php
@@ -73,7 +73,7 @@ class OC_Log_Owncloud {
} catch (Exception $e) {
$timezone = new DateTimeZone('UTC');
}
- $time = DateTime::createFromFormat("U.u", microtime(true), $timezone);
+ $time = DateTime::createFromFormat("U.u", number_format(microtime(true), 4, ".", ""), $timezone);
if ($time === false) {
$time = new DateTime(null, $timezone);
}
@@ -101,6 +101,9 @@ class OC_Log_Owncloud {
// Fall back to error_log
error_log($entry);
}
+ if (php_sapi_name() === 'cli-server') {
+ error_log($message, 4);
+ }
}
/**
diff --git a/lib/private/memcache/apcu.php b/lib/private/memcache/apcu.php
index 84147233ef0..778e27d4567 100644
--- a/lib/private/memcache/apcu.php
+++ b/lib/private/memcache/apcu.php
@@ -24,7 +24,101 @@
namespace OC\Memcache;
-class APCu extends APC {
+use OCP\IMemcache;
+
+class APCu extends Cache implements IMemcache {
+ use CASTrait {
+ cas as casEmulated;
+ }
+
+ use CADTrait;
+
+ public function get($key) {
+ $result = apcu_fetch($this->getPrefix() . $key, $success);
+ if (!$success) {
+ return null;
+ }
+ return $result;
+ }
+
+ public function set($key, $value, $ttl = 0) {
+ return apcu_store($this->getPrefix() . $key, $value, $ttl);
+ }
+
+ public function hasKey($key) {
+ return apcu_exists($this->getPrefix() . $key);
+ }
+
+ public function remove($key) {
+ return apcu_delete($this->getPrefix() . $key);
+ }
+
+ public function clear($prefix = '') {
+ $ns = $this->getPrefix() . $prefix;
+ $ns = preg_quote($ns, '/');
+ if(class_exists('\APCIterator')) {
+ $iter = new \APCIterator('user', '/^' . $ns . '/', APC_ITER_KEY);
+ } else {
+ $iter = new \APCUIterator('user', '/^' . $ns . '/', APC_ITER_KEY);
+ }
+ return apcu_delete($iter);
+ }
+
+ /**
+ * Set a value in the cache if it's not already stored
+ *
+ * @param string $key
+ * @param mixed $value
+ * @param int $ttl Time To Live in seconds. Defaults to 60*60*24
+ * @return bool
+ */
+ public function add($key, $value, $ttl = 0) {
+ return apcu_add($this->getPrefix() . $key, $value, $ttl);
+ }
+
+ /**
+ * Increase a stored number
+ *
+ * @param string $key
+ * @param int $step
+ * @return int | bool
+ */
+ public function inc($key, $step = 1) {
+ $this->add($key, 0);
+ return apcu_inc($this->getPrefix() . $key, $step);
+ }
+
+ /**
+ * Decrease a stored number
+ *
+ * @param string $key
+ * @param int $step
+ * @return int | bool
+ */
+ public function dec($key, $step = 1) {
+ return apcu_dec($this->getPrefix() . $key, $step);
+ }
+
+ /**
+ * Compare and set
+ *
+ * @param string $key
+ * @param mixed $old
+ * @param mixed $new
+ * @return bool
+ */
+ public function cas($key, $old, $new) {
+ // apc only does cas for ints
+ if (is_int($old) and is_int($new)) {
+ return apcu_cas($this->getPrefix() . $key, $old, $new);
+ } else {
+ return $this->casEmulated($key, $old, $new);
+ }
+ }
+
+ /**
+ * @return bool
+ */
static public function isAvailable() {
if (!extension_loaded('apcu')) {
return false;
@@ -32,7 +126,10 @@ class APCu extends APC {
return false;
} elseif (!\OC::$server->getIniWrapper()->getBool('apc.enable_cli') && \OC::$CLI) {
return false;
- } elseif (version_compare(phpversion('apc'), '4.0.6') === -1) {
+ } elseif (
+ version_compare(phpversion('apc'), '4.0.6') === -1 &&
+ version_compare(phpversion('apcu'), '5.1.0') === -1
+ ) {
return false;
} else {
return true;
diff --git a/lib/private/memcache/redis.php b/lib/private/memcache/redis.php
index 83be662eabf..68b62e7534a 100644
--- a/lib/private/memcache/redis.php
+++ b/lib/private/memcache/redis.php
@@ -25,9 +25,9 @@
namespace OC\Memcache;
-use OCP\IMemcache;
+use OCP\IMemcacheTTL;
-class Redis extends Cache implements IMemcache {
+class Redis extends Cache implements IMemcacheTTL {
/**
* @var \Redis $cache
*/
@@ -195,6 +195,10 @@ class Redis extends Cache implements IMemcache {
return false;
}
+ public function setTTL($key, $ttl) {
+ self::$cache->expire($this->getNamespace() . $key, $ttl);
+ }
+
static public function isAvailable() {
return extension_loaded('redis')
&& version_compare(phpversion('redis'), '2.2.5', '>=');
diff --git a/lib/private/ocs/cloud.php b/lib/private/ocs/cloud.php
index 2cf40c449ff..1b04f43d477 100644
--- a/lib/private/ocs/cloud.php
+++ b/lib/private/ocs/cloud.php
@@ -26,7 +26,7 @@ class OC_OCS_Cloud {
public static function getCapabilities() {
$result = array();
- list($major, $minor, $micro) = OC_Util::getVersion();
+ list($major, $minor, $micro) = \OCP\Util::getVersion();
$result['version'] = array(
'major' => $major,
'minor' => $minor,
diff --git a/lib/private/ocsclient.php b/lib/private/ocsclient.php
index e2973f82605..81c9abee058 100644
--- a/lib/private/ocsclient.php
+++ b/lib/private/ocsclient.php
@@ -97,6 +97,7 @@ class OCSClient {
libxml_disable_entity_loader($loadEntities);
if($data === false) {
+ libxml_clear_errors();
$this->logger->error(
sprintf('Could not get %s, content was no valid XML', $action),
[
diff --git a/lib/private/preview.php b/lib/private/preview.php
index b2accdfd00f..44d38b354a9 100644
--- a/lib/private/preview.php
+++ b/lib/private/preview.php
@@ -1168,7 +1168,7 @@ class Preview {
*/
private function getMimeIcon() {
$image = new \OC_Image();
- $mimeIconWebPath = \OC_Helper::mimetypeIcon($this->mimeType);
+ $mimeIconWebPath = \OC::$server->getMimeTypeDetector()->mimeTypeIcon($this->mimeType);
if (empty(\OC::$WEBROOT)) {
$mimeIconServerPath = \OC::$SERVERROOT . $mimeIconWebPath;
} else {
@@ -1250,7 +1250,7 @@ class Preview {
* @param array $args
* @param string $prefix
*/
- public static function prepare_delete($args, $prefix = '') {
+ public static function prepare_delete(array $args, $prefix = '') {
$path = $args['path'];
if (substr($path, 0, 1) === '/') {
$path = substr($path, 1);
@@ -1259,7 +1259,11 @@ class Preview {
$view = new \OC\Files\View('/' . \OC_User::getUser() . '/' . $prefix);
$absPath = Files\Filesystem::normalizePath($view->getAbsolutePath($path));
- self::addPathToDeleteFileMapper($absPath, $view->getFileInfo($path));
+ $fileInfo = $view->getFileInfo($path);
+ if($fileInfo === false) {
+ return;
+ }
+ self::addPathToDeleteFileMapper($absPath, $fileInfo);
if ($view->is_dir($path)) {
$children = self::getAllChildren($view, $path);
self::$deleteChildrenMapper[$absPath] = $children;
diff --git a/lib/private/preview/movie.php b/lib/private/preview/movie.php
index f71eaaf3eb2..2c2e6d09399 100644
--- a/lib/private/preview/movie.php
+++ b/lib/private/preview/movie.php
@@ -46,7 +46,7 @@ class Movie extends Provider {
if ($useFileDirectly) {
$absPath = $fileview->getLocalFile($path);
} else {
- $absPath = \OC_Helper::tmpFile();
+ $absPath = \OC::$server->getTempManager()->getTemporaryFile();
$handle = $fileview->fopen($path, 'rb');
@@ -79,7 +79,7 @@ class Movie extends Provider {
* @return bool|\OCP\IImage
*/
private function generateThumbNail($maxX, $maxY, $absPath, $second) {
- $tmpPath = \OC_Helper::tmpFile();
+ $tmpPath = \OC::$server->getTempManager()->getTemporaryFile();
if (self::$avconvBinary) {
$cmd = self::$avconvBinary . ' -an -y -ss ' . escapeshellarg($second) .
diff --git a/lib/private/route/router.php b/lib/private/route/router.php
index 4ca5e16ddf2..f144c543989 100644
--- a/lib/private/route/router.php
+++ b/lib/private/route/router.php
@@ -92,7 +92,7 @@ class Router implements IRouter {
$this->logger = $logger;
$baseUrl = \OC::$WEBROOT;
if(!(getenv('front_controller_active') === 'true')) {
- $baseUrl = \OC_Helper::linkTo('', 'index.php');
+ $baseUrl = \OC::$server->getURLGenerator()->linkTo('', 'index.php');
}
if (!\OC::$CLI) {
$method = $_SERVER['REQUEST_METHOD'];
diff --git a/lib/private/security/crypto.php b/lib/private/security/crypto.php
index 0bd34df3f36..46d0c750b2f 100644
--- a/lib/private/security/crypto.php
+++ b/lib/private/security/crypto.php
@@ -123,7 +123,7 @@ class Crypto implements ICrypto {
$this->cipher->setIV($iv);
- if(!\OCP\Security\StringUtils::equals($this->calculateHMAC($parts[0].$parts[1], $password), $hmac)) {
+ if(!hash_equals($this->calculateHMAC($parts[0].$parts[1], $password), $hmac)) {
throw new \Exception('HMAC does not match.');
}
diff --git a/lib/private/security/hasher.php b/lib/private/security/hasher.php
index a5dd22e5dc8..318141b6852 100644
--- a/lib/private/security/hasher.php
+++ b/lib/private/security/hasher.php
@@ -109,7 +109,7 @@ class Hasher implements IHasher {
// Verify whether it matches a legacy PHPass or SHA1 string
$hashLength = strlen($hash);
if($hashLength === 60 && password_verify($message.$this->legacySalt, $hash) ||
- $hashLength === 40 && StringUtils::equals($hash, sha1($message))) {
+ $hashLength === 40 && hash_equals($hash, sha1($message))) {
$newHash = $this->hash($message);
return true;
}
diff --git a/lib/private/security/securerandom.php b/lib/private/security/securerandom.php
index 87dca68985e..24affbe8988 100644
--- a/lib/private/security/securerandom.php
+++ b/lib/private/security/securerandom.php
@@ -27,25 +27,15 @@ use Sabre\DAV\Exception;
use OCP\Security\ISecureRandom;
/**
- * Class SecureRandom provides a layer around RandomLib to generate
- * secure random strings. For PHP 7 the native CSPRNG is used.
+ * Class SecureRandom provides a wrapper around the random_int function to generate
+ * secure random strings. For PHP 7 the native CSPRNG is used, older versions do
+ * use a fallback.
*
* Usage:
- * \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(10);
- *
+ * \OC::$server->getSecureRandom()->generate(10);
* @package OC\Security
*/
class SecureRandom implements ISecureRandom {
-
- /** @var \RandomLib\Factory */
- var $factory;
- /** @var \RandomLib\Generator */
- var $generator;
-
- function __construct() {
- $this->factory = new RandomLib\Factory;
- }
-
/**
* Convenience method to get a low strength random number generator.
*
@@ -53,10 +43,10 @@ class SecureRandom implements ISecureRandom {
* in a non-cryptographical setting. They are not strong enough to be
* used as keys or salts. They are however useful for one-time use tokens.
*
+ * @deprecated 9.0.0 Use \OC\Security\SecureRandom::generate directly or random_bytes() / random_int()
* @return $this
*/
public function getLowStrengthGenerator() {
- $this->generator = $this->factory->getLowStrengthGenerator();
return $this;
}
@@ -67,10 +57,10 @@ class SecureRandom implements ISecureRandom {
* They are strong enough to be used as keys and salts. However, they do
* take some time and resources to generate, so they should not be over-used
*
+ * @deprecated 9.0.0 Use \OC\Security\SecureRandom::generate directly or random_bytes() / random_int()
* @return $this
*/
public function getMediumStrengthGenerator() {
- $this->generator = $this->factory->getMediumStrengthGenerator();
return $this;
}
@@ -80,26 +70,17 @@ class SecureRandom implements ISecureRandom {
* @param string $characters An optional list of characters to use if no character list is
* specified all valid base64 characters are used.
* @return string
- * @throws \Exception If the generator is not initialized.
*/
public function generate($length,
$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/') {
- if(is_null($this->generator)) {
- throw new \Exception('Generator is not initialized.');
- }
+ $maxCharIndex = strlen($characters) - 1;
+ $randomString = '';
- if(function_exists('random_int')) {
- $maxCharIndex = strlen($characters) - 1;
- $randomString = '';
-
- while($length > 0) {
- $randomNumber = random_int(0, $maxCharIndex);
- $randomString .= $characters[$randomNumber];
- $length--;
- }
- return $randomString;
+ while($length > 0) {
+ $randomNumber = random_int(0, $maxCharIndex);
+ $randomString .= $characters[$randomNumber];
+ $length--;
}
-
- return $this->generator->generateString($length, $characters);
+ return $randomString;
}
}
diff --git a/lib/private/security/stringutils.php b/lib/private/security/stringutils.php
deleted file mode 100644
index fa4342a2b45..00000000000
--- a/lib/private/security/stringutils.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-/**
- * @author Lukas Reschke <lukas@owncloud.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- *
- * @copyright Copyright (c) 2015, ownCloud, Inc.
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-namespace OC\Security;
-
-class StringUtils {
-
- /**
- * Compares whether two strings are equal. To prevent guessing of the string
- * length this is done by comparing two hashes against each other and afterwards
- * a comparison of the real string to prevent against the unlikely chance of
- * collisions.
- *
- * Be aware that this function may leak whether the string to compare have a different
- * length.
- *
- * @param string $expected The expected value
- * @param string $input The input to compare against
- * @return bool True if the two strings are equal, otherwise false.
- */
- public static function equals($expected, $input) {
-
- if(!is_string($expected) || !is_string($input)) {
- return false;
- }
-
- if(function_exists('hash_equals')) {
- return hash_equals($expected, $input);
- }
-
- $randomString = \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(10);
-
- if(hash('sha512', $expected.$randomString) === hash('sha512', $input.$randomString)) {
- if($expected === $input) {
- return true;
- }
- }
-
- return false;
- }
-} \ No newline at end of file
diff --git a/lib/private/server.php b/lib/private/server.php
index 6692e6f6bbf..7efe78b7c37 100644
--- a/lib/private/server.php
+++ b/lib/private/server.php
@@ -78,14 +78,15 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface;
*
* TODO: hookup all manager classes
*/
-class Server extends SimpleContainer implements IServerContainer {
+class Server extends ServerContainer implements IServerContainer {
/** @var string */
private $webRoot;
/**
* @param string $webRoot
+ * @param \OC\Config $config
*/
- public function __construct($webRoot) {
+ public function __construct($webRoot, \OC\Config $config) {
parent::__construct();
$this->webRoot = $webRoot;
@@ -238,8 +239,8 @@ class Server extends SimpleContainer implements IServerContainer {
$c->getSystemConfig()
);
});
- $this->registerService('SystemConfig', function ($c) {
- return new \OC\SystemConfig();
+ $this->registerService('SystemConfig', function ($c) use ($config) {
+ return new \OC\SystemConfig($config);
});
$this->registerService('AppConfig', function ($c) {
return new \OC\AppConfig(\OC_DB::getConnection());
@@ -528,6 +529,13 @@ class Server extends SimpleContainer implements IServerContainer {
});
return $manager;
});
+ $this->registerService('CommentsManager', function(Server $c) {
+ $config = $c->getConfig();
+ $factoryClass = $config->getSystemValue('comments.managerFactory', '\OC\Comments\ManagerFactory');
+ /** @var \OCP\Comments\ICommentsManagerFactory $factory */
+ $factory = new $factoryClass();
+ return $factory->getManager();
+ });
$this->registerService('EventDispatcher', function() {
return new EventDispatcher();
});
@@ -1122,6 +1130,13 @@ class Server extends SimpleContainer implements IServerContainer {
}
/**
+ * @return \OCP\Comments\ICommentsManager
+ */
+ public function getCommentsManager() {
+ return $this->query('CommentsManager');
+ }
+
+ /**
* @return \OC\IntegrityCheck\Checker
*/
public function getIntegrityCodeChecker() {
diff --git a/lib/private/servercontainer.php b/lib/private/servercontainer.php
new file mode 100644
index 00000000000..856e3f9b495
--- /dev/null
+++ b/lib/private/servercontainer.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * @author Joas Schilling <nickvergessen@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OC;
+
+
+use OC\AppFramework\DependencyInjection\DIContainer;
+use OC\AppFramework\Utility\SimpleContainer;
+use OCP\AppFramework\QueryException;
+
+/**
+ * Class ServerContainer
+ *
+ * @package OC
+ */
+class ServerContainer extends SimpleContainer {
+ /** @var DIContainer[] */
+ protected $appContainers;
+
+ /**
+ * ServerContainer constructor.
+ */
+ public function __construct() {
+ parent::__construct();
+ $this->appContainers = [];
+ }
+
+ /**
+ * @param string $appName
+ * @param DIContainer $container
+ */
+ public function registerAppContainer($appName, DIContainer $container) {
+ $this->appContainers[$appName] = $container;
+ }
+
+ /**
+ * @param string $appName
+ * @return DIContainer
+ */
+ public function getAppContainer($appName) {
+ if (isset($this->appContainers[$appName])) {
+ return $this->appContainers[$appName];
+ }
+
+ return new DIContainer($appName);
+ }
+
+ /**
+ * @param string $name name of the service to query for
+ * @return mixed registered service for the given $name
+ * @throws QueryException if the query could not be resolved
+ */
+ public function query($name) {
+ $name = $this->sanitizeName($name);
+
+ // In case the service starts with OCA\ we try to find the service in
+ // the apps container first.
+ if (strpos($name, 'OCA\\') === 0 && substr_count($name, '\\') >= 2) {
+ $segments = explode('\\', $name);
+ $appContainer = $this->getAppContainer(strtolower($segments[0]));
+ try {
+ return $appContainer->query($name);
+ } catch (QueryException $e) {
+ // Didn't find the service in the respective app container,
+ // ignore it and fall back to the core container.
+ }
+ }
+
+ return parent::query($name);
+ }
+}
diff --git a/lib/private/setup.php b/lib/private/setup.php
index 814d78679e2..770f5cdab52 100644
--- a/lib/private/setup.php
+++ b/lib/private/setup.php
@@ -322,7 +322,7 @@ class Setup {
'datadirectory' => $dataDir,
'overwrite.cli.url' => $request->getServerProtocol() . '://' . $request->getInsecureServerHost() . \OC::$WEBROOT,
'dbtype' => $dbType,
- 'version' => implode('.', \OC_Util::getVersion()),
+ 'version' => implode('.', \OCP\Util::getVersion()),
]);
try {
@@ -369,11 +369,9 @@ class Setup {
// out that this is indeed an ownCloud data directory
file_put_contents($config->getSystemValue('datadirectory', \OC::$SERVERROOT.'/data').'/.ocdata', '');
- // Update htaccess files for apache hosts
- if (isset($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) {
- self::updateHtaccess();
- self::protectDataDirectory();
- }
+ // Update .htaccess files
+ Setup::updateHtaccess();
+ Setup::protectDataDirectory();
//try to write logtimezone
if (date_default_timezone_get()) {
@@ -395,32 +393,17 @@ class Setup {
}
/**
- * Checks if the .htaccess contains the current version parameter
- *
- * @return bool
- */
- private function isCurrentHtaccess() {
- $version = \OC_Util::getVersion();
- unset($version[3]);
-
- return !strpos(
- file_get_contents($this->pathToHtaccess()),
- 'Version: '.implode('.', $version)
- ) === false;
- }
-
- /**
* Append the correct ErrorDocument path for Apache hosts
- *
- * @throws \OC\HintException If .htaccess does not include the current version
*/
public static function updateHtaccess() {
+ // From CLI we don't know the defined web root. Thus we can't write any
+ // directives into the .htaccess file.
+ if(\OC::$CLI) {
+ return;
+ }
$setupHelper = new \OC\Setup(\OC::$server->getConfig(), \OC::$server->getIniWrapper(),
\OC::$server->getL10N('lib'), new \OC_Defaults(), \OC::$server->getLogger(),
\OC::$server->getSecureRandom());
- if(!$setupHelper->isCurrentHtaccess()) {
- throw new \OC\HintException('.htaccess file has the wrong version. Please upload the correct version. Maybe you forgot to replace it after updating?');
- }
$htaccessContent = file_get_contents($setupHelper->pathToHtaccess());
$content = '';
@@ -439,6 +422,9 @@ class Setup {
$content.="\n RewriteBase ".$webRoot;
$content .= "\n <IfModule mod_env.c>";
$content .= "\n SetEnv front_controller_active true";
+ $content .= "\n <IfModule mod_dir.c>";
+ $content .= "\n DirectorySlash off";
+ $content .= "\n </IfModule>";
$content.="\n </IfModule>";
$content.="\n</IfModule>";
diff --git a/lib/private/setup/mysql.php b/lib/private/setup/mysql.php
index f2d2b15cd90..e8b88eb3489 100644
--- a/lib/private/setup/mysql.php
+++ b/lib/private/setup/mysql.php
@@ -89,15 +89,28 @@ class MySQL extends AbstractDatabase {
* @throws \OC\DatabaseSetupException
*/
private function connect() {
- $type = 'mysql';
+
$connectionParams = array(
- 'host' => $this->dbHost,
- 'user' => $this->dbUser,
- 'password' => $this->dbPassword,
- 'tablePrefix' => $this->tablePrefix,
+ 'host' => $this->dbHost,
+ 'user' => $this->dbUser,
+ 'password' => $this->dbPassword,
+ 'tablePrefix' => $this->tablePrefix,
);
+
+ // adding port support
+ if (strpos($this->dbHost, ':')) {
+ // Host variable may carry a port or socket.
+ list($host, $portOrSocket) = explode(':', $this->dbHost, 2);
+ if (ctype_digit($portOrSocket)) {
+ $connectionParams['port'] = $portOrSocket;
+ } else {
+ $connectionParams['unix_socket'] = $portOrSocket;
+ }
+ $connectionParams['host'] = $host;
+ }
+
$cf = new ConnectionFactory();
- return $cf->getConnection($type, $connectionParams);
+ return $cf->getConnection('mysql', $connectionParams);
}
/**
diff --git a/lib/private/share/helper.php b/lib/private/share/helper.php
index 26bbca81317..0441647df83 100644
--- a/lib/private/share/helper.php
+++ b/lib/private/share/helper.php
@@ -289,4 +289,38 @@ class Helper extends \OC\Share\Constants {
$hint = $l->t('Invalid Federated Cloud ID');
throw new HintException('Invalid Fededrated Cloud ID', $hint);
}
+
+ /**
+ * check if two federated cloud IDs refer to the same user
+ *
+ * @param string $user1
+ * @param string $server1
+ * @param string $user2
+ * @param string $server2
+ * @return bool true if both users and servers are the same
+ */
+ public static function isSameUserOnSameServer($user1, $server1, $user2, $server2) {
+ $normalizedServer1 = strtolower(\OC\Share\Share::removeProtocolFromUrl($server1));
+ $normalizedServer2 = strtolower(\OC\Share\Share::removeProtocolFromUrl($server2));
+
+ if (rtrim($normalizedServer1, '/') === rtrim($normalizedServer2, '/')) {
+ // FIXME this should be a method in the user management instead
+ \OCP\Util::emitHook(
+ '\OCA\Files_Sharing\API\Server2Server',
+ 'preLoginNameUsedAsUserName',
+ array('uid' => &$user1)
+ );
+ \OCP\Util::emitHook(
+ '\OCA\Files_Sharing\API\Server2Server',
+ 'preLoginNameUsedAsUserName',
+ array('uid' => &$user2)
+ );
+
+ if ($user1 === $user2) {
+ return true;
+ }
+ }
+
+ return false;
+ }
}
diff --git a/lib/private/share/mailnotifications.php b/lib/private/share/mailnotifications.php
index 4d282158ba4..f071c7f3a3c 100644
--- a/lib/private/share/mailnotifications.php
+++ b/lib/private/share/mailnotifications.php
@@ -170,7 +170,7 @@ class MailNotifications {
* @param string $filename the shared file
* @param string $link the public link
* @param int $expiration expiration date (timestamp)
- * @return array $result of failed recipients
+ * @return string[] $result of failed recipients
*/
public function sendLinkShareMail($recipient, $filename, $link, $expiration) {
$subject = (string)$this->l->t('%s shared »%s« with you', [$this->senderDisplayName, $filename]);
@@ -232,8 +232,8 @@ class MailNotifications {
}
/**
- * @param $itemSource
- * @param $itemType
+ * @param string $itemSource
+ * @param string $itemType
* @param IUser $recipient
* @return array
*/
diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index 8899df25636..fff437b3ff7 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -635,7 +635,7 @@ class Share extends Constants {
throw new \Exception($message_t);
}
// verify that the user has share permission
- if (!\OC\Files\Filesystem::isSharable($path)) {
+ if (!\OC\Files\Filesystem::isSharable($path) || \OCP\Util::isSharingDisabledForUser()) {
$message = 'You are not allowed to share %s';
$message_t = $l->t('You are not allowed to share %s', [$path]);
\OCP\Util::writeLog('OCP\Share', sprintf($message, $path), \OCP\Util::DEBUG);
@@ -762,6 +762,11 @@ class Share extends Constants {
$updateExistingShare = false;
if (\OC::$server->getAppConfig()->getValue('core', 'shareapi_allow_links', 'yes') == 'yes') {
+ // IF the password is changed via the old ajax endpoint verify it before deleting the old share
+ if ($passwordChanged === true) {
+ self::verifyPassword($shareWith);
+ }
+
// when updating a link share
// FIXME Don't delete link if we update it
if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null,
@@ -844,11 +849,20 @@ class Share extends Constants {
throw new \Exception($message_t);
}
+ // don't allow federated shares if source and target server are the same
+ list($user, $remote) = Helper::splitUserRemote($shareWith);
+ $currentServer = self::removeProtocolFromUrl(\OC::$server->getURLGenerator()->getAbsoluteURL('/'));
+ $currentUser = \OC::$server->getUserSession()->getUser()->getUID();
+ if (Helper::isSameUserOnSameServer($user, $remote, $currentUser, $currentServer)) {
+ $message = 'Not allowed to create a federated share with the same user.';
+ $message_t = $l->t('Not allowed to create a federated share with the same user');
+ \OCP\Util::writeLog('OCP\Share', $message, \OCP\Util::DEBUG);
+ throw new \Exception($message_t);
+ }
$token = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(self::TOKEN_LENGTH, \OCP\Security\ISecureRandom::CHAR_LOWER . \OCP\Security\ISecureRandom::CHAR_UPPER .
\OCP\Security\ISecureRandom::CHAR_DIGITS);
- list($user, $remote) = Helper::splitUserRemote($shareWith);
$shareWith = $user . '@' . $remote;
$shareId = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, $token, $itemSourceName);
@@ -2505,7 +2519,7 @@ class Share extends Constants {
* @param string $url
* @return string
*/
- private static function removeProtocolFromUrl($url) {
+ public static function removeProtocolFromUrl($url) {
if (strpos($url, 'https://') === 0) {
return substr($url, strlen('https://'));
} else if (strpos($url, 'http://') === 0) {
diff --git a/lib/private/systemconfig.php b/lib/private/systemconfig.php
index 94b815aebd7..fb8c18123d7 100644
--- a/lib/private/systemconfig.php
+++ b/lib/private/systemconfig.php
@@ -44,12 +44,19 @@ class SystemConfig {
'objectstore' => ['arguments' => ['password' => true]],
];
+ /** @var Config */
+ private $config;
+
+ public function __construct(Config $config) {
+ $this->config = $config;
+ }
+
/**
* Lists all available config keys
* @return array an array of key names
*/
public function getKeys() {
- return \OC_Config::getKeys();
+ return $this->config->getKeys();
}
/**
@@ -59,7 +66,7 @@ class SystemConfig {
* @param mixed $value the value that should be stored
*/
public function setValue($key, $value) {
- \OC_Config::setValue($key, $value);
+ $this->config->setValue($key, $value);
}
/**
@@ -69,7 +76,7 @@ class SystemConfig {
* If value is null, the config key will be deleted
*/
public function setValues(array $configs) {
- \OC_Config::setValues($configs);
+ $this->config->setValues($configs);
}
/**
@@ -80,7 +87,7 @@ class SystemConfig {
* @return mixed the value or $default
*/
public function getValue($key, $default = '') {
- return \OC_Config::getValue($key, $default);
+ return $this->config->getValue($key, $default);
}
/**
@@ -106,7 +113,7 @@ class SystemConfig {
* @param string $key the key of the value, under which it was saved
*/
public function deleteValue($key) {
- \OC_Config::deleteKey($key);
+ $this->config->deleteKey($key);
}
/**
diff --git a/lib/private/template.php b/lib/private/template.php
index d794dacac23..c2528c26851 100644
--- a/lib/private/template.php
+++ b/lib/private/template.php
@@ -119,7 +119,6 @@ class OC_Template extends \OC\Template\Base {
// avatars
if (\OC::$server->getSystemConfig()->getValue('enable_avatars', true) === true) {
- \OC_Util::addScript('avatar', null, true);
\OC_Util::addScript('jquery.avatar', null, true);
\OC_Util::addScript('placeholder', null, true);
}
@@ -162,6 +161,8 @@ class OC_Template extends \OC\Template\Base {
}
if (\OC::$server->getRequest()->isUserAgent([\OC\AppFramework\Http\Request::USER_AGENT_IE])) {
+ // polyfill for btoa/atob for IE friends
+ OC_Util::addVendorScript('base64/base64');
// shim for the davclient.js library
\OCP\Util::addScript('files/iedavclient');
}
diff --git a/lib/private/template/functions.php b/lib/private/template/functions.php
index d156d26f9ce..982ecde5850 100644
--- a/lib/private/template/functions.php
+++ b/lib/private/template/functions.php
@@ -146,7 +146,7 @@ function component($app, $file) {
* For further information have a look at OC_Helper::linkTo
*/
function link_to( $app, $file, $args = array() ) {
- return OC_Helper::linkTo( $app, $file, $args );
+ return \OC::$server->getURLGenerator()->linkTo($app, $file, $args);
}
/**
@@ -173,11 +173,9 @@ function image_path( $app, $image ) {
* make OC_Helper::mimetypeIcon available as a simple function
* @param string $mimetype mimetype
* @return string link to the image
- *
- * For further information have a look at OC_Helper::mimetypeIcon
*/
function mimetype_icon( $mimetype ) {
- return OC_Helper::mimetypeIcon( $mimetype );
+ return \OC::$server->getMimeTypeDetector()->mimeTypeIcon( $mimetype );
}
/**
diff --git a/lib/private/templatelayout.php b/lib/private/templatelayout.php
index 1a6a07ddc9f..bf25b2d31a9 100644
--- a/lib/private/templatelayout.php
+++ b/lib/private/templatelayout.php
@@ -136,7 +136,13 @@ class OC_TemplateLayout extends OC_Template {
$this->assign('user_uid', OC_User::getUser());
$this->assign('appsmanagement_active', $appsMgmtActive);
$this->assign('enableAvatars', $this->config->getSystemValue('enable_avatars', true));
- $this->assign('userAvatarSet', \OC_Helper::userAvatarSet(OC_User::getUser()));
+
+ if (OC_User::getUser() === false) {
+ $this->assign('userAvatarSet', false);
+ } else {
+ $this->assign('userAvatarSet', \OC::$server->getAvatarManager()->getAvatar(OC_User::getUser())->exists());
+ }
+
} else if ($renderAs == 'error') {
parent::__construct('core', 'layout.guest', '', false);
$this->assign('bodyid', 'body-login');
@@ -153,20 +159,20 @@ class OC_TemplateLayout extends OC_Template {
if(empty(self::$versionHash)) {
$v = OC_App::getAppVersions();
- $v['core'] = implode('.', \OC_Util::getVersion());
+ $v['core'] = implode('.', \OCP\Util::getVersion());
self::$versionHash = md5(implode(',', $v));
}
$useAssetPipeline = self::isAssetPipelineEnabled();
if ($useAssetPipeline) {
- $this->append( 'jsfiles', OC_Helper::linkToRoute('js_config', array('v' => self::$versionHash)));
+ $this->append( 'jsfiles', \OC::$server->getURLGenerator()->linkToRoute('js_config', ['v' => self::$versionHash]));
$this->generateAssets();
} else {
// Add the js files
$jsFiles = self::findJavascriptFiles(OC_Util::$scripts);
$this->assign('jsfiles', array());
if ($this->config->getSystemValue('installed', false) && $renderAs != 'error') {
- $this->append( 'jsfiles', OC_Helper::linkToRoute('js_config', array('v' => self::$versionHash)));
+ $this->append( 'jsfiles', \OC::$server->getURLGenerator()->linkToRoute('js_config', ['v' => self::$versionHash]));
}
foreach($jsFiles as $info) {
$web = $info[1];
@@ -275,8 +281,8 @@ class OC_TemplateLayout extends OC_Template {
$writer->writeAsset($cssCollection);
}
- $this->append('jsfiles', OC_Helper::linkTo('assets', "$jsHash.js"));
- $this->append('cssfiles', OC_Helper::linkTo('assets', "$cssHash.css"));
+ $this->append('jsfiles', \OC::$server->getURLGenerator()->linkTo('assets', "$jsHash.js"));
+ $this->append('cssfiles', \OC::$server->getURLGenerator()->linkTo('assets', "$cssHash.css"));
}
/**
diff --git a/lib/private/updater.php b/lib/private/updater.php
index 366ad2555a8..04f8dcf7226 100644
--- a/lib/private/updater.php
+++ b/lib/private/updater.php
@@ -155,7 +155,7 @@ class Updater extends BasicEmitter {
$this->config->setAppValue('core', 'installedat', microtime(true));
}
- $version = \OC_Util::getVersion();
+ $version = \OCP\Util::getVersion();
$version['installed'] = $this->config->getAppValue('core', 'installedat');
$version['updated'] = $this->config->getAppValue('core', 'lastupdatedat');
$version['updatechannel'] = \OC_Util::getChannel();
@@ -177,6 +177,8 @@ class Updater extends BasicEmitter {
$tmp['versionstring'] = (string)$data->versionstring;
$tmp['url'] = (string)$data->url;
$tmp['web'] = (string)$data->web;
+ } else {
+ libxml_clear_errors();
}
} else {
$data = [];
@@ -206,7 +208,7 @@ class Updater extends BasicEmitter {
}
$installedVersion = $this->config->getSystemValue('version', '0.0.0');
- $currentVersion = implode('.', \OC_Util::getVersion());
+ $currentVersion = implode('.', \OCP\Util::getVersion());
$this->log->debug('starting upgrade from ' . $installedVersion . ' to ' . $currentVersion, array('app' => 'core'));
$success = true;
@@ -351,7 +353,7 @@ class Updater extends BasicEmitter {
}
// only set the final version if everything went well
- $this->config->setSystemValue('version', implode('.', \OC_Util::getVersion()));
+ $this->config->setSystemValue('version', implode('.', \OCP\Util::getVersion()));
}
}
@@ -470,7 +472,7 @@ class Updater extends BasicEmitter {
private function checkAppsRequirements() {
$isCoreUpgrade = $this->isCodeUpgrade();
$apps = OC_App::getEnabledApps();
- $version = OC_Util::getVersion();
+ $version = \OCP\Util::getVersion();
$disabledApps = [];
foreach ($apps as $app) {
// check if the app is compatible with this version of ownCloud
@@ -507,7 +509,7 @@ class Updater extends BasicEmitter {
*/
private function isCodeUpgrade() {
$installedVersion = $this->config->getSystemValue('version', '0.0.0');
- $currentVersion = implode('.', OC_Util::getVersion());
+ $currentVersion = implode('.', \OCP\Util::getVersion());
if (version_compare($currentVersion, $installedVersion, '>')) {
return true;
}
diff --git a/lib/private/user.php b/lib/private/user.php
index 74441d9175a..cfa60d675fe 100644
--- a/lib/private/user.php
+++ b/lib/private/user.php
@@ -66,14 +66,6 @@ class OC_User {
return OC::$server->getUserSession();
}
- /**
- * @return \OC\User\Manager
- * @deprecated Use \OC::$server->getUserManager()
- */
- public static function getManager() {
- return OC::$server->getUserManager();
- }
-
private static $_backends = array();
private static $_usedBackends = array();
@@ -84,44 +76,6 @@ class OC_User {
private static $incognitoMode = false;
/**
- * registers backend
- *
- * @param string $backend name of the backend
- * @deprecated Add classes by calling OC_User::useBackend() with a class instance instead
- * @return bool
- *
- * Makes a list of backends that can be used by other modules
- */
- public static function registerBackend($backend) {
- self::$_backends[] = $backend;
- return true;
- }
-
- /**
- * gets available backends
- *
- * @deprecated
- * @return array an array of backends
- *
- * Returns the names of all backends.
- */
- public static function getBackends() {
- return self::$_backends;
- }
-
- /**
- * gets used backends
- *
- * @deprecated
- * @return array an array of backends
- *
- * Returns the names of all used backends.
- */
- public static function getUsedBackends() {
- return array_keys(self::$_usedBackends);
- }
-
- /**
* Adds the backend to the list of used backends
*
* @param string|OC_User_Interface $backend default: database The backend to use for user management
@@ -132,7 +86,7 @@ class OC_User {
public static function useBackend($backend = 'database') {
if ($backend instanceof OC_User_Interface) {
self::$_usedBackends[get_class($backend)] = $backend;
- self::getManager()->registerBackend($backend);
+ \OC::$server->getUserManager()->registerBackend($backend);
} else {
// You'll never know what happens
if (null === $backend OR !is_string($backend)) {
@@ -146,17 +100,17 @@ class OC_User {
case 'sqlite':
\OCP\Util::writeLog('core', 'Adding user backend ' . $backend . '.', \OCP\Util::DEBUG);
self::$_usedBackends[$backend] = new OC_User_Database();
- self::getManager()->registerBackend(self::$_usedBackends[$backend]);
+ \OC::$server->getUserManager()->registerBackend(self::$_usedBackends[$backend]);
break;
case 'dummy':
self::$_usedBackends[$backend] = new \Test\Util\User\Dummy();
- self::getManager()->registerBackend(self::$_usedBackends[$backend]);
+ \OC::$server->getUserManager()->registerBackend(self::$_usedBackends[$backend]);
break;
default:
\OCP\Util::writeLog('core', 'Adding default user backend ' . $backend . '.', \OCP\Util::DEBUG);
$className = 'OC_USER_' . strToUpper($backend);
self::$_usedBackends[$backend] = new $className();
- self::getManager()->registerBackend(self::$_usedBackends[$backend]);
+ \OC::$server->getUserManager()->registerBackend(self::$_usedBackends[$backend]);
break;
}
}
@@ -168,7 +122,7 @@ class OC_User {
*/
public static function clearBackends() {
self::$_usedBackends = array();
- self::getManager()->clearBackends();
+ \OC::$server->getUserManager()->clearBackends();
}
/**
@@ -176,7 +130,7 @@ class OC_User {
*/
public static function setupBackends() {
OC_App::loadApps(array('prelogin'));
- $backends = OC_Config::getValue('user_backends', array());
+ $backends = \OC::$server->getSystemConfig()->getValue('user_backends', array());
foreach ($backends as $i => $config) {
$class = $config['class'];
$arguments = $config['arguments'];
@@ -199,42 +153,6 @@ class OC_User {
}
/**
- * Create a new user
- *
- * @param string $uid The username of the user to create
- * @param string $password The password of the new user
- * @throws Exception
- * @return bool true/false
- *
- * Creates a new user. Basic checking of username is done in OC_User
- * itself, not in its subclasses.
- *
- * Allowed characters in the username are: "a-z", "A-Z", "0-9" and "_.@-"
- * @deprecated Use \OC::$server->getUserManager()->createUser($uid, $password)
- */
- public static function createUser($uid, $password) {
- return self::getManager()->createUser($uid, $password);
- }
-
- /**
- * delete a user
- *
- * @param string $uid The username of the user to delete
- * @return bool
- *
- * Deletes a user
- * @deprecated Use \OC::$server->getUserManager()->get() and then run delete() on the return
- */
- public static function deleteUser($uid) {
- $user = self::getManager()->get($uid);
- if ($user) {
- return $user->delete();
- } else {
- return false;
- }
- }
-
- /**
* Try to login a user
*
* @param string $loginname The login name of the user to log in
@@ -343,7 +261,7 @@ class OC_User {
if (is_null($displayName)) {
$displayName = $uid;
}
- $user = self::getManager()->get($uid);
+ $user = \OC::$server->getUserManager()->get($uid);
if ($user) {
return $user->setDisplayName($displayName);
} else {
@@ -452,7 +370,7 @@ class OC_User {
*/
public static function getDisplayName($uid = null) {
if ($uid) {
- $user = self::getManager()->get($uid);
+ $user = \OC::$server->getUserManager()->get($uid);
if ($user) {
return $user->getDisplayName();
} else {
@@ -490,7 +408,7 @@ class OC_User {
* Change the password of a user
*/
public static function setPassword($uid, $password, $recoveryPassword = null) {
- $user = self::getManager()->get($uid);
+ $user = \OC::$server->getUserManager()->get($uid);
if ($user) {
return $user->setPassword($password, $recoveryPassword);
} else {
@@ -507,7 +425,7 @@ class OC_User {
* Check whether a specified user can change his avatar
*/
public static function canUserChangeAvatar($uid) {
- $user = self::getManager()->get($uid);
+ $user = \OC::$server->getUserManager()->get($uid);
if ($user) {
return $user->canChangeAvatar();
} else {
@@ -524,7 +442,7 @@ class OC_User {
* Check whether a specified user can change his password
*/
public static function canUserChangePassword($uid) {
- $user = self::getManager()->get($uid);
+ $user = \OC::$server->getUserManager()->get($uid);
if ($user) {
return $user->canChangePassword();
} else {
@@ -541,7 +459,7 @@ class OC_User {
* Check whether a specified user can change his display name
*/
public static function canUserChangeDisplayName($uid) {
- $user = self::getManager()->get($uid);
+ $user = \OC::$server->getUserManager()->get($uid);
if ($user) {
return $user->canChangeDisplayName();
} else {
@@ -560,7 +478,7 @@ class OC_User {
* returns the user id or false
*/
public static function checkPassword($uid, $password) {
- $manager = self::getManager();
+ $manager = \OC::$server->getUserManager();
$username = $manager->checkPassword($uid, $password);
if ($username !== false) {
return $username->getUID();
@@ -576,11 +494,11 @@ class OC_User {
* @deprecated Use \OC::$server->getUserManager->getHome()
*/
public static function getHome($uid) {
- $user = self::getManager()->get($uid);
+ $user = \OC::$server->getUserManager()->get($uid);
if ($user) {
return $user->getHome();
} else {
- return OC_Config::getValue('datadirectory', OC::$SERVERROOT . '/data') . '/' . $uid;
+ return \OC::$server->getSystemConfig()->getValue('datadirectory', OC::$SERVERROOT . '/data') . '/' . $uid;
}
}
@@ -595,7 +513,7 @@ class OC_User {
* @param integer $offset
*/
public static function getUsers($search = '', $limit = null, $offset = null) {
- $users = self::getManager()->search($search, $limit, $offset);
+ $users = \OC::$server->getUserManager()->search($search, $limit, $offset);
$uids = array();
foreach ($users as $user) {
$uids[] = $user->getUID();
@@ -616,7 +534,7 @@ class OC_User {
*/
public static function getDisplayNames($search = '', $limit = null, $offset = null) {
$displayNames = array();
- $users = self::getManager()->searchDisplayName($search, $limit, $offset);
+ $users = \OC::$server->getUserManager()->searchDisplayName($search, $limit, $offset);
foreach ($users as $user) {
$displayNames[$user->getUID()] = $user->getDisplayName();
}
@@ -630,7 +548,7 @@ class OC_User {
* @return boolean
*/
public static function userExists($uid) {
- return self::getManager()->userExists($uid);
+ return \OC::$server->getUserManager()->userExists($uid);
}
/**
@@ -639,7 +557,7 @@ class OC_User {
* @param string $uid the user to disable
*/
public static function disableUser($uid) {
- $user = self::getManager()->get($uid);
+ $user = \OC::$server->getUserManager()->get($uid);
if ($user) {
$user->setEnabled(false);
}
@@ -651,7 +569,7 @@ class OC_User {
* @param string $uid
*/
public static function enableUser($uid) {
- $user = self::getManager()->get($uid);
+ $user = \OC::$server->getUserManager()->get($uid);
if ($user) {
$user->setEnabled(true);
}
@@ -664,7 +582,7 @@ class OC_User {
* @return bool
*/
public static function isEnabled($uid) {
- $user = self::getManager()->get($uid);
+ $user = \OC::$server->getUserManager()->get($uid);
if ($user) {
return $user->isEnabled();
} else {
diff --git a/lib/private/user/user.php b/lib/private/user/user.php
index d827097ee39..6c89dd06f77 100644
--- a/lib/private/user/user.php
+++ b/lib/private/user/user.php
@@ -189,6 +189,8 @@ class User implements IUser {
// Delete the users entry in the storage table
\OC\Files\Cache\Storage::remove('home::' . $this->uid);
+
+ \OC::$server->getCommentsManager()->deleteReferencesOfActor('user', $this->uid);
}
if ($this->emitter) {
diff --git a/lib/private/util.php b/lib/private/util.php
index eb188b649e8..c9738b29ca1 100644
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -72,7 +72,7 @@ class OC_Util {
private static function initLocalStorageRootFS() {
// mount local file backend as root
- $configDataDirectory = OC_Config::getValue("datadirectory", OC::$SERVERROOT . "/data");
+ $configDataDirectory = \OC::$server->getSystemConfig()->getValue("datadirectory", OC::$SERVERROOT . "/data");
//first set up the local "root" storage
\OC\Files\Filesystem::initMountManager();
if (!self::$rootMounted) {
@@ -184,7 +184,7 @@ class OC_Util {
OC_Hook::emit('OC_Filesystem', 'preSetup', array('user' => $user));
//check if we are using an object storage
- $objectStore = OC_Config::getValue('objectstore');
+ $objectStore = \OC::$server->getSystemConfig()->getValue('objectstore', null);
if (isset($objectStore)) {
self::initObjectStoreRootFS($objectStore);
} else {
@@ -642,13 +642,15 @@ class OC_Util {
}
// Check if config folder is writable.
- if (!is_writable(OC::$configDir) or !is_readable(OC::$configDir)) {
- $errors[] = array(
- 'error' => $l->t('Cannot write into "config" directory'),
- 'hint' => $l->t('This can usually be fixed by '
- . '%sgiving the webserver write access to the config directory%s.',
- array('<a href="' . $urlGenerator->linkToDocs('admin-dir_permissions') . '" target="_blank">', '</a>'))
- );
+ if(!OC_Helper::isReadOnlyConfigEnabled()) {
+ if (!is_writable(OC::$configDir) or !is_readable(OC::$configDir)) {
+ $errors[] = array(
+ 'error' => $l->t('Cannot write into "config" directory'),
+ 'hint' => $l->t('This can usually be fixed by '
+ . '%sgiving the webserver write access to the config directory%s.',
+ array('<a href="' . $urlGenerator->linkToDocs('admin-dir_permissions') . '" target="_blank">', '</a>'))
+ );
+ }
}
// Check if there is a writable install folder.
@@ -846,7 +848,7 @@ class OC_Util {
public static function checkDatabaseVersion() {
$l = \OC::$server->getL10N('lib');
$errors = array();
- $dbType = \OC_Config::getValue('dbtype', 'sqlite');
+ $dbType = \OC::$server->getSystemConfig()->getValue('dbtype', 'sqlite');
if ($dbType === 'pgsql') {
// check PostgreSQL version
try {
@@ -949,9 +951,11 @@ class OC_Util {
$parameters['canResetPassword'] = true;
if (!\OC::$server->getSystemConfig()->getValue('lost_password_link')) {
- $user = \OC::$server->getUserManager()->get($_REQUEST['user']);
- if ($user instanceof IUser) {
- $parameters['canResetPassword'] = $user->canChangePassword();
+ if (isset($_REQUEST['user'])) {
+ $user = \OC::$server->getUserManager()->get($_REQUEST['user']);
+ if ($user instanceof IUser) {
+ $parameters['canResetPassword'] = $user->canChangePassword();
+ }
}
}
@@ -970,7 +974,7 @@ class OC_Util {
*/
public static function checkAppEnabled($app) {
if (!OC_App::isEnabled($app)) {
- header('Location: ' . OC_Helper::linkToAbsolute('', 'index.php'));
+ header('Location: ' . \OCP\Util::linkToAbsolute('', 'index.php'));
exit();
}
}
@@ -984,7 +988,7 @@ class OC_Util {
public static function checkLoggedIn() {
// Check if we are a user
if (!OC_User::isLoggedIn()) {
- header('Location: ' . OC_Helper::linkToAbsolute('', 'index.php',
+ header('Location: ' . \OCP\Util::linkToAbsolute('', 'index.php',
[
'redirect_url' => \OC::$server->getRequest()->getRequestUri()
]
@@ -1002,7 +1006,7 @@ class OC_Util {
public static function checkAdminUser() {
OC_Util::checkLoggedIn();
if (!OC_User::isAdminUser(OC_User::getUser())) {
- header('Location: ' . OC_Helper::linkToAbsolute('', 'index.php'));
+ header('Location: ' . \OCP\Util::linkToAbsolute('', 'index.php'));
exit();
}
}
@@ -1042,7 +1046,7 @@ class OC_Util {
}
if (!$isSubAdmin) {
- header('Location: ' . OC_Helper::linkToAbsolute('', 'index.php'));
+ header('Location: ' . \OCP\Util::linkToAbsolute('', 'index.php'));
exit();
}
return true;
@@ -1104,11 +1108,11 @@ class OC_Util {
* @return string
*/
public static function getInstanceId() {
- $id = OC_Config::getValue('instanceid', null);
+ $id = \OC::$server->getSystemConfig()->getValue('instanceid', null);
if (is_null($id)) {
// We need to guarantee at least one letter in instanceid so it can be used as the session_name
$id = 'oc' . \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(10, \OCP\Security\ISecureRandom::CHAR_LOWER.\OCP\Security\ISecureRandom::CHAR_DIGITS);
- OC_Config::$object->setValue('instanceid', $id);
+ \OC::$server->getSystemConfig()->setValue('instanceid', $id);
}
return $id;
}
@@ -1123,7 +1127,6 @@ class OC_Util {
* Creates a 'request token' (random) and stores it inside the session.
* Ever subsequent (ajax) request must use such a valid token to succeed,
* otherwise the request will be denied as a protection against CSRF.
- * @see OC_Util::isCallRegistered()
*/
public static function callRegister() {
// Use existing token if function has already been called
@@ -1151,27 +1154,6 @@ class OC_Util {
}
/**
- * Check an ajax get/post call if the request token is valid.
- *
- * @return boolean False if request token is not set or is invalid.
- * @see OC_Util::callRegister()
- */
- public static function isCallRegistered() {
- return \OC::$server->getRequest()->passesCSRFCheck();
- }
-
- /**
- * Check an ajax get/post call if the request token is valid. Exit if not.
- *
- * @return void
- */
- public static function callCheck() {
- if (!OC_Util::isCallRegistered()) {
- exit();
- }
- }
-
- /**
* Public function to sanitize HTML
*
* This function is used to sanitize HTML and should be applied on any
@@ -1246,7 +1228,7 @@ class OC_Util {
fclose($fp);
// accessing the file via http
- $url = OC_Helper::makeURLAbsolute(OC::$WEBROOT . '/data' . $fileName);
+ $url = \OC::$server->getURLGenerator()->getAbsoluteURL(OC::$WEBROOT . '/data' . $fileName);
try {
$content = \OC::$server->getHTTPClientService()->newClient()->get($url)->getBody();
} catch (\Exception $e) {
@@ -1360,7 +1342,7 @@ class OC_Util {
* @return string the theme
*/
public static function getTheme() {
- $theme = OC_Config::getValue("theme", '');
+ $theme = \OC::$server->getSystemConfig()->getValue("theme", '');
if ($theme === '') {
if (is_dir(OC::$SERVERROOT . '/themes/default')) {
@@ -1505,7 +1487,7 @@ class OC_Util {
public static function needUpgrade(\OCP\IConfig $config) {
if ($config->getSystemValue('installed', false)) {
$installedVersion = $config->getSystemValue('version', '0.0.0');
- $currentVersion = implode('.', OC_Util::getVersion());
+ $currentVersion = implode('.', \OCP\Util::getVersion());
$versionDiff = version_compare($currentVersion, $installedVersion);
if ($versionDiff > 0) {
return true;
diff --git a/lib/public/backgroundjob/ijob.php b/lib/public/backgroundjob/ijob.php
index a24a5434521..8d970dbe781 100644
--- a/lib/public/backgroundjob/ijob.php
+++ b/lib/public/backgroundjob/ijob.php
@@ -36,12 +36,29 @@ interface IJob {
*
* @param \OCP\BackgroundJob\IJobList $jobList The job list that manages the state of this job
* @param ILogger $logger
- * @return void
* @since 7.0.0
*/
public function execute($jobList, ILogger $logger = null);
/**
+ * @param int $id
+ * @since 7.0.0
+ */
+ public function setId($id);
+
+ /**
+ * @param int $lastRun
+ * @since 7.0.0
+ */
+ public function setLastRun($lastRun);
+
+ /**
+ * @param mixed $argument
+ * @since 7.0.0
+ */
+ public function setArgument($argument);
+
+ /**
* Get the id of the background job
* This id is determined by the job list when a job is added to the list
*
diff --git a/lib/public/backgroundjob/ijoblist.php b/lib/public/backgroundjob/ijoblist.php
index 384f8b3d801..51431c42a67 100644
--- a/lib/public/backgroundjob/ijoblist.php
+++ b/lib/public/backgroundjob/ijoblist.php
@@ -36,7 +36,6 @@ interface IJobList {
*
* @param \OCP\BackgroundJob\IJob|string $job
* @param mixed $argument The argument to be passed to $job->run() when the job is exectured
- * @return void
* @since 7.0.0
*/
public function add($job, $argument = null);
@@ -46,7 +45,6 @@ interface IJobList {
*
* @param \OCP\BackgroundJob\IJob|string $job
* @param mixed $argument
- * @return void
* @since 7.0.0
*/
public function remove($job, $argument = null);
@@ -72,14 +70,14 @@ interface IJobList {
/**
* get the next job in the list
*
- * @return \OCP\BackgroundJob\IJob
+ * @return \OCP\BackgroundJob\IJob|null
* @since 7.0.0
*/
public function getNext();
/**
* @param int $id
- * @return \OCP\BackgroundJob\IJob
+ * @return \OCP\BackgroundJob\IJob|null
* @since 7.0.0
*/
public function getById($id);
@@ -88,7 +86,6 @@ interface IJobList {
* set the job that was last ran to the current time
*
* @param \OCP\BackgroundJob\IJob $job
- * @return void
* @since 7.0.0
*/
public function setLastJob($job);
@@ -105,7 +102,6 @@ interface IJobList {
* set the lastRun of $job to now
*
* @param \OCP\BackgroundJob\IJob $job
- * @return void
* @since 7.0.0
*/
public function setLastRun($job);
diff --git a/lib/public/comments/icomment.php b/lib/public/comments/icomment.php
index c8f407624a0..7924ec8d5f6 100644
--- a/lib/public/comments/icomment.php
+++ b/lib/public/comments/icomment.php
@@ -5,7 +5,7 @@ namespace OCP\Comments;
/**
* Interface IComment
*
- * This class represents a comment and offers methods for modification.
+ * This class represents a comment
*
* @package OCP\Comments
* @since 9.0.0
@@ -49,7 +49,6 @@ interface IComment {
/**
* sets the parent ID and returns itself
- *
* @param string $parentId
* @return IComment
* @since 9.0.0
@@ -57,6 +56,24 @@ interface IComment {
public function setParentId($parentId);
/**
+ * returns the topmost parent ID of the comment
+ *
+ * @return string
+ * @since 9.0.0
+ */
+ public function getTopmostParentId();
+
+
+ /**
+ * sets the topmost parent ID and returns itself
+ *
+ * @param string $id
+ * @return IComment
+ * @since 9.0.0
+ */
+ public function setTopmostParentId($id);
+
+ /**
* returns the number of children
*
* @return int
diff --git a/lib/public/comments/icommentsmanager.php b/lib/public/comments/icommentsmanager.php
index ebf7a34bf27..7626ffd6351 100644
--- a/lib/public/comments/icommentsmanager.php
+++ b/lib/public/comments/icommentsmanager.php
@@ -13,6 +13,17 @@ namespace OCP\Comments;
interface ICommentsManager {
/**
+ * @const DELETED_USER type and id for a user that has been deleted
+ * @see deleteReferencesOfActor
+ * @since 9.0.0
+ *
+ * To be used as replacement for user type actors in deleteReferencesOfActor().
+ *
+ * User interfaces shall show "Deleted user" as display name, if needed.
+ */
+ const DELETED_USER = 'deleted_user';
+
+ /**
* returns a comment instance
*
* @param string $id the ID of the comment
@@ -28,7 +39,7 @@ interface ICommentsManager {
* @param string $id
* @param int $limit max number of entries to return, 0 returns all
* @param int $offset the start entry
- * @return []
+ * @return array
* @since 9.0.0
*
* The return array looks like this
@@ -73,7 +84,6 @@ interface ICommentsManager {
* @param \DateTime $notOlderThan optional, timestamp of the oldest comments
* that may be returned
* @return IComment[]
- * @throws NotFoundException in case the requested type or id is not present
* @since 9.0.0
*/
public function getForObject(
@@ -88,7 +98,6 @@ interface ICommentsManager {
* @param $objectType string the object type, e.g. 'files'
* @param $objectId string the id of the object
* @return Int
- * @throws NotFoundException in case the requested type or id is not present
* @since 9.0.0
*/
public function getNumberOfCommentsForObject($objectType, $objectId);
@@ -130,17 +139,20 @@ interface ICommentsManager {
* Throws NotFoundException when a comment that is to be updated does not
* exist anymore at this point of time.
*
- * @param IComment
+ * @param IComment $comment
* @return bool
* @throws NotFoundException
* @since 9.0.0
*/
- public function save(&$comment);
+ public function save(IComment $comment);
/**
* removes references to specific actor (e.g. on user delete) of a comment.
* The comment itself must not get lost/deleted.
*
+ * A 'user' type actor (type and id) should get replaced by the
+ * value of the DELETED_USER constant of this interface.
+ *
* @param string $actorType the actor type (e.g. 'user')
* @param string $actorId a user id
* @return boolean
diff --git a/lib/public/comments/icommentsmanagerfactory.php b/lib/public/comments/icommentsmanagerfactory.php
new file mode 100644
index 00000000000..6718dd39ba0
--- /dev/null
+++ b/lib/public/comments/icommentsmanagerfactory.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace OCP\Comments;
+
+/**
+ * Interface ICommentsManagerFactory
+ *
+ * This class is responsible for instantiating and returning an ICommentsManager
+ * instance.
+ *
+ * @package OCP\Comments
+ * @since 9.0.0
+ */
+interface ICommentsManagerFactory {
+
+ /**
+ * creates and returns an instance of the ICommentsManager
+ *
+ * @return ICommentsManager
+ * @since 9.0.0
+ */
+ public function getManager();
+}
diff --git a/lib/public/iavatar.php b/lib/public/iavatar.php
index fc29212a599..3d92d00b83d 100644
--- a/lib/public/iavatar.php
+++ b/lib/public/iavatar.php
@@ -24,6 +24,8 @@
*/
namespace OCP;
+use OCP\Files\File;
+use OCP\Files\NotFoundException;
/**
* This class provides avatar functionality
@@ -64,4 +66,13 @@ interface IAvatar {
* @since 6.0.0
*/
public function remove();
+
+ /**
+ * Get the file of the avatar
+ * @param int $size
+ * @return File
+ * @throws NotFoundException
+ * @since 9.0.0
+ */
+ public function getFile($size);
}
diff --git a/lib/public/imemcachettl.php b/lib/public/imemcachettl.php
new file mode 100644
index 00000000000..3c2bfe8ad27
--- /dev/null
+++ b/lib/public/imemcachettl.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * @author Robin Appelman <icewind@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCP;
+
+/**
+ * Interface for memcache backends that support setting ttl after the value is set
+ *
+ * @since 8.2.2
+ */
+interface IMemcacheTTL extends IMemcache {
+ /**
+ * Set the ttl for an existing value
+ *
+ * @param string $key
+ * @param int $ttl time to live in seconds
+ * @since 8.2.2
+ */
+ public function setTTL($key, $ttl);
+}
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index 7cb2672254b..267e5dc4d31 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -472,6 +472,12 @@ interface IServerContainer {
public function getNotificationManager();
/**
+ * @return \OCP\Comments\ICommentsManager
+ * @since 9.0.0
+ */
+ public function getCommentsManager();
+
+ /**
* Returns the system-tag manager
*
* @return \OCP\SystemTag\ISystemTagManager
diff --git a/lib/public/security/isecurerandom.php b/lib/public/security/isecurerandom.php
index 1b72e4f4377..8315d0f971a 100644
--- a/lib/public/security/isecurerandom.php
+++ b/lib/public/security/isecurerandom.php
@@ -23,12 +23,12 @@
namespace OCP\Security;
/**
- * Class SecureRandom provides a layer around RandomLib to generate
- * secure random strings. For PHP 7 the native CSPRNG is used.
+ * Class SecureRandom provides a wrapper around the random_int function to generate
+ * secure random strings. For PHP 7 the native CSPRNG is used, older versions do
+ * use a fallback.
*
* Usage:
- * $rng = new \OC\Security\SecureRandom();
- * $randomString = $rng->getMediumStrengthGenerator()->generateString(30);
+ * \OC::$server->getSecureRandom()->generate(10);
*
* @package OCP\Security
* @since 8.0.0
@@ -52,6 +52,7 @@ interface ISecureRandom {
*
* @return $this
* @since 8.0.0
+ * @deprecated 9.0.0 Use \OC\Security\SecureRandom::generate directly or random_bytes() / random_int()
*/
public function getLowStrengthGenerator();
@@ -64,6 +65,7 @@ interface ISecureRandom {
*
* @return $this
* @since 8.0.0
+ * @deprecated 9.0.0 Use \OC\Security\SecureRandom::generate directly or random_bytes() / random_int()
*/
public function getMediumStrengthGenerator();
@@ -73,7 +75,6 @@ interface ISecureRandom {
* @param string $characters An optional list of characters to use if no character list is
* specified all valid base64 characters are used.
* @return string
- * @throws \Exception If the generator is not initialized.
* @since 8.0.0
*/
public function generate($length,
diff --git a/lib/public/security/stringutils.php b/lib/public/security/stringutils.php
index 4f41fcf8262..7cf12ea2702 100644
--- a/lib/public/security/stringutils.php
+++ b/lib/public/security/stringutils.php
@@ -39,8 +39,9 @@ class StringUtils {
* @param string $input The input to compare against
* @return bool True if the two strings are equal, otherwise false.
* @since 8.0.0
+ * @deprecated 9.0.0 Use hash_equals
*/
public static function equals($expected, $input) {
- return \OC\Security\StringUtils::equals($expected, $input);
+ return hash_equals($expected, $input);
}
}
diff --git a/lib/public/util.php b/lib/public/util.php
index 4e783b764ed..493aa0000a5 100644
--- a/lib/public/util.php
+++ b/lib/public/util.php
@@ -269,7 +269,10 @@ class Util {
* @since 4.0.0 - parameter $args was added in 4.5.0
*/
public static function linkToAbsolute( $app, $file, $args = array() ) {
- return(\OC_Helper::linkToAbsolute( $app, $file, $args ));
+ $urlGenerator = \OC::$server->getURLGenerator();
+ return $urlGenerator->getAbsoluteURL(
+ $urlGenerator->linkTo($app, $file, $args)
+ );
}
/**
@@ -279,7 +282,11 @@ class Util {
* @since 4.0.0
*/
public static function linkToRemote( $service ) {
- return(\OC_Helper::linkToRemote( $service ));
+ $urlGenerator = \OC::$server->getURLGenerator();
+ $remoteBase = $urlGenerator->linkTo('', 'remote.php') . '/' . $service;
+ return $urlGenerator->getAbsoluteURL(
+ $remoteBase . (($service[strlen($service) - 1] != '/') ? '/' : '')
+ );
}
/**
@@ -302,7 +309,7 @@ class Util {
* @since 5.0.0
*/
public static function linkToRoute( $route, $parameters = array() ) {
- return \OC_Helper::linkToRoute($route, $parameters);
+ return \OC::$server->getURLGenerator()->linkToRoute($route, $parameters);
}
/**
@@ -316,7 +323,7 @@ class Util {
* @since 4.0.0 - parameter $args was added in 4.5.0
*/
public static function linkTo( $app, $file, $args = array() ) {
- return(\OC_Helper::linkTo( $app, $file, $args ));
+ return \OC::$server->getURLGenerator()->linkTo($app, $file, $args);
}
/**
@@ -487,7 +494,9 @@ class Util {
* @since 4.5.0
*/
public static function callCheck() {
- \OC_Util::callCheck();
+ if (!(\OC::$server->getRequest()->passesCSRFCheck())) {
+ exit();
+ }
}
/**
diff --git a/settings/changepassword/controller.php b/settings/changepassword/controller.php
index 695914683db..f5b9bd58b59 100644
--- a/settings/changepassword/controller.php
+++ b/settings/changepassword/controller.php
@@ -55,10 +55,10 @@ class Controller {
\OC_JSON::callCheck();
\OC_JSON::checkLoggedIn();
+ $l = new \OC_L10n('settings');
if (isset($_POST['username'])) {
$username = $_POST['username'];
} else {
- $l = new \OC_L10n('settings');
\OC_JSON::error(array('data' => array('message' => $l->t('No user supplied')) ));
exit();
}
@@ -78,7 +78,6 @@ class Controller {
} elseif ($isUserAccessible) {
$userstatus = 'subadmin';
} else {
- $l = new \OC_L10n('settings');
\OC_JSON::error(array('data' => array('message' => $l->t('Authentication error')) ));
exit();
}
@@ -122,7 +121,6 @@ class Controller {
$validRecoveryPassword = $keyManager->checkRecoveryPassword($recoveryPassword);
$recoveryEnabledForUser = $recovery->isRecoveryEnabledForUser($username);
}
- $l = new \OC_L10n('settings');
if ($recoveryEnabledForUser && $recoveryPassword === '') {
\OC_JSON::error(array('data' => array(
diff --git a/settings/controller/appsettingscontroller.php b/settings/controller/appsettingscontroller.php
index d0e465bfa9c..d2430f9b559 100644
--- a/settings/controller/appsettingscontroller.php
+++ b/settings/controller/appsettingscontroller.php
@@ -159,7 +159,7 @@ class AppSettingsController extends Controller {
if($this->ocsClient->isAppStoreEnabled()) {
// apps from external repo via OCS
- $ocs = $this->ocsClient->getCategories(\OC_Util::getVersion());
+ $ocs = $this->ocsClient->getCategories(\OCP\Util::getVersion());
if ($ocs) {
foreach($ocs as $k => $v) {
$name = str_replace('ownCloud ', '', $v);
@@ -205,9 +205,10 @@ class AppSettingsController extends Controller {
}
return ($a < $b) ? -1 : 1;
});
+ $version = \OCP\Util::getVersion();
foreach($apps as $key => $app) {
if(!array_key_exists('level', $app) && array_key_exists('ocsid', $app)) {
- $remoteAppEntry = $this->ocsClient->getApplication($app['ocsid'], \OC_Util::getVersion());
+ $remoteAppEntry = $this->ocsClient->getApplication($app['ocsid'], $version);
if(is_array($remoteAppEntry) && array_key_exists('level', $remoteAppEntry)) {
$apps[$key]['level'] = $remoteAppEntry['level'];
@@ -221,9 +222,10 @@ class AppSettingsController extends Controller {
$apps = array_filter($apps, function ($app) {
return !$app['active'];
});
+ $version = \OCP\Util::getVersion();
foreach($apps as $key => $app) {
if(!array_key_exists('level', $app) && array_key_exists('ocsid', $app)) {
- $remoteAppEntry = $this->ocsClient->getApplication($app['ocsid'], \OC_Util::getVersion());
+ $remoteAppEntry = $this->ocsClient->getApplication($app['ocsid'], $version);
if(is_array($remoteAppEntry) && array_key_exists('level', $remoteAppEntry)) {
$apps[$key]['level'] = $remoteAppEntry['level'];
diff --git a/settings/help.php b/settings/help.php
index 60719a3df92..848ce06cf49 100644
--- a/settings/help.php
+++ b/settings/help.php
@@ -34,17 +34,17 @@ OC_Util::addStyle( "settings", "settings" );
if(isset($_GET['mode']) and $_GET['mode'] === 'admin') {
- $url=OC_Helper::linkToAbsolute( 'core', 'doc/admin/index.html' );
+ $url=\OCP\Util::linkToAbsolute( 'core', 'doc/admin/index.html' );
$style1='';
$style2=' active';
}else{
- $url=OC_Helper::linkToAbsolute( 'core', 'doc/user/index.html' );
+ $url=\OCP\Util::linkToAbsolute( 'core', 'doc/user/index.html' );
$style1=' active';
$style2='';
}
-$url1=OC_Helper::linkToRoute( "settings_help" ).'?mode=user';
-$url2=OC_Helper::linkToRoute( "settings_help" ).'?mode=admin';
+$url1=\OC::$server->getURLGenerator()->linkToRoute('settings_help').'?mode=user';
+$url2=\OC::$server->getURLGenerator()->linkToRoute('settings_help').'?mode=admin';
$tmpl = new OC_Template( "settings", "help", "user" );
$tmpl->assign( "admin", OC_User::isAdminUser(OC_User::getUser()));
diff --git a/settings/js/personal.js b/settings/js/personal.js
index 8362adac2a6..b90194b90ec 100644
--- a/settings/js/personal.js
+++ b/settings/js/personal.js
@@ -405,6 +405,11 @@ $(document).ready(function () {
if ($('#sslCertificate > tbody > tr').length === 0) {
$('#sslCertificate').hide();
}
+
+ // Load the big avatar
+ if (oc_config.enable_avatars) {
+ $('#avatar .avatardiv').avatar(OC.currentUser, 128);
+ }
});
if (!OC.Encryption) {
diff --git a/settings/js/users/users.js b/settings/js/users/users.js
index 2f8a964bafb..aea94053572 100644
--- a/settings/js/users/users.js
+++ b/settings/js/users/users.js
@@ -68,7 +68,7 @@ var UserList = {
if (user.isAvatarAvailable === true) {
$('div.avatardiv', $tr).avatar(user.name, 32, undefined, undefined, undefined, user.displayname);
} else {
- $('div.avatardiv', $tr).imageplaceholder(user.displayname);
+ $('div.avatardiv', $tr).imageplaceholder(user.displayname, undefined, 32);
}
}
@@ -650,7 +650,7 @@ $(document).ready(function () {
{username: uid, password: $(this).val(), recoveryPassword: recoveryPasswordVal},
function (result) {
if (result.status != 'success') {
- OC.Notification.show(t('admin', result.data.message));
+ OC.Notification.showTemporary(t('admin', result.data.message));
}
}
);
@@ -698,6 +698,8 @@ $(document).ready(function () {
}
}
);
+ var displayName = $input.val();
+ $tr.data('displayname', displayName);
$input.blur();
} else {
$input.blur();
@@ -705,8 +707,7 @@ $(document).ready(function () {
}
})
.blur(function () {
- var displayName = $input.val();
- $tr.data('displayname', displayName);
+ var displayName = $tr.data('displayname');
$input.replaceWith('<span>' + escapeHTML(displayName) + '</span>');
$td.find('img').show();
});
@@ -725,6 +726,7 @@ $(document).ready(function () {
.keypress(function (event) {
if (event.keyCode === 13) {
if ($(this).val().length > 0) {
+ $tr.data('mailAddress', $input.val());
$input.blur();
$.ajax({
type: 'PUT',
@@ -744,7 +746,7 @@ $(document).ready(function () {
}
})
.blur(function () {
- var mailAddress = $input.val();
+ var mailAddress = $tr.data('mailAddress');
var $span = $('<span>').text(mailAddress);
$tr.data('mailAddress', mailAddress);
$input.replaceWith($span);
diff --git a/settings/l10n/ar.js b/settings/l10n/ar.js
index 818d001b3d6..b6b17974408 100644
--- a/settings/l10n/ar.js
+++ b/settings/l10n/ar.js
@@ -4,11 +4,9 @@ OC.L10N.register(
"Sharing" : "مشاركة",
"Cron" : "مجدول",
"Log" : "سجل",
- "Authentication error" : "لم يتم التأكد من الشخصية بنجاح",
- "Your full name has been changed." : "اسمك الكامل تم تغييره.",
- "Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل",
"Language changed" : "تم تغيير اللغة",
"Invalid request" : "طلب غير مفهوم",
+ "Authentication error" : "لم يتم التأكد من الشخصية بنجاح",
"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",
@@ -23,6 +21,8 @@ OC.L10N.register(
"test email settings" : "إعدادات البريد التجريبي",
"Email sent" : "تم ارسال البريد الالكتروني",
"Email saved" : "تم حفظ البريد الإلكتروني",
+ "Your full name has been changed." : "اسمك الكامل تم تغييره.",
+ "Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.",
"Sending..." : "جاري الارسال ...",
"All" : "الكل",
@@ -82,7 +82,6 @@ OC.L10N.register(
"Forum" : "منتدى",
"Get the apps to sync your files" : "احصل على التطبيقات لمزامنة ملفاتك",
"Show First Run Wizard again" : "ابدأ خطوات بداية التشغيل من جديد",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "تم إستهلاك <strong>%s</strong> من المتوفر <strong>%s</strong>",
"Password" : "كلمة المرور",
"Unable to change your password" : "لم يتم تعديل كلمة السر بنجاح",
"Current password" : "كلمات السر الحالية",
diff --git a/settings/l10n/ar.json b/settings/l10n/ar.json
index 6e2a8268b5f..770e2856261 100644
--- a/settings/l10n/ar.json
+++ b/settings/l10n/ar.json
@@ -2,11 +2,9 @@
"Sharing" : "مشاركة",
"Cron" : "مجدول",
"Log" : "سجل",
- "Authentication error" : "لم يتم التأكد من الشخصية بنجاح",
- "Your full name has been changed." : "اسمك الكامل تم تغييره.",
- "Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل",
"Language changed" : "تم تغيير اللغة",
"Invalid request" : "طلب غير مفهوم",
+ "Authentication error" : "لم يتم التأكد من الشخصية بنجاح",
"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",
@@ -21,6 +19,8 @@
"test email settings" : "إعدادات البريد التجريبي",
"Email sent" : "تم ارسال البريد الالكتروني",
"Email saved" : "تم حفظ البريد الإلكتروني",
+ "Your full name has been changed." : "اسمك الكامل تم تغييره.",
+ "Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.",
"Sending..." : "جاري الارسال ...",
"All" : "الكل",
@@ -80,7 +80,6 @@
"Forum" : "منتدى",
"Get the apps to sync your files" : "احصل على التطبيقات لمزامنة ملفاتك",
"Show First Run Wizard again" : "ابدأ خطوات بداية التشغيل من جديد",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "تم إستهلاك <strong>%s</strong> من المتوفر <strong>%s</strong>",
"Password" : "كلمة المرور",
"Unable to change your password" : "لم يتم تعديل كلمة السر بنجاح",
"Current password" : "كلمات السر الحالية",
diff --git a/settings/l10n/ast.js b/settings/l10n/ast.js
index 9597cc9a522..8bca7c8c0d2 100644
--- a/settings/l10n/ast.js
+++ b/settings/l10n/ast.js
@@ -6,12 +6,10 @@ OC.L10N.register(
"Cron" : "Cron",
"Log" : "Rexistru",
"Updates" : "Anovamientos",
- "Authentication error" : "Fallu d'autenticación",
- "Your full name has been changed." : "Camudóse'l nome completu.",
- "Unable to change full name" : "Nun pue camudase'l nome completu",
"Couldn't remove app." : "Nun pudo desaniciase l'aplicación.",
"Language changed" : "Camudóse la llingua",
"Invalid request" : "Solicitú inválida",
+ "Authentication error" : "Fallu d'autenticació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",
@@ -28,6 +26,8 @@ OC.L10N.register(
"Email sent" : "Corréu-e unviáu",
"You need to set your user email before being able to send test emails." : "Tienes de configurar la direición de corréu-e enantes de poder unviar mensaxes de prueba.",
"Email saved" : "Corréu-e guardáu",
+ "Your full name has been changed." : "Camudóse'l nome completu.",
+ "Unable to change full name" : "Nun pue camudase'l nome completu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿De xuru que quies amestar \"{domain}\" como dominiu de confianza?",
"Add trusted domain" : "Amestar dominiu de confianza",
"Sending..." : "Unviando...",
@@ -127,7 +127,6 @@ OC.L10N.register(
"Android app" : "Aplicación d'Android",
"iOS app" : "Aplicación d'iOS",
"Show First Run Wizard again" : "Amosar nuevamente l'Encontu d'execución inicial",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Usasti <strong>%s</strong> de los <strong>%s</strong> disponibles",
"Password" : "Contraseña",
"Unable to change your password" : "Nun pudo camudase la contraseña",
"Current password" : "Contraseña actual",
diff --git a/settings/l10n/ast.json b/settings/l10n/ast.json
index c3252ba8bf5..e824763c7aa 100644
--- a/settings/l10n/ast.json
+++ b/settings/l10n/ast.json
@@ -4,12 +4,10 @@
"Cron" : "Cron",
"Log" : "Rexistru",
"Updates" : "Anovamientos",
- "Authentication error" : "Fallu d'autenticación",
- "Your full name has been changed." : "Camudóse'l nome completu.",
- "Unable to change full name" : "Nun pue camudase'l nome completu",
"Couldn't remove app." : "Nun pudo desaniciase l'aplicación.",
"Language changed" : "Camudóse la llingua",
"Invalid request" : "Solicitú inválida",
+ "Authentication error" : "Fallu d'autenticació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",
@@ -26,6 +24,8 @@
"Email sent" : "Corréu-e unviáu",
"You need to set your user email before being able to send test emails." : "Tienes de configurar la direición de corréu-e enantes de poder unviar mensaxes de prueba.",
"Email saved" : "Corréu-e guardáu",
+ "Your full name has been changed." : "Camudóse'l nome completu.",
+ "Unable to change full name" : "Nun pue camudase'l nome completu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿De xuru que quies amestar \"{domain}\" como dominiu de confianza?",
"Add trusted domain" : "Amestar dominiu de confianza",
"Sending..." : "Unviando...",
@@ -125,7 +125,6 @@
"Android app" : "Aplicación d'Android",
"iOS app" : "Aplicación d'iOS",
"Show First Run Wizard again" : "Amosar nuevamente l'Encontu d'execución inicial",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Usasti <strong>%s</strong> de los <strong>%s</strong> disponibles",
"Password" : "Contraseña",
"Unable to change your password" : "Nun pudo camudase la contraseña",
"Current password" : "Contraseña actual",
diff --git a/settings/l10n/az.js b/settings/l10n/az.js
index 60a2492a282..01a15f5fb7d 100644
--- a/settings/l10n/az.js
+++ b/settings/l10n/az.js
@@ -7,12 +7,10 @@ OC.L10N.register(
"Cron" : "Cron",
"Log" : "Jurnal",
"Updates" : "Yenilənmələr",
- "Authentication error" : "Təyinat metodikası",
- "Your full name has been changed." : "Sizin tam adınız dəyişdirildi.",
- "Unable to change full name" : "Tam adı dəyişmək olmur",
"Couldn't remove app." : "Proqram təminatını silmək mümkün olmadı.",
"Language changed" : "Dil dəyişdirildi",
"Invalid request" : "Səhv müraciət",
+ "Authentication error" : "Təyinat metodikası",
"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ı",
@@ -44,6 +42,8 @@ OC.L10N.register(
"Invalid user" : "İstifadəçi adı yalnışdır",
"Unable to change mail address" : "Mail ünvanını dəyişmək olmur",
"Email saved" : "Məktub yadda saxlanıldı",
+ "Your full name has been changed." : "Sizin tam adınız dəyişdirildi.",
+ "Unable to change full name" : "Tam adı dəyişmək olmur",
"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?",
"Add trusted domain" : "İnamlı domainlərə əlavə et",
"Sending..." : "Göndərilir...",
@@ -173,7 +173,6 @@ OC.L10N.register(
"iOS app" : "iOS proqramı",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Əgər siz proektə dəstək vermək istəyirsinizsə\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">Təkmilləşdirməyə üzv</a>\n\t\tyada\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">söz yaymaq</a>!",
"Show First Run Wizard again" : "İlk işəsalma sehirbazını yenidən göstər",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Siz istifadə etdiniz <strong>%s</strong> mövcud olan <strong>%s</strong>",
"Password" : "Şifrə",
"Unable to change your password" : "Sizin şifrəni dəyişmək mümkün olmadı",
"Current password" : "Hazırkı şifrə",
diff --git a/settings/l10n/az.json b/settings/l10n/az.json
index 8b46a472df7..8e09dc87fc2 100644
--- a/settings/l10n/az.json
+++ b/settings/l10n/az.json
@@ -5,12 +5,10 @@
"Cron" : "Cron",
"Log" : "Jurnal",
"Updates" : "Yenilənmələr",
- "Authentication error" : "Təyinat metodikası",
- "Your full name has been changed." : "Sizin tam adınız dəyişdirildi.",
- "Unable to change full name" : "Tam adı dəyişmək olmur",
"Couldn't remove app." : "Proqram təminatını silmək mümkün olmadı.",
"Language changed" : "Dil dəyişdirildi",
"Invalid request" : "Səhv müraciət",
+ "Authentication error" : "Təyinat metodikası",
"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ı",
@@ -42,6 +40,8 @@
"Invalid user" : "İstifadəçi adı yalnışdır",
"Unable to change mail address" : "Mail ünvanını dəyişmək olmur",
"Email saved" : "Məktub yadda saxlanıldı",
+ "Your full name has been changed." : "Sizin tam adınız dəyişdirildi.",
+ "Unable to change full name" : "Tam adı dəyişmək olmur",
"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?",
"Add trusted domain" : "İnamlı domainlərə əlavə et",
"Sending..." : "Göndərilir...",
@@ -171,7 +171,6 @@
"iOS app" : "iOS proqramı",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Əgər siz proektə dəstək vermək istəyirsinizsə\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">Təkmilləşdirməyə üzv</a>\n\t\tyada\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">söz yaymaq</a>!",
"Show First Run Wizard again" : "İlk işəsalma sehirbazını yenidən göstər",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Siz istifadə etdiniz <strong>%s</strong> mövcud olan <strong>%s</strong>",
"Password" : "Şifrə",
"Unable to change your password" : "Sizin şifrəni dəyişmək mümkün olmadı",
"Current password" : "Hazırkı şifrə",
diff --git a/settings/l10n/bg_BG.js b/settings/l10n/bg_BG.js
index 425b8f47dc7..81b20601291 100644
--- a/settings/l10n/bg_BG.js
+++ b/settings/l10n/bg_BG.js
@@ -7,12 +7,10 @@ OC.L10N.register(
"Cron" : "Крон",
"Log" : "Лог",
"Updates" : "Обновления",
- "Authentication error" : "Възникна проблем с идентификацията",
- "Your full name has been changed." : "Вашето пълно име е променено.",
- "Unable to change full name" : "Неуспешна промяна на пълното име.",
"Couldn't remove app." : "Неуспешно премахване на приложението.",
"Language changed" : "Езикът е променен",
"Invalid request" : "Невалидна заявка",
+ "Authentication error" : "Възникна проблем с идентификацията",
"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.",
@@ -43,6 +41,8 @@ OC.L10N.register(
"Invalid user" : "Невалиден протребител",
"Unable to change mail address" : "Неуспешна промяна на адрес на електронна поща",
"Email saved" : "Имейлът е запазен",
+ "Your full name has been changed." : "Вашето пълно име е променено.",
+ "Unable to change full name" : "Неуспешна промяна на пълното име.",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Сигурен/на ли сте, че искате \"{domain}\" да бъде добавен като сигурен домейн?",
"Add trusted domain" : "Добавяне на сигурен домейн",
"Sending..." : "Изпращане...",
@@ -173,7 +173,6 @@ OC.L10N.register(
"iOS app" : "iOS приложение",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ако искаш да помогнеш на проекта:\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">присъедини се и пиши код</a>\n\t\tили\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">разпространи мълвата</a>!",
"Show First Run Wizard again" : "Покажи Настройките за Първоначално Зареждане отново",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Използвал си <strong>%s</strong> от наличните <strong>%s</strong>.",
"Password" : "Парола",
"Unable to change your password" : "Неуспешна промяна на паролата.",
"Current password" : "Текуща парола",
diff --git a/settings/l10n/bg_BG.json b/settings/l10n/bg_BG.json
index e12faed8f69..0bcb30520e3 100644
--- a/settings/l10n/bg_BG.json
+++ b/settings/l10n/bg_BG.json
@@ -5,12 +5,10 @@
"Cron" : "Крон",
"Log" : "Лог",
"Updates" : "Обновления",
- "Authentication error" : "Възникна проблем с идентификацията",
- "Your full name has been changed." : "Вашето пълно име е променено.",
- "Unable to change full name" : "Неуспешна промяна на пълното име.",
"Couldn't remove app." : "Неуспешно премахване на приложението.",
"Language changed" : "Езикът е променен",
"Invalid request" : "Невалидна заявка",
+ "Authentication error" : "Възникна проблем с идентификацията",
"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.",
@@ -41,6 +39,8 @@
"Invalid user" : "Невалиден протребител",
"Unable to change mail address" : "Неуспешна промяна на адрес на електронна поща",
"Email saved" : "Имейлът е запазен",
+ "Your full name has been changed." : "Вашето пълно име е променено.",
+ "Unable to change full name" : "Неуспешна промяна на пълното име.",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Сигурен/на ли сте, че искате \"{domain}\" да бъде добавен като сигурен домейн?",
"Add trusted domain" : "Добавяне на сигурен домейн",
"Sending..." : "Изпращане...",
@@ -171,7 +171,6 @@
"iOS app" : "iOS приложение",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ако искаш да помогнеш на проекта:\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">присъедини се и пиши код</a>\n\t\tили\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">разпространи мълвата</a>!",
"Show First Run Wizard again" : "Покажи Настройките за Първоначално Зареждане отново",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Използвал си <strong>%s</strong> от наличните <strong>%s</strong>.",
"Password" : "Парола",
"Unable to change your password" : "Неуспешна промяна на паролата.",
"Current password" : "Текуща парола",
diff --git a/settings/l10n/bn_BD.js b/settings/l10n/bn_BD.js
index b83657ea346..3e9e28da9a5 100644
--- a/settings/l10n/bn_BD.js
+++ b/settings/l10n/bn_BD.js
@@ -3,11 +3,10 @@ OC.L10N.register(
{
"Sharing" : "ভাগাভাগিরত",
"External Storage" : "বাহ্যিক সংরক্ষণাগার",
- "Authentication error" : "অনুমোদন ঘটিত সমস্যা",
- "Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।",
"Couldn't remove app." : "অ্যাপ অপসারণ করা গেলনা",
"Language changed" : "ভাষা পরিবর্তন করা হয়েছে",
"Invalid request" : "অনুরোধটি সঠিক নয়",
+ "Authentication error" : "অনুমোদন ঘটিত সমস্যা",
"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 গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না",
@@ -19,6 +18,7 @@ OC.L10N.register(
"test email settings" : "ইমেইল নিয়ামকসমূহ পরীক্ষা করুন",
"Email sent" : "ই-মেইল পাঠানো হয়েছে",
"Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে",
+ "Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।",
"All" : "সবাই",
"Error while disabling app" : "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ",
"Disable" : "নিষ্ক্রিয়",
@@ -55,7 +55,6 @@ OC.L10N.register(
"Forum" : "ফোরাম",
"Get the apps to sync your files" : "আপনার ফাইলসমূহ সিংক করতে অ্যাপস নিন",
"Show First Run Wizard again" : "প্রথমবার চালানোর যাদুকর পূনরায় প্রদর্শন কর",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "আপনি ব্যবহার করছেন <strong>%s</strong>, সুলভ <strong>%s</strong> এর মধ্যে।",
"Password" : "কূটশব্দ",
"Unable to change your password" : "আপনার কূটশব্দটি পরিবর্তন করতে সক্ষম নয়",
"Current password" : "বর্তমান কূটশব্দ",
diff --git a/settings/l10n/bn_BD.json b/settings/l10n/bn_BD.json
index daa17c9fa93..ec57244bb72 100644
--- a/settings/l10n/bn_BD.json
+++ b/settings/l10n/bn_BD.json
@@ -1,11 +1,10 @@
{ "translations": {
"Sharing" : "ভাগাভাগিরত",
"External Storage" : "বাহ্যিক সংরক্ষণাগার",
- "Authentication error" : "অনুমোদন ঘটিত সমস্যা",
- "Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।",
"Couldn't remove app." : "অ্যাপ অপসারণ করা গেলনা",
"Language changed" : "ভাষা পরিবর্তন করা হয়েছে",
"Invalid request" : "অনুরোধটি সঠিক নয়",
+ "Authentication error" : "অনুমোদন ঘটিত সমস্যা",
"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 গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না",
@@ -17,6 +16,7 @@
"test email settings" : "ইমেইল নিয়ামকসমূহ পরীক্ষা করুন",
"Email sent" : "ই-মেইল পাঠানো হয়েছে",
"Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে",
+ "Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।",
"All" : "সবাই",
"Error while disabling app" : "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ",
"Disable" : "নিষ্ক্রিয়",
@@ -53,7 +53,6 @@
"Forum" : "ফোরাম",
"Get the apps to sync your files" : "আপনার ফাইলসমূহ সিংক করতে অ্যাপস নিন",
"Show First Run Wizard again" : "প্রথমবার চালানোর যাদুকর পূনরায় প্রদর্শন কর",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "আপনি ব্যবহার করছেন <strong>%s</strong>, সুলভ <strong>%s</strong> এর মধ্যে।",
"Password" : "কূটশব্দ",
"Unable to change your password" : "আপনার কূটশব্দটি পরিবর্তন করতে সক্ষম নয়",
"Current password" : "বর্তমান কূটশব্দ",
diff --git a/settings/l10n/bs.js b/settings/l10n/bs.js
index feafcfe9661..b209de0e714 100644
--- a/settings/l10n/bs.js
+++ b/settings/l10n/bs.js
@@ -5,12 +5,10 @@ OC.L10N.register(
"Cron" : "Cron",
"Log" : "Zapisnik",
"Updates" : "Ažuriranja",
- "Authentication error" : "Grešna autentifikacije",
- "Your full name has been changed." : "Vaše puno ime je promijenjeno.",
- "Unable to change full name" : "Puno ime nije moguće promijeniti",
"Couldn't remove app." : "Nije moguće ukloniti aplikaciju.",
"Language changed" : "Jezik je promijenjen",
"Invalid request" : "Neispravan zahtjev",
+ "Authentication error" : "Grešna autentifikacije",
"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",
@@ -37,6 +35,8 @@ OC.L10N.register(
"Invalid user" : "Nevažeči korisnik",
"Unable to change mail address" : "Nemoguće je izmjeniti adresu e-pošte",
"Email saved" : "E-pošta je spremljena",
+ "Your full name has been changed." : "Vaše puno ime je promijenjeno.",
+ "Unable to change full name" : "Puno ime nije moguće promijeniti",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li zaista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
"Add trusted domain" : "Dodaj pouzdanu domenu",
"Sending..." : "Slanje...",
@@ -145,7 +145,6 @@ OC.L10N.register(
"Android app" : "Android aplikacija",
"iOS app" : "iOS aplikacija",
"Show First Run Wizard again" : "Opet pokažite First Run Wizard",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Iskoristili ste <strong>%s</strong> od raspoloživog <strong>%s</strong>",
"Password" : "Lozinka",
"Unable to change your password" : "Vašu lozinku nije moguće promijeniti",
"Current password" : "Trenutna lozinka",
diff --git a/settings/l10n/bs.json b/settings/l10n/bs.json
index ece2026bc23..f85499598da 100644
--- a/settings/l10n/bs.json
+++ b/settings/l10n/bs.json
@@ -3,12 +3,10 @@
"Cron" : "Cron",
"Log" : "Zapisnik",
"Updates" : "Ažuriranja",
- "Authentication error" : "Grešna autentifikacije",
- "Your full name has been changed." : "Vaše puno ime je promijenjeno.",
- "Unable to change full name" : "Puno ime nije moguće promijeniti",
"Couldn't remove app." : "Nije moguće ukloniti aplikaciju.",
"Language changed" : "Jezik je promijenjen",
"Invalid request" : "Neispravan zahtjev",
+ "Authentication error" : "Grešna autentifikacije",
"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",
@@ -35,6 +33,8 @@
"Invalid user" : "Nevažeči korisnik",
"Unable to change mail address" : "Nemoguće je izmjeniti adresu e-pošte",
"Email saved" : "E-pošta je spremljena",
+ "Your full name has been changed." : "Vaše puno ime je promijenjeno.",
+ "Unable to change full name" : "Puno ime nije moguće promijeniti",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li zaista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
"Add trusted domain" : "Dodaj pouzdanu domenu",
"Sending..." : "Slanje...",
@@ -143,7 +143,6 @@
"Android app" : "Android aplikacija",
"iOS app" : "iOS aplikacija",
"Show First Run Wizard again" : "Opet pokažite First Run Wizard",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Iskoristili ste <strong>%s</strong> od raspoloživog <strong>%s</strong>",
"Password" : "Lozinka",
"Unable to change your password" : "Vašu lozinku nije moguće promijeniti",
"Current password" : "Trenutna lozinka",
diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js
index 1725d278b4f..798f6c39595 100644
--- a/settings/l10n/ca.js
+++ b/settings/l10n/ca.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Registre",
"Tips & tricks" : "Consells i trucs",
"Updates" : "Actualitzacions",
- "Authentication error" : "Error d'autenticació",
- "Your full name has been changed." : "El vostre nom complet ha canviat.",
- "Unable to change full name" : "No s'ha pogut canviar el nom complet",
"Couldn't remove app." : "No s'ha pogut eliminar l'aplicació",
"Language changed" : "S'ha canviat l'idioma",
"Invalid request" : "Sol·licitud no vàlida",
+ "Authentication error" : "Error d'autenticació",
"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",
@@ -50,6 +48,8 @@ OC.L10N.register(
"Invalid user" : "Usuari no vàlid",
"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",
+ "Your full name has been changed." : "El vostre nom complet ha canviat.",
+ "Unable to change full name" : "No s'ha pogut canviar el nom complet",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?",
"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ó",
@@ -199,7 +199,6 @@ OC.L10N.register(
"iOS app" : "aplicació para iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vol recolzar el projecte\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\"> unir-se al desenvolupament</a>\n⇥⇥o\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\"> difondre'l !</a>!",
"Show First Run Wizard again" : "Torna a mostrar l'assistent de primera execució",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Heu utilitzat <strong>%s</strong> d'un total disponible de <strong>%s</strong>",
"Password" : "Contrasenya",
"Unable to change your password" : "No s'ha pogut canviar la contrasenya",
"Current password" : "Contrasenya actual",
diff --git a/settings/l10n/ca.json b/settings/l10n/ca.json
index 39f569a4a11..00f13762a83 100644
--- a/settings/l10n/ca.json
+++ b/settings/l10n/ca.json
@@ -10,12 +10,10 @@
"Log" : "Registre",
"Tips & tricks" : "Consells i trucs",
"Updates" : "Actualitzacions",
- "Authentication error" : "Error d'autenticació",
- "Your full name has been changed." : "El vostre nom complet ha canviat.",
- "Unable to change full name" : "No s'ha pogut canviar el nom complet",
"Couldn't remove app." : "No s'ha pogut eliminar l'aplicació",
"Language changed" : "S'ha canviat l'idioma",
"Invalid request" : "Sol·licitud no vàlida",
+ "Authentication error" : "Error d'autenticació",
"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",
@@ -48,6 +46,8 @@
"Invalid user" : "Usuari no vàlid",
"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",
+ "Your full name has been changed." : "El vostre nom complet ha canviat.",
+ "Unable to change full name" : "No s'ha pogut canviar el nom complet",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?",
"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ó",
@@ -197,7 +197,6 @@
"iOS app" : "aplicació para iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vol recolzar el projecte\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\"> unir-se al desenvolupament</a>\n⇥⇥o\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\"> difondre'l !</a>!",
"Show First Run Wizard again" : "Torna a mostrar l'assistent de primera execució",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Heu utilitzat <strong>%s</strong> d'un total disponible de <strong>%s</strong>",
"Password" : "Contrasenya",
"Unable to change your password" : "No s'ha pogut canviar la contrasenya",
"Current password" : "Contrasenya actual",
diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js
index 3e5d3867c65..c9fcc22e379 100644
--- a/settings/l10n/cs_CZ.js
+++ b/settings/l10n/cs_CZ.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Záznam",
"Tips & tricks" : "Tipy a triky",
"Updates" : "Aktualizace",
- "Authentication error" : "Chyba přihlášení",
- "Your full name has been changed." : "Vaše celé jméno bylo změněno.",
- "Unable to change full name" : "Nelze změnit celé jméno",
"Couldn't remove app." : "Nepodařilo se odebrat aplikaci.",
"Language changed" : "Jazyk byl změněn",
"Invalid request" : "Neplatný požadavek",
+ "Authentication error" : "Chyba přihlášení",
"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",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "Neplatný uživatel",
"Unable to change mail address" : "Nelze změnit emailovou adresu",
"Email saved" : "Email uložen",
+ "Your full name has been changed." : "Vaše celé jméno bylo změněno.",
+ "Unable to change full name" : "Nelze změnit celé jméno",
"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",
"Migration in progress. Please wait until the migration is finished" : "Migrace probíhá. Počkejte prosím než bude dokončena",
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Velmi doporučujeme nainstalovat požadované balíčky do systému, pro podporu jednoho z následujících národních prostředí: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Instalace mimo kořenový adresář domény a používání systémového příkazu cron může způsobit problém s generováním správné URL. Pro zabránění těmto chybám nastavte prosím správnou cestu ve svém config.php souboru v hodnotě \"overwrite.cli.url\" (Je doporučena tato: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Nebylo možné spustit službu cron v CLI. Došlo k následujícím technickým chybám:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transakční uzamykání souborů používá databázi jako uzamykací mechanismus, pro co nejlepší výkon nakonfigurujte uzamykání pomocí memcache. Více informací najdete v <a target=\"_blank\" href=\"%s\">dokumentaci ↗</a>.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Ověřte znovu prosím informace z <a target=\"_blank\" href=\"%s\">instalační příručky ↗</a> a zkontrolujte <a href=\"#log-section\">log</a> na výskyt chyb a varování.",
"All checks passed." : "Všechny testy byly úspěšné.",
"Open documentation" : "Otevřít dokumentaci",
@@ -231,7 +230,6 @@ OC.L10N.register(
"iOS app" : "iOS aplikace",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Chcete-li podpořit tento projekt\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">přidejte se k jeho vývoji</a>\n\t\tnebo\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">šiřte osvětu</a>!",
"Show First Run Wizard again" : "Znovu zobrazit průvodce prvním spuštěním",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Používáte <strong>%s</strong> z <strong>%s</strong> dostupných",
"Password" : "Heslo",
"Unable to change your password" : "Změna vašeho hesla se nezdařila",
"Current password" : "Současné heslo",
diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json
index 42771f82ba2..43b692760f0 100644
--- a/settings/l10n/cs_CZ.json
+++ b/settings/l10n/cs_CZ.json
@@ -10,12 +10,10 @@
"Log" : "Záznam",
"Tips & tricks" : "Tipy a triky",
"Updates" : "Aktualizace",
- "Authentication error" : "Chyba přihlášení",
- "Your full name has been changed." : "Vaše celé jméno bylo změněno.",
- "Unable to change full name" : "Nelze změnit celé jméno",
"Couldn't remove app." : "Nepodařilo se odebrat aplikaci.",
"Language changed" : "Jazyk byl změněn",
"Invalid request" : "Neplatný požadavek",
+ "Authentication error" : "Chyba přihlášení",
"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",
@@ -51,6 +49,8 @@
"Invalid user" : "Neplatný uživatel",
"Unable to change mail address" : "Nelze změnit emailovou adresu",
"Email saved" : "Email uložen",
+ "Your full name has been changed." : "Vaše celé jméno bylo změněno.",
+ "Unable to change full name" : "Nelze změnit celé jméno",
"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",
"Migration in progress. Please wait until the migration is finished" : "Migrace probíhá. Počkejte prosím než bude dokončena",
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Velmi doporučujeme nainstalovat požadované balíčky do systému, pro podporu jednoho z následujících národních prostředí: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Instalace mimo kořenový adresář domény a používání systémového příkazu cron může způsobit problém s generováním správné URL. Pro zabránění těmto chybám nastavte prosím správnou cestu ve svém config.php souboru v hodnotě \"overwrite.cli.url\" (Je doporučena tato: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Nebylo možné spustit službu cron v CLI. Došlo k následujícím technickým chybám:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transakční uzamykání souborů používá databázi jako uzamykací mechanismus, pro co nejlepší výkon nakonfigurujte uzamykání pomocí memcache. Více informací najdete v <a target=\"_blank\" href=\"%s\">dokumentaci ↗</a>.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Ověřte znovu prosím informace z <a target=\"_blank\" href=\"%s\">instalační příručky ↗</a> a zkontrolujte <a href=\"#log-section\">log</a> na výskyt chyb a varování.",
"All checks passed." : "Všechny testy byly úspěšné.",
"Open documentation" : "Otevřít dokumentaci",
@@ -229,7 +228,6 @@
"iOS app" : "iOS aplikace",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Chcete-li podpořit tento projekt\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">přidejte se k jeho vývoji</a>\n\t\tnebo\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">šiřte osvětu</a>!",
"Show First Run Wizard again" : "Znovu zobrazit průvodce prvním spuštěním",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Používáte <strong>%s</strong> z <strong>%s</strong> dostupných",
"Password" : "Heslo",
"Unable to change your password" : "Změna vašeho hesla se nezdařila",
"Current password" : "Současné heslo",
diff --git a/settings/l10n/cy_GB.js b/settings/l10n/cy_GB.js
index 590745e735d..74cb40cf890 100644
--- a/settings/l10n/cy_GB.js
+++ b/settings/l10n/cy_GB.js
@@ -1,8 +1,8 @@
OC.L10N.register(
"settings",
{
- "Authentication error" : "Gwall dilysu",
"Invalid request" : "Cais annilys",
+ "Authentication error" : "Gwall dilysu",
"Email sent" : "Anfonwyd yr e-bost",
"Delete" : "Dileu",
"Groups" : "Grwpiau",
diff --git a/settings/l10n/cy_GB.json b/settings/l10n/cy_GB.json
index 41535c5c9cf..537395458bd 100644
--- a/settings/l10n/cy_GB.json
+++ b/settings/l10n/cy_GB.json
@@ -1,6 +1,6 @@
{ "translations": {
- "Authentication error" : "Gwall dilysu",
"Invalid request" : "Cais annilys",
+ "Authentication error" : "Gwall dilysu",
"Email sent" : "Anfonwyd yr e-bost",
"Delete" : "Dileu",
"Groups" : "Grwpiau",
diff --git a/settings/l10n/da.js b/settings/l10n/da.js
index b69c9d248de..e5f7a694375 100644
--- a/settings/l10n/da.js
+++ b/settings/l10n/da.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Log",
"Tips & tricks" : "Tips & tricks",
"Updates" : "Opdateringer",
- "Authentication error" : "Adgangsfejl",
- "Your full name has been changed." : "Dit fulde navn er blevet ændret.",
- "Unable to change full name" : "Ikke i stand til at ændre dit fulde navn",
"Couldn't remove app." : "Kunne ikke fjerne app'en.",
"Language changed" : "Sprog ændret",
"Invalid request" : "Ugyldig forespørgsel",
+ "Authentication error" : "Adgangsfejl",
"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",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "Ugyldig bruger",
"Unable to change mail address" : "Kan ikke ændre mailadresse",
"Email saved" : "E-mailadressen er gemt",
+ "Your full name has been changed." : "Dit fulde navn er blevet ændret.",
+ "Unable to change full name" : "Ikke i stand til at ændre dit fulde navn",
"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?",
"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",
@@ -132,7 +132,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler kraftigt, at du installerer den krævede pakke på dit system, for at understøtte følgende lokaliteter: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis din installation ikke er installeret i roden af domænet, og bruger systemets cron, så kan der være problemer med URL-oprettelsen. For at undgå disse problemer, så angiv tilvalget \"overwrite.cli.url\" i din fil config.php til webrodens sti for din installation (foreslået værdi: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke muligt at udføre cronjobbet via kommandolinjefladen CLI. Følgende tekniske fejl fremkom:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaktions låsning af filer bliver brugt af databasen som lås til backend, for den bedste ydelse tilrådes det at konfigurere memcache. Se <a target=\"_blank\" href=\"%s\">documentation ↗</a> for mere information",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Dobbelttjek venligst <a target=\"_blank\" href=\"%s\">, og tjek om der er fejl eller advarsler i <a href=\"#log-section\">loggen</a>.",
"All checks passed." : "Alle tjek blev bestået.",
"Open documentation" : "Åben dokumentation",
@@ -223,7 +222,6 @@ OC.L10N.register(
"iOS app" : "iOS-app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Hvis du vil støtte projektet, så\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">deltag i udviklingen</a>\n\t\teller\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spred budskabet</a>!",
"Show First Run Wizard again" : "Vis guiden for første kørsel igen.",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har brugt <strong>%s</strong> af den tilgængelige <strong>%s</strong>",
"Password" : "Kodeord",
"Unable to change your password" : "Ude af stand til at ændre dit kodeord",
"Current password" : "Nuværende adgangskode",
diff --git a/settings/l10n/da.json b/settings/l10n/da.json
index 1519317def9..8313714699f 100644
--- a/settings/l10n/da.json
+++ b/settings/l10n/da.json
@@ -10,12 +10,10 @@
"Log" : "Log",
"Tips & tricks" : "Tips & tricks",
"Updates" : "Opdateringer",
- "Authentication error" : "Adgangsfejl",
- "Your full name has been changed." : "Dit fulde navn er blevet ændret.",
- "Unable to change full name" : "Ikke i stand til at ændre dit fulde navn",
"Couldn't remove app." : "Kunne ikke fjerne app'en.",
"Language changed" : "Sprog ændret",
"Invalid request" : "Ugyldig forespørgsel",
+ "Authentication error" : "Adgangsfejl",
"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",
@@ -51,6 +49,8 @@
"Invalid user" : "Ugyldig bruger",
"Unable to change mail address" : "Kan ikke ændre mailadresse",
"Email saved" : "E-mailadressen er gemt",
+ "Your full name has been changed." : "Dit fulde navn er blevet ændret.",
+ "Unable to change full name" : "Ikke i stand til at ændre dit fulde navn",
"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?",
"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",
@@ -130,7 +130,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler kraftigt, at du installerer den krævede pakke på dit system, for at understøtte følgende lokaliteter: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis din installation ikke er installeret i roden af domænet, og bruger systemets cron, så kan der være problemer med URL-oprettelsen. For at undgå disse problemer, så angiv tilvalget \"overwrite.cli.url\" i din fil config.php til webrodens sti for din installation (foreslået værdi: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke muligt at udføre cronjobbet via kommandolinjefladen CLI. Følgende tekniske fejl fremkom:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaktions låsning af filer bliver brugt af databasen som lås til backend, for den bedste ydelse tilrådes det at konfigurere memcache. Se <a target=\"_blank\" href=\"%s\">documentation ↗</a> for mere information",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Dobbelttjek venligst <a target=\"_blank\" href=\"%s\">, og tjek om der er fejl eller advarsler i <a href=\"#log-section\">loggen</a>.",
"All checks passed." : "Alle tjek blev bestået.",
"Open documentation" : "Åben dokumentation",
@@ -221,7 +220,6 @@
"iOS app" : "iOS-app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Hvis du vil støtte projektet, så\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">deltag i udviklingen</a>\n\t\teller\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spred budskabet</a>!",
"Show First Run Wizard again" : "Vis guiden for første kørsel igen.",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har brugt <strong>%s</strong> af den tilgængelige <strong>%s</strong>",
"Password" : "Kodeord",
"Unable to change your password" : "Ude af stand til at ændre dit kodeord",
"Current password" : "Nuværende adgangskode",
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index 2034a6650e7..2c4d7f146b8 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -225,7 +225,6 @@ OC.L10N.register(
"iOS app" : "iOS-App",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Du das Projekt unterstützen möchtest,\n<a href=\"https://owncloud.org/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">beteilige Dich an der Entwicklung</a>\noder\n<a href=\"https://owncloud.org/promote\"\ntarget=\"_blank\" rel=\"noreferrer\">hilf mit, es bekannter zu machen</a>!",
"Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du verwendest <strong>%s</strong> der verfügbaren <strong>%s</strong>",
"Password" : "Passwort",
"Unable to change your password" : "Passwort konnte nicht geändert werden",
"Current password" : "Aktuelles Passwort",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index 31f677bd66b..9fb9bdf5394 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -223,7 +223,6 @@
"iOS app" : "iOS-App",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Du das Projekt unterstützen möchtest,\n<a href=\"https://owncloud.org/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">beteilige Dich an der Entwicklung</a>\noder\n<a href=\"https://owncloud.org/promote\"\ntarget=\"_blank\" rel=\"noreferrer\">hilf mit, es bekannter zu machen</a>!",
"Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du verwendest <strong>%s</strong> der verfügbaren <strong>%s</strong>",
"Password" : "Passwort",
"Unable to change your password" : "Passwort konnte nicht geändert werden",
"Current password" : "Aktuelles Passwort",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index bb25af16451..dba37d5a873 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -219,7 +219,6 @@ OC.L10N.register(
"iOS app" : "iOS-App",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen möchten,\n<a href=\"https://owncloud.org/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">beteiligen Sie sich an der Entwicklung</a>\noder\n<a href=\"https://owncloud.org/promote\"\ntarget=\"_blank\" rel=\"noreferrer\">helfen Sie mit, es bekannter zu machen</a>!",
"Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Sie verwenden <strong>%s</strong> der verfügbaren <strong>%s</strong>",
"Password" : "Passwort",
"Unable to change your password" : "Das Passwort konnte nicht geändert werden",
"Current password" : "Aktuelles Passwort",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index 503b76e4839..ae3a477c8d2 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -217,7 +217,6 @@
"iOS app" : "iOS-App",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen möchten,\n<a href=\"https://owncloud.org/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">beteiligen Sie sich an der Entwicklung</a>\noder\n<a href=\"https://owncloud.org/promote\"\ntarget=\"_blank\" rel=\"noreferrer\">helfen Sie mit, es bekannter zu machen</a>!",
"Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Sie verwenden <strong>%s</strong> der verfügbaren <strong>%s</strong>",
"Password" : "Passwort",
"Unable to change your password" : "Das Passwort konnte nicht geändert werden",
"Current password" : "Aktuelles Passwort",
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index acb9dca3dfd..77fd2c3a824 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Καταγραφές",
"Tips & tricks" : "Συμβουλές & τεχνάσματα",
"Updates" : "Ενημερώσεις",
- "Authentication error" : "Σφάλμα πιστοποίησης",
- "Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.",
- "Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας",
"Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.",
"Language changed" : "Η γλώσσα άλλαξε",
"Invalid request" : "Μη έγκυρο αίτημα",
+ "Authentication error" : "Σφάλμα πιστοποίησης",
"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",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "Μη έγκυρος χρήστης",
"Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας",
"Email saved" : "Το email αποθηκεύτηκε ",
+ "Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.",
+ "Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;",
"Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή",
"Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση",
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Προτείνουμε ανεπιφύλακτα να εγκαταστήσετε στο σύστημά σας τα απαιτούμενα πακέτα έτσι ώστε να υποστηρίζεται μια από τις ακόλουθες ρυθμίσεις τοποθεσίας: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Αν η εγκατάστασή σας δεν έχει γίνει στο root του τομέα και χρησιμοποιείται το cron του συστήματος, μπορεί να υπάρξουν ζητήματα με τη δημιουργία URL. Για να αποφύγετε αυτά τα προβλήματα, παρακαλώ ρυθμίστε την επιλογή \"overwrite.cli.url\" στο αρχείο config.php που βρίσκεται στη διαδρομή webroot της εγκατάστασής σας (Suggested: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Δεν ήταν δυνατή η εκτέλεση της cronjob μέσω τερματικού. Εμφανίστηκαν τα παρακάτω τεχνικά σφάλματα:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Το Transactional file locking χρησιμοποιεί τη βάση δεδομένων ως locking backend, για καλύτερες επιδόσεις συστήνουμς τη διαμόρφωση μιας memcache για το κλείδωμα. Δείτε την <a target=\"_blank\" href=\"%s\">τεκμηρίωση ↗</a> για περισσότερες πληροφορίες.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Παρακαλώ ελέγξτε ξανά <a target=\"_blank\" href=\"%s\">τους οδηγούς εγκατάστασης, καθώς επίσης και για τυχόν σφάλματα ή προειδοποιήσεις στο <a href=\"#log-section\">log</a>.",
"All checks passed." : "Όλοι οι έλεγχοι επιτυχείς.",
"Open documentation" : "Ανοιχτή τεκμηρίωση.",
@@ -230,7 +229,6 @@ OC.L10N.register(
"iOS app" : "Εφαρμογή iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Εάν θέλετε να υποστηρίξετε το έργο\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">συμμετέχετε στην ανάπτυξη</a>\n\t\tή\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">διαδόστε το μήνυμα</a>!",
"Show First Run Wizard again" : "Προβολή Οδηγού Πρώτης Εκτέλεσης ξανά",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Χρησιμοποιήσατε <strong>%s</strong> από τα <strong>%s</strong> διαθέσιμα",
"Password" : "Συνθηματικό",
"Unable to change your password" : "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης",
"Current password" : "Τρέχων συνθηματικό",
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index 42d6dd01ceb..0c343a29e77 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -10,12 +10,10 @@
"Log" : "Καταγραφές",
"Tips & tricks" : "Συμβουλές & τεχνάσματα",
"Updates" : "Ενημερώσεις",
- "Authentication error" : "Σφάλμα πιστοποίησης",
- "Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.",
- "Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας",
"Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.",
"Language changed" : "Η γλώσσα άλλαξε",
"Invalid request" : "Μη έγκυρο αίτημα",
+ "Authentication error" : "Σφάλμα πιστοποίησης",
"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",
@@ -51,6 +49,8 @@
"Invalid user" : "Μη έγκυρος χρήστης",
"Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας",
"Email saved" : "Το email αποθηκεύτηκε ",
+ "Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.",
+ "Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;",
"Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή",
"Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση",
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Προτείνουμε ανεπιφύλακτα να εγκαταστήσετε στο σύστημά σας τα απαιτούμενα πακέτα έτσι ώστε να υποστηρίζεται μια από τις ακόλουθες ρυθμίσεις τοποθεσίας: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Αν η εγκατάστασή σας δεν έχει γίνει στο root του τομέα και χρησιμοποιείται το cron του συστήματος, μπορεί να υπάρξουν ζητήματα με τη δημιουργία URL. Για να αποφύγετε αυτά τα προβλήματα, παρακαλώ ρυθμίστε την επιλογή \"overwrite.cli.url\" στο αρχείο config.php που βρίσκεται στη διαδρομή webroot της εγκατάστασής σας (Suggested: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Δεν ήταν δυνατή η εκτέλεση της cronjob μέσω τερματικού. Εμφανίστηκαν τα παρακάτω τεχνικά σφάλματα:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Το Transactional file locking χρησιμοποιεί τη βάση δεδομένων ως locking backend, για καλύτερες επιδόσεις συστήνουμς τη διαμόρφωση μιας memcache για το κλείδωμα. Δείτε την <a target=\"_blank\" href=\"%s\">τεκμηρίωση ↗</a> για περισσότερες πληροφορίες.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Παρακαλώ ελέγξτε ξανά <a target=\"_blank\" href=\"%s\">τους οδηγούς εγκατάστασης, καθώς επίσης και για τυχόν σφάλματα ή προειδοποιήσεις στο <a href=\"#log-section\">log</a>.",
"All checks passed." : "Όλοι οι έλεγχοι επιτυχείς.",
"Open documentation" : "Ανοιχτή τεκμηρίωση.",
@@ -228,7 +227,6 @@
"iOS app" : "Εφαρμογή iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Εάν θέλετε να υποστηρίξετε το έργο\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">συμμετέχετε στην ανάπτυξη</a>\n\t\tή\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">διαδόστε το μήνυμα</a>!",
"Show First Run Wizard again" : "Προβολή Οδηγού Πρώτης Εκτέλεσης ξανά",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Χρησιμοποιήσατε <strong>%s</strong> από τα <strong>%s</strong> διαθέσιμα",
"Password" : "Συνθηματικό",
"Unable to change your password" : "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης",
"Current password" : "Τρέχων συνθηματικό",
diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js
index 5a4a1a3c998..e8d0cc3e5ee 100644
--- a/settings/l10n/en_GB.js
+++ b/settings/l10n/en_GB.js
@@ -10,12 +10,10 @@ OC.L10N.register(
"Log" : "Log",
"Tips & tricks" : "Tips & tricks",
"Updates" : "Updates",
- "Authentication error" : "Authentication error",
- "Your full name has been changed." : "Your full name has been changed.",
- "Unable to change full name" : "Unable to change full name",
"Couldn't remove app." : "Couldn't remove app.",
"Language changed" : "Language changed",
"Invalid request" : "Invalid request",
+ "Authentication error" : "Authentication error",
"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",
@@ -49,6 +47,8 @@ OC.L10N.register(
"Invalid user" : "Invalid user",
"Unable to change mail address" : "Unable to change mail address",
"Email saved" : "Email saved",
+ "Your full name has been changed." : "Your full name has been changed.",
+ "Unable to change full name" : "Unable to change full name",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?",
"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",
@@ -208,7 +208,6 @@ OC.L10N.register(
"iOS app" : "iOS app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!",
"Show First Run Wizard again" : "Show First Run Wizard again",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "You have used <strong>%s</strong> of the available <strong>%s</strong>",
"Password" : "Password",
"Unable to change your password" : "Unable to change your password",
"Current password" : "Current password",
diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json
index 4f1e2efc456..37d3f31b453 100644
--- a/settings/l10n/en_GB.json
+++ b/settings/l10n/en_GB.json
@@ -8,12 +8,10 @@
"Log" : "Log",
"Tips & tricks" : "Tips & tricks",
"Updates" : "Updates",
- "Authentication error" : "Authentication error",
- "Your full name has been changed." : "Your full name has been changed.",
- "Unable to change full name" : "Unable to change full name",
"Couldn't remove app." : "Couldn't remove app.",
"Language changed" : "Language changed",
"Invalid request" : "Invalid request",
+ "Authentication error" : "Authentication error",
"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",
@@ -47,6 +45,8 @@
"Invalid user" : "Invalid user",
"Unable to change mail address" : "Unable to change mail address",
"Email saved" : "Email saved",
+ "Your full name has been changed." : "Your full name has been changed.",
+ "Unable to change full name" : "Unable to change full name",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?",
"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",
@@ -206,7 +206,6 @@
"iOS app" : "iOS app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!",
"Show First Run Wizard again" : "Show First Run Wizard again",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "You have used <strong>%s</strong> of the available <strong>%s</strong>",
"Password" : "Password",
"Unable to change your password" : "Unable to change your password",
"Current password" : "Current password",
diff --git a/settings/l10n/eo.js b/settings/l10n/eo.js
index ca4b5485d50..215fec4d705 100644
--- a/settings/l10n/eo.js
+++ b/settings/l10n/eo.js
@@ -6,11 +6,9 @@ OC.L10N.register(
"Cron" : "Cron",
"Log" : "Protokolo",
"Updates" : "Ĝisdatigoj",
- "Authentication error" : "Aŭtentiga eraro",
- "Your full name has been changed." : "Via plena nomo ŝanĝitas.",
- "Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon",
"Language changed" : "La lingvo estas ŝanĝita",
"Invalid request" : "Nevalida peto",
+ "Authentication error" : "Aŭtentiga eraro",
"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",
@@ -21,6 +19,8 @@ OC.L10N.register(
"Saved" : "Konservita",
"Email sent" : "La retpoŝtaĵo sendiĝis",
"Email saved" : "La retpoŝtadreso konserviĝis",
+ "Your full name has been changed." : "Via plena nomo ŝanĝitas.",
+ "Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon",
"Sending..." : "Sendante...",
"All" : "Ĉio",
"Please wait...." : "Bonvolu atendi...",
@@ -88,7 +88,6 @@ OC.L10N.register(
"Uninstall App" : "Malinstali aplikaĵon",
"Forum" : "Forumo",
"Get the apps to sync your files" : "Ekhavu la aplikaĵojn por sinkronigi viajn dosierojn",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Vi uzas <strong>%s</strong> el la disponeblaj <strong>%s</strong>",
"Password" : "Pasvorto",
"Unable to change your password" : "Ne eblis ŝanĝi vian pasvorton",
"Current password" : "Nuna pasvorto",
diff --git a/settings/l10n/eo.json b/settings/l10n/eo.json
index 3df0eda6e8e..1e2441717fb 100644
--- a/settings/l10n/eo.json
+++ b/settings/l10n/eo.json
@@ -4,11 +4,9 @@
"Cron" : "Cron",
"Log" : "Protokolo",
"Updates" : "Ĝisdatigoj",
- "Authentication error" : "Aŭtentiga eraro",
- "Your full name has been changed." : "Via plena nomo ŝanĝitas.",
- "Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon",
"Language changed" : "La lingvo estas ŝanĝita",
"Invalid request" : "Nevalida peto",
+ "Authentication error" : "Aŭtentiga eraro",
"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",
@@ -19,6 +17,8 @@
"Saved" : "Konservita",
"Email sent" : "La retpoŝtaĵo sendiĝis",
"Email saved" : "La retpoŝtadreso konserviĝis",
+ "Your full name has been changed." : "Via plena nomo ŝanĝitas.",
+ "Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon",
"Sending..." : "Sendante...",
"All" : "Ĉio",
"Please wait...." : "Bonvolu atendi...",
@@ -86,7 +86,6 @@
"Uninstall App" : "Malinstali aplikaĵon",
"Forum" : "Forumo",
"Get the apps to sync your files" : "Ekhavu la aplikaĵojn por sinkronigi viajn dosierojn",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Vi uzas <strong>%s</strong> el la disponeblaj <strong>%s</strong>",
"Password" : "Pasvorto",
"Unable to change your password" : "Ne eblis ŝanĝi vian pasvorton",
"Current password" : "Nuna pasvorto",
diff --git a/settings/l10n/es.js b/settings/l10n/es.js
index 36d9d9392e1..c0ddd8320f0 100644
--- a/settings/l10n/es.js
+++ b/settings/l10n/es.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Registro",
"Tips & tricks" : "Sugerencias y trucos",
"Updates" : "Actualizaciones",
- "Authentication error" : "Error de autenticación",
- "Your full name has been changed." : "Se ha cambiado su nombre completo.",
- "Unable to change full name" : "No se puede cambiar el nombre completo",
"Couldn't remove app." : "No se pudo eliminar la aplicación.",
"Language changed" : "Idioma cambiado",
"Invalid request" : "Petición no válida",
+ "Authentication error" : "Error de autenticació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",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "Usuario no válido",
"Unable to change mail address" : "No se pudo cambiar la dirección de correo electrónico",
"Email saved" : "Correo electrónico guardado",
+ "Your full name has been changed." : "Se ha cambiado su nombre completo.",
+ "Unable to change full name" : "No se puede cambiar el nombre completo",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?",
"Add trusted domain" : "Agregar dominio de confianza",
"Migration in progress. Please wait until the migration is finished" : "Migración en curso. Por favor, espere hasta que la migración esté finalizada.",
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si su instalación no está ubicada en la raíz del dominio y usa el cron del sistema, puede haber problemas al generarse los URL. Para evitarlos, configure la opción \"overwrite.cli.url\" en su archivo config.php para que use la ruta de la raíz del sitio web de su instalación (sugerencia: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No fue posible ejecutar cronjob vía CLI. Han aparecido los siguientes errores técnicos:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "El fichero de bloqueo de transaciones esta usando la base de datos como mecanismo de bloqueo, para mejorar el rendimiento es recomendable usar cacheo de memoria para los bloqueos. Visita la <a target=\"_blank\" href=\"%s\">documentación ↗</a> para mas información.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor revise las <a target=\"_blank\" href=\"%s\">guías de instalación ↗</a>, y compruebe los errores o avisos en el <a ref=\"#log-section\">registro</a>.",
"All checks passed." : "Ha pasado todos los controles",
"Open documentation" : "Documentación abierta",
@@ -227,7 +226,6 @@ OC.L10N.register(
"iOS app" : "La aplicación de iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si quiere colaborar con el proyecto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">participe en el desarrollo</a>\n\t\to\n\t\t¡<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">difúndalo</a>!",
"Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ha usado <strong>%s</strong> de los <strong>%s</strong> disponibles",
"Password" : "Contraseña",
"Unable to change your password" : "No se ha podido cambiar su contraseña",
"Current password" : "Contraseña actual",
diff --git a/settings/l10n/es.json b/settings/l10n/es.json
index 87cf83a55f0..43bfa420e22 100644
--- a/settings/l10n/es.json
+++ b/settings/l10n/es.json
@@ -10,12 +10,10 @@
"Log" : "Registro",
"Tips & tricks" : "Sugerencias y trucos",
"Updates" : "Actualizaciones",
- "Authentication error" : "Error de autenticación",
- "Your full name has been changed." : "Se ha cambiado su nombre completo.",
- "Unable to change full name" : "No se puede cambiar el nombre completo",
"Couldn't remove app." : "No se pudo eliminar la aplicación.",
"Language changed" : "Idioma cambiado",
"Invalid request" : "Petición no válida",
+ "Authentication error" : "Error de autenticació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",
@@ -51,6 +49,8 @@
"Invalid user" : "Usuario no válido",
"Unable to change mail address" : "No se pudo cambiar la dirección de correo electrónico",
"Email saved" : "Correo electrónico guardado",
+ "Your full name has been changed." : "Se ha cambiado su nombre completo.",
+ "Unable to change full name" : "No se puede cambiar el nombre completo",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?",
"Add trusted domain" : "Agregar dominio de confianza",
"Migration in progress. Please wait until the migration is finished" : "Migración en curso. Por favor, espere hasta que la migración esté finalizada.",
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si su instalación no está ubicada en la raíz del dominio y usa el cron del sistema, puede haber problemas al generarse los URL. Para evitarlos, configure la opción \"overwrite.cli.url\" en su archivo config.php para que use la ruta de la raíz del sitio web de su instalación (sugerencia: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No fue posible ejecutar cronjob vía CLI. Han aparecido los siguientes errores técnicos:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "El fichero de bloqueo de transaciones esta usando la base de datos como mecanismo de bloqueo, para mejorar el rendimiento es recomendable usar cacheo de memoria para los bloqueos. Visita la <a target=\"_blank\" href=\"%s\">documentación ↗</a> para mas información.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor revise las <a target=\"_blank\" href=\"%s\">guías de instalación ↗</a>, y compruebe los errores o avisos en el <a ref=\"#log-section\">registro</a>.",
"All checks passed." : "Ha pasado todos los controles",
"Open documentation" : "Documentación abierta",
@@ -225,7 +224,6 @@
"iOS app" : "La aplicación de iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si quiere colaborar con el proyecto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">participe en el desarrollo</a>\n\t\to\n\t\t¡<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">difúndalo</a>!",
"Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ha usado <strong>%s</strong> de los <strong>%s</strong> disponibles",
"Password" : "Contraseña",
"Unable to change your password" : "No se ha podido cambiar su contraseña",
"Current password" : "Contraseña actual",
diff --git a/settings/l10n/es_AR.js b/settings/l10n/es_AR.js
index ed34e871e83..860933eea26 100644
--- a/settings/l10n/es_AR.js
+++ b/settings/l10n/es_AR.js
@@ -98,7 +98,6 @@ OC.L10N.register(
"Android app" : "App para Android",
"iOS app" : "App para iOS",
"Show First Run Wizard again" : "Mostrar de nuevo el asistente de primera ejecución",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Usás <strong>%s</strong> de los <strong>%s</strong> disponibles",
"Password" : "Contraseña",
"Unable to change your password" : "No fue posible cambiar tu contraseña",
"Current password" : "Contraseña actual",
diff --git a/settings/l10n/es_AR.json b/settings/l10n/es_AR.json
index f337de3b801..c4c088c5f5f 100644
--- a/settings/l10n/es_AR.json
+++ b/settings/l10n/es_AR.json
@@ -96,7 +96,6 @@
"Android app" : "App para Android",
"iOS app" : "App para iOS",
"Show First Run Wizard again" : "Mostrar de nuevo el asistente de primera ejecución",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Usás <strong>%s</strong> de los <strong>%s</strong> disponibles",
"Password" : "Contraseña",
"Unable to change your password" : "No fue posible cambiar tu contraseña",
"Current password" : "Contraseña actual",
diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js
index 0a83ff50f1a..05f73194b8a 100644
--- a/settings/l10n/es_MX.js
+++ b/settings/l10n/es_MX.js
@@ -5,11 +5,9 @@ OC.L10N.register(
"External Storage" : "Almacenamiento externo",
"Cron" : "Cron",
"Log" : "Registro",
- "Authentication error" : "Error de autenticación",
- "Your full name has been changed." : "Se ha cambiado su nombre completo.",
- "Unable to change full name" : "No se puede cambiar el nombre completo",
"Language changed" : "Idioma cambiado",
"Invalid request" : "Petición no válida",
+ "Authentication error" : "Error de autenticació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",
@@ -23,6 +21,8 @@ OC.L10N.register(
"Saved" : "Guardado",
"Email sent" : "Correo electrónico enviado",
"Email saved" : "Correo electrónico guardado",
+ "Your full name has been changed." : "Se ha cambiado su nombre completo.",
+ "Unable to change full name" : "No se puede cambiar el nombre completo",
"All" : "Todos",
"Please wait...." : "Espere, por favor....",
"Error while disabling app" : "Error mientras se desactivaba la aplicación",
@@ -70,7 +70,6 @@ OC.L10N.register(
"Forum" : "Foro",
"Get the apps to sync your files" : "Obtener las aplicaciones para sincronizar sus archivos",
"Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ha usado <strong>%s</strong> de los <strong>%s</strong> disponibles",
"Password" : "Contraseña",
"Unable to change your password" : "No se ha podido cambiar su contraseña",
"Current password" : "Contraseña actual",
diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json
index a83dfef8048..beaa6fc1d99 100644
--- a/settings/l10n/es_MX.json
+++ b/settings/l10n/es_MX.json
@@ -3,11 +3,9 @@
"External Storage" : "Almacenamiento externo",
"Cron" : "Cron",
"Log" : "Registro",
- "Authentication error" : "Error de autenticación",
- "Your full name has been changed." : "Se ha cambiado su nombre completo.",
- "Unable to change full name" : "No se puede cambiar el nombre completo",
"Language changed" : "Idioma cambiado",
"Invalid request" : "Petición no válida",
+ "Authentication error" : "Error de autenticació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",
@@ -21,6 +19,8 @@
"Saved" : "Guardado",
"Email sent" : "Correo electrónico enviado",
"Email saved" : "Correo electrónico guardado",
+ "Your full name has been changed." : "Se ha cambiado su nombre completo.",
+ "Unable to change full name" : "No se puede cambiar el nombre completo",
"All" : "Todos",
"Please wait...." : "Espere, por favor....",
"Error while disabling app" : "Error mientras se desactivaba la aplicación",
@@ -68,7 +68,6 @@
"Forum" : "Foro",
"Get the apps to sync your files" : "Obtener las aplicaciones para sincronizar sus archivos",
"Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ha usado <strong>%s</strong> de los <strong>%s</strong> disponibles",
"Password" : "Contraseña",
"Unable to change your password" : "No se ha podido cambiar su contraseña",
"Current password" : "Contraseña actual",
diff --git a/settings/l10n/et_EE.js b/settings/l10n/et_EE.js
index e783531d6cf..73111e8f0e9 100644
--- a/settings/l10n/et_EE.js
+++ b/settings/l10n/et_EE.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Logi",
"Tips & tricks" : "Nõuanded ja trikid",
"Updates" : "Uuendused",
- "Authentication error" : "Autentimise viga",
- "Your full name has been changed." : "Sinu täispikk nimi on muudetud.",
- "Unable to change full name" : "Täispika nime muutmine ebaõnnestus",
"Couldn't remove app." : "Ei suutnud rakendit eemaldada.",
"Language changed" : "Keel on muudetud",
"Invalid request" : "Vigane päring",
+ "Authentication error" : "Autentimise viga",
"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",
@@ -46,8 +44,11 @@ OC.L10N.register(
"Invalid user" : "Vigane kasutaja",
"Unable to change mail address" : "E-posti aadressi muutmine ebaõnnestus",
"Email saved" : "Kiri on salvestatud",
+ "Your full name has been changed." : "Sinu täispikk nimi on muudetud.",
+ "Unable to change full name" : "Täispika nime muutmine ebaõnnestus",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Oled sa kindel, et soovid lisada domeeni \"{domain}\" usaldusväärseks domeeniks?",
"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",
"Migration started …" : "Kolimist on alustatud ...",
"Sending..." : "Saadan...",
"Official" : "Ametlik",
@@ -67,6 +68,7 @@ OC.L10N.register(
"Uninstalling ...." : "Eemaldan...",
"Error while uninstalling app" : "Viga rakendi eemaldamisel",
"Uninstall" : "Eemalda",
+ "App update" : "Rakenduse uuendus",
"Select a profile picture" : "Vali profiili pilt",
"Very weak password" : "Väga nõrk parool",
"Weak password" : "Nõrk parool",
@@ -153,6 +155,7 @@ OC.L10N.register(
"More" : "Rohkem",
"Less" : "Vähem",
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logifail on suurem kui 100 MB. Allalaadimine võib veidi aega võtta!",
+ "What to log" : "Mida logisse sisse kanda",
"How to do backups" : "Kuidas teha varukoopiaid",
"Advanced monitoring" : "Lisavalikutega jälgimine",
"Performance tuning" : "Kiiruse seadistamine",
@@ -182,7 +185,6 @@ OC.L10N.register(
"Android app" : "Androidi rakendus",
"iOS app" : "iOS-i rakendus",
"Show First Run Wizard again" : "Näita veelkord Esmase Käivituse Juhendajat",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Kasutad <strong>%s</strong> saadavalolevast <strong>%s</strong>",
"Password" : "Parool",
"Unable to change your password" : "Sa ei saa oma parooli muuta",
"Current password" : "Praegune parool",
@@ -194,6 +196,7 @@ OC.L10N.register(
"Your email address" : "Sinu e-posti aadress",
"Fill in an email address to enable password recovery and receive notifications" : "Täida e-posti aadress võimaldamaks parooli taastamist ning teadete saamist.",
"No email address set" : "E-posti aadressi pole veel määratud",
+ "You are member of the following groups:" : "Sa oled nende gruppide liige:",
"Profile picture" : "Profiili pilt",
"Upload new" : "Laadi uus üles",
"Select new from Files" : "Vali failidest uus",
@@ -229,6 +232,7 @@ OC.L10N.register(
"Group Admin for" : "Grupi admin",
"Quota" : "Mahupiir",
"Storage Location" : "Mahu asukoht",
+ "User Backend" : "Kasutaja taustarakendus",
"Last Login" : "Viimane sisselogimine",
"change full name" : "Muuda täispikka nime",
"set new password" : "määra uus parool",
diff --git a/settings/l10n/et_EE.json b/settings/l10n/et_EE.json
index 95416aad773..b6172f92370 100644
--- a/settings/l10n/et_EE.json
+++ b/settings/l10n/et_EE.json
@@ -10,12 +10,10 @@
"Log" : "Logi",
"Tips & tricks" : "Nõuanded ja trikid",
"Updates" : "Uuendused",
- "Authentication error" : "Autentimise viga",
- "Your full name has been changed." : "Sinu täispikk nimi on muudetud.",
- "Unable to change full name" : "Täispika nime muutmine ebaõnnestus",
"Couldn't remove app." : "Ei suutnud rakendit eemaldada.",
"Language changed" : "Keel on muudetud",
"Invalid request" : "Vigane päring",
+ "Authentication error" : "Autentimise viga",
"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",
@@ -44,8 +42,11 @@
"Invalid user" : "Vigane kasutaja",
"Unable to change mail address" : "E-posti aadressi muutmine ebaõnnestus",
"Email saved" : "Kiri on salvestatud",
+ "Your full name has been changed." : "Sinu täispikk nimi on muudetud.",
+ "Unable to change full name" : "Täispika nime muutmine ebaõnnestus",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Oled sa kindel, et soovid lisada domeeni \"{domain}\" usaldusväärseks domeeniks?",
"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",
"Migration started …" : "Kolimist on alustatud ...",
"Sending..." : "Saadan...",
"Official" : "Ametlik",
@@ -65,6 +66,7 @@
"Uninstalling ...." : "Eemaldan...",
"Error while uninstalling app" : "Viga rakendi eemaldamisel",
"Uninstall" : "Eemalda",
+ "App update" : "Rakenduse uuendus",
"Select a profile picture" : "Vali profiili pilt",
"Very weak password" : "Väga nõrk parool",
"Weak password" : "Nõrk parool",
@@ -151,6 +153,7 @@
"More" : "Rohkem",
"Less" : "Vähem",
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logifail on suurem kui 100 MB. Allalaadimine võib veidi aega võtta!",
+ "What to log" : "Mida logisse sisse kanda",
"How to do backups" : "Kuidas teha varukoopiaid",
"Advanced monitoring" : "Lisavalikutega jälgimine",
"Performance tuning" : "Kiiruse seadistamine",
@@ -180,7 +183,6 @@
"Android app" : "Androidi rakendus",
"iOS app" : "iOS-i rakendus",
"Show First Run Wizard again" : "Näita veelkord Esmase Käivituse Juhendajat",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Kasutad <strong>%s</strong> saadavalolevast <strong>%s</strong>",
"Password" : "Parool",
"Unable to change your password" : "Sa ei saa oma parooli muuta",
"Current password" : "Praegune parool",
@@ -192,6 +194,7 @@
"Your email address" : "Sinu e-posti aadress",
"Fill in an email address to enable password recovery and receive notifications" : "Täida e-posti aadress võimaldamaks parooli taastamist ning teadete saamist.",
"No email address set" : "E-posti aadressi pole veel määratud",
+ "You are member of the following groups:" : "Sa oled nende gruppide liige:",
"Profile picture" : "Profiili pilt",
"Upload new" : "Laadi uus üles",
"Select new from Files" : "Vali failidest uus",
@@ -227,6 +230,7 @@
"Group Admin for" : "Grupi admin",
"Quota" : "Mahupiir",
"Storage Location" : "Mahu asukoht",
+ "User Backend" : "Kasutaja taustarakendus",
"Last Login" : "Viimane sisselogimine",
"change full name" : "Muuda täispikka nime",
"set new password" : "määra uus parool",
diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js
index 486cdc74817..36f245a8c43 100644
--- a/settings/l10n/eu.js
+++ b/settings/l10n/eu.js
@@ -6,12 +6,10 @@ OC.L10N.register(
"Cron" : "Cron",
"Log" : "Log",
"Updates" : "Eguneraketak",
- "Authentication error" : "Autentifikazio errorea",
- "Your full name has been changed." : "Zure izena aldatu egin da.",
- "Unable to change full name" : "Ezin izan da izena aldatu",
"Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..",
"Language changed" : "Hizkuntza aldatuta",
"Invalid request" : "Baliogabeko eskaera",
+ "Authentication error" : "Autentifikazio errorea",
"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",
@@ -40,6 +38,8 @@ OC.L10N.register(
"Invalid user" : "Baliogabeko erabiiltzailea",
"Unable to change mail address" : "Ezin izan da posta helbidea aldatu",
"Email saved" : "Eposta gorde da",
+ "Your full name has been changed." : "Zure izena aldatu egin da.",
+ "Unable to change full name" : "Ezin izan da izena aldatu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ziur zaude gehitu nahi duzula \"{domain}\" domeinu fidagarri gisa?",
"Add trusted domain" : "Gehitu domeinu fidagarria",
"Sending..." : "Bidaltzen...",
@@ -153,7 +153,6 @@ OC.L10N.register(
"Android app" : "Android aplikazioa",
"iOS app" : "iOS aplikazioa",
"Show First Run Wizard again" : "Erakutsi berriz Lehenengo Aldiko Morroia",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Dagoeneko <strong>%s</strong> erabili duzu eskuragarri duzun <strong>%s</strong>etatik",
"Password" : "Pasahitza",
"Unable to change your password" : "Ezin izan da zure pasahitza aldatu",
"Current password" : "Uneko pasahitza",
diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json
index 218241db953..5f8c814ccf0 100644
--- a/settings/l10n/eu.json
+++ b/settings/l10n/eu.json
@@ -4,12 +4,10 @@
"Cron" : "Cron",
"Log" : "Log",
"Updates" : "Eguneraketak",
- "Authentication error" : "Autentifikazio errorea",
- "Your full name has been changed." : "Zure izena aldatu egin da.",
- "Unable to change full name" : "Ezin izan da izena aldatu",
"Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..",
"Language changed" : "Hizkuntza aldatuta",
"Invalid request" : "Baliogabeko eskaera",
+ "Authentication error" : "Autentifikazio errorea",
"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",
@@ -38,6 +36,8 @@
"Invalid user" : "Baliogabeko erabiiltzailea",
"Unable to change mail address" : "Ezin izan da posta helbidea aldatu",
"Email saved" : "Eposta gorde da",
+ "Your full name has been changed." : "Zure izena aldatu egin da.",
+ "Unable to change full name" : "Ezin izan da izena aldatu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ziur zaude gehitu nahi duzula \"{domain}\" domeinu fidagarri gisa?",
"Add trusted domain" : "Gehitu domeinu fidagarria",
"Sending..." : "Bidaltzen...",
@@ -151,7 +151,6 @@
"Android app" : "Android aplikazioa",
"iOS app" : "iOS aplikazioa",
"Show First Run Wizard again" : "Erakutsi berriz Lehenengo Aldiko Morroia",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Dagoeneko <strong>%s</strong> erabili duzu eskuragarri duzun <strong>%s</strong>etatik",
"Password" : "Pasahitza",
"Unable to change your password" : "Ezin izan da zure pasahitza aldatu",
"Current password" : "Uneko pasahitza",
diff --git a/settings/l10n/fa.js b/settings/l10n/fa.js
index 299505e1560..8ee843c7488 100644
--- a/settings/l10n/fa.js
+++ b/settings/l10n/fa.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "کارنامه",
"Tips & tricks" : "نکات و راهنمایی‌ها",
"Updates" : "به روز رسانی ها",
- "Authentication error" : "خطا در اعتبار سنجی",
- "Your full name has been changed." : "نام کامل شما تغییر یافت",
- "Unable to change full name" : "امکان تغییر نام کامل وجود ندارد",
"Couldn't remove app." : "امکان حذف برنامه وجود ندارد.",
"Language changed" : "زبان تغییر کرد",
"Invalid request" : "درخواست نامعتبر",
+ "Authentication error" : "خطا در اعتبار سنجی",
"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 نیست",
@@ -44,6 +42,8 @@ OC.L10N.register(
"Invalid user" : "کاربر نامعتبر",
"Unable to change mail address" : "تغییر آدرس ایمیل امکان‌پذیر نیست",
"Email saved" : "ایمیل ذخیره شد",
+ "Your full name has been changed." : "نام کامل شما تغییر یافت",
+ "Unable to change full name" : "امکان تغییر نام کامل وجود ندارد",
"Add trusted domain" : "افزودن دامنه مورد اعتماد",
"Migration in progress. Please wait until the migration is finished" : "مهاجرت در حال اجراست. لطفا تا اتمام مهاجرت صبر کنید",
"Migration started …" : "مهاجرت شروع شد...",
@@ -175,7 +175,6 @@ OC.L10N.register(
"Android app" : "اپ اندروید",
"iOS app" : "اپ iOS",
"Show First Run Wizard again" : "راهبری کمکی اجرای اول را دوباره نمایش بده",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "شما استفاده کردید از <strong>%s</strong> از میزان در دسترس <strong>%s</strong>",
"Password" : "گذرواژه",
"Unable to change your password" : "ناتوان در تغییر گذرواژه",
"Current password" : "گذرواژه کنونی",
diff --git a/settings/l10n/fa.json b/settings/l10n/fa.json
index e07f0633e9f..c934d032629 100644
--- a/settings/l10n/fa.json
+++ b/settings/l10n/fa.json
@@ -10,12 +10,10 @@
"Log" : "کارنامه",
"Tips & tricks" : "نکات و راهنمایی‌ها",
"Updates" : "به روز رسانی ها",
- "Authentication error" : "خطا در اعتبار سنجی",
- "Your full name has been changed." : "نام کامل شما تغییر یافت",
- "Unable to change full name" : "امکان تغییر نام کامل وجود ندارد",
"Couldn't remove app." : "امکان حذف برنامه وجود ندارد.",
"Language changed" : "زبان تغییر کرد",
"Invalid request" : "درخواست نامعتبر",
+ "Authentication error" : "خطا در اعتبار سنجی",
"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 نیست",
@@ -42,6 +40,8 @@
"Invalid user" : "کاربر نامعتبر",
"Unable to change mail address" : "تغییر آدرس ایمیل امکان‌پذیر نیست",
"Email saved" : "ایمیل ذخیره شد",
+ "Your full name has been changed." : "نام کامل شما تغییر یافت",
+ "Unable to change full name" : "امکان تغییر نام کامل وجود ندارد",
"Add trusted domain" : "افزودن دامنه مورد اعتماد",
"Migration in progress. Please wait until the migration is finished" : "مهاجرت در حال اجراست. لطفا تا اتمام مهاجرت صبر کنید",
"Migration started …" : "مهاجرت شروع شد...",
@@ -173,7 +173,6 @@
"Android app" : "اپ اندروید",
"iOS app" : "اپ iOS",
"Show First Run Wizard again" : "راهبری کمکی اجرای اول را دوباره نمایش بده",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "شما استفاده کردید از <strong>%s</strong> از میزان در دسترس <strong>%s</strong>",
"Password" : "گذرواژه",
"Unable to change your password" : "ناتوان در تغییر گذرواژه",
"Current password" : "گذرواژه کنونی",
diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js
index 9d0ca9371b5..b67f12d637e 100644
--- a/settings/l10n/fi_FI.js
+++ b/settings/l10n/fi_FI.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Loki",
"Tips & tricks" : "Vinkit",
"Updates" : "Päivitykset",
- "Authentication error" : "Tunnistautumisvirhe",
- "Your full name has been changed." : "Koko nimesi on muutettu.",
- "Unable to change full name" : "Koko nimen muuttaminen epäonnistui",
"Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.",
"Language changed" : "Kieli on vaihdettu",
"Invalid request" : "Virheellinen pyyntö",
+ "Authentication error" : "Tunnistautumisvirhe",
"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",
@@ -52,6 +50,8 @@ OC.L10N.register(
"Invalid user" : "Virheellinen käyttäjä",
"Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut",
"Email saved" : "Sähköposti tallennettu",
+ "Your full name has been changed." : "Koko nimesi on muutettu.",
+ "Unable to change full name" : "Koko nimen muuttaminen epäonnistui",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Haluatko varmasti liittää kohteen \"{domain}\" luotetuksi toimialueeksi?",
"Add trusted domain" : "Lisää luotettu toimialue",
"Migration in progress. Please wait until the migration is finished" : "Migraatio on kesken. Odota kunnes migraatio valmistuu",
@@ -221,7 +221,6 @@ OC.L10N.register(
"iOS app" : "iOS-sovellus",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Jos haluat tukea projektia, \n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">auta sovelluskehityksessä</a>\n\t\ttai\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">levitä sanaa</a>!",
"Show First Run Wizard again" : "Näytä ensimmäisen käyttökerran avustaja uudelleen",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong>",
"Password" : "Salasana",
"Unable to change your password" : "Salasanaasi ei voitu vaihtaa",
"Current password" : "Nykyinen salasana",
diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json
index a517c3d2f16..b1e30a6b927 100644
--- a/settings/l10n/fi_FI.json
+++ b/settings/l10n/fi_FI.json
@@ -10,12 +10,10 @@
"Log" : "Loki",
"Tips & tricks" : "Vinkit",
"Updates" : "Päivitykset",
- "Authentication error" : "Tunnistautumisvirhe",
- "Your full name has been changed." : "Koko nimesi on muutettu.",
- "Unable to change full name" : "Koko nimen muuttaminen epäonnistui",
"Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.",
"Language changed" : "Kieli on vaihdettu",
"Invalid request" : "Virheellinen pyyntö",
+ "Authentication error" : "Tunnistautumisvirhe",
"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",
@@ -50,6 +48,8 @@
"Invalid user" : "Virheellinen käyttäjä",
"Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut",
"Email saved" : "Sähköposti tallennettu",
+ "Your full name has been changed." : "Koko nimesi on muutettu.",
+ "Unable to change full name" : "Koko nimen muuttaminen epäonnistui",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Haluatko varmasti liittää kohteen \"{domain}\" luotetuksi toimialueeksi?",
"Add trusted domain" : "Lisää luotettu toimialue",
"Migration in progress. Please wait until the migration is finished" : "Migraatio on kesken. Odota kunnes migraatio valmistuu",
@@ -219,7 +219,6 @@
"iOS app" : "iOS-sovellus",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Jos haluat tukea projektia, \n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">auta sovelluskehityksessä</a>\n\t\ttai\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">levitä sanaa</a>!",
"Show First Run Wizard again" : "Näytä ensimmäisen käyttökerran avustaja uudelleen",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong>",
"Password" : "Salasana",
"Unable to change your password" : "Salasanaasi ei voitu vaihtaa",
"Current password" : "Nykyinen salasana",
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index 805b5c05d5c..6a9a5036713 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nous vous recommandons d'installer sur votre système les paquets nécessaires à la prise en charge de l'un des paramètres régionaux suivants : %s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si votre installation n'a pas été effectuée à la racine du domaine et qu'elle utilise le cron du système, il peut y avoir des problèmes avec la génération d'URL. Pour les éviter, veuillez configurer l'option \"overwrite.cli.url\" de votre fichier config.php avec le chemin de la racine de votre installation (suggéré : \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "La tâche cron n'a pu s'exécuter via CLI. Ces erreurs techniques sont apparues :",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Le verrouillage transactionnel de fichiers utilise la base de données. Pour obtenir de meilleures performances il est recommandé d'utiliser plutôt memcache. Consultez la <a target=\"_blank\" href=\"%s\">documentation ↗</a> pour plus d'informations.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Consultez les <a target=\"_blank\" href=\"%s\">guides d'installation ↗</a>, et cherchez des erreurs ou avertissements dans <a href=\"#log-section\">les logs</a>.",
"All checks passed." : "Tous les tests ont réussi.",
"Open documentation" : "Voir la documentation",
@@ -231,7 +230,6 @@ OC.L10N.register(
"iOS app" : "Application iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous souhaitez apporter votre support au projet\n <a href=\"https://owncloud.org/contribute\"\n target=\"_blank\" rel=\"noreferrer\">rejoignez le développement</a>\n ou\n <a href=\"https://owncloud.org/promote\"\n target=\"_blank\" rel=\"noreferrer\">faites passer le mot</a> !",
"Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Vous utilisez <strong>%s</strong> des <strong>%s<strong> disponibles",
"Password" : "Mot de passe",
"Unable to change your password" : "Impossible de changer votre mot de passe",
"Current password" : "Mot de passe actuel",
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index 61c3129a8c1..abab989d3f9 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nous vous recommandons d'installer sur votre système les paquets nécessaires à la prise en charge de l'un des paramètres régionaux suivants : %s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si votre installation n'a pas été effectuée à la racine du domaine et qu'elle utilise le cron du système, il peut y avoir des problèmes avec la génération d'URL. Pour les éviter, veuillez configurer l'option \"overwrite.cli.url\" de votre fichier config.php avec le chemin de la racine de votre installation (suggéré : \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "La tâche cron n'a pu s'exécuter via CLI. Ces erreurs techniques sont apparues :",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Le verrouillage transactionnel de fichiers utilise la base de données. Pour obtenir de meilleures performances il est recommandé d'utiliser plutôt memcache. Consultez la <a target=\"_blank\" href=\"%s\">documentation ↗</a> pour plus d'informations.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Consultez les <a target=\"_blank\" href=\"%s\">guides d'installation ↗</a>, et cherchez des erreurs ou avertissements dans <a href=\"#log-section\">les logs</a>.",
"All checks passed." : "Tous les tests ont réussi.",
"Open documentation" : "Voir la documentation",
@@ -229,7 +228,6 @@
"iOS app" : "Application iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous souhaitez apporter votre support au projet\n <a href=\"https://owncloud.org/contribute\"\n target=\"_blank\" rel=\"noreferrer\">rejoignez le développement</a>\n ou\n <a href=\"https://owncloud.org/promote\"\n target=\"_blank\" rel=\"noreferrer\">faites passer le mot</a> !",
"Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Vous utilisez <strong>%s</strong> des <strong>%s<strong> disponibles",
"Password" : "Mot de passe",
"Unable to change your password" : "Impossible de changer votre mot de passe",
"Current password" : "Mot de passe actuel",
diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js
index 633e877bd5a..525b14cd6cd 100644
--- a/settings/l10n/gl.js
+++ b/settings/l10n/gl.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Rexistro",
"Tips & tricks" : "Trucos e consellos",
"Updates" : "Actualizacións",
- "Authentication error" : "Produciuse un erro de autenticación",
- "Your full name has been changed." : "O seu nome completo foi cambiado",
- "Unable to change full name" : "Non é posíbel cambiar o nome completo",
"Couldn't remove app." : "Non foi posíbel retirar a aplicación.",
"Language changed" : "O idioma cambiou",
"Invalid request" : "Petición incorrecta",
+ "Authentication error" : "Produciuse un erro de autenticació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",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "Usuario incorrecto",
"Unable to change mail address" : "Non é posíbel cambiar o enderezo de correo.",
"Email saved" : "Correo gardado",
+ "Your full name has been changed." : "O seu nome completo foi cambiado",
+ "Unable to change full name" : "Non é posíbel cambiar o nome completo",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Confirma que quere engadir «{domain}» como dominio de confianza?",
"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,7 +216,6 @@ OC.L10N.register(
"iOS app" : "Aplicación iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se quere axudar ao proxecto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">únase ao desenvolvemento</a>\n\t\tou\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">espalle a nova</a>!",
"Show First Run Wizard again" : "Amosar o axudante da primeira execución outra vez",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ten en uso <strong>%s</strong> do total dispoñíbel de <strong>%s</strong>",
"Password" : "Contrasinal",
"Unable to change your password" : "Non é posíbel cambiar o seu contrasinal",
"Current password" : "Contrasinal actual",
diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json
index e8f78c560f2..7447e933e4c 100644
--- a/settings/l10n/gl.json
+++ b/settings/l10n/gl.json
@@ -10,12 +10,10 @@
"Log" : "Rexistro",
"Tips & tricks" : "Trucos e consellos",
"Updates" : "Actualizacións",
- "Authentication error" : "Produciuse un erro de autenticación",
- "Your full name has been changed." : "O seu nome completo foi cambiado",
- "Unable to change full name" : "Non é posíbel cambiar o nome completo",
"Couldn't remove app." : "Non foi posíbel retirar a aplicación.",
"Language changed" : "O idioma cambiou",
"Invalid request" : "Petición incorrecta",
+ "Authentication error" : "Produciuse un erro de autenticació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",
@@ -51,6 +49,8 @@
"Invalid user" : "Usuario incorrecto",
"Unable to change mail address" : "Non é posíbel cambiar o enderezo de correo.",
"Email saved" : "Correo gardado",
+ "Your full name has been changed." : "O seu nome completo foi cambiado",
+ "Unable to change full name" : "Non é posíbel cambiar o nome completo",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Confirma que quere engadir «{domain}» como dominio de confianza?",
"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,7 +214,6 @@
"iOS app" : "Aplicación iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se quere axudar ao proxecto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">únase ao desenvolvemento</a>\n\t\tou\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">espalle a nova</a>!",
"Show First Run Wizard again" : "Amosar o axudante da primeira execución outra vez",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ten en uso <strong>%s</strong> do total dispoñíbel de <strong>%s</strong>",
"Password" : "Contrasinal",
"Unable to change your password" : "Non é posíbel cambiar o seu contrasinal",
"Current password" : "Contrasinal actual",
diff --git a/settings/l10n/he.js b/settings/l10n/he.js
index cfffdc8b967..e5e5bc7df1d 100644
--- a/settings/l10n/he.js
+++ b/settings/l10n/he.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"External Storage" : "אחסון חיצוני",
"Cron" : "Cron",
"Log" : "יומן",
- "Authentication error" : "שגיאת הזדהות",
"Language changed" : "שפה השתנתה",
"Invalid request" : "בקשה לא חוקית",
+ "Authentication error" : "שגיאת הזדהות",
"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",
@@ -48,7 +48,6 @@ OC.L10N.register(
"Forum" : "פורום",
"Get the apps to sync your files" : "השג את האפליקציות על מנת לסנכרן את הקבצים שלך",
"Show First Run Wizard again" : "הצגת אשף ההפעלה הראשונית שוב",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "השתמשת ב־<strong>%s</strong> מתוך <strong>%s</strong> הזמינים לך",
"Password" : "סיסמא",
"Unable to change your password" : "לא ניתן לשנות את הססמה שלך",
"Current password" : "ססמה נוכחית",
diff --git a/settings/l10n/he.json b/settings/l10n/he.json
index b38203e3d0e..393c6875de9 100644
--- a/settings/l10n/he.json
+++ b/settings/l10n/he.json
@@ -3,9 +3,9 @@
"External Storage" : "אחסון חיצוני",
"Cron" : "Cron",
"Log" : "יומן",
- "Authentication error" : "שגיאת הזדהות",
"Language changed" : "שפה השתנתה",
"Invalid request" : "בקשה לא חוקית",
+ "Authentication error" : "שגיאת הזדהות",
"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",
@@ -46,7 +46,6 @@
"Forum" : "פורום",
"Get the apps to sync your files" : "השג את האפליקציות על מנת לסנכרן את הקבצים שלך",
"Show First Run Wizard again" : "הצגת אשף ההפעלה הראשונית שוב",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "השתמשת ב־<strong>%s</strong> מתוך <strong>%s</strong> הזמינים לך",
"Password" : "סיסמא",
"Unable to change your password" : "לא ניתן לשנות את הססמה שלך",
"Current password" : "ססמה נוכחית",
diff --git a/settings/l10n/hr.js b/settings/l10n/hr.js
index d9c1bb3f4f9..c841816616d 100644
--- a/settings/l10n/hr.js
+++ b/settings/l10n/hr.js
@@ -6,12 +6,10 @@ OC.L10N.register(
"Cron" : "Cron",
"Log" : "Zapisnik",
"Updates" : "nadogradnje",
- "Authentication error" : "Pogrešna autentikacija",
- "Your full name has been changed." : "Vaše puno ime je promijenjeno.",
- "Unable to change full name" : "Puno ime nije moguće promijeniti.",
"Couldn't remove app." : "Nije moguće ukloniti app.",
"Language changed" : "Promjena jezika",
"Invalid request" : "Zahtjev neispravan",
+ "Authentication error" : "Pogrešna autentikacija",
"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",
@@ -27,6 +25,8 @@ OC.L10N.register(
"Email sent" : "E-pošta je poslana",
"You need to set your user email before being able to send test emails." : "Prije nego li ste u mogućnosti slati testnu e-poštu trebate postaviti svoj korisnički email.",
"Email saved" : "E-pošta spremljena",
+ "Your full name has been changed." : "Vaše puno ime je promijenjeno.",
+ "Unable to change full name" : "Puno ime nije moguće promijeniti.",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li doista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
"Add trusted domain" : "Dodajte pouzdanu domenu",
"Sending..." : "Slanje...",
@@ -122,7 +122,6 @@ OC.L10N.register(
"Forum" : "Forum",
"Get the apps to sync your files" : "Koristite aplikacije za sinkronizaciju svojih datoteka",
"Show First Run Wizard again" : "Opet pokažite First Run Wizard",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Iskoristili ste <strong>%s</strong> od raspoloživog <strong>%s</strong>",
"Password" : "Lozinka",
"Unable to change your password" : "Vašu lozinku nije moguće promijeniti",
"Current password" : "Trenutna lozinka",
diff --git a/settings/l10n/hr.json b/settings/l10n/hr.json
index 8867813b963..4497d7acd64 100644
--- a/settings/l10n/hr.json
+++ b/settings/l10n/hr.json
@@ -4,12 +4,10 @@
"Cron" : "Cron",
"Log" : "Zapisnik",
"Updates" : "nadogradnje",
- "Authentication error" : "Pogrešna autentikacija",
- "Your full name has been changed." : "Vaše puno ime je promijenjeno.",
- "Unable to change full name" : "Puno ime nije moguće promijeniti.",
"Couldn't remove app." : "Nije moguće ukloniti app.",
"Language changed" : "Promjena jezika",
"Invalid request" : "Zahtjev neispravan",
+ "Authentication error" : "Pogrešna autentikacija",
"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",
@@ -25,6 +23,8 @@
"Email sent" : "E-pošta je poslana",
"You need to set your user email before being able to send test emails." : "Prije nego li ste u mogućnosti slati testnu e-poštu trebate postaviti svoj korisnički email.",
"Email saved" : "E-pošta spremljena",
+ "Your full name has been changed." : "Vaše puno ime je promijenjeno.",
+ "Unable to change full name" : "Puno ime nije moguće promijeniti.",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li doista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
"Add trusted domain" : "Dodajte pouzdanu domenu",
"Sending..." : "Slanje...",
@@ -120,7 +120,6 @@
"Forum" : "Forum",
"Get the apps to sync your files" : "Koristite aplikacije za sinkronizaciju svojih datoteka",
"Show First Run Wizard again" : "Opet pokažite First Run Wizard",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Iskoristili ste <strong>%s</strong> od raspoloživog <strong>%s</strong>",
"Password" : "Lozinka",
"Unable to change your password" : "Vašu lozinku nije moguće promijeniti",
"Current password" : "Trenutna lozinka",
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index 399129eda49..a774f53413e 100644
--- a/settings/l10n/hu_HU.js
+++ b/settings/l10n/hu_HU.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Naplózás",
"Tips & tricks" : "Tippek és trükkök",
"Updates" : "Frissítések",
- "Authentication error" : "Azonosítási hiba",
- "Your full name has been changed." : "Az Ön teljes nevét módosítottuk.",
- "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét",
"Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.",
"Language changed" : "A nyelv megváltozott",
"Invalid request" : "Érvénytelen kérés",
+ "Authentication error" : "Azonosítási hiba",
"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",
@@ -51,6 +49,8 @@ OC.L10N.register(
"Invalid user" : "Érvénytelen felhasználó",
"Unable to change mail address" : "Nem lehet megváltoztatni az e-mail címet",
"Email saved" : "E-mail elmentve!",
+ "Your full name has been changed." : "Az Ön teljes nevét módosítottuk.",
+ "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?",
"Add trusted domain" : "Megbízható tartomány hozzáadása",
"Migration in progress. Please wait until the migration is finished" : "Migráció folyamatban. Kérjük várj, míg a migráció befejeződik.",
@@ -212,7 +212,6 @@ OC.L10N.register(
"iOS app" : "IOS applikáció",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha segíteni szeretnéd a projektet\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hirdesd az igét</a>!",
"Show First Run Wizard again" : "Nézzük meg újra az első bejelentkezéskori segítséget!",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Az Ön tárterület-felhasználása jelenleg: <strong>%s</strong>. Maximálisan ennyi áll rendelkezésére: <strong>%s</strong>",
"Password" : "Jelszó",
"Unable to change your password" : "A jelszó nem változtatható meg",
"Current password" : "A jelenlegi jelszó",
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index fe9f17f14ab..6d68a7f369b 100644
--- a/settings/l10n/hu_HU.json
+++ b/settings/l10n/hu_HU.json
@@ -10,12 +10,10 @@
"Log" : "Naplózás",
"Tips & tricks" : "Tippek és trükkök",
"Updates" : "Frissítések",
- "Authentication error" : "Azonosítási hiba",
- "Your full name has been changed." : "Az Ön teljes nevét módosítottuk.",
- "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét",
"Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.",
"Language changed" : "A nyelv megváltozott",
"Invalid request" : "Érvénytelen kérés",
+ "Authentication error" : "Azonosítási hiba",
"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",
@@ -49,6 +47,8 @@
"Invalid user" : "Érvénytelen felhasználó",
"Unable to change mail address" : "Nem lehet megváltoztatni az e-mail címet",
"Email saved" : "E-mail elmentve!",
+ "Your full name has been changed." : "Az Ön teljes nevét módosítottuk.",
+ "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?",
"Add trusted domain" : "Megbízható tartomány hozzáadása",
"Migration in progress. Please wait until the migration is finished" : "Migráció folyamatban. Kérjük várj, míg a migráció befejeződik.",
@@ -210,7 +210,6 @@
"iOS app" : "IOS applikáció",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha segíteni szeretnéd a projektet\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hirdesd az igét</a>!",
"Show First Run Wizard again" : "Nézzük meg újra az első bejelentkezéskori segítséget!",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Az Ön tárterület-felhasználása jelenleg: <strong>%s</strong>. Maximálisan ennyi áll rendelkezésére: <strong>%s</strong>",
"Password" : "Jelszó",
"Unable to change your password" : "A jelszó nem változtatható meg",
"Current password" : "A jelenlegi jelszó",
diff --git a/settings/l10n/id.js b/settings/l10n/id.js
index e5efe797e69..b3ba2dd91fb 100644
--- a/settings/l10n/id.js
+++ b/settings/l10n/id.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Log",
"Tips & tricks" : "Tips & trik",
"Updates" : "Pembaruan",
- "Authentication error" : "Terjadi kesalahan saat otentikasi",
- "Your full name has been changed." : "Nama lengkap Anda telah diubah",
- "Unable to change full name" : "Tidak dapat mengubah nama lengkap",
"Couldn't remove app." : "Tidak dapat menghapus aplikasi.",
"Language changed" : "Bahasa telah diubah",
"Invalid request" : "Permintaan tidak valid",
+ "Authentication error" : "Terjadi kesalahan saat otentikasi",
"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",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "Pengguna salah",
"Unable to change mail address" : "Tidak dapat mengubah alamat email",
"Email saved" : "Email disimpan",
+ "Your full name has been changed." : "Nama lengkap Anda telah diubah",
+ "Unable to change full name" : "Tidak dapat mengubah nama lengkap",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah Anda yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?",
"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.",
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Kamu sangat menyarankan untuk menginstal paket-paket yang dibutuhkan pada sistem agar mendukung lokal berikut: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Jika instalasi Anda tidak di root domain dan menggunakan sistem cron, hal tersebut dapat menyebabkan masalah dengan pembuatan URL. Untuk mencegah masalah tersebut, mohon atur opsi \"overwrite.cli.url\" pada berkas config.php Anda ke jalur lokasi webroot instalasi Anda (Disarankan: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Tidak mungkin untuk mengeksekusi cronjob via CLI. Kesalahan teknis berikut muncul:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaksi penguncian berkas menggunakan basis data sebagai backend penguncian, untuk mendapatkan kinerja terbaik, disarankan mengkonfigurasi memcache sebagai penguncian. Baca <a target=\"_blank\" href=\"%s\">dokumentasi ↗</a> untuk informasi lebih lanjut.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Mohon periksa dua kali <a target=\"_blank\" href=\"%s\">panduan instalasi ↗</a>, dan periksa segala kesalahan atau peringatan pada <a href=\"#log-section\">log</a>.",
"All checks passed." : "Semua pemeriksaan lulus.",
"Open documentation" : "Buka dokumentasi",
@@ -230,7 +229,6 @@ OC.L10N.register(
"iOS app" : "Aplikasi iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Jika Anda ingin mendukung proyek ini\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">bergabunglah dalam pengembangan</a>\n\t\tatau\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">promosikan</a>!",
"Show First Run Wizard again" : "Tampilkan Penuntun Konfigurasi Awal",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Anda telah menggunakan <strong>%s</strong> dari total <strong>%s</strong>",
"Password" : "Sandi",
"Unable to change your password" : "Gagal mengubah sandi Anda",
"Current password" : "Sandi saat ini",
diff --git a/settings/l10n/id.json b/settings/l10n/id.json
index 8a30d825bc1..8004eea747f 100644
--- a/settings/l10n/id.json
+++ b/settings/l10n/id.json
@@ -10,12 +10,10 @@
"Log" : "Log",
"Tips & tricks" : "Tips & trik",
"Updates" : "Pembaruan",
- "Authentication error" : "Terjadi kesalahan saat otentikasi",
- "Your full name has been changed." : "Nama lengkap Anda telah diubah",
- "Unable to change full name" : "Tidak dapat mengubah nama lengkap",
"Couldn't remove app." : "Tidak dapat menghapus aplikasi.",
"Language changed" : "Bahasa telah diubah",
"Invalid request" : "Permintaan tidak valid",
+ "Authentication error" : "Terjadi kesalahan saat otentikasi",
"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",
@@ -51,6 +49,8 @@
"Invalid user" : "Pengguna salah",
"Unable to change mail address" : "Tidak dapat mengubah alamat email",
"Email saved" : "Email disimpan",
+ "Your full name has been changed." : "Nama lengkap Anda telah diubah",
+ "Unable to change full name" : "Tidak dapat mengubah nama lengkap",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah Anda yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?",
"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.",
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Kamu sangat menyarankan untuk menginstal paket-paket yang dibutuhkan pada sistem agar mendukung lokal berikut: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Jika instalasi Anda tidak di root domain dan menggunakan sistem cron, hal tersebut dapat menyebabkan masalah dengan pembuatan URL. Untuk mencegah masalah tersebut, mohon atur opsi \"overwrite.cli.url\" pada berkas config.php Anda ke jalur lokasi webroot instalasi Anda (Disarankan: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Tidak mungkin untuk mengeksekusi cronjob via CLI. Kesalahan teknis berikut muncul:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaksi penguncian berkas menggunakan basis data sebagai backend penguncian, untuk mendapatkan kinerja terbaik, disarankan mengkonfigurasi memcache sebagai penguncian. Baca <a target=\"_blank\" href=\"%s\">dokumentasi ↗</a> untuk informasi lebih lanjut.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Mohon periksa dua kali <a target=\"_blank\" href=\"%s\">panduan instalasi ↗</a>, dan periksa segala kesalahan atau peringatan pada <a href=\"#log-section\">log</a>.",
"All checks passed." : "Semua pemeriksaan lulus.",
"Open documentation" : "Buka dokumentasi",
@@ -228,7 +227,6 @@
"iOS app" : "Aplikasi iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Jika Anda ingin mendukung proyek ini\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">bergabunglah dalam pengembangan</a>\n\t\tatau\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">promosikan</a>!",
"Show First Run Wizard again" : "Tampilkan Penuntun Konfigurasi Awal",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Anda telah menggunakan <strong>%s</strong> dari total <strong>%s</strong>",
"Password" : "Sandi",
"Unable to change your password" : "Gagal mengubah sandi Anda",
"Current password" : "Sandi saat ini",
diff --git a/settings/l10n/is.js b/settings/l10n/is.js
index 994011a098e..8dad6854cde 100644
--- a/settings/l10n/is.js
+++ b/settings/l10n/is.js
@@ -2,9 +2,9 @@ OC.L10N.register(
"settings",
{
"External Storage" : "Ytri gagnageymsla",
- "Authentication error" : "Villa við auðkenningu",
"Language changed" : "Tungumáli breytt",
"Invalid request" : "Ógild fyrirspurn",
+ "Authentication error" : "Villa við auðkenningu",
"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 notenda við hópinn %s",
"Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s",
@@ -37,7 +37,6 @@ OC.L10N.register(
"by" : "af",
"Cheers!" : "Skál!",
"Forum" : "Vefspjall",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Þú hefur notað <strong>%s</strong> af tiltæku <strong>%s</strong>",
"Password" : "Lykilorð",
"Unable to change your password" : "Ekki tókst að breyta lykilorðinu þínu",
"Current password" : "Núverandi lykilorð",
diff --git a/settings/l10n/is.json b/settings/l10n/is.json
index 5e2507a5499..17b9b2b19a9 100644
--- a/settings/l10n/is.json
+++ b/settings/l10n/is.json
@@ -1,8 +1,8 @@
{ "translations": {
"External Storage" : "Ytri gagnageymsla",
- "Authentication error" : "Villa við auðkenningu",
"Language changed" : "Tungumáli breytt",
"Invalid request" : "Ógild fyrirspurn",
+ "Authentication error" : "Villa við auðkenningu",
"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 notenda við hópinn %s",
"Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s",
@@ -35,7 +35,6 @@
"by" : "af",
"Cheers!" : "Skál!",
"Forum" : "Vefspjall",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Þú hefur notað <strong>%s</strong> af tiltæku <strong>%s</strong>",
"Password" : "Lykilorð",
"Unable to change your password" : "Ekki tókst að breyta lykilorðinu þínu",
"Current password" : "Núverandi lykilorð",
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index 4d73fe6100a..da582dc123d 100644
--- a/settings/l10n/it.js
+++ b/settings/l10n/it.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Log",
"Tips & tricks" : "Suggerimenti e trucchi",
"Updates" : "Aggiornamenti",
- "Authentication error" : "Errore di autenticazione",
- "Your full name has been changed." : "Il tuo nome completo è stato cambiato.",
- "Unable to change full name" : "Impossibile cambiare il nome completo",
"Couldn't remove app." : "Impossibile rimuovere l'applicazione.",
"Language changed" : "Lingua modificata",
"Invalid request" : "Richiesta non valida",
+ "Authentication error" : "Errore di autenticazione",
"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",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "Utente non valido",
"Unable to change mail address" : "Impossibile cambiare l'indirizzo di posta",
"Email saved" : "Email salvata",
+ "Your full name has been changed." : "Il tuo nome completo è stato cambiato.",
+ "Unable to change full name" : "Impossibile cambiare il nome completo",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?",
"Add trusted domain" : "Aggiungi dominio attendibile",
"Migration in progress. Please wait until the migration is finished" : "Migrazione in corso. Attendi fino al completamento della migrazione",
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Consigliamo vivamente di installare i pacchetti richiesti sul tuo sistema per supportare una delle localizzazioni seguenti: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se la tua installazione non si trova nella radice del dominio e utilizza il cron di sistema, potrebbero esserci problemi con la generazione degli URL. Per evitare questi problemi, imposta l'opzione \"overwrite.cli.url\" nel file config.php al percorso della radice del sito della tua installazione (Consigliato: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Non è stato possibile eseguire il job di cron tramite CLI. Sono apparsi i seguenti errori tecnici:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Il blocco del file transazionale sta utilizzando il database come motore di blocco, per avere prestazioni migliori, è consigliato configurare una cache di memoria per il blocco. Vedi la <a target=\"_blank\" href=\"%s\">documentazione ↗</a> per ulteriori informazioni.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Leggi attentamente le <a target=\"_blank\" href=\"%s\">guide d'installazione ↗</a>, e controlla gli errori o gli avvisi nel <a href=\"#log-section\">log</a>.",
"All checks passed." : "Tutti i controlli passati.",
"Open documentation" : "Apri la documentazione",
@@ -231,7 +230,6 @@ OC.L10N.register(
"iOS app" : "Applicazione iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se vuoi supportare il progetto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">diventa uno sviluppatore</a>\n\t\to\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">diffondi il verbo</a>!",
"Show First Run Wizard again" : "Mostra nuovamente la procedura di primo avvio",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Hai utilizzato <strong>%s</strong> dei <strong>%s</strong> disponibili",
"Password" : "Password",
"Unable to change your password" : "Modifica password non riuscita",
"Current password" : "Password attuale",
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index 1090780f966..6047e85e59f 100644
--- a/settings/l10n/it.json
+++ b/settings/l10n/it.json
@@ -10,12 +10,10 @@
"Log" : "Log",
"Tips & tricks" : "Suggerimenti e trucchi",
"Updates" : "Aggiornamenti",
- "Authentication error" : "Errore di autenticazione",
- "Your full name has been changed." : "Il tuo nome completo è stato cambiato.",
- "Unable to change full name" : "Impossibile cambiare il nome completo",
"Couldn't remove app." : "Impossibile rimuovere l'applicazione.",
"Language changed" : "Lingua modificata",
"Invalid request" : "Richiesta non valida",
+ "Authentication error" : "Errore di autenticazione",
"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",
@@ -51,6 +49,8 @@
"Invalid user" : "Utente non valido",
"Unable to change mail address" : "Impossibile cambiare l'indirizzo di posta",
"Email saved" : "Email salvata",
+ "Your full name has been changed." : "Il tuo nome completo è stato cambiato.",
+ "Unable to change full name" : "Impossibile cambiare il nome completo",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?",
"Add trusted domain" : "Aggiungi dominio attendibile",
"Migration in progress. Please wait until the migration is finished" : "Migrazione in corso. Attendi fino al completamento della migrazione",
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Consigliamo vivamente di installare i pacchetti richiesti sul tuo sistema per supportare una delle localizzazioni seguenti: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se la tua installazione non si trova nella radice del dominio e utilizza il cron di sistema, potrebbero esserci problemi con la generazione degli URL. Per evitare questi problemi, imposta l'opzione \"overwrite.cli.url\" nel file config.php al percorso della radice del sito della tua installazione (Consigliato: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Non è stato possibile eseguire il job di cron tramite CLI. Sono apparsi i seguenti errori tecnici:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Il blocco del file transazionale sta utilizzando il database come motore di blocco, per avere prestazioni migliori, è consigliato configurare una cache di memoria per il blocco. Vedi la <a target=\"_blank\" href=\"%s\">documentazione ↗</a> per ulteriori informazioni.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Leggi attentamente le <a target=\"_blank\" href=\"%s\">guide d'installazione ↗</a>, e controlla gli errori o gli avvisi nel <a href=\"#log-section\">log</a>.",
"All checks passed." : "Tutti i controlli passati.",
"Open documentation" : "Apri la documentazione",
@@ -229,7 +228,6 @@
"iOS app" : "Applicazione iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se vuoi supportare il progetto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">diventa uno sviluppatore</a>\n\t\to\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">diffondi il verbo</a>!",
"Show First Run Wizard again" : "Mostra nuovamente la procedura di primo avvio",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Hai utilizzato <strong>%s</strong> dei <strong>%s</strong> disponibili",
"Password" : "Password",
"Unable to change your password" : "Modifica password non riuscita",
"Current password" : "Password attuale",
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index 9d6705aff3f..4a1b8944f8a 100644
--- a/settings/l10n/ja.js
+++ b/settings/l10n/ja.js
@@ -20,7 +20,7 @@ OC.L10N.register(
"Unable to add user to group %s" : "ユーザーをグループ %s に追加できません",
"Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません",
"Couldn't update app." : "アプリをアップデートできませんでした。",
- "Wrong password" : "無効なパスワード",
+ "Wrong password" : "パスワードが間違っています",
"No user supplied" : "ユーザーが指定されていません",
"Please provide an admin recovery password, otherwise all user data will be lost" : "リカバリ用の管理者パスワードを入力してください。そうでない場合は、全ユーザーのデータが失われます。",
"Wrong admin recovery password. Please check the password and try again." : "リカバリ用の管理者パスワードが間違っています。パスワードを確認して再度実行してください。",
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "次のロケールをサポートするには、システムに必要なパッケージをインストールすることを強くおすすめします: %s。",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "URLがドメインのルート(/)で終わっていない場合で、システムのcronを利用している場合は、URLの生成に問題が発生します。その場合は、config.php ファイルの中の \"overwrite.cli.url\" オプションをインストールしたwebrootのパスに設定してください。(推奨: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI から cronジョブを実行することができませんでした。次の技術的なエラーが発生しています:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "トランザクションファイルのロックは、データベースを使用してバックエンドのロックをしています。最高のパフォーマンスのためには、ロック用に memcache を設定することをお勧めします。詳細については、<a target=\"_blank\" href=\"%s\">ドキュメント↗ </a>を参照してください。",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "<a target=\"_blank\" href=\"%s\">インストールガイド ↗</a>をもう一度チェックして、<a href=\"#log-section\">ログ</a> にあるエラーまたは警告について確認してください。",
"All checks passed." : "すべてのチェックに合格しました。",
"Open documentation" : "ドキュメントを開く",
@@ -231,7 +230,6 @@ OC.L10N.register(
"iOS app" : "iOSアプリ",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "プロジェクトをサポートしていただける場合は、\n<a href=\"https://owncloud.org/contribute\"\ntarget=\"_blank\">開発に参加する</a>か、\n<a href=\"https://owncloud.org/promote\"\ntarget=\"_blank\">プロジェクトを広く伝えてください</a>!",
"Show First Run Wizard again" : "初回ウィザードを再表示する",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "現在 <strong>%s</strong> / <strong>%s</strong> を使用しています",
"Password" : "パスワード",
"Unable to change your password" : "パスワードを変更することができません",
"Current password" : "現在のパスワード",
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index aa22a5ce9b3..a811a7410b7 100644
--- a/settings/l10n/ja.json
+++ b/settings/l10n/ja.json
@@ -18,7 +18,7 @@
"Unable to add user to group %s" : "ユーザーをグループ %s に追加できません",
"Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません",
"Couldn't update app." : "アプリをアップデートできませんでした。",
- "Wrong password" : "無効なパスワード",
+ "Wrong password" : "パスワードが間違っています",
"No user supplied" : "ユーザーが指定されていません",
"Please provide an admin recovery password, otherwise all user data will be lost" : "リカバリ用の管理者パスワードを入力してください。そうでない場合は、全ユーザーのデータが失われます。",
"Wrong admin recovery password. Please check the password and try again." : "リカバリ用の管理者パスワードが間違っています。パスワードを確認して再度実行してください。",
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "次のロケールをサポートするには、システムに必要なパッケージをインストールすることを強くおすすめします: %s。",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "URLがドメインのルート(/)で終わっていない場合で、システムのcronを利用している場合は、URLの生成に問題が発生します。その場合は、config.php ファイルの中の \"overwrite.cli.url\" オプションをインストールしたwebrootのパスに設定してください。(推奨: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI から cronジョブを実行することができませんでした。次の技術的なエラーが発生しています:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "トランザクションファイルのロックは、データベースを使用してバックエンドのロックをしています。最高のパフォーマンスのためには、ロック用に memcache を設定することをお勧めします。詳細については、<a target=\"_blank\" href=\"%s\">ドキュメント↗ </a>を参照してください。",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "<a target=\"_blank\" href=\"%s\">インストールガイド ↗</a>をもう一度チェックして、<a href=\"#log-section\">ログ</a> にあるエラーまたは警告について確認してください。",
"All checks passed." : "すべてのチェックに合格しました。",
"Open documentation" : "ドキュメントを開く",
@@ -229,7 +228,6 @@
"iOS app" : "iOSアプリ",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "プロジェクトをサポートしていただける場合は、\n<a href=\"https://owncloud.org/contribute\"\ntarget=\"_blank\">開発に参加する</a>か、\n<a href=\"https://owncloud.org/promote\"\ntarget=\"_blank\">プロジェクトを広く伝えてください</a>!",
"Show First Run Wizard again" : "初回ウィザードを再表示する",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "現在 <strong>%s</strong> / <strong>%s</strong> を使用しています",
"Password" : "パスワード",
"Unable to change your password" : "パスワードを変更することができません",
"Current password" : "現在のパスワード",
diff --git a/settings/l10n/ka_GE.js b/settings/l10n/ka_GE.js
index 0c6ad6fd82d..72e6d9ab65d 100644
--- a/settings/l10n/ka_GE.js
+++ b/settings/l10n/ka_GE.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"External Storage" : "ექსტერნალ საცავი",
"Cron" : "Cron–ი",
"Log" : "ლოგი",
- "Authentication error" : "ავთენტიფიკაციის შეცდომა",
"Language changed" : "ენა შეცვლილია",
"Invalid request" : "არასწორი მოთხოვნა",
+ "Authentication error" : "ავთენტიფიკაციის შეცდომა",
"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",
@@ -48,7 +48,6 @@ OC.L10N.register(
"Forum" : "ფორუმი",
"Get the apps to sync your files" : "აპლიკაცია ფაილების სინქრონიზაციისთვის",
"Show First Run Wizard again" : "მაჩვენე თავიდან გაშვებული ვიზარდი",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "თქვენ გამოყენებული გაქვთ <strong>%s</strong> –ი –<strong>%s<strong>–დან",
"Password" : "პაროლი",
"Unable to change your password" : "თქვენი პაროლი არ შეიცვალა",
"Current password" : "მიმდინარე პაროლი",
diff --git a/settings/l10n/ka_GE.json b/settings/l10n/ka_GE.json
index 5892c19547f..63771d97d56 100644
--- a/settings/l10n/ka_GE.json
+++ b/settings/l10n/ka_GE.json
@@ -3,9 +3,9 @@
"External Storage" : "ექსტერნალ საცავი",
"Cron" : "Cron–ი",
"Log" : "ლოგი",
- "Authentication error" : "ავთენტიფიკაციის შეცდომა",
"Language changed" : "ენა შეცვლილია",
"Invalid request" : "არასწორი მოთხოვნა",
+ "Authentication error" : "ავთენტიფიკაციის შეცდომა",
"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",
@@ -46,7 +46,6 @@
"Forum" : "ფორუმი",
"Get the apps to sync your files" : "აპლიკაცია ფაილების სინქრონიზაციისთვის",
"Show First Run Wizard again" : "მაჩვენე თავიდან გაშვებული ვიზარდი",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "თქვენ გამოყენებული გაქვთ <strong>%s</strong> –ი –<strong>%s<strong>–დან",
"Password" : "პაროლი",
"Unable to change your password" : "თქვენი პაროლი არ შეიცვალა",
"Current password" : "მიმდინარე პაროლი",
diff --git a/settings/l10n/km.js b/settings/l10n/km.js
index bba9783e9a0..321787ef394 100644
--- a/settings/l10n/km.js
+++ b/settings/l10n/km.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"External Storage" : "ឃ្លាំងផ្ទុក​ខាងក្រៅ",
"Cron" : "Cron",
"Log" : "Log",
- "Authentication error" : "កំហុស​ការ​ផ្ទៀង​ផ្ទាត់​ភាព​ត្រឹម​ត្រូវ",
"Language changed" : "បាន​ប្ដូរ​ភាសា",
"Invalid request" : "សំណើ​មិន​ត្រឹម​ត្រូវ",
+ "Authentication error" : "កំហុស​ការ​ផ្ទៀង​ផ្ទាត់​ភាព​ត្រឹម​ត្រូវ",
"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",
@@ -63,7 +63,6 @@ OC.L10N.register(
"Forum" : "វេទិកាពិភាក្សា",
"Get the apps to sync your files" : "ដាក់​អោយកម្មវិធីផ្សេងៗ ​ធ្វើសមកាលកម្ម​ឯកសារ​អ្នក",
"Show First Run Wizard again" : "បង្ហាញ First Run Wizard ម្តង​ទៀត",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "អ្នក​បាន​ប្រើ <strong>%s</strong> ក្នុង​ចំណោម​ចំនួន​មាន <strong>%s</strong>",
"Password" : "ពាក្យសម្ងាត់",
"Unable to change your password" : "មិន​អាច​ប្ដូរ​ពាក្យ​សម្ងាត់​របស់​អ្នក​បាន​ទេ",
"Current password" : "ពាក្យសម្ងាត់​បច្ចុប្បន្ន",
diff --git a/settings/l10n/km.json b/settings/l10n/km.json
index 89cd82da01a..ac409f3393f 100644
--- a/settings/l10n/km.json
+++ b/settings/l10n/km.json
@@ -3,9 +3,9 @@
"External Storage" : "ឃ្លាំងផ្ទុក​ខាងក្រៅ",
"Cron" : "Cron",
"Log" : "Log",
- "Authentication error" : "កំហុស​ការ​ផ្ទៀង​ផ្ទាត់​ភាព​ត្រឹម​ត្រូវ",
"Language changed" : "បាន​ប្ដូរ​ភាសា",
"Invalid request" : "សំណើ​មិន​ត្រឹម​ត្រូវ",
+ "Authentication error" : "កំហុស​ការ​ផ្ទៀង​ផ្ទាត់​ភាព​ត្រឹម​ត្រូវ",
"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",
@@ -61,7 +61,6 @@
"Forum" : "វេទិកាពិភាក្សា",
"Get the apps to sync your files" : "ដាក់​អោយកម្មវិធីផ្សេងៗ ​ធ្វើសមកាលកម្ម​ឯកសារ​អ្នក",
"Show First Run Wizard again" : "បង្ហាញ First Run Wizard ម្តង​ទៀត",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "អ្នក​បាន​ប្រើ <strong>%s</strong> ក្នុង​ចំណោម​ចំនួន​មាន <strong>%s</strong>",
"Password" : "ពាក្យសម្ងាត់",
"Unable to change your password" : "មិន​អាច​ប្ដូរ​ពាក្យ​សម្ងាត់​របស់​អ្នក​បាន​ទេ",
"Current password" : "ពាក្យសម្ងាត់​បច្ចុប្បន្ន",
diff --git a/settings/l10n/kn.js b/settings/l10n/kn.js
index 4ef7313b3bf..673081e5f01 100644
--- a/settings/l10n/kn.js
+++ b/settings/l10n/kn.js
@@ -3,12 +3,10 @@ OC.L10N.register(
{
"Sharing" : "ಹಂಚಿಕೆ",
"Log" : "ಹಿನ್ನೆಲೆಯ ದಾಖಲೆ",
- "Authentication error" : "ದೃಢೀಕರಣ ದೋಷ",
- "Your full name has been changed." : "ನಿಮ್ಮ ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ.",
- "Unable to change full name" : "ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
"Couldn't remove app." : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
"Language changed" : "ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ",
"Invalid request" : "ಅಮಾನ್ಯ ಕೋರಿಕೆ",
+ "Authentication error" : "ದೃಢೀಕರಣ ದೋಷ",
"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 ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
@@ -33,6 +31,8 @@ OC.L10N.register(
"Invalid user" : "ಅಮಾನ್ಯ ಬಳಕೆದಾರ",
"Unable to change mail address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
"Email saved" : "ಇ-ಅಂಚೆಯನ್ನು ಉಳಿಸಿದೆ",
+ "Your full name has been changed." : "ನಿಮ್ಮ ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ.",
+ "Unable to change full name" : "ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
"Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...",
"All" : "ಎಲ್ಲಾ",
"Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....",
diff --git a/settings/l10n/kn.json b/settings/l10n/kn.json
index cbae632d1ce..5942e8a8dc7 100644
--- a/settings/l10n/kn.json
+++ b/settings/l10n/kn.json
@@ -1,12 +1,10 @@
{ "translations": {
"Sharing" : "ಹಂಚಿಕೆ",
"Log" : "ಹಿನ್ನೆಲೆಯ ದಾಖಲೆ",
- "Authentication error" : "ದೃಢೀಕರಣ ದೋಷ",
- "Your full name has been changed." : "ನಿಮ್ಮ ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ.",
- "Unable to change full name" : "ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
"Couldn't remove app." : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
"Language changed" : "ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ",
"Invalid request" : "ಅಮಾನ್ಯ ಕೋರಿಕೆ",
+ "Authentication error" : "ದೃಢೀಕರಣ ದೋಷ",
"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 ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
@@ -31,6 +29,8 @@
"Invalid user" : "ಅಮಾನ್ಯ ಬಳಕೆದಾರ",
"Unable to change mail address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
"Email saved" : "ಇ-ಅಂಚೆಯನ್ನು ಉಳಿಸಿದೆ",
+ "Your full name has been changed." : "ನಿಮ್ಮ ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ.",
+ "Unable to change full name" : "ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
"Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...",
"All" : "ಎಲ್ಲಾ",
"Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....",
diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js
index 6eea3ecede7..1cdade56ec0 100644
--- a/settings/l10n/ko.js
+++ b/settings/l10n/ko.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "로그",
"Tips & tricks" : "팁과 추가 정보",
"Updates" : "업데이트",
- "Authentication error" : "인증 오류",
- "Your full name has been changed." : "전체 이름이 변경되었습니다.",
- "Unable to change full name" : "전체 이름을 변경할 수 없음",
"Couldn't remove app." : "앱을 삭제할 수 없습니다.",
"Language changed" : "언어가 변경됨",
"Invalid request" : "잘못된 요청",
+ "Authentication error" : "인증 오류",
"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에서 사용자를 삭제할 수 없음",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "잘못된 사용자",
"Unable to change mail address" : "이메일 주소를 변경할 수 없음",
"Email saved" : "이메일 저장됨",
+ "Your full name has been changed." : "전체 이름이 변경되었습니다.",
+ "Unable to change full name" : "전체 이름을 변경할 수 없음",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "신뢰할 수 있는 도메인 목록에 \"{domain}\"을(를) 추가하시겠습니까?",
"Add trusted domain" : "신뢰할 수 있는 도메인 추가",
"Migration in progress. Please wait until the migration is finished" : "이전 작업 중입니다. 작업이 완료될 때까지 기다려 주십시오",
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "다음 중 하나 이상의 로캘을 지원하기 위하여 필요한 패키지를 시스템에 설치하는 것을 추천합니다: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "도메인의 루트 디렉터리 아래에 설치되어 있지 않고 시스템 cron을 사용한다면 URL 생성에 문제가 발생할 수도 있습니다. 이 문제를 해결하려면 설치본의 웹 루트 경로에 있는 config.php 파일의 \"overwrite.cli.url\" 옵션을 변경하십시오(제안: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI로 cronjob을 실행할 수 없었습니다. 다음 기술적 오류가 발생했습니다:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "잠금 백엔드로 데이터베이스를 사용하고 있으므로 트랜잭션 기반 파일 잠금을 사용합니다. 더 좋은 성능을 내려면 memcache 기반 잠금 사용을 추천합니다. 더 많은 정보를 보려면 <a target=\"_blank\" href=\"%s\">문서 ↗</a>를 참고하십시오.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "<a target=\"_blank\" href=\"%s\">설치 가이드 ↗</a>를 다시 확인하시고 <a href=\"#log-section\">로그</a>의 오류 및 경고를 확인하십시오.",
"All checks passed." : "모든 검사를 통과했습니다.",
"Open documentation" : "문서 열기",
@@ -230,7 +229,6 @@ OC.L10N.register(
"iOS app" : "iOS 앱",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "프로젝트를 지원하려면\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">개발에 참여하거나</a>\n\t\t\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">널리 알려 주십시오</a>!",
"Show First Run Wizard again" : "첫 실행 마법사 다시 보이기",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "현재 공간 중 <strong>%s</strong>/<strong>%s</strong>을(를) 사용 중입니다",
"Password" : "암호",
"Unable to change your password" : "암호를 변경할 수 없음",
"Current password" : "현재 암호",
diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json
index 1fb664b2138..be3974f7129 100644
--- a/settings/l10n/ko.json
+++ b/settings/l10n/ko.json
@@ -10,12 +10,10 @@
"Log" : "로그",
"Tips & tricks" : "팁과 추가 정보",
"Updates" : "업데이트",
- "Authentication error" : "인증 오류",
- "Your full name has been changed." : "전체 이름이 변경되었습니다.",
- "Unable to change full name" : "전체 이름을 변경할 수 없음",
"Couldn't remove app." : "앱을 삭제할 수 없습니다.",
"Language changed" : "언어가 변경됨",
"Invalid request" : "잘못된 요청",
+ "Authentication error" : "인증 오류",
"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에서 사용자를 삭제할 수 없음",
@@ -51,6 +49,8 @@
"Invalid user" : "잘못된 사용자",
"Unable to change mail address" : "이메일 주소를 변경할 수 없음",
"Email saved" : "이메일 저장됨",
+ "Your full name has been changed." : "전체 이름이 변경되었습니다.",
+ "Unable to change full name" : "전체 이름을 변경할 수 없음",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "신뢰할 수 있는 도메인 목록에 \"{domain}\"을(를) 추가하시겠습니까?",
"Add trusted domain" : "신뢰할 수 있는 도메인 추가",
"Migration in progress. Please wait until the migration is finished" : "이전 작업 중입니다. 작업이 완료될 때까지 기다려 주십시오",
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "다음 중 하나 이상의 로캘을 지원하기 위하여 필요한 패키지를 시스템에 설치하는 것을 추천합니다: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "도메인의 루트 디렉터리 아래에 설치되어 있지 않고 시스템 cron을 사용한다면 URL 생성에 문제가 발생할 수도 있습니다. 이 문제를 해결하려면 설치본의 웹 루트 경로에 있는 config.php 파일의 \"overwrite.cli.url\" 옵션을 변경하십시오(제안: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI로 cronjob을 실행할 수 없었습니다. 다음 기술적 오류가 발생했습니다:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "잠금 백엔드로 데이터베이스를 사용하고 있으므로 트랜잭션 기반 파일 잠금을 사용합니다. 더 좋은 성능을 내려면 memcache 기반 잠금 사용을 추천합니다. 더 많은 정보를 보려면 <a target=\"_blank\" href=\"%s\">문서 ↗</a>를 참고하십시오.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "<a target=\"_blank\" href=\"%s\">설치 가이드 ↗</a>를 다시 확인하시고 <a href=\"#log-section\">로그</a>의 오류 및 경고를 확인하십시오.",
"All checks passed." : "모든 검사를 통과했습니다.",
"Open documentation" : "문서 열기",
@@ -228,7 +227,6 @@
"iOS app" : "iOS 앱",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "프로젝트를 지원하려면\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">개발에 참여하거나</a>\n\t\t\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">널리 알려 주십시오</a>!",
"Show First Run Wizard again" : "첫 실행 마법사 다시 보이기",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "현재 공간 중 <strong>%s</strong>/<strong>%s</strong>을(를) 사용 중입니다",
"Password" : "암호",
"Unable to change your password" : "암호를 변경할 수 없음",
"Current password" : "현재 암호",
diff --git a/settings/l10n/lb.js b/settings/l10n/lb.js
index 79643dc416a..43f9705baa1 100644
--- a/settings/l10n/lb.js
+++ b/settings/l10n/lb.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Redis" : "Redis",
"Cron" : "Cron",
"Log" : "Log",
- "Authentication error" : "Authentifikatioun's Fehler",
"Language changed" : "Sprooch huet geännert",
"Invalid request" : "Ongülteg Requête",
+ "Authentication error" : "Authentifikatioun's Fehler",
"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",
"Wrong password" : "Falscht Passwuert",
diff --git a/settings/l10n/lb.json b/settings/l10n/lb.json
index 26af461d141..1d408deb079 100644
--- a/settings/l10n/lb.json
+++ b/settings/l10n/lb.json
@@ -3,9 +3,9 @@
"Redis" : "Redis",
"Cron" : "Cron",
"Log" : "Log",
- "Authentication error" : "Authentifikatioun's Fehler",
"Language changed" : "Sprooch huet geännert",
"Invalid request" : "Ongülteg Requête",
+ "Authentication error" : "Authentifikatioun's Fehler",
"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",
"Wrong password" : "Falscht Passwuert",
diff --git a/settings/l10n/lo.js b/settings/l10n/lo.js
index 862f93e195f..43069818133 100644
--- a/settings/l10n/lo.js
+++ b/settings/l10n/lo.js
@@ -3,7 +3,7 @@ OC.L10N.register(
{
"Sharing" : "ການແບ່ງປັນ",
"Log" : "ບັນທຶກ",
- "Unable to change full name" : "ບໍ່ສາມາດປ່ຽນຊື່ເຕັມໄດ້",
- "Couldn't remove app." : "ບໍ່ສາມາດລຶບແອັບຯອອກໄດ້"
+ "Couldn't remove app." : "ບໍ່ສາມາດລຶບແອັບຯອອກໄດ້",
+ "Unable to change full name" : "ບໍ່ສາມາດປ່ຽນຊື່ເຕັມໄດ້"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/lo.json b/settings/l10n/lo.json
index 75515944189..942e427821e 100644
--- a/settings/l10n/lo.json
+++ b/settings/l10n/lo.json
@@ -1,7 +1,7 @@
{ "translations": {
"Sharing" : "ການແບ່ງປັນ",
"Log" : "ບັນທຶກ",
- "Unable to change full name" : "ບໍ່ສາມາດປ່ຽນຊື່ເຕັມໄດ້",
- "Couldn't remove app." : "ບໍ່ສາມາດລຶບແອັບຯອອກໄດ້"
+ "Couldn't remove app." : "ບໍ່ສາມາດລຶບແອັບຯອອກໄດ້",
+ "Unable to change full name" : "ບໍ່ສາມາດປ່ຽນຊື່ເຕັມໄດ້"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js
index c1ec5be2214..839707cd21a 100644
--- a/settings/l10n/lt_LT.js
+++ b/settings/l10n/lt_LT.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Žurnalas",
"Tips & tricks" : "Patarimai ir gudrybės",
"Updates" : "Atnaujinimai",
- "Authentication error" : "Autentikacijos klaida",
- "Your full name has been changed." : "Pilnas vardas pakeistas.",
- "Unable to change full name" : "Nepavyko pakeisti pilno vardo",
"Couldn't remove app." : "Nepavyko pašalinti programėlės.",
"Language changed" : "Kalba pakeista",
"Invalid request" : "Klaidinga užklausa",
+ "Authentication error" : "Autentikacijos klaida",
"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 vartotojo prie grupės %s",
"Unable to remove user from group %s" : "Nepavyko ištrinti vartotojo iš grupės %s",
@@ -37,6 +35,8 @@ OC.L10N.register(
"Your %s account was created" : "Tavo paskyra %s sukurta",
"Unable to delete user." : "Nepavyko ištrinti vartotojo.",
"Email saved" : "El. paštas išsaugotas",
+ "Your full name has been changed." : "Pilnas vardas pakeistas.",
+ "Unable to change full name" : "Nepavyko pakeisti pilno vardo",
"All" : "Viskas",
"Please wait...." : "Prašome palaukti...",
"Error while disabling app" : "Klaida išjungiant programą",
@@ -88,7 +88,6 @@ OC.L10N.register(
"Android app" : "Android programa",
"iOS app" : "iOS programa",
"Show First Run Wizard again" : "Rodyti pirmo karto vedlį dar kartą",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Jūs naudojate <strong>%s</strong> iš galimų <strong>%s</strong>",
"Password" : "Slaptažodis",
"Unable to change your password" : "Neįmanoma pakeisti slaptažodžio",
"Current password" : "Dabartinis slaptažodis",
diff --git a/settings/l10n/lt_LT.json b/settings/l10n/lt_LT.json
index cf389512098..4e6a45524aa 100644
--- a/settings/l10n/lt_LT.json
+++ b/settings/l10n/lt_LT.json
@@ -10,12 +10,10 @@
"Log" : "Žurnalas",
"Tips & tricks" : "Patarimai ir gudrybės",
"Updates" : "Atnaujinimai",
- "Authentication error" : "Autentikacijos klaida",
- "Your full name has been changed." : "Pilnas vardas pakeistas.",
- "Unable to change full name" : "Nepavyko pakeisti pilno vardo",
"Couldn't remove app." : "Nepavyko pašalinti programėlės.",
"Language changed" : "Kalba pakeista",
"Invalid request" : "Klaidinga užklausa",
+ "Authentication error" : "Autentikacijos klaida",
"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 vartotojo prie grupės %s",
"Unable to remove user from group %s" : "Nepavyko ištrinti vartotojo iš grupės %s",
@@ -35,6 +33,8 @@
"Your %s account was created" : "Tavo paskyra %s sukurta",
"Unable to delete user." : "Nepavyko ištrinti vartotojo.",
"Email saved" : "El. paštas išsaugotas",
+ "Your full name has been changed." : "Pilnas vardas pakeistas.",
+ "Unable to change full name" : "Nepavyko pakeisti pilno vardo",
"All" : "Viskas",
"Please wait...." : "Prašome palaukti...",
"Error while disabling app" : "Klaida išjungiant programą",
@@ -86,7 +86,6 @@
"Android app" : "Android programa",
"iOS app" : "iOS programa",
"Show First Run Wizard again" : "Rodyti pirmo karto vedlį dar kartą",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Jūs naudojate <strong>%s</strong> iš galimų <strong>%s</strong>",
"Password" : "Slaptažodis",
"Unable to change your password" : "Neįmanoma pakeisti slaptažodžio",
"Current password" : "Dabartinis slaptažodis",
diff --git a/settings/l10n/lv.js b/settings/l10n/lv.js
index 30cb20b6452..52b7929f495 100644
--- a/settings/l10n/lv.js
+++ b/settings/l10n/lv.js
@@ -6,12 +6,10 @@ OC.L10N.register(
"Cron" : "Cron",
"Log" : "Žurnāls",
"Updates" : "Atjauninājumi",
- "Authentication error" : "Autentifikācijas kļūda",
- "Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.",
- "Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu",
"Couldn't remove app." : "Nebija iespējams atslēgt lietoni.",
"Language changed" : "Valoda tika nomainīta",
"Invalid request" : "Nederīgs vaicājums",
+ "Authentication error" : "Autentifikācijas kļūda",
"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",
@@ -40,6 +38,8 @@ OC.L10N.register(
"Invalid user" : "Nepareizs lietotājs",
"Unable to change mail address" : "Nevar nomainīt e-pasta adresi",
"Email saved" : "E-pasts tika saglabāts",
+ "Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.",
+ "Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu",
"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?",
"Add trusted domain" : "Pievienot uzticamu domēnu",
"Sending..." : "Sūta...",
@@ -128,7 +128,6 @@ OC.L10N.register(
"Android app" : "Android lietotne",
"iOS app" : "iOS lietotne",
"Show First Run Wizard again" : "Vēlreiz rādīt pirmās palaišanas vedni",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Jūs lietojat <strong>%s</strong> no pieejamajiem <strong>%s</strong>",
"Password" : "Parole",
"Unable to change your password" : "Nevar nomainīt jūsu paroli",
"Current password" : "Pašreizējā parole",
diff --git a/settings/l10n/lv.json b/settings/l10n/lv.json
index 18b41b82f97..4313703833b 100644
--- a/settings/l10n/lv.json
+++ b/settings/l10n/lv.json
@@ -4,12 +4,10 @@
"Cron" : "Cron",
"Log" : "Žurnāls",
"Updates" : "Atjauninājumi",
- "Authentication error" : "Autentifikācijas kļūda",
- "Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.",
- "Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu",
"Couldn't remove app." : "Nebija iespējams atslēgt lietoni.",
"Language changed" : "Valoda tika nomainīta",
"Invalid request" : "Nederīgs vaicājums",
+ "Authentication error" : "Autentifikācijas kļūda",
"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",
@@ -38,6 +36,8 @@
"Invalid user" : "Nepareizs lietotājs",
"Unable to change mail address" : "Nevar nomainīt e-pasta adresi",
"Email saved" : "E-pasts tika saglabāts",
+ "Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.",
+ "Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu",
"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?",
"Add trusted domain" : "Pievienot uzticamu domēnu",
"Sending..." : "Sūta...",
@@ -126,7 +126,6 @@
"Android app" : "Android lietotne",
"iOS app" : "iOS lietotne",
"Show First Run Wizard again" : "Vēlreiz rādīt pirmās palaišanas vedni",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Jūs lietojat <strong>%s</strong> no pieejamajiem <strong>%s</strong>",
"Password" : "Parole",
"Unable to change your password" : "Nevar nomainīt jūsu paroli",
"Current password" : "Pašreizējā parole",
diff --git a/settings/l10n/mk.js b/settings/l10n/mk.js
index 65e9d4c09a8..d3deefde6b3 100644
--- a/settings/l10n/mk.js
+++ b/settings/l10n/mk.js
@@ -10,12 +10,10 @@ OC.L10N.register(
"Log" : "Записник",
"Tips & tricks" : "Совети и трикови",
"Updates" : "Ажурирања",
- "Authentication error" : "Грешка во автентикација",
- "Your full name has been changed." : "Вашето целосно име е променето.",
- "Unable to change full name" : "Не можам да го променам целото име",
"Couldn't remove app." : "Не можам да ја отстранам апликацијата.",
"Language changed" : "Јазикот е сменет",
"Invalid request" : "Неправилно барање",
+ "Authentication error" : "Грешка во автентикација",
"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",
@@ -28,6 +26,7 @@ OC.L10N.register(
"Unable to change password" : "Вашата лозинка неможе да се смени",
"Enabled" : "Овозможен",
"Not enabled" : "Не е овозможено",
+ "Federated Cloud Sharing" : "Федерирано клауд споделување",
"A problem occurred, please check your log files (Error: %s)" : "Се случи грешка, ве молам проверете ги вашите датотеки за логови (Грешка: %s)",
"Migration Completed" : "Миграцијата заврши",
"Group already exists." : "Групата веќе постои.",
@@ -38,9 +37,24 @@ OC.L10N.register(
"test email settings" : "провери ги нагодувањата за електронска пошта",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Се случи грешка при праќање на порака. Ве молам проверете ги вашите подесувања. (Error: %s)",
"Email sent" : "Е-порака пратена",
+ "Invalid mail address" : "Неправилна електронска адреса/пошта",
+ "A user with that name already exists." : "Корисник со ова име веќе постои.",
+ "Unable to create user." : "Неможе да додадам корисник.",
+ "Your %s account was created" : "Вашата %s сметка е креирана",
+ "Unable to delete user." : "Неможам да избришам корисник",
+ "Forbidden" : "Забрането",
+ "Invalid user" : "Неправилен корисник",
+ "Unable to change mail address" : "Не можам да ја променам електронската адреса/пошта",
"Email saved" : "Електронската пошта е снимена",
+ "Your full name has been changed." : "Вашето целосно име е променето.",
+ "Unable to change full name" : "Не можам да го променам целото име",
+ "Migration started …" : "Миграцијата е започнаа ...",
"Sending..." : "Испраќам...",
+ "Official" : "Официјален",
+ "Approved" : "Одобрен",
+ "Experimental" : "Експериментален",
"All" : "Сите",
+ "No apps found for your version" : "За вашата верзија не се пронајдени апликации",
"Please wait...." : "Ве молам почекајте ...",
"Error while disabling app" : "Грешка при исклучувањето на апликацијата",
"Disable" : "Оневозможи",
@@ -49,23 +63,34 @@ OC.L10N.register(
"Updating...." : "Надградувам ...",
"Error while updating app" : "Грешка додека ја надградувам апликацијата",
"Updated" : "Надграден",
+ "Uninstalling ...." : "Деинсталирам ...",
+ "Error while uninstalling app" : "Грешка при деинсталација на апликацијата",
+ "Uninstall" : "Деинсталирај",
+ "App update" : "Надградба на апликацијата",
+ "An error occurred: {message}" : "Се случи грешка: {message}",
"Select a profile picture" : "Одбери фотографија за профилот",
"Very weak password" : "Многу слаба лозинка",
"Weak password" : "Слаба лозинка",
"So-so password" : "Така така лозинка",
"Good password" : "Добра лозинка",
"Strong password" : "Јака лозинка",
+ "Valid until {date}" : "Валидно до {date}",
"Delete" : "Избриши",
"Groups" : "Групи",
+ "Unable to delete {objName}" : "Не можам да избришам {objName}",
"Error creating group" : "Грешка при креирање на група",
"A valid group name must be provided" : "Мора да се обезбеди валидно име на група",
"undo" : "врати",
+ "no group" : "нема група",
"never" : "никогаш",
+ "deleted {userName}" : "избришан {userName}",
"add group" : "додади група",
"A valid username must be provided" : "Мора да се обезбеди валидно корисничко име ",
"Error creating user" : "Грешка при креирање на корисникот",
"A valid password must be provided" : "Мора да се обезбеди валидна лозинка",
"__language_name__" : "__language_name__",
+ "Sync clients" : "Клиенти за синхронизација",
+ "Personal info" : "Лични податоци",
"SSL root certificates" : "SSL root сертификати",
"Info, warnings, errors and fatal issues" : "Информации, предупредувања, грешки и фатални работи",
"Warnings, errors and fatal issues" : "Предупредувања, грешки и фатални работи",
@@ -77,6 +102,7 @@ OC.L10N.register(
"NT LAN Manager" : "NT LAN Менаџер",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Open documentation" : "Отвори ја документацијата",
"Allow apps to use the Share API" : "Дозволете апликациите да го користат API-то за споделување",
"Allow users to share via link" : "Допушти корисниците да споделуваат со линкови",
"Enforce password protection" : "Наметни заштита на лозинка",
@@ -113,7 +139,6 @@ OC.L10N.register(
"Forum" : "Форум",
"Get the apps to sync your files" : "Преземете апликации за синхронизирање на вашите датотеки",
"Show First Run Wizard again" : "Прикажи го повторно волшебникот при првото стартување",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Имате искористено <strong>%s</strong> од достапните <strong>%s</strong>",
"Password" : "Лозинка",
"Unable to change your password" : "Вашата лозинка неможе да се смени",
"Current password" : "Моментална лозинка",
diff --git a/settings/l10n/mk.json b/settings/l10n/mk.json
index 607808c7367..24adf3431e2 100644
--- a/settings/l10n/mk.json
+++ b/settings/l10n/mk.json
@@ -8,12 +8,10 @@
"Log" : "Записник",
"Tips & tricks" : "Совети и трикови",
"Updates" : "Ажурирања",
- "Authentication error" : "Грешка во автентикација",
- "Your full name has been changed." : "Вашето целосно име е променето.",
- "Unable to change full name" : "Не можам да го променам целото име",
"Couldn't remove app." : "Не можам да ја отстранам апликацијата.",
"Language changed" : "Јазикот е сменет",
"Invalid request" : "Неправилно барање",
+ "Authentication error" : "Грешка во автентикација",
"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",
@@ -26,6 +24,7 @@
"Unable to change password" : "Вашата лозинка неможе да се смени",
"Enabled" : "Овозможен",
"Not enabled" : "Не е овозможено",
+ "Federated Cloud Sharing" : "Федерирано клауд споделување",
"A problem occurred, please check your log files (Error: %s)" : "Се случи грешка, ве молам проверете ги вашите датотеки за логови (Грешка: %s)",
"Migration Completed" : "Миграцијата заврши",
"Group already exists." : "Групата веќе постои.",
@@ -36,9 +35,24 @@
"test email settings" : "провери ги нагодувањата за електронска пошта",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Се случи грешка при праќање на порака. Ве молам проверете ги вашите подесувања. (Error: %s)",
"Email sent" : "Е-порака пратена",
+ "Invalid mail address" : "Неправилна електронска адреса/пошта",
+ "A user with that name already exists." : "Корисник со ова име веќе постои.",
+ "Unable to create user." : "Неможе да додадам корисник.",
+ "Your %s account was created" : "Вашата %s сметка е креирана",
+ "Unable to delete user." : "Неможам да избришам корисник",
+ "Forbidden" : "Забрането",
+ "Invalid user" : "Неправилен корисник",
+ "Unable to change mail address" : "Не можам да ја променам електронската адреса/пошта",
"Email saved" : "Електронската пошта е снимена",
+ "Your full name has been changed." : "Вашето целосно име е променето.",
+ "Unable to change full name" : "Не можам да го променам целото име",
+ "Migration started …" : "Миграцијата е започнаа ...",
"Sending..." : "Испраќам...",
+ "Official" : "Официјален",
+ "Approved" : "Одобрен",
+ "Experimental" : "Експериментален",
"All" : "Сите",
+ "No apps found for your version" : "За вашата верзија не се пронајдени апликации",
"Please wait...." : "Ве молам почекајте ...",
"Error while disabling app" : "Грешка при исклучувањето на апликацијата",
"Disable" : "Оневозможи",
@@ -47,23 +61,34 @@
"Updating...." : "Надградувам ...",
"Error while updating app" : "Грешка додека ја надградувам апликацијата",
"Updated" : "Надграден",
+ "Uninstalling ...." : "Деинсталирам ...",
+ "Error while uninstalling app" : "Грешка при деинсталација на апликацијата",
+ "Uninstall" : "Деинсталирај",
+ "App update" : "Надградба на апликацијата",
+ "An error occurred: {message}" : "Се случи грешка: {message}",
"Select a profile picture" : "Одбери фотографија за профилот",
"Very weak password" : "Многу слаба лозинка",
"Weak password" : "Слаба лозинка",
"So-so password" : "Така така лозинка",
"Good password" : "Добра лозинка",
"Strong password" : "Јака лозинка",
+ "Valid until {date}" : "Валидно до {date}",
"Delete" : "Избриши",
"Groups" : "Групи",
+ "Unable to delete {objName}" : "Не можам да избришам {objName}",
"Error creating group" : "Грешка при креирање на група",
"A valid group name must be provided" : "Мора да се обезбеди валидно име на група",
"undo" : "врати",
+ "no group" : "нема група",
"never" : "никогаш",
+ "deleted {userName}" : "избришан {userName}",
"add group" : "додади група",
"A valid username must be provided" : "Мора да се обезбеди валидно корисничко име ",
"Error creating user" : "Грешка при креирање на корисникот",
"A valid password must be provided" : "Мора да се обезбеди валидна лозинка",
"__language_name__" : "__language_name__",
+ "Sync clients" : "Клиенти за синхронизација",
+ "Personal info" : "Лични податоци",
"SSL root certificates" : "SSL root сертификати",
"Info, warnings, errors and fatal issues" : "Информации, предупредувања, грешки и фатални работи",
"Warnings, errors and fatal issues" : "Предупредувања, грешки и фатални работи",
@@ -75,6 +100,7 @@
"NT LAN Manager" : "NT LAN Менаџер",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Open documentation" : "Отвори ја документацијата",
"Allow apps to use the Share API" : "Дозволете апликациите да го користат API-то за споделување",
"Allow users to share via link" : "Допушти корисниците да споделуваат со линкови",
"Enforce password protection" : "Наметни заштита на лозинка",
@@ -111,7 +137,6 @@
"Forum" : "Форум",
"Get the apps to sync your files" : "Преземете апликации за синхронизирање на вашите датотеки",
"Show First Run Wizard again" : "Прикажи го повторно волшебникот при првото стартување",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Имате искористено <strong>%s</strong> од достапните <strong>%s</strong>",
"Password" : "Лозинка",
"Unable to change your password" : "Вашата лозинка неможе да се смени",
"Current password" : "Моментална лозинка",
diff --git a/settings/l10n/mn.js b/settings/l10n/mn.js
index 30c8a71df7a..56695ede7ae 100644
--- a/settings/l10n/mn.js
+++ b/settings/l10n/mn.js
@@ -4,14 +4,14 @@ OC.L10N.register(
"Sharing" : "Түгээлт",
"Cron" : "Крон",
"Log" : "Лог бичилт",
- "Authentication error" : "Нотолгооны алдаа",
- "Your full name has been changed." : "Таны бүтэн нэр солигдлоо.",
- "Unable to change full name" : "Бүтэн нэр солих боломжгүй байна",
"Couldn't remove app." : "Апп-ыг устгаж чадсангүй",
"Language changed" : "Хэл солигдлоо",
"Invalid request" : "Буруу хүсэлт",
+ "Authentication error" : "Нотолгооны алдаа",
"Admins can't remove themself from the admin group" : "Админууд өөрсдийгөө Админ бүлгээс хасаж чадахгүй",
"Wrong password" : "Нууц үг буруу",
+ "Your full name has been changed." : "Таны бүтэн нэр солигдлоо.",
+ "Unable to change full name" : "Бүтэн нэр солих боломжгүй байна",
"All" : "Бүгд",
"Password" : "Нууц үг",
"Email" : "И-мэйл",
diff --git a/settings/l10n/mn.json b/settings/l10n/mn.json
index 95400f3893c..560c7c9cb2e 100644
--- a/settings/l10n/mn.json
+++ b/settings/l10n/mn.json
@@ -2,14 +2,14 @@
"Sharing" : "Түгээлт",
"Cron" : "Крон",
"Log" : "Лог бичилт",
- "Authentication error" : "Нотолгооны алдаа",
- "Your full name has been changed." : "Таны бүтэн нэр солигдлоо.",
- "Unable to change full name" : "Бүтэн нэр солих боломжгүй байна",
"Couldn't remove app." : "Апп-ыг устгаж чадсангүй",
"Language changed" : "Хэл солигдлоо",
"Invalid request" : "Буруу хүсэлт",
+ "Authentication error" : "Нотолгооны алдаа",
"Admins can't remove themself from the admin group" : "Админууд өөрсдийгөө Админ бүлгээс хасаж чадахгүй",
"Wrong password" : "Нууц үг буруу",
+ "Your full name has been changed." : "Таны бүтэн нэр солигдлоо.",
+ "Unable to change full name" : "Бүтэн нэр солих боломжгүй байна",
"All" : "Бүгд",
"Password" : "Нууц үг",
"Email" : "И-мэйл",
diff --git a/settings/l10n/ms_MY.js b/settings/l10n/ms_MY.js
index db26c502d3e..a4c28176fc5 100644
--- a/settings/l10n/ms_MY.js
+++ b/settings/l10n/ms_MY.js
@@ -2,9 +2,9 @@ OC.L10N.register(
"settings",
{
"Log" : "Log",
- "Authentication error" : "Ralat pengesahan",
"Language changed" : "Bahasa diubah",
"Invalid request" : "Permintaan tidak sah",
+ "Authentication error" : "Ralat pengesahan",
"Email saved" : "Emel disimpan",
"Disable" : "Nyahaktif",
"Enable" : "Aktif",
diff --git a/settings/l10n/ms_MY.json b/settings/l10n/ms_MY.json
index 342d679ecb4..9ee8415ef8f 100644
--- a/settings/l10n/ms_MY.json
+++ b/settings/l10n/ms_MY.json
@@ -1,8 +1,8 @@
{ "translations": {
"Log" : "Log",
- "Authentication error" : "Ralat pengesahan",
"Language changed" : "Bahasa diubah",
"Invalid request" : "Permintaan tidak sah",
+ "Authentication error" : "Ralat pengesahan",
"Email saved" : "Emel disimpan",
"Disable" : "Nyahaktif",
"Enable" : "Aktif",
diff --git a/settings/l10n/my_MM.js b/settings/l10n/my_MM.js
index 88ad33d0057..f95325bb8db 100644
--- a/settings/l10n/my_MM.js
+++ b/settings/l10n/my_MM.js
@@ -1,8 +1,8 @@
OC.L10N.register(
"settings",
{
- "Authentication error" : "ခွင့်ပြုချက်မအောင်မြင်",
"Invalid request" : "တောင်းဆိုချက်မမှန်ကန်ပါ",
+ "Authentication error" : "ခွင့်ပြုချက်မအောင်မြင်",
"Password" : "စကားဝှက်",
"New password" : "စကားဝှက်အသစ်",
"Cancel" : "ပယ်ဖျက်မည်",
diff --git a/settings/l10n/my_MM.json b/settings/l10n/my_MM.json
index 0ded957958f..503f7fcb4d9 100644
--- a/settings/l10n/my_MM.json
+++ b/settings/l10n/my_MM.json
@@ -1,6 +1,6 @@
{ "translations": {
- "Authentication error" : "ခွင့်ပြုချက်မအောင်မြင်",
"Invalid request" : "တောင်းဆိုချက်မမှန်ကန်ပါ",
+ "Authentication error" : "ခွင့်ပြုချက်မအောင်မြင်",
"Password" : "စကားဝှက်",
"New password" : "စကားဝှက်အသစ်",
"Cancel" : "ပယ်ဖျက်မည်",
diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js
index 0cea17dbb48..a53f5dc1eec 100644
--- a/settings/l10n/nb_NO.js
+++ b/settings/l10n/nb_NO.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Logg",
"Tips & tricks" : "Tips og triks",
"Updates" : "Oppdateringer",
- "Authentication error" : "Autentiseringsfeil",
- "Your full name has been changed." : "Ditt fulle navn er blitt endret.",
- "Unable to change full name" : "Klarte ikke å endre fullt navn",
"Couldn't remove app." : "Klarte ikke å fjerne app.",
"Language changed" : "Språk endret",
"Invalid request" : "Ugyldig forespørsel",
+ "Authentication error" : "Autentiseringsfeil",
"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",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "Ugyldig bruker",
"Unable to change mail address" : "Kan ikke endre epost-adresse",
"Email saved" : "Epost lagret",
+ "Your full name has been changed." : "Ditt fulle navn er blitt endret.",
+ "Unable to change full name" : "Klarte ikke å endre fullt navn",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som tiltrodd domene?",
"Add trusted domain" : "Legg til et tiltrodd domene",
"Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til migreringen er ferdig.",
@@ -134,7 +134,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler sterkt å installere de påkrevde pakkene på systemet ditt for å støtte en av følgende nasjonale innstillinger: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis installasjonen din ikke er installert i roten av domenet og bruker systemets cron, kan det bli problemer med URL-genereringen. For å unngå disse problemene, sett \"overwrite.cli.url\" i filen config.php til web-roten for installasjonen din (Foreslått: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke mulig å kjøre cron-jobben vi CLI. Følgende tekniske feil oppstod:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaksjonsbasert fil-låsing bruker databasen som låsemekanisme. For best ytelse anbefales det å konfigurerer en memcache for låsing. Se <a target=\"_blank\" href=\"%s\">dokumentasjonen ↗</a> for mer informasjon.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Vennligst dobbeltsjekk <a target=\"_blank\" href=\"%s\">Installasjonsveiledningene ↗</a> og se etter feil og advarsler i <a href=\"#log-section\">loggen</a>.",
"All checks passed." : "Alle sjekker bestått.",
"Open documentation" : "Åpne dokumentasjonen",
@@ -229,7 +228,6 @@ OC.L10N.register(
"iOS app" : "iOS-app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Hvis du vil støtte prosjektet kan du\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">delta i utviklingen</a>\n\t\teller\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spre budskapet</a>!",
"Show First Run Wizard again" : "Vis \"Førstegangs veiviser\" på nytt",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har brukt <strong>%s</strong> av de tilgjengelige <strong>%s</strong>",
"Password" : "Passord",
"Unable to change your password" : "Kunne ikke endre passordet ditt",
"Current password" : "Nåværende passord",
diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json
index 0eca73177d3..0cefaa7fca8 100644
--- a/settings/l10n/nb_NO.json
+++ b/settings/l10n/nb_NO.json
@@ -10,12 +10,10 @@
"Log" : "Logg",
"Tips & tricks" : "Tips og triks",
"Updates" : "Oppdateringer",
- "Authentication error" : "Autentiseringsfeil",
- "Your full name has been changed." : "Ditt fulle navn er blitt endret.",
- "Unable to change full name" : "Klarte ikke å endre fullt navn",
"Couldn't remove app." : "Klarte ikke å fjerne app.",
"Language changed" : "Språk endret",
"Invalid request" : "Ugyldig forespørsel",
+ "Authentication error" : "Autentiseringsfeil",
"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",
@@ -51,6 +49,8 @@
"Invalid user" : "Ugyldig bruker",
"Unable to change mail address" : "Kan ikke endre epost-adresse",
"Email saved" : "Epost lagret",
+ "Your full name has been changed." : "Ditt fulle navn er blitt endret.",
+ "Unable to change full name" : "Klarte ikke å endre fullt navn",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som tiltrodd domene?",
"Add trusted domain" : "Legg til et tiltrodd domene",
"Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til migreringen er ferdig.",
@@ -132,7 +132,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler sterkt å installere de påkrevde pakkene på systemet ditt for å støtte en av følgende nasjonale innstillinger: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis installasjonen din ikke er installert i roten av domenet og bruker systemets cron, kan det bli problemer med URL-genereringen. For å unngå disse problemene, sett \"overwrite.cli.url\" i filen config.php til web-roten for installasjonen din (Foreslått: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke mulig å kjøre cron-jobben vi CLI. Følgende tekniske feil oppstod:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaksjonsbasert fil-låsing bruker databasen som låsemekanisme. For best ytelse anbefales det å konfigurerer en memcache for låsing. Se <a target=\"_blank\" href=\"%s\">dokumentasjonen ↗</a> for mer informasjon.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Vennligst dobbeltsjekk <a target=\"_blank\" href=\"%s\">Installasjonsveiledningene ↗</a> og se etter feil og advarsler i <a href=\"#log-section\">loggen</a>.",
"All checks passed." : "Alle sjekker bestått.",
"Open documentation" : "Åpne dokumentasjonen",
@@ -227,7 +226,6 @@
"iOS app" : "iOS-app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Hvis du vil støtte prosjektet kan du\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">delta i utviklingen</a>\n\t\teller\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spre budskapet</a>!",
"Show First Run Wizard again" : "Vis \"Førstegangs veiviser\" på nytt",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har brukt <strong>%s</strong> av de tilgjengelige <strong>%s</strong>",
"Password" : "Passord",
"Unable to change your password" : "Kunne ikke endre passordet ditt",
"Current password" : "Nåværende passord",
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index f28a9f3b17e..4d2105ba6fa 100644
--- a/settings/l10n/nl.js
+++ b/settings/l10n/nl.js
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwrite.cli.url\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "het was niet mogelijk om de cronjob via CLI uit te voeren. De volgende technische problemen traden op:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transactionele bestandslocking gebruikt de database als blokkeermechanisme. Voor de beste prestaties wordt geadviseerd om een memcache voor locking te configureren. Zie de <a target=\"_blank\" href=\"%s\">documentatie ↗</a> voor meer informatie.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lees de <a href='%s'>installatie handleiding</a> goed door en controleer op fouten en waarschuwingen in de <a href=\"#log-section\">logging</a>.",
"All checks passed." : "Alle checks geslaagd",
"Open documentation" : "Open documentatie",
@@ -231,7 +230,6 @@ OC.L10N.register(
"iOS app" : "iOS app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Als u het project wilt ondersteunen\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ontwikkel mee</a>\n\t\tof\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">verkondig het nieuws</a>!",
"Show First Run Wizard again" : "Toon de Eerste start Wizard opnieuw",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "U heeft <strong>%s</strong> gebruikt van de beschikbare <strong>%s</strong>",
"Password" : "Wachtwoord",
"Unable to change your password" : "Niet in staat om uw wachtwoord te wijzigen",
"Current password" : "Huidig wachtwoord",
@@ -259,7 +257,7 @@ OC.L10N.register(
"Issued By" : "Uitgegeven door",
"Valid until %s" : "Geldig tot %s",
"Import root certificate" : "Importeren root certificaat",
- "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Ontwikkeld door de {communityopen}ownCloud gemeenschaplinkclose}, de {githubopen}source code{linkclose} is gelicenseerd onder de {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.",
+ "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Ontwikkeld door de {communityopen}ownCloud gemeenschap{linkclose}, de {githubopen}source code{linkclose} is gelicenseerd onder de {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.",
"Show storage location" : "Toon opslaglocatie",
"Show last log in" : "Toon laatste inlog",
"Show user backend" : "Toon backend gebruiker",
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index b9a7baadde1..b64962f87d1 100644
--- a/settings/l10n/nl.json
+++ b/settings/l10n/nl.json
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwrite.cli.url\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "het was niet mogelijk om de cronjob via CLI uit te voeren. De volgende technische problemen traden op:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transactionele bestandslocking gebruikt de database als blokkeermechanisme. Voor de beste prestaties wordt geadviseerd om een memcache voor locking te configureren. Zie de <a target=\"_blank\" href=\"%s\">documentatie ↗</a> voor meer informatie.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lees de <a href='%s'>installatie handleiding</a> goed door en controleer op fouten en waarschuwingen in de <a href=\"#log-section\">logging</a>.",
"All checks passed." : "Alle checks geslaagd",
"Open documentation" : "Open documentatie",
@@ -229,7 +228,6 @@
"iOS app" : "iOS app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Als u het project wilt ondersteunen\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ontwikkel mee</a>\n\t\tof\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">verkondig het nieuws</a>!",
"Show First Run Wizard again" : "Toon de Eerste start Wizard opnieuw",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "U heeft <strong>%s</strong> gebruikt van de beschikbare <strong>%s</strong>",
"Password" : "Wachtwoord",
"Unable to change your password" : "Niet in staat om uw wachtwoord te wijzigen",
"Current password" : "Huidig wachtwoord",
@@ -257,7 +255,7 @@
"Issued By" : "Uitgegeven door",
"Valid until %s" : "Geldig tot %s",
"Import root certificate" : "Importeren root certificaat",
- "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Ontwikkeld door de {communityopen}ownCloud gemeenschaplinkclose}, de {githubopen}source code{linkclose} is gelicenseerd onder de {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.",
+ "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Ontwikkeld door de {communityopen}ownCloud gemeenschap{linkclose}, de {githubopen}source code{linkclose} is gelicenseerd onder de {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.",
"Show storage location" : "Toon opslaglocatie",
"Show last log in" : "Toon laatste inlog",
"Show user backend" : "Toon backend gebruiker",
diff --git a/settings/l10n/nn_NO.js b/settings/l10n/nn_NO.js
index 7539ca7f099..3e36ed58b44 100644
--- a/settings/l10n/nn_NO.js
+++ b/settings/l10n/nn_NO.js
@@ -4,9 +4,9 @@ OC.L10N.register(
"Sharing" : "Deling",
"Cron" : "Cron",
"Log" : "Logg",
- "Authentication error" : "Autentiseringsfeil",
"Language changed" : "Språk endra",
"Invalid request" : "Ugyldig førespurnad",
+ "Authentication error" : "Autentiseringsfeil",
"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",
@@ -54,7 +54,6 @@ OC.L10N.register(
"Forum" : "Forum",
"Get the apps to sync your files" : "Få app-ar som kan synkronisera filene dine",
"Show First Run Wizard again" : "Vis Oppstartvegvisaren igjen",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har brukt <strong>%s</strong> av dine tilgjengelege <strong>%s</strong>",
"Password" : "Passord",
"Unable to change your password" : "Klarte ikkje endra passordet",
"Current password" : "Passord",
diff --git a/settings/l10n/nn_NO.json b/settings/l10n/nn_NO.json
index 8d30f4c3612..647b691335d 100644
--- a/settings/l10n/nn_NO.json
+++ b/settings/l10n/nn_NO.json
@@ -2,9 +2,9 @@
"Sharing" : "Deling",
"Cron" : "Cron",
"Log" : "Logg",
- "Authentication error" : "Autentiseringsfeil",
"Language changed" : "Språk endra",
"Invalid request" : "Ugyldig førespurnad",
+ "Authentication error" : "Autentiseringsfeil",
"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",
@@ -52,7 +52,6 @@
"Forum" : "Forum",
"Get the apps to sync your files" : "Få app-ar som kan synkronisera filene dine",
"Show First Run Wizard again" : "Vis Oppstartvegvisaren igjen",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har brukt <strong>%s</strong> av dine tilgjengelege <strong>%s</strong>",
"Password" : "Passord",
"Unable to change your password" : "Klarte ikkje endra passordet",
"Current password" : "Passord",
diff --git a/settings/l10n/oc.js b/settings/l10n/oc.js
index 38055739443..ef5e0fa6b8e 100644
--- a/settings/l10n/oc.js
+++ b/settings/l10n/oc.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Log",
"Tips & tricks" : "Estècs e astúcias",
"Updates" : "Mesas a jorn",
- "Authentication error" : "Error d'autentificacion",
- "Your full name has been changed." : "Vòstre nom complet es estat modificat.",
- "Unable to change full name" : "Impossible de cambiar lo nom complet",
"Couldn't remove app." : "Impossible de suprimir l'aplicacion.",
"Language changed" : "Lenga cambiada",
"Invalid request" : "Requèsta invalida",
+ "Authentication error" : "Error d'autentificacion",
"Admins can't remove themself from the admin group" : "Los administrators se pòdon pas levar eles-meteisses del grop admin",
"Unable to add user to group %s" : "Impossible d'apondre l'utilizaire al grop %s",
"Unable to remove user from group %s" : "Impossible de suprimir l'utilizaire del grop %s",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "Utilizaire invalid",
"Unable to change mail address" : "Impossible de modificar l'adreça de corrièl",
"Email saved" : "Email salvat",
+ "Your full name has been changed." : "Vòstre nom complet es estat modificat.",
+ "Unable to change full name" : "Impossible de cambiar lo nom complet",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sètz segur que volètz apondre \"{domain}\" coma domeni de fisança ?",
"Add trusted domain" : "Apondre un domeni de fisança",
"Migration in progress. Please wait until the migration is finished" : "Migracion en cors. Esperatz qu'aquela s'acabe",
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vos recomandam d'installar sus vòstre sistèma los paquets requesits a la presa en carga d'un dels paramètres regionals seguents : %s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se vòstra installacion es pas estada efectuada a la raiç del domeni e qu'utiliza lo cron del sistèma, i pòt aver de problèmas amb la generacion d'URL. Per los evitar, configuratz l'opcion \"overwrite.cli.url\" de vòstre fichièr config.php amb lo camin de la raiç de vòstra installacion (suggerit : \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Lo prètzfach cron a pas pogut s'executar via CLI. Aquelas errors tecnicas son aparegudas :",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Lo verrolhatge transaccional de fichièrs utiliza la banca de donadas. Per obténer de performànciasmelhor il est recommandé d'utiliser plutôt memcache. Consultez la <a target=\"_blank\" href=\"%s\">documentation ↗</a> pour plus d'informations.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Consultatz los <a target=\"_blank\" href=\"%s\">guidas d'installacion ↗</a>, e cercatz d'errors o avertiments dins <a href=\"#log-section\">los logs</a>.",
"All checks passed." : "Totes los tèsts an capitat.",
"Open documentation" : "Veire la documentacion",
@@ -230,7 +229,6 @@ OC.L10N.register(
"iOS app" : "Aplicacion iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se volètz aportar vòstre supòrt al projècte\n <a href=\"https://owncloud.org/contribute\"\n target=\"_blank\" rel=\"noreferrer\">rejonhètz lo desvolopament</a>\n o\n <a href=\"https://owncloud.org/promote\"\n target=\"_blank\" rel=\"noreferrer\">fasètz passar l'informacion</a> !",
"Show First Run Wizard again" : "Reveire la fenèstra d'acuèlh afichada al moment de vòstra primièra connexion",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Utilizatz <strong>%s</strong> dels <strong>%s<strong> disponibles",
"Password" : "Senhal",
"Unable to change your password" : "Impossible de cambiar vòstre senhal",
"Current password" : "Senhal actual",
diff --git a/settings/l10n/oc.json b/settings/l10n/oc.json
index e60cfb45ed3..c8107aaa04a 100644
--- a/settings/l10n/oc.json
+++ b/settings/l10n/oc.json
@@ -10,12 +10,10 @@
"Log" : "Log",
"Tips & tricks" : "Estècs e astúcias",
"Updates" : "Mesas a jorn",
- "Authentication error" : "Error d'autentificacion",
- "Your full name has been changed." : "Vòstre nom complet es estat modificat.",
- "Unable to change full name" : "Impossible de cambiar lo nom complet",
"Couldn't remove app." : "Impossible de suprimir l'aplicacion.",
"Language changed" : "Lenga cambiada",
"Invalid request" : "Requèsta invalida",
+ "Authentication error" : "Error d'autentificacion",
"Admins can't remove themself from the admin group" : "Los administrators se pòdon pas levar eles-meteisses del grop admin",
"Unable to add user to group %s" : "Impossible d'apondre l'utilizaire al grop %s",
"Unable to remove user from group %s" : "Impossible de suprimir l'utilizaire del grop %s",
@@ -51,6 +49,8 @@
"Invalid user" : "Utilizaire invalid",
"Unable to change mail address" : "Impossible de modificar l'adreça de corrièl",
"Email saved" : "Email salvat",
+ "Your full name has been changed." : "Vòstre nom complet es estat modificat.",
+ "Unable to change full name" : "Impossible de cambiar lo nom complet",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sètz segur que volètz apondre \"{domain}\" coma domeni de fisança ?",
"Add trusted domain" : "Apondre un domeni de fisança",
"Migration in progress. Please wait until the migration is finished" : "Migracion en cors. Esperatz qu'aquela s'acabe",
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vos recomandam d'installar sus vòstre sistèma los paquets requesits a la presa en carga d'un dels paramètres regionals seguents : %s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se vòstra installacion es pas estada efectuada a la raiç del domeni e qu'utiliza lo cron del sistèma, i pòt aver de problèmas amb la generacion d'URL. Per los evitar, configuratz l'opcion \"overwrite.cli.url\" de vòstre fichièr config.php amb lo camin de la raiç de vòstra installacion (suggerit : \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Lo prètzfach cron a pas pogut s'executar via CLI. Aquelas errors tecnicas son aparegudas :",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Lo verrolhatge transaccional de fichièrs utiliza la banca de donadas. Per obténer de performànciasmelhor il est recommandé d'utiliser plutôt memcache. Consultez la <a target=\"_blank\" href=\"%s\">documentation ↗</a> pour plus d'informations.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Consultatz los <a target=\"_blank\" href=\"%s\">guidas d'installacion ↗</a>, e cercatz d'errors o avertiments dins <a href=\"#log-section\">los logs</a>.",
"All checks passed." : "Totes los tèsts an capitat.",
"Open documentation" : "Veire la documentacion",
@@ -228,7 +227,6 @@
"iOS app" : "Aplicacion iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se volètz aportar vòstre supòrt al projècte\n <a href=\"https://owncloud.org/contribute\"\n target=\"_blank\" rel=\"noreferrer\">rejonhètz lo desvolopament</a>\n o\n <a href=\"https://owncloud.org/promote\"\n target=\"_blank\" rel=\"noreferrer\">fasètz passar l'informacion</a> !",
"Show First Run Wizard again" : "Reveire la fenèstra d'acuèlh afichada al moment de vòstra primièra connexion",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Utilizatz <strong>%s</strong> dels <strong>%s<strong> disponibles",
"Password" : "Senhal",
"Unable to change your password" : "Impossible de cambiar vòstre senhal",
"Current password" : "Senhal actual",
diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js
index 862d56fc848..1412cd01088 100644
--- a/settings/l10n/pl.js
+++ b/settings/l10n/pl.js
@@ -7,12 +7,10 @@ OC.L10N.register(
"Cron" : "Cron",
"Log" : "Logi",
"Updates" : "Aktualizacje",
- "Authentication error" : "Błąd uwierzytelniania",
- "Your full name has been changed." : "Twoja pełna nazwa została zmieniona.",
- "Unable to change full name" : "Nie można zmienić pełnej nazwy",
"Couldn't remove app." : "Nie można usunąć aplikacji.",
"Language changed" : "Zmieniono język",
"Invalid request" : "Nieprawidłowe żądanie",
+ "Authentication error" : "Błąd uwierzytelniania",
"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",
@@ -40,6 +38,8 @@ OC.L10N.register(
"Invalid user" : "Nieprawidłowy użytkownik",
"Unable to change mail address" : "Nie można zmienić adresu email",
"Email saved" : "E-mail zapisany",
+ "Your full name has been changed." : "Twoja pełna nazwa została zmieniona.",
+ "Unable to change full name" : "Nie można zmienić pełnej nazwy",
"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ę",
"Sending..." : "Wysyłam...",
@@ -162,7 +162,6 @@ OC.L10N.register(
"Android app" : "Aplikacja Android",
"iOS app" : "Aplikacja iOS",
"Show First Run Wizard again" : "Uruchom ponownie kreatora pierwszego uruchomienia",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Wykorzystujesz <strong>%s</strong> z dostępnych <strong>%s</strong>",
"Password" : "Hasło",
"Unable to change your password" : "Nie można zmienić hasła",
"Current password" : "Bieżące hasło",
diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json
index db527fa4517..a4c6a7cfd35 100644
--- a/settings/l10n/pl.json
+++ b/settings/l10n/pl.json
@@ -5,12 +5,10 @@
"Cron" : "Cron",
"Log" : "Logi",
"Updates" : "Aktualizacje",
- "Authentication error" : "Błąd uwierzytelniania",
- "Your full name has been changed." : "Twoja pełna nazwa została zmieniona.",
- "Unable to change full name" : "Nie można zmienić pełnej nazwy",
"Couldn't remove app." : "Nie można usunąć aplikacji.",
"Language changed" : "Zmieniono język",
"Invalid request" : "Nieprawidłowe żądanie",
+ "Authentication error" : "Błąd uwierzytelniania",
"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",
@@ -38,6 +36,8 @@
"Invalid user" : "Nieprawidłowy użytkownik",
"Unable to change mail address" : "Nie można zmienić adresu email",
"Email saved" : "E-mail zapisany",
+ "Your full name has been changed." : "Twoja pełna nazwa została zmieniona.",
+ "Unable to change full name" : "Nie można zmienić pełnej nazwy",
"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ę",
"Sending..." : "Wysyłam...",
@@ -160,7 +160,6 @@
"Android app" : "Aplikacja Android",
"iOS app" : "Aplikacja iOS",
"Show First Run Wizard again" : "Uruchom ponownie kreatora pierwszego uruchomienia",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Wykorzystujesz <strong>%s</strong> z dostępnych <strong>%s</strong>",
"Password" : "Hasło",
"Unable to change your password" : "Nie można zmienić hasła",
"Current password" : "Bieżące hasło",
diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js
index 1e33ffb10cc..16ece06a7f7 100644
--- a/settings/l10n/pt_BR.js
+++ b/settings/l10n/pt_BR.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Registro",
"Tips & tricks" : "Dicas & Truques",
"Updates" : "Atualizações",
- "Authentication error" : "Erro de autenticação",
- "Your full name has been changed." : "Seu nome completo foi alterado.",
- "Unable to change full name" : "Não é possível alterar o nome completo",
"Couldn't remove app." : "Não foi possível remover aplicativos.",
"Language changed" : "Idioma alterado",
"Invalid request" : "Pedido inválido",
+ "Authentication error" : "Erro de autenticação",
"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",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "Usuário inválido",
"Unable to change mail address" : "Não é possível trocar o endereço de email",
"Email saved" : "E-mail salvo",
+ "Your full name has been changed." : "Seu nome completo foi alterado.",
+ "Unable to change full name" : "Não é possível alterar o nome completo",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que você quer adicionar \"{domain}\" como domínio confiável?",
"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 migração seja finalizada",
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nós sugerimos a instalação dos pacotes necessários em seu sistema para suportar um dos seguintes locais: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a sua instalação não estiver instalada na raiz do domínio e usa cron do sistema, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwrite.cli.url\" em seu arquivo config.php para o caminho webroot de sua instalação (Sugestão: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Não foi possível executar o cron via CLI. Os seguintes erros técnicos têm aparecido:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Bloqueio de arquivos transacional está usando o banco de dados como bloqueio de back-end, para o melhor o desempenho é aconselhável configurar um cache de memória para bloqueio. Veja a <a target=\"_blank\" href=\"%s\">documentação ↗</a> para mais informação.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor, verifique os <a target=\"_blank\" href=\"%s\">guias de instalação ↗</a>, e verificar se há erros ou avisos no <a href=\"#log-section\">log</a>.",
"All checks passed." : "Todas as verificações passaram.",
"Open documentation" : "Abrir documentação",
@@ -192,6 +191,7 @@ OC.L10N.register(
"More" : "Mais",
"Less" : "Menos",
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!",
+ "What to log" : "O que colocar no log",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é usada como base de dados. Para instalações maiores recomendamos mudar para um backend de banco de dados diferente.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especialmente quando se utiliza o cliente de desktop para sincronização de arquivos o uso de SQLite é desencorajado.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Para migrar para outro banco de dados usar a ferramenta de linha de comando: 'db occ: converter-type', verifique a <a target=\"_blank\" href=\"%s\">documentação ↗</a>.",
@@ -217,20 +217,19 @@ OC.L10N.register(
"Uninstall App" : "Desinstalar Aplicativo",
"Enable experimental apps" : "Habilitar aplicativos experimentais",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>somente para lembrar que agora você tem uma conta %s.<br><br>Seu nome de usuário é: %s<br>Acesse em: <a href=\"%s\">%s</a><br><br>",
- "Cheers!" : "Saúde!",
+ "Cheers!" : "Saudações!",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\nsomente para lembrar que agora você tem uma conta %s.\n\nSeu nome de usuário é: %s\nAcesse em: %s\n\n",
"Administrator documentation" : "Documentação do administrador",
"Online documentation" : "Documentação online",
"Forum" : "Fórum",
"Issue tracker" : "Rastreador de tópicos",
"Commercial support" : "Suporte comercial",
- "Get the apps to sync your files" : "Faça com que os apps sincronizem seus arquivos",
+ "Get the apps to sync your files" : "Obtenha apps para sincronizar seus arquivos",
"Desktop client" : "Cliente Desktop",
"Android app" : "App Android",
"iOS app" : "App iOS",
- "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se você quiser dar suporte ao projeto\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">juntese ao desenvolvimento</a>\n⇥⇥ou\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">espalhe para o mundo</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se você quiser suportar o projeto, \n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">ajude com o desenvolvimento</a>\n⇥⇥ou\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">ajude a divulgá-lo</a>!",
"Show First Run Wizard again" : "Mostrar Assistente de Primeira Execução novamente",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Você usou <strong>%s</strong> do seu espaço de <strong>%s</strong>",
"Password" : "Senha",
"Unable to change your password" : "Não é possivel alterar a sua senha",
"Current password" : "Senha atual",
@@ -245,9 +244,9 @@ OC.L10N.register(
"You are member of the following groups:" : "Você é membro dos seguintes grupos:",
"Profile picture" : "Imagem para o perfil",
"Upload new" : "Enviar nova foto",
- "Select new from Files" : "Selecinar uma nova dos Arquivos",
+ "Select new from Files" : "Selecionar uma nova dos Arquivos",
"Remove image" : "Remover imagem",
- "Either png or jpg. Ideally square but you will be able to crop it. The file is not allowed to exceed the maximum size of 20 MB." : "Ou png ou jpg. Idealmente quadrada, mas você será capaz de cortá-la. O arquivo não pode exceder o tamanho máximo de 20 MB.",
+ "Either png or jpg. Ideally square but you will be able to crop it. The file is not allowed to exceed the maximum size of 20 MB." : "Formato png ou jpg. Idealmente quadrada, mas você será capaz de cortá-la. O arquivo não pode exceder o tamanho máximo de 20 MB.",
"Your avatar is provided by your original account." : "Seu avatar é fornecido por sua conta original.",
"Cancel" : "Cancelar",
"Choose as profile image" : "Escolha como imagem para o perfil",
diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json
index eaaf84d3739..ef0e5571c53 100644
--- a/settings/l10n/pt_BR.json
+++ b/settings/l10n/pt_BR.json
@@ -10,12 +10,10 @@
"Log" : "Registro",
"Tips & tricks" : "Dicas & Truques",
"Updates" : "Atualizações",
- "Authentication error" : "Erro de autenticação",
- "Your full name has been changed." : "Seu nome completo foi alterado.",
- "Unable to change full name" : "Não é possível alterar o nome completo",
"Couldn't remove app." : "Não foi possível remover aplicativos.",
"Language changed" : "Idioma alterado",
"Invalid request" : "Pedido inválido",
+ "Authentication error" : "Erro de autenticação",
"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",
@@ -51,6 +49,8 @@
"Invalid user" : "Usuário inválido",
"Unable to change mail address" : "Não é possível trocar o endereço de email",
"Email saved" : "E-mail salvo",
+ "Your full name has been changed." : "Seu nome completo foi alterado.",
+ "Unable to change full name" : "Não é possível alterar o nome completo",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que você quer adicionar \"{domain}\" como domínio confiável?",
"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 migração seja finalizada",
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nós sugerimos a instalação dos pacotes necessários em seu sistema para suportar um dos seguintes locais: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a sua instalação não estiver instalada na raiz do domínio e usa cron do sistema, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwrite.cli.url\" em seu arquivo config.php para o caminho webroot de sua instalação (Sugestão: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Não foi possível executar o cron via CLI. Os seguintes erros técnicos têm aparecido:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Bloqueio de arquivos transacional está usando o banco de dados como bloqueio de back-end, para o melhor o desempenho é aconselhável configurar um cache de memória para bloqueio. Veja a <a target=\"_blank\" href=\"%s\">documentação ↗</a> para mais informação.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor, verifique os <a target=\"_blank\" href=\"%s\">guias de instalação ↗</a>, e verificar se há erros ou avisos no <a href=\"#log-section\">log</a>.",
"All checks passed." : "Todas as verificações passaram.",
"Open documentation" : "Abrir documentação",
@@ -190,6 +189,7 @@
"More" : "Mais",
"Less" : "Menos",
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!",
+ "What to log" : "O que colocar no log",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é usada como base de dados. Para instalações maiores recomendamos mudar para um backend de banco de dados diferente.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especialmente quando se utiliza o cliente de desktop para sincronização de arquivos o uso de SQLite é desencorajado.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Para migrar para outro banco de dados usar a ferramenta de linha de comando: 'db occ: converter-type', verifique a <a target=\"_blank\" href=\"%s\">documentação ↗</a>.",
@@ -215,20 +215,19 @@
"Uninstall App" : "Desinstalar Aplicativo",
"Enable experimental apps" : "Habilitar aplicativos experimentais",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>somente para lembrar que agora você tem uma conta %s.<br><br>Seu nome de usuário é: %s<br>Acesse em: <a href=\"%s\">%s</a><br><br>",
- "Cheers!" : "Saúde!",
+ "Cheers!" : "Saudações!",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\nsomente para lembrar que agora você tem uma conta %s.\n\nSeu nome de usuário é: %s\nAcesse em: %s\n\n",
"Administrator documentation" : "Documentação do administrador",
"Online documentation" : "Documentação online",
"Forum" : "Fórum",
"Issue tracker" : "Rastreador de tópicos",
"Commercial support" : "Suporte comercial",
- "Get the apps to sync your files" : "Faça com que os apps sincronizem seus arquivos",
+ "Get the apps to sync your files" : "Obtenha apps para sincronizar seus arquivos",
"Desktop client" : "Cliente Desktop",
"Android app" : "App Android",
"iOS app" : "App iOS",
- "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se você quiser dar suporte ao projeto\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">juntese ao desenvolvimento</a>\n⇥⇥ou\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">espalhe para o mundo</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se você quiser suportar o projeto, \n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">ajude com o desenvolvimento</a>\n⇥⇥ou\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">ajude a divulgá-lo</a>!",
"Show First Run Wizard again" : "Mostrar Assistente de Primeira Execução novamente",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Você usou <strong>%s</strong> do seu espaço de <strong>%s</strong>",
"Password" : "Senha",
"Unable to change your password" : "Não é possivel alterar a sua senha",
"Current password" : "Senha atual",
@@ -243,9 +242,9 @@
"You are member of the following groups:" : "Você é membro dos seguintes grupos:",
"Profile picture" : "Imagem para o perfil",
"Upload new" : "Enviar nova foto",
- "Select new from Files" : "Selecinar uma nova dos Arquivos",
+ "Select new from Files" : "Selecionar uma nova dos Arquivos",
"Remove image" : "Remover imagem",
- "Either png or jpg. Ideally square but you will be able to crop it. The file is not allowed to exceed the maximum size of 20 MB." : "Ou png ou jpg. Idealmente quadrada, mas você será capaz de cortá-la. O arquivo não pode exceder o tamanho máximo de 20 MB.",
+ "Either png or jpg. Ideally square but you will be able to crop it. The file is not allowed to exceed the maximum size of 20 MB." : "Formato png ou jpg. Idealmente quadrada, mas você será capaz de cortá-la. O arquivo não pode exceder o tamanho máximo de 20 MB.",
"Your avatar is provided by your original account." : "Seu avatar é fornecido por sua conta original.",
"Cancel" : "Cancelar",
"Choose as profile image" : "Escolha como imagem para o perfil",
diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js
index b0f25796901..630b0a3b30b 100644
--- a/settings/l10n/pt_PT.js
+++ b/settings/l10n/pt_PT.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Registo",
"Tips & tricks" : "Dicas e truqes",
"Updates" : "Atualizações",
- "Authentication error" : "Erro na autenticação",
- "Your full name has been changed." : "O seu nome completo foi alterado.",
- "Unable to change full name" : "Não foi possível alterar o seu nome completo",
"Couldn't remove app." : "Não foi possível remover a aplicação.",
"Language changed" : "Idioma alterado",
"Invalid request" : "Pedido Inválido",
+ "Authentication error" : "Erro na autenticaçã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",
@@ -51,6 +49,8 @@ OC.L10N.register(
"Invalid user" : "Utilizador inválido",
"Unable to change mail address" : "Não foi possível alterar o teu endereço de email",
"Email saved" : "E-mail guardado",
+ "Your full name has been changed." : "O seu nome completo foi alterado.",
+ "Unable to change full name" : "Não foi possível alterar o seu nome completo",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?",
"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..",
@@ -207,7 +207,6 @@ OC.L10N.register(
"iOS app" : "Aplicação iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se quer apoiar o projecto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">junte-se ao desenvolvimento</a>\n\t\tou\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">espalhe a palavra</a>!",
"Show First Run Wizard again" : "Mostrar novamente Wizard de Arranque Inicial",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Usou <strong>%s</strong> do disponivel <strong>%s</strong>",
"Password" : "Palavra-passe",
"Unable to change your password" : "Não foi possível alterar a sua palavra-passe",
"Current password" : "Palavra-passe atual",
diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json
index 4df54b81008..65c0e3f6647 100644
--- a/settings/l10n/pt_PT.json
+++ b/settings/l10n/pt_PT.json
@@ -10,12 +10,10 @@
"Log" : "Registo",
"Tips & tricks" : "Dicas e truqes",
"Updates" : "Atualizações",
- "Authentication error" : "Erro na autenticação",
- "Your full name has been changed." : "O seu nome completo foi alterado.",
- "Unable to change full name" : "Não foi possível alterar o seu nome completo",
"Couldn't remove app." : "Não foi possível remover a aplicação.",
"Language changed" : "Idioma alterado",
"Invalid request" : "Pedido Inválido",
+ "Authentication error" : "Erro na autenticaçã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",
@@ -49,6 +47,8 @@
"Invalid user" : "Utilizador inválido",
"Unable to change mail address" : "Não foi possível alterar o teu endereço de email",
"Email saved" : "E-mail guardado",
+ "Your full name has been changed." : "O seu nome completo foi alterado.",
+ "Unable to change full name" : "Não foi possível alterar o seu nome completo",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?",
"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..",
@@ -205,7 +205,6 @@
"iOS app" : "Aplicação iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se quer apoiar o projecto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">junte-se ao desenvolvimento</a>\n\t\tou\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">espalhe a palavra</a>!",
"Show First Run Wizard again" : "Mostrar novamente Wizard de Arranque Inicial",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Usou <strong>%s</strong> do disponivel <strong>%s</strong>",
"Password" : "Palavra-passe",
"Unable to change your password" : "Não foi possível alterar a sua palavra-passe",
"Current password" : "Palavra-passe atual",
diff --git a/settings/l10n/ro.js b/settings/l10n/ro.js
index 354c45092b7..fde0c1df6aa 100644
--- a/settings/l10n/ro.js
+++ b/settings/l10n/ro.js
@@ -8,11 +8,9 @@ OC.L10N.register(
"Log" : "Jurnal de activitate",
"Tips & tricks" : "Tips & tricks",
"Updates" : "Actualizări",
- "Authentication error" : "Eroare la autentificare",
- "Your full name has been changed." : "Numele tău complet a fost schimbat.",
- "Unable to change full name" : "Nu s-a puput schimba numele complet",
"Language changed" : "Limba a fost schimbată",
"Invalid request" : "Cerere eronată",
+ "Authentication error" : "Eroare la autentificare",
"Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul admin",
"Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul la grupul %s",
"Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s",
@@ -34,6 +32,8 @@ OC.L10N.register(
"Forbidden" : "Interzis",
"Invalid user" : "Utilizator nevalid",
"Email saved" : "E-mail salvat",
+ "Your full name has been changed." : "Numele tău complet a fost schimbat.",
+ "Unable to change full name" : "Nu s-a puput schimba numele complet",
"Sending..." : "Se expediază...",
"All" : "Toate ",
"Please wait...." : "Aşteptaţi vă rog....",
@@ -91,7 +91,6 @@ OC.L10N.register(
"Desktop client" : "Client Desktop",
"Android app" : "Aplicatie Android",
"iOS app" : "Aplicație iOS",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ați utilizat <strong>%s</strong> din <strong>%s</strong> disponibile",
"Password" : "Parolă",
"Unable to change your password" : "Imposibil de-ați schimbat parola",
"Current password" : "Parola curentă",
diff --git a/settings/l10n/ro.json b/settings/l10n/ro.json
index 05a736d9fdf..c1010025fd9 100644
--- a/settings/l10n/ro.json
+++ b/settings/l10n/ro.json
@@ -6,11 +6,9 @@
"Log" : "Jurnal de activitate",
"Tips & tricks" : "Tips & tricks",
"Updates" : "Actualizări",
- "Authentication error" : "Eroare la autentificare",
- "Your full name has been changed." : "Numele tău complet a fost schimbat.",
- "Unable to change full name" : "Nu s-a puput schimba numele complet",
"Language changed" : "Limba a fost schimbată",
"Invalid request" : "Cerere eronată",
+ "Authentication error" : "Eroare la autentificare",
"Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul admin",
"Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul la grupul %s",
"Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s",
@@ -32,6 +30,8 @@
"Forbidden" : "Interzis",
"Invalid user" : "Utilizator nevalid",
"Email saved" : "E-mail salvat",
+ "Your full name has been changed." : "Numele tău complet a fost schimbat.",
+ "Unable to change full name" : "Nu s-a puput schimba numele complet",
"Sending..." : "Se expediază...",
"All" : "Toate ",
"Please wait...." : "Aşteptaţi vă rog....",
@@ -89,7 +89,6 @@
"Desktop client" : "Client Desktop",
"Android app" : "Aplicatie Android",
"iOS app" : "Aplicație iOS",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ați utilizat <strong>%s</strong> din <strong>%s</strong> disponibile",
"Password" : "Parolă",
"Unable to change your password" : "Imposibil de-ați schimbat parola",
"Current password" : "Parola curentă",
diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js
index a6f62fd5e9f..55b02afa333 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Журнал",
"Tips & tricks" : "Советы и трюки",
"Updates" : "Обновления",
- "Authentication error" : "Ошибка аутентификации",
- "Your full name has been changed." : "Ваше полное имя было изменено.",
- "Unable to change full name" : "Невозможно изменить полное имя",
"Couldn't remove app." : "Невозможно удалить приложение.",
"Language changed" : "Язык изменён",
"Invalid request" : "Неправильный запрос",
+ "Authentication error" : "Ошибка аутентификации",
"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",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "Неверный пользователь",
"Unable to change mail address" : "Невозможно изменить адрес электронной почты",
"Email saved" : "Email сохранен",
+ "Your full name has been changed." : "Ваше полное имя было изменено.",
+ "Unable to change full name" : "Невозможно изменить полное имя",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?",
"Add trusted domain" : "Добавить доверенный домен",
"Migration in progress. Please wait until the migration is finished" : "Миграция в процессе. Пожалуйста, подождите завершения миграции",
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Мы рекомендуем установить требуемые пакеты для вашей системы для поддержки одного из следующих языков: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Если ваша копия ownCloud установлена не в корне домена и использует системный планировщик cron, возможны проблемы с правильной генерацией URL. Чтобы избежать этого, установите опцию \"overwrite.cli.url\" в файле config.php равной пути папки установки. (Предположительно: \"%s\".)",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Не удается запустить задачу планировщика через CLI. Произошли следующие технические ошибки:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Механизм блокировки файлов во время передачи основан на базе данных, для лучшей производительности рекомендуется использование memcache. За подробной информацией обратитесь к <a target=\"_blank\" href=\"%s\">документации</a>.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Пожалуйста, перепроверьте <a href=\"%s\">инструкцию по установке</a> и проверьте ошибки или предупреждения в <a href=\"#log-section\">журнале</a>",
"All checks passed." : "Все проверки пройдены.",
"Open documentation" : "Открыть документацию",
@@ -230,7 +229,6 @@ OC.L10N.register(
"iOS app" : "iOS приложение",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Если Вы хотите поддержать проект\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">совместная разработка</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">сообщить</a>!",
"Show First Run Wizard again" : "Показать помощник настройки снова",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Вы использовали <strong>%s</strong> из доступных <strong>%s</strong>",
"Password" : "Пароль",
"Unable to change your password" : "Невозможно сменить пароль",
"Current password" : "Текущий пароль",
diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json
index 4ecc1dd6195..470821a774c 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -10,12 +10,10 @@
"Log" : "Журнал",
"Tips & tricks" : "Советы и трюки",
"Updates" : "Обновления",
- "Authentication error" : "Ошибка аутентификации",
- "Your full name has been changed." : "Ваше полное имя было изменено.",
- "Unable to change full name" : "Невозможно изменить полное имя",
"Couldn't remove app." : "Невозможно удалить приложение.",
"Language changed" : "Язык изменён",
"Invalid request" : "Неправильный запрос",
+ "Authentication error" : "Ошибка аутентификации",
"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",
@@ -51,6 +49,8 @@
"Invalid user" : "Неверный пользователь",
"Unable to change mail address" : "Невозможно изменить адрес электронной почты",
"Email saved" : "Email сохранен",
+ "Your full name has been changed." : "Ваше полное имя было изменено.",
+ "Unable to change full name" : "Невозможно изменить полное имя",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?",
"Add trusted domain" : "Добавить доверенный домен",
"Migration in progress. Please wait until the migration is finished" : "Миграция в процессе. Пожалуйста, подождите завершения миграции",
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Мы рекомендуем установить требуемые пакеты для вашей системы для поддержки одного из следующих языков: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Если ваша копия ownCloud установлена не в корне домена и использует системный планировщик cron, возможны проблемы с правильной генерацией URL. Чтобы избежать этого, установите опцию \"overwrite.cli.url\" в файле config.php равной пути папки установки. (Предположительно: \"%s\".)",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Не удается запустить задачу планировщика через CLI. Произошли следующие технические ошибки:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Механизм блокировки файлов во время передачи основан на базе данных, для лучшей производительности рекомендуется использование memcache. За подробной информацией обратитесь к <a target=\"_blank\" href=\"%s\">документации</a>.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Пожалуйста, перепроверьте <a href=\"%s\">инструкцию по установке</a> и проверьте ошибки или предупреждения в <a href=\"#log-section\">журнале</a>",
"All checks passed." : "Все проверки пройдены.",
"Open documentation" : "Открыть документацию",
@@ -228,7 +227,6 @@
"iOS app" : "iOS приложение",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Если Вы хотите поддержать проект\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">совместная разработка</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">сообщить</a>!",
"Show First Run Wizard again" : "Показать помощник настройки снова",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Вы использовали <strong>%s</strong> из доступных <strong>%s</strong>",
"Password" : "Пароль",
"Unable to change your password" : "Невозможно сменить пароль",
"Current password" : "Текущий пароль",
diff --git a/settings/l10n/si_LK.js b/settings/l10n/si_LK.js
index 8dc28f5ab1f..9207b5ab189 100644
--- a/settings/l10n/si_LK.js
+++ b/settings/l10n/si_LK.js
@@ -4,9 +4,9 @@ OC.L10N.register(
"Sharing" : "හුවමාරු කිරීම",
"External Storage" : "භාහිර ගබඩාව",
"Log" : "ලඝුව",
- "Authentication error" : "සත්‍යාපන දෝෂයක්",
"Language changed" : "භාෂාව ාවනස් කිරීම",
"Invalid request" : "අවලංගු අයැදුමක්",
+ "Authentication error" : "සත්‍යාපන දෝෂයක්",
"Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක",
"Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
"Email saved" : "වි-තැපෑල සුරකින ලදී",
diff --git a/settings/l10n/si_LK.json b/settings/l10n/si_LK.json
index afded14ebf1..9b2287b13be 100644
--- a/settings/l10n/si_LK.json
+++ b/settings/l10n/si_LK.json
@@ -2,9 +2,9 @@
"Sharing" : "හුවමාරු කිරීම",
"External Storage" : "භාහිර ගබඩාව",
"Log" : "ලඝුව",
- "Authentication error" : "සත්‍යාපන දෝෂයක්",
"Language changed" : "භාෂාව ාවනස් කිරීම",
"Invalid request" : "අවලංගු අයැදුමක්",
+ "Authentication error" : "සත්‍යාපන දෝෂයක්",
"Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක",
"Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
"Email saved" : "වි-තැපෑල සුරකින ලදී",
diff --git a/settings/l10n/sk_SK.js b/settings/l10n/sk_SK.js
index 2de64dd5a56..67930aebb16 100644
--- a/settings/l10n/sk_SK.js
+++ b/settings/l10n/sk_SK.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Záznam",
"Tips & tricks" : "Tipy a triky",
"Updates" : "Aktualizácie",
- "Authentication error" : "Chyba autentifikácie",
- "Your full name has been changed." : "Vaše meno a priezvisko bolo zmenené.",
- "Unable to change full name" : "Nemožno zmeniť meno a priezvisko",
"Couldn't remove app." : "Nemožno odstrániť aplikáciu.",
"Language changed" : "Jazyk zmenený",
"Invalid request" : "Neplatná požiadavka",
+ "Authentication error" : "Chyba autentifikácie",
"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",
@@ -51,6 +49,8 @@ OC.L10N.register(
"Invalid user" : "Neplatný používateľ",
"Unable to change mail address" : "Nemožno zmeniť emailovú adresu",
"Email saved" : "Email uložený",
+ "Your full name has been changed." : "Vaše meno a priezvisko bolo zmenené.",
+ "Unable to change full name" : "Nemožno zmeniť meno a priezvisko",
"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",
"Migration in progress. Please wait until the migration is finished" : "Prebieha migrácia. Počkajte prosím, kým sa skončí",
@@ -201,7 +201,6 @@ OC.L10N.register(
"iOS app" : "iOS aplikácia",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ak chcete projekt podporiť,\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">zapojte sa do vývoja</a>\n\t\talebo\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ho propagujte</a>!",
"Show First Run Wizard again" : "Znovu zobraziť sprievodcu prvým spustením",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Použili ste <strong>%s</strong> z <strong>%s</strong> dostupných ",
"Password" : "Heslo",
"Unable to change your password" : "Nie je možné zmeniť vaše heslo",
"Current password" : "Aktuálne heslo",
diff --git a/settings/l10n/sk_SK.json b/settings/l10n/sk_SK.json
index 2fc4064a033..61627bef95e 100644
--- a/settings/l10n/sk_SK.json
+++ b/settings/l10n/sk_SK.json
@@ -10,12 +10,10 @@
"Log" : "Záznam",
"Tips & tricks" : "Tipy a triky",
"Updates" : "Aktualizácie",
- "Authentication error" : "Chyba autentifikácie",
- "Your full name has been changed." : "Vaše meno a priezvisko bolo zmenené.",
- "Unable to change full name" : "Nemožno zmeniť meno a priezvisko",
"Couldn't remove app." : "Nemožno odstrániť aplikáciu.",
"Language changed" : "Jazyk zmenený",
"Invalid request" : "Neplatná požiadavka",
+ "Authentication error" : "Chyba autentifikácie",
"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",
@@ -49,6 +47,8 @@
"Invalid user" : "Neplatný používateľ",
"Unable to change mail address" : "Nemožno zmeniť emailovú adresu",
"Email saved" : "Email uložený",
+ "Your full name has been changed." : "Vaše meno a priezvisko bolo zmenené.",
+ "Unable to change full name" : "Nemožno zmeniť meno a priezvisko",
"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",
"Migration in progress. Please wait until the migration is finished" : "Prebieha migrácia. Počkajte prosím, kým sa skončí",
@@ -199,7 +199,6 @@
"iOS app" : "iOS aplikácia",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ak chcete projekt podporiť,\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">zapojte sa do vývoja</a>\n\t\talebo\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ho propagujte</a>!",
"Show First Run Wizard again" : "Znovu zobraziť sprievodcu prvým spustením",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Použili ste <strong>%s</strong> z <strong>%s</strong> dostupných ",
"Password" : "Heslo",
"Unable to change your password" : "Nie je možné zmeniť vaše heslo",
"Current password" : "Aktuálne heslo",
diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js
index 2f6534eeee6..d793dc39240 100644
--- a/settings/l10n/sl.js
+++ b/settings/l10n/sl.js
@@ -194,7 +194,6 @@ OC.L10N.register(
"iOS app" : "Program za iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Če bi radi podprli projekt\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">pristopite razvoju</a>\n\t\tali\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">razširite glas</a>!",
"Show First Run Wizard again" : "Zaženi čarovnika prvega zagona",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Uporabljenega je <strong>%s</strong> od razpoložljivih <strong>%s</strong> prostora.",
"Password" : "Geslo",
"Unable to change your password" : "Gesla ni mogoče spremeniti.",
"Current password" : "Trenutno geslo",
diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json
index afb978916f2..9170aaa9d46 100644
--- a/settings/l10n/sl.json
+++ b/settings/l10n/sl.json
@@ -192,7 +192,6 @@
"iOS app" : "Program za iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Če bi radi podprli projekt\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">pristopite razvoju</a>\n\t\tali\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">razširite glas</a>!",
"Show First Run Wizard again" : "Zaženi čarovnika prvega zagona",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Uporabljenega je <strong>%s</strong> od razpoložljivih <strong>%s</strong> prostora.",
"Password" : "Geslo",
"Unable to change your password" : "Gesla ni mogoče spremeniti.",
"Current password" : "Trenutno geslo",
diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js
index 7addd9d7d3e..a72cd4e2d5a 100644
--- a/settings/l10n/sq.js
+++ b/settings/l10n/sq.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Regjistër",
"Tips & tricks" : "Ndihmëza & rrengje",
"Updates" : "Përditësime",
- "Authentication error" : "Gabim mirëfilltësimi",
- "Your full name has been changed." : "Emri juaj i plotë u ndryshua.",
- "Unable to change full name" : "S’arrin të ndryshojë emrin e plotë",
"Couldn't remove app." : "S’hoqi dot aplikacionin.",
"Language changed" : "Gjuha u ndryshua",
"Invalid request" : "Kërkesë e pavlefshme",
+ "Authentication error" : "Gabim mirëfilltësimi",
"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",
@@ -31,6 +29,7 @@ OC.L10N.register(
"Enabled" : "E aktivizuar",
"Not enabled" : "E paaktivizuar",
"installing and updating apps via the app store or Federated Cloud Sharing" : "instalim dhe përditësim aplikacionesh përmes shitores së aplikacioneve ose Federated Cloud Sharing",
+ "Federated Cloud Sharing" : "Ndarje Në Re e Federuar ",
"cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL-ja po përdor një version %s të vjetruar (%s). Ju lutemi, përditësoni sistemin tuaj operativ ose përndryshe veçori të tilla si %s nuk do të punojnë në mënyrë të qëndrueshme.",
"A problem occurred, please check your log files (Error: %s)" : "Ndodhi një gabim, ju lutemi, kontrolloni kartelat tuaja regjistër (Error: %s)",
"Migration Completed" : "Migrimi u Plotësua",
@@ -52,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "Përdorues i pavlefshëm",
"Unable to change mail address" : "S’arrin të ndryshojë adresë email",
"Email saved" : "Email-i u ruajt",
+ "Your full name has been changed." : "Emri juaj i plotë u ndryshua.",
+ "Unable to change full name" : "S’arrin të ndryshojë emrin e plotë",
"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?",
"Add trusted domain" : "Shtoni përkatësi të besuar",
"Migration in progress. Please wait until the migration is finished" : "Migrimi në rrugë e sipër. Ju lutemi, pritni, teksa migrimi përfundon",
@@ -127,6 +128,7 @@ OC.L10N.register(
"Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Shërbyesi juaj xhiron nën Microsoft Windows. Këshillojmë fort Linux-in për punim optimal nga ana e përdoruesit.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "Ka të instaluar %1$s nën versionin %2$s, për arsye qëndrueshmërie dhe performance këshillojmë të përditësohet me një version %1$s më të ri.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Moduli PHP 'fileinfo' mungon. Ju këshillojmë me forcë ta aktivizoni këtë modul, për të patur përfundimet më të mira në zbulim llojesh MIME.",
+ "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Kyçja e kartelave gjatë transaksioneve është e çaktivizuar, kjo mund të sjellë probleme me gjendje <em>race conditions</em>. Që të shmangni këto probleme, aktivizoni 'filelocking.enabled' te config.php. Për më tepër të dhëna, shihni <a target=\"_blank\" href=\"%s\">dokumentimin ↗</a>.",
"System locale can not be set to a one which supports UTF-8." : "Si vendore sistemi nuk mund të caktohet një që mbulon UTF-8.",
"This means that there might be problems with certain characters in file names." : "Kjo do të thotë që mund të ketë probleme me disa shenja në emra kartelash.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Këshillojmë me forcë instalimin në sistemin tuaj të paketave të domosdoshme për mbulim të një prej vendoreve vijuese: %s.",
@@ -227,7 +229,6 @@ OC.L10N.register(
"iOS app" : "Aplikacion për iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Nëse doni ta përkrahni projektin\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">merrni pjesë te zhvillimi i tij</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">përhapni fjalën për të</a>!",
"Show First Run Wizard again" : "Shfaqe sërish Ndihmësin e Herës së Parë",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Keni përdorur <strong>%s</strong> nga <strong>%s</strong> tuajat",
"Password" : "Fjalëkalim",
"Unable to change your password" : "S’arrin të ndryshojë fjalëkalimin tuaj",
"Current password" : "Fjalëkalimi i tanishëm",
diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json
index c5017a053a5..5bd7422a686 100644
--- a/settings/l10n/sq.json
+++ b/settings/l10n/sq.json
@@ -10,12 +10,10 @@
"Log" : "Regjistër",
"Tips & tricks" : "Ndihmëza & rrengje",
"Updates" : "Përditësime",
- "Authentication error" : "Gabim mirëfilltësimi",
- "Your full name has been changed." : "Emri juaj i plotë u ndryshua.",
- "Unable to change full name" : "S’arrin të ndryshojë emrin e plotë",
"Couldn't remove app." : "S’hoqi dot aplikacionin.",
"Language changed" : "Gjuha u ndryshua",
"Invalid request" : "Kërkesë e pavlefshme",
+ "Authentication error" : "Gabim mirëfilltësimi",
"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",
@@ -29,6 +27,7 @@
"Enabled" : "E aktivizuar",
"Not enabled" : "E paaktivizuar",
"installing and updating apps via the app store or Federated Cloud Sharing" : "instalim dhe përditësim aplikacionesh përmes shitores së aplikacioneve ose Federated Cloud Sharing",
+ "Federated Cloud Sharing" : "Ndarje Në Re e Federuar ",
"cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL-ja po përdor një version %s të vjetruar (%s). Ju lutemi, përditësoni sistemin tuaj operativ ose përndryshe veçori të tilla si %s nuk do të punojnë në mënyrë të qëndrueshme.",
"A problem occurred, please check your log files (Error: %s)" : "Ndodhi një gabim, ju lutemi, kontrolloni kartelat tuaja regjistër (Error: %s)",
"Migration Completed" : "Migrimi u Plotësua",
@@ -50,6 +49,8 @@
"Invalid user" : "Përdorues i pavlefshëm",
"Unable to change mail address" : "S’arrin të ndryshojë adresë email",
"Email saved" : "Email-i u ruajt",
+ "Your full name has been changed." : "Emri juaj i plotë u ndryshua.",
+ "Unable to change full name" : "S’arrin të ndryshojë emrin e plotë",
"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?",
"Add trusted domain" : "Shtoni përkatësi të besuar",
"Migration in progress. Please wait until the migration is finished" : "Migrimi në rrugë e sipër. Ju lutemi, pritni, teksa migrimi përfundon",
@@ -125,6 +126,7 @@
"Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Shërbyesi juaj xhiron nën Microsoft Windows. Këshillojmë fort Linux-in për punim optimal nga ana e përdoruesit.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "Ka të instaluar %1$s nën versionin %2$s, për arsye qëndrueshmërie dhe performance këshillojmë të përditësohet me një version %1$s më të ri.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Moduli PHP 'fileinfo' mungon. Ju këshillojmë me forcë ta aktivizoni këtë modul, për të patur përfundimet më të mira në zbulim llojesh MIME.",
+ "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Kyçja e kartelave gjatë transaksioneve është e çaktivizuar, kjo mund të sjellë probleme me gjendje <em>race conditions</em>. Që të shmangni këto probleme, aktivizoni 'filelocking.enabled' te config.php. Për më tepër të dhëna, shihni <a target=\"_blank\" href=\"%s\">dokumentimin ↗</a>.",
"System locale can not be set to a one which supports UTF-8." : "Si vendore sistemi nuk mund të caktohet një që mbulon UTF-8.",
"This means that there might be problems with certain characters in file names." : "Kjo do të thotë që mund të ketë probleme me disa shenja në emra kartelash.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Këshillojmë me forcë instalimin në sistemin tuaj të paketave të domosdoshme për mbulim të një prej vendoreve vijuese: %s.",
@@ -225,7 +227,6 @@
"iOS app" : "Aplikacion për iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Nëse doni ta përkrahni projektin\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">merrni pjesë te zhvillimi i tij</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">përhapni fjalën për të</a>!",
"Show First Run Wizard again" : "Shfaqe sërish Ndihmësin e Herës së Parë",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Keni përdorur <strong>%s</strong> nga <strong>%s</strong> tuajat",
"Password" : "Fjalëkalim",
"Unable to change your password" : "S’arrin të ndryshojë fjalëkalimin tuaj",
"Current password" : "Fjalëkalimi i tanishëm",
diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js
index 3a3bc293473..c74b9d04b54 100644
--- a/settings/l10n/sr.js
+++ b/settings/l10n/sr.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Бележење",
"Tips & tricks" : "Савети и трикови",
"Updates" : "Ажурирања",
- "Authentication error" : "Грешка при провери идентитета",
- "Your full name has been changed." : "Ваше пуно име је промењено.",
- "Unable to change full name" : "Не могу да променим пуно име",
"Couldn't remove app." : "Не могу да уклоним апликацију.",
"Language changed" : "Језик је промењен",
"Invalid request" : "Неисправан захтев",
+ "Authentication error" : "Грешка при провери идентитета",
"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",
@@ -51,6 +49,8 @@ OC.L10N.register(
"Invalid user" : "Неисправан корисник",
"Unable to change mail address" : "Не могу да изменим е-адресу",
"Email saved" : "Е-порука сачувана",
+ "Your full name has been changed." : "Ваше пуно име је промењено.",
+ "Unable to change full name" : "Не могу да променим пуно име",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Да ли заиста желите да додате „{domain}“ као поуздан домен?",
"Add trusted domain" : "Додај поуздан домен",
"Migration in progress. Please wait until the migration is finished" : "Пресељење је у току. Сачекајте док се не заврши",
@@ -213,7 +213,6 @@ OC.L10N.register(
"iOS app" : "иОС апликација",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ако желите да подржите пројект\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">придружите се развоју</a>\n\t\tили\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">разгласите свима</a>!",
"Show First Run Wizard again" : "Поново прикажи чаробњака за прво покретање",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Искористили сте <strong>%s</strong> од дозвољених <strong>%s</strong>",
"Password" : "Лозинка",
"Unable to change your password" : "Не могу да изменим вашу лозинку",
"Current password" : "Тренутна лозинка",
diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json
index 5003066df7b..9443e134699 100644
--- a/settings/l10n/sr.json
+++ b/settings/l10n/sr.json
@@ -10,12 +10,10 @@
"Log" : "Бележење",
"Tips & tricks" : "Савети и трикови",
"Updates" : "Ажурирања",
- "Authentication error" : "Грешка при провери идентитета",
- "Your full name has been changed." : "Ваше пуно име је промењено.",
- "Unable to change full name" : "Не могу да променим пуно име",
"Couldn't remove app." : "Не могу да уклоним апликацију.",
"Language changed" : "Језик је промењен",
"Invalid request" : "Неисправан захтев",
+ "Authentication error" : "Грешка при провери идентитета",
"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",
@@ -49,6 +47,8 @@
"Invalid user" : "Неисправан корисник",
"Unable to change mail address" : "Не могу да изменим е-адресу",
"Email saved" : "Е-порука сачувана",
+ "Your full name has been changed." : "Ваше пуно име је промењено.",
+ "Unable to change full name" : "Не могу да променим пуно име",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Да ли заиста желите да додате „{domain}“ као поуздан домен?",
"Add trusted domain" : "Додај поуздан домен",
"Migration in progress. Please wait until the migration is finished" : "Пресељење је у току. Сачекајте док се не заврши",
@@ -211,7 +211,6 @@
"iOS app" : "иОС апликација",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ако желите да подржите пројект\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">придружите се развоју</a>\n\t\tили\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">разгласите свима</a>!",
"Show First Run Wizard again" : "Поново прикажи чаробњака за прво покретање",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Искористили сте <strong>%s</strong> од дозвољених <strong>%s</strong>",
"Password" : "Лозинка",
"Unable to change your password" : "Не могу да изменим вашу лозинку",
"Current password" : "Тренутна лозинка",
diff --git a/settings/l10n/sr@latin.js b/settings/l10n/sr@latin.js
index baacd0efddb..e7319b531fb 100644
--- a/settings/l10n/sr@latin.js
+++ b/settings/l10n/sr@latin.js
@@ -3,9 +3,9 @@ OC.L10N.register(
{
"External Storage" : "Spoljašnje skladište",
"Updates" : "Ažuriranja",
- "Authentication error" : "Greška pri autentifikaciji",
"Language changed" : "Jezik je izmenjen",
"Invalid request" : "Neispravan zahtev",
+ "Authentication error" : "Greška pri autentifikaciji",
"Saved" : "Sačuvano",
"Email sent" : "Email poslat",
"Very weak password" : "Veoma slaba lozinka",
diff --git a/settings/l10n/sr@latin.json b/settings/l10n/sr@latin.json
index 70392768da4..f53b0f418c6 100644
--- a/settings/l10n/sr@latin.json
+++ b/settings/l10n/sr@latin.json
@@ -1,9 +1,9 @@
{ "translations": {
"External Storage" : "Spoljašnje skladište",
"Updates" : "Ažuriranja",
- "Authentication error" : "Greška pri autentifikaciji",
"Language changed" : "Jezik je izmenjen",
"Invalid request" : "Neispravan zahtev",
+ "Authentication error" : "Greška pri autentifikaciji",
"Saved" : "Sačuvano",
"Email sent" : "Email poslat",
"Very weak password" : "Veoma slaba lozinka",
diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js
index 414a1121fae..d152a14f515 100644
--- a/settings/l10n/sv.js
+++ b/settings/l10n/sv.js
@@ -151,7 +151,6 @@ OC.L10N.register(
"Android app" : "Android-app",
"iOS app" : "iOS-app",
"Show First Run Wizard again" : "Visa Första uppstarts-guiden igen",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har använt <strong>%s</strong> av tillgängliga <strong>%s</strong>",
"Password" : "Lösenord",
"Unable to change your password" : "Kunde inte ändra ditt lösenord",
"Current password" : "Nuvarande lösenord",
diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json
index 0b0c0ebb88c..814096dbe79 100644
--- a/settings/l10n/sv.json
+++ b/settings/l10n/sv.json
@@ -149,7 +149,6 @@
"Android app" : "Android-app",
"iOS app" : "iOS-app",
"Show First Run Wizard again" : "Visa Första uppstarts-guiden igen",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har använt <strong>%s</strong> av tillgängliga <strong>%s</strong>",
"Password" : "Lösenord",
"Unable to change your password" : "Kunde inte ändra ditt lösenord",
"Current password" : "Nuvarande lösenord",
diff --git a/settings/l10n/ta_LK.js b/settings/l10n/ta_LK.js
index f611af9eb14..0ef4abf7fe5 100644
--- a/settings/l10n/ta_LK.js
+++ b/settings/l10n/ta_LK.js
@@ -2,9 +2,9 @@ OC.L10N.register(
"settings",
{
"External Storage" : "வெளி சேமிப்பு",
- "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
"Language changed" : "மொழி மாற்றப்பட்டது",
"Invalid request" : "செல்லுபடியற்ற வேண்டுகோள்",
+ "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
"Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது",
"Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது",
"Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது",
@@ -26,7 +26,6 @@ OC.L10N.register(
"More" : "மேலதிக",
"Less" : "குறைவான",
"by" : "மூலம்",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "நீங்கள் <strong>%s</strong> இலுள்ள <strong>%s</strong>பயன்படுத்தியுள்ளீர்கள்",
"Password" : "கடவுச்சொல்",
"Unable to change your password" : "உங்களுடைய கடவுச்சொல்லை மாற்றமுடியாது",
"Current password" : "தற்போதைய கடவுச்சொல்",
diff --git a/settings/l10n/ta_LK.json b/settings/l10n/ta_LK.json
index 1a16f5f7b3e..a1c72071d5e 100644
--- a/settings/l10n/ta_LK.json
+++ b/settings/l10n/ta_LK.json
@@ -1,8 +1,8 @@
{ "translations": {
"External Storage" : "வெளி சேமிப்பு",
- "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
"Language changed" : "மொழி மாற்றப்பட்டது",
"Invalid request" : "செல்லுபடியற்ற வேண்டுகோள்",
+ "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
"Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது",
"Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது",
"Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது",
@@ -24,7 +24,6 @@
"More" : "மேலதிக",
"Less" : "குறைவான",
"by" : "மூலம்",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "நீங்கள் <strong>%s</strong> இலுள்ள <strong>%s</strong>பயன்படுத்தியுள்ளீர்கள்",
"Password" : "கடவுச்சொல்",
"Unable to change your password" : "உங்களுடைய கடவுச்சொல்லை மாற்றமுடியாது",
"Current password" : "தற்போதைய கடவுச்சொல்",
diff --git a/settings/l10n/th_TH.js b/settings/l10n/th_TH.js
index f5fa8a547d0..f8cf273c1f0 100644
--- a/settings/l10n/th_TH.js
+++ b/settings/l10n/th_TH.js
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "เราขอแนะนำให้ติดตั้งแพคเกจที่จำเป็นต้องใช้ในระบบของคุณ ให้การสนับสนุนตำแหน่งที่ตั้งดังต่อไปนี้: %s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "หากการติดตั้งของคุณไม่ได้ติดตั้งในรากของโดเมนและใช้ระบบ cron อาจมีปัญหาเกี่ยวกับการสร้าง URL เพื่อหลีกเลี่ยงปัญหาเหล่านี้โปรดไปตั้งค่า \"overwrite.cli.url\" ในไฟล์ config.php ของคุณไปยังเส้นทาง webroot ของการติดตั้งของคุณ (แนะนำ: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "มันเป็นไปไม่ได้ที่จะดำเนินการ cronjob ผ่านทาง CLI ข้อผิดพลาดทางเทคนิคต่อไปนี้จะปรากฏ:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "การทำธุรกรรมล็อคไฟล์จะใช้ฐานข้อมูลเป็นล็อคแบ็กเอนด์ สำหรับประสิทธิภาพที่ดีที่สุดก็ควรที่จะกำหนดค่า memcache สำหรับล็อค ดูเพิ่มเติมได้จาก <a target=\"_blank\" href=\"%s\">เอกสาร</a>",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "กรุณาตรวจสอบ <a target=\"_blank\" href=\"%s\">คู่มือการติดตั้ง</a> และตรวจสอบข้อผิดพลาดหรือคำเตือนใน <a href=\"#log-section\">บันทึก</a>",
"All checks passed." : "ผ่านการตรวจสอบทั้งหมด",
"Open documentation" : "เปิดเอกสาร",
@@ -231,7 +230,6 @@ OC.L10N.register(
"iOS app" : "แอพฯ IOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "หากคุณต้องการที่จะสนับสนุนโครงการ <a href=\"https://owncloud.org/contribute\" target=\"_blank\" rel=\"noreferrer\">เข้าร่วมการพัฒนา</a> หรือ <a href=\"https://owncloud.org/promote\" target=\"_blank\" rel=\"noreferrer\">กระจายข่าวสาร</a>!\n\t\t",
"Show First Run Wizard again" : "แสดงหน้าจอวิซาร์ดนำทางครั้งแรกอีกครั้ง",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "คุณได้ใช้งานไปแล้ว <strong>%s</strong> จากจำนวนที่สามารถใช้ได้ <strong>%s</strong>",
"Password" : "รหัสผ่าน",
"Unable to change your password" : "ไม่สามารถเปลี่ยนรหัสผ่านของคุณได้",
"Current password" : "รหัสผ่านปัจจุบัน",
diff --git a/settings/l10n/th_TH.json b/settings/l10n/th_TH.json
index 90eaa41ea93..a606a62f471 100644
--- a/settings/l10n/th_TH.json
+++ b/settings/l10n/th_TH.json
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "เราขอแนะนำให้ติดตั้งแพคเกจที่จำเป็นต้องใช้ในระบบของคุณ ให้การสนับสนุนตำแหน่งที่ตั้งดังต่อไปนี้: %s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "หากการติดตั้งของคุณไม่ได้ติดตั้งในรากของโดเมนและใช้ระบบ cron อาจมีปัญหาเกี่ยวกับการสร้าง URL เพื่อหลีกเลี่ยงปัญหาเหล่านี้โปรดไปตั้งค่า \"overwrite.cli.url\" ในไฟล์ config.php ของคุณไปยังเส้นทาง webroot ของการติดตั้งของคุณ (แนะนำ: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "มันเป็นไปไม่ได้ที่จะดำเนินการ cronjob ผ่านทาง CLI ข้อผิดพลาดทางเทคนิคต่อไปนี้จะปรากฏ:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "การทำธุรกรรมล็อคไฟล์จะใช้ฐานข้อมูลเป็นล็อคแบ็กเอนด์ สำหรับประสิทธิภาพที่ดีที่สุดก็ควรที่จะกำหนดค่า memcache สำหรับล็อค ดูเพิ่มเติมได้จาก <a target=\"_blank\" href=\"%s\">เอกสาร</a>",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "กรุณาตรวจสอบ <a target=\"_blank\" href=\"%s\">คู่มือการติดตั้ง</a> และตรวจสอบข้อผิดพลาดหรือคำเตือนใน <a href=\"#log-section\">บันทึก</a>",
"All checks passed." : "ผ่านการตรวจสอบทั้งหมด",
"Open documentation" : "เปิดเอกสาร",
@@ -229,7 +228,6 @@
"iOS app" : "แอพฯ IOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "หากคุณต้องการที่จะสนับสนุนโครงการ <a href=\"https://owncloud.org/contribute\" target=\"_blank\" rel=\"noreferrer\">เข้าร่วมการพัฒนา</a> หรือ <a href=\"https://owncloud.org/promote\" target=\"_blank\" rel=\"noreferrer\">กระจายข่าวสาร</a>!\n\t\t",
"Show First Run Wizard again" : "แสดงหน้าจอวิซาร์ดนำทางครั้งแรกอีกครั้ง",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "คุณได้ใช้งานไปแล้ว <strong>%s</strong> จากจำนวนที่สามารถใช้ได้ <strong>%s</strong>",
"Password" : "รหัสผ่าน",
"Unable to change your password" : "ไม่สามารถเปลี่ยนรหัสผ่านของคุณได้",
"Current password" : "รหัสผ่านปัจจุบัน",
diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js
index eb003a1f2f7..b138ce2ecd7 100644
--- a/settings/l10n/tr.js
+++ b/settings/l10n/tr.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "Günlük",
"Tips & tricks" : "İpuçları ve hileler",
"Updates" : "Güncellemeler",
- "Authentication error" : "Kimlik doğrulama hatası",
- "Your full name has been changed." : "Tam adınız değiştirildi.",
- "Unable to change full name" : "Tam adınız değiştirilirken hata",
"Couldn't remove app." : "Uygulama kaldırılamadı.",
"Language changed" : "Dil değiştirildi",
"Invalid request" : "Geçersiz istek",
+ "Authentication error" : "Kimlik doğrulama hatası",
"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",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "Geçersiz kullanıcı",
"Unable to change mail address" : "Posta adresini değiştirme başarısız",
"Email saved" : "E-posta kaydedildi",
+ "Your full name has been changed." : "Tam adınız değiştirildi.",
+ "Unable to change full name" : "Tam adınız değiştirilirken hata",
"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?",
"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",
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Şu dillerden birini desteklemesi için sisteminize gerekli paketleri kurmanızı şiddetle tavsiye ederiz: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Eğer kurulumunuz alan adının köküne yapılmamışsa ve sistem cron'u kullanıyorsa, URL oluşturma ile ilgili sorunlar oluşabilir. Bu sorunların önüne geçmek için, kurulumunuzun web kök yolundaki config.php dosyasında \"overwrite.cli.url\" seçeneğini ayarlayın (Önerilen: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Bu CLI ile cronjobı çalıştırmak mümkün değildi. Aşağıdaki teknik hatalar ortaya çıkmıştır:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "İşlemsel dosya kilidi, kilitleme arkaucu olarak veritabanını kullanıyor. En iyi performans için kilitleme adına memcache yapılandırılması önerilir. Daha fazla bilgi için <a target=\"_blank\" href=\"%s\">belgelendirmeye ↗</a> bakın.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lütfen <a target=\"_blank\" href=\"%s\">kurulum rehberlerini ↗</a> iki kez denetleyip <a href=\"#log-section\">günlük</a> içerisindeki hata ve uyarılara bakın.",
"All checks passed." : "Tüm kontroller geçildi.",
"Open documentation" : "Belgelendirmeyi aç",
@@ -231,7 +230,6 @@ OC.L10N.register(
"iOS app" : "iOS uygulaması",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Projeyi desteklemek istiyorsanız\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">geliştirilmesine katılın</a>\n\t\tveya\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">duyurun</a>!",
"Show First Run Wizard again" : "İlk Çalıştırma Sihirbazı'nı yeniden göster",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Kullandığınız: <strong>%s</strong>. Kullanılabilir alan: <strong>%s</strong>",
"Password" : "Parola",
"Unable to change your password" : "Parolanız değiştirilemiyor",
"Current password" : "Mevcut parola",
diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json
index c96a4f566c4..f079a486285 100644
--- a/settings/l10n/tr.json
+++ b/settings/l10n/tr.json
@@ -10,12 +10,10 @@
"Log" : "Günlük",
"Tips & tricks" : "İpuçları ve hileler",
"Updates" : "Güncellemeler",
- "Authentication error" : "Kimlik doğrulama hatası",
- "Your full name has been changed." : "Tam adınız değiştirildi.",
- "Unable to change full name" : "Tam adınız değiştirilirken hata",
"Couldn't remove app." : "Uygulama kaldırılamadı.",
"Language changed" : "Dil değiştirildi",
"Invalid request" : "Geçersiz istek",
+ "Authentication error" : "Kimlik doğrulama hatası",
"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",
@@ -51,6 +49,8 @@
"Invalid user" : "Geçersiz kullanıcı",
"Unable to change mail address" : "Posta adresini değiştirme başarısız",
"Email saved" : "E-posta kaydedildi",
+ "Your full name has been changed." : "Tam adınız değiştirildi.",
+ "Unable to change full name" : "Tam adınız değiştirilirken hata",
"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?",
"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",
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Şu dillerden birini desteklemesi için sisteminize gerekli paketleri kurmanızı şiddetle tavsiye ederiz: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Eğer kurulumunuz alan adının köküne yapılmamışsa ve sistem cron'u kullanıyorsa, URL oluşturma ile ilgili sorunlar oluşabilir. Bu sorunların önüne geçmek için, kurulumunuzun web kök yolundaki config.php dosyasında \"overwrite.cli.url\" seçeneğini ayarlayın (Önerilen: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Bu CLI ile cronjobı çalıştırmak mümkün değildi. Aşağıdaki teknik hatalar ortaya çıkmıştır:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "İşlemsel dosya kilidi, kilitleme arkaucu olarak veritabanını kullanıyor. En iyi performans için kilitleme adına memcache yapılandırılması önerilir. Daha fazla bilgi için <a target=\"_blank\" href=\"%s\">belgelendirmeye ↗</a> bakın.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lütfen <a target=\"_blank\" href=\"%s\">kurulum rehberlerini ↗</a> iki kez denetleyip <a href=\"#log-section\">günlük</a> içerisindeki hata ve uyarılara bakın.",
"All checks passed." : "Tüm kontroller geçildi.",
"Open documentation" : "Belgelendirmeyi aç",
@@ -229,7 +228,6 @@
"iOS app" : "iOS uygulaması",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Projeyi desteklemek istiyorsanız\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">geliştirilmesine katılın</a>\n\t\tveya\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">duyurun</a>!",
"Show First Run Wizard again" : "İlk Çalıştırma Sihirbazı'nı yeniden göster",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Kullandığınız: <strong>%s</strong>. Kullanılabilir alan: <strong>%s</strong>",
"Password" : "Parola",
"Unable to change your password" : "Parolanız değiştirilemiyor",
"Current password" : "Mevcut parola",
diff --git a/settings/l10n/ug.js b/settings/l10n/ug.js
index fafe6cf559d..0182ed481c6 100644
--- a/settings/l10n/ug.js
+++ b/settings/l10n/ug.js
@@ -3,9 +3,9 @@ OC.L10N.register(
{
"Sharing" : "ھەمبەھىر",
"Log" : "خاتىرە",
- "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
"Language changed" : "تىل ئۆزگەردى",
"Invalid request" : "ئىناۋەتسىز ئىلتىماس",
+ "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
"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 گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ",
diff --git a/settings/l10n/ug.json b/settings/l10n/ug.json
index f81f82ab704..30a13dd57f7 100644
--- a/settings/l10n/ug.json
+++ b/settings/l10n/ug.json
@@ -1,9 +1,9 @@
{ "translations": {
"Sharing" : "ھەمبەھىر",
"Log" : "خاتىرە",
- "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
"Language changed" : "تىل ئۆزگەردى",
"Invalid request" : "ئىناۋەتسىز ئىلتىماس",
+ "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
"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 گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ",
diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js
index 2775efd8fa9..f9e542a9466 100644
--- a/settings/l10n/uk.js
+++ b/settings/l10n/uk.js
@@ -11,12 +11,10 @@ OC.L10N.register(
"Log" : "Журнал",
"Tips & tricks" : "Поради і трюки",
"Updates" : "Оновлення",
- "Authentication error" : "Помилка автентифікації",
- "Your full name has been changed." : "Ваше повне ім'я було змінено",
- "Unable to change full name" : "Неможливо змінити повне ім'я",
"Couldn't remove app." : "Неможливо видалити додаток.",
"Language changed" : "Мову змінено",
"Invalid request" : "Некоректний запит",
+ "Authentication error" : "Помилка автентифікації",
"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",
@@ -52,6 +50,8 @@ OC.L10N.register(
"Invalid user" : "Неправильний користувач",
"Unable to change mail address" : "Неможливо поміняти email адресу",
"Email saved" : "Адресу збережено",
+ "Your full name has been changed." : "Ваше повне ім'я було змінено",
+ "Unable to change full name" : "Неможливо змінити повне ім'я",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ви дійсно бажаєте додати \"{domain}\" як довірений домен?",
"Add trusted domain" : "Додати довірений домен",
"Migration in progress. Please wait until the migration is finished" : "Міграція триває. Будь ласка, зачекайте доки процес міграції завершиться",
@@ -210,7 +210,6 @@ OC.L10N.register(
"iOS app" : "iOS додаток",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Якщо Ви хочете підтримати проект\n⇥⇥ <a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\"> спільна розробка </a> \n⇥⇥або\n⇥ ⇥ <a href=\"https://owncloud.org/promote\"\n ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\"> повідомити у світі </a> !",
"Show First Run Wizard again" : "Показувати Майстер Налаштувань знову",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ви використали <strong>%s</strong> із доступних <strong>%s</strong>",
"Password" : "Пароль",
"Unable to change your password" : "Не вдалося змінити Ваш пароль",
"Current password" : "Поточний пароль",
diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json
index d2a594fffc0..a16133952f0 100644
--- a/settings/l10n/uk.json
+++ b/settings/l10n/uk.json
@@ -9,12 +9,10 @@
"Log" : "Журнал",
"Tips & tricks" : "Поради і трюки",
"Updates" : "Оновлення",
- "Authentication error" : "Помилка автентифікації",
- "Your full name has been changed." : "Ваше повне ім'я було змінено",
- "Unable to change full name" : "Неможливо змінити повне ім'я",
"Couldn't remove app." : "Неможливо видалити додаток.",
"Language changed" : "Мову змінено",
"Invalid request" : "Некоректний запит",
+ "Authentication error" : "Помилка автентифікації",
"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",
@@ -50,6 +48,8 @@
"Invalid user" : "Неправильний користувач",
"Unable to change mail address" : "Неможливо поміняти email адресу",
"Email saved" : "Адресу збережено",
+ "Your full name has been changed." : "Ваше повне ім'я було змінено",
+ "Unable to change full name" : "Неможливо змінити повне ім'я",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ви дійсно бажаєте додати \"{domain}\" як довірений домен?",
"Add trusted domain" : "Додати довірений домен",
"Migration in progress. Please wait until the migration is finished" : "Міграція триває. Будь ласка, зачекайте доки процес міграції завершиться",
@@ -208,7 +208,6 @@
"iOS app" : "iOS додаток",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Якщо Ви хочете підтримати проект\n⇥⇥ <a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\"> спільна розробка </a> \n⇥⇥або\n⇥ ⇥ <a href=\"https://owncloud.org/promote\"\n ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\"> повідомити у світі </a> !",
"Show First Run Wizard again" : "Показувати Майстер Налаштувань знову",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ви використали <strong>%s</strong> із доступних <strong>%s</strong>",
"Password" : "Пароль",
"Unable to change your password" : "Не вдалося змінити Ваш пароль",
"Current password" : "Поточний пароль",
diff --git a/settings/l10n/vi.js b/settings/l10n/vi.js
index c451a11e489..3fb0c657159 100644
--- a/settings/l10n/vi.js
+++ b/settings/l10n/vi.js
@@ -6,11 +6,9 @@ OC.L10N.register(
"External Storage" : "Lưu trữ ngoài",
"Cron" : "Cron",
"Log" : "Log",
- "Authentication error" : "Lỗi xác thực",
- "Your full name has been changed." : "Họ và tên đã được thay đổi.",
- "Unable to change full name" : "Họ và tên không thể đổi ",
"Language changed" : "Ngôn ngữ đã được thay đổi",
"Invalid request" : "Yêu cầu không hợp lệ",
+ "Authentication error" : "Lỗi xác thực",
"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",
@@ -19,6 +17,8 @@ OC.L10N.register(
"Saved" : "Đã lưu",
"Email sent" : "Email đã được gửi",
"Email saved" : "Lưu email",
+ "Your full name has been changed." : "Họ và tên đã được thay đổi.",
+ "Unable to change full name" : "Họ và tên không thể đổi ",
"All" : "Tất cả",
"Please wait...." : "Xin hãy đợi...",
"Disable" : "Tắt",
@@ -49,7 +49,6 @@ OC.L10N.register(
"Forum" : "Diễn đàn",
"Get the apps to sync your files" : "Nhận ứng dụng để đồng bộ file của bạn",
"Show First Run Wizard again" : "Hiện lại việc chạy đồ thuật khởi đầu",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Bạn đã sử dụng <strong>%s </ strong> có sẵn <strong> %s </ strong>",
"Password" : "Mật khẩu",
"Unable to change your password" : "Không thể đổi mật khẩu",
"Current password" : "Mật khẩu cũ",
diff --git a/settings/l10n/vi.json b/settings/l10n/vi.json
index a86e778713b..67c65407b06 100644
--- a/settings/l10n/vi.json
+++ b/settings/l10n/vi.json
@@ -4,11 +4,9 @@
"External Storage" : "Lưu trữ ngoài",
"Cron" : "Cron",
"Log" : "Log",
- "Authentication error" : "Lỗi xác thực",
- "Your full name has been changed." : "Họ và tên đã được thay đổi.",
- "Unable to change full name" : "Họ và tên không thể đổi ",
"Language changed" : "Ngôn ngữ đã được thay đổi",
"Invalid request" : "Yêu cầu không hợp lệ",
+ "Authentication error" : "Lỗi xác thực",
"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",
@@ -17,6 +15,8 @@
"Saved" : "Đã lưu",
"Email sent" : "Email đã được gửi",
"Email saved" : "Lưu email",
+ "Your full name has been changed." : "Họ và tên đã được thay đổi.",
+ "Unable to change full name" : "Họ và tên không thể đổi ",
"All" : "Tất cả",
"Please wait...." : "Xin hãy đợi...",
"Disable" : "Tắt",
@@ -47,7 +47,6 @@
"Forum" : "Diễn đàn",
"Get the apps to sync your files" : "Nhận ứng dụng để đồng bộ file của bạn",
"Show First Run Wizard again" : "Hiện lại việc chạy đồ thuật khởi đầu",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Bạn đã sử dụng <strong>%s </ strong> có sẵn <strong> %s </ strong>",
"Password" : "Mật khẩu",
"Unable to change your password" : "Không thể đổi mật khẩu",
"Current password" : "Mật khẩu cũ",
diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js
index 624858c8429..8ee804c190b 100644
--- a/settings/l10n/zh_CN.js
+++ b/settings/l10n/zh_CN.js
@@ -135,7 +135,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我们强烈建议安装在系统上所需的软件包支持以下区域设置之一: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果你不是安装在网域根目录而且又使用系统定时计划任务,那么可以导致 URL 链接生成问题。为了避免这些问题,请在你的 Config.php 文件中设置 \\\"overwrite.cli.url\\\" 选项为 webroot 安装根目录 (建议: \\\"%s\\\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "由于下面的错误,无法通过 CLI 执行定时计划任务:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "事务文件锁定正在使用的数据库作为锁定后端,为获得最佳的性能建议配置的 memcache 用来锁定。请参阅<a target=\"_blank\" href=\"%s\">文档↗</a>了解详情。",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "请点击检查 <a target=\\\"_blank\\\" href=\\\"%s\\\"> 安装向导 ↗</a>, 点击 <a href=\\\"#log-section\\\"> 日志 </a>查看详细错误和警告。",
"All checks passed." : "所有检查已通过。",
"Open documentation" : "打开文档",
@@ -226,7 +225,6 @@ OC.L10N.register(
"iOS app" : "iOS 应用",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "想支持ownCloud项目?请\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">参加开发</a>\n\t\t或者\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">帮助推广</a>吧!",
"Show First Run Wizard again" : "再次显示首次运行向导",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "你已使用 <strong>%s</strong>,有效空间 <strong>%s</strong>",
"Password" : "密码",
"Unable to change your password" : "无法修改密码",
"Current password" : "当前密码",
diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json
index f927bb35a40..1ea648f0988 100644
--- a/settings/l10n/zh_CN.json
+++ b/settings/l10n/zh_CN.json
@@ -133,7 +133,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我们强烈建议安装在系统上所需的软件包支持以下区域设置之一: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果你不是安装在网域根目录而且又使用系统定时计划任务,那么可以导致 URL 链接生成问题。为了避免这些问题,请在你的 Config.php 文件中设置 \\\"overwrite.cli.url\\\" 选项为 webroot 安装根目录 (建议: \\\"%s\\\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "由于下面的错误,无法通过 CLI 执行定时计划任务:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "事务文件锁定正在使用的数据库作为锁定后端,为获得最佳的性能建议配置的 memcache 用来锁定。请参阅<a target=\"_blank\" href=\"%s\">文档↗</a>了解详情。",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "请点击检查 <a target=\\\"_blank\\\" href=\\\"%s\\\"> 安装向导 ↗</a>, 点击 <a href=\\\"#log-section\\\"> 日志 </a>查看详细错误和警告。",
"All checks passed." : "所有检查已通过。",
"Open documentation" : "打开文档",
@@ -224,7 +223,6 @@
"iOS app" : "iOS 应用",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "想支持ownCloud项目?请\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">参加开发</a>\n\t\t或者\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">帮助推广</a>吧!",
"Show First Run Wizard again" : "再次显示首次运行向导",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "你已使用 <strong>%s</strong>,有效空间 <strong>%s</strong>",
"Password" : "密码",
"Unable to change your password" : "无法修改密码",
"Current password" : "当前密码",
diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js
index e863891e042..c3599c3d4e7 100644
--- a/settings/l10n/zh_TW.js
+++ b/settings/l10n/zh_TW.js
@@ -12,12 +12,10 @@ OC.L10N.register(
"Log" : "紀錄檔",
"Tips & tricks" : "技巧 & 提示",
"Updates" : "更新",
- "Authentication error" : "認證錯誤",
- "Your full name has been changed." : "您的全名已變更。",
- "Unable to change full name" : "無法變更全名",
"Couldn't remove app." : "無法移除應用程式",
"Language changed" : "語言已變更",
"Invalid request" : "無效請求",
+ "Authentication error" : "認證錯誤",
"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 錯誤",
@@ -53,6 +51,8 @@ OC.L10N.register(
"Invalid user" : "無效的使用者",
"Unable to change mail address" : "無法更改 email 地址",
"Email saved" : "Email 已儲存",
+ "Your full name has been changed." : "您的全名已變更。",
+ "Unable to change full name" : "無法變更全名",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "您確定要新增 \"{domain}' 為信任的網域?",
"Add trusted domain" : "新增信任的網域",
"Migration in progress. Please wait until the migration is finished" : "資料搬移中,請耐心等候直到資料搬移結束",
@@ -133,7 +133,6 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我們強烈建議在您的系統上安裝必要的套件來支援以下的語系: %s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果您不是使用root來安裝,而是透過系統自定義的排程的話,URL的生成可能會有問題,為了避免這樣的狀況,請您在config.php檔案裡設置 \"overwrite.cli.url\",設定您安裝的webroot的路徑 (建議值: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : " 不可能透過CLI來執行cronjob,發生以下技術性錯誤:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "事務型文件鎖定目前是使用後端資料庫的鎖定功能,為了達到最好的效能,建議鎖定功能使用記憶體快取,請看<a target=\"_blank\" href=\"%s\">文件手冊 ↗</a> 來獲得更多的資訊。",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "請再次檢查 <a target=\"_blank\" href=\"%s\">安裝導引手冊 ↗</a>,並且確定沒有任何的錯誤或是警告訊息在 <a href=\"#log-section\">記錄檔</a>。",
"All checks passed." : "通過所有的檢查。",
"Open documentation" : "開啟文件",
@@ -228,7 +227,6 @@ OC.L10N.register(
"iOS app" : "iOS 應用程式",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "若您想支援這個計畫\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">加入開發者</a>\n\t\t或\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">替我們宣傳</a>!",
"Show First Run Wizard again" : "再次顯示首次使用精靈",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "您已經使用了 <strong>%s</strong> ,總共可用空間為 <strong>%s</strong>",
"Password" : "密碼",
"Unable to change your password" : "無法變更您的密碼",
"Current password" : "目前密碼",
diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json
index 312d93ea258..bf026bf2628 100644
--- a/settings/l10n/zh_TW.json
+++ b/settings/l10n/zh_TW.json
@@ -10,12 +10,10 @@
"Log" : "紀錄檔",
"Tips & tricks" : "技巧 & 提示",
"Updates" : "更新",
- "Authentication error" : "認證錯誤",
- "Your full name has been changed." : "您的全名已變更。",
- "Unable to change full name" : "無法變更全名",
"Couldn't remove app." : "無法移除應用程式",
"Language changed" : "語言已變更",
"Invalid request" : "無效請求",
+ "Authentication error" : "認證錯誤",
"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 錯誤",
@@ -51,6 +49,8 @@
"Invalid user" : "無效的使用者",
"Unable to change mail address" : "無法更改 email 地址",
"Email saved" : "Email 已儲存",
+ "Your full name has been changed." : "您的全名已變更。",
+ "Unable to change full name" : "無法變更全名",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "您確定要新增 \"{domain}' 為信任的網域?",
"Add trusted domain" : "新增信任的網域",
"Migration in progress. Please wait until the migration is finished" : "資料搬移中,請耐心等候直到資料搬移結束",
@@ -131,7 +131,6 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我們強烈建議在您的系統上安裝必要的套件來支援以下的語系: %s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果您不是使用root來安裝,而是透過系統自定義的排程的話,URL的生成可能會有問題,為了避免這樣的狀況,請您在config.php檔案裡設置 \"overwrite.cli.url\",設定您安裝的webroot的路徑 (建議值: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : " 不可能透過CLI來執行cronjob,發生以下技術性錯誤:",
- "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "事務型文件鎖定目前是使用後端資料庫的鎖定功能,為了達到最好的效能,建議鎖定功能使用記憶體快取,請看<a target=\"_blank\" href=\"%s\">文件手冊 ↗</a> 來獲得更多的資訊。",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "請再次檢查 <a target=\"_blank\" href=\"%s\">安裝導引手冊 ↗</a>,並且確定沒有任何的錯誤或是警告訊息在 <a href=\"#log-section\">記錄檔</a>。",
"All checks passed." : "通過所有的檢查。",
"Open documentation" : "開啟文件",
@@ -226,7 +225,6 @@
"iOS app" : "iOS 應用程式",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "若您想支援這個計畫\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">加入開發者</a>\n\t\t或\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">替我們宣傳</a>!",
"Show First Run Wizard again" : "再次顯示首次使用精靈",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "您已經使用了 <strong>%s</strong> ,總共可用空間為 <strong>%s</strong>",
"Password" : "密碼",
"Unable to change your password" : "無法變更您的密碼",
"Current password" : "目前密碼",
diff --git a/settings/templates/admin.php b/settings/templates/admin.php
index f3de51a23c3..2b813257a77 100644
--- a/settings/templates/admin.php
+++ b/settings/templates/admin.php
@@ -181,13 +181,7 @@ if ($_['cronErrors']) {
<div class="loading"></div>
<ul class="errors hidden"></ul>
<ul class="warnings hidden"></ul>
- <ul class="info hidden">
- <?php if ($_['fileLockingType'] === 'db'):?>
- <li>
- <?php print_unescaped($l->t('Transactional file locking is using the database as locking backend, for best performance it\'s advised to configure a memcache for locking. See the <a target="_blank" href="%s">documentation ↗</a> for more information.', link_to_docs('admin-transactional-locking'))); ?>
- </li>
- <?php endif; ?>
- </ul>
+ <ul class="info hidden"></ul>
<p class="hint hidden">
<?php print_unescaped($l->t('Please double check the <a target="_blank" href="%s">installation guides ↗</a>, and check for any errors or warnings in the <a href="#log-section">log</a>.', link_to_docs('admin-install'))); ?>
</p>
diff --git a/settings/templates/email.new_user.php b/settings/templates/email.new_user.php
index 74149632cb8..8b13ac753eb 100644
--- a/settings/templates/email.new_user.php
+++ b/settings/templates/email.new_user.php
@@ -4,7 +4,7 @@
<tr>
<td bgcolor="<?php p($theme->getMailHeaderColor());?>" width="20px">&nbsp;</td>
<td bgcolor="<?php p($theme->getMailHeaderColor());?>">
- <img src="<?php p(OC_Helper::makeURLAbsolute(image_path('', 'logo-mail.gif'))); ?>" alt="<?php p($theme->getName()); ?>"/>
+ <img src="<?php p(\OC::$server->getURLGenerator()->getAbsoluteURL(image_path('', 'logo-mail.gif'))); ?>" alt="<?php p($theme->getName()); ?>"/>
</td>
</tr>
<tr><td colspan="2">&nbsp;</td></tr>
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index 09194ea3e39..96d26a933be 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -58,7 +58,7 @@
<div style="width:<?php p($_['usage_relative']);?>%"
<?php if($_['usage_relative'] > 80): ?> class="quota-warning" <?php endif; ?>>
<p id="quotatext">
- <?php print_unescaped($l->t('You have used <strong>%s</strong> of the available <strong>%s</strong>',
+ <?php print_unescaped($l->t('You are using <strong>%s</strong> of <strong>%s</strong>',
array($_['usage'], $_['total_space'])));?>
</p>
</div>
@@ -149,7 +149,7 @@ if($_['passwordChangeSupported']) {
</div>
<?php if ($_['enableAvatars']): ?>
-<form id="avatar" class="section" method="post" action="<?php p(\OC_Helper::linkToRoute('core.avatar.postAvatar')); ?>">
+<form id="avatar" class="section" method="post" action="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.postAvatar')); ?>">
<h2><?php p($l->t('Profile picture')); ?></h2>
<div id="displayavatar">
<div class="avatardiv"></div><br>
diff --git a/settings/users.php b/settings/users.php
index ccf1bcd9e1a..0e9823e73e3 100644
--- a/settings/users.php
+++ b/settings/users.php
@@ -37,7 +37,7 @@ OC_Util::checkSubAdminUser();
\OC::$server->getNavigationManager()->setActiveEntry('core_users');
-$userManager = \OC_User::getManager();
+$userManager = \OC::$server->getUserManager();
$groupManager = \OC_Group::getManager();
// Set the sort option: SORT_USERCOUNT or SORT_GROUPNAME
diff --git a/status.php b/status.php
index f59dc16b6a2..65418336e26 100644
--- a/status.php
+++ b/status.php
@@ -36,7 +36,7 @@ try {
$values=array(
'installed'=>$installed,
'maintenance' => $maintenance,
- 'version'=>implode('.', OC_Util::getVersion()),
+ 'version'=>implode('.', \OCP\Util::getVersion()),
'versionstring'=>OC_Util::getVersionString(),
'edition'=>OC_Util::getEditionString());
if (OC::$CLI) {
diff --git a/tests/core/avatar/avatarcontrollertest.php b/tests/core/avatar/avatarcontrollertest.php
index a113add72b9..7f69ba0aadb 100644
--- a/tests/core/avatar/avatarcontrollertest.php
+++ b/tests/core/avatar/avatarcontrollertest.php
@@ -26,8 +26,10 @@ use OCP\AppFramework\IAppContainer;
use OCP\AppFramework\Http;
use OCP\Files\Folder;
use OCP\Files\File;
+use OCP\Files\NotFoundException;
use OCP\IUser;
use OCP\IAvatar;
+use Punic\Exception;
use Test\Traits\UserTrait;
/**
@@ -56,6 +58,8 @@ class AvatarControllerTest extends \Test\TestCase {
private $avatarMock;
/** @var IUser */
private $userMock;
+ /** @var File */
+ private $avatarFile;
protected function setUp() {
parent::setUp();
@@ -88,6 +92,10 @@ class AvatarControllerTest extends \Test\TestCase {
->willReturnMap([['userId', $this->userMock]]);
$this->container['UserSession']->method('getUser')->willReturn($this->userMock);
+ $this->avatarFile = $this->getMock('OCP\Files\File');
+ $this->avatarFile->method('getContnet')->willReturn('image data');
+ $this->avatarFile->method('getMimeType')->willReturn('image type');
+ $this->avatarFile->method('getEtag')->willReturn('my etag');
}
public function tearDown() {
@@ -100,6 +108,7 @@ class AvatarControllerTest extends \Test\TestCase {
*/
public function testGetAvatarNoAvatar() {
$this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock);
+ $this->avatarMock->method('getFile')->will($this->throwException(new NotFoundException()));
$response = $this->avatarController->getAvatar('userId', 32);
//Comment out until JS is fixed
@@ -112,12 +121,8 @@ class AvatarControllerTest extends \Test\TestCase {
* Fetch the user's avatar
*/
public function testGetAvatar() {
- $image = $this->getMock('OCP\IImage');
- $image->method('data')->willReturn('image data');
- $image->method('mimeType')->willReturn('image type');
-
- $this->avatarMock->method('get')->willReturn($image);
- $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock);
+ $this->avatarMock->method('getFile')->willReturn($this->avatarFile);
+ $this->container['AvatarManager']->method('getAvatar')->with('userId')->willReturn($this->avatarMock);
$response = $this->avatarController->getAvatar('userId', 32);
@@ -125,17 +130,19 @@ class AvatarControllerTest extends \Test\TestCase {
$this->assertArrayHasKey('Content-Type', $response->getHeaders());
$this->assertEquals('image type', $response->getHeaders()['Content-Type']);
- $this->assertEquals(crc32('image data'), $response->getEtag());
+ $this->assertEquals('my etag', $response->getEtag());
}
/**
* Fetch the avatar of a non-existing user
*/
public function testGetAvatarNoUser() {
- $this->avatarMock->method('get')->willReturn(null);
- $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock);
+ $this->container['AvatarManager']
+ ->method('getAvatar')
+ ->with('userDoesNotExist')
+ ->will($this->throwException(new \Exception('user does not exist')));
- $response = $this->avatarController->getAvatar('userDoesnotexist', 32);
+ $response = $this->avatarController->getAvatar('userDoesNotExist', 32);
//Comment out until JS is fixed
//$this->assertEquals(Http::STATUS_NOT_FOUND, $response->getStatus());
@@ -148,8 +155,9 @@ class AvatarControllerTest extends \Test\TestCase {
*/
public function testGetAvatarSize() {
$this->avatarMock->expects($this->once())
- ->method('get')
- ->with($this->equalTo(32));
+ ->method('getFile')
+ ->with($this->equalTo(32))
+ ->willReturn($this->avatarFile);
$this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock);
@@ -161,8 +169,9 @@ class AvatarControllerTest extends \Test\TestCase {
*/
public function testGetAvatarSizeMin() {
$this->avatarMock->expects($this->once())
- ->method('get')
- ->with($this->equalTo(64));
+ ->method('getFile')
+ ->with($this->equalTo(64))
+ ->willReturn($this->avatarFile);
$this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock);
@@ -174,8 +183,9 @@ class AvatarControllerTest extends \Test\TestCase {
*/
public function testGetAvatarSizeMax() {
$this->avatarMock->expects($this->once())
- ->method('get')
- ->with($this->equalTo(2048));
+ ->method('getFile')
+ ->with($this->equalTo(2048))
+ ->willReturn($this->avatarFile);
$this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock);
diff --git a/tests/lib/allconfig.php b/tests/lib/allconfig.php
index ca3dce12eaf..0caf8163cfc 100644
--- a/tests/lib/allconfig.php
+++ b/tests/lib/allconfig.php
@@ -28,7 +28,9 @@ class TestAllConfig extends \Test\TestCase {
$connection = $this->connection;
}
if($systemConfig === null) {
- $systemConfig = $this->getMock('\OC\SystemConfig');
+ $systemConfig = $this->getMockBuilder('\OC\SystemConfig')
+ ->disableOriginalConstructor()
+ ->getMock();
}
return new \OC\AllConfig($systemConfig, $connection);
}
@@ -89,7 +91,9 @@ class TestAllConfig extends \Test\TestCase {
public function testSetUserValueWithPreCondition() {
// mock the check for the database to run the correct SQL statements for each database type
- $systemConfig = $this->getMock('\OC\SystemConfig');
+ $systemConfig = $this->getMockBuilder('\OC\SystemConfig')
+ ->disableOriginalConstructor()
+ ->getMock();
$systemConfig->expects($this->once())
->method('getValue')
->with($this->equalTo('dbtype'),
@@ -133,7 +137,9 @@ class TestAllConfig extends \Test\TestCase {
*/
public function testSetUserValueWithPreConditionFailure() {
// mock the check for the database to run the correct SQL statements for each database type
- $systemConfig = $this->getMock('\OC\SystemConfig');
+ $systemConfig = $this->getMockBuilder('\OC\SystemConfig')
+ ->disableOriginalConstructor()
+ ->getMock();
$systemConfig->expects($this->once())
->method('getValue')
->with($this->equalTo('dbtype'),
@@ -394,7 +400,9 @@ class TestAllConfig extends \Test\TestCase {
public function testGetUsersForUserValue() {
// mock the check for the database to run the correct SQL statements for each database type
- $systemConfig = $this->getMock('\OC\SystemConfig');
+ $systemConfig = $this->getMockBuilder('\OC\SystemConfig')
+ ->disableOriginalConstructor()
+ ->getMock();
$systemConfig->expects($this->once())
->method('getValue')
->with($this->equalTo('dbtype'),
diff --git a/tests/lib/app/dependencyanalyzer.php b/tests/lib/app/dependencyanalyzer.php
index 58f1c0a7a99..fecba518856 100644
--- a/tests/lib/app/dependencyanalyzer.php
+++ b/tests/lib/app/dependencyanalyzer.php
@@ -12,8 +12,9 @@ namespace Test\App;
use OC;
use OC\App\Platform;
use OCP\IL10N;
+use Test\TestCase;
-class DependencyAnalyzer extends \PHPUnit_Framework_TestCase {
+class DependencyAnalyzer extends TestCase {
/** @var Platform */
private $platformMock;
diff --git a/tests/lib/app/infoparser.php b/tests/lib/app/infoparser.php
index fb4ffe8af94..1e5257abec3 100644
--- a/tests/lib/app/infoparser.php
+++ b/tests/lib/app/infoparser.php
@@ -10,8 +10,9 @@
namespace Test\App;
use OC;
+use Test\TestCase;
-class InfoParser extends \PHPUnit_Framework_TestCase {
+class InfoParser extends TestCase {
/**
* @var \OC\App\InfoParser
diff --git a/tests/lib/app/manager.php b/tests/lib/app/manager.php
index 38358fd61cf..a3e55c6b890 100644
--- a/tests/lib/app/manager.php
+++ b/tests/lib/app/manager.php
@@ -11,8 +11,9 @@ namespace Test\App;
use OC\Group\Group;
use OC\User\User;
+use Test\TestCase;
-class Manager extends \PHPUnit_Framework_TestCase {
+class Manager extends TestCase {
/**
* @return \OCP\IAppConfig | \PHPUnit_Framework_MockObject_MockObject
*/
diff --git a/tests/lib/appframework/utility/ControllerMethodReflectorTest.php b/tests/lib/appframework/utility/ControllerMethodReflectorTest.php
index a584b5481ba..c643c362a9c 100644
--- a/tests/lib/appframework/utility/ControllerMethodReflectorTest.php
+++ b/tests/lib/appframework/utility/ControllerMethodReflectorTest.php
@@ -104,6 +104,29 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
$this->assertEquals('int', $reader->getType('test'));
}
+ /**
+ * @Annotation
+ * @param int $a
+ * @param int $b
+ */
+ public function arguments3($a, float $b, int $c, $d){}
+
+ /**
+ * @requires PHP 7
+ */
+ public function testReadTypeIntAnnotationsScalarTypes(){
+ $reader = new ControllerMethodReflector();
+ $reader->reflect(
+ '\OC\AppFramework\Utility\ControllerMethodReflectorTest',
+ 'arguments3'
+ );
+
+ $this->assertEquals('int', $reader->getType('a'));
+ $this->assertEquals('float', $reader->getType('b'));
+ $this->assertEquals('int', $reader->getType('c'));
+ $this->assertNull($reader->getType('d'));
+ }
+
/**
* @Annotation
diff --git a/tests/lib/avatartest.php b/tests/lib/avatartest.php
index 49e8be98c83..3d77a282a7d 100644
--- a/tests/lib/avatartest.php
+++ b/tests/lib/avatartest.php
@@ -60,12 +60,25 @@ class AvatarTest extends \Test\TestCase {
$file = $this->getMock('\OCP\Files\File');
$file->method('getContent')->willReturn($expected->data());
- $this->folder->method('get')->with('avatar.png')->willReturn($file);
+
+ $this->folder->method('get')
+ ->will($this->returnCallback(
+ function($path) use ($file) {
+ if ($path === 'avatar.png') {
+ return $file;
+ } else {
+ throw new \OCP\Files\NotFoundException;
+ }
+ }
+ ));
$newFile = $this->getMock('\OCP\Files\File');
$newFile->expects($this->once())
->method('putContent')
->with($expected2->data());
+ $newFile->expects($this->once())
+ ->method('getContent')
+ ->willReturn($expected2->data());
$this->folder->expects($this->once())
->method('newFile')
->with('avatar.32.png')
diff --git a/tests/lib/backgroundjob/job.php b/tests/lib/backgroundjob/job.php
index fec9b0a792d..912e0e13b57 100644
--- a/tests/lib/backgroundjob/job.php
+++ b/tests/lib/backgroundjob/job.php
@@ -23,10 +23,17 @@ class Job extends \Test\TestCase {
});
$jobList->add($job);
+ $logger = $this->getMockBuilder('OCP\ILogger')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $logger->expects($this->once())
+ ->method('error')
+ ->with('Error while running background job: ');
+
$this->assertCount(1, $jobList->getAll());
- $job->execute($jobList);
+ $job->execute($jobList, $logger);
$this->assertTrue($this->run);
- $this->assertCount(0, $jobList->getAll());
+ $this->assertCount(1, $jobList->getAll());
}
public function markRun() {
diff --git a/tests/lib/backgroundjob/joblist.php b/tests/lib/backgroundjob/joblist.php
index 73b3255c079..c0796d8253a 100644
--- a/tests/lib/backgroundjob/joblist.php
+++ b/tests/lib/backgroundjob/joblist.php
@@ -15,26 +15,21 @@ use Test\TestCase;
* Class JobList
*
* @group DB
- *
* @package Test\BackgroundJob
*/
class JobList extends TestCase {
- /**
- * @var \OC\BackgroundJob\JobList
- */
+ /** @var \OC\BackgroundJob\JobList */
protected $instance;
- /**
- * @var \OCP\IConfig | \PHPUnit_Framework_MockObject_MockObject $config
- */
+ /** @var \OCP\IConfig|\PHPUnit_Framework_MockObject_MockObject */
protected $config;
protected function setUp() {
parent::setUp();
- $conn = \OC::$server->getDatabaseConnection();
+ $connection = \OC::$server->getDatabaseConnection();
$this->config = $this->getMock('\OCP\IConfig');
- $this->instance = new \OC\BackgroundJob\JobList($conn, $this->config);
+ $this->instance = new \OC\BackgroundJob\JobList($connection, $this->config);
}
protected function getAllSorted() {
diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php
index 7aa969df02c..0880e7e1282 100644
--- a/tests/lib/cache/file.php
+++ b/tests/lib/cache/file.php
@@ -71,7 +71,7 @@ class FileCache extends \Test_Cache {
\OC_User::useBackend(new \Test\Util\User\Dummy());
//login
- \OC_User::createUser('test', 'test');
+ \OC::$server->getUserManager()->createUser('test', 'test');
$this->user = \OC_User::getUser();
\OC_User::setUserId('test');
diff --git a/tests/lib/comments/comment.php b/tests/lib/comments/comment.php
new file mode 100644
index 00000000000..02adea8729e
--- /dev/null
+++ b/tests/lib/comments/comment.php
@@ -0,0 +1,112 @@
+<?php
+
+namespace Test\Comments;
+
+use Test\TestCase;
+
+class Test_Comments_Comment extends TestCase
+{
+
+ public function testSettersValidInput() {
+ $comment = new \OC\Comments\Comment();
+
+ $id = 'comment23';
+ $parentId = 'comment11.5';
+ $childrenCount = 6;
+ $message = 'I like to comment comment';
+ $verb = 'comment';
+ $actor = ['type' => 'user', 'id' => 'alice'];
+ $creationDT = new \DateTime();
+ $latestChildDT = new \DateTime('yesterday');
+ $object = ['type' => 'file', 'id' => 'file64'];
+
+ $comment
+ ->setId($id)
+ ->setParentId($parentId)
+ ->setChildrenCount($childrenCount)
+ ->setMessage($message)
+ ->setVerb($verb)
+ ->setActor($actor['type'], $actor['id'])
+ ->setCreationDateTime($creationDT)
+ ->setLatestChildDateTime($latestChildDT)
+ ->setObject($object['type'], $object['id']);
+
+ $this->assertSame($id, $comment->getId());
+ $this->assertSame($parentId, $comment->getParentId());
+ $this->assertSame($childrenCount, $comment->getChildrenCount());
+ $this->assertSame($message, $comment->getMessage());
+ $this->assertSame($verb, $comment->getVerb());
+ $this->assertSame($actor['type'], $comment->getActorType());
+ $this->assertSame($actor['id'], $comment->getActorId());
+ $this->assertSame($creationDT, $comment->getCreationDateTime());
+ $this->assertSame($latestChildDT, $comment->getLatestChildDateTime());
+ $this->assertSame($object['type'], $comment->getObjectType());
+ $this->assertSame($object['id'], $comment->getObjectId());
+ }
+
+ /**
+ * @expectedException \OCP\Comments\IllegalIDChangeException
+ */
+ public function testSetIdIllegalInput() {
+ $comment = new \OC\Comments\Comment();
+
+ $comment->setId('c23');
+ $comment->setId('c17');
+ }
+
+ public function testResetId() {
+ $comment = new \OC\Comments\Comment();
+ $comment->setId('c23');
+ $comment->setId('');
+
+ $this->assertSame('', $comment->getId());
+ }
+
+ public function simpleSetterProvider() {
+ return [
+ ['Id', true],
+ ['ParentId', true],
+ ['Message', true],
+ ['Verb', true],
+ ['Verb', ''],
+ ['ChildrenCount', true],
+ ];
+ }
+
+ /**
+ * @dataProvider simpleSetterProvider
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSimpleSetterInvalidInput($field, $input) {
+ $comment = new \OC\Comments\Comment();
+ $setter = 'set' . $field;
+
+ $comment->$setter($input);
+ }
+
+ public function roleSetterProvider() {
+ return [
+ ['Actor', true, true],
+ ['Actor', 'user', true],
+ ['Actor', true, 'alice'],
+ ['Actor', ' ', ' '],
+ ['Object', true, true],
+ ['Object', 'file', true],
+ ['Object', true, 'file64'],
+ ['Object', ' ', ' '],
+ ];
+ }
+
+ /**
+ * @dataProvider roleSetterProvider
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetRoleInvalidInput($role, $type, $id){
+ $comment = new \OC\Comments\Comment();
+ $setter = 'set' . $role;
+ $comment->$setter($type, $id);
+ }
+
+
+
+}
diff --git a/tests/lib/comments/fakefactory.php b/tests/lib/comments/fakefactory.php
new file mode 100644
index 00000000000..837bcb10585
--- /dev/null
+++ b/tests/lib/comments/fakefactory.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace Test\Comments;
+
+/**
+ * Class FakeFactory
+ */
+class FakeFactory implements \OCP\Comments\ICommentsManagerFactory {
+
+ public function getManager() {
+ return new FakeManager();
+ }
+}
diff --git a/tests/lib/comments/fakemanager.php b/tests/lib/comments/fakemanager.php
new file mode 100644
index 00000000000..e5cf58dda4f
--- /dev/null
+++ b/tests/lib/comments/fakemanager.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Test\Comments;
+
+/**
+ * Class FakeManager
+ */
+class FakeManager implements \OCP\Comments\ICommentsManager {
+
+ public function get($id) {}
+
+ public function getTree($id, $limit = 0, $offset = 0) {}
+
+ public function getForObject(
+ $objectType,
+ $objectId,
+ $limit = 0,
+ $offset = 0,
+ \DateTime $notOlderThan = null
+ ) {}
+
+ public function getNumberOfCommentsForObject($objectType, $objectId) {}
+
+ public function create($actorType, $actorId, $objectType, $objectId) {}
+
+ public function delete($id) {}
+
+ public function save(\OCP\Comments\IComment $comment) {}
+
+ public function deleteReferencesOfActor($actorType, $actorId) {}
+
+ public function deleteCommentsAtObject($objectType, $objectId) {}
+}
diff --git a/tests/lib/comments/manager.php b/tests/lib/comments/manager.php
new file mode 100644
index 00000000000..248de683253
--- /dev/null
+++ b/tests/lib/comments/manager.php
@@ -0,0 +1,564 @@
+<?php
+
+namespace Test\Comments;
+
+use OCP\Comments\ICommentsManager;
+use Test\TestCase;
+
+/**
+ * Class Test_Comments_Manager
+ *
+ * @group DB
+ */
+class Test_Comments_Manager extends TestCase
+{
+
+ public function setUp() {
+ parent::setUp();
+
+ $sql = \OC::$server->getDatabaseConnection()->getDatabasePlatform()->getTruncateTableSQL('`*PREFIX*comments`');
+ \OC::$server->getDatabaseConnection()->prepare($sql)->execute();
+ }
+
+ protected function addDatabaseEntry($parentId, $topmostParentId, $creationDT = null, $latestChildDT = null) {
+ if(is_null($creationDT)) {
+ $creationDT = new \DateTime();
+ }
+ if(is_null($latestChildDT)) {
+ $latestChildDT = new \DateTime('yesterday');
+ }
+
+ $qb = \OC::$server->getDatabaseConnection()->getQueryBuilder();
+ $qb
+ ->insert('comments')
+ ->values([
+ 'parent_id' => $qb->createNamedParameter($parentId),
+ 'topmost_parent_id' => $qb->createNamedParameter($topmostParentId),
+ 'children_count' => $qb->createNamedParameter(2),
+ 'actor_type' => $qb->createNamedParameter('user'),
+ 'actor_id' => $qb->createNamedParameter('alice'),
+ 'message' => $qb->createNamedParameter('nice one'),
+ 'verb' => $qb->createNamedParameter('comment'),
+ 'creation_timestamp' => $qb->createNamedParameter($creationDT, 'datetime'),
+ 'latest_child_timestamp' => $qb->createNamedParameter($latestChildDT, 'datetime'),
+ 'object_type' => $qb->createNamedParameter('file'),
+ 'object_id' => $qb->createNamedParameter('file64'),
+ ])
+ ->execute();
+
+ return $qb->getLastInsertId();
+ }
+
+ protected function getManager() {
+ $factory = new \OC\Comments\ManagerFactory();
+ return $factory->getManager();
+ }
+
+ /**
+ * @expectedException \OCP\Comments\NotFoundException
+ */
+ public function testGetCommentNotFound() {
+ $manager = $this->getManager();
+ $manager->get('22');
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testGetCommentNotFoundInvalidInput() {
+ $manager = $this->getManager();
+ $manager->get('unexisting22');
+ }
+
+ public function testGetComment() {
+ $manager = $this->getManager();
+
+ $creationDT = new \DateTime();
+ $latestChildDT = new \DateTime('yesterday');
+
+ $qb = \OC::$server->getDatabaseConnection()->getQueryBuilder();
+ $qb
+ ->insert('comments')
+ ->values([
+ 'parent_id' => $qb->createNamedParameter('2'),
+ 'topmost_parent_id' => $qb->createNamedParameter('1'),
+ 'children_count' => $qb->createNamedParameter(2),
+ 'actor_type' => $qb->createNamedParameter('user'),
+ 'actor_id' => $qb->createNamedParameter('alice'),
+ 'message' => $qb->createNamedParameter('nice one'),
+ 'verb' => $qb->createNamedParameter('comment'),
+ 'creation_timestamp' => $qb->createNamedParameter($creationDT, 'datetime'),
+ 'latest_child_timestamp' => $qb->createNamedParameter($latestChildDT, 'datetime'),
+ 'object_type' => $qb->createNamedParameter('file'),
+ 'object_id' => $qb->createNamedParameter('file64'),
+ ])
+ ->execute();
+
+ $id = strval($qb->getLastInsertId());
+
+ $comment = $manager->get($id);
+ $this->assertTrue($comment instanceof \OCP\Comments\IComment);
+ $this->assertSame($comment->getId(), $id);
+ $this->assertSame($comment->getParentId(), '2');
+ $this->assertSame($comment->getTopmostParentId(), '1');
+ $this->assertSame($comment->getChildrenCount(), 2);
+ $this->assertSame($comment->getActorType(), 'user');
+ $this->assertSame($comment->getActorId(), 'alice');
+ $this->assertSame($comment->getMessage(), 'nice one');
+ $this->assertSame($comment->getVerb(), 'comment');
+ $this->assertSame($comment->getObjectType(), 'file');
+ $this->assertSame($comment->getObjectId(), 'file64');
+ $this->assertEquals($comment->getCreationDateTime(), $creationDT);
+ $this->assertEquals($comment->getLatestChildDateTime(), $latestChildDT);
+ }
+
+ /**
+ * @expectedException \OCP\Comments\NotFoundException
+ */
+ public function testGetTreeNotFound() {
+ $manager = $this->getManager();
+ $manager->getTree('22');
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testGetTreeNotFoundInvalidIpnut() {
+ $manager = $this->getManager();
+ $manager->getTree('unexisting22');
+ }
+
+ public function testGetTree() {
+ $headId = $this->addDatabaseEntry(0, 0);
+
+ $this->addDatabaseEntry($headId, $headId, new \DateTime('-3 hours'));
+ $this->addDatabaseEntry($headId, $headId, new \DateTime('-2 hours'));
+ $id = $this->addDatabaseEntry($headId, $headId, new \DateTime('-1 hour'));
+
+ $manager = $this->getManager();
+ $tree = $manager->getTree($headId);
+
+ // Verifying the root comment
+ $this->assertTrue(isset($tree['comment']));
+ $this->assertTrue($tree['comment'] instanceof \OCP\Comments\IComment);
+ $this->assertSame($tree['comment']->getId(), strval($headId));
+ $this->assertTrue(isset($tree['replies']));
+ $this->assertSame(count($tree['replies']), 3);
+
+ // one level deep
+ foreach($tree['replies'] as $reply) {
+ $this->assertTrue($reply['comment'] instanceof \OCP\Comments\IComment);
+ $this->assertSame($reply['comment']->getId(), strval($id));
+ $this->assertSame(count($reply['replies']), 0);
+ $id--;
+ }
+ }
+
+ public function testGetTreeNoReplies() {
+ $id = $this->addDatabaseEntry(0, 0);
+
+ $manager = $this->getManager();
+ $tree = $manager->getTree($id);
+
+ // Verifying the root comment
+ $this->assertTrue(isset($tree['comment']));
+ $this->assertTrue($tree['comment'] instanceof \OCP\Comments\IComment);
+ $this->assertSame($tree['comment']->getId(), strval($id));
+ $this->assertTrue(isset($tree['replies']));
+ $this->assertSame(count($tree['replies']), 0);
+
+ // one level deep
+ foreach($tree['replies'] as $reply) {
+ throw new \Exception('This ain`t happen');
+ }
+ }
+
+ public function testGetTreeWithLimitAndOffset() {
+ $headId = $this->addDatabaseEntry(0, 0);
+
+ $this->addDatabaseEntry($headId, $headId, new \DateTime('-3 hours'));
+ $this->addDatabaseEntry($headId, $headId, new \DateTime('-2 hours'));
+ $this->addDatabaseEntry($headId, $headId, new \DateTime('-1 hour'));
+ $idToVerify = $this->addDatabaseEntry($headId, $headId, new \DateTime());
+
+ $manager = $this->getManager();
+
+ for ($offset = 0; $offset < 3; $offset += 2) {
+ $tree = $manager->getTree(strval($headId), 2, $offset);
+
+ // Verifying the root comment
+ $this->assertTrue(isset($tree['comment']));
+ $this->assertTrue($tree['comment'] instanceof \OCP\Comments\IComment);
+ $this->assertSame($tree['comment']->getId(), strval($headId));
+ $this->assertTrue(isset($tree['replies']));
+ $this->assertSame(count($tree['replies']), 2);
+
+ // one level deep
+ foreach ($tree['replies'] as $reply) {
+ $this->assertTrue($reply['comment'] instanceof \OCP\Comments\IComment);
+ $this->assertSame($reply['comment']->getId(), strval($idToVerify));
+ $this->assertSame(count($reply['replies']), 0);
+ $idToVerify--;
+ }
+ }
+ }
+
+ public function testGetForObject() {
+ $this->addDatabaseEntry(0, 0);
+
+ $manager = $this->getManager();
+ $comments = $manager->getForObject('file', 'file64');
+
+ $this->assertTrue(is_array($comments));
+ $this->assertSame(count($comments), 1);
+ $this->assertTrue($comments[0] instanceof \OCP\Comments\IComment);
+ $this->assertSame($comments[0]->getMessage(), 'nice one');
+ }
+
+ public function testGetForObjectWithLimitAndOffset() {
+ $this->addDatabaseEntry(0, 0, new \DateTime('-6 hours'));
+ $this->addDatabaseEntry(0, 0, new \DateTime('-5 hours'));
+ $this->addDatabaseEntry(1, 1, new \DateTime('-4 hours'));
+ $this->addDatabaseEntry(0, 0, new \DateTime('-3 hours'));
+ $this->addDatabaseEntry(2, 2, new \DateTime('-2 hours'));
+ $this->addDatabaseEntry(2, 2, new \DateTime('-1 hours'));
+ $idToVerify = $this->addDatabaseEntry(3, 1, new \DateTime());
+
+ $manager = $this->getManager();
+ $offset = 0;
+ do {
+ $comments = $manager->getForObject('file', 'file64', 3, $offset);
+
+ $this->assertTrue(is_array($comments));
+ foreach($comments as $comment) {
+ $this->assertTrue($comment instanceof \OCP\Comments\IComment);
+ $this->assertSame($comment->getMessage(), 'nice one');
+ $this->assertSame($comment->getId(), strval($idToVerify));
+ $idToVerify--;
+ }
+ $offset += 3;
+ } while(count($comments) > 0);
+ }
+
+ public function testGetForObjectWithDateTimeConstraint() {
+ $this->addDatabaseEntry(0, 0, new \DateTime('-6 hours'));
+ $this->addDatabaseEntry(0, 0, new \DateTime('-5 hours'));
+ $id1 = $this->addDatabaseEntry(0, 0, new \DateTime('-3 hours'));
+ $id2 = $this->addDatabaseEntry(2, 2, new \DateTime('-2 hours'));
+
+ $manager = $this->getManager();
+ $comments = $manager->getForObject('file', 'file64', 0, 0, new \DateTime('-4 hours'));
+
+ $this->assertSame(count($comments), 2);
+ $this->assertSame($comments[0]->getId(), strval($id2));
+ $this->assertSame($comments[1]->getId(), strval($id1));
+ }
+
+ public function testGetForObjectWithLimitAndOffsetAndDateTimeConstraint() {
+ $this->addDatabaseEntry(0, 0, new \DateTime('-7 hours'));
+ $this->addDatabaseEntry(0, 0, new \DateTime('-6 hours'));
+ $this->addDatabaseEntry(1, 1, new \DateTime('-5 hours'));
+ $this->addDatabaseEntry(0, 0, new \DateTime('-3 hours'));
+ $this->addDatabaseEntry(2, 2, new \DateTime('-2 hours'));
+ $this->addDatabaseEntry(2, 2, new \DateTime('-1 hours'));
+ $idToVerify = $this->addDatabaseEntry(3, 1, new \DateTime());
+
+ $manager = $this->getManager();
+ $offset = 0;
+ do {
+ $comments = $manager->getForObject('file', 'file64', 3, $offset, new \DateTime('-4 hours'));
+
+ $this->assertTrue(is_array($comments));
+ foreach($comments as $comment) {
+ $this->assertTrue($comment instanceof \OCP\Comments\IComment);
+ $this->assertSame($comment->getMessage(), 'nice one');
+ $this->assertSame($comment->getId(), strval($idToVerify));
+ $this->assertTrue(intval($comment->getId()) >= 4);
+ $idToVerify--;
+ }
+ $offset += 3;
+ } while(count($comments) > 0);
+ }
+
+ public function testGetNumberOfCommentsForObject() {
+ for($i = 1; $i < 5; $i++) {
+ $this->addDatabaseEntry(0, 0);
+ }
+
+ $manager = $this->getManager();
+
+ $amount = $manager->getNumberOfCommentsForObject('untype', '00');
+ $this->assertSame($amount, 0);
+
+ $amount = $manager->getNumberOfCommentsForObject('file', 'file64');
+ $this->assertSame($amount, 4);
+ }
+
+ public function invalidCreateArgsProvider() {
+ return [
+ ['', 'aId-1', 'oType-1', 'oId-1'],
+ ['aType-1', '', 'oType-1', 'oId-1'],
+ ['aType-1', 'aId-1', '', 'oId-1'],
+ ['aType-1', 'aId-1', 'oType-1', ''],
+ [1, 'aId-1', 'oType-1', 'oId-1'],
+ ['aType-1', 1, 'oType-1', 'oId-1'],
+ ['aType-1', 'aId-1', 1, 'oId-1'],
+ ['aType-1', 'aId-1', 'oType-1', 1],
+ ];
+ }
+
+ /**
+ * @dataProvider invalidCreateArgsProvider
+ * @expectedException \InvalidArgumentException
+ */
+ public function testCreateCommentInvalidArguments($aType, $aId, $oType, $oId) {
+ $manager = $this->getManager();
+ $manager->create($aType, $aId, $oType, $oId);
+ }
+
+ public function testCreateComment() {
+ $actorType = 'bot';
+ $actorId = 'bob';
+ $objectType = 'weather';
+ $objectId = 'bielefeld';
+
+ $comment = $this->getManager()->create($actorType, $actorId, $objectType, $objectId);
+ $this->assertTrue($comment instanceof \OCP\Comments\IComment);
+ $this->assertSame($comment->getActorType(), $actorType);
+ $this->assertSame($comment->getActorId(), $actorId);
+ $this->assertSame($comment->getObjectType(), $objectType);
+ $this->assertSame($comment->getObjectId(), $objectId);
+ }
+
+ /**
+ * @expectedException \OCP\Comments\NotFoundException
+ */
+ public function testDelete() {
+ $manager = $this->getManager();
+
+ $done = $manager->delete('404');
+ $this->assertFalse($done);
+
+ $done = $manager->delete('%');
+ $this->assertFalse($done);
+
+ $done = $manager->delete('');
+ $this->assertFalse($done);
+
+ $id = strval($this->addDatabaseEntry(0, 0));
+ $comment = $manager->get($id);
+ $this->assertTrue($comment instanceof \OCP\Comments\IComment);
+ $done = $manager->delete($id);
+ $this->assertTrue($done);
+ $manager->get($id);
+ }
+
+ public function testSaveNew() {
+ $manager = $this->getManager();
+ $comment = new \OC\Comments\Comment();
+ $comment
+ ->setActor('user', 'alice')
+ ->setObject('file', 'file64')
+ ->setMessage('very beautiful, I am impressed!')
+ ->setVerb('comment');
+
+ $saveSuccessful = $manager->save($comment);
+ $this->assertTrue($saveSuccessful);
+ $this->assertTrue($comment->getId() !== '');
+ $this->assertTrue($comment->getId() !== '0');
+ $this->assertTrue(!is_null($comment->getCreationDateTime()));
+
+ $loadedComment = $manager->get($comment->getId());
+ $this->assertSame($comment->getMessage(), $loadedComment->getMessage());
+ $this->assertEquals($comment->getCreationDateTime(), $loadedComment->getCreationDateTime());
+ }
+
+ public function testSaveUpdate() {
+ $manager = $this->getManager();
+ $comment = new \OC\Comments\Comment();
+ $comment
+ ->setActor('user', 'alice')
+ ->setObject('file', 'file64')
+ ->setMessage('very beautiful, I am impressed!')
+ ->setVerb('comment');
+
+ $manager->save($comment);
+
+ $comment->setMessage('very beautiful, I am really so much impressed!');
+ $manager->save($comment);
+
+ $loadedComment = $manager->get($comment->getId());
+ $this->assertSame($comment->getMessage(), $loadedComment->getMessage());
+ }
+
+ /**
+ * @expectedException \OCP\Comments\NotFoundException
+ */
+ public function testSaveUpdateException() {
+ $manager = $this->getManager();
+ $comment = new \OC\Comments\Comment();
+ $comment
+ ->setActor('user', 'alice')
+ ->setObject('file', 'file64')
+ ->setMessage('very beautiful, I am impressed!')
+ ->setVerb('comment');
+
+ $manager->save($comment);
+
+ $manager->delete($comment->getId());
+ $comment->setMessage('very beautiful, I am really so much impressed!');
+ $manager->save($comment);
+ }
+
+ /**
+ * @expectedException \UnexpectedValueException
+ */
+ public function testSaveIncomplete() {
+ $manager = $this->getManager();
+ $comment = new \OC\Comments\Comment();
+ $comment->setMessage('from no one to nothing');
+ $manager->save($comment);
+ }
+
+ public function testSaveAsChild() {
+ $id = $this->addDatabaseEntry(0, 0);
+
+ $manager = $this->getManager();
+
+ for($i = 0; $i < 3; $i++) {
+ $comment = new \OC\Comments\Comment();
+ $comment
+ ->setActor('user', 'alice')
+ ->setObject('file', 'file64')
+ ->setParentId(strval($id))
+ ->setMessage('full ack')
+ ->setVerb('comment')
+ // setting the creation time avoids using sleep() while making sure to test with different timestamps
+ ->setCreationDateTime(new \DateTime('+' . $i . ' minutes'));
+
+ $manager->save($comment);
+
+ $this->assertSame($comment->getTopmostParentId(), strval($id));
+ $parentComment = $manager->get(strval($id));
+ $this->assertSame($parentComment->getChildrenCount(), $i + 1);
+ $this->assertEquals($parentComment->getLatestChildDateTime(), $comment->getCreationDateTime());
+ }
+ }
+
+ public function invalidActorArgsProvider() {
+ return
+ [
+ ['', ''],
+ [1, 'alice'],
+ ['user', 1],
+ ];
+ }
+
+ /**
+ * @dataProvider invalidActorArgsProvider
+ * @expectedException \InvalidArgumentException
+ */
+ public function testDeleteReferencesOfActorInvalidInput($type, $id) {
+ $manager = $this->getManager();
+ $manager->deleteReferencesOfActor($type, $id);
+ }
+
+ public function testDeleteReferencesOfActor() {
+ $ids = [];
+ $ids[] = $this->addDatabaseEntry(0, 0);
+ $ids[] = $this->addDatabaseEntry(0, 0);
+ $ids[] = $this->addDatabaseEntry(0, 0);
+
+ $manager = $this->getManager();
+
+ // just to make sure they are really set, with correct actor data
+ $comment = $manager->get(strval($ids[1]));
+ $this->assertSame($comment->getActorType(), 'user');
+ $this->assertSame($comment->getActorId(), 'alice');
+
+ $wasSuccessful = $manager->deleteReferencesOfActor('user', 'alice');
+ $this->assertTrue($wasSuccessful);
+
+ foreach($ids as $id) {
+ $comment = $manager->get(strval($id));
+ $this->assertSame($comment->getActorType(), ICommentsManager::DELETED_USER);
+ $this->assertSame($comment->getActorId(), ICommentsManager::DELETED_USER);
+ }
+
+ // actor info is gone from DB, but when database interaction is alright,
+ // we still expect to get true back
+ $wasSuccessful = $manager->deleteReferencesOfActor('user', 'alice');
+ $this->assertTrue($wasSuccessful);
+ }
+
+ public function testDeleteReferencesOfActorWithUserManagement() {
+ $user = \OC::$server->getUserManager()->createUser('xenia', '123456');
+ $this->assertTrue($user instanceof \OCP\IUser);
+
+ $manager = \OC::$server->getCommentsManager();
+ $comment = $manager->create('user', $user->getUID(), 'file', 'file64');
+ $comment
+ ->setMessage('Most important comment I ever left on the Internet.')
+ ->setVerb('comment');
+ $status = $manager->save($comment);
+ $this->assertTrue($status);
+
+ $commentID = $comment->getId();
+ $user->delete();
+
+ $comment = $manager->get($commentID);
+ $this->assertSame($comment->getActorType(), \OCP\Comments\ICommentsManager::DELETED_USER);
+ $this->assertSame($comment->getActorId(), \OCP\Comments\ICommentsManager::DELETED_USER);
+ }
+
+ public function invalidObjectArgsProvider() {
+ return
+ [
+ ['', ''],
+ [1, 'file64'],
+ ['file', 1],
+ ];
+ }
+
+ /**
+ * @dataProvider invalidObjectArgsProvider
+ * @expectedException \InvalidArgumentException
+ */
+ public function testDeleteCommentsAtObjectInvalidInput($type, $id) {
+ $manager = $this->getManager();
+ $manager->deleteCommentsAtObject($type, $id);
+ }
+
+ public function testDeleteCommentsAtObject() {
+ $ids = [];
+ $ids[] = $this->addDatabaseEntry(0, 0);
+ $ids[] = $this->addDatabaseEntry(0, 0);
+ $ids[] = $this->addDatabaseEntry(0, 0);
+
+ $manager = $this->getManager();
+
+ // just to make sure they are really set, with correct actor data
+ $comment = $manager->get(strval($ids[1]));
+ $this->assertSame($comment->getObjectType(), 'file');
+ $this->assertSame($comment->getObjectId(), 'file64');
+
+ $wasSuccessful = $manager->deleteCommentsAtObject('file', 'file64');
+ $this->assertTrue($wasSuccessful);
+
+ $verified = 0;
+ foreach($ids as $id) {
+ try {
+ $manager->get(strval($id));
+ } catch (\OCP\Comments\NotFoundException $e) {
+ $verified++;
+ }
+ }
+ $this->assertSame($verified, 3);
+
+ // actor info is gone from DB, but when database interaction is alright,
+ // we still expect to get true back
+ $wasSuccessful = $manager->deleteCommentsAtObject('file', 'file64');
+ $this->assertTrue($wasSuccessful);
+ }
+
+}
diff --git a/tests/lib/configtests.php b/tests/lib/configtests.php
index 0269ae542f4..c0251e693c6 100644
--- a/tests/lib/configtests.php
+++ b/tests/lib/configtests.php
@@ -23,7 +23,7 @@ class ConfigTests extends TestCase {
protected function setUp() {
parent::setUp();
- $this->randomTmpDir = \OC_Helper::tmpFolder();
+ $this->randomTmpDir = \OC::$server->getTempManager()->getTemporaryFolder();
$this->configFile = $this->randomTmpDir.'testconfig.php';
file_put_contents($this->configFile, self::TESTCONTENT);
$this->config = new \OC\Config($this->randomTmpDir, 'testconfig.php');
diff --git a/tests/lib/db/querybuilder/querybuildertest.php b/tests/lib/db/querybuilder/querybuildertest.php
index c8e029d9e40..de8f84ac345 100644
--- a/tests/lib/db/querybuilder/querybuildertest.php
+++ b/tests/lib/db/querybuilder/querybuildertest.php
@@ -1124,11 +1124,12 @@ class QueryBuilderTest extends \Test\TestCase {
$this->assertTrue(true);
}
- $qB->insert('appconfig')
+ $qB->insert('properties')
->values([
- 'appid' => $qB->expr()->literal('testFirstResult'),
- 'configkey' => $qB->expr()->literal('testing' . 50),
- 'configvalue' => $qB->expr()->literal(100 - 50),
+ 'userid' => $qB->expr()->literal('testFirstResult'),
+ 'propertypath' => $qB->expr()->literal('testing'),
+ 'propertyname' => $qB->expr()->literal('testing'),
+ 'propertyvalue' => $qB->expr()->literal('testing'),
])
->execute();
@@ -1136,7 +1137,18 @@ class QueryBuilderTest extends \Test\TestCase {
$this->assertNotNull($actual);
$this->assertInternalType('int', $actual);
- $this->assertEquals($this->connection->lastInsertId('*PREFIX*appconfig'), $actual);
+ $this->assertEquals($this->connection->lastInsertId('*PREFIX*properties'), $actual);
+
+ $qB->delete('properties')
+ ->where($qB->expr()->eq('userid', $qB->expr()->literal('testFirstResult')))
+ ->execute();
+
+ try {
+ $qB->getLastInsertId();
+ $this->fail('getLastInsertId() should throw an exception, when being called after delete()');
+ } catch (\BadMethodCallException $e) {
+ $this->assertTrue(true);
+ }
}
public function dataGetTableName() {
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
index 503d25597cd..d674ac27fa1 100644
--- a/tests/lib/files/cache/cache.php
+++ b/tests/lib/files/cache/cache.php
@@ -317,7 +317,7 @@ class Cache extends \Test\TestCase {
function testSearchByTag() {
$userId = $this->getUniqueId('user');
- \OC_User::createUser($userId, $userId);
+ \OC::$server->getUserManager()->createUser($userId, $userId);
$this->loginAsUser($userId);
$user = new \OC\User\User($userId, null);
@@ -373,7 +373,8 @@ class Cache extends \Test\TestCase {
$tagManager->delete('tag2');
$this->logout();
- \OC_User::deleteUser($userId);
+ $user = \OC::$server->getUserManager()->get($userId);
+ if ($user !== null) { $user->delete(); }
}
function testMove() {
diff --git a/tests/lib/files/cache/homecache.php b/tests/lib/files/cache/homecache.php
index 3adb25fa9d4..e133d0afc55 100644
--- a/tests/lib/files/cache/homecache.php
+++ b/tests/lib/files/cache/homecache.php
@@ -69,7 +69,7 @@ class HomeCache extends \Test\TestCase {
protected function setUp() {
parent::setUp();
- $this->user = new DummyUser('foo', \OC_Helper::tmpFolder());
+ $this->user = new DummyUser('foo', \OC::$server->getTempManager()->getTemporaryFolder());
$this->storage = new \OC\Files\Storage\Home(array('user' => $this->user));
$this->cache = $this->storage->getCache();
}
diff --git a/tests/lib/files/cache/updaterlegacy.php b/tests/lib/files/cache/updaterlegacy.php
index 1946913bba4..09688afd465 100644
--- a/tests/lib/files/cache/updaterlegacy.php
+++ b/tests/lib/files/cache/updaterlegacy.php
@@ -57,7 +57,7 @@ class UpdaterLegacy extends \Test\TestCase {
self::$user = $this->getUniqueID();
}
- \OC_User::createUser(self::$user, 'password');
+ \OC::$server->getUserManager()->createUser(self::$user, 'password');
$this->loginAsUser(self::$user);
Filesystem::init(self::$user, '/' . self::$user . '/files');
@@ -72,7 +72,10 @@ class UpdaterLegacy extends \Test\TestCase {
if ($this->cache) {
$this->cache->clear();
}
- $result = \OC_User::deleteUser(self::$user);
+
+ $result = false;
+ $user = \OC::$server->getUserManager()->get(self::$user);
+ if ($user !== null) { $result = $user->delete(); }
$this->assertTrue($result);
$this->logout();
diff --git a/tests/lib/files/etagtest.php b/tests/lib/files/etagtest.php
index c214a3d4da6..d8e44000f9c 100644
--- a/tests/lib/files/etagtest.php
+++ b/tests/lib/files/etagtest.php
@@ -39,7 +39,7 @@ class EtagTest extends \Test\TestCase {
$config = \OC::$server->getConfig();
$this->datadir = $config->getSystemValue('datadirectory');
- $this->tmpDir = \OC_Helper::tmpFolder();
+ $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder();
$config->setSystemValue('datadirectory', $this->tmpDir);
$this->userBackend = new \Test\Util\User\Dummy();
diff --git a/tests/lib/files/filesystem.php b/tests/lib/files/filesystem.php
index c5ebbdd1a2d..db1f22f894a 100644
--- a/tests/lib/files/filesystem.php
+++ b/tests/lib/files/filesystem.php
@@ -72,7 +72,7 @@ class Filesystem extends \Test\TestCase {
* @return array
*/
private function getStorageData() {
- $dir = \OC_Helper::tmpFolder();
+ $dir = \OC::$server->getTempManager()->getTemporaryFolder();
$this->tmpDirs[] = $dir;
return array('datadir' => $dir);
}
@@ -302,7 +302,7 @@ class Filesystem extends \Test\TestCase {
\OC\Files\Filesystem::mkdir('/bar');
// \OC\Files\Filesystem::file_put_contents('/bar//foo', 'foo');
- $tmpFile = \OC_Helper::tmpFile();
+ $tmpFile = \OC::$server->getTempManager()->getTemporaryFile();
file_put_contents($tmpFile, 'foo');
$fh = fopen($tmpFile, 'r');
// \OC\Files\Filesystem::file_put_contents('/bar//foo', $fh);
@@ -325,7 +325,7 @@ class Filesystem extends \Test\TestCase {
public function testHomeMount() {
$userId = $this->getUniqueID('user_');
- \OC_User::createUser($userId, $userId);
+ \OC::$server->getUserManager()->createUser($userId, $userId);
\OC\Files\Filesystem::initMountPoints($userId);
@@ -340,7 +340,8 @@ class Filesystem extends \Test\TestCase {
$this->assertEquals('home::' . $userId, $homeMount->getId());
}
- \OC_User::deleteUser($userId);
+ $user = \OC::$server->getUserManager()->get($userId);
+ if ($user !== null) { $user->delete(); }
}
/**
@@ -360,7 +361,7 @@ class Filesystem extends \Test\TestCase {
// this will trigger the insert
$cache = $localStorage->getCache();
- \OC_User::createUser($userId, $userId);
+ \OC::$server->getUserManager()->createUser($userId, $userId);
\OC\Files\Filesystem::initMountPoints($userId);
$homeMount = \OC\Files\Filesystem::getStorage('/' . $userId . '/');
@@ -368,7 +369,8 @@ class Filesystem extends \Test\TestCase {
$this->assertTrue($homeMount->instanceOfStorage('\OC\Files\Storage\Home'));
$this->assertEquals('local::' . $datadir . '/' . $userId . '/', $homeMount->getId());
- \OC_User::deleteUser($userId);
+ $user = \OC::$server->getUserManager()->get($userId);
+ if ($user !== null) { $user->delete(); }
// delete storage entry
$cache->clear();
}
@@ -388,7 +390,7 @@ class Filesystem extends \Test\TestCase {
// no cache path configured
$config->setSystemValue('cache_path', '');
- \OC_User::createUser($userId, $userId);
+ \OC::$server->getUserManager()->createUser($userId, $userId);
\OC\Files\Filesystem::initMountPoints($userId);
$this->assertEquals(
@@ -398,7 +400,8 @@ class Filesystem extends \Test\TestCase {
list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath('/' . $userId . '/cache');
$this->assertTrue($storage->instanceOfStorage('\OCP\Files\IHomeStorage'));
$this->assertEquals('cache', $internalPath);
- \OC_User::deleteUser($userId);
+ $user = \OC::$server->getUserManager()->get($userId);
+ if ($user !== null) { $user->delete(); }
$config->setSystemValue('cache_path', $oldCachePath);
}
@@ -413,10 +416,10 @@ class Filesystem extends \Test\TestCase {
$config = \OC::$server->getConfig();
$oldCachePath = $config->getSystemValue('cache_path', '');
// set cache path to temp dir
- $cachePath = \OC_Helper::tmpFolder() . '/extcache';
+ $cachePath = \OC::$server->getTempManager()->getTemporaryFolder() . '/extcache';
$config->setSystemValue('cache_path', $cachePath);
- \OC_User::createUser($userId, $userId);
+ \OC::$server->getUserManager()->createUser($userId, $userId);
\OC\Files\Filesystem::initMountPoints($userId);
$this->assertEquals(
@@ -426,7 +429,8 @@ class Filesystem extends \Test\TestCase {
list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath('/' . $userId . '/cache');
$this->assertTrue($storage->instanceOfStorage('\OC\Files\Storage\Local'));
$this->assertEquals('', $internalPath);
- \OC_User::deleteUser($userId);
+ $user = \OC::$server->getUserManager()->get($userId);
+ if ($user !== null) { $user->delete(); }
$config->setSystemValue('cache_path', $oldCachePath);
}
diff --git a/tests/lib/files/node/file.php b/tests/lib/files/node/file.php
index d0072949c7f..ccc777c499f 100644
--- a/tests/lib/files/node/file.php
+++ b/tests/lib/files/node/file.php
@@ -21,8 +21,16 @@ class File extends \Test\TestCase {
$this->user = new \OC\User\User('', new \Test\Util\User\Dummy);
}
+ protected function getMockStorage() {
+ $storage = $this->getMock('\OCP\Files\Storage');
+ $storage->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue('home::someuser'));
+ return $storage;
+ }
+
protected function getFileInfo($data) {
- return new FileInfo('', null, '', $data, null);
+ return new FileInfo('', $this->getMockStorage(), '', $data, null);
}
public function testDelete() {
diff --git a/tests/lib/files/node/folder.php b/tests/lib/files/node/folder.php
index d95e1b5d2b2..09bf32561e6 100644
--- a/tests/lib/files/node/folder.php
+++ b/tests/lib/files/node/folder.php
@@ -31,8 +31,16 @@ class Folder extends \Test\TestCase {
$this->user = new \OC\User\User('', new \Test\Util\User\Dummy);
}
+ protected function getMockStorage() {
+ $storage = $this->getMock('\OCP\Files\Storage');
+ $storage->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue('home::someuser'));
+ return $storage;
+ }
+
protected function getFileInfo($data) {
- return new FileInfo('', null, '', $data, null);
+ return new FileInfo('', $this->getMockStorage(), '', $data, null);
}
public function testDelete() {
diff --git a/tests/lib/files/node/node.php b/tests/lib/files/node/node.php
index afcf4cbabaa..a1693b034fa 100644
--- a/tests/lib/files/node/node.php
+++ b/tests/lib/files/node/node.php
@@ -18,8 +18,16 @@ class Node extends \Test\TestCase {
$this->user = new \OC\User\User('', new \Test\Util\User\Dummy);
}
+ protected function getMockStorage() {
+ $storage = $this->getMock('\OCP\Files\Storage');
+ $storage->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue('home::someuser'));
+ return $storage;
+ }
+
protected function getFileInfo($data) {
- return new FileInfo('', null, '', $data, null);
+ return new FileInfo('', $this->getMockStorage(), '', $data, null);
}
public function testStat() {
diff --git a/tests/lib/files/objectstore/swift.php b/tests/lib/files/objectstore/swift.php
index 63332af68da..a63f5844145 100644
--- a/tests/lib/files/objectstore/swift.php
+++ b/tests/lib/files/objectstore/swift.php
@@ -51,8 +51,9 @@ class Swift extends \Test\Files\Storage\Storage {
// create users
$users = array('test');
foreach($users as $userName) {
- \OC_User::deleteUser($userName);
- \OC_User::createUser($userName, $userName);
+ $user = \OC::$server->getUserManager()->get($userName);
+ if ($user !== null) { $user->delete(); }
+ \OC::$server->getUserManager()->createUser($userName, $userName);
}
// main test user
@@ -76,7 +77,8 @@ class Swift extends \Test\Files\Storage\Storage {
$users = array('test');
foreach($users as $userName) {
- \OC_User::deleteUser($userName);
+ $user = \OC::$server->getUserManager()->get($userName);
+ if ($user !== null) { $user->delete(); }
}
parent::tearDown();
}
diff --git a/tests/lib/files/storage/commontest.php b/tests/lib/files/storage/commontest.php
index bbe6f2a73e2..38faa9b0b21 100644
--- a/tests/lib/files/storage/commontest.php
+++ b/tests/lib/files/storage/commontest.php
@@ -37,7 +37,7 @@ class CommonTest extends Storage {
protected function setUp() {
parent::setUp();
- $this->tmpDir=\OC_Helper::tmpFolder();
+ $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder();
$this->instance=new \OC\Files\Storage\CommonTest(array('datadir'=>$this->tmpDir));
}
diff --git a/tests/lib/files/storage/home.php b/tests/lib/files/storage/home.php
index a51912ca1b2..7e10f09d554 100644
--- a/tests/lib/files/storage/home.php
+++ b/tests/lib/files/storage/home.php
@@ -70,7 +70,7 @@ class Home extends Storage {
protected function setUp() {
parent::setUp();
- $this->tmpDir = \OC_Helper::tmpFolder();
+ $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder();
$this->userId = $this->getUniqueID('user_');
$this->user = new DummyUser($this->userId, $this->tmpDir);
$this->instance = new \OC\Files\Storage\Home(array('user' => $this->user));
diff --git a/tests/lib/files/storage/homestoragequota.php b/tests/lib/files/storage/homestoragequota.php
index 49e8f499efd..9a3c6b151fc 100644
--- a/tests/lib/files/storage/homestoragequota.php
+++ b/tests/lib/files/storage/homestoragequota.php
@@ -32,7 +32,7 @@ class HomeStorageQuota extends \Test\TestCase {
*/
function testHomeStorageWrapperWithoutQuota() {
$user1 = $this->getUniqueID();
- \OC_User::createUser($user1, 'test');
+ \OC::$server->getUserManager()->createUser($user1, 'test');
\OC::$server->getConfig()->setUserValue($user1, 'files', 'quota', 'none');
\OC_User::setUserId($user1);
@@ -44,7 +44,8 @@ class HomeStorageQuota extends \Test\TestCase {
// clean up
\OC_User::setUserId('');
- \OC_User::deleteUser($user1);
+ $user = \OC::$server->getUserManager()->get($user1);
+ if ($user !== null) { $user->delete(); }
\OC::$server->getConfig()->deleteAllUserValues($user1);
\OC_Util::tearDownFS();
}
@@ -54,7 +55,7 @@ class HomeStorageQuota extends \Test\TestCase {
*/
function testHomeStorageWrapperWithQuota() {
$user1 = $this->getUniqueID();
- \OC_User::createUser($user1, 'test');
+ \OC::$server->getUserManager()->createUser($user1, 'test');
\OC::$server->getConfig()->setUserValue($user1, 'files', 'quota', '1024');
\OC_User::setUserId($user1);
@@ -71,7 +72,8 @@ class HomeStorageQuota extends \Test\TestCase {
// clean up
\OC_User::setUserId('');
- \OC_User::deleteUser($user1);
+ $user = \OC::$server->getUserManager()->get($user1);
+ if ($user !== null) { $user->delete(); }
\OC::$server->getConfig()->deleteAllUserValues($user1);
\OC_Util::tearDownFS();
}
diff --git a/tests/lib/files/storage/local.php b/tests/lib/files/storage/local.php
index 36267dc6605..2583863b554 100644
--- a/tests/lib/files/storage/local.php
+++ b/tests/lib/files/storage/local.php
@@ -38,7 +38,7 @@ class Local extends Storage {
protected function setUp() {
parent::setUp();
- $this->tmpDir = \OC_Helper::tmpFolder();
+ $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder();
$this->instance = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir));
}
diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php
index d381b4cdf40..95dd70bfdac 100644
--- a/tests/lib/files/storage/storage.php
+++ b/tests/lib/files/storage/storage.php
@@ -598,4 +598,17 @@ abstract class Storage extends \Test\TestCase {
$this->instance->mkdir('source');
$this->assertTrue($this->instance->isSharable('source'));
}
+
+ public function testStatAfterWrite() {
+ $this->instance->file_put_contents('foo.txt', 'bar');
+ $stat = $this->instance->stat('foo.txt');
+ $this->assertEquals(3, $stat['size']);
+
+ $fh = $this->instance->fopen('foo.txt', 'w');
+ fwrite($fh, 'qwerty');
+ fclose($fh);
+
+ $stat = $this->instance->stat('foo.txt');
+ $this->assertEquals(6, $stat['size']);
+ }
}
diff --git a/tests/lib/files/storage/wrapper/quota.php b/tests/lib/files/storage/wrapper/quota.php
index b0a06b0d898..95bc2ff7a1a 100644
--- a/tests/lib/files/storage/wrapper/quota.php
+++ b/tests/lib/files/storage/wrapper/quota.php
@@ -27,7 +27,7 @@ class Quota extends \Test\Files\Storage\Storage {
protected function setUp() {
parent::setUp();
- $this->tmpDir = \OC_Helper::tmpFolder();
+ $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder();
$storage = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir));
$this->instance = new \OC\Files\Storage\Wrapper\Quota(array('storage' => $storage, 'quota' => 10000000));
}
diff --git a/tests/lib/files/storage/wrapper/wrapper.php b/tests/lib/files/storage/wrapper/wrapper.php
index 486cd0495c1..a5a678cb9f7 100644
--- a/tests/lib/files/storage/wrapper/wrapper.php
+++ b/tests/lib/files/storage/wrapper/wrapper.php
@@ -17,7 +17,7 @@ class Wrapper extends \Test\Files\Storage\Storage {
protected function setUp() {
parent::setUp();
- $this->tmpDir = \OC_Helper::tmpFolder();
+ $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder();
$storage = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir));
$this->instance = new \OC\Files\Storage\Wrapper\Wrapper(array('storage' => $storage));
}
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index 1fc4b9ab684..3e88a5306f8 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -757,7 +757,7 @@ class View extends \Test\TestCase {
* 228 is the max path length in windows
*/
$folderName = 'abcdefghijklmnopqrstuvwxyz012345678901234567890123456789';
- $tmpdirLength = strlen(\OC_Helper::tmpFolder());
+ $tmpdirLength = strlen(\OC::$server->getTempManager()->getTemporaryFolder());
if (\OC_Util::runningOnWindows()) {
$this->markTestSkipped('[Windows] ');
$depth = ((260 - $tmpdirLength) / 57);
diff --git a/tests/lib/group.php b/tests/lib/group.php
index 066dddc738e..4bb888ed725 100644
--- a/tests/lib/group.php
+++ b/tests/lib/group.php
@@ -31,7 +31,7 @@ class Test_Group extends \Test\TestCase {
public function testSingleBackend() {
$userBackend = new \Test\Util\User\Dummy();
- \OC_User::getManager()->registerBackend($userBackend);
+ \OC::$server->getUserManager()->registerBackend($userBackend);
OC_Group::useBackend(new OC_Group_Dummy());
$group1 = $this->getUniqueID();
@@ -113,7 +113,7 @@ class Test_Group extends \Test\TestCase {
public function testUsersInGroup() {
OC_Group::useBackend(new OC_Group_Dummy());
$userBackend = new \Test\Util\User\Dummy();
- \OC_User::getManager()->registerBackend($userBackend);
+ \OC::$server->getUserManager()->registerBackend($userBackend);
$group1 = $this->getUniqueID();
$group2 = $this->getUniqueID();
@@ -142,7 +142,7 @@ class Test_Group extends \Test\TestCase {
public function testMultiBackend() {
$userBackend = new \Test\Util\User\Dummy();
- \OC_User::getManager()->registerBackend($userBackend);
+ \OC::$server->getUserManager()->registerBackend($userBackend);
$backend1 = new OC_Group_Dummy();
$backend2 = new OC_Group_Dummy();
OC_Group::useBackend($backend1);
diff --git a/tests/lib/helper.php b/tests/lib/helper.php
index b7deb3fc13d..c2620896157 100644
--- a/tests/lib/helper.php
+++ b/tests/lib/helper.php
@@ -71,37 +71,6 @@ class Test_Helper extends \Test\TestCase {
];
}
- function testGetSecureMimeType() {
- $dir=OC::$SERVERROOT.'/tests/data';
-
- $result = OC_Helper::getSecureMimeType('image/svg+xml');
- $expected = 'text/plain';
- $this->assertEquals($result, $expected);
-
- $result = OC_Helper::getSecureMimeType('image/png');
- $expected = 'image/png';
- $this->assertEquals($result, $expected);
- }
-
- function testGetFileNameMimeType() {
- $this->assertEquals('text/plain', OC_Helper::getFileNameMimeType('foo.txt'));
- $this->assertEquals('image/png', OC_Helper::getFileNameMimeType('foo.png'));
- $this->assertEquals('image/png', OC_Helper::getFileNameMimeType('foo.bar.png'));
- $this->assertEquals('application/octet-stream', OC_Helper::getFileNameMimeType('.png'));
- $this->assertEquals('application/octet-stream', OC_Helper::getFileNameMimeType('foo'));
- $this->assertEquals('application/octet-stream', OC_Helper::getFileNameMimeType(''));
- }
-
- function testGetStringMimeType() {
- if (\OC_Util::runningOnWindows()) {
- $this->markTestSkipped('[Windows] Strings have mimetype application/octet-stream on Windows');
- }
-
- $result = OC_Helper::getStringMimeType("/data/data.tar.gz");
- $expected = 'text/plain; charset=us-ascii';
- $this->assertEquals($result, $expected);
- }
-
function testIsSubDirectory() {
$result = OC_Helper::isSubDirectory("./data/", "/anotherDirectory/");
$this->assertFalse($result);
@@ -254,172 +223,6 @@ class Test_Helper extends \Test\TestCase {
/**
* @small
- * test absolute URL construction
- * @dataProvider provideDocRootURLs
- */
- function testMakeAbsoluteURLDocRoot($url, $expectedResult) {
- \OC::$WEBROOT = '';
- $result = \OC_Helper::makeURLAbsolute($url);
-
- $this->assertEquals($expectedResult, $result);
- }
-
- /**
- * @small
- * test absolute URL construction
- * @dataProvider provideSubDirURLs
- */
- function testMakeAbsoluteURLSubDir($url, $expectedResult) {
- \OC::$WEBROOT = '/owncloud';
- $result = \OC_Helper::makeURLAbsolute($url);
-
- $this->assertEquals($expectedResult, $result);
- }
-
- public function provideDocRootURLs() {
- return array(
- array('index.php', 'http://localhost/index.php'),
- array('/index.php', 'http://localhost/index.php'),
- array('/apps/index.php', 'http://localhost/apps/index.php'),
- array('apps/index.php', 'http://localhost/apps/index.php'),
- );
- }
-
- public function provideSubDirURLs() {
- return array(
- array('index.php', 'http://localhost/owncloud/index.php'),
- array('/index.php', 'http://localhost/owncloud/index.php'),
- array('/apps/index.php', 'http://localhost/owncloud/apps/index.php'),
- array('apps/index.php', 'http://localhost/owncloud/apps/index.php'),
- );
- }
-
- /**
- * @small
- * test linkTo URL construction
- * @dataProvider provideDocRootAppUrlParts
- */
- public function testLinkToDocRoot($app, $file, $args, $expectedResult) {
- \OC::$WEBROOT = '';
- $result = \OC_Helper::linkTo($app, $file, $args);
-
- $this->assertEquals($expectedResult, $result);
- }
-
- /**
- * @small
- * test linkTo URL construction in sub directory
- * @dataProvider provideSubDirAppUrlParts
- */
- public function testLinkToSubDir($app, $file, $args, $expectedResult) {
- \OC::$WEBROOT = '/owncloud';
- $result = \OC_Helper::linkTo($app, $file, $args);
-
- $this->assertEquals($expectedResult, $result);
- }
-
- /**
- * @return array
- */
- public function provideDocRootAppUrlParts() {
- return array(
- array('files', 'ajax/list.php', array(), '/index.php/apps/files/ajax/list.php'),
- array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), '/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'),
- array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), '/index.php?trut=trat&dut=dat'),
- );
- }
-
- /**
- * @return array
- */
- public function provideSubDirAppUrlParts() {
- return array(
- array('files', 'ajax/list.php', array(), '/owncloud/index.php/apps/files/ajax/list.php'),
- array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), '/owncloud/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'),
- array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), '/owncloud/index.php?trut=trat&dut=dat'),
- );
- }
-
- /**
- * @small
- * test linkToAbsolute URL construction
- * @dataProvider provideDocRootAppAbsoluteUrlParts
- */
- public function testLinkToAbsoluteDocRoot($app, $file, $args, $expectedResult) {
- \OC::$WEBROOT = '';
- $result = \OC_Helper::linkToAbsolute($app, $file, $args);
-
- $this->assertEquals($expectedResult, $result);
- }
-
- /**
- * @small
- * test linkToAbsolute URL construction in sub directory
- * @dataProvider provideSubDirAppAbsoluteUrlParts
- */
- public function testLinkToAbsoluteSubDir($app, $file, $args, $expectedResult) {
- \OC::$WEBROOT = '/owncloud';
- $result = \OC_Helper::linkToAbsolute($app, $file, $args);
-
- $this->assertEquals($expectedResult, $result);
- }
-
- /**
- * @return array
- */
- public function provideDocRootAppAbsoluteUrlParts() {
- return array(
- array('files', 'ajax/list.php', array(), 'http://localhost/index.php/apps/files/ajax/list.php'),
- array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'),
- array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/index.php?trut=trat&dut=dat'),
- );
- }
-
- /**
- * @return array
- */
- public function provideSubDirAppAbsoluteUrlParts() {
- return array(
- array('files', 'ajax/list.php', array(), 'http://localhost/owncloud/index.php/apps/files/ajax/list.php'),
- array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/owncloud/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'),
- array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/owncloud/index.php?trut=trat&dut=dat'),
- );
- }
-
- /**
- * @small
- * test linkToRemoteBase URL construction
- */
- public function testLinkToRemoteBase() {
- \OC::$WEBROOT = '';
- $result = \OC_Helper::linkToRemoteBase('webdav');
- $this->assertEquals('/remote.php/webdav', $result);
-
- \OC::$WEBROOT = '/owncloud';
- $result = \OC_Helper::linkToRemoteBase('webdav');
- $this->assertEquals('/owncloud/remote.php/webdav', $result);
- }
-
- /**
- * @small
- * test linkToRemote URL construction
- */
- public function testLinkToRemote() {
- \OC::$WEBROOT = '';
- $result = \OC_Helper::linkToRemote('webdav');
- $this->assertEquals('http://localhost/remote.php/webdav/', $result);
- $result = \OC_Helper::linkToRemote('webdav', false);
- $this->assertEquals('http://localhost/remote.php/webdav', $result);
-
- \OC::$WEBROOT = '/owncloud';
- $result = \OC_Helper::linkToRemote('webdav');
- $this->assertEquals('http://localhost/owncloud/remote.php/webdav/', $result);
- $result = \OC_Helper::linkToRemote('webdav', false);
- $this->assertEquals('http://localhost/owncloud/remote.php/webdav', $result);
- }
-
- /**
- * @small
* test linkToPublic URL construction
*/
public function testLinkToPublic() {
@@ -458,7 +261,7 @@ class Test_Helper extends \Test\TestCase {
* Tests recursive folder deletion with rmdirr()
*/
public function testRecursiveFolderDeletion() {
- $baseDir = \OC_Helper::tmpFolder() . '/';
+ $baseDir = \OC::$server->getTempManager()->getTemporaryFolder() . '/';
mkdir($baseDir . 'a/b/c/d/e', 0777, true);
mkdir($baseDir . 'a/b/c1/d/e', 0777, true);
mkdir($baseDir . 'a/b/c2/d/e', 0777, true);
diff --git a/tests/lib/helperstorage.php b/tests/lib/helperstorage.php
index cf022109c27..3109b509549 100644
--- a/tests/lib/helperstorage.php
+++ b/tests/lib/helperstorage.php
@@ -23,7 +23,7 @@ class Test_Helper_Storage extends \Test\TestCase {
parent::setUp();
$this->user = $this->getUniqueID('user_');
- \OC_User::createUser($this->user, $this->user);
+ \OC::$server->getUserManager()->createUser($this->user, $this->user);
$this->storage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::tearDown();
@@ -45,7 +45,8 @@ class Test_Helper_Storage extends \Test\TestCase {
\OC\Files\Filesystem::mount($this->storage, array(), '/');
\OC_User::setUserId('');
- \OC_User::deleteUser($this->user);
+ $user = \OC::$server->getUserManager()->get($this->user);
+ if ($user !== null) { $user->delete(); }
\OC::$server->getConfig()->deleteAllUserValues($this->user);
parent::tearDown();
diff --git a/tests/lib/installer.php b/tests/lib/installer.php
index c3c2f8a275e..cfad4d7f0de 100644
--- a/tests/lib/installer.php
+++ b/tests/lib/installer.php
@@ -32,7 +32,7 @@ class Test_Installer extends \Test\TestCase {
$pathOfTestApp .= '/../data/';
$pathOfTestApp .= 'testapp.zip';
- $tmp = OC_Helper::tmpFile('.zip');
+ $tmp = \OC::$server->getTempManager()->getTemporaryFile('.zip');
OC_Helper::copyr($pathOfTestApp, $tmp);
$data = array(
@@ -51,7 +51,7 @@ class Test_Installer extends \Test\TestCase {
$pathOfOldTestApp .= '/../data/';
$pathOfOldTestApp .= 'testapp.zip';
- $oldTmp = OC_Helper::tmpFile('.zip');
+ $oldTmp = \OC::$server->getTempManager()->getTemporaryFile('.zip');
OC_Helper::copyr($pathOfOldTestApp, $oldTmp);
$oldData = array(
@@ -63,7 +63,7 @@ class Test_Installer extends \Test\TestCase {
$pathOfNewTestApp .= '/../data/';
$pathOfNewTestApp .= 'testapp2.zip';
- $newTmp = OC_Helper::tmpFile('.zip');
+ $newTmp = \OC::$server->getTempManager()->getTemporaryFile('.zip');
OC_Helper::copyr($pathOfNewTestApp, $newTmp);
$newData = array(
diff --git a/tests/lib/lock/dblockingprovider.php b/tests/lib/lock/dblockingprovider.php
index d679b1ea677..2032110f4f0 100644
--- a/tests/lib/lock/dblockingprovider.php
+++ b/tests/lib/lock/dblockingprovider.php
@@ -85,13 +85,7 @@ class DBLockingProvider extends LockingProvider {
$this->assertEquals(3, $this->getLockEntryCount());
- $this->instance->cleanEmptyLocks();
-
- $this->assertEquals(3, $this->getLockEntryCount());
-
- $this->instance->releaseAll();
-
- $this->instance->cleanEmptyLocks();
+ $this->instance->cleanExpiredLocks();
$this->assertEquals(2, $this->getLockEntryCount());
}
diff --git a/tests/lib/security/certificatemanager.php b/tests/lib/security/certificatemanager.php
index 43b2f1cf980..f2e29cab18e 100644
--- a/tests/lib/security/certificatemanager.php
+++ b/tests/lib/security/certificatemanager.php
@@ -24,7 +24,7 @@ class CertificateManagerTest extends \Test\TestCase {
parent::setUp();
$this->username = $this->getUniqueID('', 20);
- OC_User::createUser($this->username, $this->getUniqueID('', 20));
+ \OC::$server->getUserManager()->createUser($this->username, $this->getUniqueID('', 20));
\OC_Util::tearDownFS();
\OC_User::setUserId('');
@@ -39,7 +39,8 @@ class CertificateManagerTest extends \Test\TestCase {
}
protected function tearDown() {
- \OC_User::deleteUser($this->username);
+ $user = \OC::$server->getUserManager()->get($this->username);
+ if ($user !== null) { $user->delete(); }
parent::tearDown();
}
diff --git a/tests/lib/security/securerandom.php b/tests/lib/security/securerandom.php
index d9bbd0e71e5..af437640805 100644
--- a/tests/lib/security/securerandom.php
+++ b/tests/lib/security/securerandom.php
@@ -57,11 +57,10 @@ class SecureRandomTest extends \Test\TestCase {
}
/**
- * @expectedException \Exception
- * @expectedExceptionMessage Generator is not initialized
+ * @dataProvider stringGenerationProvider
*/
- function testUninitializedGenerate() {
- $this->rng->generate(30);
+ function testUninitializedGenerate($length, $expectedLength) {
+ $this->assertEquals($expectedLength, strlen($this->rng->generate($length)));
}
/**
diff --git a/tests/lib/security/stringutils.php b/tests/lib/security/stringutils.php
deleted file mode 100644
index 060315debb4..00000000000
--- a/tests/lib/security/stringutils.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-/**
- * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-use \OC\Security\StringUtils;
-
-class StringUtilsTest extends \Test\TestCase {
-
- public function dataProvider()
- {
- return array(
- array('Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.', 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.'),
- array('', ''),
- array('我看这本书。 我看這本書', '我看这本书。 我看這本書'),
- array('GpKY9fSnWNJbES99zVGvA', 'GpKY9fSnWNJbES99zVGvA')
- );
- }
-
- /**
- * @dataProvider dataProvider
- */
- function testWrongEquals($string) {
- $this->assertFalse(StringUtils::equals($string, 'A Completely Wrong String'));
- $this->assertFalse(StringUtils::equals($string, null));
- }
-
- /**
- * @dataProvider dataProvider
- */
- function testTrueEquals($string, $expected) {
- $this->assertTrue(StringUtils::equals($string, $expected));
- }
-
-}
diff --git a/tests/lib/server.php b/tests/lib/server.php
index b72bef82036..e2670061e8d 100644
--- a/tests/lib/server.php
+++ b/tests/lib/server.php
@@ -38,7 +38,8 @@ class Server extends \Test\TestCase {
public function setUp() {
parent::setUp();
- $this->server = new \OC\Server('');
+ $config = new \OC\Config(\OC::$configDir);
+ $this->server = new \OC\Server('', $config);
}
public function dataTestQuery() {
@@ -61,6 +62,7 @@ class Server extends \Test\TestCase {
['CapabilitiesManager', '\OC\CapabilitiesManager'],
['ContactsManager', '\OC\ContactsManager'],
['ContactsManager', '\OCP\Contacts\IManager'],
+ ['CommentsManager', '\OCP\Comments\ICommentsManager'],
['Crypto', '\OC\Security\Crypto'],
['Crypto', '\OCP\Security\ICrypto'],
['CryptoWrapper', '\OC\Session\CryptoWrapper'],
@@ -173,4 +175,16 @@ class Server extends \Test\TestCase {
$this->assertInstanceOf('\OC_EventSource', $this->server->createEventSource(), 'service returned by "createEventSource" did not return the right class');
$this->assertInstanceOf('\OCP\IEventSource', $this->server->createEventSource(), 'service returned by "createEventSource" did not return the right class');
}
+
+ public function testOverwriteDefaultCommentsManager() {
+ $config = $this->server->getConfig();
+ $defaultManagerFactory = $config->getSystemValue('comments.managerFactory', '\OC\Comments\ManagerFactory');
+
+ $config->setSystemValue('comments.managerFactory', '\Test\Comments\FakeFactory');
+
+ $manager = $this->server->getCommentsManager();
+ $this->assertInstanceOf('\OCP\Comments\ICommentsManager', $manager);
+
+ $config->setSystemValue('comments.managerFactory', $defaultManagerFactory);
+ }
}
diff --git a/tests/lib/setup.php b/tests/lib/setup.php
index 72c84520056..bc78c14008f 100644
--- a/tests/lib/setup.php
+++ b/tests/lib/setup.php
@@ -130,17 +130,4 @@ class Test_OC_Setup extends \Test\TestCase {
->will($this->returnValue('NotAnArray'));
$this->setupClass->getSupportedDatabases();
}
-
- /**
- * This is actual more an integration test whether the version parameter in the .htaccess
- * was updated as well when the version has been incremented.
- * If it hasn't this test will fail.
- */
- public function testHtaccessIsCurrent() {
- $result = self::invokePrivate(
- $this->setupClass,
- 'isCurrentHtaccess'
- );
- $this->assertTrue($result);
- }
}
diff --git a/tests/lib/share/MailNotificationsTest.php b/tests/lib/share/MailNotificationsTest.php
index 8684886e798..66bec8653fb 100644
--- a/tests/lib/share/MailNotificationsTest.php
+++ b/tests/lib/share/MailNotificationsTest.php
@@ -20,7 +20,6 @@
*/
use OC\Share\MailNotifications;
-use OCP\IConfig;
use OCP\IL10N;
use OCP\IUser;
use OCP\Mail\IMailer;
@@ -234,6 +233,9 @@ class MailNotificationsTest extends \Test\TestCase {
}
+ /**
+ * @param string $subject
+ */
protected function setupMailerMock($subject, $to, $exceptionOnSend = true) {
$message = $this->getMockBuilder('\OC\Mail\Message')
->disableOriginalConstructor()->getMock();
diff --git a/tests/lib/share/helper.php b/tests/lib/share/helper.php
index e37a3db8bf0..eaa29c8cb90 100644
--- a/tests/lib/share/helper.php
+++ b/tests/lib/share/helper.php
@@ -19,6 +19,10 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
+/**
+ * @group DB
+ * Class Test_Share_Helper
+ */
class Test_Share_Helper extends \Test\TestCase {
public function expireDateProvider() {
@@ -121,4 +125,37 @@ class Test_Share_Helper extends \Test\TestCase {
public function testSplitUserRemoteError($id) {
\OC\Share\Helper::splitUserRemote($id);
}
+
+ /**
+ * @dataProvider dataTestCompareServerAddresses
+ *
+ * @param string $server1
+ * @param string $server2
+ * @param bool $expected
+ */
+ public function testIsSameUserOnSameServer($user1, $server1, $user2, $server2, $expected) {
+ $this->assertSame($expected,
+ \OC\Share\Helper::isSameUserOnSameServer($user1, $server1, $user2, $server2)
+ );
+ }
+
+ public function dataTestCompareServerAddresses() {
+ return [
+ ['user1', 'http://server1', 'user1', 'http://server1', true],
+ ['user1', 'https://server1', 'user1', 'http://server1', true],
+ ['user1', 'http://serVer1', 'user1', 'http://server1', true],
+ ['user1', 'http://server1/', 'user1', 'http://server1', true],
+ ['user1', 'server1', 'user1', 'http://server1', true],
+ ['user1', 'http://server1', 'user1', 'http://server2', false],
+ ['user1', 'https://server1', 'user1', 'http://server2', false],
+ ['user1', 'http://serVer1', 'user1', 'http://serer2', false],
+ ['user1', 'http://server1/', 'user1', 'http://server2', false],
+ ['user1', 'server1', 'user1', 'http://server2', false],
+ ['user1', 'http://server1', 'user2', 'http://server1', false],
+ ['user1', 'https://server1', 'user2', 'http://server1', false],
+ ['user1', 'http://serVer1', 'user2', 'http://server1', false],
+ ['user1', 'http://server1/', 'user2', 'http://server1', false],
+ ['user1', 'server1', 'user2', 'http://server1', false],
+ ];
+ }
}
diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
index fa19577cb72..5162a03f367 100644
--- a/tests/lib/share/share.php
+++ b/tests/lib/share/share.php
@@ -54,13 +54,13 @@ class Test_Share extends \Test\TestCase {
$this->user5 = $this->getUniqueID('user5_');
$this->user6 = $this->getUniqueID('user6_');
$this->groupAndUser = $this->getUniqueID('groupAndUser_');
- OC_User::createUser($this->user1, 'pass');
- OC_User::createUser($this->user2, 'pass');
- OC_User::createUser($this->user3, 'pass');
- OC_User::createUser($this->user4, 'pass');
- OC_User::createUser($this->user5, 'pass');
- OC_User::createUser($this->user6, 'pass'); // no group
- OC_User::createUser($this->groupAndUser, 'pass');
+ \OC::$server->getUserManager()->createUser($this->user1, 'pass');
+ \OC::$server->getUserManager()->createUser($this->user2, 'pass');
+ \OC::$server->getUserManager()->createUser($this->user3, 'pass');
+ \OC::$server->getUserManager()->createUser($this->user4, 'pass');
+ \OC::$server->getUserManager()->createUser($this->user5, 'pass');
+ \OC::$server->getUserManager()->createUser($this->user6, 'pass'); // no group
+ \OC::$server->getUserManager()->createUser($this->groupAndUser, 'pass');
OC_User::setUserId($this->user1);
OC_Group::clearBackends();
OC_Group::useBackend(new OC_Group_Dummy);
@@ -94,13 +94,20 @@ class Test_Share extends \Test\TestCase {
$query->execute(array('test'));
\OC::$server->getAppConfig()->setValue('core', 'shareapi_allow_resharing', $this->resharing);
- OC_User::deleteUser($this->user1);
- OC_User::deleteUser($this->user2);
- OC_User::deleteUser($this->user3);
- OC_User::deleteUser($this->user4);
- OC_User::deleteUser($this->user5);
- OC_User::deleteUser($this->user6);
- OC_User::deleteUser($this->groupAndUser);
+ $user = \OC::$server->getUserManager()->get($this->user1);
+ if ($user !== null) { $user->delete(); }
+ $user = \OC::$server->getUserManager()->get($this->user2);
+ if ($user !== null) { $user->delete(); }
+ $user = \OC::$server->getUserManager()->get($this->user3);
+ if ($user !== null) { $user->delete(); }
+ $user = \OC::$server->getUserManager()->get($this->user4);
+ if ($user !== null) { $user->delete(); }
+ $user = \OC::$server->getUserManager()->get($this->user5);
+ if ($user !== null) { $user->delete(); }
+ $user = \OC::$server->getUserManager()->get($this->user6);
+ if ($user !== null) { $user->delete(); }
+ $user = \OC::$server->getUserManager()->get($this->groupAndUser);
+ if ($user !== null) { $user->delete(); }
OC_Group::deleteGroup($this->group1);
OC_Group::deleteGroup($this->group2);
@@ -375,7 +382,8 @@ class Test_Share extends \Test\TestCase {
// Remove user
OC_User::setUserId($this->user1);
- OC_User::deleteUser($this->user1);
+ $user = \OC::$server->getUserManager()->get($this->user1);
+ if ($user !== null) { $user->delete(); }
OC_User::setUserId($this->user2);
$this->assertEquals(array('test1.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
}
diff --git a/tests/lib/streamwrappers.php b/tests/lib/streamwrappers.php
index 9b097535280..7175683a60b 100644
--- a/tests/lib/streamwrappers.php
+++ b/tests/lib/streamwrappers.php
@@ -55,7 +55,7 @@ class Test_StreamWrappers extends \Test\TestCase {
public function testCloseStream() {
//ensure all basic stream stuff works
$sourceFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
- $tmpFile = OC_Helper::TmpFile('.txt');
+ $tmpFile = \OC::$server->getTempManager()->getTemporaryFile('.txt');
$file = 'close://' . $tmpFile;
$this->assertTrue(file_exists($file));
file_put_contents($file, file_get_contents($sourceFile));
@@ -65,7 +65,7 @@ class Test_StreamWrappers extends \Test\TestCase {
$this->assertFalse(file_exists($file));
//test callback
- $tmpFile = OC_Helper::TmpFile('.txt');
+ $tmpFile = \OC::$server->getTempManager()->getTemporaryFile('.txt');
$file = 'close://' . $tmpFile;
$actual = false;
$callback = function($path) use (&$actual) { $actual = $path; };
diff --git a/tests/lib/tags.php b/tests/lib/tags.php
index a8f59ff16e4..537c898da13 100644
--- a/tests/lib/tags.php
+++ b/tests/lib/tags.php
@@ -44,7 +44,7 @@ class Test_Tags extends \Test\TestCase {
OC_User::clearBackends();
OC_User::useBackend('dummy');
$userId = $this->getUniqueID('user_');
- OC_User::createUser($userId, 'pass');
+ \OC::$server->getUserManager()->createUser($userId, 'pass');
OC_User::setUserId($userId);
$this->user = new OC\User\User($userId, null);
$this->userSession = $this->getMock('\OCP\IUserSession');
@@ -290,7 +290,7 @@ class Test_Tags extends \Test\TestCase {
$tagger->tagAs(1, $testTag);
$otherUserId = $this->getUniqueID('user2_');
- OC_User::createUser($otherUserId, 'pass');
+ \OC::$server->getUserManager()->createUser($otherUserId, 'pass');
OC_User::setUserId($otherUserId);
$otherUserSession = $this->getMock('\OCP\IUserSession');
$otherUserSession
diff --git a/tests/lib/testcase.php b/tests/lib/testcase.php
index 5d88fa08a6d..93b354863a9 100644
--- a/tests/lib/testcase.php
+++ b/tests/lib/testcase.php
@@ -33,7 +33,8 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
private $commandBus;
/** @var IDBConnection */
- static private $realDatabase;
+ static protected $realDatabase = null;
+ static private $wasDatabaseAllowed = false;
protected function getTestTraits() {
$traits = [];
@@ -52,7 +53,9 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
protected function setUp() {
// detect database access
+ self::$wasDatabaseAllowed = true;
if (!$this->IsDatabaseAccessAllowed()) {
+ self::$wasDatabaseAllowed = false;
if (is_null(self::$realDatabase)) {
self::$realDatabase = \OC::$server->getDatabaseConnection();
}
@@ -92,6 +95,12 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
throw $hookExceptions[0];
}
+ // fail hard if xml errors have not been cleaned up
+ $errors = libxml_get_errors();
+ libxml_clear_errors();
+ $this->assertEquals([], $errors);
+
+ // tearDown the traits
$traits = $this->getTestTraits();
foreach ($traits as $trait) {
$methodName = 'tearDown' . basename(str_replace('\\', '/', $trait));
@@ -149,12 +158,21 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
}
public static function tearDownAfterClass() {
+ if (!self::$wasDatabaseAllowed && self::$realDatabase !== null) {
+ // in case an error is thrown in a test, PHPUnit jumps straight to tearDownAfterClass,
+ // so we need the database again
+ \OC::$server->registerService('DatabaseConnection', function () {
+ return self::$realDatabase;
+ });
+ }
$dataDir = \OC::$server->getConfig()->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data-autotest');
- $queryBuilder = \OC::$server->getDatabaseConnection()->getQueryBuilder();
+ if (self::$wasDatabaseAllowed && \OC::$server->getDatabaseConnection()) {
+ $queryBuilder = \OC::$server->getDatabaseConnection()->getQueryBuilder();
- self::tearDownAfterClassCleanShares($queryBuilder);
- self::tearDownAfterClassCleanStorages($queryBuilder);
- self::tearDownAfterClassCleanFileCache($queryBuilder);
+ self::tearDownAfterClassCleanShares($queryBuilder);
+ self::tearDownAfterClassCleanStorages($queryBuilder);
+ self::tearDownAfterClassCleanFileCache($queryBuilder);
+ }
self::tearDownAfterClassCleanStrayDataFiles($dataDir);
self::tearDownAfterClassCleanStrayHooks();
self::tearDownAfterClassCleanStrayLocks();
diff --git a/tests/lib/updater.php b/tests/lib/updater.php
index 14ae3db3276..313ffb65738 100644
--- a/tests/lib/updater.php
+++ b/tests/lib/updater.php
@@ -66,7 +66,7 @@ class UpdaterTest extends \Test\TestCase {
* @return string
*/
private function buildUpdateUrl($baseUrl) {
- return $baseUrl . '?version='.implode('x', \OC_Util::getVersion()).'xinstalledatxlastupdatedatx'.\OC_Util::getChannel().'x'.\OC_Util::getEditionString().'x';
+ return $baseUrl . '?version='.implode('x', \OCP\Util::getVersion()).'xinstalledatxlastupdatedatx'.\OC_Util::getChannel().'x'.\OC_Util::getEditionString().'x';
}
/**
diff --git a/tests/lib/user.php b/tests/lib/user.php
index bc1ba063c8f..c4c74cbc254 100644
--- a/tests/lib/user.php
+++ b/tests/lib/user.php
@@ -26,7 +26,7 @@ class User extends TestCase {
parent::setUp();
$this->backend = $this->getMock('\Test\Util\User\Dummy');
- $manager = \OC_User::getManager();
+ $manager = \OC::$server->getUserManager();
$manager->registerBackend($this->backend);
}
@@ -51,30 +51,5 @@ class User extends TestCase {
$uid = \OC_User::checkPassword('foo', 'bar');
$this->assertEquals($uid, 'foo');
}
-
- public function testDeleteUser() {
- $fail = \OC_User::deleteUser('victim');
- $this->assertFalse($fail);
-
- $success = \OC_User::createUser('victim', 'password');
-
- $success = \OC_User::deleteUser('victim');
- $this->assertTrue($success);
- }
-
- public function testCreateUser(){
- $this->backend->expects($this->any())
- ->method('implementsActions')
- ->will($this->returnCallback(function ($actions) {
- if ($actions === \OC_USER_BACKEND_CREATE_USER) {
- return true;
- } else {
- return false;
- }
- }));
-
- $user = \OC_User::createUser('newuser', 'newpassword');
- $this->assertEquals('newuser', $user->getUid());
- }
}
diff --git a/tests/lib/util.php b/tests/lib/util.php
index fa559c17c80..cb5d28b48a7 100644
--- a/tests/lib/util.php
+++ b/tests/lib/util.php
@@ -8,7 +8,7 @@
*/
class Test_Util extends \Test\TestCase {
public function testGetVersion() {
- $version = \OC_Util::getVersion();
+ $version = \OCP\Util::getVersion();
$this->assertTrue(is_array($version));
foreach ($version as $num) {
$this->assertTrue(is_int($num));
diff --git a/tests/lib/utilcheckserver.php b/tests/lib/utilcheckserver.php
index a5ec529ff85..94e7fd2f779 100644
--- a/tests/lib/utilcheckserver.php
+++ b/tests/lib/utilcheckserver.php
@@ -37,7 +37,7 @@ class Test_Util_CheckServer extends \Test\TestCase {
protected function setUp() {
parent::setUp();
- $this->datadir = \OC_Helper::tmpFolder();
+ $this->datadir = \OC::$server->getTempManager()->getTemporaryFolder();
file_put_contents($this->datadir . '/.ocdata', '');
\OC::$server->getSession()->set('checkServer_succeeded', false);
@@ -123,7 +123,7 @@ class Test_Util_CheckServer extends \Test\TestCase {
$result = \OC_Util::checkServer($this->getConfig(array(
'installed' => true,
- 'version' => implode('.', OC_Util::getVersion())
+ 'version' => implode('.', \OCP\Util::getVersion())
)));
$this->assertCount(1, $result);
}
@@ -134,7 +134,7 @@ class Test_Util_CheckServer extends \Test\TestCase {
public function testDataDirWritable() {
$result = \OC_Util::checkServer($this->getConfig(array(
'installed' => true,
- 'version' => implode('.', OC_Util::getVersion())
+ 'version' => implode('.', \OCP\Util::getVersion())
)));
$this->assertEmpty($result);
}
@@ -150,7 +150,7 @@ class Test_Util_CheckServer extends \Test\TestCase {
chmod($this->datadir, 0300);
$result = \OC_Util::checkServer($this->getConfig(array(
'installed' => true,
- 'version' => implode('.', OC_Util::getVersion())
+ 'version' => implode('.', \OCP\Util::getVersion())
)));
$this->assertCount(1, $result);
}
@@ -162,7 +162,7 @@ class Test_Util_CheckServer extends \Test\TestCase {
chmod($this->datadir, 0300);
$result = \OC_Util::checkServer($this->getConfig(array(
'installed' => false,
- 'version' => implode('.', OC_Util::getVersion())
+ 'version' => implode('.', \OCP\Util::getVersion())
)));
chmod($this->datadir, 0700); //needed for cleanup
$this->assertEmpty($result);
diff --git a/tests/phpunit-autotest-external.xml b/tests/phpunit-autotest-external.xml
index b9402bfa572..31d2e395a01 100644
--- a/tests/phpunit-autotest-external.xml
+++ b/tests/phpunit-autotest-external.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" ?>
<phpunit bootstrap="bootstrap.php"
- strict="true"
verbose="true"
timeoutForSmallTests="900"
timeoutForMediumTests="900"
diff --git a/tests/startsessionlistener.php b/tests/startsessionlistener.php
index 1f3573555ca..88544cc6ce9 100644
--- a/tests/startsessionlistener.php
+++ b/tests/startsessionlistener.php
@@ -44,4 +44,7 @@ class StartSessionListener implements PHPUnit_Framework_TestListener {
public function endTestSuite(PHPUnit_Framework_TestSuite $suite) {
}
+ public function addWarning(\PHPUnit_Framework_Test $test, \PHPUnit_Framework_Warning $e, $time) {
+ }
+
}